[Info-vax] Cobol

Arne Vajhøj arne at vajhoej.dk
Tue Feb 4 21:03:10 EST 2025


On 2/2/2025 9:55 PM, Arne Vajhøj wrote:
> On 2/2/2025 8:37 PM, Arne Vajhøj wrote:
>> On 2/2/2025 8:30 PM, Arne Vajhøj wrote:
>>  > On 1/14/2025 11:06 AM, Arne Vajhøj wrote:
>>  >> On 1/13/2025 9:11 PM, John Reagan wrote:
>>  >>> COBOL paragraphs behave like C.  First routine/PARAGRAPH gets a WEAK
>>  >>> transfer address.  Linker finds the first one.
>>  >>
>>  >> I have many prejudices about COBOL developers.
>>  >>
>>  >> One of them is that they don't create shareable images.
>>  >>
>>  >> :-)
>>  >
>>  > But let us say that someone wanted to create a shareable
>>  > image in Cobol.
>>  >
>>  > A typical Cobol program just have all the paragraphs that
>>  > get performed and they share state. Simple.
>>  >
>>  > To make them entry points with arguments in a shareable image,
>>  > then I assume one need to make them programs with linkage section
>>  > and procedure division using.
>>  >
>>  > Normal variables are just passed as arguments. Seems entirely
>>  > unproblematic to me.
>>  >
>>  > But how does one share open files between modules?
>>  >
>>  > Fortran and Basic numeric identifiers work across modules.
>>  > Pascal can share via inherit. C can use global variables
>>  > or just pass as argument.
>>  >
>>  > But how does one do that in Cobol?
>>  >
>>  > Can one mark an fd as global or can one pass a fd as argument?
>>
>> Did some reading.
>>
>> IS GLOBAL in one module and IS EXTERNAL in the other modules?
> 
> And what to put in SELECT if FD is EXTERNAL?

Just EXTERNAL everywhere and no GLOBAL and nothing on SELECT
seems to do the trick.

identification division.
program-id.m2.
*
environment division.
input-output section.
file-control.
     select in-file assign to "a.dat" organization is sequential.
     select out-file assign to "c.dat" organization is sequential.
*
data division.
file section.
fd in-file external record is varying in size depending on line-len.
01 in-record.
     03 in-line pic x(100).
fd out-file external record is varying in size from 0 to 100 depending 
on line-len.
01 out-record.
     03 out-line pic x(100).
working-storage section.
01 line-len pic 9(8) comp external.
*
procedure division.
main-paragraph.
     open input in-file
     open output out-file
     call "docopy" end-call
     close in-file
     close out-file
     stop run.
end program m2.
*
identification division.
program-id. docopy.
*
environment division.
input-output section.
file-control.
     select in-file assign to "a.dat" organization is sequential.
     select out-file assign to "c.dat" organization is sequential.
*
data division.
file section.
fd in-file external record is varying in size depending on line-len.
01 in-record.
     03 in-line pic x(100).
fd out-file external record is varying in size from 0 to 100 depending 
on line-len.
01 out-record.
     03 out-line pic x(100).
working-storage section.
01 line-len pic 9(8) comp external.
01 eof-flag pic x.
*
procedure division.
main-paragraph.
     move "N" to eof-flag
     perform until eof-flag = "Y"
         read in-file
             at end
                 move "Y" to eof-flag
             not at end
                 move in-line(1:line-len) to out-line
                 write out-record
         end-read
     end-perform.
end program docopy.

Arne



More information about the Info-vax mailing list