midrange.com code scratchpad
Name:
Test Dynamic Screen Management with DDS timeout
Scriptlanguage:
Plain Text
Tabwidth:
4
Date:
08/15/2021 11:00:27 pm
IP:
Logged
Description:
Test Dynamic Screen Management with DDS and timeout
Code:
  1. TESTDSMF
  2.  
  3. --**************************************************************************************************
  4. -- FILE TO HOLD COPY OF SCREEN                                                                      
  5. --                                                                                                  
  6. -- Revision History:                                                                                
  7. --  08/11/2021 P.Dow                                                                                
  8. --  Initial version.                                                                                
  9. --                                                                                                  
  10. --**************************************************************************************************
  11. create or replace table TESTDSMF                                                                    
  12. (                                                                                                   
  13.    KeyName          char(10)  not null with default                                                 
  14.  , RowNbr           integer   not null with default                                                 
  15.  , RowData          char(132) not null with default                                                 
  16.  , PRIMARY KEY(KeyName, RowNbr)                                                                     
  17. ) RCDFMT TESTDSMrec;                                                                                
  18.  
  19.  
  20. TESTDSMD
  21.  
  22.       ********************************************************************                          
  23.       * TEST DYNAMIC SCREEN MANAGEMENT                                                              
  24.       *                                                                                             
  25.       * Revision History:                                                                           
  26.      -* 08/12/2021 P.DOW                                                                            
  27.       * Initial version.                                                                            
  28.       *                                                                                             
  29.      A********************************************************************                          
  30.      A                                      DSPSIZ(*DS3 *DS4)                                       
  31.      A          R TESTDSMF1                 INVITE                                                  
  32.      A  21                                  DSPMOD(*DS4)                                            
  33.      A                                  1  2'TESTDSM'                                               
  34.      A                                  1 27'Test Dynamic Screen Management'                        
  35.      A                                      DSPATR(HI)                                              
  36.      A                                  1 70DATE                                                    
  37.      A                                      EDTCDE(Y)                                               
  38.      A                                  2 70TIME                                                    
  39.      A                                      EDTWRD(' 0:  :  ')                                      
  40.      A N21                              3 11'Key some data but do NOT press -                       
  41.      A                                      ENTER.'                                                 
  42.      A N21                              4 11'Capture should happen after 10 -                       
  43.      A                                      seconds.'                                               
  44.      A  21                              4 21'Key some data but do NOT press -                       
  45.      A                                      ENTER. Capture should happen -                          
  46.      A                                      within 10 seconds.'                                     
  47.      A            SOMEDATA1     50A  B  6 11CHECK(LC)                                               
  48.      A  *DS4                            6 21                                                        
  49.      A  21                                  COLOR(RED)                                              
  50.      A            SOMEDATA2     50A  B  7 11CHECK(LC)                                               
  51.      A  *DS4                            7 21                                                        
  52.      A  21                                  COLOR(YLW)                                              
  53.      A            SOMEDATA3     50A  B  8 11CHECK(LC)                                               
  54.      A  *DS4                            8 21                                                        
  55.      A  21                                  COLOR(GRN)                                              
  56.      A            SOMEDATA4     50A  B  9 11CHECK(LC)                                               
  57.      A  *DS4                            9 21                                                        
  58.      A  21                                  COLOR(BLU)                                              
  59.      A            SOMEDATA5     50A  B 10 11CHECK(LC)                                               
  60.      A  *DS4                           10 21                                                        
  61.      A  21                                  COLOR(TRQ)                                              
  62.  
  63.  
  64. TESTDSM
  65.  
  66.      h option(*nodebugio: *srcstmt)                                                                 
  67.      h dftactgrp(*no) actgrp(*new)                                                                  
  68.      h bnddir('QC2LE')                                                                              
  69.                                                                                                     
  70.       **********************************************************************************************
  71.       * TEST DYNAMIC SCREEN MANAGEMENT                                                              
  72.       *                                                                                             
  73.       *   This program displays a screen with several input fields, and allows the user             
  74.       *   up to 10 seconds to enter some data. Without the user pressing any AID key,               
  75.       *   the data they entered will be read via an API and written to the TESTDSMF file,           
  76.       *   and the program will end.                                                                 
  77.       *                                                                                             
  78.       * This program uses excerpts from http://www.redbooks.ibm.com/redpapers/pdfs/redp4321.pdf     
  79.       *                                                                                             
  80.       * The main points used are:                                                                   
  81.       *                                                                                             
  82.       * The Create Input Buffer API is called to get a buffer handle for the screen.                
  83.       * Only call the remainder of the DSM APIs if a buffer handle was successfully created.        
  84.       *                                                                                             
  85.       * Read the screen and determine the number of bytes returned; this will be 1920 for a         
  86.       * 24x80 screen or 3564 for a 27x132 screen. This API captures all characters currently        
  87.       * on the screen at the time it was called.                                                    
  88.       *                                                                                             
  89.       * Get a pointer to the buffer for the screen just read.                                       
  90.       *                                                                                             
  91.       **********************************************************************************************
  92.                                                                                                     
  93.      fTESTDSMD  cf   e             workstn                                                          
  94.      fTESTDSMF  o    e             disk                                                             
  95.                                                                                                     
  96.                                                                                                     
  97.       * Prototypes                                                                                  
  98.                                                                                                     
  99.      d TESTDSM         pi                                                       *ENTRY parms        
  100.      d  peNAME                       32a                                                            
  101.                                                                                                     
  102.       * Dynamic Screen Manager APIs                                                                 
  103.                                                                                                     
  104.      d CreateInputBuffer...                                                                         
  105.      d                 pr            10i 0 ExtProc( 'QsnCrtInpBuf' )                                
  106.      d BufferSize                    10i 0 Const                                                    
  107.      d Increment                     10i 0 Const Options(*Omit)                                     
  108.      d MaximumSize                   10i 0 Const Options(*Omit)                                     
  109.      d BufferHandle                  10i 0 Options(*Omit)                                           
  110.      d Error                               Like(APIError) Options(*OMIT)                            
  111.                                                                                                     
  112.      d ReadScreen      pr            10i 0 ExtProc( 'QsnReadScr' )                                  
  113.      d BytesRead                     10i 0 Options( *Omit )                                         
  114.      d BufferHandle                  10i 0 Const Options( *Omit )                                   
  115.      d CmdBufferhandle...                                                                           
  116.      d                               10i 0 Const Options( *Omit )                                   
  117.      d EnvironmentHandle...                                                                         
  118.      d                               10i 0 Options( *Omit )                                         
  119.      d Error                               Like(APIError) Options(*OMIT)                            
  120.                                                                                                     
  121.      d RetrieveDataPtr...                                                                           
  122.      d                 pr              *   ExtProc( 'QsnRtvDta' )                                   
  123.      d BufferHandle                  10i 0 Const                                                    
  124.      d DataPointer                     *   Options( *Omit )                                         
  125.      d Error                               Like(APIError) Options(*OMIT)                            
  126.                                                                                                     
  127.      d sleep           pr            10u 0 extproc('sleep')                                         
  128.      d   seconds                     10u 0 value                                                    
  129.                                                                                                     
  130.                                                                                                     
  131.       * Data structures                                                                             
  132.                                                                                                     
  133.      D ProgramStatus  SDS                                                                           
  134.      D NAME                          10a   Overlay(ProgramStatus:244)                               
  135.      D USER                          10a   Overlay(ProgramStatus:254)                               
  136.      D JOBNO                          6a   Overlay(ProgramStatus:264)                               
  137.                                                                                                     
  138.       // Standard API Error data structure used with most APIs                                      
  139.      D APIError        DS                  Qualified                                                
  140.      D BytesProvided                 10I 0 inz(%size(APIError))                                     
  141.      D BytesAvail                    10I 0 inz(0)                                                   
  142.      D MsgId                          7A                                                            
  143.      D                                1A                                                            
  144.      D MsgData                      240A                                                            
  145.                                                                                                     
  146.      D ScreenIn        DS          4000    based(DataPtr)                                           
  147.                                                                                                     
  148.                                                                                                     
  149.       * Standalone variables                                                                        
  150.                                                                                                     
  151.      d i               s             10i 0                                                          
  152.      d j               s             10i 0                                                          
  153.      d NbrCols         s              3p 0                                                          
  154.      d NbrRows         s              3p 0                                                          
  155.                                                                                                     
  156.      d BufferHandle    s             10i 0                                                          
  157.      d BytesReturned   s             10i 0                                                          
  158.                                                                                                     
  159.                                                                                                     
  160.       * Main logic                                                                                  
  161.                                                                                                     
  162.         *inLR = *on;                                                                                
  163.                                                                                                     
  164.         *in21 = (%parms > *zero);                                                                   
  165.                                                                                                     
  166.         write TESTDSMF1;                                                                            
  167.                                                                                                     
  168.         sleep(10);                                                                                  
  169.                                                                                                     
  170.         BufferHandle = CreateInputBuffer( 27 * 132                                                  
  171.                                         : *Omit                                                     
  172.                                         : *Omit                                                     
  173.                                         : *Omit                                                     
  174.                                         : APIError );                                               
  175.         If APIError.BytesAvail = *zero;                                                             
  176.            BytesReturned = ReadScreen( *Omit                                                        
  177.                                      : BufferHandle                                                 
  178.                                      : *Omit                                                        
  179.                                      : *Omit                                                        
  180.                                      : *Omit );                                                     
  181.            DataPtr = RetrieveDataPtr( BufferHandle                                                  
  182.                                     : *Omit                                                         
  183.                                     : *Omit );                                                      
  184.                                                                                                     
  185.            If BytesReturned = 1920;                                                                 
  186.               NbrCols = 80;                                                                         
  187.               NbrRows = 24;                                                                         
  188.            Else;                                                                                    
  189.               NbrCols = 132;                                                                        
  190.               NbrRows = 27;                                                                         
  191.            Endif;                                                                                   
  192.                                                                                                     
  193.            j = 1;                                                                                   
  194.            for i = 1 to NbrRows;                                                                    
  195.               if %parms > *zero;                                                                    
  196.                  KeyName = peName;                                                                  
  197.               else;                                                                                 
  198.                  KeyName = %char( %time() );                                                        
  199.               endif;                                                                                
  200.               RowNbr = i;                                                                           
  201.               RowData = %subst(ScreenIn:j:NbrCols);                                                 
  202.               write TESTDSMrec;                                                                     
  203.               j += NbrCols;                                                                         
  204.            endfor;                                                                                  
  205.                                                                                                     
  206.         Endif;                                                                                      
© 2004-2019 by midrange.com generated in 0.009s valid xhtml & css