CICS的基本结构和命令

1. 映射表(Map/Mapset)的属性(Attribute)字节

1. 第一列总不会被实质内容占据;最多是属性字节。所以实质内容总最多从第二列开始。

2. 每个映射域均要以一个属性字节起始。

3. 输入域(UNPROT)还要以一个属性字节结束,而这个属性字节应当为ASKIP。

属性字节排布:

比特位置 功能 比特设置
0-1 根据2~7比特  
2-3 保护性和转移

00 = UNPROT ALPHANUM (左对齐)
01 = UNPROT NUM (NUM开,右对齐)
10 = PROT
11 = SKIP

4-5 亮度

00 = 普通
01 = 普通
10 = 高亮
11 = 黑(无显示)

6   必须为0
7 MDT 1表示更改过

另有扩展属性,用于如颜色,高亮,输入预审等

一个MAP中的域(例如名叫USERNME)对应COBOL(Symbolic Map符号映射)的变量包括

USERNMEI   PIC ...      // 输入
USERNMEO   PIC ...      // 输出,其实是和输入重叠的
USERNMEL   PIC S9(4) COMP.  // 长度; -1可以设光标
USERNMEF   PIC X.       // 0x80如果用户修改了输入域但没有录入数据;否则一般为Low-value
FILLER REDEFINES USERNMEF.
   USERNMEA   PIC X.   // 可见属性字节A和标记字节F是重叠的,它是用来设置并送出MAP的
USERNMEC   PIC X.      // 色彩扩展属性,只有DSATTS=COLOR开启时才有
USEENMEH   PIC X.      // 高亮扩展属性,只有DSATTS=HILIGHT开启才有

关于程序发送MAP的一些模式,详见附加的CICS命令和编程方法

2. 典型的MAPSET实例

         PRINT NOGEN                                // 表示开始,告诉汇编器不要打印展开后语句
GLMS6H1  DFHMSD TYPE=&SYSPARM,                                         X // 整个MAPSET
               LANG=COBOL,                                             X // 用COBOL语言
               MODE=INOUT,                                             X
               TERM=3270-2,                                            X
               CTRL=FREEKB,                                            X
               STORAGE=AUTO,                                           X
// 这两行开启扩展属性使得能够用颜色等特性               
               DSATTS=(COLOR,HILIGHT),                                 X   
               MAPATTS=(COLOR,HILIGHT),                                X   
               TIOAPFX=YES
***********************************************************************
GLMS6H1  DFHMDI SIZE=(24,80),                                          X // 覆盖整个界面
               LINE=1,                                                 X
               COLUMN=1
***********************************************************************
         DFHMDF POS=(1,1),                                             X // 第2列开始
               LENGTH=7,                                               X // 长度7
               ATTRB=(NORM,PROT),                                      X // 只读;常规亮度
               COLOR=BLUE,                                             X // 内容
               INITIAL='GLMS6H1'
         DFHMDF POS=(1,20),                                            X
               LENGTH=20,                                              X
               ATTRB=(NORM,PROT),                                      X
               COLOR=GREEN,                                            X
               INITIAL='Customer Maintenance'
TRANID1  DFHMDF POS=(1,76),                                            X
               LENGTH=4,                                               X
               ATTRB=(NORM,PROT),                                      X
               COLOR=BLUE,                                             X
               INITIAL='GL6H'
***********************************************************************
INSTR1   DFHMDF POS=(3,1),                                             X
               LENGTH=64,                                              X
               ATTRB=(NORM,PROT),                                      X
               COLOR=GREEN,                                            X
               INITIAL='Type a customer number.  Then select an action X
               and press Enter.'
***********************************************************************
         DFHMDF POS=(5,1),                                             X
               LENGTH=24,                                              X
               ATTRB=(NORM,PROT),                                      X
               COLOR=GREEN,                                            X
               INITIAL='Customer number. . . . .'
CUSTNO1  DFHMDF POS=(5,26),                                            X
               LENGTH=7,                                               X
// UNPROT表示输入域,FSET表示MDT总开启于是数据总送回程序

               ATTRB=(NORM,UNPROT,FSET,IC),                            X 
               COLOR=TURQUOISE,                                        X
               HILIGHT=UNDERLINE                                         // 使用实际底线
               DFHMDF POS=(5,34),                                      X // 输入域结尾
               LENGTH=1,                                               X // 长度总为1
               ATTRB=ASKIP                                               // 总是跳转记号
***********************************************************************
         DFHMDF POS=(7,1),                                             X
               LENGTH=24,                                              X
               ATTRB=(NORM,PROT),                                      X
               COLOR=NEUTRAL,                                          X
               INITIAL='Action . . . . . . . . .'
ACTION   DFHMDF POS=(7,26),                                            X
               LENGTH=1,                                               X
               ATTRB=(NORM,UNPROT,FSET),                               X
               COLOR=TURQUOISE,                                        X
               HILIGHT=UNDERLINE
         DFHMDF POS=(7,28),                                            X
               LENGTH=21,                                              X
               ATTRB=(NORM,PROT),                                      X
               COLOR=NEUTRAL,                                          X
               INITIAL='1. Add a new customer'
***********************************************************************
         DFHMDF POS=(8,28),                                            X
               LENGTH=30,                                              X
               ATTRB=(NORM,PROT),                                      X
               COLOR=NEUTRAL,                                          X
               INITIAL='2. Change an existing customer'
***********************************************************************
         DFHMDF POS=(9,28),                                            X
               LENGTH=30,                                              X
               ATTRB=(NORM,PROT),                                      X
               COLOR=NEUTRAL,                                          X
               INITIAL='3. Delete an existing customer'
***********************************************************************
MSG1     DFHMDF POS=(23,1),                                            X
               LENGTH=79,                                              X
               COLOR=YELLOW,                                           X
               ATTRB=(BRT,PROT)                                          // BRT表示高亮
         DFHMDF POS=(24,1),                                            X
               LENGTH=20,                                              X
               ATTRB=(NORM,PROT),                                      X
               COLOR=BLUE,                                             X
               INITIAL='F3=Exit F12=Cancel'
DUMMY    DFHMDF POS=(24,79),                                           X
               LENGTH=1,                                               X
               ATTRB=(DRK,PROT,FSET),                                  X
               INITIAL=' '
***********************************************************************
         DFHMSD TYPE=FINAL                                              // MAPSET结束
               END                                                      // 汇编终止

3. 映射表交换

EXEC CICS
    RECEIVE MAP('INQMAP1')     // 映射名称
            MAPSET('INQSET1')  // 映射集名称
            INTO(INQMAP1I)     // 屏幕数据对应的域
END-EXEC.

映射表发送可见附加的CICS命令和编程方法

4. VSAM文件读取

EXEC CICS
    READ  FILE(filename)         // VSAM文件名,在CICS中定义
          INTO(data-name)        // 将读得的记录放入变量
          RIDFLD(data-name)      // 含有记录ID的变量
          [UPDATE]               // 该记录用于更新(后接REWRITE/DELETE,就对这个记录操作)
          [RESP(response-code)]  // 返回响应值
END-EXEC

常见返回值条件测试

IF RESPONSE-CODE = DFHRESP(NORMAL)
IF RESPONSE-CODE = DFHRESP(NOTFND)

5. VSAM文件写入

添加记录

WRITE FILE(DATASET-NAME)
      FROM(RECORD-NAME)
      RIDFLD(ID)
      RESP(RESPONSE-CODE)

覆盖到UPDATE模式READ的记录上

REWRITE FILE(DATASET-NAME)
        FROM(RECORD)
        RESP(RESPONSE-CODE)

常见返回条件:

IF RESONSE-CODE = DFHRESP(DUPREC)

6. VSAM文件记录删除
DELETE FILE(DATASET-NAME) RESP(RESPONSE-CODE)

7. 返回

EXEC CICS
    RETURN TRANSID(INQ1)
           COMMAREA(COMMUNICATION-AREA) // 将WORKING-STORAGE中的本次操作的数据再放回到跨执行区
END-EXEC.


8. 平行转移

EXEC CICS
    XCTL PROGRAM('INVMENU')  // 程序名,定义在COBOL的PROGRAM-ID,并在CICS同名注册
END-EXEC.


9. 进一级调用

EXEC CICS
    LINK  PROGRAM(program-name)              // 程序名,定义在COBOL的PROGRAM-ID,并在CICS中同名注册
          [COMMAREA(data-name)]              // 同转移跨执行数据
          [DATALENGTH(data-name | literal)]  // 指定跨执行数据长度
END-EXEC


要不是看在CICS/COBOL有一把年纪了,否则这样的语言叫人见了就想抽它两耳刮子

你可能感兴趣的:(大型主机,Mainframe)