I recall doing something like this about 30 years ago which I know would break 
one day.  I wanted to process VB ISAM but that wasn’t supported so I figured 
out a way to search backwards from WS with negative indexes until I found the 
DCB for the file and “moved a byte” with the right bit on for V.

I would expect your hack to work for many years, although, the next guy to try 
and maintain the code might not understand it.  I’d make it callable module.  I 
mean, who doesn’t need a good STCK once in a while?

Nice.

Matt Hogstrom
[email protected]
PGP Key: 0x90ECB270

> On Mar 17, 2021, at 11:50 AM, Farley, Peter x23353 
> <[email protected]> wrote:
> 
> I discovered that one can code and call extremely simple assembler code from 
> completely within a COBOL source program, but it is a two-step process which 
> I will describe below.
> 
> My question is whether using a technique like this is "risky" in the sense 
> that it may someday, under a future incarnation of the compiler, stop working?
> 
> The technique:
> 
> Code a simple assembler program like the following and browse the resulting 
> listing that shows the generated object code:
> 
> COBSTCKE CSECT ,
>         L     15,0(,1)  GET ARGUMENT ADDRESS
>         STCKE 0(15)     STCKE INTO ARGUMENT AREA
>         XR    15,15     SET RETURN CODE = 0
>         BR    14        RETURN TO CALLER
> 
> Then copy the generated object code into a COBOL source program as follows:
> 
>       ID DIVISION.
>       PROGRAM-ID. COBSTCKE.
>       ENVIRONMENT DIVISION.
>       DATA DIVISION.
>       WORKING-STORAGE SECTION.
>       01  WS-TOD-VALUE              PIC  X(16).
> 
>       01  WS-GETTOD-PROGRAM.
>      *                 GET ARGUMENT ADDRESS         L  15,0(,1)
>           05  FILLER       PIC  X(04) VALUE X'58F01000'.
>      *                 STCKE INTO ARGUMENT AREA     STCKE 0(15)
>           05  FILLER       PIC  X(04) VALUE X'B278F000'.
>      *                 SET RETURN-CODE = 0          XR 15,15
>           05  FILLER       PIC  X(02) VALUE X'17FF'.
>      *                 RETURN TO CALLER             BR 14
>           05  FILLER       PIC  X(02) VALUE X'07FE'.
> 
>       01  WS-GETTOD-PTR.
>           05  GETTOD-ADDR            PROCEDURE-POINTER VALUE NULL.
>           05  FILLER                 REDEFINES GETTOD-ADDR.
>               10  GETTOD-ADDR1       POINTER.
>               10  GETTOD-ADDR2       POINTER.
> 
>       PROCEDURE DIVISION.
> 
>           SET GETTOD-ADDR1 TO ADDRESS OF WS-GETTOD-PROGRAM.
>           CALL GETTOD-ADDR USING WS-TOD-VALUE.
>           DISPLAY FUNCTION HEX-OF (WS-TOD-VALUE).
>           GOBACK.
> 
> Peter
> 
> This message and any attachments are intended only for the use of the 
> addressee and may contain information that is privileged and confidential. If 
> the reader of the message is not the intended recipient or an authorized 
> representative of the intended recipient, you are hereby notified that any 
> dissemination of this communication is strictly prohibited. If you have 
> received this communication in error, please notify us immediately by e-mail 
> and delete the message and any attachments from your system.
> 
> ----------------------------------------------------------------------
> 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