Sorry, Victor's was so short and sweet I used it and assumed it was the same as 
yours.  I'll look more carefully at yours later.
Thanks!
Frank



----- Original Message -----
> From: Steve Comstock <[email protected]>
> To: [email protected]
> Cc: 
> Sent: Wednesday, April 11, 2012 12:09 PM
> Subject: Re: PL/I with variable PLISTs
> 
> On 4/11/2012 11:38 AM, Frank Swarbrick wrote:
>>  Hmmm....  Have you (or anyone) actually verified that this works?  I just 
> wrote the following programs:
>> 
>>    identification division.
>>    program-id.  callopt.
>>    data division.
>>    working-storage section.
>>    77  one                         pic x(4) value z'one'.
>>        call 'callee' using one
>>        goback.
>>    end program callopt.
>> 
>>    id division.
>>    program-id. 'callee'.
>>    data division.
>>    local-storage section.
>>    77  addr                        pointer.
>>    77  addr-val redefines addr     pic s9(9) comp-5.
>> 
>>    linkage section.
>>    01  string-1                    pic x(101).
>>    01  string-2                    pic x(101).
>> 
>>    01  result                      pic s9(8) comp-5.
>> 
>> 
>>    procedure division using string-1 string-2
>>                             returning result.
>>         call 'print-string' using string-1
>>         set addr to address of string-1
>>         if  addr-val not less than zero
>>             call 'print-string' using string-2.
>>         move zero to result
>>         goback.
>> 
>>  When I run it, according to COBOL ADDR is set to x0F0960B8. I am guessing
>>  thatthe high-order bit is in fact set, but that COBOL does not reveal that
>>  implementation detail to the COBOL application.
>> 
>>  Either that or I am doing something wrong.
>> 
>>  Frank
> 
> I think Victor's example is wrong. You should follow the
> instructions I gave you. OK, here's a short example of a
> subroutine being passed a variable number of parameters:
> 
>        process test(sym,none) numproc(pfd) offset opt
>        process flag(w,w) map xref(short)
>        Identification division.
>        program-id.  cobsUB3.
>       *  Copyright (C) 1999 by Steven H. Comstock
> 
>        environment division.
>        data division.
>        working-storage section.
> 
>        01  text-1.
>            05                      pic s9(4) binary value 07.
>            05                      pic x(07)
>                  value ' SUBCOB'.
> 
>        01  text-2.
>            05                      pic s9(4) binary value 09.
>            05                      pic x(09)
>                  value ' Parm1   '.
>        01  dest  pic s9(9)   binary  value 2.
>        01  fc    pic x(12)   value low-values.
> 
>        linkage section.
>        01  parm-1-chk           pic s9(9) binary.
>        01  parm-2-ptr       pointer.
>        01  parm-2-chk       redefines parm-2-ptr.
>            02 parm-2-val        pic s9(9) binary.
>        01  parm-3-ptr       pointer.
>        01  parm-3-chk       redefines parm-3-ptr.
>            02 parm-3-val        pic s9(9) binary.
>        01  parm-4-ptr       pointer.
>        01  parm-4-chk       redefines parm-4-ptr.
>            02 parm-4-val        pic s9(9) binary.
>        01  parm-1-value     pic s9(9)   binary.
>        01  parm-2-value     pic s9(9)   binary.
>        01  parm-3-value     pic s9(9)   binary.
>        01  parm-4-value     pic s9(9)   binary.
>       /
>        procedure division using by value
>                                 parm-1-chk,
>                                 parm-2-ptr,
>                                 parm-3-ptr,
>                                 parm-4-ptr.
>        thecode.
>            display '..In COBSUB3'
>            display '..parm-1-chk = ' parm-1-chk
> 
>            set address of parm-2-value to parm-2-ptr
>            display '..parm-2-value = ' parm-2-value
>            if parm-2-val < 0
>               display 'End of list'
>               go to end-of-list
>            else
>               display 'Not end of list'
>            end-if
> 
>            set address of parm-3-value to parm-3-ptr
>            display '..parm-3-value = ' parm-3-value
>            if parm-3-val < 0
>               display 'End of list'
>               go to end-of-list
>            else
>               display 'Not end of list'
>            end-if
> 
>            set address of parm-4-value to parm-4-ptr
>            display '..parm-4-value = ' parm-4-value
>            if parm-4-val < 0
>               display 'End of list'
>               go to end-of-list
>            else
>               display 'Not end of list'
>            end-if.
> 
>        end-of-list.
>            display '..Leaving COBSUB3'
>            goback.
> 
> 
> 
> Play around with it.
> 
> 
> 
>> 
>> 
>> 
>>  ----- Original Message -----
>>>  From: Victor Gil<[email protected]>
>>>  To: [email protected]
>>>  Cc:
>>>  Sent: Wednesday, April 11, 2012 9:36 AM
>>>  Subject: Re: PL/I with variable PLISTs (was: LE C calling HLASM)
>>> 
>>>  LINKAGE SECTION.
>>> 
>>>  01 A-POINTER USAGE POINTER.
>>>  01 BIN-WORD REDEFINES A-POINTER COMP S9(8).
>>> 
>>>  ...
>>>  CALL 'THEFUNCTION' USING MAGIC, INPUT-BUFFER, INPUT-LENGTH, 
> OMITTED,
>>>  OMITTED RETURNING RC.
>>> 
>>>  SET A-POINTER TO ADDRESS OF INPUT-LENGTH
>>>  IF BIN-WORD<  0 THEN<the high-bit is ON>
>>> 
>>> 
> ================================================================================================
>>>  Funny thing with Enterprise COBOL...  It "properly" sets the
>>>  high-order bit on the last parm, but supplies no way to interrogate 
> it!  So if
>>>  "THEFUNCTION" was written in COBOL then you have to invoke it 
> thusly:
>>> 
>>>  CALL 'THEFUNCTION' USING MAGIC, INPUT-BUFFER, INPUT-LENGTH, 
> OMITTED,
>>>  OMITTED
>>>  RETURNING RC.
>>> 
>>>  (The OMITTED keyword simply passes an address of NULL.)
>>> 
>>>  Oy!
>>> 
>>>  Frank
>>> 
>>>  ----------------------------------------------------------------------
>>>  For IBM-MAIN subscribe / signoff / archive access instructions,
>>>  send email to [email protected] with the message: INFO IBM-MAIN
>>> 
>> 
>>  ----------------------------------------------------------------------
>>  For IBM-MAIN subscribe / signoff / archive access instructions,
>>  send email to [email protected] with the message: INFO IBM-MAIN
> 
> 
> -- 
> Kind regards,
> 
> -Steve Comstock
> The Trainer's Friend, Inc.
> 
> 303-355-2752
> http://www.trainersfriend.com
> 
> * To get a good Return on your Investment, first make an investment!
>   + Training your people is an excellent investment
> 
> * Try our tool for calculating your Return On Investment
>     for training dollars at
>   http://www.trainersfriend.com/ROI/roi.html
> 
> ----------------------------------------------------------------------
> For IBM-MAIN subscribe / signoff / archive access instructions,
> send email to [email protected] with the message: INFO IBM-MAIN
> 

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to