You are on page 1of 5

************************************************** **********************

**
* PROGRAM - DSM001R *
* FUNCTION - Example of DSM Input Fields *
* LANGUAGE - ILE RPG IV (use CRTBNDRPG on V4R4 or higher) *
* AUTHOR - Gene Gaunt *
* *
* This program is functionally equivalent to the following DDS & RPG: *
* *
* A R SCREEN1 BLINK PUTOVR *
* A 7 3'ITEM:' *
* A ITEM_NO 10A B 7 10 *
* A 51 DSPATR(RI PC) OVRATR *
* A 9 3'COST:' *
* A ITEM_COST 7Y 0B 9 10EDTCDE(4) OVRATR *
* A 23 2'ENTER=ok' COLOR(BLU) *
* *
* FTEST CF E workstn *
* C movel(p) 'HAMMER' Item_No *
* C exfmt SCREEN1 *
* C move *on *IN51 *
* C exfmt SCREEN1 *
* C move *on *INLR *
************************************************** **********************
**
H dftactgrp( *no )
D ClrBuf PR extproc( 'QsnClrBuf' )
clear buffer
D Buffer 10I 0
D ErrorCode 10I 0 const
D ClrScr PR extproc( 'QsnClrScr' )
clear screen
D Mode 1A const
D CmdBuf 10I 0
D LowLevel 10I 0 const
D ErrorCode 10I 0 const
D CrtCmdBuf PR extproc( 'QsnCrtCmdBuf' )
create command buff
D InitSize 10I 0 const
D Increment 10I 0 const
D Maximum 10I 0 const
D CmdBuf 10I 0
D ErrorCode 10I 0 const
D CrtInpBuf PR extproc( 'QsnCrtInpBuf' )
create input buffer
D InitSize 10I 0 const
D Increment 10I 0 const
D Maximum 10I 0 const
D CmdBuf 10I 0
D ErrorCode 10I 0 const
D DltBuf PR extproc( 'QsnDltBuf' )
delete buffer
D Buffer 10I 0
D ErrorCode 10I 0 const
D ReadMDT PR extproc( 'QsnReadMDT' )
read modified fields
D ControlChar1 1A const
D ControlChar2 1A const
D FldCnt 10I 0
D InpBuf 10I 0
D CmdBuf 10I 0
D LowLevel 10I 0 const
D ErrorCode 10I 0 const
D RtvDta PR extproc( 'QsnRtvDta' )
retrieve data
D InpBuf 10I 0
D Data *
D ErrorCode 10I 0 const
D RtvDtaLen PR extproc( 'QsnRtvDtaLen' )
retrieve data length
D InpBuf 10I 0
D DataLen 10I 0
D ErrorCode 10I 0 const
D SetCsrAdr PR extproc( 'QsnSetCsrAdr' )
set cursor address
D FieldId 10I 0 const
D Row 10I 0 const
D Column 10I 0 const
D CmdBuf 10I 0
D LowLevel 10I 0 const
D ErrorCode 10I 0 const
D SetFld PR extproc( 'QsnSetFld' )
set field
D FieldId 10I 0 const
D FieldLength 10I 0 const
D Row 10I 0 const
D Column 10I 0 const
D FldFmtWord 2A const
D FldCtlWord 10A const
D FldCtlCount 10I 0 const
D MonoAttr 1A const
D ColorAttr 1A const
D CmdBuf 10I 0
D LowLevel 10I 0 const
D ErrorCode 10I 0 const
D WrtDta PR extproc( 'QsnWrtDta' )
write data
D Data 32767A const
D DataLength 10I 0 const
D FieldId 10I 0 const
D Row 10I 0 const
D Column 10I 0 const
D StartMono 1A const
D EndMono 1A const
D StartColor 1A const
D EndColor 1A const
D CmdBuf 10I 0
D LowLevel 10I 0 const
D ErrorCode 10I 0 const
D WTD PR extproc( 'QsnWTD' )
write to display
D ControlChar1 1A const
D ControlChar2 1A const
D CmdBuf 10I 0
D LowerLevel 10I 0 const
D ErrorCode 10I 0 const
D CmdBuf S 10I 0
D FldCnt S 10I 0
D InpBuf S 10I 0
D DataLen S 10I 0
D Work S 32767A based( Work@ )
D Max C const( 2 )
D DS
D Force_Align *
D Var 32A dim( Max )
D VarPtr * overlay( Var : 1 )
D Var_Id 10I 0 overlay( Var : 17 )
D VarLen 10I 0 overlay( Var : 21 )
D VarRow 3U 0 overlay( Var : 25 )
D VarCol 3U 0 overlay( Var : 26 )
D VarRowCol 2A overlay( Var : 25 )
D DS based( Data@ )
D DataByte 1A
D DataRowCol 2A
D Data 32767A
* dynamically define "Item" input field
C z-add 10 VarLen( 1 )
C z-add 7 VarRow( 1 )
C z-add 10 VarCol( 1 )
* dynamically define "Cost" input field
C z-add 7 VarLen( 2 )
C z-add 9 VarRow( 2 )
C z-add 10 VarCol( 2 )
* allocate storage for input fields
C 1 do Max X
C z-add X Var_Id( X )
C alloc VarLen( X ) VarPtr( X )
C move VarPtr( X ) Work@
C eval %subst( Work : 1 : VarLen( X )) = *blanks
C enddo
* initialize "Item" field
C move VarPtr( 1 ) Work@
C movel 'HAMMER' Work
* create command buffer
C callp CrtCmdBuf( 6300 : 6300 : 0 : CmdBuf : 0 )
* create input buffer
C callp CrtInpBuf( 6300 : 6300 : 0 : InpBuf : 0 )
* clear screen
C callp ClrScr( '3' : CmdBuf : 0 : 0 )
* write to display
C callp WTD( X'00' : X'18' : CmdBuf : 0 : 0 )
* write constant
C callp WrtDta( 'ITEM:' : 5 : 0 : 7 : 3 : X'20' :
C X'20' : X'20' : X'20' : CmdBuf : 0 : 0 )
* write "Item" input field
C callp SetFld( Var_Id( 1 ) :
C VarLen( 1 ) :
C VarRow( 1 ) :
C VarCol( 1 ) : X'4020' :
C ' ' : 0 : X'24' : X'24' : CmdBuf : 0 : 0 )
* overlay "Item" input field with initial data; use field ID instead of ro
w/column
C move VarPtr( 1 ) Work@
C callp WrtDta( %subst( Work : 1 : VarLen( 1 )) :
C VarLen( 1 ) :
C Var_Id( 1 ) : 0 : 0 : X'24':
C X'20' : X'24' : X'20' : CmdBuf : 0 : 0 )
* write constant
C callp WrtDta( 'COST:' : 5 : 0 : 9 : 3 : X'20' :
C X'20' : X'20' : X'20' : CmdBuf : 0 : 0 )
* write "Cost" input field
C callp SetFld( Var_Id( 2 ) :
C VarLen( 2 ) :
C VarRow( 2 ) :
C VarCol( 2 ) : X'4300' :
C ' ' : 0 : X'24' : X'24' : CmdBuf : 0 : 0 )
* write constant
C callp WrtDta( 'ENTER=ok' : 8 : 0 : 23 : 2 : X'20' :
C X'20' : X'3A' : X'20' : CmdBuf : 0 : 0 )
* put/get the screen
C exsr PutGet
* clear command buffer
C callp ClrBuf( CmdBuf : 0 )
* now show "Item" field as error; use field ID instead of row/column
C move VarPtr( 1 ) Work@
C callp WrtDta( %subst( Work : 1 : VarLen( 1 )) :
C VarLen( 1 ) :
C Var_Id( 1 ) : 0 : 0 : X'25':
C X'20' : X'25' : X'20' : CmdBuf : 0 : 0 )
* set cursor address at "Item" field; use field ID instead of row/column
C callp SetCsrAdr( Var_Id( 1 ) :
C 0 : 0 : CmdBuf : 0: 0 )
* put/get the screen
C exsr PutGet
* delete command buffer
C callp DltBuf( CmdBuf : 0 )
* delete input buffer
C callp DltBuf( InpBuf : 0 )
* clean up
C 1 do Max X
C dealloc VarPtr( X )
C enddo
C move *on *INLR
CSR PutGet begsr
* clear input buffer
C callp ClrBuf( InpBuf : 0 )
* read modified input fields
C callp ReadMDT( X'00' : X'00' :
C FldCnt : InpBuf : CmdBuf : 0 : 0 )
* retrieve data
C callp RtvDta( InpBuf : Data@ : 0 )
* retrieve data length
C callp RtvDtaLen( InpBuf : DataLen : 0 )
* parse modified input fields into our variables table
* if input byte is X'11', next two bytes are row/column, followed by data
C eval Work@ = *null
C eval Data@ = Data@ + 3
C 4 do DataLen X 10 0
C DataByte ifeq X'11'
C add 2 X
C z-add 1 Y 5 0
C DataRowCol lookup VarRowCol( Y ) 21
(EQ)
C N21 leave
C eval Work@ = VarPtr( Y )
C eval %subst( Work : 1 : VarLen( Y )) = *blanks
C eval Data@ = Data@ + 3
C else
C eval %subst( Work : 1 : 1 ) = DataByte
C eval Data@ = Data@ + 1
C eval Work@ = Work@ + 1
C endif
C enddo
C endsr

You might also like