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<victor....@broadridge.com>
To: IBM-MAIN@bama.ua.edu
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 lists...@bama.ua.edu with the message: INFO IBM-MAIN


----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@bama.ua.edu 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 lists...@bama.ua.edu with the message: INFO IBM-MAIN

Reply via email to