Difference between revisions of "QDFRTVFD — Retrieve Display File Description"
(initial setup) |
|||
Line 1: | Line 1: | ||
+ | __FORCETOC__ | ||
+ | == Introduction == | ||
− | I based my DSM logic on this example | + | I based my DSM logic on this example.[http://www.code400.com/forum/showthread.php/11226-Dynamic-screen-example-with-FTP] |
− | http://www.code400.com/forum/showthread.php/11226-Dynamic-screen-example-with-FTP | ||
Dynamic screen example with FTP | Dynamic screen example with FTP | ||
− | + | Thanks to Scott Klement [http://www.scottklement.com/] for posting the best samples of code on the web to play with! | |
− | the best samples of code on the web to play with! | ||
− | |||
− | |||
− | |||
− | I based my code on QDFRTVFD API on the | + | I based my code on QDFRTVFD API on the example from Scott Klement. |
− | Thank you Scott. | + | Thank you Scott. [http://archive.midrange.com/rpg400-l/200603/msg00033.html]<br> |
− | http://archive.midrange.com/rpg400-l/200603/msg00033.html | + | My code looks very different to Scotts work. But without Scotts example I would not have got anywhere. |
− | |||
− | My code looks very different to Scotts work. | ||
− | But without Scotts example I would not have got anywhere. | ||
The key to understanding the API is that on any one iteration though the | The key to understanding the API is that on any one iteration though the | ||
− | data structures ONLY ONE FIELDS INFORMATION AT A TIME is | + | data structures ONLY ONE FIELDS INFORMATION AT A TIME is retrieved. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | The DSPINFO program is not complete. <br> | |
− | + | But it does get enough info to show a layout.<br> | |
− | + | Much remains to be done; a partial list is, WINDOWS, SUBFILES, REFERENCES,ATTRIBUTES etc etc etc. <br> | |
− | + | I am now amazed and humbled by the work of the IBM programmers that set up such a thing as an external display file. | |
+ | I found IBM documention both detailed and frustrating in particular how to set the pointers to the next iteration of a DS.<br> | ||
+ | And there is a very devious bit on the indexes WDFWRRDX WDFWNMEI you must use these and never assume the fields follow some sequence. | ||
− | I am having trouble with the retreival of attributes (file , record and field) | + | I am having trouble with the retreival of attributes (file , record and field)<br> |
− | I get a weird result with edit codes. | + | I get a weird result with edit codes.<br> |
+ | <pre> | ||
#FLDEDT = '�£ ��¥¥^:�¥¥^:�¥¥ ' for 1 61TIME EDTWRD(' : : ') | #FLDEDT = '�£ ��¥¥^:�¥¥^:�¥¥ ' for 1 61TIME EDTWRD(' : : ') | ||
EVAL #FldEdt :x | EVAL #FldEdt :x | ||
00000 03B14003 03B2B2B0 7A03B2B2 B07A03B2 - .£ ..¥¥^:.¥¥^:.¥ | 00000 03B14003 03B2B2B0 7A03B2B2 B07A03B2 - .£ ..¥¥^:.¥¥^:.¥ | ||
00010 B2404040 ........ ........ ........ - ¥ ............ | 00010 B2404040 ........ ........ ........ - ¥ ............ | ||
+ | </pre> | ||
+ | I found the IBM code for the API in QSYSINC too archane to use as is.<br> | ||
+ | However it was a good start and after removing the comments and renaming fields to match the IBM docs of QDFRTVFD I used the result.<br> | ||
+ | I also reformated some of the DS to use the OVERLAY notation.<br> | ||
+ | Also there are many fields missing in the QSYSINC of the type like WDFFRC<br> | ||
− | + | <pre> | |
− | |||
− | |||
− | |||
− | |||
==== example of missing field === | ==== example of missing field === | ||
Row-Column Table (QDFFRCTB) | Row-Column Table (QDFFRCTB) | ||
Line 62: | Line 55: | ||
5 5 CHAR(1) * | 5 5 CHAR(1) * | ||
6 6 CHAR(*) WDFFRC | 6 6 CHAR(*) WDFFRC | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | |||
+ | [[#top]] | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | === DSPINFO Svc Pgm === | ||
+ | |||
+ | <pre> | ||
+ | *------------------------------------------------------------------- | ||
+ | * = Service program... DspFInfo= | ||
+ | * = Description....... Retrieve display file information routines= | ||
+ | *------------------------------------------------------------------- | ||
+ | * CRTSQLRPGI OBJ(urlib/DSPFINFO) | ||
+ | * SRCFILE(urlib/ursrcfile) | ||
+ | * SRCMBR(DSPFINFO) | ||
+ | * OBJTYPE(*MODULE) REPLACE(*yes) | ||
+ | * REPLACE(*yes) | ||
+ | * CRTSRVPGM SRVPGM(urlib/DSPFINFO) | ||
+ | * MODULE(urlib/DSPFINFO) | ||
+ | * EXPORT(*ALL) | ||
+ | * | ||
+ | * The FIELDKWDS has an error. | ||
+ | * So the attributes of the DATE and TIME are WRONG | ||
+ | * | ||
+ | |||
+ | H NoMain | ||
+ | |||
+ | *------------------------------------------------------------------- | ||
+ | * - RtvDspFDesc - Retrieve display file description (QDFRTVFD API)- | ||
+ | *------------------------------------------------------------------- | ||
+ | |||
+ | D RtvDspFDesc PR ExtPgm( 'QDFRTVFD' ) | ||
+ | D 8 | ||
+ | D 10I 0 Const | ||
+ | D 8 Const | ||
+ | D 20 Const | ||
+ | D 272 | ||
+ | |||
+ | |||
+ | D RtvFlds PR N | ||
+ | D QDspFil 20A Value | ||
+ | D QNumFlds 10I 0 | ||
+ | D QFlddta Like(FldDtaDS) | ||
+ | |||
+ | D FldDtaDS DS Based (p_FldDtaDS) occurs(1000) | ||
+ | D #FmtNam 10A | ||
+ | D #FldNam 10A | ||
+ | D #FldLen 5I 0 | ||
+ | D #FldPlen 5I 0 | ||
+ | D #FldDec 1 | ||
+ | D #FldIO 1 | ||
+ | D #FldAtr 1 | ||
+ | D #FldDTUS 1 | ||
+ | D #FldEdt 20A | ||
+ | D #FldRow 10I 0 | ||
+ | D #FldCol 10I 0 | ||
+ | D #FldCom 4000A varying | ||
+ | *---------------------------------------------------------------* | ||
+ | * Retrieve Display File Fields * | ||
+ | *---------------------------------------------------------------* | ||
+ | |||
+ | P RtvFlds B Export | ||
+ | |||
+ | |||
+ | |||
+ | D RtvFlds PI Like(LglTyp) | ||
+ | D QDspFil Like( QNamTyp ) Value | ||
+ | D Numflds 10I 0 | ||
+ | D FldDta Like(FldDtaDS) | ||
+ | |||
+ | |||
+ | *------------------------------------------------------------------- | ||
+ | * - Base - | ||
+ | *------------------------------------------------------------------- | ||
+ | |||
+ | D QDFFBASE DS Based( p_QDFFBASE) qualified | ||
+ | D WDFFINFO 5I 0 Overlay( QDFFBASE : 9 ) | ||
+ | D WDFFRCS 5I 0 Overlay( QDFFBASE : 11 ) | ||
+ | D WDFFSCR 5I 0 Overlay( QDFFBASE : 14 ) | ||
+ | D WDFFSCRS 1A Overlay( QDFFBASE : 20 ) | ||
+ | |||
+ | * p_QDFFSCRA = %addr( QDFFBASE.WDFFSCRS) first | ||
+ | * p_QDFFSCRA = P_QDFFSCRA + %size(QDFFSCRA) * n next | ||
+ | DQDFFSCRA DS Based( p_QDFFSCRA ) qualified | ||
+ | D WDFFSCIA 1 1 | ||
+ | D WDFRVED2 2 5 | ||
+ | |||
+ | DQDFFSSEQ DS Based( p_QDFFSSEQ ) qualified | ||
+ | D WDFFFSST 1 256 | ||
+ | D WDFFFSSC 257 260U 0 | ||
+ | D WDFFFSSN 261 270 | ||
+ | D WDFFFSSL 271 280 | ||
+ | D WDFBITS00 281 282 | ||
+ | D WDFRVED4 283 308 | ||
+ | |||
+ | *------------------------------------------------------------------- | ||
+ | * - File Header - | ||
+ | * p_QDFFINFO = p_QDFFBASE + QDFFBASE.WDFFINFO | ||
+ | *------------------------------------------------------------------- | ||
+ | D QDFFINFO DS Based( p_QDFFINFO) qualified | ||
+ | D WDFFDFLO 10I 0 Overlay( QDFFINFO : 1 ) | ||
+ | D WDFFWUOF 10I 0 Overlay( QDFFINFO : 5 ) | ||
+ | D WDFFFMWU 10I 0 Overlay( QDFFINFO : 9 ) | ||
+ | D WDFFXDOF 5I 0 Overlay( QDFFINFO : 35) | ||
+ | D ZDFF 1 50A | ||
+ | |||
+ | *------------------------------------------------------------------- | ||
+ | * - File Where Used - | ||
+ | * p_QDFWFLEI = p_QDFFINFO + QDFFINFO.WDFFWUOF | ||
+ | *------------------------------------------------------------------- | ||
+ | D QDFWFLEI DS Based( p_QDFWFLEI) qualified | ||
+ | D WDFWXLEN 5I 0 Overlay( QDFWFLEI : 1 ) | ||
+ | D WDFWXOKW 5I 0 Overlay( QDFWFLEI : 3 ) | ||
+ | D WDFWWULN 10I 0 Overlay( QDFWFLEI : 5 ) | ||
+ | D WDFWNTBO 10I 0 Overlay( QDFWFLEI : 9 ) | ||
+ | D WDFFWXIN 5I 0 Overlay( QDFWFLEI : 12) | ||
+ | // pointer | ||
+ | D WDFWINDX 1A Overlay( QDFWFLEI : 19) | ||
+ | *------------------------------------------------------------------- | ||
+ | * - File Dev Dept - | ||
+ | * p_QDFFDPDD = p_QDFFINFO + QDFFINFO.WDFFXDOF | ||
+ | *------------------------------------------------------------------- | ||
+ | D QDFFDPDD DS Based( p_QDFFDPDD) qualified | ||
+ | D WDFFFKWD 5I 0 Overlay( QDFFDPDD : 9 ) | ||
+ | D WDFFSHB1 5I 0 Overlay( QDFFDPDD : 13) | ||
+ | D WDFFSHRA 5I 0 Overlay( QDFFDPDD : 16) | ||
+ | D WDFFCKY1 5I 0 Overlay( QDFFDPDD : 17) | ||
+ | D WDFFCKY2 5I 0 Overlay( QDFFDPDD : 18) | ||
+ | D WDFFCKY3 5I 0 Overlay( QDFFDPDD : 19) | ||
+ | D WDFFMKWD 5I 0 Overlay( QDFFDPDD : 20) | ||
+ | D WDFFMKW2 5I 0 Overlay( QDFFDPDD : 21) | ||
+ | D WDFFXDOC 5I 0 Overlay( QDFFDPDD : 25) | ||
+ | |||
+ | *------------------------------------------------------------------- | ||
+ | * - Name Table- | ||
+ | * p_QDFFNTBL = p_QDFWFLEI + QDFWFLEI.WDFWNTBO | ||
+ | *------------------------------------------------------------------- | ||
+ | D QDFFNTBL DS Based( p_QDFFNTBL) qualified | ||
+ | D WDFFNMS 10I 0 Overlay( QDFFNTBL : 1 ) | ||
+ | // pointer to array char(10) | ||
+ | D WDFFNMES 1A | ||
+ | D WDFFNMESX 1000A | ||
+ | |||
+ | // Field Name | ||
+ | D QDFFNTB DS Based( p_QDFFNTB ) qualified | ||
+ | D WDFFNAM 10A | ||
+ | |||
+ | *------------------------------------------------------------------- | ||
+ | * - Record Where Used - | ||
+ | * p_QDFWRCDI = p_QDFWFLEI + QDFWFLEI.WDFWXLEN first | ||
+ | *------------------------------------------------------------------- | ||
+ | D QDFWRCDI DS Based( p_QDFWRCDI ) qualified | ||
+ | D WDFWRLEN 5I 0 Overlay( QDFWRCDI : 1 ) | ||
+ | D WDFWROKW 5I 0 Overlay( QDFWRCDI : 3 ) | ||
+ | D WDFWNXTR 10I 0 Overlay( QDFWRCDI : 5 ) | ||
+ | D WDFWRIN 5I 0 Overlay( QDFWRCDI : 9 ) | ||
+ | // pointer to indicator table | ||
+ | D WDFWINDR 1A Overlay( QDFWRCDI : 13) | ||
+ | |||
+ | *------------------------------------------------------------------- | ||
+ | * - Record Format Table- | ||
+ | * p_QDFARFTE = p_QDFFINFO + QDFFINFO.WDFFDFLO first | ||
+ | * p_QDFARFTE = p_QDFARFTE + %Len( QDFARFTE ) next | ||
+ | * alt p_QDFARFTE = p_QDFFINFO + QDFFINFO.WDFFDFLO + | ||
+ | * (%size(QDFARFTE) * x) | ||
+ | *------------------------------------------------------------------- | ||
+ | D QDFARFTE DS Based ( p_QDFARFTE ) qualified | ||
+ | D WDFARFNM 10 Overlay( QDFARFTE : 1 ) | ||
+ | D WDFARCND 5I 0 Overlay( QDFARFTE : 11 ) | ||
+ | D WDFARFOF 10I 0 Overlay( QDFARFTE : 13 ) | ||
+ | |||
+ | DQDFFSEQT DS Based ( p_QDFFSEQT ) qualified | ||
+ | D WDFFFSEQ 1 13 | ||
+ | D WDFVED17 14 16 | ||
+ | *------------------------------------------------------------------- | ||
+ | * - Record Header - | ||
+ | * p_QDFFRINF = p_QDFFINFO + QDFARFTE.WDFARFOF | ||
+ | *------------------------------------------------------------------- | ||
+ | D QDFFRINF DS Based ( p_QDFFRINF ) qualified | ||
+ | D WDFFRDDO 10I 0 Overlay( QDFFRINF : 1 ) | ||
+ | D WDFFOFIT 10I 0 Overlay( QDFFRINF : 5 ) | ||
+ | D WDFFSTBO 10I 0 Overlay( QDFFRINF : 9 ) | ||
+ | D WDFFRFLG1 1A Overlay( QDFFRINF : 13 ) | ||
+ | D WDFFRFLG2 1A Overlay( QDFFRINF : 14 ) | ||
+ | D WDFFFLD 5I 0 Overlay( QDFFRINF : 17 ) | ||
+ | D WDFFINDO 5I 0 Overlay( QDFFRINF : 23 ) | ||
+ | D WDFFRAOF 5I 0 Overlay( QDFFRINF : 29 ) | ||
+ | *------------------------------------------------------------------- | ||
+ | * Display-Record-Level Device-Dependent | ||
+ | * p_QDFFXRDP = p_QDFFRINF + QDFFRDPD.WDFFXRDO | ||
+ | DQDFFXRDP DS Based (p_QDFFXRDP ) qualified | ||
+ | D WDFFFOTO 1 4B 0 | ||
+ | D WDFFNRCO 5 8B 0 | ||
+ | D WDFVED33 9 12 | ||
+ | D WDFFSEGS 13 14B 0 | ||
+ | D WDFVED34 15 16 | ||
+ | D WDFHCTLO 17 18B 0 | ||
+ | D WDFVED35 19 24 | ||
+ | D | ||
+ | DQDFFSFCR DS Based (p_QDFFSFCR ) qualified | ||
+ | D WDFFSFLG 1 34 | ||
+ | D WDFFSFEN 35 35 | ||
+ | D WDFFSFDR 36 36 | ||
+ | D WDFBITS19 37 37 | ||
+ | D WDFBITS20 38 38 | ||
+ | D WDFFSFPQ 39 40B 0 | ||
+ | D WDFFSFVL 41 42B 0 | ||
+ | D WDFFSFVO 43 44B 0 | ||
+ | D WDFFSFFI 45 46B 0 | ||
+ | D WDFFFSFL01 47 48B 0 | ||
+ | D WDFFFSFO 49 50B 0 | ||
+ | D WDFXTOFF 51 52B 0 | ||
+ | D WDFBITS21 53 53 | ||
+ | D WDFVED37 54 54 | ||
+ | D WDFFSFPM 55 55 | ||
+ | D | ||
+ | DQDFSFSRU DS Based (p_QDFSFSRU ) qualified | ||
+ | D WDFVED39 1 1 | ||
+ | D WDFFSFSR 2 2 | ||
+ | |||
+ | DQDFSFERU DS Based (p_QDFSFERU ) qualified | ||
+ | D WDFVED40 1 1 | ||
+ | D WDFFSFER 2 2 | ||
+ | |||
+ | DQDFSFH2U DS Based (p_QDFSFH2U ) qualified | ||
+ | D WDFFSFH1 1 2B 0 | ||
+ | D WDFFSFH2 3 4B 0 | ||
+ | D | ||
+ | DQDFCREXT DS Based (p_QDFCREXT ) qualified | ||
+ | D WDFCRLLO 1 2B 0 | ||
+ | D WDFIZSFO 3 4B 0 | ||
+ | D WDFELOFF 5 6B 0 | ||
+ | D WDFELCH1 7 7 | ||
+ | D WDFELCH2 8 8 | ||
+ | D WDFVED42 9 16 | ||
+ | |||
+ | *------------------------------------------------------------------- | ||
+ | * - Record Device-Dependent (QDFFRDPD) | ||
+ | * p_QDFFRDPD = p_QDFFRINF + WDFFRAOF | ||
+ | *------------------------------------------------------------------- | ||
+ | D QDFFRDPD DS Based (p_QDFFRDPD ) qualified | ||
+ | D WDFFDRCO 10I 0 Overlay( QDFFRDPD : 1 ) | ||
+ | D WDFFINCP 5I 0 Overlay( QDFFRDPD : 5 ) | ||
+ | D WDFFIBF 5I 0 Overlay( QDFFRDPD : 7 ) | ||
+ | D WDFFOIS 5I 0 Overlay( QDFFRDPD : 9 ) | ||
+ | D WDFACKYS 4A Overlay( QDFFRDPD : 13 ) | ||
+ | D WDFFPUTK 2A Overlay( QDFFRDPD : 17 ) | ||
+ | D WDFFGETK 2A Overlay( QDFFRDPD : 19 ) | ||
+ | D WDFFERRM 5I 0 Overlay( QDFFRDPD : 21 ) | ||
+ | D WDFFBITS 1A Overlay( QDFFRDPD : 23 ) | ||
+ | D WDFFBITF 1A Overlay( QDFFRDPD : 24 ) | ||
+ | D WDFFCGRI 5I 0 Overlay( QDFFRDPD : 25 ) | ||
+ | D WDFFHFLG 2A Overlay( QDFFRDPD : 27 ) | ||
+ | D WDFFXRDO 5I 0 Overlay( QDFFRDPD : 29 ) | ||
+ | D WDFFRDOC 5I 0 Overlay( QDFFRDPD : 33 ) | ||
+ | |||
+ | *------------------------------------------------------------------- | ||
+ | * - Row Column Table - | ||
+ | * p_QDFFRCTB = p_QDFFRINF + WDFFDRCO | ||
+ | * SizeIndex = 0 to WDFFSCR -1 | ||
+ | *------------------------------------------------------------------- | ||
+ | D QDFFRCTB DS Based ( p_QDFFRCTB) qualified | ||
+ | D WDFFFRRO 1A Overlay( QDFFRCTB : 1 ) | ||
+ | D WDFFFRCO 1A Overlay( QDFFRCTB : 2 ) | ||
+ | D WDFFTORO 1A Overlay( QDFFRCTB : 3 ) | ||
+ | D WDFFTOCO 1A Overlay( QDFFRCTB : 4 ) | ||
+ | D WDFFRBIT 1A Overlay( QDFFRCTB : 5 ) | ||
+ | D WDFFRC 1A Overlay( QDFFRCTB : 7 ) | ||
+ | *------------------------------------------------------------------- | ||
+ | * - Row Column Table Entries - | ||
+ | * p_QDFFRCTE = %addr(QDFFRCTB.WDFFRC) first | ||
+ | * p_QDFFRCTE = p_QDFFRCTE + %size(QDFFRCTE) next | ||
+ | D QDFFRCTE DS Based ( p_QDFFRCTE) qualified | ||
+ | D WDFFSROW 1 1A | ||
+ | D WDFFSCOL 2 2A | ||
+ | *------------------------------------------------------------------- | ||
+ | * - Field Where Used - | ||
+ | * p_QDFWFLDI = p_QDFWRCDI + QDFWRCDI.WDFWRLEN first | ||
+ | * p_QDFWFLDI = p_QDFWFLDI + WDFWFLDL next | ||
+ | *------------------------------------------------------------------- | ||
+ | D QDFWFLDI DS Based ( p_QDFWFLDI ) qualified | ||
+ | D WDFWFLDL 5I 0 Overlay( QDFWFLDI : 1 ) | ||
+ | D WDFWFOKW 5I 0 Overlay( QDFWFLDI : 3 ) | ||
+ | D WDFWRRDX 5I 0 Overlay( QDFWFLDI : 5 ) | ||
+ | // index into Field Name Table p_QDFFNTBL | ||
+ | D WDFWNMEI 10I 0 Overlay( QDFWFLDI : 7 ) | ||
+ | D WDFWLFLD 5I 0 Overlay( QDFWFLDI : 11 ) | ||
+ | D WDFWFFLG 1A Overlay( QDFWFLDI : 13 ) | ||
+ | |||
+ | *------------------------------------------------------------------- | ||
+ | * - Field Index - | ||
+ | * QDFFRINF is at variable WDFFOFIT in QDFFRINF. | ||
+ | *------------------------------------------------------------------- | ||
+ | D QDFFFITB DS Based ( p_QDFFFITB ) qualified | ||
+ | D WDFFFOFS 10I 0 Overlay( QDFFFITB : 1 ) | ||
+ | D WDFFSELI 5I 0 Overlay( QDFFFITB : 5 ) | ||
+ | D WDFFDLEN 5I 0 Overlay( QDFFFITB : 7 ) | ||
+ | *------------------------------------------------------------------- | ||
+ | |||
+ | *------------------------------------------------------------------- | ||
+ | * - Constant Field Header - | ||
+ | * p_QDFFFCON = WDFFFTBE | ||
+ | *------------------------------------------------------------------- | ||
+ | D QDFFFCON DS Based ( p_QDFFFCON ) qualified | ||
+ | D WDFFFAOC 5I 0 Overlay( QDFFFCON : 3 ) | ||
+ | |||
+ | *------------------------------------------------------------------- | ||
+ | * - Named Field Header - | ||
+ | * p_QDFFFNAM = WDFFFTBE | ||
+ | *------------------------------------------------------------------- | ||
+ | D QDFFFNAM DS Based ( p_QDFFFNAM ) qualified | ||
+ | D WDFFINPO 5I 0 Overlay( QDFFFNAM : 1 ) | ||
+ | D WDFFOUTO 5I 0 Overlay( QDFFFNAM : 3 ) | ||
+ | D WDFFPLEN 5I 0 Overlay( QDFFFNAM : 5 ) | ||
+ | D WDFFDEC 1A Overlay( QDFFFNAM : 7 ) | ||
+ | D WDFFKBDT 1A Overlay( QDFFFNAM : 8 ) | ||
+ | D WDFFFAOF 5I 0 Overlay( QDFFFNAM : 11 ) | ||
+ | |||
+ | *------------------------------------------------------------------- | ||
+ | * - Field Header | ||
+ | * p_QDFFFINF = p_QDFFRINF + WDFFFOFS | ||
+ | *------------------------------------------------------------------- | ||
+ | D QDFFFINF DS Based ( p_QDFFFINF ) qualified | ||
+ | D WDFFFLEN 1A Overlay( QDFFFINF : 1 ) | ||
+ | D WDFFFIOA 1A Overlay( QDFFFINF : 3 ) | ||
+ | D WDFFBFLG 1A Overlay( QDFFFINF : 4 ) | ||
+ | D WDFFFBIT 1A Overlay( QDFFFINF : 5 ) | ||
+ | // pointer to QDFFFCON or QDFFFNAM | ||
+ | D WDFFFTBE 1A Overlay( QDFFFINF : 7 ) | ||
+ | |||
+ | *------------------------------------------------------------------- | ||
+ | * - Field Dev Dept | ||
+ | * p_QDFFFDPD = p_QDFFFINF + WDFFFAOF named | ||
+ | * p_QDFFFDPD = p_QDFFFINF + WDFFFAOC constant | ||
+ | *------------------------------------------------------------------- | ||
+ | D QDFFFDPD DS Based ( p_QDFFFDPD ) qualified | ||
+ | D WDFFFLGS 1A Overlay( QDFFFDPD : 1 ) | ||
+ | D WDFFSA 1A Overlay( QDFFFDPD : 2 ) | ||
+ | D WDFFXFDO 5I 0 Overlay( QDFFFDPD : 3 ) | ||
+ | D WDFFFDOC 5I 0 Overlay( QDFFFDPD : 5 ) | ||
+ | // pointer | ||
+ | D WDFFFICE 1A Overlay( QDFFFDPD : 7 ) | ||
+ | |||
+ | *------------------------------------------------------------------- | ||
+ | * - Input-Capable Display Field-Level Device-Dep | ||
+ | * p_QDFFFDIC = WDFFFICE | ||
+ | *------------------------------------------------------------------- | ||
+ | D QDFFFDIC DS Based ( p_QDFFFDIC ) qualified | ||
+ | D WDFFFWFW 2A Overlay( QDFFFDIC : 1 ) | ||
+ | D WDFFSSKW 1A Overlay( QDFFFDIC : 3 ) | ||
+ | D WDFFCHKB 1A Overlay( QDFFFDIC : 4 ) | ||
+ | |||
+ | *------------------------------------------------------------------- | ||
+ | * - Field-Dependent Extension - | ||
+ | * p_QDFFXFDP = p_QDFFFINF + WDFFXFDO | ||
+ | *------------------------------------------------------------------- | ||
+ | D QDFFXFDP DS Based ( p_QDFFXFDP ) qualified | ||
+ | D WDFFKFLG 2A Overlay( QDFFXFDP : 1 ) | ||
+ | D WDFFFLDINX 5I 0 Overlay( QDFFXFDP : 3 ) | ||
+ | D WDFFXLFLGS 1A Overlay( QDFFXFDP : 4 ) | ||
+ | // this is a BIN 16 | ||
+ | D WDFF_UCS2_ 2A Overlay( QDFFXFDP : 6 ) | ||
+ | |||
+ | *------------------------------------------------------------------- | ||
+ | * - Keyword Category Displacement | ||
+ | * file p_QDFFCOSA = p_QDFFINFO + WDFFXDOC | ||
+ | * record p_QDFFCOSA = p_QDFFRINF + WDFFRDOC | ||
+ | * field p_QDFFCOSA = p_QDFFFINF + WDFFFDOC | ||
+ | *------------------------------------------------------------------- | ||
+ | D QDFFCOSA DS Based ( p_QDFFCOSA ) qualified | ||
+ | D WDFFCCT 5I 0 Overlay( QDFFCOSA : 1 ) | ||
+ | // pointer | ||
+ | D WDFFCCOS 1A Overlay( QDFFCOSA : 3 ) | ||
+ | |||
+ | *------------------------------------------------------------------- | ||
+ | * - Keyword Category Displacement String Entry | ||
+ | * p_QDFFCCOA = %addr(WDFFCCOS) | ||
+ | *------------------------------------------------------------------- | ||
+ | D QDFFCCOA DS Based ( p_QDFFCCOA ) qualified | ||
+ | D WDFFCAID 1A Overlay( QDFFCCOA : 1 ) | ||
+ | D WDFFCAOF 5I 0 Overlay( QDFFCCOA : 2 ) | ||
+ | |||
+ | *------------------------------------------------------------------- | ||
+ | * - Subfile Control Record- | ||
+ | *------------------------------------------------------------------- | ||
+ | |||
+ | DQDFFSFHR DS Based (p_QDFFSFHR ) qualified | ||
+ | D WDFFSFSZ 1 2B 0 | ||
+ | D WDFFSFPG 3 4B 0 | ||
+ | D WDFVED38 5 6 | ||
+ | D WDFFFSFT 7 8B 0 | ||
+ | D WDFSFR1U 9 10 | ||
+ | D WDFFSFR1 9 10B 0 | ||
+ | D WDFVED3900 9 9 | ||
+ | D WDFFSFSR00 10 10 | ||
+ | D WDFSFR2U 11 12 | ||
+ | D WDFFSFR2 11 12B 0 | ||
+ | D WDFVED4000 11 11 | ||
+ | D WDFFSFER00 12 12 | ||
+ | D WDFSFLNU 13 16 | ||
+ | D WDFFSFLN 13 16 | ||
+ | D WDFFSFH100 13 14B 0 | ||
+ | D WDFFSFH200 15 16B 0 | ||
+ | D WDFFFSFF 17 18B 0 | ||
+ | D WDFVED41 19 24 | ||
+ | |||
+ | DQDFKFILK DS Based (p_QDFKFILK ) qualified | ||
+ | D WDFFKFIL 5I 0 Overlay( QDFKFILK : 1 ) | ||
+ | D WDFKFILE 1A Overlay( QDFKFILK : 3 ) | ||
+ | |||
+ | DQDFKFLPM DS Based (p_QDFKFLPM ) qualified | ||
+ | D WDFKFLID 1 Overlay( QDFKFLPM : 1 ) | ||
+ | D WDFKFLST 5I 0 Overlay( QDFKFLPM : 2 ) | ||
+ | D WDFKFLRS 5I 0 Overlay( QDFKFLPM : 4 ) | ||
+ | D WDFFKFLP 5I 0 Overlay( QDFKFLPM : 6 ) | ||
+ | D WDFKFLEX 1A Overlay( QDFKFLPM : 8 ) | ||
+ | |||
+ | DQDFKFLPP DS Based (p_QDFKFLPP ) qualified | ||
+ | D WDFKFLLN 5I 0 Overlay( QDFKFLPP : 1 ) | ||
+ | D WDFKFLNM 1A Overlay( QDFKFLPP : 3 ) | ||
+ | |||
+ | DQDFKFLSZ DS Based (p_QDFKFLSZ ) qualified | ||
+ | D WDFKFLML 1 2B 0 | ||
+ | D WDFVED57 3 6 | ||
+ | |||
+ | DQDFKICVP DS Based (p_QDFKICVP ) qualified | ||
+ | D WDFKICVN 1 2B 0 | ||
+ | D WDFKICVK 3 4B 0 | ||
+ | D WDFKICVT 5 6B 0 | ||
+ | |||
+ | DQDFKHARD DS Based (p_QDFKHARD ) qualified | ||
+ | D WDFKHRFM 1 10 | ||
+ | D WDFKHFIL 11 20 | ||
+ | D WDFKHLIB 21 30 | ||
+ | |||
+ | DQDFKHXPS DS Based (p_QDFKHXPS ) qualified | ||
+ | D WDFKHXHG 1 10 | ||
+ | D WDFKHXHL 11 20 | ||
+ | D WDFKHXML 21 22B 0 | ||
+ | |||
+ | DQDFKHDOC DS Based (p_QDFKHDOC ) qualified | ||
+ | D WDFKHDLA 1 10 | ||
+ | D WDFKHDDO 11 22 | ||
+ | D WDFKHDFL 23 24B 0 | ||
+ | |||
+ | DQDFKSIDX DS Based (p_QDFKSIDX ) qualified | ||
+ | D WDFKSIOB 1 10 | ||
+ | D WDFKSILB 11 20 | ||
+ | |||
+ | DQDFKFALX DS Based (p_QDFKFALX ) qualified | ||
+ | D WDFFKALT 1 2B 0 | ||
+ | |||
+ | DQDFKFALK DS Based (p_QDFKFALK ) qualified | ||
+ | D WDFKANME 1 10 | ||
+ | D WDFKAINX 11 12B 0 | ||
+ | |||
+ | DQDFKESFL DS Based (p_QDFKESFL ) qualified | ||
+ | D WDFKESCR 1 10 | ||
+ | |||
+ | DQDFKBODR DS Based (p_QDFKBODR ) qualified | ||
+ | D WDFKCLOR 1 1 | ||
+ | D WDFKDATR 2 2 | ||
+ | D WDFKCHRS 3 10 | ||
+ | |||
+ | DQDFKCKKW DS Based (p_QDFKCKKW ) qualified | ||
+ | D WDFFKCKS 1 2B 0 | ||
+ | D WDFKCKCM 3 3 | ||
+ | |||
+ | DQDFKCKKE DS Based (p_QDFKCKKE ) qualified | ||
+ | D WDFKCKID 1 1 | ||
+ | D WDFKCKIN 2 3B 0 | ||
+ | D WDFKCKRS 4 5B 0 | ||
+ | D WDFKCKMA 6 9 | ||
+ | |||
+ | DQDFKOVRR DS Based (p_QDFKOVRR ) qualified | ||
+ | D WDFFKOLS 1 2B 0 | ||
+ | |||
+ | DQDFKOVRE DS Based (p_QDFKOVRE ) qualified | ||
+ | D WDFKOLAD 1 1 | ||
+ | D WDFKOLAN 2 3B 0 | ||
+ | |||
+ | DQDFKOVRP DS Based (p_QDFKOVRP ) qualified | ||
+ | D WDFKOLID 1 1 | ||
+ | D WDFKOLIN 2 3B 0 | ||
+ | |||
+ | DQDFKOLER DS Based (p_QDFKOLER ) qualified | ||
+ | D WDFFKOLE 1 2B 0 | ||
+ | |||
+ | DQDFKOLCL DS Based (p_QDFKOLCL ) qualified | ||
+ | D WDFFKOLC 1 2B 0 | ||
+ | D WDFKOLCN 3 4B 0 | ||
+ | |||
+ | DQDFKMSRL DS Based (p_QDFKMSRL ) qualified | ||
+ | D WDFFKMSS 5I 0 Overlay( QDFKMSRL : 1 ) | ||
+ | D WDFKMSKW 1A Overlay( QDFKMSRL : 3 ) | ||
+ | |||
+ | DQDFKMSAP DS Based (p_QDFKMSAP ) qualified | ||
+ | D WDFKMSAD 1 1 | ||
+ | D WDFKMSAN 2 3B 0 | ||
+ | |||
+ | DQDFKMSCP DS Based (p_QDFKMSCP ) qualified | ||
+ | D WDFKMSID 1 1 | ||
+ | D WDFKMSIN 2 3B 0 | ||
+ | |||
+ | DQDFKMSK1 DS Based (p_QDFKMSK1 ) qualified | ||
+ | D WDFKMSLC 1 2B 0 | ||
+ | D WDFVED58 3 3 | ||
+ | D WDFKMSRW 4 5B 0 | ||
+ | D WDFKMSCL 6 7B 0 | ||
+ | D WDFKMSFA 8 11B 0 | ||
+ | D WDFKMSFB 12 15B 0 | ||
+ | |||
+ | DQDFKMSK2 DS Based (p_QDFKMSK2 ) qualified | ||
+ | D WDFKMSLN 1 2B 0 | ||
+ | |||
+ | DQDFKMSK3 DS Based (p_QDFKMSK3 ) qualified | ||
+ | D WDFKMSDM 1 2B 0 | ||
+ | |||
+ | DQDFMSCLN DS Based (p_QDFMSCLN ) qualified | ||
+ | D WDFSCROU 1 2 | ||
+ | D WDFMSCRO 1 2B 0 | ||
+ | D WDFKRCLR 1 2B 0 | ||
+ | D WDFSCFOU 3 4 | ||
+ | D WDFMSCFO 3 4B 0 | ||
+ | D WDFKRCLC 3 4B 0 | ||
+ | D WDFSCLOU 5 6 | ||
+ | D WDFMSCLO 5 6B 0 | ||
+ | D WDFKCLWR 5 6B 0 | ||
+ | D WDFRCLWC 7 8B 0 | ||
+ | D WDFCTYPE 9 9 | ||
+ | D WDFBITS32 10 10 | ||
+ | |||
+ | DQDFMBDSP DS Based (p_QDFMBDSP ) qualified | ||
+ | D WDFBDRCN 1 10 | ||
+ | D WDFBDCFO 11 12B 0 | ||
+ | D WDFBDPIO 13 14B 0 | ||
+ | |||
+ | DQDFK0BPR DS Based (p_QDFK0BPR ) qualified | ||
+ | D WDF0BPCT 1 2B 0 | ||
+ | |||
+ | DQDF0BXWP DS Based (p_QDF0BXWP ) qualified | ||
+ | D WDF0BPID 1 1 | ||
+ | D WDF0BPIN 2 3B 0 | ||
+ | D WDF0BPLN 4 5B 0 | ||
+ | |||
+ | DQDFBGATR DS Based (p_QDFBGATR ) qualified | ||
+ | D WDF0BCLR 1 1 | ||
+ | D WDFVED59 2 2 | ||
+ | D WDFK0BLT 3 3 | ||
+ | D WDFVED60 4 4 | ||
+ | |||
+ | DQDFBKPRM DS Based (p_QDFBKPRM ) qualified | ||
+ | D WDFBKNAM 1 8 | ||
+ | |||
+ | DQDFKMRPR DS Based (p_QDFKMRPR ) qualified | ||
+ | D WDFFKRPS 1 2B 0 | ||
+ | |||
+ | DQDFKMRWP DS Based (p_QDFKMRWP ) qualified | ||
+ | D WDFKMPID 1 1 | ||
+ | D WDFKMPIN 2 3B 0 | ||
+ | D WDFKMPLN 4 5B 0 | ||
+ | |||
+ | DQDFKHSTR DS Based (p_QDFKHSTR ) qualified | ||
+ | D WDFWDFKH 1 2B 0 | ||
+ | |||
+ | DQDFKHPRM DS Based (p_QDFKHPRM ) qualified | ||
+ | D WDFKHOFS 1 2B 0 | ||
+ | D WDFBITS33 3 4 | ||
+ | D WDFKHSRO 5 6B 0 | ||
+ | D WDFKHCRD 7 8B 0 | ||
+ | D WDFKHCBY 9 10B 0 | ||
+ | D WDFKHARO 11 12B 0 | ||
+ | D WDFKHCEX 13 14B 0 | ||
+ | D WDFVED62 15 17 | ||
+ | |||
+ | DQDFKHNMS DS Based (p_QDFKHNMS ) qualified | ||
+ | D WDFKHRCD 1 10 | ||
+ | D WDFKHFLE 11 20 | ||
+ | D WDFKHRLB 21 30 | ||
+ | |||
+ | DQDFKHPS DS Based (p_QDFKHPS ) qualified | ||
+ | D WDFKHPNN 1 10 | ||
+ | D WDFKHPLB 11 20 | ||
+ | D WDFKHMLN 21 22B 0 | ||
+ | |||
+ | DQDFKHRDC DS Based (p_QDFKHRDC ) qualified | ||
+ | D WDFKHRLA 1 10 | ||
+ | D WDFKHRDO 11 22 | ||
+ | D WDFKHRFL 23 24B 0 | ||
+ | |||
+ | DQDFKHARA DS Based (p_QDFKHARA ) qualified | ||
+ | D WDFKHFRO 1 1 | ||
+ | D WDFKHFCO 2 2 | ||
+ | D WDFKHTRO 3 3 | ||
+ | D WDFKHTCO 4 4 | ||
+ | |||
+ | DQDFKHARX DS Based (p_QDFKHARX ) qualified | ||
+ | D WDFBITS34 1 1 | ||
+ | D WDFHFLDI 2 3B 0 | ||
+ | D WDFHCHID 4 5 | ||
+ | |||
+ | DQDFKHSEQ DS Based (p_QDFKHSEQ ) qualified | ||
+ | D WDFKHSGN 1 10 | ||
+ | D WDFFKHSS 11 12B 0 | ||
+ | D WDFKHSIF 13 14B 0 | ||
+ | D WDFKHSIL 15 16B 0 | ||
+ | D WDFKHSIN 17 18B 0 | ||
+ | D WDFKHSIP 19 20B 0 | ||
+ | |||
+ | DQDFKPRTR DS Based (p_QDFKPRTR ) qualified | ||
+ | D WDFKRLRS 1 2B 0 | ||
+ | D WDFFKRLP 3 4B 0 | ||
+ | |||
+ | DQDFKPPRM DS Based (p_QDFKPPRM ) qualified | ||
+ | D WDFKPLEN 1 2B 0 | ||
+ | |||
+ | DQDFKBRDR DS Based (p_QDFKBRDR ) qualified | ||
+ | D WDFKCOLR 1 1 | ||
+ | D WDFKDSPA 2 2 | ||
+ | D WDFKCHAR 3 10 | ||
+ | |||
+ | DQDFKLINU DS Based (p_QDFKLINU ) qualified | ||
+ | D WDFFKLIN 1 2B 0 | ||
+ | D WDFFKPOS 3 4B 0 | ||
+ | D WDFKLINW 5 6B 0 | ||
+ | D WDFKPOSW 7 8B 0 | ||
+ | D WDFVED66 9 10 | ||
+ | |||
+ | DQDFKWDTA DS Based (p_QDFKWDTA ) qualified | ||
+ | D WDFBITS35 1 2 | ||
+ | D WDFWNAMU 3 12 | ||
+ | D WDFKWNAM 3 12 | ||
+ | D WDFFKLIN00 3 4B 0 | ||
+ | D WDFFKPOS00 5 6B 0 | ||
+ | D WDFKLINW00 7 8B 0 | ||
+ | D WDFKPOSW00 9 10B 0 | ||
+ | D WDFVED6600 11 12 | ||
+ | |||
+ | DQDFOLORU DS Based (p_QDFOLORU ) qualified | ||
+ | D WDFVED68 1 1 | ||
+ | D WDFCOLOR 2 2 | ||
+ | |||
+ | DQDFDSPAU DS Based (p_QDFDSPAU ) qualified | ||
+ | D WDFVED69 1 1 | ||
+ | D WDFTDSPA 2 2 | ||
+ | |||
+ | DQDFLIGNU DS Based (p_QDFLIGNU ) qualified | ||
+ | D WDFVED70 1 1 | ||
+ | D WDFALIGN 2 2 | ||
+ | |||
+ | DQDFDWTTL DS Based (p_QDFDWTTL ) qualified | ||
+ | D WDFDWOVL 1 5 | ||
+ | D WDFBITS36 6 6 | ||
+ | D WDFLRPFU 7 8 | ||
+ | D WDFCLRPF 7 8B 0 | ||
+ | D WDFVED6800 7 7 | ||
+ | D WDFCOLOR00 8 8 | ||
+ | D WDFSPPFU 9 10 | ||
+ | D WDFDSPPF 9 10B 0 | ||
+ | D WDFVED6900 9 9 | ||
+ | D WDFTDSPA00 10 10 | ||
+ | D WDFALGNU 11 12 | ||
+ | D WDFTALGN 11 12B 0 | ||
+ | D WDFVED7000 11 11 | ||
+ | D WDFALIGN00 12 12 | ||
+ | D WDFTTXTO 13 14B 0 | ||
+ | D WDFTTXTL 15 16B 0 | ||
+ | D WDFVED71 17 26 | ||
+ | |||
+ | DQDFKMB DS Based (p_QDFKMB ) qualified | ||
+ | D WDFBITS37 1 1 | ||
+ | D WDFFIRST 2 2 | ||
+ | D WDFECOND 3 3 | ||
+ | D WDFMBAID 4 4 | ||
+ | |||
+ | DQDFKSCSF DS Based (p_QDFKSCSF ) qualified | ||
+ | D WDFFKSCS 1 2B 0 | ||
+ | |||
+ | DQDFKSCCP DS Based (p_QDFKSCCP ) qualified | ||
+ | D WDFKSCID 1 1 | ||
+ | D WDFKSCIN 2 3B 0 | ||
+ | |||
+ | DQDFKSCSM DS Based (p_QDFKSCSM ) qualified | ||
+ | D WDFKSCRS 1 2B 0 | ||
+ | D WDFKSCTY 3 3 | ||
+ | D WDFKSCLN 4 5B 0 | ||
+ | |||
+ | DQDFKSCSI DS Based (p_QDFKSCSI ) qualified | ||
+ | D WDFKSCMI 1 7 | ||
+ | D WDFKSCMF 8 17 | ||
+ | D WDFKSCML 18 27 | ||
+ | D WDFKSCDL 28 29B 0 | ||
+ | D WDFKSCMO 30 31B 0 | ||
+ | |||
+ | DQDFKSFLM DS Based (p_QDFKSFLM ) qualified | ||
+ | D WDFKMORE 1 12 | ||
+ | D WDFKBOTT 13 24 | ||
+ | |||
+ | DQDFKSFLS DS Based (p_QDFKSFLS ) qualified | ||
+ | D WDFNDSPM 1 1 | ||
+ | D WDFLMORE 2 13 | ||
+ | D WDFLBOTT 14 25 | ||
+ | |||
+ | DQDFSRRRN DS Based (p_QDFSRRRN ) qualified | ||
+ | D WDFCSRNO 1 2B 0 | ||
+ | |||
+ | DQDFKMODE DS Based (p_QDFKMODE ) qualified | ||
+ | D WDFSCMDO 1 2B 0 | ||
+ | |||
+ | DQDFKSASA DS Based (p_QDFKSASA ) qualified | ||
+ | D WDFFKSAS 1 2B 0 | ||
+ | |||
+ | DQDFKSAPM DS Based (p_QDFKSAPM ) qualified | ||
+ | D WDFKSAIA 1 1 | ||
+ | D WDFKSAII 2 3B 0 | ||
+ | D WDFKSAOA 4 4 | ||
+ | |||
+ | DQDFKFFWR DS Based (p_QDFKFFWR ) qualified | ||
+ | D WDFFKFWS 1 2B 0 | ||
+ | |||
+ | DQDFKCHKP DS Based (p_QDFKCHKP ) qualified | ||
+ | D WDFKFWID 1 1 | ||
+ | D WDFKFWIN 2 3B 0 | ||
+ | D WDFKFWOV 4 5 | ||
+ | |||
+ | DQDFKMFDK DS Based (p_QDFKMFDK ) qualified | ||
+ | D WDFFKMFS 1 2B 0 | ||
+ | D WDFKMFNO 3 4B 0 | ||
+ | D WDFKMFEN 5 5A | ||
+ | |||
+ | * p_QDFKMFDP = %ADDR(QDFKMFDK.WDFKMFEN) | ||
+ | DQDFKMFDP DS Based (p_QDFKMFDP ) qualified | ||
+ | D WDFKMFID 1 1 | ||
+ | D WDFKMFIN 2 3B 0 | ||
+ | D WDFKMFEX 4 4A | ||
+ | |||
+ | * Response Indicator Structure (QDFKMFRS) | ||
+ | * p_QDFKMFRS = %ADDR(QDFKMFDP.WDFKMFEX) | ||
+ | DQDFKMFRS DS Based (p_QDFKMFRS ) qualified | ||
+ | D WDFKMFRP 1 2B 0 | ||
+ | D WDFKMFEE 3 3A | ||
+ | |||
+ | * ERRMSG and ERRMSGID Keyword Structure (QDFKMFEM) | ||
+ | * p_QDFKMFEM = %ADDR(QDFKMFRS.WDFKMFEE) | ||
+ | DQDFKMFEM DS Based (p_QDFKMFEM ) qualified | ||
+ | D WDFKMFTP 1 1 | ||
+ | D WDFKMFEL 2 3B 0 | ||
+ | D WDFKMFTX 4 4A | ||
+ | |||
+ | DQDFKMFSI DS Based (p_QDFKMFSI ) qualified | ||
+ | D WDFKMFMI 1 7 | ||
+ | D WDFKMFMF 8 17 | ||
+ | D WDFKMFML 18 27 | ||
+ | D WDFKMFDL 28 29B 0 | ||
+ | D WDFKMFMO 30 31B 0 | ||
+ | |||
+ | DQDFKMFMV DS Based (p_QDFKMFMV ) qualified | ||
+ | D WDFKMFMM 1 1 | ||
+ | D WDFKMFMP 2 4 | ||
+ | D WDFKMFFL 5 6B 0 | ||
+ | D WDFKMFFV 7 16 | ||
+ | D WDFKMFLV 17 26 | ||
+ | |||
+ | DQDFKMFM3 DS Based (p_QDFKMFM3 ) qualified | ||
+ | D WDFFKMF1 1 3 | ||
+ | D WDFFKMF2 4 7 | ||
+ | |||
+ | DQDFKMFM4 DS Based (p_QDFKMFM4 ) qualified | ||
+ | D WDFKMFD4 1 1 | ||
+ | |||
+ | DQDFKDFLD DS Based (p_QDFKDFLD ) qualified | ||
+ | D WDFKDFLO 1 2B 0 | ||
+ | |||
+ | DQDFK_DATTIMFmat DS Based (p_QDFK_DATTIMFmat) qualified | ||
+ | D WDFK_DATTIM 1 2B 0 | ||
+ | |||
+ | DQDFK_DATTIM_Sep DS Based (p_QDFK_DATTIM_Sep ) qualified | ||
+ | D WDFK_DATTIMSep 1 1A | ||
+ | |||
+ | DQDFK_DATEP DS Based (p_QDFK_DATEP) qualified | ||
+ | * 0 BIT(1) WDFK_DATE_SYS If on, the *SYS parameter is specified on th | ||
+ | * 1 BIT(1) WDFK_DATE_YY If on, the *YY parameter is specified on the | ||
+ | * 2 BIT(1) WDFK_DATE_EDTCDEY If on, the EDTCDE(Y) keyword was specifi | ||
+ | D WDFK_DATE 1 1A | ||
+ | |||
+ | * Length of this structure is | ||
+ | * is WDFK_MAPVAL_C * WDFK_MAPVAL_L | ||
+ | * p_QDFK_MAPVAL = %ADDR(QDFKMFDP.WDFKMFEX) | ||
+ | * Number of MAPVAL keyword parameters. | ||
+ | * Length of each MAPVAL keyword parameter. | ||
+ | * MAPVAL parameter | ||
+ | DQDFK_MAPVAL DS Based (p_QDFK_MAPVAL) qualified | ||
+ | D WDFK_MAPVAL_C 1 2B 0 | ||
+ | D WDFK_MAPVAL_L 3 4B 0 | ||
+ | D WDFK_MAPVAL 1 1A | ||
+ | |||
+ | DQDFKDTFT DS Based (p_QDFKDTFT ) qualified | ||
+ | D WDFKDTFT00 1 2B 0 | ||
+ | |||
+ | DQDFKDTSP DS Based (p_QDFKDTSP ) qualified | ||
+ | D WDFKDTSP00 1 1 | ||
+ | |||
+ | DQDFKDATP DS Based (p_QDFKDATP ) qualified | ||
+ | D WDFBITS56 1 1 | ||
+ | |||
+ | DQDFKMPVL DS Based (p_QDFKMPVL ) qualified | ||
+ | D WDFPVLCT 1 2B 0 | ||
+ | D WDFPVLLN 3 4B 0 | ||
+ | |||
+ | DQDFKDFT DS Based (p_QDFKDFT ) qualified | ||
+ | D WDFFKDFS 5I 0 Overlay( QDFKDFT : 1 ) | ||
+ | D WDFKDFPE 1A Overlay( QDFKDFT : 3 ) | ||
+ | |||
+ | DQDFKDFPM DS Based (p_QDFKDFPM ) qualified | ||
+ | D WDFKDFID 1 1 | ||
+ | D WDFKDFTY 2 2 | ||
+ | D WDFKDFIN 3 4B 0 | ||
+ | D WDFKDFLN 5 6B 0 | ||
+ | |||
+ | DQDFKDFMM DS Based (p_QDFKDFMM ) qualified | ||
+ | D WDFKDFMI 1 7 | ||
+ | D WDFKDFMF 8 17 | ||
+ | D WDFKDFML 18 27 | ||
+ | |||
+ | DQDFFHTML00 DS Based (p_QDFFHTML00 ) qualified | ||
+ | D WDFBITS57 1 1 | ||
+ | D WDFFHLEN 2 3B 0 | ||
+ | D WDFFHOFF 4 5B 0 | ||
+ | D WDFLTEXT 6 6 | ||
+ | |||
+ | DQDFKEDTR DS Based (p_QDFKEDTR ) qualified | ||
+ | D WDFFKEDS 1 2B 0 | ||
+ | D WDFKEDKW 3 3A | ||
+ | D xDFKEDID 4 4 | ||
+ | D xDFKEDSY 5 5 | ||
+ | D xDFKEDML 6 7B 0 | ||
+ | D xDFVED73 8 8 | ||
+ | D xDFKEDMS 9 9A | ||
+ | D xDFKEDMSx 10 24A | ||
+ | |||
+ | DQDFKEDTP DS Based (p_QDFKEDTP ) qualified | ||
+ | D WDFKEDID 1 1 | ||
+ | D WDFKEDSY 2 2 | ||
+ | D WDFKEDML 3 4B 0 | ||
+ | D WDFVED73 5 5 | ||
+ | D WDFKEDMS 6 6A | ||
+ | D WDFKEDMSx 6 40A | ||
+ | |||
+ | |||
+ | DQDFKEDTMSK DS Based (p_QDFKEDTMSK) qualified | ||
+ | D WDFKEDMNUM 5I 0 Overlay( QDFKEDTMSK : 1) | ||
+ | D WDFKEDMSEG 1A Overlay( QDFKEDTMSK : 3) | ||
+ | |||
+ | |||
+ | DQDFKEDTSEG DS Based (p_QDFKEDTSEG) qualified | ||
+ | D WDFKEDMPOS 5I 0 Overlay( QDFKEDTSEG : 1) | ||
+ | D WDFKEDMLEN 5I 0 Overlay( QDFKEDTSEG : 3) | ||
+ | |||
+ | DQDFKVAKW DS Based (p_QDFKVAKW ) qualified | ||
+ | D WDFFKVAL 1 2B 0 | ||
+ | |||
+ | DQDFKVARL DS Based (p_QDFKVARL ) qualified | ||
+ | D WDFBITS38 1 1 | ||
+ | D WDFBITS39 2 2 | ||
+ | D WDFVED76 3 3 | ||
+ | D WDFKVATP 4 4 | ||
+ | D WDFFKLAP 5 6B 0 | ||
+ | D WDFKLATP 7 8B 0 | ||
+ | |||
+ | DQDFKCKMI DS Based (p_QDFKCKMI ) qualified | ||
+ | D WDFKCKMD 1 7 | ||
+ | D WDFKCKMF 8 17 | ||
+ | D WDFKCKML 18 27 | ||
+ | D WDFKCKDL 28 29B 0 | ||
+ | D WDFFKCKB 30 31B 0 | ||
+ | |||
+ | DQDFKFCPR DS Based (p_QDFKFCPR ) qualified | ||
+ | D WDFFKFCS 1 2B 0 | ||
+ | |||
+ | DQDFKFC DS Based (p_QDFKFC ) qualified | ||
+ | D WDFKFCID 1 1 | ||
+ | D WDFKFCIN 2 3B 0 | ||
+ | D WDFKFCLN 4 5B 0 | ||
+ | |||
+ | DQDFKCHC DS Based (p_QDFKCHC ) qualified | ||
+ | D WDFCHCCT 1 2B 0 | ||
+ | D WDFCHCFN 3 12 | ||
+ | D WDFKCHCR 13 14B 0 | ||
+ | D WDFKCHCC 15 16B 0 | ||
+ | D WDFCHAR1 17 17 | ||
+ | D WDFCHAR2 18 18 | ||
+ | D WDFVED77 19 19 | ||
+ | |||
+ | DQDFDREXP DS Based (p_QDFDREXP ) qualified | ||
+ | D WDFXPLEN 1 2B 0 | ||
+ | D WDFOWCOL 3 4B 0 | ||
+ | D WDFUTTER 5 6B 0 | ||
+ | D WDFBITS40 7 8 | ||
+ | D WDFVED81 9 18 | ||
+ | |||
+ | DQDFKCHCE DS Based (p_QDFKCHCE ) qualified | ||
+ | D WDFVED82 1 1 | ||
+ | D WDFKCLEN 2 3B 0 | ||
+ | D WDFBITS41 4 4 | ||
+ | D WDFWDFKC 5 6 | ||
+ | D WDFINX26 7 8B 0 | ||
+ | D WDFCTXTO 9 10B 0 | ||
+ | D WDFCTXTL 11 12B 0 | ||
+ | D WDFCMSGO 13 14B 0 | ||
+ | D WDFCACCO 15 16B 0 | ||
+ | D WDFPRCDU 17 18 | ||
+ | D WDFCPRCD 17 18B 0 | ||
+ | D WDFBCAID 17 17 | ||
+ | D WDFCRTNO 19 20B 0 | ||
+ | D WDFCRTNL 21 22B 0 | ||
+ | D WDFCCTLO 23 24B 0 | ||
+ | D WDFCTLIO 25 26B 0 | ||
+ | |||
+ | DQDFKCTXT DS Based (p_QDFKCTXT ) qualified | ||
+ | D WDFCMNEM 1 2B 0 | ||
+ | |||
+ | DQDFKCACC DS Based (p_QDFKCACC ) qualified | ||
+ | D WDFACCSL 1 2B 0 | ||
+ | D WDFCACCL 3 4B 0 | ||
+ | D WDFACCFO 5 6B 0 | ||
+ | |||
+ | DQDFKCMSG DS Based (p_QDFKCMSG ) qualified | ||
+ | D WDFBITS42 1 1 | ||
+ | D WDFID26U 2 8 | ||
+ | D WDFMID26 2 8 | ||
+ | D WDFKMIDO 2 3B 0 | ||
+ | D WDFCMFLU 9 18 | ||
+ | D WDFKCMFL 9 18 | ||
+ | D WDFCMFLO 9 10B 0 | ||
+ | D WDFCMLBU 19 28 | ||
+ | D WDFKCMLB 19 28 | ||
+ | D WDFCMLBO 19 20B 0 | ||
+ | |||
+ | DQDFBSEPS DS Based (p_QDFBSEPS ) qualified | ||
+ | D WDFBITS43 1 1 | ||
+ | D WDFBSCOU 2 3 | ||
+ | D WDFMBSCO 2 3B 0 | ||
+ | D WDFBSCLR 2 2 | ||
+ | D WDFBSAOU 4 5 | ||
+ | D WDFMBSAO 4 5B 0 | ||
+ | D WDFBSATR 4 4 | ||
+ | D WDFSCHOU 6 7 | ||
+ | D WDFBSCHO 6 7B 0 | ||
+ | D WDFBSCHR 6 6 | ||
+ | |||
+ | DQDFKCHCX DS Based (p_QDFKCHCX ) qualified | ||
+ | D WDFVED92 1 1 | ||
+ | D WDFHCCLR 2 2 | ||
+ | D WDFVED93 3 3 | ||
+ | D WDFHCATR 4 4 | ||
+ | D WDFVED94 5 5 | ||
+ | |||
+ | DQDFEFATR DS Based (p_QDFEFATR ) qualified | ||
+ | D WDFBITS44 1 1 | ||
+ | D WDFFACLR 2 2 | ||
+ | D WDFVED96 3 3 | ||
+ | D WDFFAATR 4 4 | ||
+ | D WDFVED97 5 5 | ||
+ | |||
+ | DQDFFLDCP DS Based (p_QDFFLDCP ) qualified | ||
+ | D WDFLDNUM 1 2B 0 | ||
+ | D WDFVED98 3 3 | ||
+ | |||
+ | DQDFNTFLD DS Based (p_QDFNTFLD ) qualified | ||
+ | D WDFLDNUM00 1 2B 0 | ||
+ | D WDFVED99 3 3 | ||
+ | |||
+ | DQDFDTMSK00 DS Based (p_QDFDTMSK00 ) qualified | ||
+ | D WDFDMNUM 1 2B 0 | ||
+ | |||
+ | DQDFDTSEG DS Based (p_QDFDTSEG ) qualified | ||
+ | D WDFDMPOS 1 2B 0 | ||
+ | D WDFDMLEN 3 4B 0 | ||
+ | |||
+ | DQDFKSMSG DS Based (p_QDFKSMSG ) qualified | ||
+ | D WDFBITS45 1 1 | ||
+ | D WDFSMIDU 2 8 | ||
+ | D WDFKSMID 2 8 | ||
+ | D WDFSMIDO 2 3B 0 | ||
+ | D WDFSMFLU 9 18 | ||
+ | D WDFKSMFL 9 18 | ||
+ | D WDFSMFLO 9 10B 0 | ||
+ | D WDFSMLBU 19 28 | ||
+ | D WDFKSMLB 19 28 | ||
+ | D WDFSMLBO 19 20B 0 | ||
+ | |||
+ | DQDFKGRPR DS Based (p_QDFKGRPR ) qualified | ||
+ | D WDFKPCNT 1 2B 0 | ||
+ | |||
+ | DQDFKGRWP DS Based (p_QDFKGRWP ) qualified | ||
+ | D WDFKGPID 1 1 | ||
+ | D WDFKGPIN 2 3B 0 | ||
+ | D WDFKGPLN 4 5B 0 | ||
+ | |||
+ | DQDFRDATR DS Based (p_QDFRDATR ) qualified | ||
+ | D WDFCLROU 1 2 | ||
+ | D WDFGCLRO 1 2B 0 | ||
+ | D WDFGCLOR 1 1 | ||
+ | D WDFLNTOU 3 4 | ||
+ | D WDFGLNTO 3 4B 0 | ||
+ | D WDFFKGLT 3 3 | ||
+ | D WDFBITS46 5 5 | ||
+ | |||
+ | DQDFRDCLR DS Based (p_QDFRDCLR ) qualified | ||
+ | D WDFBITS47 1 1 | ||
+ | D WDFSROWU 2 3 | ||
+ | D WDFCSROW 2 3B 0 | ||
+ | D WDFGCSRO 2 3B 0 | ||
+ | D WDFSCOLU 4 5 | ||
+ | D WDFCSCOL 4 5B 0 | ||
+ | D WDFGCSCO 4 5B 0 | ||
+ | D WDFCDEPU 6 7 | ||
+ | D WDFGCDEP 6 7B 0 | ||
+ | D WDFGCDEO 6 7B 0 | ||
+ | D WDFCWIDU 8 9 | ||
+ | D WDFGCWID 8 9B 0 | ||
+ | D WDFGCWIO 8 9B 0 | ||
+ | |||
+ | DQDFRDBOX DS Based (p_QDFRDBOX ) qualified | ||
+ | D WDFBITS48 1 1 | ||
+ | D WDFGBTOB 2 2 | ||
+ | D WDFBHZOU 3 4 | ||
+ | D WDFGBHZO 3 4B 0 | ||
+ | D WDFKGHZV 3 4B 0 | ||
+ | D WDFBVTOU 5 6 | ||
+ | D WDFGBVTO 5 6B 0 | ||
+ | D WDFKGVTV 5 6B 0 | ||
+ | D WDFBCLOU 7 8 | ||
+ | D WDFGBCLO 7 8B 0 | ||
+ | D WDFGBCLR 7 7 | ||
+ | D WDFBLTOU 9 10 | ||
+ | D WDFGBLTO 9 10B 0 | ||
+ | D WDFGBLNT 9 9 | ||
+ | D WDFBCTLO 11 12B 0 | ||
+ | |||
+ | DQDFOXDFM DS Based (p_QDFOXDFM ) qualified | ||
+ | D WDFBITS49 1 1 | ||
+ | D WDFSROWU00 2 3 | ||
+ | D WDFBSROW 2 3B 0 | ||
+ | D WDFGBSRO 2 3B 0 | ||
+ | D WDFSCOLU00 4 5 | ||
+ | D WDFBSCOL 4 5B 0 | ||
+ | D WDFGBSCO 4 5B 0 | ||
+ | D WDFBDEPU 6 7 | ||
+ | D WDFGBDEP 6 7B 0 | ||
+ | D WDFGBDEO 6 7B 0 | ||
+ | D WDFBWIDU 8 9 | ||
+ | D WDFGBWID 8 9B 0 | ||
+ | D WDFGBWIO 8 9B 0 | ||
+ | |||
+ | DQDFRDLIN DS Based (p_QDFRDLIN ) qualified | ||
+ | D WDFBITS50 1 1 | ||
+ | D WDFLTYPL 2 2 | ||
+ | D WDFLINOU 3 4 | ||
+ | D WDFGLINO 3 4B 0 | ||
+ | D WDFGLINT 3 4B 0 | ||
+ | D WDFLRPOU 5 6 | ||
+ | D WDFGLRPO 5 6B 0 | ||
+ | D WDFGLRPT 5 6B 0 | ||
+ | D WDFLCLOU 7 8 | ||
+ | D WDFGLCLO 7 8B 0 | ||
+ | D WDFGLCLR 7 7 | ||
+ | D WDFLLTOU 9 10 | ||
+ | D WDFGLLTO 9 10B 0 | ||
+ | D WDFGLLNT 9 9 | ||
+ | D WDFLCTLO 11 12B 0 | ||
+ | |||
+ | DQDFINDFM DS Based (p_QDFINDFM ) qualified | ||
+ | D WDFBITS51 1 1 | ||
+ | D WDFSROWU01 2 3 | ||
+ | D WDFLSROW 2 3B 0 | ||
+ | D WDFGLSRO 2 3B 0 | ||
+ | D WDFSCOLU01 4 5 | ||
+ | D WDFLSCOL 4 5B 0 | ||
+ | D WDFGLSCO 4 5B 0 | ||
+ | D WDFLLENU 6 7 | ||
+ | D WDFGLLEN 6 7B 0 | ||
+ | D WDFGLLNO 6 7B 0 | ||
+ | |||
+ | |||
+ | |||
+ | DQDFWITBE DS Based (p_QDFWITBE ) qualified | ||
+ | D WDFWINBR 1 1 | ||
+ | D WDFWIOBF 2 2 | ||
+ | D WDFWIIBF 3 3 | ||
+ | D WDFWITXT 4 5B 0 | ||
+ | |||
+ | DQDFWKWDA DS Based (p_QDFWKWDA ) qualified | ||
+ | D WDFWKWDC 1 2B 0 | ||
+ | |||
+ | DQDFKWIDU DS Based (p_QDFKWIDU ) qualified | ||
+ | D WDFED117 1 1 | ||
+ | D WDFWKWID 2 2 | ||
+ | |||
+ | DQDFWATTR DS Based (p_QDFWATTR ) qualified | ||
+ | D WDFKTYPU 1 2 | ||
+ | D WDFWKTYP 1 2B 0 | ||
+ | D WDFED11700 1 1 | ||
+ | D WDFWKWID00 2 2 | ||
+ | D WDFWKLEN 3 4B 0 | ||
+ | |||
+ | DQDFWATYP DS Based (p_QDFWATYP ) qualified | ||
+ | D WDFWALEN 1 2B 0 | ||
+ | D WDFED118 3 3 | ||
+ | D WDFWPRMT 4 4 | ||
+ | |||
+ | DQDFWBTYP DS Based (p_QDFWBTYP ) qualified | ||
+ | D WDFFWATS 1 2B 0 | ||
+ | |||
+ | DQDFWRSTR DS Based (p_QDFWRSTR ) qualified | ||
+ | D WDFBITS53 1 1 | ||
+ | D WDFBITS54 2 2 | ||
+ | D WDFWRFEI 3 6B 0 | ||
+ | D WDFWRLBI 7 10B 0 | ||
+ | D WDFWRRFI 11 14B 0 | ||
+ | D WDFWRFDI 15 18B 0 | ||
+ | |||
+ | |||
+ | D SmlIntTyp S 5I 0 | ||
+ | D IntTyp S 10I 0 | ||
+ | D ChrTyp S 1 | ||
+ | D QNamTyp S 20A | ||
+ | D NamTyp S 10A | ||
+ | D LglTyp S N | ||
+ | D Buftyp S 32000A | ||
+ | |||
+ | *------------------------------------------------------------------- | ||
+ | * - Work fields- | ||
+ | *------------------------------------------------------------------- | ||
+ | |||
+ | D NoAPIError C Const( *Zero ) | ||
+ | |||
+ | D QualDspF S 20 | ||
+ | |||
+ | |||
+ | D RtvSizeInfo DS | ||
+ | D 4 | ||
+ | D RtvSize 10I 0 | ||
+ | |||
+ | D Counter S 5I 0 | ||
+ | |||
+ | D #NumFlds S 10I 0 | ||
+ | D TotFlds S 10I 0 | ||
+ | D RecordName S 10A | ||
+ | |||
+ | |||
+ | D FindStr s 32A varying | ||
+ | D x s 10I 0 | ||
+ | D c s 10I 0 | ||
+ | D f s 10I 0 | ||
+ | D k s 10I 0 | ||
+ | D | ||
+ | D xx s 10I 0 | ||
+ | D xc s 10I 0 | ||
+ | D xf s 10I 0 | ||
+ | D xk s 10I 0 | ||
+ | D | ||
+ | D lx s 10I 0 | ||
+ | D lc s 10I 0 | ||
+ | D lf s 10I 0 | ||
+ | D lk s 10I 0 | ||
+ | D | ||
+ | D rx s 10I 0 | ||
+ | D rc s 10I 0 | ||
+ | D rf s 10I 0 | ||
+ | D rk s 10I 0 | ||
+ | D | ||
+ | D fx s 10I 0 | ||
+ | D fc s 10I 0 | ||
+ | D ff s 10I 0 | ||
+ | D fk s 10I 0 | ||
+ | D | ||
+ | D cx s 10I 0 | ||
+ | D cc s 10I 0 | ||
+ | D cf s 10I 0 | ||
+ | D ck s 10I 0 | ||
+ | D | ||
+ | D len s 10I 0 | ||
+ | D FldIdx s 10I 0 | ||
+ | D SizeIdx s 10I 0 | ||
+ | D ScrnSize s 1 | ||
+ | D SflCtl s N | ||
+ | |||
+ | D RcvVarLen S Like( IntTyp ) | ||
+ | D Idx S Like( IntTyp ) | ||
+ | |||
+ | D APIErrDS DS | ||
+ | D ApiErrLen 10I 0 Inz( %Size( APIErrDS ) ) | ||
+ | D BytesAvail 10I 0 Inz( *Zero ) | ||
+ | D 7 Inz( *Blanks ) | ||
+ | D 1 Inz( X'00' ) | ||
+ | D 256 Inz( *Blanks ) | ||
+ | |||
+ | |||
+ | D CONSTANT C x'01' | ||
+ | D DFT C x'01' | ||
+ | D Bit0 C X'80' | ||
+ | D Bit1 C X'40' | ||
+ | D Bit2 C X'20' | ||
+ | D Bit3 C X'10' | ||
+ | D Bit4 C X'08' | ||
+ | D Bit5 C X'04' | ||
+ | D Bit6 C X'02' | ||
+ | D Bit7 C X'01' | ||
+ | * How to test for bits | ||
+ | * If %Bitand(Hexval:Bit0) = Bit0; | ||
+ | * Dsply 'Bit 0 is *On'; | ||
+ | * Else; | ||
+ | * Dsply 'Bit 0 is *Off'; | ||
+ | * Endif; | ||
+ | |||
+ | |||
+ | D KwdData s 3564A varying based(p_KwdData) | ||
+ | |||
+ | D temp s like(KwdData) | ||
+ | *%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
+ | D col s 5I 0 | ||
+ | D row s 5I 0 | ||
+ | |||
+ | D wBinDS DS | ||
+ | D hx1 1 1 | ||
+ | D hx2 2 2 | ||
+ | D wBin 1 2B 0 | ||
+ | |||
+ | |||
+ | C CallP RtvDspFDesc( | ||
+ | C RtvSizeInfo : | ||
+ | C 8 : | ||
+ | C 'DSPF0100' : | ||
+ | C QDspFil : | ||
+ | C APIErrDS | ||
+ | C ) | ||
+ | C If BytesAvail > 0 | ||
+ | C Return *Off | ||
+ | C EndIf | ||
+ | |||
+ | C eval p_QDFFBASE = %alloc(RtvSize) | ||
+ | |||
+ | *------------------------------------------------------------------- | ||
+ | C Reset APIErrDS | ||
+ | * Retrieve display file description ( QDFRTVFD ) API | ||
+ | C CallP RtvDspFDesc( | ||
+ | C QDFFBASE : | ||
+ | C RtvSize : | ||
+ | C 'DSPF0100' : | ||
+ | C QDspFil : | ||
+ | C APIErrDS | ||
+ | C ) | ||
+ | C If BytesAvail > 0 | ||
+ | C Return *Off | ||
+ | C EndIf | ||
+ | C | ||
+ | C Eval p_FldDtaDS = %addr(FldDta) | ||
+ | C | ||
+ | C | ||
+ | C Eval NumFlds = 1 | ||
+ | C Eval %OCCUR(FldDtaDS) = NumFlds | ||
+ | // file header | ||
+ | C Eval p_QDFFINFO = p_QDFFBASE + QDFFBASE.WDFFINFO | ||
+ | // file where used | ||
+ | C Eval p_QDFWFLEI = p_QDFFINFO + QDFFINFO.WDFFWUOF | ||
+ | // file Dev Dep | ||
+ | C Eval p_QDFFDPDD = p_QDFFINFO + QDFFINFO.WDFFXDOF | ||
+ | // rec where used (first) | ||
+ | C Eval p_QDFWRCDI = p_QDFWFLEI + QDFWFLEI.WDFWXLEN | ||
+ | // name table | ||
+ | C Eval p_QDFFNTBL = p_QDFWFLEI + QDFWFLEI.WDFWNTBO | ||
+ | // File Keywords | ||
+ | C EXSR FileKwds | ||
+ | |||
+ | // process record formats | ||
+ | C for xx = 0 to (QDFFBASE.WDFFRCS - 1) | ||
+ | |||
+ | C if xx <> 0 | ||
+ | C Eval p_QDFWRCDI = p_QDFWRCDI + QDFWRCDI.WDFWNXTR | ||
+ | C Endif | ||
+ | // record format | ||
+ | C eval p_QDFARFTE = p_QDFFINFO + QDFFINFO.WDFFDFLO + | ||
+ | C (%size(QDFARFTE) * xx) | ||
+ | |||
+ | C eval RecordName = QDFARFTE.WDFARFNM | ||
+ | C | ||
+ | |||
+ | C if %subst(RecordName:1:1) <> '*' | ||
+ | C EXSR ProcessRecFmt | ||
+ | C endif | ||
+ | |||
+ | |||
+ | C endfor | ||
+ | C | ||
+ | |||
+ | C DeAlloc p_QDFFBASE | ||
+ | C Return *On | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | *------------------------------------------------ | ||
+ | * Process a record format. | ||
+ | *------------------------------------------------ | ||
+ | CSR ProcessRecFmt begsr | ||
+ | |||
+ | |||
+ | // record header | ||
+ | C eval p_QDFFRINF = p_QDFFINFO + QDFARFTE.WDFARFOF | ||
+ | // record dev dept | ||
+ | C eval p_QDFFRDPD = p_QDFFRINF + QDFFRINF.WDFFRAOF | ||
+ | * SFLCTL | ||
+ | * 12 C BIN(31) WDFFRFLG Miscellaneous record contents. | ||
+ | * 12 C 0 BIT(1) WDFFUDDS If on, USRDFN keyword is specified. | ||
+ | * 12 C 1 BIT(1) WDFFSFL If on, SFL keyword is specified (next record | ||
+ | * 12 C 2 BIT(1) WDFFSFLC If on, SFLCTL keyword is specified (prev | ||
+ | C eval SflCtl = *off | ||
+ | C if %bitand(QDFFRINF.WDFFRFLG1 : Bit2) = Bit2 | ||
+ | C eval p_QDFFSFCR = p_QDFFRINF + QDFFRINF.WDFFRAOF | ||
+ | C eval p_QDFFSFHR = %addr(QDFFSFCR.WDFFSFPM) | ||
+ | C eval SflCtl = *on | ||
+ | C endif | ||
+ | |||
+ | C for SizeIdx = 0 to QDFFBASE.WDFFSCR -1 | ||
+ | C eval p_QDFFSCRA = %addr( QDFFBASE.WDFFSCRS) + | ||
+ | C %size(QDFFSCRA) * SizeIdx | ||
+ | // *DS3 = X'03' *DS4 = X'04' | ||
+ | C eval ScrnSize = QDFFSCRA.WDFFSCIA | ||
+ | C endfor | ||
+ | |||
+ | // Row Col table | ||
+ | C eval p_QDFFRCTB = p_QDFFRINF + QDFFRDPD.WDFFDRCO | ||
+ | C | ||
+ | C eval TotFlds = QDFFRINF.WDFFFLD | ||
+ | // Record Keywords | ||
+ | C EXSR RcdKwds | ||
+ | C | ||
+ | |||
+ | C EXSR ProcessRcdFld | ||
+ | |||
+ | CSR endsr | ||
+ | |||
+ | |||
+ | |||
+ | CSR ProcessRcdFld begsr | ||
+ | * - Field Where Used - | ||
+ | C eval p_QDFWFLDI = p_QDFWRCDI + QDFWRCDI.WDFWRLEN | ||
+ | C eval p_QDFFFITB = p_QDFFRINF + QDFFRINF.WDFFOFIT | ||
+ | C +( QDFWFLDI.WDFWRRDX -1) * %len(QDFFFITB) | ||
+ | C for FldIdx = 0 to QDFFRINF.WDFFFLD -1 | ||
+ | |||
+ | C Exsr GetFldInfo | ||
+ | |||
+ | C Exsr FieldKwds | ||
+ | |||
+ | * p_QDFWFLDI = p_QDFWFLDI + WDFWFLDL next | ||
+ | C if FldIdx < QDFFRINF.WDFFFLD -1 | ||
+ | C eval p_QDFWFLDI = p_QDFWFLDI + | ||
+ | C QDFWFLDI.WDFWFLDL | ||
+ | * Field Indexing Table (QDFFFITB) for next Field | ||
+ | C eval p_QDFFFITB = p_QDFFRINF + QDFFRINF.WDFFOFIT | ||
+ | C +( QDFWFLDI.WDFWRRDX -1) * %len(QDFFFITB) | ||
+ | C endif | ||
+ | |||
+ | C Eval #NumFlds = NumFlds | ||
+ | C Eval NumFlds += 1 | ||
+ | C Eval %OCCUR(FldDtaDS) = NumFlds | ||
+ | |||
+ | |||
+ | C Clear #FmtNam | ||
+ | C Clear #FldNam | ||
+ | C Clear #FldDTUS | ||
+ | C Clear #FldEdt | ||
+ | C Clear #FldLen | ||
+ | C Clear #FldPlen | ||
+ | C Clear #FldDec | ||
+ | C Clear #FldAtr | ||
+ | C Clear #FldRow | ||
+ | C Clear #FldCol | ||
+ | C Clear #FldCom | ||
+ | C | ||
+ | C endfor | ||
+ | C | ||
+ | C | ||
+ | C | ||
+ | CSR endsr | ||
+ | |||
+ | CSR GetFldInfo begsr | ||
+ | * | ||
+ | C eval #FmtNam = RecordName | ||
+ | |||
+ | * - Field Header | ||
+ | C eval p_QDFFFINF = p_QDFFRINF + QDFFFITB.WDFFFOFS | ||
+ | C if QDFFFINF.WDFFFIOA = x'01' | ||
+ | C eval p_QDFFFCON = %ADDR(QDFFFINF.WDFFFTBE) | ||
+ | C eval p_QDFFFDPD = p_QDFFFINF + QDFFFCON.WDFFFAOC | ||
+ | C else | ||
+ | * Variable | ||
+ | C eval p_QDFFFNAM = %ADDR(QDFFFINF.WDFFFTBE) | ||
+ | C eval p_QDFFFDPD = p_QDFFFINF + QDFFFNAM.WDFFFAOF | ||
+ | C eval p_QDFFFDIC = %addr(QDFFFDPD.WDFFFICE) | ||
+ | C endif | ||
+ | * Field Extension | ||
+ | C eval p_QDFFXFDP = p_QDFFFINF + QDFFFDPD.WDFFXFDO | ||
+ | * Row Column | ||
+ | C eval p_QDFFRCTB = p_QDFFRINF + QDFFRDPD.WDFFDRCO | ||
+ | C + (QDFWFLDI.WDFWRRDX -1) *2 | ||
+ | |||
+ | C eval p_QDFFRCTE = %addr(QDFFRCTB.WDFFRC) | ||
+ | * | ||
+ | C eval hx1 = x'00' | ||
+ | C eval hx2 = QDFFRCTE.WDFFSROW | ||
+ | C eval row = wBin | ||
+ | C eval hx1 = x'00' | ||
+ | C eval hx2 = QDFFRCTE.WDFFSCOL | ||
+ | C eval col = wBin | ||
+ | C eval #FldRow = row | ||
+ | C eval #FldCol = col | ||
+ | * date time flags | ||
+ | C if %bitand(QDFFFINF.WDFFBFLG : Bit0) = Bit0 | ||
+ | C eval #FldCom = 'DATE' | ||
+ | C eval #FldDTUS = 'D' | ||
+ | C endif | ||
+ | C if %bitand(QDFFFINF.WDFFBFLG : Bit1) = Bit1 | ||
+ | C eval #FldDTUS = 'Y' | ||
+ | C endif | ||
+ | C if %bitand(QDFFFINF.WDFFBFLG : Bit2) = Bit2 | ||
+ | C eval #FldDTUS = 'T' | ||
+ | C endif | ||
+ | C if %bitand(QDFFFINF.WDFFFBIT : Bit4) = Bit4 | ||
+ | C eval #FldDTUS = 'U' | ||
+ | C endif | ||
+ | C if %bitand(QDFFFINF.WDFFFBIT : Bit5) = Bit5 | ||
+ | C eval #FldDTUS = 'S' | ||
+ | C endif | ||
+ | * | ||
+ | * CONSTANTS | ||
+ | C if QDFFFINF.WDFFFIOA = x'01' | ||
+ | C EXSR ProcessCons | ||
+ | C ELSE | ||
+ | * Field Name | ||
+ | C eval p_QDFFNTB = %addr(QDFFNTBL.WDFFNMES) + | ||
+ | C + 10 * (QDFWFLDI.WDFWNMEI -1) | ||
+ | * | ||
+ | * QDFFFINF.WDFFFIOA | ||
+ | *Field attribute. | ||
+ | *X'01' indicates Constant (see structure QDFFFCON, Constant Field Header | ||
+ | *X'02' indicates Output (O), | ||
+ | *X'03' indicates Message (M), h (B), | ||
+ | *X'04' indicates Input (I), (P) | ||
+ | *X'05' indicates Both (B), | ||
+ | *X'06' indicates Hidden (H), and | ||
+ | *X'07' indicates Program to System (P) | ||
+ | C eval #FldIO = QDFFFINF.WDFFFIOA | ||
+ | * WDFFKBDT | ||
+ | * Keyboard shift and data type. | ||
+ | * X'00' indicates Alpha shift/character (A), | ||
+ | * X'01' indicates Alpha only (X), | ||
+ | * X'02' indicates Numeric shift (N), | ||
+ | * X'03' indicates Numeric only (Y), | ||
+ | * X'04' indicates Katakana (K), | ||
+ | * X'05' indicates Digits only (D), | ||
+ | * X'06' indicates Inhibit keyboard (I), | ||
+ | * X'07' indicates Signed numeric/zoned (S), | ||
+ | * X'08' indicates Binary (B), X'09' indicates Packed (P), | ||
+ | * X'0A' indicates Floating (F), | ||
+ | * X'0B' indicates DBCS (J), | ||
+ | * X'0C' indicates Open (O), X'0D' indicates Either (E), | ||
+ | * X'0E' indicates Numeric-only character (M), | ||
+ | * X'0F' indicates Graphic (G), | ||
+ | * X'10' indicates Date (L), | ||
+ | * X'11' indicates Time (T), and | ||
+ | * X'12' indicates Timestamp (Z) | ||
+ | |||
+ | C eval #FldAtr = QDFFFNAM.WDFFKBDT | ||
+ | C eval #FldNam = QDFFNTB.WDFFNAM | ||
+ | C eval #FldCom = *blank | ||
+ | C eval #FldPlen = QDFFFNAM.WDFFPLEN | ||
+ | C eval #FldDec = QDFFFNAM.WDFFDEC | ||
+ | |||
+ | |||
+ | C endif | ||
+ | |||
+ | |||
+ | CSR endsr | ||
+ | |||
+ | |||
+ | *------------------------------------------------ | ||
+ | * This loops through all keyword categories | ||
+ | * for a constant field (text on the screen.) | ||
+ | *------------------------------------------------ | ||
+ | CSR ProcessCons begsr | ||
+ | C | ||
+ | C* | ||
+ | C if (QDFFFDPD.WDFFFDOC > 0) | ||
+ | C* | ||
+ | C eval p_QDFFCOSA = p_QDFFFINF + | ||
+ | C QDFFFDPD.WDFFFDOC | ||
+ | C* | ||
+ | C for cc = 0 to (QDFFCOSA.WDFFCCT - 1) | ||
+ | C* | ||
+ | C eval p_QDFFCCOA = %addr(QDFFCOSA.WDFFCCOS) | ||
+ | C + (cc * %size(QDFFCCOA)) | ||
+ | |||
+ | C if (QDFFCCOA.WDFFCAID = x'22') | ||
+ | C eval p_QDFKMFDK= p_QDFFFINF + | ||
+ | C QDFFCCOA.WDFFCAOF | ||
+ | C exsr ProcessCat22 | ||
+ | C endif | ||
+ | |||
+ | C if (QDFFCCOA.WDFFCAID = x'23') | ||
+ | C eval p_QDFKDFT = p_QDFFFINF + | ||
+ | C QDFFCCOA.WDFFCAOF | ||
+ | C exsr ProcessCat23 | ||
+ | C endif | ||
+ | C | ||
+ | C if (QDFFCCOA.WDFFCAID = x'24') | ||
+ | C eval p_QDFKEDTR = p_QDFFFINF + | ||
+ | C QDFFCCOA.WDFFCAOF | ||
+ | C exsr ProcessCat24 | ||
+ | C endif | ||
+ | |||
+ | C endfor | ||
+ | C | ||
+ | C endif | ||
+ | C | ||
+ | CSR endsr | ||
+ | |||
+ | |||
+ | |||
+ | *------------------------------------------------ | ||
+ | * Process File Keywords. | ||
+ | *------------------------------------------------ | ||
+ | CSR FileKwds begsr | ||
+ | C | ||
+ | C if (QDFFDPDD.WDFFXDOC > 0) | ||
+ | C* | ||
+ | C eval p_QDFFCOSA = p_QDFFINFO + | ||
+ | C QDFFDPDD.WDFFXDOC | ||
+ | C* | ||
+ | C for lc = 0 to (QDFFCOSA.WDFFCCT - 1) | ||
+ | C* | ||
+ | C eval p_QDFFCCOA = %addr(QDFFCOSA.WDFFCCOS) | ||
+ | C + (lc * %size(QDFFCCOA)) | ||
+ | |||
+ | C eval p_QDFKFILK = p_QDFFINFO + | ||
+ | C QDFFCCOA.WDFFCAOF | ||
+ | |||
+ | C for lk = 1 to QDFKFILK.WDFFKFIL | ||
+ | |||
+ | C if (lk=1) | ||
+ | C eval p_QDFKFLPM = %addr(QDFKFILK.WDFKFILE) | ||
+ | C else | ||
+ | C eval p_QDFKFLPM = p_QDFKFLPM + | ||
+ | C %size(QDFKFLPM ) | ||
+ | C endif | ||
+ | C | ||
+ | C eval p_QDFKFLPP = %addr(QDFKFLPM.WDFKFLEX) | ||
+ | C for lx = 1 to QDFKFLPM.WDFFKFLP | ||
+ | C | ||
+ | C select | ||
+ | C when QDFKFLPM.WDFKFLID = x'02' | ||
+ | C eval p_QDFKFLSZ = %addr(QDFKFLPP.WDFKFLNM) | ||
+ | C when QDFKFLPM.WDFKFLID = x'04' | ||
+ | C eval p_QDFKICVP = %addr(QDFKFLPP.WDFKFLNM) | ||
+ | C when QDFKFLPM.WDFKFLID = x'05' | ||
+ | C eval p_QDFKHARD = %addr(QDFKFLPP.WDFKFLNM) | ||
+ | C when QDFKFLPM.WDFKFLID = x'06' | ||
+ | C eval p_QDFKHXPS = %addr(QDFKFLPP.WDFKFLNM) | ||
+ | C when QDFKFLPM.WDFKFLID = x'07' | ||
+ | C eval p_QDFKHDOC = %addr(QDFKFLPP.WDFKFLNM) | ||
+ | C when QDFKFLPM.WDFKFLID = x'08' | ||
+ | C eval p_QDFKSIDX = %addr(QDFKFLPP.WDFKFLNM) | ||
+ | C when QDFKFLPM.WDFKFLID = x'0A' | ||
+ | C eval p_QDFKFALX = %addr(QDFKFLPP.WDFKFLNM) | ||
+ | C when QDFKFLPM.WDFKFLID = x'0B' | ||
+ | C eval p_QDFKESFL = %addr(QDFKFLPP.WDFKFLNM) | ||
+ | C when QDFKFLPM.WDFKFLID = x'0C' | ||
+ | C eval p_QDFKBODR = %addr(QDFKFLPP.WDFKFLNM) | ||
+ | C endsl | ||
+ | |||
+ | |||
+ | C eval p_QDFKFLPP = | ||
+ | C p_QDFKFLPP + (QDFKFLPP.WDFKFLLN) | ||
+ | C endfor | ||
+ | |||
+ | C endfor | ||
+ | |||
+ | C | ||
+ | C | ||
+ | C endfor | ||
+ | C | ||
+ | C endif | ||
+ | C | ||
+ | CSR endsr | ||
+ | |||
+ | *------------------------------------------------ | ||
+ | * Process Record Keywords. | ||
+ | *------------------------------------------------ | ||
+ | CSR RcdKwds begsr | ||
+ | |||
+ | |||
+ | C if (QDFFRDPD.WDFFRDOC > 0) | ||
+ | C* | ||
+ | C eval p_QDFFCOSA = p_QDFFRINF + | ||
+ | C QDFFRDPD.WDFFRDOC | ||
+ | |||
+ | C for rc = 0 to (QDFFCOSA.WDFFCCT - 1) | ||
+ | C* | ||
+ | C eval p_QDFFCCOA = %addr(QDFFCOSA.WDFFCCOS) | ||
+ | C + (rc * %size(QDFFCCOA)) | ||
+ | * Miscellaneous record-level keywords (uses (QDFKMSAP)) | ||
+ | * no structures for IDs X'01', X'02', X'03', X'04', X'05', X'06', X'07', | ||
+ | * ID Keyword ID Keyword | ||
+ | * X'01' LOCK X'09' RMVWDW | ||
+ | * X'02' ALARM X'0F' DSPMOD | ||
+ | * X'03' BLINK X'10' CSRLOC | ||
+ | * X'04' LOGOUT X'11' INDARA | ||
+ | * X'05' ALWGPH X'13' SETOFF | ||
+ | * X'06' MSGALARM X'15' RTNCSRLOC | ||
+ | * X'07' RETLCKSTS X'16' MNUBARDSP | ||
+ | * X'08' USRRSTDSP | ||
+ | C eval p_QDFKMSRL = p_QDFFRINF + | ||
+ | C QDFFCCOA.WDFFCAOF | ||
+ | * Command Key Keyword Structure (QDFKCKKW) (uses (QDFKCKKE)) | ||
+ | * Use structure QDFKCKKE for category 2 keyword IDs X'01' through X'25' an | ||
+ | * Use structure QDFKCKKE for category 2 keyword IDs X'01' through X'25' an | ||
+ | * ID Keyword ID Keyword ID Keyword | ||
+ | * X'01' CA/CF01 X'0E' CA/CF14 X'1A' ROLLDOWN | ||
+ | * X'02' CA/CF02 X'0F' CA/CF15 X'1B' PRINT | ||
+ | * X'03' CA/CF03 X'10' CA/CF16 X'1C' HOME | ||
+ | * X'04' CA/CF04 X'11' CA/CF17 X'1D' CLEAR | ||
+ | * X'05' CA/CF05 X'12' CA/CF18 X'1E' HELP | ||
+ | * X'06' CA/CF06 X'13' CA/CF19 X'20' HLPRTN | ||
+ | * X'07' CA/CF07 X'14' CA/CF20 X'21' VLDCMDKEY | ||
+ | * X'08' CA/CF08 X'15' CA/CF21 X'22' ALTHELP | ||
+ | * X'09' CA/CF09 X'16' CA/CF22 X'23' ALTPAGEUP | ||
+ | * X'0A' CA/CF10 X'17' CA/CF23 X'24' ALTPAGEDWN | ||
+ | * X'0B' CA/CF11 X'18' CA/CF24 X'25' MNUBARSW | ||
+ | * X'0C' CA/CF12 X'19' ROLLUP X'30' MNUCNL | ||
+ | * X'0D' CA/CF13 | ||
+ | C eval p_QDFKCKKW = p_QDFFRINF + | ||
+ | C QDFFCCOA.WDFFCAOF | ||
+ | |||
+ | C for rk = 1 to QDFKCKKW.WDFFKCKS | ||
+ | |||
+ | C if (rk=1) | ||
+ | C eval p_QDFKCKKE = %addr(QDFKCKKW.WDFKCKCM) | ||
+ | C else | ||
+ | C eval p_QDFKCKKE = p_QDFKCKKE + | ||
+ | C %size(QDFKCKKE ) | ||
+ | C endif | ||
+ | C | ||
+ | C eval p_QDFKFLPP = %addr(QDFKFLPM.WDFKFLEX) | ||
+ | C for rx = 1 to QDFKFLPM.WDFFKFLP | ||
+ | C | ||
+ | C* this is unfinished | ||
+ | C eval p_QDFKFLPP = | ||
+ | C p_QDFKFLPP + (QDFKFLPP.WDFKFLLN) | ||
+ | C endfor | ||
+ | |||
+ | C endfor | ||
+ | |||
+ | C | ||
+ | C | ||
+ | C endfor | ||
+ | C | ||
+ | C endif | ||
+ | C | ||
+ | CSR endsr | ||
+ | |||
+ | *------------------------------------------------ | ||
+ | * Process Record Keywords. | ||
+ | *------------------------------------------------ | ||
+ | CSR FieldKwds begsr | ||
+ | C* | ||
+ | C if (QDFFFDPD.WDFFFDOC > 0) | ||
+ | C* | ||
+ | C eval p_QDFFCOSA = p_QDFFFINF + | ||
+ | C QDFFFDPD.WDFFFDOC | ||
+ | C* | ||
+ | C for fc = 0 to (QDFFCOSA.WDFFCCT - 1) | ||
+ | C* | ||
+ | C eval p_QDFFCCOA = %addr(QDFFCOSA.WDFFCCOS) | ||
+ | C + (fc * %size(QDFFCCOA)) | ||
+ | |||
+ | C if (QDFFCCOA.WDFFCAID = x'23') | ||
+ | C eval p_QDFKDFT = p_QDFFFINF + | ||
+ | C QDFFCCOA.WDFFCAOF | ||
+ | C exsr ProcessCat23 | ||
+ | C endif | ||
+ | C | ||
+ | C endfor | ||
+ | C | ||
+ | C endif | ||
+ | C | ||
+ | CSR endsr | ||
+ | |||
+ | *------------------------------------------------ | ||
+ | * This loops through all keywords that fall into | ||
+ | * category 22 | ||
+ | *------------------------------------------------ | ||
+ | CSR ProcessCat22 begsr | ||
+ | |||
+ | C for ck = 1 to QDFKMFDK.WDFFKMFS | ||
+ | |||
+ | C if (ck=1) | ||
+ | C eval p_QDFKMFDP = %ADDR(QDFKMFDK.WDFKMFEN) | ||
+ | C else | ||
+ | C eval p_QDFKMFDP = p_QDFKMFDP + | ||
+ | C %size(QDFKMFDP ) | ||
+ | C endif | ||
+ | |||
+ | C select | ||
+ | C when QDFKMFDP.WDFKMFID = x'10' | ||
+ | C eval p_QDFKMFMV = %ADDR(QDFKMFDP.WDFKMFEX) | ||
+ | C when QDFKMFDP.WDFKMFID = x'15' | ||
+ | C eval p_QDFKMFRS = %ADDR(QDFKMFDP.WDFKMFEX) | ||
+ | C eval p_QDFKMFEM = %ADDR(QDFKMFRS.WDFKMFEE) | ||
+ | C when QDFKMFDP.WDFKMFID = x'16' | ||
+ | C eval p_QDFKMFRS = %ADDR(QDFKMFDP.WDFKMFEX) | ||
+ | C eval p_QDFKMFEM = %ADDR(QDFKMFRS.WDFKMFEE) | ||
+ | C eval p_QDFKMFSI = %ADDR(QDFKMFEM.WDFKMFTX) | ||
+ | C when QDFKMFDP.WDFKMFID = x'17' | ||
+ | C eval p_QDFKDFLD = %ADDR(QDFKMFDP.WDFKMFEX) | ||
+ | C when QDFKMFDP.WDFKMFID = x'18' | ||
+ | C eval p_QDFK_DATTIMFmat = %ADDR(QDFKMFDP.WDFKMFEX) | ||
+ | * WDFK_DATTIM | ||
+ | * Format used for a field with the date or time data type. | ||
+ | * X'01' indicates *JOB, | ||
+ | * X'02' indicates *MDY, | ||
+ | * X'03' indicates *DMY, | ||
+ | * X'04' indicates *YMD, | ||
+ | * X'05' indicates *JUL, | ||
+ | * X'06' indicates *ISO, | ||
+ | * X'07' indicates *USA, | ||
+ | * X'08' indicates *EUR, | ||
+ | * X'09' indicates *JIS, | ||
+ | * X'0A' indicates *H | ||
+ | C when QDFKMFDP.WDFKMFID = x'19' | ||
+ | C eval p_QDFK_DATTIM_Sep = %ADDR(QDFKMFDP.WDFKMFEX) | ||
+ | C eval QDFK_DATTIM_Sep.WDFK_DATTIMSep = | ||
+ | C QDFK_DATTIM_Sep.WDFK_DATTIMSep | ||
+ | C | ||
+ | C when QDFKMFDP.WDFKMFID = x'1A' | ||
+ | C eval p_QDFK_DATEP = %ADDR(QDFKMFDP.WDFKMFEX) | ||
+ | C eval QDFK_DATEP.WDFK_DATE = QDFK_DATEP.WDFK_DATE | ||
+ | * 0 BIT(1) WDFK_DATE_SYS If on, the *SYS parameter is specified | ||
+ | * 1 BIT(1) WDFK_DATE_YY If on, the *YY parameter is specified | ||
+ | * 2 BIT(1) WDFK_DATE_EDTCDEY If on, the EDTCDE(Y) keyword was specify | ||
+ | C* If %Bitand(WDFK_DATE:Bit0) = Bit0 | ||
+ | C* If %Bitand(WDFK_DATE:Bit1) = Bit1 | ||
+ | C* If %Bitand(WDFK_DATE:Bit2) = Bit2 | ||
+ | |||
+ | C when QDFKMFDP.WDFKMFID = x'1B' | ||
+ | C eval p_QDFK_MAPVAL = %ADDR(QDFKMFDP.WDFKMFEX) | ||
+ | C endsl | ||
+ | |||
+ | C endfor | ||
+ | C | ||
+ | C | ||
+ | C | ||
+ | CSR endsr | ||
+ | *------------------------------------------------ | ||
+ | * This loops through all keywords that fall into | ||
+ | * category 23 (DFT, MSGCON, DFTVAL, HTML) | ||
+ | *------------------------------------------------ | ||
+ | CSR ProcessCat23 begsr | ||
+ | |||
+ | C for ck = 1 to QDFKDFT.WDFFKDFS | ||
+ | |||
+ | C if (ck=1) | ||
+ | C eval p_QDFKDFPM = %addr(QDFKDFT.WDFKDFPE) | ||
+ | C else | ||
+ | C eval p_QDFKDFPM = p_QDFKDFPM + | ||
+ | C %size(QDFKDFPM ) | ||
+ | C endif | ||
+ | |||
+ | C if (QDFKDFPM.WDFKDFID = DFT) | ||
+ | |||
+ | C eval p_KwdData = p_QDFKDFPM + | ||
+ | C %size(QDFKDFPM ) - 2 | ||
+ | |||
+ | C eval Temp = KwdData | ||
+ | C | ||
+ | |||
+ | C eval #FldLen = QDFKDFPM.WDFKDFLN | ||
+ | C eval #FldIO = QDFFFINF.WDFFFIOA | ||
+ | C eval #FldCom = Temp | ||
+ | C | ||
+ | C endif | ||
+ | C | ||
+ | C endfor | ||
+ | CSR endsr | ||
+ | |||
+ | |||
+ | *------------------------------------------------ | ||
+ | * This loops through all keywords that fall into | ||
+ | * category 24 (Date, Time) | ||
+ | *------------------------------------------------ | ||
+ | CSR ProcessCat24 begsr | ||
+ | |||
+ | C for ck = 1 to QDFKEDTR.WDFFKEDS | ||
+ | |||
+ | C if (ck=1) | ||
+ | C eval p_QDFKEDTP = %addr(QDFKEDTR.WDFKEDKW ) | ||
+ | C else | ||
+ | C eval p_QDFKEDTP = p_QDFKEDTP + | ||
+ | C %size(QDFKEDTP ) | ||
+ | C endif | ||
+ | C | ||
+ | C | ||
+ | * EDIT Keyword Structure (QDFKEDTP) | ||
+ | * Use this structure for category 24 keywords that | ||
+ | * have keyword IDs of X'01' and X'02'. | ||
+ | |||
+ | * Type Variable Name Field | ||
+ | * CHAR(1) WDFKEDID Keyword ID. | ||
+ | * CHAR(1) WDFKEDSY Zero suppress or fill character for the EDTCDE k | ||
+ | * BIN(15) WDFKEDML Length of the edit mask. | ||
+ | * CHAR(1) * Reserved. | ||
+ | * CHAR(*) WDFKEDMS The edit mask for the EDTCDE and EDTWRD keywords | ||
+ | * | ||
+ | |||
+ | C eval #FldEdt = %subst(QDFKEDTP.WDFKEDMSX : 1 | ||
+ | C : QDFKEDTP.WDFKEDML) | ||
+ | |||
+ | C eval #FldLen = QDFKEDTP.WDFKEDML | ||
+ | C eval #FldIO = QDFFFINF.WDFFFIOA | ||
+ | |||
+ | |||
+ | C endfor | ||
+ | CSR endsr | ||
+ | |||
+ | P RtvFlds E | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | [[#top]] | ||
+ | |||
+ | |||
+ | |||
+ | === DSMFD Driver === | ||
+ | <pre> | ||
+ | h Option(*NODEBUGIO) | ||
+ | |||
+ | // CRTRPGMOD MODULE(urlib/DSMFD) | ||
+ | // SRCFILE(urlib/ursrcfile) | ||
+ | // SRCMBR(DSMFD) REPLACE(*YES) | ||
+ | |||
+ | |||
+ | // CRTSRVPGM SRVPGM(urlib/DSPFINFO) | ||
+ | // MODULE(urlib /DSPFINFO) | ||
+ | // EXPORT(*ALL) | ||
+ | |||
+ | // CRTPGM PGM(urlib/DSMFD) MODULE(urlib/DSMFD) | ||
+ | // BNDSRVPGM((urlib/DSPFINFO *IMMED) ) | ||
+ | |||
+ | // CALL urlib/DSMFD ('*LIBL ' 'CDISPRF ') | ||
+ | |||
+ | |||
+ | D DSMFD PR | ||
+ | D 10 | ||
+ | D 10 | ||
+ | |||
+ | D DSMFD PI | ||
+ | D $Lib 10 | ||
+ | D $Fil 10 | ||
+ | |||
+ | D $FilQul S 20 | ||
+ | |||
+ | |||
+ | /if defined(QSNAPI_H) | ||
+ | /eof | ||
+ | /endif | ||
+ | /define QSNAPI_H | ||
+ | *------------------------------------------------------------- | ||
+ | * Simple data types | ||
+ | *------------------------------------------------------------- | ||
+ | D Q_Handle_T s 10I 0 based(Template) | ||
+ | D Qsn_Cmd_Buf_T s like(Q_Handle_T) based(Template) | ||
+ | D Qsn_Inp_Buf_T s like(Q_Handle_T) based(Template) | ||
+ | D Qsn_Env_T s like(Q_Handle_T) based(Template) | ||
+ | D QSN_FAIL c -1 | ||
+ | *------------------------------------------------------------- | ||
+ | * QsnCrtCmdBuf(): Create command buffer | ||
+ | *------------------------------------------------------------- | ||
+ | D QsnCrtCmdBuf PR 10I 0 extproc('QsnCrtCmdBuf') | ||
+ | D InitSize 10I 0 const | ||
+ | D IncrAmt 10I 0 const options(*omit) | ||
+ | D MaxSize 10I 0 const options(*omit) | ||
+ | D Handle 10I 0 options(*omit) | ||
+ | D ErrorCode 32767A options(*omit: *varsize) | ||
+ | *------------------------------------------------------------- | ||
+ | * QsnCrtInpBuf(): Create Input Buffer | ||
+ | *------------------------------------------------------------- | ||
+ | D QsnCrtInpBuf PR 10I 0 extproc('QsnCrtInpBuf') | ||
+ | D BufSize 10I 0 const | ||
+ | D IncrAmt 10I 0 const options(*omit) | ||
+ | D MaxSize 10I 0 const options(*omit) | ||
+ | D Handle 10I 0 options(*omit) | ||
+ | D ErrorCode 32767A options(*omit: *varsize) | ||
+ | *------------------------------------------------------------- | ||
+ | * QsnClrBuf(): Clear/Reset Buffer (any type) | ||
+ | *------------------------------------------------------------- | ||
+ | D QsnClrBuf PR 10I 0 extproc('QsnClrBuf') | ||
+ | D BufHandle 10I 0 const | ||
+ | D ErrorCode 32767A options(*omit: *varsize) | ||
+ | *------------------------------------------------------------- | ||
+ | * QsnDltBuf(): Delete buffer (any type) | ||
+ | *------------------------------------------------------------- | ||
+ | D QsnDltBuf PR 10I 0 extproc('QsnDltBuf') | ||
+ | D BufHandle 10I 0 const | ||
+ | D ErrorCode 32767A options(*omit: *varsize) | ||
+ | *------------------------------------------------------------- | ||
+ | * QsnClrScr(): Clear screen | ||
+ | *------------------------------------------------------------- | ||
+ | D QsnClrScr PR 10I 0 extproc('QsnClrScr') | ||
+ | D mode 1A const options(*omit) | ||
+ | D cmdbuf 10I 0 const options(*omit) | ||
+ | D LowEnvHandle 10I 0 const options(*omit) | ||
+ | D ErrorCode 32767A options(*omit: *varsize) | ||
+ | *------------------------------------------------------------- | ||
+ | * QsnWrtDta(): Write data to the display | ||
+ | *------------------------------------------------------------- | ||
+ | D QsnWrtDta PR 10I 0 extproc('QsnWrtDta') | ||
+ | D Data 32767A const options(*varsize) | ||
+ | D DataLen 10I 0 const | ||
+ | D FieldID 10I 0 const options(*omit) | ||
+ | D Row 10I 0 const options(*omit) | ||
+ | D Column 10I 0 const options(*omit) | ||
+ | D StrMonoAttr 1A const options(*omit) | ||
+ | D EndMonoAttr 1A const options(*omit) | ||
+ | D StrColorAttr 1A const options(*omit) | ||
+ | D EndColorAttr 1A const options(*omit) | ||
+ | D CmdBufHandle 10I 0 const options(*omit) | ||
+ | D LowEnvHandle 10I 0 const options(*omit) | ||
+ | D ErrorCode 32767A options(*omit: *varsize) | ||
+ | *------------------------------------------------------------- | ||
+ | * QsnSetFld(): Add a field to the display | ||
+ | *------------------------------------------------------------- | ||
+ | D QsnSetFld PR 10I 0 extproc('QsnSetFld') | ||
+ | D FieldID 10I 0 const options(*omit) | ||
+ | D FieldLen 10I 0 const options(*omit) | ||
+ | D Row 10I 0 const options(*omit) | ||
+ | D Column 10I 0 const options(*omit) | ||
+ | D FFW 2A const options(*omit) | ||
+ | D FCW 2A const dim(32767) | ||
+ | D options(*omit: *varsize) | ||
+ | D NumOfFCW 10I 0 const options(*omit) | ||
+ | D MonoAttr 1A const options(*omit) | ||
+ | D ColorAttr 1A const options(*omit) | ||
+ | D CmdBufHandle 10I 0 const options(*omit) | ||
+ | D LowEnvHandle 10I 0 const options(*omit) | ||
+ | D ErrorCode 32767A options(*omit: *varsize) | ||
+ | *------------------------------------------------------------- | ||
+ | * QsnReadInp(): Read data and wait for AID key | ||
+ | *------------------------------------------------------------- | ||
+ | D QsnReadInp PR 10I 0 extproc('QsnReadInp') | ||
+ | D CC1 1A const | ||
+ | D CC2 1A const | ||
+ | D DataBytes 10I 0 options(*omit) | ||
+ | D InpBufHandle 10I 0 options(*omit) | ||
+ | D CmdBufHandle 10I 0 options(*omit) | ||
+ | D LowEnvHandle 10I 0 options(*omit) | ||
+ | D ErrorCode 32767A options(*omit: *varsize) | ||
+ | *------------------------------------------------------------- | ||
+ | * QsnPutBuf(): Send command output buffer to terminal | ||
+ | *------------------------------------------------------------- | ||
+ | D QsnPutBuf PR 10I 0 extproc('QsnPutBuf') | ||
+ | D CmdBufHandle 10I 0 const | ||
+ | D LowEnvHandle 10I 0 const options(*omit) | ||
+ | D ErrorCode 32767A options(*omit: *varsize) | ||
+ | *------------------------------------------------------------- | ||
+ | * QsnPutGetBuf(): Send command output buffer to terminal | ||
+ | * then wait for input buffer from terminal | ||
+ | *------------------------------------------------------------- | ||
+ | D QsnPutGetBuf PR 10I 0 extproc('QsnPutGetBuf') | ||
+ | D CmdBufHandle 10I 0 const | ||
+ | D InpBufHandle 10I 0 const | ||
+ | D LowEnvHandle 10I 0 const options(*omit) | ||
+ | D ErrorCode 32767A options(*omit: *varsize) | ||
+ | *------------------------------------------------------------- | ||
+ | * QsnRtvDta(): Get pointer to input data in input buffer | ||
+ | *------------------------------------------------------------- | ||
+ | D QsnRtvDta PR * extproc('QsnRtvDta') | ||
+ | D InpBufHandle 10I 0 const | ||
+ | D PtrToData * const options(*omit) | ||
+ | D ErrorCode 32767A options(*omit: *varsize) | ||
+ | *------------------------------------------------------------- | ||
+ | * QsnRtvDtaLen(): Get length of input data in input buffer | ||
+ | *------------------------------------------------------------- | ||
+ | D QsnRtvDtaLen PR 10I 0 extproc('QsnRtvDtaLen') | ||
+ | D InpBufHandle 10I 0 const | ||
+ | D DataLen 10I 0 const options(*omit) | ||
+ | D ErrorCode 32767A options(*omit: *varsize) | ||
+ | *------------------------------------------------------------- | ||
+ | * | ||
+ | *------------------------------------------------------------- | ||
+ | D Qsn_Env_Desc_T... | ||
+ | D DS qualified based(Template) | ||
+ | D color_support 1A | ||
+ | D CDRA 1A | ||
+ | D CDRA_3F 1A | ||
+ | D DBCS_support 1A | ||
+ | D coexist 1A | ||
+ | D alt_help 1A | ||
+ | D tgt_dev 10A | ||
+ | D disp_file 20A | ||
+ | D invite_active 1A | ||
+ | D prevent_ovrd 1A | ||
+ | *------------------------------------------------------------- | ||
+ | * | ||
+ | *------------------------------------------------------------- | ||
+ | D Qsn_Env_Rtv_Desc_T... | ||
+ | D DS qualified based(Template) | ||
+ | D bytes_rtn 10I 0 | ||
+ | D bytes_avail 10I 0 | ||
+ | D color_support 1A | ||
+ | D CDRA 1A | ||
+ | D CDRA_3F 1A | ||
+ | D DBCS_support 1A | ||
+ | D coexist 1A | ||
+ | D alt_help 1A | ||
+ | D tgt_dev 10A | ||
+ | D dsp_file 20A | ||
+ | D invite_active 1A | ||
+ | D prevent_ovrd 1A | ||
+ | *------------------------------------------------------------- | ||
+ | * Constants used for creating/querying the environment | ||
+ | *------------------------------------------------------------- | ||
+ | D QSN_COLOR_NO... | ||
+ | D C '1' | ||
+ | D QSN_COLOR_YES... | ||
+ | D C '2' | ||
+ | D QSN_COLOR_SELECT... | ||
+ | D C '3' | ||
+ | D QSN_CDRA_STD... | ||
+ | D C '1' | ||
+ | D QSN_CDRA_CNVT... | ||
+ | D C '2' | ||
+ | D QSN_DBCS_STD... | ||
+ | D C '1' | ||
+ | D QSN_DBCS_ONLY... | ||
+ | D C '2' | ||
+ | D QSN_DBCS_EITHER... | ||
+ | D C '3' | ||
+ | D QSN_DBCS_MIXED... | ||
+ | D C '4' | ||
+ | D QSN_COEXIST_YES... | ||
+ | D C '1' | ||
+ | D QSN_COEXIST_NO... | ||
+ | D C '2' | ||
+ | D QSN_ALTHELP_NO... | ||
+ | D C '1' | ||
+ | D QSN_TGT_REQ... | ||
+ | D C '*REQUESTER' | ||
+ | D QSN_INVITE_NO... | ||
+ | D C '1' | ||
+ | D QSN_INVITE_YES... | ||
+ | D C '2' | ||
+ | D QSN_PREVENT_OVERRIDE_NO... | ||
+ | D C '1' | ||
+ | D QSN_PREVENT_OVERRIDE_YES... | ||
+ | D C '2' | ||
+ | D QSN_SAME C '0' | ||
+ | D QSN_DSP03 C '3' | ||
+ | D QSN_DSP04 C '4' | ||
+ | *------------------------------------------------------------- | ||
+ | * AID keys (function keys, et al) | ||
+ | *------------------------------------------------------------- | ||
+ | D Qsn_F1 C X'31' | ||
+ | D Qsn_F2 C X'32' | ||
+ | D Qsn_F3 C X'33' | ||
+ | D Qsn_F4 C X'34' | ||
+ | D Qsn_F5 C X'35' | ||
+ | D Qsn_F6 C X'36' | ||
+ | D Qsn_F7 C X'37' | ||
+ | D Qsn_F8 C X'38' | ||
+ | D Qsn_F9 C X'39' | ||
+ | D Qsn_F10 C X'3A' | ||
+ | D Qsn_F11 C X'3B' | ||
+ | D Qsn_F12 C X'3C' | ||
+ | D Qsn_F13 C X'B1' | ||
+ | D Qsn_F14 C X'B2' | ||
+ | D Qsn_F15 C X'B3' | ||
+ | D Qsn_F16 C X'B4' | ||
+ | D Qsn_F17 C X'B5' | ||
+ | D Qsn_F18 C X'B6' | ||
+ | D Qsn_F19 C X'B7' | ||
+ | D Qsn_F20 C X'B8' | ||
+ | D Qsn_F21 C X'B9' | ||
+ | D Qsn_F22 C X'BA' | ||
+ | D Qsn_F23 C X'BB' | ||
+ | D Qsn_F24 C X'BC' | ||
+ | D Qsn_SLP C X'3F' | ||
+ | D Qsn_FET C X'50' | ||
+ | D Qsn_PA1 C X'6C' | ||
+ | D Qsn_PA2 C X'6E' | ||
+ | D Qsn_PA3 C X'6B' | ||
+ | D Qsn_Clear C X'BD' | ||
+ | D Qsn_Enter C X'F1' | ||
+ | D Qsn_Help C X'F3' | ||
+ | D Qsn_RollDown C X'F4' | ||
+ | D Qsn_RollUp C X'F5' | ||
+ | D Qsn_PageUp C X'F4' | ||
+ | D Qsn_PageDown C X'F5' | ||
+ | D Qsn_Print C X'F6' | ||
+ | D Qsn_RecBS C X'F8' | ||
+ | DQsn5250QY C '1' | ||
+ | DQsn5250QN C '2' | ||
+ | DQsn5250QF C '3' | ||
+ | *------------------------------------------------------------- | ||
+ | * Control Characters ( CC1 & CC2 ) | ||
+ | *------------------------------------------------------------- | ||
+ | D QSN_CC1_NULL... | ||
+ | D C X'00' | ||
+ | D QSN_CC1_LOCKBD... | ||
+ | D C X'20' | ||
+ | D QSN_CC1_MDTNBY... | ||
+ | D C X'40' | ||
+ | D QSN_CC1_MDTALL... | ||
+ | D C X'60' | ||
+ | D QSN_CC1_CLRMOD... | ||
+ | D C X'80' | ||
+ | D QSN_CC1_MDTNBY_CLRALL... | ||
+ | D C X'A0' | ||
+ | D QSN_CC1_MDTNBY_CLRMOD... | ||
+ | D C X'C0' | ||
+ | D QSN_CC1_MDTALL_CLRALL... | ||
+ | D C X'E0' | ||
+ | D QSN_CC2_NULL... | ||
+ | D C X'00' | ||
+ | D QSN_CC2_NO_IC... | ||
+ | D C X'40' | ||
+ | D QSN_CC2_RST_CSR_BL... | ||
+ | D C X'20' | ||
+ | D QSN_CC2_SET_CSR_BL... | ||
+ | D C X'10' | ||
+ | D QSN_CC2_UNLOCKBD... | ||
+ | D C X'08' | ||
+ | D QSN_CC2_ALARM... | ||
+ | D C X'04' | ||
+ | D QSN_CC2_MSG_OFF... | ||
+ | D C X'02' | ||
+ | D QSN_CC2_MSG_ON... | ||
+ | D C X'01' | ||
+ | *------------------------------------------------------------- | ||
+ | * Screen Attributes | ||
+ | *------------------------------------------------------------- | ||
+ | D QSN_NO_SA... | ||
+ | D C X'00' | ||
+ | D QSN_SA_NORM... | ||
+ | D C X'20' | ||
+ | D QSN_SA_CS... | ||
+ | D C X'30' | ||
+ | D QSN_SA_BL... | ||
+ | D C X'28' | ||
+ | D QSN_SA_UL... | ||
+ | D C X'24' | ||
+ | D QSN_SA_HI... | ||
+ | D C X'22' | ||
+ | D QSN_SA_RI... | ||
+ | D C X'21' | ||
+ | D QSN_SA_ND... | ||
+ | D C X'27' | ||
+ | D QSN_SA_GRN... | ||
+ | D C X'20' | ||
+ | D QSN_SA_GRN_RI... | ||
+ | D C X'21' | ||
+ | D QSN_SA_WHT... | ||
+ | D C X'22' | ||
+ | D QSN_SA_WHT_RI... | ||
+ | D C X'23' | ||
+ | D QSN_SA_GRN_UL... | ||
+ | D C X'24' | ||
+ | D QSN_SA_GRN_UL_RI... | ||
+ | D C X'25' | ||
+ | D QSN_SA_WHT_UL... | ||
+ | D C X'26' | ||
+ | D QSN_SA_RED... | ||
+ | D C X'28' | ||
+ | D QSN_SA_RED_RI... | ||
+ | D C X'29' | ||
+ | D QSN_SA_RED_BL... | ||
+ | D C X'2A' | ||
+ | D QSN_SA_RED_RI_BL... | ||
+ | D C X'2B' | ||
+ | D QSN_SA_RED_UL... | ||
+ | D C X'2C' | ||
+ | D QSN_SA_RED_UL_RI... | ||
+ | D C X'2D' | ||
+ | D QSN_SA_RED_UL_BL... | ||
+ | D C X'2E' | ||
+ | D QSN_SA_ND_2F... | ||
+ | D C X'2F' | ||
+ | D QSN_SA_TRQ_CS... | ||
+ | D C X'30' | ||
+ | D QSN_SA_TRQ_CS_RI... | ||
+ | D C X'31' | ||
+ | D QSN_SA_YLW_CS... | ||
+ | D C X'32' | ||
+ | D QSN_SA_YLW_CS_RI... | ||
+ | D C X'33' | ||
+ | D QSN_SA_TRQ_UL... | ||
+ | D C X'34' | ||
+ | D QSN_SA_TRQ_UL_RI... | ||
+ | D C X'35' | ||
+ | D QSN_SA_YLW_UL... | ||
+ | D C X'36' | ||
+ | D QSN_SA_ND_37... | ||
+ | D C X'37' | ||
+ | D QSN_SA_PNK... | ||
+ | D C X'38' | ||
+ | D QSN_SA_PNK_RI... | ||
+ | D C X'39' | ||
+ | D QSN_SA_BLU... | ||
+ | D C X'3A' | ||
+ | D QSN_SA_BLU_RI... | ||
+ | D C X'3B' | ||
+ | D QSN_SA_PNK_UL... | ||
+ | D C X'3C' | ||
+ | D QSN_SA_PNK_UL_RI... | ||
+ | D C X'3D' | ||
+ | D QSN_SA_BLU_UL... | ||
+ | D C X'3E' | ||
+ | D QSN_SA_ND_3F... | ||
+ | D C X'3F' | ||
+ | *------------------------------------------------------------- | ||
+ | * Ideographic shift-in and shift-out | ||
+ | *------------------------------------------------------------- | ||
+ | D QSN_SO C X'0E' | ||
+ | D QSN_SI C X'0F' | ||
+ | *------------------------------------------------------------- | ||
+ | * Field Format Words | ||
+ | *------------------------------------------------------------- | ||
+ | D QSN_NO_FFW C X'0000' | ||
+ | D QSN_FFW_BYPASS C X'6000' | ||
+ | D QSN_FFW_DUP C X'5000' | ||
+ | D QSN_FFW_MDT C X'4800' | ||
+ | D QSN_FFW_ALPHA_SHIFT... | ||
+ | D C X'4000' | ||
+ | D QSN_FFW_ALPHA_ONLY... | ||
+ | D C X'4100' | ||
+ | D QSN_FFW_NUM_SHIFT... | ||
+ | D C X'4200' | ||
+ | D QSN_FFW_NUM_ONLY... | ||
+ | D C X'4300' | ||
+ | D QSN_FFW_KATA... | ||
+ | D C X'4400' | ||
+ | D QSN_FFW_DIGIT_ONLY... | ||
+ | D C X'4500' | ||
+ | D QSN_FFW_IO... | ||
+ | D C X'4600' | ||
+ | D QSN_FFW_SIGNED_NUMERIC... | ||
+ | D C X'4700' | ||
+ | D QSN_FFW_AUTO_ENTER... | ||
+ | D C X'4080' | ||
+ | D QSN_FFW_FER... | ||
+ | D C X'4040' | ||
+ | D QSN_FFW_AUTO_FER... | ||
+ | D C X'4040' | ||
+ | D QSN_FFW_MONOCASE... | ||
+ | D C X'4020' | ||
+ | D QSN_FFW_AUTO_MONOCASE... | ||
+ | D C X'4020' | ||
+ | D QSN_FFW_ME... | ||
+ | D C X'4008' | ||
+ | D QSN_FFW_NOADJUST... | ||
+ | D C X'4000' | ||
+ | D QSN_FFW_RA_ZERO... | ||
+ | D C X'4005' | ||
+ | D QSN_FFW_RA_BLANK... | ||
+ | D C X'4006' | ||
+ | D QSN_FFW_MF... | ||
+ | D C X'4007' | ||
+ | D QSN_FCW_RESEQ... | ||
+ | D C X'8000' | ||
+ | D QSN_FCW_MSR... | ||
+ | D C X'8101' | ||
+ | D QSN_FCW_SLP... | ||
+ | D C X'8102' | ||
+ | D QSN_FCW_MSR_SLP... | ||
+ | D C X'8103' | ||
+ | D QSN_FCW_SLP_SA... | ||
+ | D C X'8106' | ||
+ | D QSN_FCW_DBCS_ONLY... | ||
+ | D C X'8200' | ||
+ | D QSN_FCW_DBCS_PURE... | ||
+ | D C X'8220' | ||
+ | D QSN_FCW_DBCS_EITHER... | ||
+ | D C X'8240' | ||
+ | D QSN_FCW_DBCS_OPEN... | ||
+ | D C X'8280' | ||
+ | D QSN_FCW_DBCS_OPEN_CO... | ||
+ | D C X'82C0' | ||
+ | D QSN_FCW_TRANSPARENT... | ||
+ | D C X'8400' | ||
+ | D QSN_FCW_FET... | ||
+ | D C X'8501' | ||
+ | D QSN_FCW_CONT_FIRST... | ||
+ | D C X'8601' | ||
+ | D QSN_FCW_CONT_LAST... | ||
+ | D C X'8602' | ||
+ | D QSN_FCW_CONT_MIDDLE... | ||
+ | D C X'8603' | ||
+ | D QSN_FCW_CP... | ||
+ | D C X'8800' | ||
+ | D QSN_FCW_HL... | ||
+ | D C X'8900' | ||
+ | D QSN_FCW_PDS... | ||
+ | D C X'8A00' | ||
+ | D QSN_FCW_MOD11... | ||
+ | D C X'B140' | ||
+ | D QSN_FCW_MOD10... | ||
+ | D C X'B1A0' | ||
+ | D QSN_READ_INP... | ||
+ | D C X'42' | ||
+ | D QSN_READ_MDT... | ||
+ | D C X'52' | ||
+ | D QSN_READ_IMM... | ||
+ | D C X'72' | ||
+ | D QSN_READ_MDT_ALT... | ||
+ | D C X'82' | ||
+ | /if defined(TO_BE_CONVERTED_LATER) | ||
+ | * | ||
+ | * Structure definitions. | ||
+ | * | ||
+ | DQsnEnvExtI DS | ||
+ | * Data structure for QsnCrtEnv API. | ||
+ | D QsnEEDta * | ||
+ | D QsnEEChg * procptr | ||
+ | D QsnEEDlt * procptr | ||
+ | DQsnEnvWM DS | ||
+ | * Data structures for QsnSetEnvWinMod API. | ||
+ | D QsnEWAtrC 1A | ||
+ | D QsnEWULR 10I 0 | ||
+ | D QsnEWULC 10I 0 | ||
+ | D QsnEWNumR 10I 0 | ||
+ | D QsnEWNumC 10I 0 | ||
+ | DQsnREnvWM DS | ||
+ | * Data structures for QsnRtvEnvWinMod API. | ||
+ | D QsnREWRet 10I 0 | ||
+ | D QsnREWAvl 10I 0 | ||
+ | D QsnREWMode 1A | ||
+ | D QsnREWAtr 1A | ||
+ | D QsnREWULR 10I 0 | ||
+ | D QsnREWULC 10I 0 | ||
+ | D QsnREWNumR 10I 0 | ||
+ | D QsnREWNumC 10I 0 | ||
+ | DQsnQ5250 DS | ||
+ | * Data structure for QsnQry5250 API. | ||
+ | D QsnQ5Ret 10I 0 | ||
+ | D QsnQ5Avl 10I 0 | ||
+ | D QsnQ5Stat 1A | ||
+ | D QsnQ5Wkstn 4B 0 | ||
+ | D QsnQ5CLvl 3A | ||
+ | D QsnQ5R1 16A | ||
+ | D QsnQ5WType 1A | ||
+ | D QsnQ5MType 4A | ||
+ | D QsnQ5Model 3A | ||
+ | D QsnQ5KbdID 1A | ||
+ | D QsnQ5EKbd 1A | ||
+ | D QsnQ5PcKbd 1A | ||
+ | D QsnQ5SNum 4A | ||
+ | D QsnQ5MaxIn 4B 0 | ||
+ | D QsnQ5WSCSp 2A | ||
+ | D QsnQ5R2 1A | ||
+ | D QsnQ5WSCB1 1A | ||
+ | D QsnQ5WSCB2 1A | ||
+ | D QsnQ5WSCB3 1A | ||
+ | D QsnQ5WSCB4 1A | ||
+ | D QsnQ5WSCB5 1A | ||
+ | D QsnQ5R3 5A | ||
+ | D QsnQ5Prt 1A | ||
+ | D QsnQ5R4 1A | ||
+ | D QsnQ5GrdBf 1A | ||
+ | D QsnQ5R5 9A | ||
+ | *Note: this may be expanded in the future | ||
+ | DQsnReadInf DS | ||
+ | * Data structure for QsnRtvReadInf API. | ||
+ | D QsnRIRet 10I 0 | ||
+ | D QsnRIAvl 10I 0 | ||
+ | D QsnRIR1 8A | ||
+ | D QsnRIDta * | ||
+ | D QsnRIFDta * | ||
+ | D QsnRIDtaL 10I 0 | ||
+ | D QsnRIFDtaL 10I 0 | ||
+ | D QsnRINumF 10I 0 | ||
+ | D ReadLen 10I 0 | ||
+ | D QsnRIRow 10I 0 | ||
+ | D QsnRICol 10I 0 | ||
+ | D QsnRIAID 1A | ||
+ | D QsnRIR2 7A | ||
+ | DQsnFldInf DS | ||
+ | * Data structure for QsnRtvFldInf API. | ||
+ | D QsnFIRet 10I 0 | ||
+ | D QsnFIAvl 10I 0 | ||
+ | D QsnFIType 1A | ||
+ | D QsnFIRow 10I 0 | ||
+ | D QsnFICol 10I 0 | ||
+ | D QsnFIFDtaL 10I 0 | ||
+ | D QsnFIR1 11A | ||
+ | D QsnFIDta * | ||
+ | DQsnWinExtI DS | ||
+ | * Data structure for QsnCrtWin API | ||
+ | D QsnWEDta * | ||
+ | D QsnWEChg * procptr | ||
+ | D QsnWEDlt * procptr | ||
+ | D QsnWECoord * procptr | ||
+ | D QsnWEDraw * procptr | ||
+ | D QsnWECur * procptr | ||
+ | DQsnWinD DS | ||
+ | * Data structures for QsnCrtWin and QsnChgWin APIs. | ||
+ | D QsnWTopR 10I 0 | ||
+ | D QsnWLeftC 10I 0 | ||
+ | D QsnWNumR 10I 0 | ||
+ | D QsnWNumC 10I 0 | ||
+ | D QsnWMinR 10I 0 | ||
+ | D QsnWMinC 10I 0 | ||
+ | D QsnWMaxR 10I 0 | ||
+ | D QsnWMaxC 10I 0 | ||
+ | D QsnWFS 1A | ||
+ | D QsnWAtrM1 1A | ||
+ | D QsnWAtrM2 1A | ||
+ | D QsnWAtrM3 1A | ||
+ | D QsnWAtrC1 1A | ||
+ | D QsnWAtrC2 1A | ||
+ | D QsnWAtrC3 1A | ||
+ | D QsnWShowB 1A | ||
+ | D QsnWShowBA 1A | ||
+ | D QsnWShowLA 1A | ||
+ | D QsnWShowRA 1A | ||
+ | D QsnWMsgL 1A | ||
+ | D QsnWULCh 1A | ||
+ | D QsnWTopCh 1A | ||
+ | D QsnWURCh 1A | ||
+ | D QsnWLCh 1A | ||
+ | D QsnWRCh 1A | ||
+ | D QsnWLLCh 1A | ||
+ | D QsnWBotCh 1A | ||
+ | D QsnWLRCh 1A | ||
+ | D QsnWGUI 1A | ||
+ | D QsnWFlg1 1A | ||
+ | D QsnWFlg2 1A | ||
+ | D QsnWR1 1A | ||
+ | D QsnWBdrF 1A | ||
+ | D QsnWTtlF 1A | ||
+ | D QsnWTAtrM 1A | ||
+ | D QsnWTAtrC 1A | ||
+ | D QsnWR2 1A | ||
+ | D QsnWR3 3A | ||
+ | D QsnWTtlO 10I 0 | ||
+ | D QsnWTtlL 10I 0 | ||
+ | D QsnWR4 10I 0 | ||
+ | DQsnRWinD DS | ||
+ | * Data structure for QsnRtvWinD API. | ||
+ | D QsnRWRet 10I 0 | ||
+ | D QsnRWAvl 10I 0 | ||
+ | D QsnRWTopR 10I 0 | ||
+ | D QsnRWLeftC 10I 0 | ||
+ | D QsnRWNumR 10I 0 | ||
+ | D QsnRWNumC 10I 0 | ||
+ | D QsnRWMinR 10I 0 | ||
+ | D QsnRWMinC 10I 0 | ||
+ | D QsnRWMaxR 10I 0 | ||
+ | D QsnRWMaxC 10I 0 | ||
+ | D QsnRWFS 1A | ||
+ | D QsnRWAtrM1 1A | ||
+ | D QsnRWAtrM2 1A | ||
+ | D QsnRWAtrM3 1A | ||
+ | D QsnRWAtrC1 1A | ||
+ | D QsnRWAtrC2 1A | ||
+ | D QsnRWAtrC3 1A | ||
+ | D QsnRWShwB 1A | ||
+ | D QsnRWShwBA 1A | ||
+ | D QsnRWShwLA 1A | ||
+ | D QsnRWShwRA 1A | ||
+ | D QsnRWMsgL 1A | ||
+ | D QsnRWULCh 1A | ||
+ | D QsnRWTopCh 1A | ||
+ | D QsnRWURCh 1A | ||
+ | D QsnRWLCh 1A | ||
+ | D QsnRWRCh 1A | ||
+ | D QsnRWLLCh 1A | ||
+ | D QsnRWBotCh 1A | ||
+ | D QsnRWLRCh 1A | ||
+ | D QsnRWGUI 1A | ||
+ | D QsnRWFlg1 1A | ||
+ | D QsnRWFlg2 1A | ||
+ | D QsnRWR1 1A | ||
+ | D QsnRWBdrF 1A | ||
+ | D QsnRWTtlF 1A | ||
+ | D QsnRWTAtrM 1A | ||
+ | D QsnRWTAtrC 1A | ||
+ | D QsnRWR2 1A | ||
+ | D QsnRWR3 3A | ||
+ | D QsnRWTtlO 10I 0 | ||
+ | D QsnRWTtlL 10I 0 | ||
+ | D QsnRWR4 10I 0 | ||
+ | DQsnSsnExtI DS | ||
+ | * Data structure for QsnCrtSsn API | ||
+ | D QsnSEDta * | ||
+ | D QsnSEChg * procptr | ||
+ | D QsnSEDlt * procptr | ||
+ | D QsnSECoord * procptr | ||
+ | D QsnSEDraw * procptr | ||
+ | D QsnSECur * procptr | ||
+ | DQsnSsnD DS | ||
+ | * Data structure for QsnCrtSsn and QsnChgSsn APIs | ||
+ | D QsnSActn * procptr Dim(24) | ||
+ | D QsnSTRow 10I 0 | ||
+ | D QsnSLCol 10I 0 | ||
+ | D QsnSNRows 10I 0 | ||
+ | D QsnSNCols 10I 0 | ||
+ | D QsnSRollA 10I 0 | ||
+ | D QsnSShftA 10I 0 | ||
+ | D QsnSISize 10I 0 | ||
+ | D QsnSMSize 10I 0 | ||
+ | D QsnSIncr 10I 0 | ||
+ | D QsnSIRows 10I 0 | ||
+ | D QsnSR1 1A | ||
+ | D QsnSWrap 1A | ||
+ | D QsnSR2 1A | ||
+ | D QsnEBCDIC 1A | ||
+ | D QsnSEcho 1A | ||
+ | D QsnSLDsp 1A | ||
+ | D QsnSCDsp 1A | ||
+ | D QsnSShowC 1A | ||
+ | D QsnSCmdAM 1A | ||
+ | D QsnSCmdAC 1A | ||
+ | D QsnSInLAM 1A | ||
+ | D QsnSInLAC 1A | ||
+ | D QsnSPmtO 10I 0 | ||
+ | D QsnSPmtL 10I 0 | ||
+ | D QsnSCmdO1 10I 0 | ||
+ | D QsnSCmdL1 10I 0 | ||
+ | D QsnSCmdO2 10I 0 | ||
+ | D QsnSCmdL2 10I 0 | ||
+ | D QsnSR4 20A | ||
+ | DQsnRSsnD DS | ||
+ | * Data structure for QsnRtvSsnD APIs | ||
+ | D QsnRSRet 10I 0 | ||
+ | D QsnRSAvl 10I 0 | ||
+ | D QsnRSR1 8A | ||
+ | D QsnRSActn * procptr Dim(24) | ||
+ | D QsnRSTRow 10I 0 | ||
+ | D QsnRSLCol 10I 0 | ||
+ | D QsnRSNRows 10I 0 | ||
+ | D QsnRSNCols 10I 0 | ||
+ | D QsnRSRollA 10I 0 | ||
+ | D QsnRSShftA 10I 0 | ||
+ | D QsnRSISize 10I 0 | ||
+ | D QsnRSMSize 10I 0 | ||
+ | D QsnRSIncr 10I 0 | ||
+ | D QsnRSIRows 10I 0 | ||
+ | D QsnRSR2 1A | ||
+ | D QsnRSWrap 1A | ||
+ | D QsnRSR3 1A | ||
+ | D QsnREBCDIC 1A | ||
+ | D QsnRSEcho 1A | ||
+ | D QsnRSLDsp 1A | ||
+ | D QsnRSCDsp 1A | ||
+ | D QsnRSShowC 1A | ||
+ | D QsnRSCmdAM 1A | ||
+ | D QsnRSCmdAC 1A | ||
+ | D QsnRSInLAM 1A | ||
+ | D QsnRSInLAC 1A | ||
+ | D QsnRSPmtO 10I 0 | ||
+ | D QsnRSPmtL 10I 0 | ||
+ | D QsnRSCmdO1 10I 0 | ||
+ | D QsnRSCmdL1 10I 0 | ||
+ | D QsnRSCmdO2 10I 0 | ||
+ | D QsnRSCmdL2 10I 0 | ||
+ | D QsnRSR5 20A | ||
+ | /endif | ||
+ | |||
+ | d $SelFmts pr | ||
+ | d 10A Dim(100) | ||
+ | d 10I 0 | ||
+ | d 100A | ||
+ | |||
+ | |||
+ | d $PutRecords Pr | ||
+ | |||
+ | |||
+ | d $PutRecord Pr | ||
+ | d Record 10A const | ||
+ | d Add 1A const | ||
+ | d ReadScr 1A const | ||
+ | |||
+ | |||
+ | d Lines s 78A dim(24) | ||
+ | d length s 10i 0 | ||
+ | d Q s 1 inz('''') | ||
+ | |||
+ | |||
+ | |||
+ | D APIErrorDS DS | ||
+ | D 10I 0 Inz( %Size( APIErrorDS ) ) | ||
+ | D BytesAvail 10I 0 Inz( *Zero ) | ||
+ | D MsgID 7 Inz( *Blanks ) | ||
+ | D 1 Inz( X'00' ) | ||
+ | D MsgDta 256 Inz( *Blanks ) | ||
+ | |||
+ | * | ||
+ | d InputData ds qualified | ||
+ | d based(p_InputData) | ||
+ | d Row 3U 0 | ||
+ | d Col 3U 0 | ||
+ | d AID 1A | ||
+ | d Field 500A | ||
+ | |||
+ | |||
+ | * | ||
+ | * This is the return data from subprocedure $screen | ||
+ | * left at 256 so you can add bunch more return values | ||
+ | * | ||
+ | d dataout ds 256 qualified inz | ||
+ | d F3 n overlay(dataout:1) | ||
+ | d Choice 1 overlay(dataout:*next) | ||
+ | **--------------------------------------------------------------- | ||
+ | |||
+ | D FldDtaDS DS occurs(1000) | ||
+ | |||
+ | D #FmtNam 10A | ||
+ | D #FldNam 10A | ||
+ | D #FldLen 5I 0 | ||
+ | D #FldPlen 5I 0 | ||
+ | D #FldDec 1 | ||
+ | D #FldIO 1 | ||
+ | D #FldAtr 1 | ||
+ | D #FldDTUS 1 | ||
+ | D #FldEdt 20A | ||
+ | D #FldRow 10I 0 | ||
+ | D #FldCol 10I 0 | ||
+ | D #FldCom 4000A varying | ||
+ | |||
+ | D SavFmt s 10A | ||
+ | D #FFW s 2A | ||
+ | D #FLEN s 5I 0 | ||
+ | d screenatr s 1 | ||
+ | d ssize s 4 0 | ||
+ | d #GotFlds s 10i 0 | ||
+ | |||
+ | D RTVFLDS PR N | ||
+ | D $FilQul 20 Value | ||
+ | D $NumFlds 10I 0 | ||
+ | D $FldDtaDS Like(FldDtaDS) | ||
+ | |||
+ | |||
+ | d #Fmts s 10A Dim(100) | ||
+ | d fx s 10I 0 | ||
+ | d Ans s 100A | ||
+ | |||
+ | d z s 10I 0 | ||
+ | d z1 s 10I 0 | ||
+ | d zx s 10I 0 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | d main PR | ||
+ | |||
+ | |||
+ | /free | ||
+ | *INLR = *ON; | ||
+ | main(); | ||
+ | return; | ||
+ | |||
+ | /end-free | ||
+ | |||
+ | //###################################################// | ||
+ | |||
+ | P main b | ||
+ | |||
+ | d main PI | ||
+ | |||
+ | |||
+ | /free | ||
+ | |||
+ | |||
+ | $FilQul = $Fil + $lib; | ||
+ | clear FldDtaDs ; | ||
+ | %occur(FlddtaDS) = 1; | ||
+ | *IN10 = RTVFLDS ($FilQul : #GotFlds : FldDtaDS); | ||
+ | |||
+ | $SelFmts(#Fmts : fx : Ans); | ||
+ | |||
+ | zx = 0; | ||
+ | for z = 1 to 50; | ||
+ | if %subst(Ans : z*2 -1 : 2) <> *blank; | ||
+ | zx += 1; | ||
+ | endif; | ||
+ | endfor; | ||
+ | |||
+ | if zx > 0; | ||
+ | for z = 1 to 50; | ||
+ | if %subst(Ans : z*2 -1 : 2) <> *blank; | ||
+ | z1 += 1; | ||
+ | select; | ||
+ | when z1 = 1 and z1 = zx; | ||
+ | $PutRecord(#Fmts(z) : '0':'1'); | ||
+ | when z1 = 1 ; | ||
+ | $PutRecord(#Fmts(z) : '0':'0'); | ||
+ | when z1 = zx; | ||
+ | $PutRecord(#Fmts(z) : '1':'1'); | ||
+ | other; | ||
+ | $PutRecord(#Fmts(z) : '1':'0'); | ||
+ | endsl; | ||
+ | endif; | ||
+ | |||
+ | endfor; | ||
+ | endif; | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | return; | ||
+ | |||
+ | /end-free | ||
+ | |||
+ | p main e | ||
+ | |||
+ | |||
+ | *-------------------------------------------------------- | ||
+ | * $SelFmts( ): Show Screen1 (Remote files via FTP) | ||
+ | * | ||
+ | *-------------------------------------------------------- | ||
+ | p $SelFmts B | ||
+ | |||
+ | d $SelFmts PI | ||
+ | d #Fmts 10A Dim(100) | ||
+ | d fx 10I 0 | ||
+ | d Ans 100A | ||
+ | |||
+ | |||
+ | d cmdbuf s like(Qsn_Cmd_Buf_T) | ||
+ | d inpbuf s like(Qsn_Inp_Buf_T) | ||
+ | d prompt s 70A varying | ||
+ | d NRF s 50 inz('** No Records Found **') | ||
+ | d skipthis s n | ||
+ | d len s 10I 0 | ||
+ | d data s 132A varying | ||
+ | d x s 10I 0 | ||
+ | d Row s 3U 0 | ||
+ | d Answer s 500A varying | ||
+ | * | ||
+ | |||
+ | D DS | ||
+ | D SFmts 14 DIM(100) | ||
+ | D SFmtx 10 OVERLAY(Sfmts:5) | ||
+ | |||
+ | |||
+ | d RowFmt ds | ||
+ | d srowfmt 1 14 | ||
+ | d srow 1 4 | ||
+ | d sfmt 5 14 | ||
+ | d srowb 1 4B 0 | ||
+ | * | ||
+ | d InputData ds qualified | ||
+ | d based(p_InputData) | ||
+ | d Row 3U 0 | ||
+ | d Col 3U 0 | ||
+ | d AID 1A | ||
+ | d Field 500A | ||
+ | /free | ||
+ | |||
+ | // ---------------------------------------------- | ||
+ | // Create Input/Output buffers and clear them | ||
+ | // ---------------------------------------------- | ||
+ | cmdbuf = QsnCrtCmdBuf(100: 50: 0: *OMIT: *OMIT); | ||
+ | inpbuf = QsnCrtInpBuf(200: 50: 0: *OMIT: *OMIT); | ||
+ | QsnClrBuf( cmdbuf : *omit ); | ||
+ | QsnClrBuf( inpbuf : *omit ); | ||
+ | // ---------------------------------------------- | ||
+ | // Add the "Clear Screen" command to the output | ||
+ | // so that the terminal starts with an empty | ||
+ | // screen. | ||
+ | // ---------------------------------------------- | ||
+ | QsnClrScr( *omit : cmdbuf : *omit : *omit ); | ||
+ | // ---------------------------------------------- | ||
+ | // Put a screen title in the output buffer | ||
+ | // ---------------------------------------------- | ||
+ | data = 'Select Records Formats to Display .'; | ||
+ | QsnWrtDta( data | ||
+ | : %len(data) | ||
+ | : *omit | ||
+ | : 1 | ||
+ | : 40 - (%len(data)/2) // center | ||
+ | : QSN_SA_HI | ||
+ | : QSN_SA_HI | ||
+ | : QSN_SA_WHT | ||
+ | : QSN_SA_WHT | ||
+ | : cmdbuf | ||
+ | : *omit | ||
+ | : *omit | ||
+ | ); | ||
+ | // ---------------------------------------------- | ||
+ | // Put the records on rows 3+ of the output buf | ||
+ | // ---------------------------------------------- | ||
+ | row = 2; | ||
+ | fx = 0; | ||
+ | #Fmts = *blank; | ||
+ | |||
+ | // Sort the formats with input fields into screen order | ||
+ | // This is to help alleviate the requirement | ||
+ | // that input fields need to be in the proper order in the buffer | ||
+ | for x = 1 to #Gotflds; | ||
+ | %occur(FlddtaDS) = x; | ||
+ | |||
+ | If #FmtNam <> SavFmt or x = #GotFlds ; | ||
+ | SavFmt = #FmtNam; | ||
+ | fx += 1; | ||
+ | sFmt = #Fmtnam; | ||
+ | sRowb = 0; | ||
+ | if #FldIO = x'02' or #FldIO = x'04' or | ||
+ | #FldIO = x'05' ; | ||
+ | sRowb = #Fldrow; | ||
+ | endif; | ||
+ | |||
+ | sFmts(fx) = srowfmt; | ||
+ | |||
+ | Endif; | ||
+ | |||
+ | If #FmtNam = SavFmt; | ||
+ | If sRowb < #Fldrow and | ||
+ | #FldIO = x'02' or #FldIO = x'04' or #FldIO = x'05'; | ||
+ | sRowb = #Fldrow; | ||
+ | sFmts(fx) = srowfmt; | ||
+ | Endif; | ||
+ | Endif; | ||
+ | |||
+ | endfor; | ||
+ | |||
+ | sorta sFmts; | ||
+ | |||
+ | |||
+ | fx = 0 ; | ||
+ | for x = 1 to 100; | ||
+ | |||
+ | If SFmtx(x) <> *blank ; | ||
+ | |||
+ | fx += 1; | ||
+ | #Fmts(fx) = sFmtx(x); | ||
+ | |||
+ | row +=1; | ||
+ | QsnWrtDta( sFmtx(x) | ||
+ | : 10 | ||
+ | : *omit | ||
+ | : row | ||
+ | : 5 | ||
+ | : QSN_SA_NORM | ||
+ | : QSN_SA_NORM | ||
+ | : QSN_SA_GRN | ||
+ | : QSN_SA_GRN | ||
+ | : cmdbuf | ||
+ | : *omit | ||
+ | : *omit | ||
+ | ); | ||
+ | |||
+ | QsnSetFld( *omit | ||
+ | : 2 | ||
+ | : row | ||
+ | : 2 | ||
+ | : QSN_FFW_ALPHA_SHIFT | ||
+ | : *omit | ||
+ | : 0 | ||
+ | : QSN_SA_UL | ||
+ | : QSN_SA_GRN_UL | ||
+ | : cmdbuf | ||
+ | : *omit | ||
+ | : *omit ); | ||
+ | |||
+ | |||
+ | endif; | ||
+ | endfor; | ||
+ | // ---------------------------------------------- | ||
+ | // Let the user know how to exit (color blue) | ||
+ | // ---------------------------------------------- | ||
+ | QsnWrtDta( 'F3=Exit' | ||
+ | : %len('F3=Exit') | ||
+ | : *omit | ||
+ | : 23 | ||
+ | : 2 | ||
+ | : QSN_SA_HI | ||
+ | : QSN_SA_NORM | ||
+ | : QSN_SA_BLU | ||
+ | : QSN_SA_GRN | ||
+ | : cmdbuf | ||
+ | : *omit | ||
+ | : *omit | ||
+ | ); | ||
+ | // ---------------------------------------------- | ||
+ | // put the "unlock keyboard" command into the | ||
+ | // output buffer | ||
+ | // ---------------------------------------------- | ||
+ | QsnReadInp( QSN_CC1_MDTALL_CLRALL | ||
+ | : QSN_CC2_UNLOCKBD | ||
+ | : *omit | ||
+ | : *omit | ||
+ | : cmdbuf | ||
+ | : *omit | ||
+ | : *omit ); | ||
+ | // ---------------------------------------------- | ||
+ | // send the output buffer to the terminal, and | ||
+ | // wait for input from the user | ||
+ | // ---------------------------------------------- | ||
+ | QsnPutGetBuf( cmdbuf: inpbuf: *omit: *omit); | ||
+ | // ---------------------------------------------- | ||
+ | // Get a pointer to the input data, and the | ||
+ | // length of the input data. | ||
+ | // ---------------------------------------------- | ||
+ | p_InputData = QsnRtvDta( inpbuf: *omit: *omit ); | ||
+ | Len = QsnRtvDtaLen(inpbuf: *omit: *omit) | ||
+ | - %size(InputData.ROW) | ||
+ | - %size(InputData.COL) | ||
+ | - %size(InputData.AID); | ||
+ | // ---------------------------------------------- | ||
+ | // Copy the answer from the buffer | ||
+ | // ---------------------------------------------- | ||
+ | ans = *blank; | ||
+ | if (Len > 0); | ||
+ | Answer = %trimr( %subst( InputData.field: 1: len) ); | ||
+ | ans = Answer; | ||
+ | |||
+ | endif; | ||
+ | // ---------------------------------------------- | ||
+ | // Clean up the buffers, and return to caller | ||
+ | // ---------------------------------------------- | ||
+ | QsnDltBuf(cmdbuf: *omit); | ||
+ | QsnDltBuf(inpbuf: *omit); | ||
+ | %subst(dataout:1:1) = '0'; | ||
+ | if (InputData.AID = QSN_F3); | ||
+ | %subst(dataout:1:1) = '1'; | ||
+ | endif; | ||
+ | |||
+ | // return Variable | ||
+ | return ; | ||
+ | |||
+ | /end-free | ||
+ | P E | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | *-------------------------------------------------------- | ||
+ | * $PutRecord(): Send a record to Screen | ||
+ | * | ||
+ | *-------------------------------------------------------- | ||
+ | p $PutRecord B | ||
+ | |||
+ | d $PutRecord PI | ||
+ | d Record 10A const | ||
+ | d Add 1A const | ||
+ | d ReadScr 1A const | ||
+ | |||
+ | d cmdbuf s like(Qsn_Cmd_Buf_T) | ||
+ | d inpbuf s like(Qsn_Inp_Buf_T) | ||
+ | d prompt s 70A varying | ||
+ | |||
+ | d skipthis s n | ||
+ | d len s 10I 0 | ||
+ | |||
+ | d x s 10I 0 | ||
+ | d Row s 3U 0 | ||
+ | |||
+ | d y s 10I 0 | ||
+ | d yx s 10I 0 | ||
+ | * | ||
+ | |||
+ | D DS | ||
+ | D SFldss 12 DIM(1000) | ||
+ | D SOcurs 10I 0 OVERLAY(SFldss:9) | ||
+ | |||
+ | |||
+ | d RowCol ds | ||
+ | d sfld 1 12 | ||
+ | d srow 1 4 | ||
+ | d scol 5 8 | ||
+ | d socur 9 12 | ||
+ | d srowb 1 4B 0 | ||
+ | d scolb 5 8B 0 | ||
+ | d socurb 9 12B 0 | ||
+ | |||
+ | |||
+ | |||
+ | /free | ||
+ | |||
+ | // ---------------------------------------------- | ||
+ | // Create Input/Output buffers and clear them | ||
+ | // ---------------------------------------------- | ||
+ | cmdbuf = QsnCrtCmdBuf(100: 50: 0: *OMIT: *OMIT); | ||
+ | inpbuf = QsnCrtInpBuf(200: 50: 0: *OMIT: *OMIT); | ||
+ | QsnClrBuf( cmdbuf : *omit ); | ||
+ | QsnClrBuf( inpbuf : *omit ); | ||
+ | |||
+ | |||
+ | if add = '0'; | ||
+ | // ---------------------------------------------- | ||
+ | // Add the "Clear Screen" command to the output | ||
+ | // so that the terminal starts with an empty | ||
+ | // screen. | ||
+ | // ---------------------------------------------- | ||
+ | QsnClrScr( *omit : cmdbuf : *omit : *omit ); | ||
+ | endif; | ||
+ | |||
+ | |||
+ | exsr ShowFile; | ||
+ | |||
+ | if Readscr = '0'; | ||
+ | // ---------------------------------------------- | ||
+ | // send the output buffer to the terminal, | ||
+ | // ---------------------------------------------- | ||
+ | QsnPutBuf( cmdbuf: *omit: *omit); | ||
+ | else; | ||
+ | |||
+ | // ---------------------------------------------- | ||
+ | // put the "unlock keyboard" command into the | ||
+ | // output buffer | ||
+ | // ---------------------------------------------- | ||
+ | QsnReadInp( QSN_CC1_MDTALL_CLRALL | ||
+ | : QSN_CC2_UNLOCKBD | ||
+ | : *omit | ||
+ | : *omit | ||
+ | : cmdbuf | ||
+ | : *omit | ||
+ | : *omit ); | ||
+ | // ---------------------------------------------- | ||
+ | // send the output buffer to the terminal, and | ||
+ | // wait for input from the user | ||
+ | // ---------------------------------------------- | ||
+ | QsnPutGetBuf( cmdbuf: inpbuf: *omit: *omit); | ||
+ | // ---------------------------------------------- | ||
+ | // Get a pointer to the input data, and the | ||
+ | // length of the input data. | ||
+ | // ---------------------------------------------- | ||
+ | p_InputData = QsnRtvDta( inpbuf: *omit: *omit ); | ||
+ | Len = QsnRtvDtaLen(inpbuf: *omit: *omit) | ||
+ | - %size(InputData.ROW) | ||
+ | - %size(InputData.COL) | ||
+ | - %size(InputData.AID); | ||
+ | endif; | ||
+ | |||
+ | |||
+ | QsnDltBuf(cmdbuf: *omit); | ||
+ | QsnDltBuf(inpbuf: *omit); | ||
+ | |||
+ | |||
+ | |||
+ | return ; | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | begsr ShowFile; | ||
+ | |||
+ | |||
+ | // For the record sort the occurances into row col sequence | ||
+ | // then process the occurs in the sorted sequence. | ||
+ | |||
+ | clear SFldss; | ||
+ | yx = 0; | ||
+ | |||
+ | for y = 1 to #Gotflds; | ||
+ | %occur(FlddtaDS) = y; | ||
+ | If #FmtNam = record; | ||
+ | |||
+ | srowb = #FldRow; | ||
+ | scolb = #FldCol; | ||
+ | socurb = y; | ||
+ | yx += 1; | ||
+ | Sfldss(yx) = sfld; | ||
+ | |||
+ | Endif; | ||
+ | |||
+ | endfor; | ||
+ | |||
+ | sorta Sfldss; | ||
+ | |||
+ | for y = 1 to 1000; | ||
+ | |||
+ | if SFldss(y) = *blank; | ||
+ | iter; | ||
+ | endif; | ||
+ | |||
+ | %occur(FlddtaDS) = SOcurs(y); | ||
+ | |||
+ | // ---------------------------------------------- | ||
+ | // Put a field in the output buffer | ||
+ | // ---------------------------------------------- | ||
+ | // data = 'Select File to download and process.'; | ||
+ | // Construct the fields to paint the screen | ||
+ | // | ||
+ | //*Field attribute. | ||
+ | //*X'01' indicates Constant (see structure QDFFFCON, | ||
+ | //*X'02' indicates Output (O), | ||
+ | //*X'03' indicates Message (M), h (B), | ||
+ | //*X'04' indicates Input (I), (P) | ||
+ | //*X'05' indicates Both (B), | ||
+ | //*X'06' indicates Hidden (H), and | ||
+ | //*X'07' indicates Program to System (P) | ||
+ | |||
+ | If #FmtNam = record; | ||
+ | |||
+ | select; | ||
+ | when #FldIO = x'01'; | ||
+ | |||
+ | Select; | ||
+ | when #FldDTUS = 'D'; | ||
+ | #Fldlen = 8; | ||
+ | #FldCom = 'dd/mm/yy'; | ||
+ | when #FldDTUS = 'Y'; | ||
+ | #Fldlen = 8; | ||
+ | #FldCom = 'dd/mm/yy'; | ||
+ | when #FldDTUS = 'T'; | ||
+ | #Fldlen = 8; | ||
+ | #FldCom = 'hh:mm:ss'; | ||
+ | when #FldDTUS = 'U'; | ||
+ | #Fldlen = 10; | ||
+ | #FldCom = 'User_Name'; | ||
+ | when #FldDTUS = 'S'; | ||
+ | #Fldlen = 10; | ||
+ | #FldCom = 'Sys_Name'; | ||
+ | endsl; | ||
+ | |||
+ | QsnWrtDta( %trim(#FldCom) | ||
+ | : #FldLen | ||
+ | : *omit | ||
+ | : #FldRow | ||
+ | : #FldCol +1 | ||
+ | : QSN_SA_HI | ||
+ | : QSN_SA_HI | ||
+ | : QSN_SA_WHT | ||
+ | : QSN_SA_WHT | ||
+ | : cmdbuf | ||
+ | : *omit | ||
+ | : *omit | ||
+ | ); | ||
+ | |||
+ | when #FldIO = x'02' or | ||
+ | #FldIO = x'04' or | ||
+ | #FldIO = x'05' ; | ||
+ | |||
+ | |||
+ | //* Keyboard shift and data type. | ||
+ | //* X'00' indicates Alpha shift/character (A), | ||
+ | //* X'01' indicates Alpha only (X), | ||
+ | //* X'02' indicates Numeric shift (N), | ||
+ | //* X'03' indicates Numeric only (Y), | ||
+ | //* X'04' indicates Katakana (K), | ||
+ | //* X'05' indicates Digits only (D), | ||
+ | //* X'06' indicates Inhibit keyboard (I), | ||
+ | //* X'07' indicates Signed numeric/zoned (S), | ||
+ | //* X'08' indicates Binary (B), | ||
+ | //* X'09' indicates Packed (P), | ||
+ | //* X'0A' indicates Floating (F), | ||
+ | //* X'0B' indicates DBCS (J), | ||
+ | //* X'0C' indicates Open (O), X'0D' indicates Either (E), | ||
+ | //* X'0E' indicates Numeric-only character (M), | ||
+ | //* X'0F' indicates Graphic (G), | ||
+ | //* X'10' indicates Date (L), | ||
+ | //* X'11' indicates Time (T), and | ||
+ | //* X'12' indicates Timestamp (Z) | ||
+ | |||
+ | select; | ||
+ | when #FLDIO = x'02'; | ||
+ | #FFW = QSN_NO_FFW; | ||
+ | when #Fldatr = x'00'; | ||
+ | #FFW = QSN_FFW_ALPHA_SHIFT; | ||
+ | when #Fldatr = x'01'; | ||
+ | #FFW = QSN_FFW_ALPHA_ONLY; | ||
+ | when #Fldatr = x'02'; | ||
+ | #FFW = QSN_FFW_NUM_SHIFT; | ||
+ | when #Fldatr = x'03'; | ||
+ | #FFW = QSN_FFW_NUM_ONLY; | ||
+ | when #Fldatr = x'04'; | ||
+ | #FFW = QSN_FFW_KATA; | ||
+ | when #Fldatr = x'05'; | ||
+ | #FFW = QSN_FFW_DIGIT_ONLY; | ||
+ | when #Fldatr = x'06'; | ||
+ | #FFW = QSN_FFW_IO; | ||
+ | when #Fldatr = x'07'; | ||
+ | #FFW = QSN_FFW_SIGNED_NUMERIC; | ||
+ | endsl; | ||
+ | |||
+ | |||
+ | |||
+ | select; | ||
+ | when #FldLen <> 0 ; | ||
+ | #FLen = #FldLen; | ||
+ | when #FldPLen <> 0 ; | ||
+ | #FLen = #FldPLen; | ||
+ | endsl; | ||
+ | |||
+ | QsnSetFld( *omit | ||
+ | : #FLen | ||
+ | : #FldRow | ||
+ | : #FldCol + 1 | ||
+ | : #FFW | ||
+ | : *omit | ||
+ | : 0 | ||
+ | : QSN_SA_UL | ||
+ | : QSN_SA_GRN_UL | ||
+ | : cmdbuf | ||
+ | : *omit | ||
+ | : *omit ); | ||
+ | |||
+ | endsl; | ||
+ | |||
+ | endif; | ||
+ | |||
+ | endfor; | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | endsr; | ||
+ | |||
+ | |||
+ | /end-free | ||
+ | P E | ||
+ | |||
+ | |||
+ | |||
+ | </pre> | ||
+ | |||
+ | |||
+ | |||
+ | [[#top]] |
Revision as of 09:55, 6 August 2014
Introduction
I based my DSM logic on this example.[1] Dynamic screen example with FTP Thanks to Scott Klement [2] for posting the best samples of code on the web to play with!
I based my code on QDFRTVFD API on the example from Scott Klement.
Thank you Scott. [3]
My code looks very different to Scotts work. But without Scotts example I would not have got anywhere.
The key to understanding the API is that on any one iteration though the data structures ONLY ONE FIELDS INFORMATION AT A TIME is retrieved.
The DSPINFO program is not complete.
But it does get enough info to show a layout.
Much remains to be done; a partial list is, WINDOWS, SUBFILES, REFERENCES,ATTRIBUTES etc etc etc.
I am now amazed and humbled by the work of the IBM programmers that set up such a thing as an external display file.
I found IBM documention both detailed and frustrating in particular how to set the pointers to the next iteration of a DS.
And there is a very devious bit on the indexes WDFWRRDX WDFWNMEI you must use these and never assume the fields follow some sequence.
I am having trouble with the retreival of attributes (file , record and field)
I get a weird result with edit codes.
#FLDEDT = '�£ ��¥¥^:�¥¥^:�¥¥ ' for 1 61TIME EDTWRD(' : : ') EVAL #FldEdt :x 00000 03B14003 03B2B2B0 7A03B2B2 B07A03B2 - .£ ..¥¥^:.¥¥^:.¥ 00010 B2404040 ........ ........ ........ - ¥ ............
I found the IBM code for the API in QSYSINC too archane to use as is.
However it was a good start and after removing the comments and renaming fields to match the IBM docs of QDFRTVFD I used the result.
I also reformated some of the DS to use the OVERLAY notation.
Also there are many fields missing in the QSYSINC of the type like WDFFRC
==== example of missing field === Row-Column Table (QDFFRCTB) Row-column table, one table per screen size. Offset Bit Type Variable Name Dec Hex 0 0 CHAR(1) WDFFFRRO 1 1 CHAR(1) WDFFFRCO 2 2 CHAR(1) WDFFTORO 3 3 CHAR(1) WDFFTOCO 4 4 CHAR(1) WDFFRBIT 4 4 0 BIT(1) WDFFMDF 4 4 1 BIT(1) WDFFFRC1 4 4 2 BIT(1) WDFFTRAT 4 4 3 BIT(1) WDFFR1C1 4 4 4 BIT(1) WDFFR2C1 4 4 5 BIT(3) * 5 5 CHAR(1) * 6 6 CHAR(*) WDFFRC
DSPINFO Svc Pgm
*------------------------------------------------------------------- * = Service program... DspFInfo= * = Description....... Retrieve display file information routines= *------------------------------------------------------------------- * CRTSQLRPGI OBJ(urlib/DSPFINFO) * SRCFILE(urlib/ursrcfile) * SRCMBR(DSPFINFO) * OBJTYPE(*MODULE) REPLACE(*yes) * REPLACE(*yes) * CRTSRVPGM SRVPGM(urlib/DSPFINFO) * MODULE(urlib/DSPFINFO) * EXPORT(*ALL) * * The FIELDKWDS has an error. * So the attributes of the DATE and TIME are WRONG * H NoMain *------------------------------------------------------------------- * - RtvDspFDesc - Retrieve display file description (QDFRTVFD API)- *------------------------------------------------------------------- D RtvDspFDesc PR ExtPgm( 'QDFRTVFD' ) D 8 D 10I 0 Const D 8 Const D 20 Const D 272 D RtvFlds PR N D QDspFil 20A Value D QNumFlds 10I 0 D QFlddta Like(FldDtaDS) D FldDtaDS DS Based (p_FldDtaDS) occurs(1000) D #FmtNam 10A D #FldNam 10A D #FldLen 5I 0 D #FldPlen 5I 0 D #FldDec 1 D #FldIO 1 D #FldAtr 1 D #FldDTUS 1 D #FldEdt 20A D #FldRow 10I 0 D #FldCol 10I 0 D #FldCom 4000A varying *---------------------------------------------------------------* * Retrieve Display File Fields * *---------------------------------------------------------------* P RtvFlds B Export D RtvFlds PI Like(LglTyp) D QDspFil Like( QNamTyp ) Value D Numflds 10I 0 D FldDta Like(FldDtaDS) *------------------------------------------------------------------- * - Base - *------------------------------------------------------------------- D QDFFBASE DS Based( p_QDFFBASE) qualified D WDFFINFO 5I 0 Overlay( QDFFBASE : 9 ) D WDFFRCS 5I 0 Overlay( QDFFBASE : 11 ) D WDFFSCR 5I 0 Overlay( QDFFBASE : 14 ) D WDFFSCRS 1A Overlay( QDFFBASE : 20 ) * p_QDFFSCRA = %addr( QDFFBASE.WDFFSCRS) first * p_QDFFSCRA = P_QDFFSCRA + %size(QDFFSCRA) * n next DQDFFSCRA DS Based( p_QDFFSCRA ) qualified D WDFFSCIA 1 1 D WDFRVED2 2 5 DQDFFSSEQ DS Based( p_QDFFSSEQ ) qualified D WDFFFSST 1 256 D WDFFFSSC 257 260U 0 D WDFFFSSN 261 270 D WDFFFSSL 271 280 D WDFBITS00 281 282 D WDFRVED4 283 308 *------------------------------------------------------------------- * - File Header - * p_QDFFINFO = p_QDFFBASE + QDFFBASE.WDFFINFO *------------------------------------------------------------------- D QDFFINFO DS Based( p_QDFFINFO) qualified D WDFFDFLO 10I 0 Overlay( QDFFINFO : 1 ) D WDFFWUOF 10I 0 Overlay( QDFFINFO : 5 ) D WDFFFMWU 10I 0 Overlay( QDFFINFO : 9 ) D WDFFXDOF 5I 0 Overlay( QDFFINFO : 35) D ZDFF 1 50A *------------------------------------------------------------------- * - File Where Used - * p_QDFWFLEI = p_QDFFINFO + QDFFINFO.WDFFWUOF *------------------------------------------------------------------- D QDFWFLEI DS Based( p_QDFWFLEI) qualified D WDFWXLEN 5I 0 Overlay( QDFWFLEI : 1 ) D WDFWXOKW 5I 0 Overlay( QDFWFLEI : 3 ) D WDFWWULN 10I 0 Overlay( QDFWFLEI : 5 ) D WDFWNTBO 10I 0 Overlay( QDFWFLEI : 9 ) D WDFFWXIN 5I 0 Overlay( QDFWFLEI : 12) // pointer D WDFWINDX 1A Overlay( QDFWFLEI : 19) *------------------------------------------------------------------- * - File Dev Dept - * p_QDFFDPDD = p_QDFFINFO + QDFFINFO.WDFFXDOF *------------------------------------------------------------------- D QDFFDPDD DS Based( p_QDFFDPDD) qualified D WDFFFKWD 5I 0 Overlay( QDFFDPDD : 9 ) D WDFFSHB1 5I 0 Overlay( QDFFDPDD : 13) D WDFFSHRA 5I 0 Overlay( QDFFDPDD : 16) D WDFFCKY1 5I 0 Overlay( QDFFDPDD : 17) D WDFFCKY2 5I 0 Overlay( QDFFDPDD : 18) D WDFFCKY3 5I 0 Overlay( QDFFDPDD : 19) D WDFFMKWD 5I 0 Overlay( QDFFDPDD : 20) D WDFFMKW2 5I 0 Overlay( QDFFDPDD : 21) D WDFFXDOC 5I 0 Overlay( QDFFDPDD : 25) *------------------------------------------------------------------- * - Name Table- * p_QDFFNTBL = p_QDFWFLEI + QDFWFLEI.WDFWNTBO *------------------------------------------------------------------- D QDFFNTBL DS Based( p_QDFFNTBL) qualified D WDFFNMS 10I 0 Overlay( QDFFNTBL : 1 ) // pointer to array char(10) D WDFFNMES 1A D WDFFNMESX 1000A // Field Name D QDFFNTB DS Based( p_QDFFNTB ) qualified D WDFFNAM 10A *------------------------------------------------------------------- * - Record Where Used - * p_QDFWRCDI = p_QDFWFLEI + QDFWFLEI.WDFWXLEN first *------------------------------------------------------------------- D QDFWRCDI DS Based( p_QDFWRCDI ) qualified D WDFWRLEN 5I 0 Overlay( QDFWRCDI : 1 ) D WDFWROKW 5I 0 Overlay( QDFWRCDI : 3 ) D WDFWNXTR 10I 0 Overlay( QDFWRCDI : 5 ) D WDFWRIN 5I 0 Overlay( QDFWRCDI : 9 ) // pointer to indicator table D WDFWINDR 1A Overlay( QDFWRCDI : 13) *------------------------------------------------------------------- * - Record Format Table- * p_QDFARFTE = p_QDFFINFO + QDFFINFO.WDFFDFLO first * p_QDFARFTE = p_QDFARFTE + %Len( QDFARFTE ) next * alt p_QDFARFTE = p_QDFFINFO + QDFFINFO.WDFFDFLO + * (%size(QDFARFTE) * x) *------------------------------------------------------------------- D QDFARFTE DS Based ( p_QDFARFTE ) qualified D WDFARFNM 10 Overlay( QDFARFTE : 1 ) D WDFARCND 5I 0 Overlay( QDFARFTE : 11 ) D WDFARFOF 10I 0 Overlay( QDFARFTE : 13 ) DQDFFSEQT DS Based ( p_QDFFSEQT ) qualified D WDFFFSEQ 1 13 D WDFVED17 14 16 *------------------------------------------------------------------- * - Record Header - * p_QDFFRINF = p_QDFFINFO + QDFARFTE.WDFARFOF *------------------------------------------------------------------- D QDFFRINF DS Based ( p_QDFFRINF ) qualified D WDFFRDDO 10I 0 Overlay( QDFFRINF : 1 ) D WDFFOFIT 10I 0 Overlay( QDFFRINF : 5 ) D WDFFSTBO 10I 0 Overlay( QDFFRINF : 9 ) D WDFFRFLG1 1A Overlay( QDFFRINF : 13 ) D WDFFRFLG2 1A Overlay( QDFFRINF : 14 ) D WDFFFLD 5I 0 Overlay( QDFFRINF : 17 ) D WDFFINDO 5I 0 Overlay( QDFFRINF : 23 ) D WDFFRAOF 5I 0 Overlay( QDFFRINF : 29 ) *------------------------------------------------------------------- * Display-Record-Level Device-Dependent * p_QDFFXRDP = p_QDFFRINF + QDFFRDPD.WDFFXRDO DQDFFXRDP DS Based (p_QDFFXRDP ) qualified D WDFFFOTO 1 4B 0 D WDFFNRCO 5 8B 0 D WDFVED33 9 12 D WDFFSEGS 13 14B 0 D WDFVED34 15 16 D WDFHCTLO 17 18B 0 D WDFVED35 19 24 D DQDFFSFCR DS Based (p_QDFFSFCR ) qualified D WDFFSFLG 1 34 D WDFFSFEN 35 35 D WDFFSFDR 36 36 D WDFBITS19 37 37 D WDFBITS20 38 38 D WDFFSFPQ 39 40B 0 D WDFFSFVL 41 42B 0 D WDFFSFVO 43 44B 0 D WDFFSFFI 45 46B 0 D WDFFFSFL01 47 48B 0 D WDFFFSFO 49 50B 0 D WDFXTOFF 51 52B 0 D WDFBITS21 53 53 D WDFVED37 54 54 D WDFFSFPM 55 55 D DQDFSFSRU DS Based (p_QDFSFSRU ) qualified D WDFVED39 1 1 D WDFFSFSR 2 2 DQDFSFERU DS Based (p_QDFSFERU ) qualified D WDFVED40 1 1 D WDFFSFER 2 2 DQDFSFH2U DS Based (p_QDFSFH2U ) qualified D WDFFSFH1 1 2B 0 D WDFFSFH2 3 4B 0 D DQDFCREXT DS Based (p_QDFCREXT ) qualified D WDFCRLLO 1 2B 0 D WDFIZSFO 3 4B 0 D WDFELOFF 5 6B 0 D WDFELCH1 7 7 D WDFELCH2 8 8 D WDFVED42 9 16 *------------------------------------------------------------------- * - Record Device-Dependent (QDFFRDPD) * p_QDFFRDPD = p_QDFFRINF + WDFFRAOF *------------------------------------------------------------------- D QDFFRDPD DS Based (p_QDFFRDPD ) qualified D WDFFDRCO 10I 0 Overlay( QDFFRDPD : 1 ) D WDFFINCP 5I 0 Overlay( QDFFRDPD : 5 ) D WDFFIBF 5I 0 Overlay( QDFFRDPD : 7 ) D WDFFOIS 5I 0 Overlay( QDFFRDPD : 9 ) D WDFACKYS 4A Overlay( QDFFRDPD : 13 ) D WDFFPUTK 2A Overlay( QDFFRDPD : 17 ) D WDFFGETK 2A Overlay( QDFFRDPD : 19 ) D WDFFERRM 5I 0 Overlay( QDFFRDPD : 21 ) D WDFFBITS 1A Overlay( QDFFRDPD : 23 ) D WDFFBITF 1A Overlay( QDFFRDPD : 24 ) D WDFFCGRI 5I 0 Overlay( QDFFRDPD : 25 ) D WDFFHFLG 2A Overlay( QDFFRDPD : 27 ) D WDFFXRDO 5I 0 Overlay( QDFFRDPD : 29 ) D WDFFRDOC 5I 0 Overlay( QDFFRDPD : 33 ) *------------------------------------------------------------------- * - Row Column Table - * p_QDFFRCTB = p_QDFFRINF + WDFFDRCO * SizeIndex = 0 to WDFFSCR -1 *------------------------------------------------------------------- D QDFFRCTB DS Based ( p_QDFFRCTB) qualified D WDFFFRRO 1A Overlay( QDFFRCTB : 1 ) D WDFFFRCO 1A Overlay( QDFFRCTB : 2 ) D WDFFTORO 1A Overlay( QDFFRCTB : 3 ) D WDFFTOCO 1A Overlay( QDFFRCTB : 4 ) D WDFFRBIT 1A Overlay( QDFFRCTB : 5 ) D WDFFRC 1A Overlay( QDFFRCTB : 7 ) *------------------------------------------------------------------- * - Row Column Table Entries - * p_QDFFRCTE = %addr(QDFFRCTB.WDFFRC) first * p_QDFFRCTE = p_QDFFRCTE + %size(QDFFRCTE) next D QDFFRCTE DS Based ( p_QDFFRCTE) qualified D WDFFSROW 1 1A D WDFFSCOL 2 2A *------------------------------------------------------------------- * - Field Where Used - * p_QDFWFLDI = p_QDFWRCDI + QDFWRCDI.WDFWRLEN first * p_QDFWFLDI = p_QDFWFLDI + WDFWFLDL next *------------------------------------------------------------------- D QDFWFLDI DS Based ( p_QDFWFLDI ) qualified D WDFWFLDL 5I 0 Overlay( QDFWFLDI : 1 ) D WDFWFOKW 5I 0 Overlay( QDFWFLDI : 3 ) D WDFWRRDX 5I 0 Overlay( QDFWFLDI : 5 ) // index into Field Name Table p_QDFFNTBL D WDFWNMEI 10I 0 Overlay( QDFWFLDI : 7 ) D WDFWLFLD 5I 0 Overlay( QDFWFLDI : 11 ) D WDFWFFLG 1A Overlay( QDFWFLDI : 13 ) *------------------------------------------------------------------- * - Field Index - * QDFFRINF is at variable WDFFOFIT in QDFFRINF. *------------------------------------------------------------------- D QDFFFITB DS Based ( p_QDFFFITB ) qualified D WDFFFOFS 10I 0 Overlay( QDFFFITB : 1 ) D WDFFSELI 5I 0 Overlay( QDFFFITB : 5 ) D WDFFDLEN 5I 0 Overlay( QDFFFITB : 7 ) *------------------------------------------------------------------- *------------------------------------------------------------------- * - Constant Field Header - * p_QDFFFCON = WDFFFTBE *------------------------------------------------------------------- D QDFFFCON DS Based ( p_QDFFFCON ) qualified D WDFFFAOC 5I 0 Overlay( QDFFFCON : 3 ) *------------------------------------------------------------------- * - Named Field Header - * p_QDFFFNAM = WDFFFTBE *------------------------------------------------------------------- D QDFFFNAM DS Based ( p_QDFFFNAM ) qualified D WDFFINPO 5I 0 Overlay( QDFFFNAM : 1 ) D WDFFOUTO 5I 0 Overlay( QDFFFNAM : 3 ) D WDFFPLEN 5I 0 Overlay( QDFFFNAM : 5 ) D WDFFDEC 1A Overlay( QDFFFNAM : 7 ) D WDFFKBDT 1A Overlay( QDFFFNAM : 8 ) D WDFFFAOF 5I 0 Overlay( QDFFFNAM : 11 ) *------------------------------------------------------------------- * - Field Header * p_QDFFFINF = p_QDFFRINF + WDFFFOFS *------------------------------------------------------------------- D QDFFFINF DS Based ( p_QDFFFINF ) qualified D WDFFFLEN 1A Overlay( QDFFFINF : 1 ) D WDFFFIOA 1A Overlay( QDFFFINF : 3 ) D WDFFBFLG 1A Overlay( QDFFFINF : 4 ) D WDFFFBIT 1A Overlay( QDFFFINF : 5 ) // pointer to QDFFFCON or QDFFFNAM D WDFFFTBE 1A Overlay( QDFFFINF : 7 ) *------------------------------------------------------------------- * - Field Dev Dept * p_QDFFFDPD = p_QDFFFINF + WDFFFAOF named * p_QDFFFDPD = p_QDFFFINF + WDFFFAOC constant *------------------------------------------------------------------- D QDFFFDPD DS Based ( p_QDFFFDPD ) qualified D WDFFFLGS 1A Overlay( QDFFFDPD : 1 ) D WDFFSA 1A Overlay( QDFFFDPD : 2 ) D WDFFXFDO 5I 0 Overlay( QDFFFDPD : 3 ) D WDFFFDOC 5I 0 Overlay( QDFFFDPD : 5 ) // pointer D WDFFFICE 1A Overlay( QDFFFDPD : 7 ) *------------------------------------------------------------------- * - Input-Capable Display Field-Level Device-Dep * p_QDFFFDIC = WDFFFICE *------------------------------------------------------------------- D QDFFFDIC DS Based ( p_QDFFFDIC ) qualified D WDFFFWFW 2A Overlay( QDFFFDIC : 1 ) D WDFFSSKW 1A Overlay( QDFFFDIC : 3 ) D WDFFCHKB 1A Overlay( QDFFFDIC : 4 ) *------------------------------------------------------------------- * - Field-Dependent Extension - * p_QDFFXFDP = p_QDFFFINF + WDFFXFDO *------------------------------------------------------------------- D QDFFXFDP DS Based ( p_QDFFXFDP ) qualified D WDFFKFLG 2A Overlay( QDFFXFDP : 1 ) D WDFFFLDINX 5I 0 Overlay( QDFFXFDP : 3 ) D WDFFXLFLGS 1A Overlay( QDFFXFDP : 4 ) // this is a BIN 16 D WDFF_UCS2_ 2A Overlay( QDFFXFDP : 6 ) *------------------------------------------------------------------- * - Keyword Category Displacement * file p_QDFFCOSA = p_QDFFINFO + WDFFXDOC * record p_QDFFCOSA = p_QDFFRINF + WDFFRDOC * field p_QDFFCOSA = p_QDFFFINF + WDFFFDOC *------------------------------------------------------------------- D QDFFCOSA DS Based ( p_QDFFCOSA ) qualified D WDFFCCT 5I 0 Overlay( QDFFCOSA : 1 ) // pointer D WDFFCCOS 1A Overlay( QDFFCOSA : 3 ) *------------------------------------------------------------------- * - Keyword Category Displacement String Entry * p_QDFFCCOA = %addr(WDFFCCOS) *------------------------------------------------------------------- D QDFFCCOA DS Based ( p_QDFFCCOA ) qualified D WDFFCAID 1A Overlay( QDFFCCOA : 1 ) D WDFFCAOF 5I 0 Overlay( QDFFCCOA : 2 ) *------------------------------------------------------------------- * - Subfile Control Record- *------------------------------------------------------------------- DQDFFSFHR DS Based (p_QDFFSFHR ) qualified D WDFFSFSZ 1 2B 0 D WDFFSFPG 3 4B 0 D WDFVED38 5 6 D WDFFFSFT 7 8B 0 D WDFSFR1U 9 10 D WDFFSFR1 9 10B 0 D WDFVED3900 9 9 D WDFFSFSR00 10 10 D WDFSFR2U 11 12 D WDFFSFR2 11 12B 0 D WDFVED4000 11 11 D WDFFSFER00 12 12 D WDFSFLNU 13 16 D WDFFSFLN 13 16 D WDFFSFH100 13 14B 0 D WDFFSFH200 15 16B 0 D WDFFFSFF 17 18B 0 D WDFVED41 19 24 DQDFKFILK DS Based (p_QDFKFILK ) qualified D WDFFKFIL 5I 0 Overlay( QDFKFILK : 1 ) D WDFKFILE 1A Overlay( QDFKFILK : 3 ) DQDFKFLPM DS Based (p_QDFKFLPM ) qualified D WDFKFLID 1 Overlay( QDFKFLPM : 1 ) D WDFKFLST 5I 0 Overlay( QDFKFLPM : 2 ) D WDFKFLRS 5I 0 Overlay( QDFKFLPM : 4 ) D WDFFKFLP 5I 0 Overlay( QDFKFLPM : 6 ) D WDFKFLEX 1A Overlay( QDFKFLPM : 8 ) DQDFKFLPP DS Based (p_QDFKFLPP ) qualified D WDFKFLLN 5I 0 Overlay( QDFKFLPP : 1 ) D WDFKFLNM 1A Overlay( QDFKFLPP : 3 ) DQDFKFLSZ DS Based (p_QDFKFLSZ ) qualified D WDFKFLML 1 2B 0 D WDFVED57 3 6 DQDFKICVP DS Based (p_QDFKICVP ) qualified D WDFKICVN 1 2B 0 D WDFKICVK 3 4B 0 D WDFKICVT 5 6B 0 DQDFKHARD DS Based (p_QDFKHARD ) qualified D WDFKHRFM 1 10 D WDFKHFIL 11 20 D WDFKHLIB 21 30 DQDFKHXPS DS Based (p_QDFKHXPS ) qualified D WDFKHXHG 1 10 D WDFKHXHL 11 20 D WDFKHXML 21 22B 0 DQDFKHDOC DS Based (p_QDFKHDOC ) qualified D WDFKHDLA 1 10 D WDFKHDDO 11 22 D WDFKHDFL 23 24B 0 DQDFKSIDX DS Based (p_QDFKSIDX ) qualified D WDFKSIOB 1 10 D WDFKSILB 11 20 DQDFKFALX DS Based (p_QDFKFALX ) qualified D WDFFKALT 1 2B 0 DQDFKFALK DS Based (p_QDFKFALK ) qualified D WDFKANME 1 10 D WDFKAINX 11 12B 0 DQDFKESFL DS Based (p_QDFKESFL ) qualified D WDFKESCR 1 10 DQDFKBODR DS Based (p_QDFKBODR ) qualified D WDFKCLOR 1 1 D WDFKDATR 2 2 D WDFKCHRS 3 10 DQDFKCKKW DS Based (p_QDFKCKKW ) qualified D WDFFKCKS 1 2B 0 D WDFKCKCM 3 3 DQDFKCKKE DS Based (p_QDFKCKKE ) qualified D WDFKCKID 1 1 D WDFKCKIN 2 3B 0 D WDFKCKRS 4 5B 0 D WDFKCKMA 6 9 DQDFKOVRR DS Based (p_QDFKOVRR ) qualified D WDFFKOLS 1 2B 0 DQDFKOVRE DS Based (p_QDFKOVRE ) qualified D WDFKOLAD 1 1 D WDFKOLAN 2 3B 0 DQDFKOVRP DS Based (p_QDFKOVRP ) qualified D WDFKOLID 1 1 D WDFKOLIN 2 3B 0 DQDFKOLER DS Based (p_QDFKOLER ) qualified D WDFFKOLE 1 2B 0 DQDFKOLCL DS Based (p_QDFKOLCL ) qualified D WDFFKOLC 1 2B 0 D WDFKOLCN 3 4B 0 DQDFKMSRL DS Based (p_QDFKMSRL ) qualified D WDFFKMSS 5I 0 Overlay( QDFKMSRL : 1 ) D WDFKMSKW 1A Overlay( QDFKMSRL : 3 ) DQDFKMSAP DS Based (p_QDFKMSAP ) qualified D WDFKMSAD 1 1 D WDFKMSAN 2 3B 0 DQDFKMSCP DS Based (p_QDFKMSCP ) qualified D WDFKMSID 1 1 D WDFKMSIN 2 3B 0 DQDFKMSK1 DS Based (p_QDFKMSK1 ) qualified D WDFKMSLC 1 2B 0 D WDFVED58 3 3 D WDFKMSRW 4 5B 0 D WDFKMSCL 6 7B 0 D WDFKMSFA 8 11B 0 D WDFKMSFB 12 15B 0 DQDFKMSK2 DS Based (p_QDFKMSK2 ) qualified D WDFKMSLN 1 2B 0 DQDFKMSK3 DS Based (p_QDFKMSK3 ) qualified D WDFKMSDM 1 2B 0 DQDFMSCLN DS Based (p_QDFMSCLN ) qualified D WDFSCROU 1 2 D WDFMSCRO 1 2B 0 D WDFKRCLR 1 2B 0 D WDFSCFOU 3 4 D WDFMSCFO 3 4B 0 D WDFKRCLC 3 4B 0 D WDFSCLOU 5 6 D WDFMSCLO 5 6B 0 D WDFKCLWR 5 6B 0 D WDFRCLWC 7 8B 0 D WDFCTYPE 9 9 D WDFBITS32 10 10 DQDFMBDSP DS Based (p_QDFMBDSP ) qualified D WDFBDRCN 1 10 D WDFBDCFO 11 12B 0 D WDFBDPIO 13 14B 0 DQDFK0BPR DS Based (p_QDFK0BPR ) qualified D WDF0BPCT 1 2B 0 DQDF0BXWP DS Based (p_QDF0BXWP ) qualified D WDF0BPID 1 1 D WDF0BPIN 2 3B 0 D WDF0BPLN 4 5B 0 DQDFBGATR DS Based (p_QDFBGATR ) qualified D WDF0BCLR 1 1 D WDFVED59 2 2 D WDFK0BLT 3 3 D WDFVED60 4 4 DQDFBKPRM DS Based (p_QDFBKPRM ) qualified D WDFBKNAM 1 8 DQDFKMRPR DS Based (p_QDFKMRPR ) qualified D WDFFKRPS 1 2B 0 DQDFKMRWP DS Based (p_QDFKMRWP ) qualified D WDFKMPID 1 1 D WDFKMPIN 2 3B 0 D WDFKMPLN 4 5B 0 DQDFKHSTR DS Based (p_QDFKHSTR ) qualified D WDFWDFKH 1 2B 0 DQDFKHPRM DS Based (p_QDFKHPRM ) qualified D WDFKHOFS 1 2B 0 D WDFBITS33 3 4 D WDFKHSRO 5 6B 0 D WDFKHCRD 7 8B 0 D WDFKHCBY 9 10B 0 D WDFKHARO 11 12B 0 D WDFKHCEX 13 14B 0 D WDFVED62 15 17 DQDFKHNMS DS Based (p_QDFKHNMS ) qualified D WDFKHRCD 1 10 D WDFKHFLE 11 20 D WDFKHRLB 21 30 DQDFKHPS DS Based (p_QDFKHPS ) qualified D WDFKHPNN 1 10 D WDFKHPLB 11 20 D WDFKHMLN 21 22B 0 DQDFKHRDC DS Based (p_QDFKHRDC ) qualified D WDFKHRLA 1 10 D WDFKHRDO 11 22 D WDFKHRFL 23 24B 0 DQDFKHARA DS Based (p_QDFKHARA ) qualified D WDFKHFRO 1 1 D WDFKHFCO 2 2 D WDFKHTRO 3 3 D WDFKHTCO 4 4 DQDFKHARX DS Based (p_QDFKHARX ) qualified D WDFBITS34 1 1 D WDFHFLDI 2 3B 0 D WDFHCHID 4 5 DQDFKHSEQ DS Based (p_QDFKHSEQ ) qualified D WDFKHSGN 1 10 D WDFFKHSS 11 12B 0 D WDFKHSIF 13 14B 0 D WDFKHSIL 15 16B 0 D WDFKHSIN 17 18B 0 D WDFKHSIP 19 20B 0 DQDFKPRTR DS Based (p_QDFKPRTR ) qualified D WDFKRLRS 1 2B 0 D WDFFKRLP 3 4B 0 DQDFKPPRM DS Based (p_QDFKPPRM ) qualified D WDFKPLEN 1 2B 0 DQDFKBRDR DS Based (p_QDFKBRDR ) qualified D WDFKCOLR 1 1 D WDFKDSPA 2 2 D WDFKCHAR 3 10 DQDFKLINU DS Based (p_QDFKLINU ) qualified D WDFFKLIN 1 2B 0 D WDFFKPOS 3 4B 0 D WDFKLINW 5 6B 0 D WDFKPOSW 7 8B 0 D WDFVED66 9 10 DQDFKWDTA DS Based (p_QDFKWDTA ) qualified D WDFBITS35 1 2 D WDFWNAMU 3 12 D WDFKWNAM 3 12 D WDFFKLIN00 3 4B 0 D WDFFKPOS00 5 6B 0 D WDFKLINW00 7 8B 0 D WDFKPOSW00 9 10B 0 D WDFVED6600 11 12 DQDFOLORU DS Based (p_QDFOLORU ) qualified D WDFVED68 1 1 D WDFCOLOR 2 2 DQDFDSPAU DS Based (p_QDFDSPAU ) qualified D WDFVED69 1 1 D WDFTDSPA 2 2 DQDFLIGNU DS Based (p_QDFLIGNU ) qualified D WDFVED70 1 1 D WDFALIGN 2 2 DQDFDWTTL DS Based (p_QDFDWTTL ) qualified D WDFDWOVL 1 5 D WDFBITS36 6 6 D WDFLRPFU 7 8 D WDFCLRPF 7 8B 0 D WDFVED6800 7 7 D WDFCOLOR00 8 8 D WDFSPPFU 9 10 D WDFDSPPF 9 10B 0 D WDFVED6900 9 9 D WDFTDSPA00 10 10 D WDFALGNU 11 12 D WDFTALGN 11 12B 0 D WDFVED7000 11 11 D WDFALIGN00 12 12 D WDFTTXTO 13 14B 0 D WDFTTXTL 15 16B 0 D WDFVED71 17 26 DQDFKMB DS Based (p_QDFKMB ) qualified D WDFBITS37 1 1 D WDFFIRST 2 2 D WDFECOND 3 3 D WDFMBAID 4 4 DQDFKSCSF DS Based (p_QDFKSCSF ) qualified D WDFFKSCS 1 2B 0 DQDFKSCCP DS Based (p_QDFKSCCP ) qualified D WDFKSCID 1 1 D WDFKSCIN 2 3B 0 DQDFKSCSM DS Based (p_QDFKSCSM ) qualified D WDFKSCRS 1 2B 0 D WDFKSCTY 3 3 D WDFKSCLN 4 5B 0 DQDFKSCSI DS Based (p_QDFKSCSI ) qualified D WDFKSCMI 1 7 D WDFKSCMF 8 17 D WDFKSCML 18 27 D WDFKSCDL 28 29B 0 D WDFKSCMO 30 31B 0 DQDFKSFLM DS Based (p_QDFKSFLM ) qualified D WDFKMORE 1 12 D WDFKBOTT 13 24 DQDFKSFLS DS Based (p_QDFKSFLS ) qualified D WDFNDSPM 1 1 D WDFLMORE 2 13 D WDFLBOTT 14 25 DQDFSRRRN DS Based (p_QDFSRRRN ) qualified D WDFCSRNO 1 2B 0 DQDFKMODE DS Based (p_QDFKMODE ) qualified D WDFSCMDO 1 2B 0 DQDFKSASA DS Based (p_QDFKSASA ) qualified D WDFFKSAS 1 2B 0 DQDFKSAPM DS Based (p_QDFKSAPM ) qualified D WDFKSAIA 1 1 D WDFKSAII 2 3B 0 D WDFKSAOA 4 4 DQDFKFFWR DS Based (p_QDFKFFWR ) qualified D WDFFKFWS 1 2B 0 DQDFKCHKP DS Based (p_QDFKCHKP ) qualified D WDFKFWID 1 1 D WDFKFWIN 2 3B 0 D WDFKFWOV 4 5 DQDFKMFDK DS Based (p_QDFKMFDK ) qualified D WDFFKMFS 1 2B 0 D WDFKMFNO 3 4B 0 D WDFKMFEN 5 5A * p_QDFKMFDP = %ADDR(QDFKMFDK.WDFKMFEN) DQDFKMFDP DS Based (p_QDFKMFDP ) qualified D WDFKMFID 1 1 D WDFKMFIN 2 3B 0 D WDFKMFEX 4 4A * Response Indicator Structure (QDFKMFRS) * p_QDFKMFRS = %ADDR(QDFKMFDP.WDFKMFEX) DQDFKMFRS DS Based (p_QDFKMFRS ) qualified D WDFKMFRP 1 2B 0 D WDFKMFEE 3 3A * ERRMSG and ERRMSGID Keyword Structure (QDFKMFEM) * p_QDFKMFEM = %ADDR(QDFKMFRS.WDFKMFEE) DQDFKMFEM DS Based (p_QDFKMFEM ) qualified D WDFKMFTP 1 1 D WDFKMFEL 2 3B 0 D WDFKMFTX 4 4A DQDFKMFSI DS Based (p_QDFKMFSI ) qualified D WDFKMFMI 1 7 D WDFKMFMF 8 17 D WDFKMFML 18 27 D WDFKMFDL 28 29B 0 D WDFKMFMO 30 31B 0 DQDFKMFMV DS Based (p_QDFKMFMV ) qualified D WDFKMFMM 1 1 D WDFKMFMP 2 4 D WDFKMFFL 5 6B 0 D WDFKMFFV 7 16 D WDFKMFLV 17 26 DQDFKMFM3 DS Based (p_QDFKMFM3 ) qualified D WDFFKMF1 1 3 D WDFFKMF2 4 7 DQDFKMFM4 DS Based (p_QDFKMFM4 ) qualified D WDFKMFD4 1 1 DQDFKDFLD DS Based (p_QDFKDFLD ) qualified D WDFKDFLO 1 2B 0 DQDFK_DATTIMFmat DS Based (p_QDFK_DATTIMFmat) qualified D WDFK_DATTIM 1 2B 0 DQDFK_DATTIM_Sep DS Based (p_QDFK_DATTIM_Sep ) qualified D WDFK_DATTIMSep 1 1A DQDFK_DATEP DS Based (p_QDFK_DATEP) qualified * 0 BIT(1) WDFK_DATE_SYS If on, the *SYS parameter is specified on th * 1 BIT(1) WDFK_DATE_YY If on, the *YY parameter is specified on the * 2 BIT(1) WDFK_DATE_EDTCDEY If on, the EDTCDE(Y) keyword was specifi D WDFK_DATE 1 1A * Length of this structure is * is WDFK_MAPVAL_C * WDFK_MAPVAL_L * p_QDFK_MAPVAL = %ADDR(QDFKMFDP.WDFKMFEX) * Number of MAPVAL keyword parameters. * Length of each MAPVAL keyword parameter. * MAPVAL parameter DQDFK_MAPVAL DS Based (p_QDFK_MAPVAL) qualified D WDFK_MAPVAL_C 1 2B 0 D WDFK_MAPVAL_L 3 4B 0 D WDFK_MAPVAL 1 1A DQDFKDTFT DS Based (p_QDFKDTFT ) qualified D WDFKDTFT00 1 2B 0 DQDFKDTSP DS Based (p_QDFKDTSP ) qualified D WDFKDTSP00 1 1 DQDFKDATP DS Based (p_QDFKDATP ) qualified D WDFBITS56 1 1 DQDFKMPVL DS Based (p_QDFKMPVL ) qualified D WDFPVLCT 1 2B 0 D WDFPVLLN 3 4B 0 DQDFKDFT DS Based (p_QDFKDFT ) qualified D WDFFKDFS 5I 0 Overlay( QDFKDFT : 1 ) D WDFKDFPE 1A Overlay( QDFKDFT : 3 ) DQDFKDFPM DS Based (p_QDFKDFPM ) qualified D WDFKDFID 1 1 D WDFKDFTY 2 2 D WDFKDFIN 3 4B 0 D WDFKDFLN 5 6B 0 DQDFKDFMM DS Based (p_QDFKDFMM ) qualified D WDFKDFMI 1 7 D WDFKDFMF 8 17 D WDFKDFML 18 27 DQDFFHTML00 DS Based (p_QDFFHTML00 ) qualified D WDFBITS57 1 1 D WDFFHLEN 2 3B 0 D WDFFHOFF 4 5B 0 D WDFLTEXT 6 6 DQDFKEDTR DS Based (p_QDFKEDTR ) qualified D WDFFKEDS 1 2B 0 D WDFKEDKW 3 3A D xDFKEDID 4 4 D xDFKEDSY 5 5 D xDFKEDML 6 7B 0 D xDFVED73 8 8 D xDFKEDMS 9 9A D xDFKEDMSx 10 24A DQDFKEDTP DS Based (p_QDFKEDTP ) qualified D WDFKEDID 1 1 D WDFKEDSY 2 2 D WDFKEDML 3 4B 0 D WDFVED73 5 5 D WDFKEDMS 6 6A D WDFKEDMSx 6 40A DQDFKEDTMSK DS Based (p_QDFKEDTMSK) qualified D WDFKEDMNUM 5I 0 Overlay( QDFKEDTMSK : 1) D WDFKEDMSEG 1A Overlay( QDFKEDTMSK : 3) DQDFKEDTSEG DS Based (p_QDFKEDTSEG) qualified D WDFKEDMPOS 5I 0 Overlay( QDFKEDTSEG : 1) D WDFKEDMLEN 5I 0 Overlay( QDFKEDTSEG : 3) DQDFKVAKW DS Based (p_QDFKVAKW ) qualified D WDFFKVAL 1 2B 0 DQDFKVARL DS Based (p_QDFKVARL ) qualified D WDFBITS38 1 1 D WDFBITS39 2 2 D WDFVED76 3 3 D WDFKVATP 4 4 D WDFFKLAP 5 6B 0 D WDFKLATP 7 8B 0 DQDFKCKMI DS Based (p_QDFKCKMI ) qualified D WDFKCKMD 1 7 D WDFKCKMF 8 17 D WDFKCKML 18 27 D WDFKCKDL 28 29B 0 D WDFFKCKB 30 31B 0 DQDFKFCPR DS Based (p_QDFKFCPR ) qualified D WDFFKFCS 1 2B 0 DQDFKFC DS Based (p_QDFKFC ) qualified D WDFKFCID 1 1 D WDFKFCIN 2 3B 0 D WDFKFCLN 4 5B 0 DQDFKCHC DS Based (p_QDFKCHC ) qualified D WDFCHCCT 1 2B 0 D WDFCHCFN 3 12 D WDFKCHCR 13 14B 0 D WDFKCHCC 15 16B 0 D WDFCHAR1 17 17 D WDFCHAR2 18 18 D WDFVED77 19 19 DQDFDREXP DS Based (p_QDFDREXP ) qualified D WDFXPLEN 1 2B 0 D WDFOWCOL 3 4B 0 D WDFUTTER 5 6B 0 D WDFBITS40 7 8 D WDFVED81 9 18 DQDFKCHCE DS Based (p_QDFKCHCE ) qualified D WDFVED82 1 1 D WDFKCLEN 2 3B 0 D WDFBITS41 4 4 D WDFWDFKC 5 6 D WDFINX26 7 8B 0 D WDFCTXTO 9 10B 0 D WDFCTXTL 11 12B 0 D WDFCMSGO 13 14B 0 D WDFCACCO 15 16B 0 D WDFPRCDU 17 18 D WDFCPRCD 17 18B 0 D WDFBCAID 17 17 D WDFCRTNO 19 20B 0 D WDFCRTNL 21 22B 0 D WDFCCTLO 23 24B 0 D WDFCTLIO 25 26B 0 DQDFKCTXT DS Based (p_QDFKCTXT ) qualified D WDFCMNEM 1 2B 0 DQDFKCACC DS Based (p_QDFKCACC ) qualified D WDFACCSL 1 2B 0 D WDFCACCL 3 4B 0 D WDFACCFO 5 6B 0 DQDFKCMSG DS Based (p_QDFKCMSG ) qualified D WDFBITS42 1 1 D WDFID26U 2 8 D WDFMID26 2 8 D WDFKMIDO 2 3B 0 D WDFCMFLU 9 18 D WDFKCMFL 9 18 D WDFCMFLO 9 10B 0 D WDFCMLBU 19 28 D WDFKCMLB 19 28 D WDFCMLBO 19 20B 0 DQDFBSEPS DS Based (p_QDFBSEPS ) qualified D WDFBITS43 1 1 D WDFBSCOU 2 3 D WDFMBSCO 2 3B 0 D WDFBSCLR 2 2 D WDFBSAOU 4 5 D WDFMBSAO 4 5B 0 D WDFBSATR 4 4 D WDFSCHOU 6 7 D WDFBSCHO 6 7B 0 D WDFBSCHR 6 6 DQDFKCHCX DS Based (p_QDFKCHCX ) qualified D WDFVED92 1 1 D WDFHCCLR 2 2 D WDFVED93 3 3 D WDFHCATR 4 4 D WDFVED94 5 5 DQDFEFATR DS Based (p_QDFEFATR ) qualified D WDFBITS44 1 1 D WDFFACLR 2 2 D WDFVED96 3 3 D WDFFAATR 4 4 D WDFVED97 5 5 DQDFFLDCP DS Based (p_QDFFLDCP ) qualified D WDFLDNUM 1 2B 0 D WDFVED98 3 3 DQDFNTFLD DS Based (p_QDFNTFLD ) qualified D WDFLDNUM00 1 2B 0 D WDFVED99 3 3 DQDFDTMSK00 DS Based (p_QDFDTMSK00 ) qualified D WDFDMNUM 1 2B 0 DQDFDTSEG DS Based (p_QDFDTSEG ) qualified D WDFDMPOS 1 2B 0 D WDFDMLEN 3 4B 0 DQDFKSMSG DS Based (p_QDFKSMSG ) qualified D WDFBITS45 1 1 D WDFSMIDU 2 8 D WDFKSMID 2 8 D WDFSMIDO 2 3B 0 D WDFSMFLU 9 18 D WDFKSMFL 9 18 D WDFSMFLO 9 10B 0 D WDFSMLBU 19 28 D WDFKSMLB 19 28 D WDFSMLBO 19 20B 0 DQDFKGRPR DS Based (p_QDFKGRPR ) qualified D WDFKPCNT 1 2B 0 DQDFKGRWP DS Based (p_QDFKGRWP ) qualified D WDFKGPID 1 1 D WDFKGPIN 2 3B 0 D WDFKGPLN 4 5B 0 DQDFRDATR DS Based (p_QDFRDATR ) qualified D WDFCLROU 1 2 D WDFGCLRO 1 2B 0 D WDFGCLOR 1 1 D WDFLNTOU 3 4 D WDFGLNTO 3 4B 0 D WDFFKGLT 3 3 D WDFBITS46 5 5 DQDFRDCLR DS Based (p_QDFRDCLR ) qualified D WDFBITS47 1 1 D WDFSROWU 2 3 D WDFCSROW 2 3B 0 D WDFGCSRO 2 3B 0 D WDFSCOLU 4 5 D WDFCSCOL 4 5B 0 D WDFGCSCO 4 5B 0 D WDFCDEPU 6 7 D WDFGCDEP 6 7B 0 D WDFGCDEO 6 7B 0 D WDFCWIDU 8 9 D WDFGCWID 8 9B 0 D WDFGCWIO 8 9B 0 DQDFRDBOX DS Based (p_QDFRDBOX ) qualified D WDFBITS48 1 1 D WDFGBTOB 2 2 D WDFBHZOU 3 4 D WDFGBHZO 3 4B 0 D WDFKGHZV 3 4B 0 D WDFBVTOU 5 6 D WDFGBVTO 5 6B 0 D WDFKGVTV 5 6B 0 D WDFBCLOU 7 8 D WDFGBCLO 7 8B 0 D WDFGBCLR 7 7 D WDFBLTOU 9 10 D WDFGBLTO 9 10B 0 D WDFGBLNT 9 9 D WDFBCTLO 11 12B 0 DQDFOXDFM DS Based (p_QDFOXDFM ) qualified D WDFBITS49 1 1 D WDFSROWU00 2 3 D WDFBSROW 2 3B 0 D WDFGBSRO 2 3B 0 D WDFSCOLU00 4 5 D WDFBSCOL 4 5B 0 D WDFGBSCO 4 5B 0 D WDFBDEPU 6 7 D WDFGBDEP 6 7B 0 D WDFGBDEO 6 7B 0 D WDFBWIDU 8 9 D WDFGBWID 8 9B 0 D WDFGBWIO 8 9B 0 DQDFRDLIN DS Based (p_QDFRDLIN ) qualified D WDFBITS50 1 1 D WDFLTYPL 2 2 D WDFLINOU 3 4 D WDFGLINO 3 4B 0 D WDFGLINT 3 4B 0 D WDFLRPOU 5 6 D WDFGLRPO 5 6B 0 D WDFGLRPT 5 6B 0 D WDFLCLOU 7 8 D WDFGLCLO 7 8B 0 D WDFGLCLR 7 7 D WDFLLTOU 9 10 D WDFGLLTO 9 10B 0 D WDFGLLNT 9 9 D WDFLCTLO 11 12B 0 DQDFINDFM DS Based (p_QDFINDFM ) qualified D WDFBITS51 1 1 D WDFSROWU01 2 3 D WDFLSROW 2 3B 0 D WDFGLSRO 2 3B 0 D WDFSCOLU01 4 5 D WDFLSCOL 4 5B 0 D WDFGLSCO 4 5B 0 D WDFLLENU 6 7 D WDFGLLEN 6 7B 0 D WDFGLLNO 6 7B 0 DQDFWITBE DS Based (p_QDFWITBE ) qualified D WDFWINBR 1 1 D WDFWIOBF 2 2 D WDFWIIBF 3 3 D WDFWITXT 4 5B 0 DQDFWKWDA DS Based (p_QDFWKWDA ) qualified D WDFWKWDC 1 2B 0 DQDFKWIDU DS Based (p_QDFKWIDU ) qualified D WDFED117 1 1 D WDFWKWID 2 2 DQDFWATTR DS Based (p_QDFWATTR ) qualified D WDFKTYPU 1 2 D WDFWKTYP 1 2B 0 D WDFED11700 1 1 D WDFWKWID00 2 2 D WDFWKLEN 3 4B 0 DQDFWATYP DS Based (p_QDFWATYP ) qualified D WDFWALEN 1 2B 0 D WDFED118 3 3 D WDFWPRMT 4 4 DQDFWBTYP DS Based (p_QDFWBTYP ) qualified D WDFFWATS 1 2B 0 DQDFWRSTR DS Based (p_QDFWRSTR ) qualified D WDFBITS53 1 1 D WDFBITS54 2 2 D WDFWRFEI 3 6B 0 D WDFWRLBI 7 10B 0 D WDFWRRFI 11 14B 0 D WDFWRFDI 15 18B 0 D SmlIntTyp S 5I 0 D IntTyp S 10I 0 D ChrTyp S 1 D QNamTyp S 20A D NamTyp S 10A D LglTyp S N D Buftyp S 32000A *------------------------------------------------------------------- * - Work fields- *------------------------------------------------------------------- D NoAPIError C Const( *Zero ) D QualDspF S 20 D RtvSizeInfo DS D 4 D RtvSize 10I 0 D Counter S 5I 0 D #NumFlds S 10I 0 D TotFlds S 10I 0 D RecordName S 10A D FindStr s 32A varying D x s 10I 0 D c s 10I 0 D f s 10I 0 D k s 10I 0 D D xx s 10I 0 D xc s 10I 0 D xf s 10I 0 D xk s 10I 0 D D lx s 10I 0 D lc s 10I 0 D lf s 10I 0 D lk s 10I 0 D D rx s 10I 0 D rc s 10I 0 D rf s 10I 0 D rk s 10I 0 D D fx s 10I 0 D fc s 10I 0 D ff s 10I 0 D fk s 10I 0 D D cx s 10I 0 D cc s 10I 0 D cf s 10I 0 D ck s 10I 0 D D len s 10I 0 D FldIdx s 10I 0 D SizeIdx s 10I 0 D ScrnSize s 1 D SflCtl s N D RcvVarLen S Like( IntTyp ) D Idx S Like( IntTyp ) D APIErrDS DS D ApiErrLen 10I 0 Inz( %Size( APIErrDS ) ) D BytesAvail 10I 0 Inz( *Zero ) D 7 Inz( *Blanks ) D 1 Inz( X'00' ) D 256 Inz( *Blanks ) D CONSTANT C x'01' D DFT C x'01' D Bit0 C X'80' D Bit1 C X'40' D Bit2 C X'20' D Bit3 C X'10' D Bit4 C X'08' D Bit5 C X'04' D Bit6 C X'02' D Bit7 C X'01' * How to test for bits * If %Bitand(Hexval:Bit0) = Bit0; * Dsply 'Bit 0 is *On'; * Else; * Dsply 'Bit 0 is *Off'; * Endif; D KwdData s 3564A varying based(p_KwdData) D temp s like(KwdData) *%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% D col s 5I 0 D row s 5I 0 D wBinDS DS D hx1 1 1 D hx2 2 2 D wBin 1 2B 0 C CallP RtvDspFDesc( C RtvSizeInfo : C 8 : C 'DSPF0100' : C QDspFil : C APIErrDS C ) C If BytesAvail > 0 C Return *Off C EndIf C eval p_QDFFBASE = %alloc(RtvSize) *------------------------------------------------------------------- C Reset APIErrDS * Retrieve display file description ( QDFRTVFD ) API C CallP RtvDspFDesc( C QDFFBASE : C RtvSize : C 'DSPF0100' : C QDspFil : C APIErrDS C ) C If BytesAvail > 0 C Return *Off C EndIf C C Eval p_FldDtaDS = %addr(FldDta) C C C Eval NumFlds = 1 C Eval %OCCUR(FldDtaDS) = NumFlds // file header C Eval p_QDFFINFO = p_QDFFBASE + QDFFBASE.WDFFINFO // file where used C Eval p_QDFWFLEI = p_QDFFINFO + QDFFINFO.WDFFWUOF // file Dev Dep C Eval p_QDFFDPDD = p_QDFFINFO + QDFFINFO.WDFFXDOF // rec where used (first) C Eval p_QDFWRCDI = p_QDFWFLEI + QDFWFLEI.WDFWXLEN // name table C Eval p_QDFFNTBL = p_QDFWFLEI + QDFWFLEI.WDFWNTBO // File Keywords C EXSR FileKwds // process record formats C for xx = 0 to (QDFFBASE.WDFFRCS - 1) C if xx <> 0 C Eval p_QDFWRCDI = p_QDFWRCDI + QDFWRCDI.WDFWNXTR C Endif // record format C eval p_QDFARFTE = p_QDFFINFO + QDFFINFO.WDFFDFLO + C (%size(QDFARFTE) * xx) C eval RecordName = QDFARFTE.WDFARFNM C C if %subst(RecordName:1:1) <> '*' C EXSR ProcessRecFmt C endif C endfor C C DeAlloc p_QDFFBASE C Return *On *------------------------------------------------ * Process a record format. *------------------------------------------------ CSR ProcessRecFmt begsr // record header C eval p_QDFFRINF = p_QDFFINFO + QDFARFTE.WDFARFOF // record dev dept C eval p_QDFFRDPD = p_QDFFRINF + QDFFRINF.WDFFRAOF * SFLCTL * 12 C BIN(31) WDFFRFLG Miscellaneous record contents. * 12 C 0 BIT(1) WDFFUDDS If on, USRDFN keyword is specified. * 12 C 1 BIT(1) WDFFSFL If on, SFL keyword is specified (next record * 12 C 2 BIT(1) WDFFSFLC If on, SFLCTL keyword is specified (prev C eval SflCtl = *off C if %bitand(QDFFRINF.WDFFRFLG1 : Bit2) = Bit2 C eval p_QDFFSFCR = p_QDFFRINF + QDFFRINF.WDFFRAOF C eval p_QDFFSFHR = %addr(QDFFSFCR.WDFFSFPM) C eval SflCtl = *on C endif C for SizeIdx = 0 to QDFFBASE.WDFFSCR -1 C eval p_QDFFSCRA = %addr( QDFFBASE.WDFFSCRS) + C %size(QDFFSCRA) * SizeIdx // *DS3 = X'03' *DS4 = X'04' C eval ScrnSize = QDFFSCRA.WDFFSCIA C endfor // Row Col table C eval p_QDFFRCTB = p_QDFFRINF + QDFFRDPD.WDFFDRCO C C eval TotFlds = QDFFRINF.WDFFFLD // Record Keywords C EXSR RcdKwds C C EXSR ProcessRcdFld CSR endsr CSR ProcessRcdFld begsr * - Field Where Used - C eval p_QDFWFLDI = p_QDFWRCDI + QDFWRCDI.WDFWRLEN C eval p_QDFFFITB = p_QDFFRINF + QDFFRINF.WDFFOFIT C +( QDFWFLDI.WDFWRRDX -1) * %len(QDFFFITB) C for FldIdx = 0 to QDFFRINF.WDFFFLD -1 C Exsr GetFldInfo C Exsr FieldKwds * p_QDFWFLDI = p_QDFWFLDI + WDFWFLDL next C if FldIdx < QDFFRINF.WDFFFLD -1 C eval p_QDFWFLDI = p_QDFWFLDI + C QDFWFLDI.WDFWFLDL * Field Indexing Table (QDFFFITB) for next Field C eval p_QDFFFITB = p_QDFFRINF + QDFFRINF.WDFFOFIT C +( QDFWFLDI.WDFWRRDX -1) * %len(QDFFFITB) C endif C Eval #NumFlds = NumFlds C Eval NumFlds += 1 C Eval %OCCUR(FldDtaDS) = NumFlds C Clear #FmtNam C Clear #FldNam C Clear #FldDTUS C Clear #FldEdt C Clear #FldLen C Clear #FldPlen C Clear #FldDec C Clear #FldAtr C Clear #FldRow C Clear #FldCol C Clear #FldCom C C endfor C C C CSR endsr CSR GetFldInfo begsr * C eval #FmtNam = RecordName * - Field Header C eval p_QDFFFINF = p_QDFFRINF + QDFFFITB.WDFFFOFS C if QDFFFINF.WDFFFIOA = x'01' C eval p_QDFFFCON = %ADDR(QDFFFINF.WDFFFTBE) C eval p_QDFFFDPD = p_QDFFFINF + QDFFFCON.WDFFFAOC C else * Variable C eval p_QDFFFNAM = %ADDR(QDFFFINF.WDFFFTBE) C eval p_QDFFFDPD = p_QDFFFINF + QDFFFNAM.WDFFFAOF C eval p_QDFFFDIC = %addr(QDFFFDPD.WDFFFICE) C endif * Field Extension C eval p_QDFFXFDP = p_QDFFFINF + QDFFFDPD.WDFFXFDO * Row Column C eval p_QDFFRCTB = p_QDFFRINF + QDFFRDPD.WDFFDRCO C + (QDFWFLDI.WDFWRRDX -1) *2 C eval p_QDFFRCTE = %addr(QDFFRCTB.WDFFRC) * C eval hx1 = x'00' C eval hx2 = QDFFRCTE.WDFFSROW C eval row = wBin C eval hx1 = x'00' C eval hx2 = QDFFRCTE.WDFFSCOL C eval col = wBin C eval #FldRow = row C eval #FldCol = col * date time flags C if %bitand(QDFFFINF.WDFFBFLG : Bit0) = Bit0 C eval #FldCom = 'DATE' C eval #FldDTUS = 'D' C endif C if %bitand(QDFFFINF.WDFFBFLG : Bit1) = Bit1 C eval #FldDTUS = 'Y' C endif C if %bitand(QDFFFINF.WDFFBFLG : Bit2) = Bit2 C eval #FldDTUS = 'T' C endif C if %bitand(QDFFFINF.WDFFFBIT : Bit4) = Bit4 C eval #FldDTUS = 'U' C endif C if %bitand(QDFFFINF.WDFFFBIT : Bit5) = Bit5 C eval #FldDTUS = 'S' C endif * * CONSTANTS C if QDFFFINF.WDFFFIOA = x'01' C EXSR ProcessCons C ELSE * Field Name C eval p_QDFFNTB = %addr(QDFFNTBL.WDFFNMES) + C + 10 * (QDFWFLDI.WDFWNMEI -1) * * QDFFFINF.WDFFFIOA *Field attribute. *X'01' indicates Constant (see structure QDFFFCON, Constant Field Header *X'02' indicates Output (O), *X'03' indicates Message (M), h (B), *X'04' indicates Input (I), (P) *X'05' indicates Both (B), *X'06' indicates Hidden (H), and *X'07' indicates Program to System (P) C eval #FldIO = QDFFFINF.WDFFFIOA * WDFFKBDT * Keyboard shift and data type. * X'00' indicates Alpha shift/character (A), * X'01' indicates Alpha only (X), * X'02' indicates Numeric shift (N), * X'03' indicates Numeric only (Y), * X'04' indicates Katakana (K), * X'05' indicates Digits only (D), * X'06' indicates Inhibit keyboard (I), * X'07' indicates Signed numeric/zoned (S), * X'08' indicates Binary (B), X'09' indicates Packed (P), * X'0A' indicates Floating (F), * X'0B' indicates DBCS (J), * X'0C' indicates Open (O), X'0D' indicates Either (E), * X'0E' indicates Numeric-only character (M), * X'0F' indicates Graphic (G), * X'10' indicates Date (L), * X'11' indicates Time (T), and * X'12' indicates Timestamp (Z) C eval #FldAtr = QDFFFNAM.WDFFKBDT C eval #FldNam = QDFFNTB.WDFFNAM C eval #FldCom = *blank C eval #FldPlen = QDFFFNAM.WDFFPLEN C eval #FldDec = QDFFFNAM.WDFFDEC C endif CSR endsr *------------------------------------------------ * This loops through all keyword categories * for a constant field (text on the screen.) *------------------------------------------------ CSR ProcessCons begsr C C* C if (QDFFFDPD.WDFFFDOC > 0) C* C eval p_QDFFCOSA = p_QDFFFINF + C QDFFFDPD.WDFFFDOC C* C for cc = 0 to (QDFFCOSA.WDFFCCT - 1) C* C eval p_QDFFCCOA = %addr(QDFFCOSA.WDFFCCOS) C + (cc * %size(QDFFCCOA)) C if (QDFFCCOA.WDFFCAID = x'22') C eval p_QDFKMFDK= p_QDFFFINF + C QDFFCCOA.WDFFCAOF C exsr ProcessCat22 C endif C if (QDFFCCOA.WDFFCAID = x'23') C eval p_QDFKDFT = p_QDFFFINF + C QDFFCCOA.WDFFCAOF C exsr ProcessCat23 C endif C C if (QDFFCCOA.WDFFCAID = x'24') C eval p_QDFKEDTR = p_QDFFFINF + C QDFFCCOA.WDFFCAOF C exsr ProcessCat24 C endif C endfor C C endif C CSR endsr *------------------------------------------------ * Process File Keywords. *------------------------------------------------ CSR FileKwds begsr C C if (QDFFDPDD.WDFFXDOC > 0) C* C eval p_QDFFCOSA = p_QDFFINFO + C QDFFDPDD.WDFFXDOC C* C for lc = 0 to (QDFFCOSA.WDFFCCT - 1) C* C eval p_QDFFCCOA = %addr(QDFFCOSA.WDFFCCOS) C + (lc * %size(QDFFCCOA)) C eval p_QDFKFILK = p_QDFFINFO + C QDFFCCOA.WDFFCAOF C for lk = 1 to QDFKFILK.WDFFKFIL C if (lk=1) C eval p_QDFKFLPM = %addr(QDFKFILK.WDFKFILE) C else C eval p_QDFKFLPM = p_QDFKFLPM + C %size(QDFKFLPM ) C endif C C eval p_QDFKFLPP = %addr(QDFKFLPM.WDFKFLEX) C for lx = 1 to QDFKFLPM.WDFFKFLP C C select C when QDFKFLPM.WDFKFLID = x'02' C eval p_QDFKFLSZ = %addr(QDFKFLPP.WDFKFLNM) C when QDFKFLPM.WDFKFLID = x'04' C eval p_QDFKICVP = %addr(QDFKFLPP.WDFKFLNM) C when QDFKFLPM.WDFKFLID = x'05' C eval p_QDFKHARD = %addr(QDFKFLPP.WDFKFLNM) C when QDFKFLPM.WDFKFLID = x'06' C eval p_QDFKHXPS = %addr(QDFKFLPP.WDFKFLNM) C when QDFKFLPM.WDFKFLID = x'07' C eval p_QDFKHDOC = %addr(QDFKFLPP.WDFKFLNM) C when QDFKFLPM.WDFKFLID = x'08' C eval p_QDFKSIDX = %addr(QDFKFLPP.WDFKFLNM) C when QDFKFLPM.WDFKFLID = x'0A' C eval p_QDFKFALX = %addr(QDFKFLPP.WDFKFLNM) C when QDFKFLPM.WDFKFLID = x'0B' C eval p_QDFKESFL = %addr(QDFKFLPP.WDFKFLNM) C when QDFKFLPM.WDFKFLID = x'0C' C eval p_QDFKBODR = %addr(QDFKFLPP.WDFKFLNM) C endsl C eval p_QDFKFLPP = C p_QDFKFLPP + (QDFKFLPP.WDFKFLLN) C endfor C endfor C C C endfor C C endif C CSR endsr *------------------------------------------------ * Process Record Keywords. *------------------------------------------------ CSR RcdKwds begsr C if (QDFFRDPD.WDFFRDOC > 0) C* C eval p_QDFFCOSA = p_QDFFRINF + C QDFFRDPD.WDFFRDOC C for rc = 0 to (QDFFCOSA.WDFFCCT - 1) C* C eval p_QDFFCCOA = %addr(QDFFCOSA.WDFFCCOS) C + (rc * %size(QDFFCCOA)) * Miscellaneous record-level keywords (uses (QDFKMSAP)) * no structures for IDs X'01', X'02', X'03', X'04', X'05', X'06', X'07', * ID Keyword ID Keyword * X'01' LOCK X'09' RMVWDW * X'02' ALARM X'0F' DSPMOD * X'03' BLINK X'10' CSRLOC * X'04' LOGOUT X'11' INDARA * X'05' ALWGPH X'13' SETOFF * X'06' MSGALARM X'15' RTNCSRLOC * X'07' RETLCKSTS X'16' MNUBARDSP * X'08' USRRSTDSP C eval p_QDFKMSRL = p_QDFFRINF + C QDFFCCOA.WDFFCAOF * Command Key Keyword Structure (QDFKCKKW) (uses (QDFKCKKE)) * Use structure QDFKCKKE for category 2 keyword IDs X'01' through X'25' an * Use structure QDFKCKKE for category 2 keyword IDs X'01' through X'25' an * ID Keyword ID Keyword ID Keyword * X'01' CA/CF01 X'0E' CA/CF14 X'1A' ROLLDOWN * X'02' CA/CF02 X'0F' CA/CF15 X'1B' PRINT * X'03' CA/CF03 X'10' CA/CF16 X'1C' HOME * X'04' CA/CF04 X'11' CA/CF17 X'1D' CLEAR * X'05' CA/CF05 X'12' CA/CF18 X'1E' HELP * X'06' CA/CF06 X'13' CA/CF19 X'20' HLPRTN * X'07' CA/CF07 X'14' CA/CF20 X'21' VLDCMDKEY * X'08' CA/CF08 X'15' CA/CF21 X'22' ALTHELP * X'09' CA/CF09 X'16' CA/CF22 X'23' ALTPAGEUP * X'0A' CA/CF10 X'17' CA/CF23 X'24' ALTPAGEDWN * X'0B' CA/CF11 X'18' CA/CF24 X'25' MNUBARSW * X'0C' CA/CF12 X'19' ROLLUP X'30' MNUCNL * X'0D' CA/CF13 C eval p_QDFKCKKW = p_QDFFRINF + C QDFFCCOA.WDFFCAOF C for rk = 1 to QDFKCKKW.WDFFKCKS C if (rk=1) C eval p_QDFKCKKE = %addr(QDFKCKKW.WDFKCKCM) C else C eval p_QDFKCKKE = p_QDFKCKKE + C %size(QDFKCKKE ) C endif C C eval p_QDFKFLPP = %addr(QDFKFLPM.WDFKFLEX) C for rx = 1 to QDFKFLPM.WDFFKFLP C C* this is unfinished C eval p_QDFKFLPP = C p_QDFKFLPP + (QDFKFLPP.WDFKFLLN) C endfor C endfor C C C endfor C C endif C CSR endsr *------------------------------------------------ * Process Record Keywords. *------------------------------------------------ CSR FieldKwds begsr C* C if (QDFFFDPD.WDFFFDOC > 0) C* C eval p_QDFFCOSA = p_QDFFFINF + C QDFFFDPD.WDFFFDOC C* C for fc = 0 to (QDFFCOSA.WDFFCCT - 1) C* C eval p_QDFFCCOA = %addr(QDFFCOSA.WDFFCCOS) C + (fc * %size(QDFFCCOA)) C if (QDFFCCOA.WDFFCAID = x'23') C eval p_QDFKDFT = p_QDFFFINF + C QDFFCCOA.WDFFCAOF C exsr ProcessCat23 C endif C C endfor C C endif C CSR endsr *------------------------------------------------ * This loops through all keywords that fall into * category 22 *------------------------------------------------ CSR ProcessCat22 begsr C for ck = 1 to QDFKMFDK.WDFFKMFS C if (ck=1) C eval p_QDFKMFDP = %ADDR(QDFKMFDK.WDFKMFEN) C else C eval p_QDFKMFDP = p_QDFKMFDP + C %size(QDFKMFDP ) C endif C select C when QDFKMFDP.WDFKMFID = x'10' C eval p_QDFKMFMV = %ADDR(QDFKMFDP.WDFKMFEX) C when QDFKMFDP.WDFKMFID = x'15' C eval p_QDFKMFRS = %ADDR(QDFKMFDP.WDFKMFEX) C eval p_QDFKMFEM = %ADDR(QDFKMFRS.WDFKMFEE) C when QDFKMFDP.WDFKMFID = x'16' C eval p_QDFKMFRS = %ADDR(QDFKMFDP.WDFKMFEX) C eval p_QDFKMFEM = %ADDR(QDFKMFRS.WDFKMFEE) C eval p_QDFKMFSI = %ADDR(QDFKMFEM.WDFKMFTX) C when QDFKMFDP.WDFKMFID = x'17' C eval p_QDFKDFLD = %ADDR(QDFKMFDP.WDFKMFEX) C when QDFKMFDP.WDFKMFID = x'18' C eval p_QDFK_DATTIMFmat = %ADDR(QDFKMFDP.WDFKMFEX) * WDFK_DATTIM * Format used for a field with the date or time data type. * X'01' indicates *JOB, * X'02' indicates *MDY, * X'03' indicates *DMY, * X'04' indicates *YMD, * X'05' indicates *JUL, * X'06' indicates *ISO, * X'07' indicates *USA, * X'08' indicates *EUR, * X'09' indicates *JIS, * X'0A' indicates *H C when QDFKMFDP.WDFKMFID = x'19' C eval p_QDFK_DATTIM_Sep = %ADDR(QDFKMFDP.WDFKMFEX) C eval QDFK_DATTIM_Sep.WDFK_DATTIMSep = C QDFK_DATTIM_Sep.WDFK_DATTIMSep C C when QDFKMFDP.WDFKMFID = x'1A' C eval p_QDFK_DATEP = %ADDR(QDFKMFDP.WDFKMFEX) C eval QDFK_DATEP.WDFK_DATE = QDFK_DATEP.WDFK_DATE * 0 BIT(1) WDFK_DATE_SYS If on, the *SYS parameter is specified * 1 BIT(1) WDFK_DATE_YY If on, the *YY parameter is specified * 2 BIT(1) WDFK_DATE_EDTCDEY If on, the EDTCDE(Y) keyword was specify C* If %Bitand(WDFK_DATE:Bit0) = Bit0 C* If %Bitand(WDFK_DATE:Bit1) = Bit1 C* If %Bitand(WDFK_DATE:Bit2) = Bit2 C when QDFKMFDP.WDFKMFID = x'1B' C eval p_QDFK_MAPVAL = %ADDR(QDFKMFDP.WDFKMFEX) C endsl C endfor C C C CSR endsr *------------------------------------------------ * This loops through all keywords that fall into * category 23 (DFT, MSGCON, DFTVAL, HTML) *------------------------------------------------ CSR ProcessCat23 begsr C for ck = 1 to QDFKDFT.WDFFKDFS C if (ck=1) C eval p_QDFKDFPM = %addr(QDFKDFT.WDFKDFPE) C else C eval p_QDFKDFPM = p_QDFKDFPM + C %size(QDFKDFPM ) C endif C if (QDFKDFPM.WDFKDFID = DFT) C eval p_KwdData = p_QDFKDFPM + C %size(QDFKDFPM ) - 2 C eval Temp = KwdData C C eval #FldLen = QDFKDFPM.WDFKDFLN C eval #FldIO = QDFFFINF.WDFFFIOA C eval #FldCom = Temp C C endif C C endfor CSR endsr *------------------------------------------------ * This loops through all keywords that fall into * category 24 (Date, Time) *------------------------------------------------ CSR ProcessCat24 begsr C for ck = 1 to QDFKEDTR.WDFFKEDS C if (ck=1) C eval p_QDFKEDTP = %addr(QDFKEDTR.WDFKEDKW ) C else C eval p_QDFKEDTP = p_QDFKEDTP + C %size(QDFKEDTP ) C endif C C * EDIT Keyword Structure (QDFKEDTP) * Use this structure for category 24 keywords that * have keyword IDs of X'01' and X'02'. * Type Variable Name Field * CHAR(1) WDFKEDID Keyword ID. * CHAR(1) WDFKEDSY Zero suppress or fill character for the EDTCDE k * BIN(15) WDFKEDML Length of the edit mask. * CHAR(1) * Reserved. * CHAR(*) WDFKEDMS The edit mask for the EDTCDE and EDTWRD keywords * C eval #FldEdt = %subst(QDFKEDTP.WDFKEDMSX : 1 C : QDFKEDTP.WDFKEDML) C eval #FldLen = QDFKEDTP.WDFKEDML C eval #FldIO = QDFFFINF.WDFFFIOA C endfor CSR endsr P RtvFlds E
DSMFD Driver
h Option(*NODEBUGIO) // CRTRPGMOD MODULE(urlib/DSMFD) // SRCFILE(urlib/ursrcfile) // SRCMBR(DSMFD) REPLACE(*YES) // CRTSRVPGM SRVPGM(urlib/DSPFINFO) // MODULE(urlib /DSPFINFO) // EXPORT(*ALL) // CRTPGM PGM(urlib/DSMFD) MODULE(urlib/DSMFD) // BNDSRVPGM((urlib/DSPFINFO *IMMED) ) // CALL urlib/DSMFD ('*LIBL ' 'CDISPRF ') D DSMFD PR D 10 D 10 D DSMFD PI D $Lib 10 D $Fil 10 D $FilQul S 20 /if defined(QSNAPI_H) /eof /endif /define QSNAPI_H *------------------------------------------------------------- * Simple data types *------------------------------------------------------------- D Q_Handle_T s 10I 0 based(Template) D Qsn_Cmd_Buf_T s like(Q_Handle_T) based(Template) D Qsn_Inp_Buf_T s like(Q_Handle_T) based(Template) D Qsn_Env_T s like(Q_Handle_T) based(Template) D QSN_FAIL c -1 *------------------------------------------------------------- * QsnCrtCmdBuf(): Create command buffer *------------------------------------------------------------- D QsnCrtCmdBuf PR 10I 0 extproc('QsnCrtCmdBuf') D InitSize 10I 0 const D IncrAmt 10I 0 const options(*omit) D MaxSize 10I 0 const options(*omit) D Handle 10I 0 options(*omit) D ErrorCode 32767A options(*omit: *varsize) *------------------------------------------------------------- * QsnCrtInpBuf(): Create Input Buffer *------------------------------------------------------------- D QsnCrtInpBuf PR 10I 0 extproc('QsnCrtInpBuf') D BufSize 10I 0 const D IncrAmt 10I 0 const options(*omit) D MaxSize 10I 0 const options(*omit) D Handle 10I 0 options(*omit) D ErrorCode 32767A options(*omit: *varsize) *------------------------------------------------------------- * QsnClrBuf(): Clear/Reset Buffer (any type) *------------------------------------------------------------- D QsnClrBuf PR 10I 0 extproc('QsnClrBuf') D BufHandle 10I 0 const D ErrorCode 32767A options(*omit: *varsize) *------------------------------------------------------------- * QsnDltBuf(): Delete buffer (any type) *------------------------------------------------------------- D QsnDltBuf PR 10I 0 extproc('QsnDltBuf') D BufHandle 10I 0 const D ErrorCode 32767A options(*omit: *varsize) *------------------------------------------------------------- * QsnClrScr(): Clear screen *------------------------------------------------------------- D QsnClrScr PR 10I 0 extproc('QsnClrScr') D mode 1A const options(*omit) D cmdbuf 10I 0 const options(*omit) D LowEnvHandle 10I 0 const options(*omit) D ErrorCode 32767A options(*omit: *varsize) *------------------------------------------------------------- * QsnWrtDta(): Write data to the display *------------------------------------------------------------- D QsnWrtDta PR 10I 0 extproc('QsnWrtDta') D Data 32767A const options(*varsize) D DataLen 10I 0 const D FieldID 10I 0 const options(*omit) D Row 10I 0 const options(*omit) D Column 10I 0 const options(*omit) D StrMonoAttr 1A const options(*omit) D EndMonoAttr 1A const options(*omit) D StrColorAttr 1A const options(*omit) D EndColorAttr 1A const options(*omit) D CmdBufHandle 10I 0 const options(*omit) D LowEnvHandle 10I 0 const options(*omit) D ErrorCode 32767A options(*omit: *varsize) *------------------------------------------------------------- * QsnSetFld(): Add a field to the display *------------------------------------------------------------- D QsnSetFld PR 10I 0 extproc('QsnSetFld') D FieldID 10I 0 const options(*omit) D FieldLen 10I 0 const options(*omit) D Row 10I 0 const options(*omit) D Column 10I 0 const options(*omit) D FFW 2A const options(*omit) D FCW 2A const dim(32767) D options(*omit: *varsize) D NumOfFCW 10I 0 const options(*omit) D MonoAttr 1A const options(*omit) D ColorAttr 1A const options(*omit) D CmdBufHandle 10I 0 const options(*omit) D LowEnvHandle 10I 0 const options(*omit) D ErrorCode 32767A options(*omit: *varsize) *------------------------------------------------------------- * QsnReadInp(): Read data and wait for AID key *------------------------------------------------------------- D QsnReadInp PR 10I 0 extproc('QsnReadInp') D CC1 1A const D CC2 1A const D DataBytes 10I 0 options(*omit) D InpBufHandle 10I 0 options(*omit) D CmdBufHandle 10I 0 options(*omit) D LowEnvHandle 10I 0 options(*omit) D ErrorCode 32767A options(*omit: *varsize) *------------------------------------------------------------- * QsnPutBuf(): Send command output buffer to terminal *------------------------------------------------------------- D QsnPutBuf PR 10I 0 extproc('QsnPutBuf') D CmdBufHandle 10I 0 const D LowEnvHandle 10I 0 const options(*omit) D ErrorCode 32767A options(*omit: *varsize) *------------------------------------------------------------- * QsnPutGetBuf(): Send command output buffer to terminal * then wait for input buffer from terminal *------------------------------------------------------------- D QsnPutGetBuf PR 10I 0 extproc('QsnPutGetBuf') D CmdBufHandle 10I 0 const D InpBufHandle 10I 0 const D LowEnvHandle 10I 0 const options(*omit) D ErrorCode 32767A options(*omit: *varsize) *------------------------------------------------------------- * QsnRtvDta(): Get pointer to input data in input buffer *------------------------------------------------------------- D QsnRtvDta PR * extproc('QsnRtvDta') D InpBufHandle 10I 0 const D PtrToData * const options(*omit) D ErrorCode 32767A options(*omit: *varsize) *------------------------------------------------------------- * QsnRtvDtaLen(): Get length of input data in input buffer *------------------------------------------------------------- D QsnRtvDtaLen PR 10I 0 extproc('QsnRtvDtaLen') D InpBufHandle 10I 0 const D DataLen 10I 0 const options(*omit) D ErrorCode 32767A options(*omit: *varsize) *------------------------------------------------------------- * *------------------------------------------------------------- D Qsn_Env_Desc_T... D DS qualified based(Template) D color_support 1A D CDRA 1A D CDRA_3F 1A D DBCS_support 1A D coexist 1A D alt_help 1A D tgt_dev 10A D disp_file 20A D invite_active 1A D prevent_ovrd 1A *------------------------------------------------------------- * *------------------------------------------------------------- D Qsn_Env_Rtv_Desc_T... D DS qualified based(Template) D bytes_rtn 10I 0 D bytes_avail 10I 0 D color_support 1A D CDRA 1A D CDRA_3F 1A D DBCS_support 1A D coexist 1A D alt_help 1A D tgt_dev 10A D dsp_file 20A D invite_active 1A D prevent_ovrd 1A *------------------------------------------------------------- * Constants used for creating/querying the environment *------------------------------------------------------------- D QSN_COLOR_NO... D C '1' D QSN_COLOR_YES... D C '2' D QSN_COLOR_SELECT... D C '3' D QSN_CDRA_STD... D C '1' D QSN_CDRA_CNVT... D C '2' D QSN_DBCS_STD... D C '1' D QSN_DBCS_ONLY... D C '2' D QSN_DBCS_EITHER... D C '3' D QSN_DBCS_MIXED... D C '4' D QSN_COEXIST_YES... D C '1' D QSN_COEXIST_NO... D C '2' D QSN_ALTHELP_NO... D C '1' D QSN_TGT_REQ... D C '*REQUESTER' D QSN_INVITE_NO... D C '1' D QSN_INVITE_YES... D C '2' D QSN_PREVENT_OVERRIDE_NO... D C '1' D QSN_PREVENT_OVERRIDE_YES... D C '2' D QSN_SAME C '0' D QSN_DSP03 C '3' D QSN_DSP04 C '4' *------------------------------------------------------------- * AID keys (function keys, et al) *------------------------------------------------------------- D Qsn_F1 C X'31' D Qsn_F2 C X'32' D Qsn_F3 C X'33' D Qsn_F4 C X'34' D Qsn_F5 C X'35' D Qsn_F6 C X'36' D Qsn_F7 C X'37' D Qsn_F8 C X'38' D Qsn_F9 C X'39' D Qsn_F10 C X'3A' D Qsn_F11 C X'3B' D Qsn_F12 C X'3C' D Qsn_F13 C X'B1' D Qsn_F14 C X'B2' D Qsn_F15 C X'B3' D Qsn_F16 C X'B4' D Qsn_F17 C X'B5' D Qsn_F18 C X'B6' D Qsn_F19 C X'B7' D Qsn_F20 C X'B8' D Qsn_F21 C X'B9' D Qsn_F22 C X'BA' D Qsn_F23 C X'BB' D Qsn_F24 C X'BC' D Qsn_SLP C X'3F' D Qsn_FET C X'50' D Qsn_PA1 C X'6C' D Qsn_PA2 C X'6E' D Qsn_PA3 C X'6B' D Qsn_Clear C X'BD' D Qsn_Enter C X'F1' D Qsn_Help C X'F3' D Qsn_RollDown C X'F4' D Qsn_RollUp C X'F5' D Qsn_PageUp C X'F4' D Qsn_PageDown C X'F5' D Qsn_Print C X'F6' D Qsn_RecBS C X'F8' DQsn5250QY C '1' DQsn5250QN C '2' DQsn5250QF C '3' *------------------------------------------------------------- * Control Characters ( CC1 & CC2 ) *------------------------------------------------------------- D QSN_CC1_NULL... D C X'00' D QSN_CC1_LOCKBD... D C X'20' D QSN_CC1_MDTNBY... D C X'40' D QSN_CC1_MDTALL... D C X'60' D QSN_CC1_CLRMOD... D C X'80' D QSN_CC1_MDTNBY_CLRALL... D C X'A0' D QSN_CC1_MDTNBY_CLRMOD... D C X'C0' D QSN_CC1_MDTALL_CLRALL... D C X'E0' D QSN_CC2_NULL... D C X'00' D QSN_CC2_NO_IC... D C X'40' D QSN_CC2_RST_CSR_BL... D C X'20' D QSN_CC2_SET_CSR_BL... D C X'10' D QSN_CC2_UNLOCKBD... D C X'08' D QSN_CC2_ALARM... D C X'04' D QSN_CC2_MSG_OFF... D C X'02' D QSN_CC2_MSG_ON... D C X'01' *------------------------------------------------------------- * Screen Attributes *------------------------------------------------------------- D QSN_NO_SA... D C X'00' D QSN_SA_NORM... D C X'20' D QSN_SA_CS... D C X'30' D QSN_SA_BL... D C X'28' D QSN_SA_UL... D C X'24' D QSN_SA_HI... D C X'22' D QSN_SA_RI... D C X'21' D QSN_SA_ND... D C X'27' D QSN_SA_GRN... D C X'20' D QSN_SA_GRN_RI... D C X'21' D QSN_SA_WHT... D C X'22' D QSN_SA_WHT_RI... D C X'23' D QSN_SA_GRN_UL... D C X'24' D QSN_SA_GRN_UL_RI... D C X'25' D QSN_SA_WHT_UL... D C X'26' D QSN_SA_RED... D C X'28' D QSN_SA_RED_RI... D C X'29' D QSN_SA_RED_BL... D C X'2A' D QSN_SA_RED_RI_BL... D C X'2B' D QSN_SA_RED_UL... D C X'2C' D QSN_SA_RED_UL_RI... D C X'2D' D QSN_SA_RED_UL_BL... D C X'2E' D QSN_SA_ND_2F... D C X'2F' D QSN_SA_TRQ_CS... D C X'30' D QSN_SA_TRQ_CS_RI... D C X'31' D QSN_SA_YLW_CS... D C X'32' D QSN_SA_YLW_CS_RI... D C X'33' D QSN_SA_TRQ_UL... D C X'34' D QSN_SA_TRQ_UL_RI... D C X'35' D QSN_SA_YLW_UL... D C X'36' D QSN_SA_ND_37... D C X'37' D QSN_SA_PNK... D C X'38' D QSN_SA_PNK_RI... D C X'39' D QSN_SA_BLU... D C X'3A' D QSN_SA_BLU_RI... D C X'3B' D QSN_SA_PNK_UL... D C X'3C' D QSN_SA_PNK_UL_RI... D C X'3D' D QSN_SA_BLU_UL... D C X'3E' D QSN_SA_ND_3F... D C X'3F' *------------------------------------------------------------- * Ideographic shift-in and shift-out *------------------------------------------------------------- D QSN_SO C X'0E' D QSN_SI C X'0F' *------------------------------------------------------------- * Field Format Words *------------------------------------------------------------- D QSN_NO_FFW C X'0000' D QSN_FFW_BYPASS C X'6000' D QSN_FFW_DUP C X'5000' D QSN_FFW_MDT C X'4800' D QSN_FFW_ALPHA_SHIFT... D C X'4000' D QSN_FFW_ALPHA_ONLY... D C X'4100' D QSN_FFW_NUM_SHIFT... D C X'4200' D QSN_FFW_NUM_ONLY... D C X'4300' D QSN_FFW_KATA... D C X'4400' D QSN_FFW_DIGIT_ONLY... D C X'4500' D QSN_FFW_IO... D C X'4600' D QSN_FFW_SIGNED_NUMERIC... D C X'4700' D QSN_FFW_AUTO_ENTER... D C X'4080' D QSN_FFW_FER... D C X'4040' D QSN_FFW_AUTO_FER... D C X'4040' D QSN_FFW_MONOCASE... D C X'4020' D QSN_FFW_AUTO_MONOCASE... D C X'4020' D QSN_FFW_ME... D C X'4008' D QSN_FFW_NOADJUST... D C X'4000' D QSN_FFW_RA_ZERO... D C X'4005' D QSN_FFW_RA_BLANK... D C X'4006' D QSN_FFW_MF... D C X'4007' D QSN_FCW_RESEQ... D C X'8000' D QSN_FCW_MSR... D C X'8101' D QSN_FCW_SLP... D C X'8102' D QSN_FCW_MSR_SLP... D C X'8103' D QSN_FCW_SLP_SA... D C X'8106' D QSN_FCW_DBCS_ONLY... D C X'8200' D QSN_FCW_DBCS_PURE... D C X'8220' D QSN_FCW_DBCS_EITHER... D C X'8240' D QSN_FCW_DBCS_OPEN... D C X'8280' D QSN_FCW_DBCS_OPEN_CO... D C X'82C0' D QSN_FCW_TRANSPARENT... D C X'8400' D QSN_FCW_FET... D C X'8501' D QSN_FCW_CONT_FIRST... D C X'8601' D QSN_FCW_CONT_LAST... D C X'8602' D QSN_FCW_CONT_MIDDLE... D C X'8603' D QSN_FCW_CP... D C X'8800' D QSN_FCW_HL... D C X'8900' D QSN_FCW_PDS... D C X'8A00' D QSN_FCW_MOD11... D C X'B140' D QSN_FCW_MOD10... D C X'B1A0' D QSN_READ_INP... D C X'42' D QSN_READ_MDT... D C X'52' D QSN_READ_IMM... D C X'72' D QSN_READ_MDT_ALT... D C X'82' /if defined(TO_BE_CONVERTED_LATER) * * Structure definitions. * DQsnEnvExtI DS * Data structure for QsnCrtEnv API. D QsnEEDta * D QsnEEChg * procptr D QsnEEDlt * procptr DQsnEnvWM DS * Data structures for QsnSetEnvWinMod API. D QsnEWAtrC 1A D QsnEWULR 10I 0 D QsnEWULC 10I 0 D QsnEWNumR 10I 0 D QsnEWNumC 10I 0 DQsnREnvWM DS * Data structures for QsnRtvEnvWinMod API. D QsnREWRet 10I 0 D QsnREWAvl 10I 0 D QsnREWMode 1A D QsnREWAtr 1A D QsnREWULR 10I 0 D QsnREWULC 10I 0 D QsnREWNumR 10I 0 D QsnREWNumC 10I 0 DQsnQ5250 DS * Data structure for QsnQry5250 API. D QsnQ5Ret 10I 0 D QsnQ5Avl 10I 0 D QsnQ5Stat 1A D QsnQ5Wkstn 4B 0 D QsnQ5CLvl 3A D QsnQ5R1 16A D QsnQ5WType 1A D QsnQ5MType 4A D QsnQ5Model 3A D QsnQ5KbdID 1A D QsnQ5EKbd 1A D QsnQ5PcKbd 1A D QsnQ5SNum 4A D QsnQ5MaxIn 4B 0 D QsnQ5WSCSp 2A D QsnQ5R2 1A D QsnQ5WSCB1 1A D QsnQ5WSCB2 1A D QsnQ5WSCB3 1A D QsnQ5WSCB4 1A D QsnQ5WSCB5 1A D QsnQ5R3 5A D QsnQ5Prt 1A D QsnQ5R4 1A D QsnQ5GrdBf 1A D QsnQ5R5 9A *Note: this may be expanded in the future DQsnReadInf DS * Data structure for QsnRtvReadInf API. D QsnRIRet 10I 0 D QsnRIAvl 10I 0 D QsnRIR1 8A D QsnRIDta * D QsnRIFDta * D QsnRIDtaL 10I 0 D QsnRIFDtaL 10I 0 D QsnRINumF 10I 0 D ReadLen 10I 0 D QsnRIRow 10I 0 D QsnRICol 10I 0 D QsnRIAID 1A D QsnRIR2 7A DQsnFldInf DS * Data structure for QsnRtvFldInf API. D QsnFIRet 10I 0 D QsnFIAvl 10I 0 D QsnFIType 1A D QsnFIRow 10I 0 D QsnFICol 10I 0 D QsnFIFDtaL 10I 0 D QsnFIR1 11A D QsnFIDta * DQsnWinExtI DS * Data structure for QsnCrtWin API D QsnWEDta * D QsnWEChg * procptr D QsnWEDlt * procptr D QsnWECoord * procptr D QsnWEDraw * procptr D QsnWECur * procptr DQsnWinD DS * Data structures for QsnCrtWin and QsnChgWin APIs. D QsnWTopR 10I 0 D QsnWLeftC 10I 0 D QsnWNumR 10I 0 D QsnWNumC 10I 0 D QsnWMinR 10I 0 D QsnWMinC 10I 0 D QsnWMaxR 10I 0 D QsnWMaxC 10I 0 D QsnWFS 1A D QsnWAtrM1 1A D QsnWAtrM2 1A D QsnWAtrM3 1A D QsnWAtrC1 1A D QsnWAtrC2 1A D QsnWAtrC3 1A D QsnWShowB 1A D QsnWShowBA 1A D QsnWShowLA 1A D QsnWShowRA 1A D QsnWMsgL 1A D QsnWULCh 1A D QsnWTopCh 1A D QsnWURCh 1A D QsnWLCh 1A D QsnWRCh 1A D QsnWLLCh 1A D QsnWBotCh 1A D QsnWLRCh 1A D QsnWGUI 1A D QsnWFlg1 1A D QsnWFlg2 1A D QsnWR1 1A D QsnWBdrF 1A D QsnWTtlF 1A D QsnWTAtrM 1A D QsnWTAtrC 1A D QsnWR2 1A D QsnWR3 3A D QsnWTtlO 10I 0 D QsnWTtlL 10I 0 D QsnWR4 10I 0 DQsnRWinD DS * Data structure for QsnRtvWinD API. D QsnRWRet 10I 0 D QsnRWAvl 10I 0 D QsnRWTopR 10I 0 D QsnRWLeftC 10I 0 D QsnRWNumR 10I 0 D QsnRWNumC 10I 0 D QsnRWMinR 10I 0 D QsnRWMinC 10I 0 D QsnRWMaxR 10I 0 D QsnRWMaxC 10I 0 D QsnRWFS 1A D QsnRWAtrM1 1A D QsnRWAtrM2 1A D QsnRWAtrM3 1A D QsnRWAtrC1 1A D QsnRWAtrC2 1A D QsnRWAtrC3 1A D QsnRWShwB 1A D QsnRWShwBA 1A D QsnRWShwLA 1A D QsnRWShwRA 1A D QsnRWMsgL 1A D QsnRWULCh 1A D QsnRWTopCh 1A D QsnRWURCh 1A D QsnRWLCh 1A D QsnRWRCh 1A D QsnRWLLCh 1A D QsnRWBotCh 1A D QsnRWLRCh 1A D QsnRWGUI 1A D QsnRWFlg1 1A D QsnRWFlg2 1A D QsnRWR1 1A D QsnRWBdrF 1A D QsnRWTtlF 1A D QsnRWTAtrM 1A D QsnRWTAtrC 1A D QsnRWR2 1A D QsnRWR3 3A D QsnRWTtlO 10I 0 D QsnRWTtlL 10I 0 D QsnRWR4 10I 0 DQsnSsnExtI DS * Data structure for QsnCrtSsn API D QsnSEDta * D QsnSEChg * procptr D QsnSEDlt * procptr D QsnSECoord * procptr D QsnSEDraw * procptr D QsnSECur * procptr DQsnSsnD DS * Data structure for QsnCrtSsn and QsnChgSsn APIs D QsnSActn * procptr Dim(24) D QsnSTRow 10I 0 D QsnSLCol 10I 0 D QsnSNRows 10I 0 D QsnSNCols 10I 0 D QsnSRollA 10I 0 D QsnSShftA 10I 0 D QsnSISize 10I 0 D QsnSMSize 10I 0 D QsnSIncr 10I 0 D QsnSIRows 10I 0 D QsnSR1 1A D QsnSWrap 1A D QsnSR2 1A D QsnEBCDIC 1A D QsnSEcho 1A D QsnSLDsp 1A D QsnSCDsp 1A D QsnSShowC 1A D QsnSCmdAM 1A D QsnSCmdAC 1A D QsnSInLAM 1A D QsnSInLAC 1A D QsnSPmtO 10I 0 D QsnSPmtL 10I 0 D QsnSCmdO1 10I 0 D QsnSCmdL1 10I 0 D QsnSCmdO2 10I 0 D QsnSCmdL2 10I 0 D QsnSR4 20A DQsnRSsnD DS * Data structure for QsnRtvSsnD APIs D QsnRSRet 10I 0 D QsnRSAvl 10I 0 D QsnRSR1 8A D QsnRSActn * procptr Dim(24) D QsnRSTRow 10I 0 D QsnRSLCol 10I 0 D QsnRSNRows 10I 0 D QsnRSNCols 10I 0 D QsnRSRollA 10I 0 D QsnRSShftA 10I 0 D QsnRSISize 10I 0 D QsnRSMSize 10I 0 D QsnRSIncr 10I 0 D QsnRSIRows 10I 0 D QsnRSR2 1A D QsnRSWrap 1A D QsnRSR3 1A D QsnREBCDIC 1A D QsnRSEcho 1A D QsnRSLDsp 1A D QsnRSCDsp 1A D QsnRSShowC 1A D QsnRSCmdAM 1A D QsnRSCmdAC 1A D QsnRSInLAM 1A D QsnRSInLAC 1A D QsnRSPmtO 10I 0 D QsnRSPmtL 10I 0 D QsnRSCmdO1 10I 0 D QsnRSCmdL1 10I 0 D QsnRSCmdO2 10I 0 D QsnRSCmdL2 10I 0 D QsnRSR5 20A /endif d $SelFmts pr d 10A Dim(100) d 10I 0 d 100A d $PutRecords Pr d $PutRecord Pr d Record 10A const d Add 1A const d ReadScr 1A const d Lines s 78A dim(24) d length s 10i 0 d Q s 1 inz('''') D APIErrorDS DS D 10I 0 Inz( %Size( APIErrorDS ) ) D BytesAvail 10I 0 Inz( *Zero ) D MsgID 7 Inz( *Blanks ) D 1 Inz( X'00' ) D MsgDta 256 Inz( *Blanks ) * d InputData ds qualified d based(p_InputData) d Row 3U 0 d Col 3U 0 d AID 1A d Field 500A * * This is the return data from subprocedure $screen * left at 256 so you can add bunch more return values * d dataout ds 256 qualified inz d F3 n overlay(dataout:1) d Choice 1 overlay(dataout:*next) **--------------------------------------------------------------- D FldDtaDS DS occurs(1000) D #FmtNam 10A D #FldNam 10A D #FldLen 5I 0 D #FldPlen 5I 0 D #FldDec 1 D #FldIO 1 D #FldAtr 1 D #FldDTUS 1 D #FldEdt 20A D #FldRow 10I 0 D #FldCol 10I 0 D #FldCom 4000A varying D SavFmt s 10A D #FFW s 2A D #FLEN s 5I 0 d screenatr s 1 d ssize s 4 0 d #GotFlds s 10i 0 D RTVFLDS PR N D $FilQul 20 Value D $NumFlds 10I 0 D $FldDtaDS Like(FldDtaDS) d #Fmts s 10A Dim(100) d fx s 10I 0 d Ans s 100A d z s 10I 0 d z1 s 10I 0 d zx s 10I 0 d main PR /free *INLR = *ON; main(); return; /end-free //###################################################// P main b d main PI /free $FilQul = $Fil + $lib; clear FldDtaDs ; %occur(FlddtaDS) = 1; *IN10 = RTVFLDS ($FilQul : #GotFlds : FldDtaDS); $SelFmts(#Fmts : fx : Ans); zx = 0; for z = 1 to 50; if %subst(Ans : z*2 -1 : 2) <> *blank; zx += 1; endif; endfor; if zx > 0; for z = 1 to 50; if %subst(Ans : z*2 -1 : 2) <> *blank; z1 += 1; select; when z1 = 1 and z1 = zx; $PutRecord(#Fmts(z) : '0':'1'); when z1 = 1 ; $PutRecord(#Fmts(z) : '0':'0'); when z1 = zx; $PutRecord(#Fmts(z) : '1':'1'); other; $PutRecord(#Fmts(z) : '1':'0'); endsl; endif; endfor; endif; return; /end-free p main e *-------------------------------------------------------- * $SelFmts( ): Show Screen1 (Remote files via FTP) * *-------------------------------------------------------- p $SelFmts B d $SelFmts PI d #Fmts 10A Dim(100) d fx 10I 0 d Ans 100A d cmdbuf s like(Qsn_Cmd_Buf_T) d inpbuf s like(Qsn_Inp_Buf_T) d prompt s 70A varying d NRF s 50 inz('** No Records Found **') d skipthis s n d len s 10I 0 d data s 132A varying d x s 10I 0 d Row s 3U 0 d Answer s 500A varying * D DS D SFmts 14 DIM(100) D SFmtx 10 OVERLAY(Sfmts:5) d RowFmt ds d srowfmt 1 14 d srow 1 4 d sfmt 5 14 d srowb 1 4B 0 * d InputData ds qualified d based(p_InputData) d Row 3U 0 d Col 3U 0 d AID 1A d Field 500A /free // ---------------------------------------------- // Create Input/Output buffers and clear them // ---------------------------------------------- cmdbuf = QsnCrtCmdBuf(100: 50: 0: *OMIT: *OMIT); inpbuf = QsnCrtInpBuf(200: 50: 0: *OMIT: *OMIT); QsnClrBuf( cmdbuf : *omit ); QsnClrBuf( inpbuf : *omit ); // ---------------------------------------------- // Add the "Clear Screen" command to the output // so that the terminal starts with an empty // screen. // ---------------------------------------------- QsnClrScr( *omit : cmdbuf : *omit : *omit ); // ---------------------------------------------- // Put a screen title in the output buffer // ---------------------------------------------- data = 'Select Records Formats to Display .'; QsnWrtDta( data : %len(data) : *omit : 1 : 40 - (%len(data)/2) // center : QSN_SA_HI : QSN_SA_HI : QSN_SA_WHT : QSN_SA_WHT : cmdbuf : *omit : *omit ); // ---------------------------------------------- // Put the records on rows 3+ of the output buf // ---------------------------------------------- row = 2; fx = 0; #Fmts = *blank; // Sort the formats with input fields into screen order // This is to help alleviate the requirement // that input fields need to be in the proper order in the buffer for x = 1 to #Gotflds; %occur(FlddtaDS) = x; If #FmtNam <> SavFmt or x = #GotFlds ; SavFmt = #FmtNam; fx += 1; sFmt = #Fmtnam; sRowb = 0; if #FldIO = x'02' or #FldIO = x'04' or #FldIO = x'05' ; sRowb = #Fldrow; endif; sFmts(fx) = srowfmt; Endif; If #FmtNam = SavFmt; If sRowb < #Fldrow and #FldIO = x'02' or #FldIO = x'04' or #FldIO = x'05'; sRowb = #Fldrow; sFmts(fx) = srowfmt; Endif; Endif; endfor; sorta sFmts; fx = 0 ; for x = 1 to 100; If SFmtx(x) <> *blank ; fx += 1; #Fmts(fx) = sFmtx(x); row +=1; QsnWrtDta( sFmtx(x) : 10 : *omit : row : 5 : QSN_SA_NORM : QSN_SA_NORM : QSN_SA_GRN : QSN_SA_GRN : cmdbuf : *omit : *omit ); QsnSetFld( *omit : 2 : row : 2 : QSN_FFW_ALPHA_SHIFT : *omit : 0 : QSN_SA_UL : QSN_SA_GRN_UL : cmdbuf : *omit : *omit ); endif; endfor; // ---------------------------------------------- // Let the user know how to exit (color blue) // ---------------------------------------------- QsnWrtDta( 'F3=Exit' : %len('F3=Exit') : *omit : 23 : 2 : QSN_SA_HI : QSN_SA_NORM : QSN_SA_BLU : QSN_SA_GRN : cmdbuf : *omit : *omit ); // ---------------------------------------------- // put the "unlock keyboard" command into the // output buffer // ---------------------------------------------- QsnReadInp( QSN_CC1_MDTALL_CLRALL : QSN_CC2_UNLOCKBD : *omit : *omit : cmdbuf : *omit : *omit ); // ---------------------------------------------- // send the output buffer to the terminal, and // wait for input from the user // ---------------------------------------------- QsnPutGetBuf( cmdbuf: inpbuf: *omit: *omit); // ---------------------------------------------- // Get a pointer to the input data, and the // length of the input data. // ---------------------------------------------- p_InputData = QsnRtvDta( inpbuf: *omit: *omit ); Len = QsnRtvDtaLen(inpbuf: *omit: *omit) - %size(InputData.ROW) - %size(InputData.COL) - %size(InputData.AID); // ---------------------------------------------- // Copy the answer from the buffer // ---------------------------------------------- ans = *blank; if (Len > 0); Answer = %trimr( %subst( InputData.field: 1: len) ); ans = Answer; endif; // ---------------------------------------------- // Clean up the buffers, and return to caller // ---------------------------------------------- QsnDltBuf(cmdbuf: *omit); QsnDltBuf(inpbuf: *omit); %subst(dataout:1:1) = '0'; if (InputData.AID = QSN_F3); %subst(dataout:1:1) = '1'; endif; // return Variable return ; /end-free P E *-------------------------------------------------------- * $PutRecord(): Send a record to Screen * *-------------------------------------------------------- p $PutRecord B d $PutRecord PI d Record 10A const d Add 1A const d ReadScr 1A const d cmdbuf s like(Qsn_Cmd_Buf_T) d inpbuf s like(Qsn_Inp_Buf_T) d prompt s 70A varying d skipthis s n d len s 10I 0 d x s 10I 0 d Row s 3U 0 d y s 10I 0 d yx s 10I 0 * D DS D SFldss 12 DIM(1000) D SOcurs 10I 0 OVERLAY(SFldss:9) d RowCol ds d sfld 1 12 d srow 1 4 d scol 5 8 d socur 9 12 d srowb 1 4B 0 d scolb 5 8B 0 d socurb 9 12B 0 /free // ---------------------------------------------- // Create Input/Output buffers and clear them // ---------------------------------------------- cmdbuf = QsnCrtCmdBuf(100: 50: 0: *OMIT: *OMIT); inpbuf = QsnCrtInpBuf(200: 50: 0: *OMIT: *OMIT); QsnClrBuf( cmdbuf : *omit ); QsnClrBuf( inpbuf : *omit ); if add = '0'; // ---------------------------------------------- // Add the "Clear Screen" command to the output // so that the terminal starts with an empty // screen. // ---------------------------------------------- QsnClrScr( *omit : cmdbuf : *omit : *omit ); endif; exsr ShowFile; if Readscr = '0'; // ---------------------------------------------- // send the output buffer to the terminal, // ---------------------------------------------- QsnPutBuf( cmdbuf: *omit: *omit); else; // ---------------------------------------------- // put the "unlock keyboard" command into the // output buffer // ---------------------------------------------- QsnReadInp( QSN_CC1_MDTALL_CLRALL : QSN_CC2_UNLOCKBD : *omit : *omit : cmdbuf : *omit : *omit ); // ---------------------------------------------- // send the output buffer to the terminal, and // wait for input from the user // ---------------------------------------------- QsnPutGetBuf( cmdbuf: inpbuf: *omit: *omit); // ---------------------------------------------- // Get a pointer to the input data, and the // length of the input data. // ---------------------------------------------- p_InputData = QsnRtvDta( inpbuf: *omit: *omit ); Len = QsnRtvDtaLen(inpbuf: *omit: *omit) - %size(InputData.ROW) - %size(InputData.COL) - %size(InputData.AID); endif; QsnDltBuf(cmdbuf: *omit); QsnDltBuf(inpbuf: *omit); return ; begsr ShowFile; // For the record sort the occurances into row col sequence // then process the occurs in the sorted sequence. clear SFldss; yx = 0; for y = 1 to #Gotflds; %occur(FlddtaDS) = y; If #FmtNam = record; srowb = #FldRow; scolb = #FldCol; socurb = y; yx += 1; Sfldss(yx) = sfld; Endif; endfor; sorta Sfldss; for y = 1 to 1000; if SFldss(y) = *blank; iter; endif; %occur(FlddtaDS) = SOcurs(y); // ---------------------------------------------- // Put a field in the output buffer // ---------------------------------------------- // data = 'Select File to download and process.'; // Construct the fields to paint the screen // //*Field attribute. //*X'01' indicates Constant (see structure QDFFFCON, //*X'02' indicates Output (O), //*X'03' indicates Message (M), h (B), //*X'04' indicates Input (I), (P) //*X'05' indicates Both (B), //*X'06' indicates Hidden (H), and //*X'07' indicates Program to System (P) If #FmtNam = record; select; when #FldIO = x'01'; Select; when #FldDTUS = 'D'; #Fldlen = 8; #FldCom = 'dd/mm/yy'; when #FldDTUS = 'Y'; #Fldlen = 8; #FldCom = 'dd/mm/yy'; when #FldDTUS = 'T'; #Fldlen = 8; #FldCom = 'hh:mm:ss'; when #FldDTUS = 'U'; #Fldlen = 10; #FldCom = 'User_Name'; when #FldDTUS = 'S'; #Fldlen = 10; #FldCom = 'Sys_Name'; endsl; QsnWrtDta( %trim(#FldCom) : #FldLen : *omit : #FldRow : #FldCol +1 : QSN_SA_HI : QSN_SA_HI : QSN_SA_WHT : QSN_SA_WHT : cmdbuf : *omit : *omit ); when #FldIO = x'02' or #FldIO = x'04' or #FldIO = x'05' ; //* Keyboard shift and data type. //* X'00' indicates Alpha shift/character (A), //* X'01' indicates Alpha only (X), //* X'02' indicates Numeric shift (N), //* X'03' indicates Numeric only (Y), //* X'04' indicates Katakana (K), //* X'05' indicates Digits only (D), //* X'06' indicates Inhibit keyboard (I), //* X'07' indicates Signed numeric/zoned (S), //* X'08' indicates Binary (B), //* X'09' indicates Packed (P), //* X'0A' indicates Floating (F), //* X'0B' indicates DBCS (J), //* X'0C' indicates Open (O), X'0D' indicates Either (E), //* X'0E' indicates Numeric-only character (M), //* X'0F' indicates Graphic (G), //* X'10' indicates Date (L), //* X'11' indicates Time (T), and //* X'12' indicates Timestamp (Z) select; when #FLDIO = x'02'; #FFW = QSN_NO_FFW; when #Fldatr = x'00'; #FFW = QSN_FFW_ALPHA_SHIFT; when #Fldatr = x'01'; #FFW = QSN_FFW_ALPHA_ONLY; when #Fldatr = x'02'; #FFW = QSN_FFW_NUM_SHIFT; when #Fldatr = x'03'; #FFW = QSN_FFW_NUM_ONLY; when #Fldatr = x'04'; #FFW = QSN_FFW_KATA; when #Fldatr = x'05'; #FFW = QSN_FFW_DIGIT_ONLY; when #Fldatr = x'06'; #FFW = QSN_FFW_IO; when #Fldatr = x'07'; #FFW = QSN_FFW_SIGNED_NUMERIC; endsl; select; when #FldLen <> 0 ; #FLen = #FldLen; when #FldPLen <> 0 ; #FLen = #FldPLen; endsl; QsnSetFld( *omit : #FLen : #FldRow : #FldCol + 1 : #FFW : *omit : 0 : QSN_SA_UL : QSN_SA_GRN_UL : cmdbuf : *omit : *omit ); endsl; endif; endfor; endsr; /end-free P E