0% found this document useful (0 votes)
173 views

Dynamic Screen

This document describes an RPG program that uses DSM input fields. It defines variables to dynamically create two input fields - one for an "Item" with a length of 10 and location of row 7 column 10, and another for "Cost" with length of 7 and location of row 9 column 10. The program initializes the "Item" field with "HAMMER", creates the necessary buffers, clears the screen, writes the field definitions and initial data, allowing the user to modify the input fields.

Uploaded by

Nitin Sadashiv
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
173 views

Dynamic Screen

This document describes an RPG program that uses DSM input fields. It defines variables to dynamically create two input fields - one for an "Item" with a length of 10 and location of row 7 column 10, and another for "Cost" with length of 7 and location of row 9 column 10. The program initializes the "Item" field with "HAMMER", creates the necessary buffers, clears the screen, writes the field definitions and initial data, allowing the user to modify the input fields.

Uploaded by

Nitin Sadashiv
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 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