I stumbled on some mainframe code that is using COPY statements on the same line as the 01 level tag.
I have found four different ways this code does this, but only one works on GnuCOBOL.
In the code below, only the 4th one will compile on GnuCOBOL.
I don't have access to a IBM mainframe to tell me how this would react on the MF.
How is this working on the mainframe? Assuming it is.
address@hidden copy1]$ cat *cbl
IDENTIFICATION DIVISION.
PROGRAM-ID. foo.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER.
pi3 WiTH DEBUGGING MODE .
DATA DIVISION.
WORKING-STORAGE SECTION.
01 ws-vars1 COPY bar1.
01 ws-vars2. COPY bar2.
01 ws-vars3 COPY bar3
REPLACING ==01 cp-vars3.== BY ====.
01 ws-vars4. COPY bar4
REPLACING ==01 cp-vars4.== BY ====.
PROCEDURE DIVISION.
DISPLAY "ws-vars1 LENGTH = " LENGTH OF ws-vars1.
DISPLAY "ws-vars2 LENGTH = " LENGTH OF ws-vars2.
DISPLAY "cp-vars1 LENGTH = " LENGTH OF cp-vars1.
DISPLAY "cp-vars2 LENGTH = " LENGTH OF cp-vars2.
DISPLAY "ws-vars3 LENGTH = " LENGTH OF ws-vars3.
DISPLAY "ws-vars4 LENGTH = " LENGTH OF ws-vars4.
GOBACK.
END PROGRAM foo.
* --------------------------------------------------------------
address@hidden copy1]$ cat foo.cbl
IDENTIFICATION DIVISION.
PROGRAM-ID. foo.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER.
pi3 WiTH DEBUGGING MODE .
DATA DIVISION.
WORKING-STORAGE SECTION.
01 ws-vars1 COPY bar1.
01 ws-vars2. COPY bar2.
01 ws-vars3 COPY bar3
REPLACING ==01 cp-vars3.== BY ====.
01 ws-vars4. COPY bar4
REPLACING ==01 cp-vars4.== BY ====.
PROCEDURE DIVISION.
DISPLAY "ws-vars1 LENGTH = " LENGTH OF ws-vars1.
DISPLAY "ws-vars2 LENGTH = " LENGTH OF ws-vars2.
DISPLAY "cp-vars1 LENGTH = " LENGTH OF cp-vars1.
DISPLAY "cp-vars2 LENGTH = " LENGTH OF cp-vars2.
DISPLAY "ws-vars3 LENGTH = " LENGTH OF ws-vars3.
DISPLAY "ws-vars4 LENGTH = " LENGTH OF ws-vars4.
GOBACK.
END PROGRAM foo.
* --------------------------------------------------------------
address@hidden copy1]$ cat *.cpy
01 cp-vars1.
05 cp-var1 PIC X(16).
01 cp-vars2.
05 cp-var2 PIC X(16).
01 cp-vars3.
05 cp-var3 PIC X(16).
01 cp-vars4.
05 cp-var4 PIC X(16).
address@hidden copy1]$ cat *.bash
cobc foo.cbl
cobcrun foo