FWIW, Google AI sez

In IBM VSE, trying to read a sequential file (like a card reader input stream) 
past the end-of-file (EOF) marker will result in an error or an exception. You 
cannot "read past EOF" in the conventional sense of retrieving more data, 
because no more data exists. The standard approach is to detect the EOF 
condition and stop reading.

I recall doing something like this but it was literally 50 years ago.

The problem is complicated because there is no real card reader (I assume :-/). 
When I did it there was a real 2540, but the program was actually reading from 
POWER, not from the card reader. That ship had already sailed.

I have no experience with VSE in the post-card-reader era. How do you submit 
the job? From CMS via a virtual card reader under VM?

Does DTFCP still exist? It was a badly-kept IBM secret that gave you DTF 
device-independence, and more flexibility than any of the supported DTFxx 
macros.

Charles

-----Original Message-----
From: IBM Mainframe Assembler List <[email protected]> On Behalf 
Of David Clark
Sent: Friday, December 12, 2025 1:52 PM
To: [email protected]
Subject: Re: Reading Past /* on SYSRDR/SYSIPT

 Sorry, hit send too soon.  Anyway...  I coded it as follows--removing 
full-line comments, etc.  Still looking for hints.  Thanks.

CARDASM  HEADER VERSION='1.0',AUTHOR='DLC',DATE='(C)DEC25',            X
               BASE=10,SVAREA=SAVEAREA
         OPEN  CARDIN,LINEOUT      OPEN SEQUENTIAL DTFS
GETCARD  DS    0H
         GET   CARDIN              GET A CARD
         IF    =C'/&&',(EQ,CLC),CARD_IA,BC,ENDIN  IF END OF JOB
         ENDIF                                     JUST IN CASE...
         IF    =C'/+',(EQ,CLC),CARD_IA,BC,ENDIN  CUSTOM END-OF-DATA
         ENDIF
DATAIN   DS    0H                  PROCESS INPUT CARDS
         MVC   LINEDATA,CARD_IA    SEND INPUT CARD
         PUT   LINEOUT               TO OUTPUT DEVICE
         J     GETCARD             GO GET ANOTHER CARD
DATAERR  DS    0H                  PROCESS ERROR CARDS
         MVC   CARD_IA,0(R1)       GET ERROR CARD
         J     DATAIN              GO PROCESS IT
ENDIN    DS    0H
         CLOSE CARDIN,LINEOUT      CLOSE SEQUENTIAL DTFS
         XR    R15,R15             ZERO RETURN CODE
EXIT     DS    0H                  PROGRAM EXIT
         TRAILER RETCODE=R15,SVAREA=SAVEAREA
*
STORAGE  DS    0D
SAVEAREA DS    9D
CARD_IA  DS    CL128
LINE_OA  DS    CL121
LINE_CC  DC    C' '
LINEDATA DC    CL120' '
         LTORG
CARDIN   DTFCD DEVADDR=SYSRDR,DEVICE=3505,IOAREA1=CARD_IA,BLKSIZE=128, X
               ERROPT=IGNORE,EOFADDR=DATAERR LINEOUT  DTFDI 
DEVADDR=SYSLST,IOAREA1=LINE_OA,RECSIZE=121

Sincerely,

Dave Clark
--
int.ext: 91078
direct: (937) 531-6378
home: (937) 751-3300

Winsupply Group Services
3110 Kettering Boulevard
Dayton, Ohio  45439  USA
(937) 294-5331


On Fri, Dec 12, 2025 at 4:12 PM David Clark <[email protected]> wrote:

> OK, I made an attempt, but got the following.  I coded it so I didn't 
> have to test for EOF--meaning, I used a separate piece of code to 
> handle the normal EOF but attempted to process the error card as 
> usual.  (At this point, I'm just trying to print out every card and 
> error card that I read
> in.)  I still need some hints/tips about trying to read past the /* card.
> Thanks.
>
> BG 0000 // JOB    CARDASM   TEST OF READING PAST /* EOD-OF-DATA CARD
> 16:07:39
>         DATE 12/12/2025, CLOCK 16/07/39
>  16:07:39
> BG 0001 1R30I  INVALID CCW - CCB ADDR=X'5002B8' XXCRDIN 44953, X'FEE'
> RC=0002,
>          PARTITION BG
>  16:07:39
> BG 0001 1R30I  CCB=00002005 00200003 00501090 00000000, ADDR=005002B8, 
> BG
>
> BG 0001 1R30I  CCW=00500161 20000078, ADDR=00501090, BG
>  16:07:39
> BG 0000 0P73I I/O ERROR
>  16:07:39
> BG 0000 0S00I JOB CARDASM  CANCELED
>  16:07:39
> BG 0000 0S07I PROBLEM PROGRAM  PSW = 071D1000 00117BDA
> 16:07:39
> BG 0000 0S29I DUMP STARTED
> 16:07:39
> BG 0000 0S30I DUMP STARTED. MEMBER=DBG00772.DUMP IN 
> SUBLIB=SYSDUMP.SUBLIB
>
> BG 0000 1I51I DUMP COMPLETE
>  16:07:39
> BG 0000 1S78I  JOB TERMINATED DUE TO  PROGRAM ABEND
>  16:07:39
> BG 0000 EOJ CARDASM   MAX.RETURN CODE=0016
> 16:07:39
>         DATE 12/12/2025, CLOCK 16/07/39, DURATION   00/00/00
> 16:07:39
>
> Sincerely,
>
> Dave Clark
> --
> int.ext: 91078
> direct: (937) 531-6378
> home: (937) 751-3300
>
> Winsupply Group Services
> 3110 Kettering Boulevard
> Dayton, Ohio  45439  USA
> (937) 294-5331
>
>
> On Fri, Dec 12, 2025 at 3:41 PM David Clark <[email protected]> wrote:
>
>> I'm creating a VSE/Assembler program that will need to read past any 
>> /* statements encountered; because, this program will be reading in 
>> REXX procedure source code--which uses /* to begin comment lines and 
>> may start in column 1.  I have never done anything like this before.
>>
>> What tips/tricks can any of you offer for purposefully coding an 
>> assembler program to ignore /* and look for /+ as the end-of-data 
>> terminator (which is what the IBM VSE Librarian [LIBR] utility does 
>> when CATALOGing a REXX procedure)?
>>
>> My research so far...  I would like to handle my own EOF detection, 
>> but it seems the DTFCD macro requires the EOFADDR parameter--though I 
>> did code ERROPT=IGNORE.  I can point EOFADDR into the middle of my 
>> read/write code but I need to know how to test the DTF for EOF--since 
>> the error record appears to only be an address in reg 1 and not written to 
>> the IO area.
>> Have I got that correct?  The manual also states that an error 
>> indicator is available in the CCB for output files--but not for input 
>> files.  Thus, I need to know how to test the DTF for EOF so that I 
>> can handle the associated error.
>>
>> Sincerely,
>>
>> Dave Clark
>> --
>> int.ext: 91078
>> direct: (937) 531-6378
>> home: (937) 751-3300
>>
>> Winsupply Group Services
>> 3110 Kettering Boulevard
>> Dayton, Ohio  45439  USA
>> (937) 294-5331
>>
>

Reply via email to