• Cobol (was: Re: Fun trick)

    From =?UTF-8?Q?Arne_Vajh=C3=B8j?=@21:1/5 to All on Sun Feb 2 21:55:52 2025
    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?

    Arne

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From =?UTF-8?Q?Arne_Vajh=C3=B8j?=@21:1/5 to All on Tue Feb 4 21:03:10 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

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)