This sample was Assembled and tested during April 2002 on an OS/390 V2.R9 system.
PRINT NOGEN
TITLE 'EX2 - SEQUENTIAL I/O AND SIMPLE ARRAY SAMPLE'
EX2 CSECT
USING *,R15 INITIAL BASE REGISTER
BEGIN B START
DC AL1(8)
DC CL8'EX2' PROGRAM NAME FOR DEBUGGING
SAVEAREA DS 0F MY SAVE AREA
DC AL4(*-*)
PRESAVE DC AL4(*-*) ADDR OF PREVIOUS SAVE AREA
NEXTSAVE DC AL4(*-*) ADDR OF NEXT SAVE AREA
SREG14 DC AL4(*-*) GENERAL
SREG15 DC AL4(*-*) - - - ->PURPOSE
SREG0 DC 13AL4(*-*) - - - - - - - ->REGISTER SAVE
SAVEEND DS 0H
START EQU *
DROP R15 DUMP INITIAL BASE REGISTER
STM R14,R12,12(R13) SAVE THE REGISTERS ON ENTRY.
LR R12,R15 SET UP MY
USING BEGIN,R12 - - - - >BASE REGISTER
ST R13,PRESAVE PERFORM SAVE
LA R15,SAVEAREA - - - ->AREA
ST R15,8(R13) - - - - - - - ->CHAINING
LR R13,R15 R13 = ADDR OF MY SAVE AREA.
OPEN (INDCB,INPUT,OUTDCB,OUTPUT)
EJECT
*
* PREPARE TO BUILD A LIST OF NAMES IN OUTAREA.
*
LA R4,OUTAREA+1 R4 = ADDR OF 1ST NAME SLOT.
READREC GET INDCB,INAREA READ A RECORD
*
* ADD THE RETRIEVED NAME TO THE LIST.
*
CLC =CL4'****',INAREA IS IT LAST INPUT RECORD?
BE READDONE YEP - STOP READING.
MVC 0(8,R4),INAREA NO - INSERT NAME IN PRINTLINE
LA R4,8(,R4) POINT TO NEXT NAME SLOT,
B READREC AND REPEAT TILL EXHAUSTED.
SPACE 3
READDONE PUT OUTDCB,OUTAREA WRITE LINE TO PRINTER, AND
EXIT CLOSE (INDCB,,OUTDCB) CLOSE THE INPUT FILE.
SR R15,R15 FORCE COND CODE ZERO
L R13,PRESAVE R13 = PREVIOUS SAVE AREA ADDR.
L R14,12(R13) RESTORE REGISTERS
LM R0,R12,20(R13) EXCEPT REGISTER 15
BR R14 RETURN TO CALLER (OS/390)
EJECT
LTORG
SPACE 1
INDCB DCB MACRF=GM,EODAD=READDONE,DDNAME=INDD,LRECL=80, *
DSORG=PS
INAREA DS CL80
SPACE 1
OUTDCB DCB MACRF=PM,RECFM=F,LRECL=133,DDNAME=OUTDD,DSORG=PS
OUTAREA DC CL133' '
SPACE 1
R0 EQU 0
R1 EQU 1
R2 EQU 2
R3 EQU 3
R4 EQU 4
R5 EQU 5
R6 EQU 6
R7 EQU 7
R8 EQU 8
R9 EQU 9
R10 EQU 10
R11 EQU 11
R12 EQU 12
R13 EQU 13
R14 EQU 14
R15 EQU 15
END
Copyright © KMS-IT Limited 2002