跌打滚爬中的小菜鸟...
分类: 其他UNIX
2015-12-04 15:30:19
大前提:要看DSPF在定义时有没有声明INDARA.
声明INDARA表示该DSPF的指示器会存放在separate indicator area.
不声明则表示该DSPF的指示器会被存放在 the record area中。
COBOL编译器编译会将其变异为一个变量字段;并且对于DSPF来说,它的指示器还是有两类不同用途的,从而造成一部分指示器是INPUT的,另外一部分是OUTPUT的!!
---------------------------------------------------------------------
对于INDARA来讲,COBOL中需要如下声明指示器和使用指示器
FMT CB ......-A+++B++++++++++++++++++++++++++++++++++
0020.00 01 INDIC-AREA.
0021.00 05 FUNC51 INDICATOR 51 PIC 1.
0023.00 05 FUNC03 INDICATOR 03 PIC 1.
0025.00 05 FUNC05 INDICATOR 05 PIC 1.
0027.00 05 FUNC09 INDICATOR 09 PIC 1.
说明如下:
1)必须使用INDICATOR(S)关键字,后面必须使用数字1。这样是定义BOOL类型。
2)指示器名字必须根DDS中使用指示器名字一致;可以乱序!!(本质是COBOL在运行时会按实际的指示器名称来mapping)
READ DSPF-FILE
FORMAT IS "FORMAT1"
INDICATORS ARE INDIC-AREA
END-READ.
--
WRITE DSPF-REC
FORMAT IS "FORMAT1"
INDICATORS ARE INDIC-AREA
END-WRITE.
对于非INDARA来讲,COBOL的编译后结果为,
001300 FILE SECTION. 15/09/26
001400 FD DSPF-FILE LABEL RECORDS ARE OMITTED 15/09/26
001500 DATA RECORD IS DSPF-REC. 15/09/26
001600 01 DSPF-REC. 15/09/26
001700 COPY DDS-ALL-FORMATS OF A90D. 15/09/26
+000001 05 A90D-RECORD PIC X(51). <-ALL-FMTS
+000002* INPUT FORMAT:FORMAT1 FROM FILE A90D OF LIBRARY HLMPGRJZO <-ALL-FMTS
+000003* <-ALL-FMTS
+000004 05 FORMAT1-I REDEFINES A90D-RECORD. <-ALL-FMTS
+000005 06 FORMAT1-I-INDIC. <-ALL-FMTS //用户按键是input
+000006 07 IN03 PIC 1 INDIC 03. <-ALL-FMTS
+000007* END OF PGROGRAM <-ALL-FMTS
+000008 07 IN05 PIC 1 INDIC 05. <-ALL-FMTS
+000009* SHOW F5 <-ALL-FMTS
+000010 07 IN09 PIC 1 INDIC 09. <-ALL-FMTS
+000011* SHOW F9 <-ALL-FMTS
+000012 06 ITEMNUM PIC X(10). <-ALL-FMTS
+000013* OUTPUT FORMAT:FORMAT1 FROM FILE A90D OF LIBRARY HLMPGRJZO <-ALL-FMTS
+000014* <-ALL-FMTS
+000015 05 FORMAT1-O REDEFINES A90D-RECORD. <-ALL-FMTS
+000016 06 FORMAT1-O-INDIC. <-ALL-FMTS
+000017 07 IN51 PIC 1 INDIC 51. <-ALL-FMTS//程序控制用的,算是output
+000018 06 USRNAME PIC X(10). <-ALL-FMTS
+000019 06 JOBNAME PIC X(10). <-ALL-FMTS
+000020 06 HIDETXT PIC X(30). <-ALL-FMTS
001800 WORKING-STORAGE SECTION. 15/09/26