UNLOAD CSECT 00010000 PRINT NOGEN OR PRINT GEN 00020000 *************************************************** * PLOG UNLOADS FOR IDS-MIS * THESE VALUES FOLLOW THIS COMMENT BLOCK AND INITIZATION CODE: * LEN0 = LENGTH REC BEFORE PE (+10) * LEN1 = LENGTH OF 1ST PE * LEN2 = LENGTH OF 2ND PE * LEN3 = LENGTH OF TAIL OF RECORD * LOOPMAX = COUNT FOR UNPACKING (PE + PAD FACTOR) * * LOCATE MODE MUST BE USED IN THIS PROGRAM DUE TO RECORD SIZES USED. * R4 = LENGTH VALUE R5 = DATA LOOP CTR * R6 = PAD LOOP CTR R8 = INPUT BUFFER * R9 = OUTPUT BUFFER R10 = REC CTR * R12 = BASE * *************************************************** STM R14,R12,12(R13) SAVE ALL CALLER REGS IN CALLER AREA 00022000 LR R12,R15 GET ENTRY ADDRESS TO MY PROG 00023000 USING UNLOAD,R12 SET BASE R12 00024000 LA R8,SAVEAREA GET SAVE AREA ADDRESS 00025000 ST R13,4(R8) SAVE CALLER SAVE AREA ADDRESS 00026000 ST R8,8(R13) SAVE MINE TOO 00027000 LR R13,R8 NOW LET R13 POINT TO MINE 00028000 B START DC CL30' BOB BARNES ' DC CL30' GSI 6/3/93 VER V1.0 ' LEN0 DS F'63' LEN1 DS F'51' LEN2 DS F'161' LEN3 DS F'8' LOOPMAX DC F'50' * *********************************************************************** 00028100 START WTO '-START UP-------------------------------',ROUTCDE=11 SR R10,R10 MVI BLANKS,C' ' MVC BLANKS+1(199),BLANKS SET BLANK BUFFER OPEN (PFILE,INPUT) 00000025 OPEN (FFILE,OUTPUT) * WTO '-FILES OPEN-----------------------------',ROUTCDE=11 GET PFILE SET UP ADDR TO INPUT LR R8,R1 R8 IS INPUT USING RECIN,R8 * WTO '-GOT RECORD-----------------------------',ROUTCDE=11 LOOP PUT FFILE SET UP ADDR TO OUTPUT LR R9,R1 R9 IS OUTPUT USING RECOUT,R9 A R10,=F'1' R10 IS REC COUNTER LA R8,4(R8) SKIP OVER VRH L R4,LEN0 R4 = LENGTH OF PE MVC 0(R4,R9),0(R8) MOVE BEGINNING OF REC LA R8,R4(R8) SYNC ADDRESSES LA R9,R4(R9) ******* 1 PE ******************************* LA R5,INDEX GET READY FOR 1 BYTE MOVE MVC 3(1,R5),0(R8) GET P.E. COUNTER LA R8,1(R8) MOVE IN POINTER SR R5,R5 R5 IS NUM OF P.E.S L R5,INDEX L R6,LOOPMAX <<<<<<< R6 WILL BE NUM OF PADS SR R6,R5 L R4,LEN1 <<<<<<< LENGTH OF P.E. NEXT MVC 0(R4,R9),0(R8) MOVE P.E.S TO OUT LA R8,R4(R8) SYNC POINTERS LA R9,R4(R9) BCT R5,NEXT PAD MVC 0(R4,R9),BLANKS MOVE PAD TO OUT LA R9,R4(R9) BCT R6,PAD ******* 2 ND PE *************** LA R5,INDEX MVC 3(1,R5),0(R8) LA R8,1(R8) SR R5,R5 L R5,INDEX L R6,LOOPMAX SR R6,R5 L R4,LEN2 NEXT2 MVC 0(R4,R9),0(R8) LA R8,R4(R8) LA R9,R4(R9) BCT R5,NEXT2 PAD2 MVC 0(R4,R9),BLANKS LA R9,R4(R9) BCT R6,PAD2 *** GET TAIL OF REC AFTER PE'S L R4,LEN3 MVC 0(R4,R9),0(R8) *** GET NEXT REC *************** GET PFILE LR R8,R1 B LOOP EOF EQU * 00000036 CVD R10,RESULT UNPK OUT(15),RESULT(8) OI OUT+14,X'F0' MVC *+20(15),OUT WTO '-------------------------------DONE------',ROUTCDE=11 CLOSE (PFILE,,FFILE) 00000036 *********************************************************************** 00037103 BYE L R13,4(R13) LOAD CALLER SAVE AREA BACK TO REG13 00038000 LM R14,R12,12(R13) RESTORE ALL CALLER REGS 00038100 SR R15,R15 ZEROS R15 - RETURN CODE 00038200 BR R14 00038300 LTORG 00000052 R0 EQU 0 00038500 R1 EQU 1 00038600 R2 EQU 2 00038700 R3 EQU 3 00038800 R4 EQU 4 00038900 R5 EQU 5 00039000 R6 EQU 6 00039100 R7 EQU 7 00039200 R8 EQU 8 00039300 R9 EQU 9 00039400 R10 EQU 10 00039500 R11 EQU 11 00039600 R12 EQU 12 00039700 R13 EQU 13 00039800 R14 EQU 14 00039900 R15 EQU 15 00040000 DS 0F INSURE DOUBLEWORD BOUNDARIES 00040100 SAVEAREA DS 18F REGISTER SAVE AREA 00040200 INDEX DS F BLANKS DS CL200 00000054 FULL DS F OUT DS CL15 RESULT DS D LTORG 00000062 PFILE DCB DSORG=PS,DDNAME=PDATA,EODAD=EOF,MACRF=GL, * RECFM=VB,LRECL=9996,BLKSIZE=10000 FFILE DCB DSORG=PS,DDNAME=FDATA,EODAD=EOF,MACRF=PL, * RECFM=FB,LRECL=25000,BLKSIZE=25000 DATA1 DSECT RECIN DS CL9996 DATA2 DSECT RECOUT DS CL25000 END UNLOAD 01120000