COBOL Linkage Section

来源:互联网 发布:阿里云ddos防护 编辑:程序博客网 时间:2024/06/05 02:51


Brief introduction of variables defined in Linkage Section

Linkage Section Variable Limitations

  • Only 01 and 77 level variable is defined in Linkage-Section.
  • All 01 and 77 level variable are allocated a pointer size space.
    • Only 01 and 77 level variables are allocated
  • Linkage Section variable must be initialize through:
    • caller
    • SET ADDRESS OF LS-VARIABLE TO somewhere
  • Uninitialized Linkage Section variable is null value.


Although Linkage Section variable's definition is something like a pointer, but its usage is not that, for exampe:

To set a pointer variable:

SET POINTER-VAR TO ANOTHER-POINTER-VARIABLESET POINTER-VAR TO ADDRESS OF NONPOINTER-VARIABLE


To set a Linkage Section variable:

SET ADDRESS OF LINKAGE-SECTION-VAR TO ANOTHER-POINTER-VARIABLESET ADDRESS OF LINKAGE-SECTION-VAR TO ADDRESS OF NONPOINTER-VARIABLE


After Linkage Section variable is set, it then work like a Working-Storage Section variable.


Code Sample

      $set sourceformat(free)       IDENTIFICATION DIVISION.       PROGRAM-ID.     SUBPROG.              ENVIRONMENT DIVISION.       CONFIGURATION SECTION.       SOURCE-COMPUTER. RM-COBOL.       OBJECT-COMPUTER. RM-COBOL.              DATA DIVISION.       FILE SECTION.       WORKING-STORAGE SECTION.       01  POINTERS-AND-OTHER-STUFF.            05  SILLY-POINTER            USAGE IS POINTER.            05  SILLY-VALUE              REDEFINES                SILLY-POINTER            PIC S9(8) COMP.        01  POINTERS-AND-OTHER-STUFF2    PIC S9(8) COMP.        LINKAGE SECTION.       01  RECORD-1.            05  FIELD-1       PIC X(10).            05  FIELD-2       PIC X(10).        01  RECORD-2.            05  FIELD-3       PIC X(05).        PROCEDURE DIVISION USING RECORD-1.              MAIN-LOGIC SECTION.       BEGIN.                      SET SILLY-POINTER TO ADDRESS OF RECORD-1.           DISPLAY "SUB:  RECORD-1=                [S:" RECORD-1 "]".           DISPLAY "SUB:  ADDRESS OF RECORD-1=     [" ADDRESS OF RECORD-1 "]".           DISPLAY "SUB:  SILLY-POINTER=           [" SILLY-POINTER "]".           DISPLAY "SUB:  ADDRESS OF SILLY-POINTER=[" ADDRESS OF SILLY-POINTER "]".            SET ADDRESS OF RECORD-2 TO ADDRESS OF RECORD-1.           DISPLAY "SUB:  ADDRESS OF RECORD-2=     [" ADDRESS OF RECORD-2 "]".           SET ADDRESS OF RECORD-2 TO SILLY-POINTER.           DISPLAY "SUB:  ADDRESS OF RECORD-2=     [" ADDRESS OF RECORD-2 "]".       MAIN-LOGIC-EXIT.           EXIT.


Execute Result

SUB:  RECORD-1=                [S:12345678ABCDEFGH]SUB:  ADDRESS OF RECORD-1=     [0x00000000018AF8E0]SUB:  SILLY-POINTER=           [0x00000000018AF8E0]SUB:  ADDRESS OF SILLY-POINTER=[0x00000000018B06E0]SUB:  ADDRESS OF RECORD-2=     [0x00000000018AF8E0]SUB:  ADDRESS OF RECORD-2=     [0x00000000018AF8E0]


ANY LENGTH variable in Linkage Section

The ANY LENGTH clause must be specified only in an elementary level 01 entry in the Linkage Section to specifies that the length of an item may vary at runtime and is determined by the length of the argument.


      $set sourceformat(free)       IDENTIFICATION DIVISION.       PROGRAM-ID.    SHENHUI.              ENVIRONMENT DIVISION.       CONFIGURATION SECTION.       SOURCE-COMPUTER. RM-COBOL.       OBJECT-COMPUTER. RM-COBOL.              DATA DIVISION.       FILE SECTION.       WORKING-STORAGE SECTION.       01 STRING-VARIABLE.          03 STRING-VARIABLE-FLD1 PIC X(4).          03 STRING-VARIABLE-FLD2 PIC X(4).       01 STRING-LENGTH  PIC 9(4) COMP.       LINKAGE SECTION.       01  ANY-STRING-VAR                PIC X ANY LENGTH.       PROCEDURE DIVISION.              MAIN-LOGIC SECTION.       BEGIN.           MOVE "ABCD" TO STRING-VARIABLE-FLD1.            MOVE "1234" TO STRING-VARIABLE-FLD2.            SET ADDRESS OF ANY-STRING-VAR TO ADDRESS OF STRING-VARIABLE.           MOVE 8 TO STRING-LENGTH.           DISPLAY "ANY-STRING-VAR=[" ANY-STRING-VAR(1:STRING-LENGTH) "]".           STOP RUN.       MAIN-LOGIC-EXIT.           EXIT.


Execution Result

ANY-STRING-VAR=[ABCD1234]




0 0
原创粉丝点击