FOPA TITLE 'FOXX3D --VF3DPARM SEQUENTIAL WRITE, DIRECT READ AND WRI*00010000 C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** TE.' 00020000 *AINDMFOXX3D -- VF3DPARM BUILD SEQUENTIALLY, READ/WRITE DIRECT 00030000 *TITLE FOXX3D -- VF3DPARM OPERATIONS, SUMMARY 00040000 * AUTHOR RALPH E. MCMILLAN 00050000 * DESIGNER RALPH E. MCMILLAN 00060000 * LANGUAGE ASSEMBLER F 00070000 * SYSTEM IBM (SEE CRAY) 00080000 * WRITTEN 11-10-82 00090000 * REVISED COPIED FROM FOPARM. 00100000 * REVISED 07-11-83 PKC. TRANSFERRED CODE FROM FOSCDK TO HANDLE 00110000 * DIRECT USE OF MORE THAN 65536 BLOCKS. 00120000 * MARKED BY D68 AND D69 IN COLS. 69-71. 00130000 * REVISED 12-13-83 COPIED FROM FOGM3D. 00140000 * REVISED 08-09-85 RSK. CHANGED FOR POSSIBLE USE BY CALLER IN 00150000 * 31 BIT ADDRESSING MODE. CHANGES ARE MARKED 00160000 * BY 'EXT'. 00170000 * REVISED 05-30-89 ESN. CHANGED ERRRET TO CORRECTLY SET 00180003 * ADDRESSING MODE FOR RETURN TO CALLING 00190003 * PROGRAM. 00200003 * 00210000 * CALL FOXXOS (&STMT) 00220000 * &STMT= ERROR RETURN. 00230000 * OPEN BSAM DCB FOR SEQUENTIAL WRITE TO BUILD VF3DPARM FILE. 00240000 * 00250000 * CALL FOXXWS (DATA, &STMT) 00260000 * INPUT DATA = 104-WORD RECORD TO BE WRITTEN. ANY 00270000 * &STMT= ERROR RETURN. 00280000 * WRITE SEQUENTIALLY TO BUILD THE VF3DPARM FILE. 00290000 * 00300000 * CALL FOXXCS 00310000 * CLOSE THE BSAM DCB OF THE VF3DPARM FILE. 00320000 * 00330000 * CALL FOXXOD (&STMT) 00340000 * &STMT= ERROR RETURN. 00350000 * OPEN THE BDAM DCB FOR DIRECT READ AND WRITE, VF3DPARM FILE. 00360000 * 00370000 * CALL FOXXRD (DATA, DA, &STMT) 00380000 * OUTPUT DATA = 104-WORD AREA TO READ RECORD INTO. ANY 00390000 * INPUT DA = RELATIVE RECORD NUMBER. I4 00400000 * &STMT= ERROR RETURN. 00410000 * READ INTO DATA THE RECORD WITH RELATIVE RECORD NUMBER DA ON 00420000 * THE VF3DPARM FILE. 00430000 * 00440000 * CALL FOXXWD (DATA, DA, &STMT) 00450000 * INPUT DATA = 104-WORD RECORD TO BE WRITTEN. ANY 00460000 * INPUT DA = RELATIVE RECORD NUMBER. I4 00470000 * &STMT= ERROR RETURN. 00480000 * WRITE DIRECT FROM DATA TO RELATIVE RECORD DA ON THE VF3DPARM 00490000 * FILE. 00500000 * 00510000 * CALL FOXXCD 00520000 * CLOSE THE BDAM DCB OF THE VF3DPARM FILE. 00530000 * 00540000 * ALL RECORDS MUST BE WRITTEN USING THE FOXXWS ENTRY BEFORE BEING 00550000 * READ WITH FOXXRD OR REWRITTEN WITH FOXXWD. THE BSAM DCB SHOULD 00560000 * NOT BE OPEN AT THE SAME TIME OR AFTER THE BDAM DCB IS OPENED. 00570000 * A DIRECT READ OR WRITE ON A RECORD WHICH WAS NOT WRITTEN 00580000 * SEQUENTIALLY WILL RESULT IN AN ABEND WITH A SYSTEM COMPLETION 00590000 * CODE OF 001. 00600000 * 00610000 * RECORDS ARE BLOCKED BY THIS PROGRAM AND ARE ADDRESSED BY A 00620000 * RELATIVE RECORD NUMBER WHICH IS CONVERTED INTO A BLOCK NUMBER 00630000 * (RELATIVE DISK ADDRESS) AND RECORD NUMBER WHEN READING OR 00640000 * WRITING. 00650000 * 00660000 * 00670000 * DD-CARD FOR PREPARATION STEP: 00680000 * 00690000 * //VF3DPARM DD DSN=&&VF3DPARM,UNIT=SYSDA,DCB=DSORG=DA, 00700000 * // SPACE=(TRK,(10),CONTIG),DISP=(NEW,PASS) 00710000 * 00720000 * DD-CARD FOR PROCESSING STEP: 00730000 * 00740000 * //VF3DPARM DD DSN=&&VF3DPARM,DISP=(MOD,DELETE) 00750000 * 00760000 * USER ABEND CODES: 335 - BDAM I/O ERROR. SYNADF MESSAGE. 00770000 * 00780000 * STATEMENTS BEGINNING WITH "**D" WERE USED FOR DEBUGGING. 00790000 * 00800000 * 00810000 * END 00820000 EJECT 00830000 *TITLE FOXXOS -- VF3DPARM OPEN FOR SEQ. WRITE TO BUILD FILE 00840000 *A AUTHOR RALPH E. MCMILLAN 00850000 *A DESIGNER RALPH E. MCMILLAN 00860000 *A LANGUAGE ASSEMBLER F 00870000 *A SYSTEM IBM (SEE CRAY) 00880000 *A WRITTEN 11-10-82 00890000 *A REVISED 11-29-82 REM. REPLACE ABEND WITH ERROR JUMP FOR 00900000 *A DD MISSING. 00910000 *A 00920000 *A 00930000 *A CALL FOXXOS (&STMT) 00940000 *A 00950000 *A IN/OUT ARGUMENT TYPE DESCRIPTION 00960000 *A 00970000 *A &STMT ERROR RETURN STATEMENT NUMBER. 00980000 *A 00990000 *A OPEN BSAM DCB FOR SEQUENTIAL WRITE TO BUILD VF3DPARM FILE. 01000000 *A 01010000 *A ALL RECORDS MUST BE WRITTEN USING THE FOXXWS ENTRY BEFORE BEING 01020000 *A READ WITH FOXXRD OR REWRITTEN WITH FOXXWD. THE BSAM DCB SHOULD 01030000 *A NOT BE OPEN AT THE SAME TIME OR AFTER THE BDAM DCB IS OPENED. 01040000 *A A DIRECT READ OR WRITE ON A RECORD WHICH WAS NOT WRITTEN 01050000 *A SEQUENTIALLY WILL RESULT IN AN ABEND WITH A SYSTEM COMPLETION 01060000 *A CODE OF 001. 01070000 *A 01080000 *A DD-CARD FOR PREPARATION STEP: 01090000 *A 01100000 *A //VF3DPARM DD DSN=&&VF3DPARM,UNIT=SYSDA,DCB=DSORG=DA, 01110000 *A // SPACE=(TRK,(10),CONTIG),DISP=(NEW,PASS) 01120000 *A 01130000 *A DD-CARD FOR PROCESSING STEP: 01140000 *A 01150000 *A //VF3DPARM DD DSN=&&VF3DPARM,DISP=(MOD,DELETE) 01160000 *A 01170000 *AEND 01180000 EJECT 01190000 *TITLE FOXXWS -- VF3DPARM WRITE SEQUENTIALLY TO BUILD FILE 01200000 *A AUTHOR RALPH E. MCMILLAN 01210000 *A DESIGNER RALPH E. MCMILLAN 01220000 *A LANGUAGE ASSEMBLER F 01230000 *A SYSTEM IBM (SEE CRAY) 01240000 *A WRITTEN 11-10-82 01250000 *A REVISED 11-29-82 SAS. REPLACED ABEND WITH ERROR JUMP FOR 01260000 *A DD MISSING. 01270000 *A 01280000 *A 01290000 *A CALL FOXXWS (DATA, &STMT) 01300000 *A 01310000 *A IN/OUT ARGUMENT TYPE DESCRIPTION 01320000 *A 01330000 *A OUT DATA 104-WORD RECORD TO BE WRITTEN. ANY 01340000 *A &STMT ERROR RETURN STATEMENT NUMBER. 01350000 *A TYPE 01360000 *A 01370000 *A WRITE SEQUENTIALLY TO BUILD THE VF3DPARM FILE. 01380000 *A 01390000 *A ALL RECORDS MUST BE WRITTEN USING THE FOXXWS ENTRY BEFORE BEING 01400000 *A READ WITH FOXXRD OR REWRITTEN WITH FOXXWD. THE BSAM DCB SHOULD 01410000 *A NOT BE OPEN AT THE SAME TIME OR AFTER THE BDAM DCB IS OPENED. 01420000 *A A DIRECT READ OR WRITE ON A RECORD WHICH WAS NOT WRITTEN 01430000 *A SEQUENTIALLY WILL RESULT IN AN ABEND WITH A SYSTEM COMPLETION 01440000 *A CODE OF 001. 01450000 *A 01460000 *A AN INTERNAL SEQUENTIAL COUNTER IS USED FOR SEQUENTIAL WRITES IN 01470000 *A ORDER TO DETERMINE BLOCK AND RECORD NUMBERS. 01480000 *A 01490000 *A DD-CARD FOR PREPARATION STEP: 01500000 *A 01510000 *A //VF3DPARM DD DSN=&&VF3DPARM,UNIT=SYSDA,DCB=DSORG=DA, 01520000 *A // SPACE=(TRK,(10),CONTIG),DISP=(NEW,PASS) 01530000 *A 01540000 *A DD-CARD FOR PROCESSING STEP: 01550000 *A 01560000 *A //VF3DPARM DD DSN=&&VF3DPARM,DISP=(MOD,DELETE) 01570000 *A 01580000 *A 01590000 *AEND 01600000 EJECT 01610000 *TITLE FOXXCS -- VF3DPARM CLOSE SEQUENTIAL 01620000 *A AUTHOR RALPH E. MCMILLAN 01630000 *A DESIGNER RALPH E. MCMILLAN 01640000 *A LANGUAGE ASSEMBLER F 01650000 *A SYSTEM IBM (SEE CRAY) 01660000 *A WRITTEN 11-10-82 01670000 *A 01680000 *A 01690000 *A CALL FOXXCS 01700000 *A 01710000 *A 01720000 *A WRITE THE CURRENT BUFFER IF NECESSARY AND CLOSE THE BSAM DCB OF 01730000 *A THE VF3DPARM FILE. 01740000 *AEND 01750000 EJECT 01760000 *TITLE FOXXOD -- VF3DPARM OPEN FOR DIRECT READ AND WRITE 01770000 *A AUTHOR RALPH E. MCMILLAN 01780000 *A DESIGNER RALPH E. MCMILLAN 01790000 *A LANGUAGE ASSEMBLER F 01800000 *A SYSTEM IBM (SEE CRAY) 01810000 *A WRITTEN 11-10-82 01820000 *A 01830000 *A 01840000 *A CALL FOXXOD (&STMT) 01850000 *A 01860000 *A IN/OUT ARGUMENT TYPE DESCRIPTION 01870000 *A 01880000 *A &STMT ERROR RETURN STATEMENT NUMBER. 01890000 *A 01900000 *A 01910000 *A 01920000 *A OPEN THE BDAM DCB FOR DIRECT READ AND WRITE, VF3DPARM FILE. 01930000 *A IF THIS IS THE PREPARATION STEP (MAXBLK NOT = 0), THEN STORE THE 01940000 *A MAXIMUM BLOCK AND RECORD NUMBERS IN THE FIRST RECORD ON THE FILE. 01950000 *A IF THIS IS THE PROCESS STEP (MAXBLK = 0), THEN RETRIEVE THE 01960000 *A MAXIMUM BLOCK AND RECORD NUMBERS FROM THE FIRST RECORD ON THE 01970000 *A FILE. 01980000 *A 01990000 *A ALL RECORDS MUST BE WRITTEN USING THE FOXXWS ENTRY BEFORE BEING 02000000 *A READ WITH FOXXRD OR REWRITTEN WITH FOXXWD. THE BSAM DCB SHOULD 02010000 *A NOT BE OPEN AT THE SAME TIME OR AFTER THE BDAM DCB IS OPENED. 02020000 *A A DIRECT READ OR WRITE ON A RECORD WHICH WAS NOT WRITTEN 02030000 *A SEQUENTIALLY WILL RESULT IN AN ABEND WITH A SYSTEM COMPLETION 02040000 *A CODE OF 001. 02050000 *A 02060000 *A DD-CARD FOR PREPARATION STEP: 02070000 *A 02080000 *A //VF3DPARM DD DSN=&&VF3DPARM,UNIT=SYSDA,DCB=DSORG=DA, 02090000 *A // SPACE=(TRK,(10),CONTIG),DISP=(NEW,PASS) 02100000 *A 02110000 *A DD-CARD FOR PROCESSING STEP: 02120000 *A 02130000 *A //VF3DPARM DD DSN=&&VF3DPARM,DISP=(MOD,DELETE) 02140000 *A 02150000 *A 02160000 *AEND 02170000 EJECT 02180000 *TITLE FOXXRD -- VF3DPARM READ TRACE HEADER DIRECT 02190000 *A AUTHOR RALPH E. MCMILLAN 02200000 *A DESIGNER RALPH E. MCMILLAN 02210000 *A LANGUAGE ASSEMBLER F 02220000 *A LANGUAGE IBM (SEE CRAY) 02230000 *A WRITTEN 11-10-82 02240000 *A 02250000 *A 02260000 *A CALL FOXXRD (DATA, DA, &STMT) 02270000 *A 02280000 *A IN/OUT ARGUMENT TYPE DESCRIPTION 02290000 *A 02300000 *A OUT DATA ANY 104-WORD AREA TO READ RECORD INTO. 02310000 *A IN/OUT DA I4 RELATIVE RECORD NUMBER. RETURNED AS 02320000 *A DA + 1. 02330000 *A &STMT ERROR RETURN STATEMENT NUMBER. 02340000 *A 02350000 *A 02360000 *A THE RELATIVE RECORD NUMBER IS CONVERTED TO A BLOCK AND RECORD 02370000 *A NUMBER. THE BLOCK IS READ INTO THE CURRENT BUFFER AND THE 02380000 *A APPROPRIATE RECORD IS RETURNED IN DATA. THE NEXT RELATIVE RECORD 02390000 *A NUMBER IS RETURNED IN DA. 02400000 *A 02410000 *A ALL RECORDS MUST BE WRITTEN USING THE FOXXWS ENTRY BEFORE BEING 02420000 *A READ WITH FOXXRD OR REWRITTEN WITH FOXXWD. THE BSAM DCB SHOULD 02430000 *A NOT BE OPEN AT THE SAME TIME OR AFTER THE BDAM DCB IS OPENED. 02440000 *A A DIRECT READ OR WRITE ON A RECORD WHICH WAS NOT WRITTEN 02450000 *A SEQUENTIALLY WILL RESULT IN AN ABEND WITH A SYSTEM COMPLETION 02460000 *A CODE OF 001. 02470000 *A 02480000 *A DD-CARD FOR PREPARATION STEP: 02490000 *A 02500000 *A //VF3DPARM DD DSN=&&VF3DPARM,UNIT=SYSDA,DCB=DSORG=DA, 02510000 *A // SPACE=(TRK,(10),CONTIG),DISP=(NEW,PASS) 02520000 *A 02530000 *A DD-CARD FOR PROCESSING STEP: 02540000 *A 02550000 *A //VF3DPARM DD DSN=&&VF3DPARM,DISP=(MOD,DELETE) 02560000 *A 02570000 *A 02580000 * USER ABEND CODES: 333 - BSAM DCB OPEN NOT COMPLETED. DD MISSING. 02590000 * 334 - BDAM DCB OPEN NOT COMPLETED. DD MISSING. 02600000 * 334 - BDAM DCB OPEN NOT COMPLETED. DD MISSING. 02610000 *AEND 02620000 EJECT 02630000 *TITLE FOXXWD -- VF3DPARM WRITE TRACE HEADER DIRECT 02640000 *A AUTHOR RALPH E. MCMILLAN 02650000 *A DESIGNER RALPH E. MCMILLAN 02660000 *A LANGUAGE ASSEMBLER F 02670000 *A LANGUAGE IBM (SEE CRAY) 02680000 *A WRITTEN 11-10-82 02690000 *A 02700000 *A 02710000 *A CALL FOXXWD (DATA, DA, &STMT) 02720000 *A 02730000 *A IN/OUT ARGUMENT TYPE DESCRIPTION 02740000 *A 02750000 *A OUT DATA ANY 104-WORD AREA TO BE WRITTEN. 02760000 *A IN/OUT DA I4 RELATIVE RECORD NUMBER. RETURNED AS 02770000 *A DA + 1. 02780000 *A &STMT ERROR RETURN STATEMENT NUMBER. 02790000 *A 02800000 *A 02810000 *A THE RELATIVE RECORD NUMBER IS CONVERTED TO A BLOCK AND RECORD 02820000 *A NUMBER. IF THE BLOCK NUMBER DOES NOT AGREE WITH THE CURRENT 02830000 *A BLOCK IN THE WRITE BUFFER, THE CORRECT BLOCK IS READ DIRECT 02840000 *A FROM THE DISK. THE RECORD IS THEN MOVED INTO ITS APPROPRIATE 02850000 *A PLACE. THE NEXT SEQUENTIAL RECORD NUMBER IS RETURNED IN DA. 02860000 *A 02870000 *A ALL RECORDS MUST BE WRITTEN USING THE FOXXWS ENTRY BEFORE BEING 02880000 *A READ WITH FOXXRD OR REWRITTEN WITH FOXXWD. THE BSAM DCB SHOULD 02890000 *A NOT BE OPEN AT THE SAME TIME OR AFTER THE BDAM DCB IS OPENED. 02900000 *A A DIRECT READ OR WRITE ON A RECORD WHICH WAS NOT WRITTEN 02910000 *A SEQUENTIALLY WILL RESULT IN AN ABEND WITH A SYSTEM COMPLETION 02920000 *A CODE OF 001. 02930000 *A 02940000 *A DD-CARD FOR PREPARATION STEP: 02950000 *A 02960000 *A //VF3DPARM DD DSN=&&VF3DPARM,UNIT=SYSDA,DCB=DSORG=DA, 02970000 *A // SPACE=(TRK,(10),CONTIG),DISP=(NEW,PASS) 02980000 *A 02990000 *A DD-CARD FOR PROCESSING STEP: 03000000 *A 03010000 *A //VF3DPARM DD DSN=&&VF3DPARM,DISP=(MOD,DELETE) 03020000 *A 03030000 *A 03040000 * USER ABEND CODES: 333 - BSAM DCB OPEN NOT COMPLETED. DD MISSING. 03050000 * 334 - BDAM DCB OPEN NOT COMPLETED. DD MISSING. 03060000 * 334 - BDAM DCB OPEN NOT COMPLETED. DD MISSING. 03070000 *AEND 03080000 EJECT 03090000 *TITLE FOXXCD -- VF3DPARM CLOSE DIRECT ACCESS 03100000 *A AUTHOR RALPH E. MCMILLAN 03110000 *A DESIGNER RALPH E. MCMILLAN 03120000 *A LANGUAGE ASSEMBLER F 03130000 *A LANGUAGE IBM (SEE CRAY) 03140000 *A WRITTEN 11-10-82 03150000 *A 03160000 *A 03170000 *A CALL FOXXCD 03180000 *A 03190000 *A 03200000 *A WRITE THE CURRENT BUFFER IF NECESSARY AND CLOSE THE BDAM DCB OF 03210000 *A THE VF3DPARM FILE. 03220000 *AEND 03230000 SPACE 3 03240000 PRINT GEN 03250000 FOXX3D MENTRYPT 2,(FOXXOS,FOXXWS,FOXXCS,FOXXOD,FOXXRD,FOXXWD, X03260000 FOXXCD) 03270000 EJECT 03280000 R0 EQU 0 03290000 R1 EQU 1 03300000 R2 EQU 2 ADDRESS OF DATA. 03310000 R3 EQU 3 03320000 R4 EQU 4 03330000 R5 EQU 5 03340000 R6 EQU 6 03350000 R7 EQU 7 03360000 R8 EQU 8 03370000 R9 EQU 9 03380000 R10 EQU 10 ADDRESS OF DATA CONTROL BLOCK. 03390000 R11 EQU 11 BAL TO INTERNAL SUB. BOR TO RETURN. 03400000 R12 EQU 12 BASE ADDRESS (SAVEAREA). 03410000 R13 EQU 13 03420000 R14 EQU 14 03430000 R15 EQU 15 03440000 SPACE 3 03450000 LR R12,R13 USE R12 AS BASE REGISTER 03460000 DROP R13 TO REDUCE COMPLICATIONS 03470000 USING SAVEAREA,R12 IN SYNAD EXIT. 03480000 USING IHADCB,R10 R10 = ADDRESS OF DATA CONTROL BLOCK. 03490000 **************** ADDRESSING MODE SWITCH ****************** EXT 03500000 FOXX3D AMODE ANY EXT 03510000 FOXX3D RMODE 24 EXT 03520000 LA R4,FONEXT EXT 03530000 LA R5,RETURNIT EXT 03540000 BSM R5,R4 EXT 03550000 RETADD DC F'0' EXT 03560000 FONEXT DS 0H EXT 03570000 ST R5,RETADD EXT 03580000 B *(R2) 03590000 B OPENSQ 03600000 B WRITESQ 03610000 B CLOSESQ 03620000 B OPENDR 03630000 B READDR 03640000 B WRITEDR 03650000 B CLOSEDR 03660000 EJECT 03670000 ***************************************************************** 03680000 * 03690000 * OPEN BSAM DCB 03700000 * 03710000 ***************************************************************** 03720000 OPENSQ LA R10,BSAMDCB 03730000 TM DCBOFLGS,X'10' 03740000 BO RETURN 03750000 * 03760000 **D 03770000 **D OPEN (PRTDCB,(OUTPUT)) 03780000 * 03790000 * 03800000 LA R11,RETURN 03810000 OPENBSAM OPEN (BSAMDCB,(OUTPUT)) 03820000 L R5,BLKSIZ CALCULATE NUMBER OF RECORDS/BLOCK 03830000 SR R4,R4 03840000 D R4,LRECL 03850000 ST R5,NREC 03860000 BCTR R5,0 03870000 ST R5,NRECM1 03880000 TM DCBOFLGS,X'10' 03890000 BOR R11 03900000 B ERRRET 03910000 EJECT 03920000 ***************************************************************** 03930000 * 03940000 * SEQUENTIAL WRITE - USING BSAM DCB 03950000 * 03960000 ***************************************************************** 03970000 WRITESQ LA R10,BSAMDCB 03980000 LR R9,R1 SAVE REGISTER 1 03990000 TM DCBOFLGS,X'10' 04000000 BO *+8 04010000 BAL R11,OPENBSAM 04020000 L R2,0(,R9) A(DATA) 04030000 L R5,SEQREC 04040000 LA R5,1(,R5) RELATIVE RECORD NUMBER 04050000 ST R5,SEQREC 04060000 ST R5,SYNDSKA SAVE REL RCD # FOR ERROR MSG 04070000 SR R4,R4 04080000 A R5,NRECM1 04090000 D R4,NREC R5=BLOCK # R4=RECORD NUMBER 04100000 C R5,CBLK 04110000 BE WBUFADD 04120000 TM FLAG,X'80' DOES CURRENT BLOCK NEED WRITTEN 04130000 BNO CHKBLK 04140000 WRITE BSMWDEC1,SF,BSAMDCB,BUFFER,'S' 04150000 CHECK BSMWDEC1 04160000 L R3,CBLK SAVE MAX BLOCK NUMBER 04170000 ST R3,MAXBLK 04180000 * 04190000 * 04200000 **D L R3,ABUFFER 04210000 **D MVC BUF+1(132),0(R3) 04220000 **D PUT PRTDCB,BUF 04230000 **D A R3,=F'9568' 04240000 **D MVC BUF+1(132),0(R3) 04250000 **D PUT PRTDCB,BUF 04260000 * 04270000 * 04280000 EJECT 04290000 NI FLAG,X'7F' TURN OFF WRITE FLAG 04300000 CHKBLK ST R5,CBLK 04310000 WBUFADD LR R5,R4 CALCULATE ADDRESS FOR NEW DATA 04320000 L R3,LRECL 04330000 MR R4,R3 04340000 A R5,ABUFFER 04350000 LR R4,R5 04360000 LR R5,R3 04370000 * 04380000 * 04390000 **D MVI BUF+1,C' ' 04400000 **D MVI BUF+2,C' ' 04410000 **D MVC BUF+3(130),0(R2) 04420000 **D PUT PRTDCB,BUF 04430000 * 04440000 * 04450000 SPACE 04460000 L R7,WRIT0X1 ADDRESS FOR MODE SWITCH EXT 04470000 BSM 0,R7 SWITCH EXT 04480000 DS 0F EXT 04490000 WRIT0X1 DC A(WRIT0X2+X'80000000') EXT 04500000 WRIT0X2 DS 0H EXT 04510000 MVCL R4,R2 MOVE RECORD INTO BLOCK 04520000 SPACE 04530000 LA R7,WRIT0X3 SWITCH OUT OF 31 BIT MODE EXT 04540000 BSM 0,R7 EXT 04550000 WRIT0X3 DS 0H EXT 04560000 OI FLAG,X'80' SET FLAG TO WRITE BLOCK 04570000 B RETURN 04580000 EJECT 04590000 ***************************************************************** 04600000 * 04610000 * CLOSE BSAM DCB 04620000 * 04630000 **************************************************************** 04640000 CLOSESQ LA R10,BSAMDCB 04650000 TM DCBOFLGS,X'10' 04660000 BZ RETURN 04670000 TM FLAG,X'80' DOES WRITE BUFFER NEED WRITTEN? 04680000 BNO CLOSESQ1 04690000 WRITE BSMWDEC2,SF,BSAMDCB,BUFFER,'S' 04700000 CHECK BSMWDEC2 04710000 L R3,CBLK SAVE MAX BLOCK NUMBER 04720000 ST R3,MAXBLK 04730000 NI FLAG,X'7F' TURN OFF WRITE FLAG 04740000 CLOSESQ1 CLOSE (BSAMDCB) 04750000 B RETURN 04760000 EJECT 04770000 ************************************************************** 04780000 * 04790000 * OPEN BDAM DCB 04800000 * 04810000 ************************************************************** 04820000 OPENDR LA R10,BDAMDCB 04830000 TM DCBOFLGS,X'10' 04840000 BO RETURN 04850000 LA R11,RETURN 04860000 **D 04870000 **D OPEN (PRTDCB,(OUTPUT)) 04880000 *D68 04890000 OPENBDAM TM DCBDSORG,DCBDSGDA D68 04900000 BZ OPENBDM1 NOT DSORG=DA D68 04910000 TM DCBOPTCD,DCBOPTRB D68 04920000 BZ OPENBDM1 REL BLK ADDR NOT SPEC D68 04930000 ** OPEN SHADOW ELEMENT FOR ABS ADDR TYPE BDAM. D69 04940000 OPEN (BDAMABS,(UPDAT)) OPEN ABSOLUTE DCB D69 04950000 *D68 04960000 OPENBDM1 OPEN (BDAMDCB,(UPDAT)) OPEN RELATIVE DCB 04970000 L R5,BLKSIZ COMPUTE NUMBER OF RECORDS/BLOCK 04980000 SR R4,R4 04990000 D R4,LRECL 05000000 ST R5,NREC 05010000 BCTR R5,0 05020000 ST R5,NRECM1 05030000 TM DCBOFLGS,X'10' 05040000 BNO ERRRET 05050000 LA R5,1 READ FIRST BLOCK FROM FILE 05060000 ST R5,CBLK 05070000 BCTR R5,0 05080000 ST R5,BLKREF 05090000 LA R5,BLKREF+1 05100000 READ BDMRDEC1,DI,(R10),BUFFER,'S',0,(R5) 05110000 *D68 05120000 ORG *-2 CANCEL BALR D68 05130000 LA R0,BLKREF2 LOC TO PUT MBBCCHHR D68 05140000 LR R5,R0 SAVE FOR LATER D68 05150000 L R15,=V(USRBCT) TRK O'FLOW CONVERT MODULE D68 05160000 TM DCBRECFM,DCBRECTO D68 05170000 BO READDIR1 IT IS TRACKS O'FLOW D68 05180000 L R15,=V(USRBCN) NON TRACK O'FLOW MODULE D68 05190000 READDIR1 BALR R14,R15 CALL CONVERT ROUTINE D68 05200000 * NOW DO THE REAL READ WITH MBBCCHHR TYPE CALL D69 05210000 READ BDMRDEC1,DI,BDAMABS,,,,(R5),MF=E D69 05220000 *D68 05230000 CHECK BDMRDEC1 05240000 L R4,MAXBLK CHECK FOR STORING OR RETRIEVING 05250000 LTR R4,R4 MAX RECORD AND BLOCK NUMBERS 05260000 BZ INIT MUST RETRIEVE NUMBERS 05270000 ST R4,BUFFER STORE NUMBERS IN RECORD AND WRITE 05280000 L R4,SEQREC IT BACK TO DISK 05290000 ST R4,BUFFER+4 05300000 L R5,CBLK 05310000 BCTR R5,0 SUBTRACT 1 FOR REAL BLOCK NUMBER 05320000 ST R5,BLKREF 05330000 LA R5,BLKREF+1 05340000 WRITE BDMWDEC1,DI,(R10),BUFFER,'S',0,(R5) 05350000 *D68 05360000 ORG *-2 CANCEL BALR D68 05370000 LA R0,BLKREF2 LOC TO PUT MBBCCHHR D68 05380000 LR R5,R0 SAVE FOR LATER D68 05390000 L R15,=V(USRBCT) TRK O'FLOW CONVERT MODULE D68 05400000 TM DCBRECFM,DCBRECTO D68 05410000 BO WRITDIR1 IT IS TRACKS O'FLOW D68 05420000 L R15,=V(USRBCN) NON TRACK O'FLOW MODULE D68 05430000 WRITDIR1 BALR R14,R15 CALL CONVERT ROUTINE D68 05440000 * NOW DO THE REAL WRITE WITH MBBCCHHR TYPE CALL D68 05450000 WRITE BDMWDEC1,DI,BDAMABS,,,,(R5),MF=E D69 05460000 *D68 05470000 CHECK BDMWDEC1 05480000 B WFLGOFF 05490000 INIT L R4,BUFFER RETRIEVE MAX RECORD AND BLOCK 05500000 ST R4,MAXBLK NUMBERS FROM FIRST RECORD 05510000 L R4,BUFFER+4 05520000 ST R4,SEQREC 05530000 WFLGOFF NI FLAG,X'7F' TURN OFF WRITE FLAG 05540000 BR R11 05550000 B ERRRET 05560000 EJECT 05570000 ************************************************************** 05580000 * 05590000 * RANDOM READ - USE BDAM DCB 05600000 * 05610000 ************************************************************** 05620000 READDR LA R10,BDAMDCB 05630000 LR R9,R1 SAVE REGISTER 1 05640000 TM DCBOFLGS,X'10' 05650000 BO *+8 05660000 BAL R11,OPENBDAM 05670000 L R2,0(,R9) A(BUFFER) 05680000 L R4,4(,R9) A(RECORD NUMBER) 05690000 L R5,0(,R4) RELATIVE RECORD NUMBER 05700000 ST R5,SYNDSKA SAVE IT FOR ERROR MSG 05710000 LA R5,1(,R5) ADD 1 TO GET REAL RECORD NUMBER 05720000 C R5,SEQREC IS IT IN RANGE 05730000 BH ERRRET NO 05740000 ST R5,0(,R4) RETURN IT AS NEXT SEQ NUMBER 05750000 SR R4,R4 05760000 A R5,NRECM1 05770000 D R4,NREC R5=BLOCK # R4=RECORD NUMBER 05780000 C R5,CBLK IS BLOCK IN CURRENT BUFFER? 05790000 BE RBUFMV YES 05800000 TM FLAG,X'80' BLOCK NEED WRITTEN BEFORE READ? 05810000 BNO READBDAM NO 05820000 L R3,CBLK YES - SO WRITE BLOCK FIRST 05830000 BCTR R3,0 05840000 ST R3,BLKREF 05850000 LA R3,BLKREF+1 05860000 WRITE BDMWDEC2,DI,(R10),BUFFER,'S',0,(R3) 05870000 *D68 05880000 ORG *-2 CANCEL BALR D68 05890000 LA R0,BLKREF2 LOC TO PUT MBBCCHHR D68 05900000 LR R3,R0 SAVE FOR LATER D68 05910000 L R15,=V(USRBCT) TRK O'FLOW CONVERT MODULE D68 05920000 TM DCBRECFM,DCBRECTO D68 05930000 BO WRITDIR2 IT IS TRACKS O'FLOW D68 05940000 L R15,=V(USRBCN) NON TRACK O'FLOW MODULE D68 05950000 WRITDIR2 BALR R14,R15 CALL CONVERT ROUTINE D68 05960000 * NOW DO THE REAL WRITE WITH MBBCCHHR TYPE CALL D68 05970000 WRITE BDMWDEC2,DI,BDAMABS,,,,(R3),MF=E D69 05980000 *D68 05990000 CHECK BDMWDEC2 06000000 NI FLAG,X'7F' TURN OFF WRITE FLAG 06010000 * 06020000 READBDAM ST R5,CBLK NOW - SAVE CURRENT BLOCK # AND 06030000 BCTR R5,0 READ THE BLOCK 06040000 ST R5,BLKREF 06050000 LA R5,BLKREF+1 06060000 READ BDMRDEC2,DI,(R10),BUFFER,'S',0,(R5) 06070000 *D68 06080000 ORG *-2 CANCEL BALR D68 06090000 LA R0,BLKREF2 LOC TO PUT MBBCCHHR D68 06100000 LR R5,R0 SAVE FOR LATER D68 06110000 L R15,=V(USRBCT) TRK O'FLOW CONVERT MODULE D68 06120000 TM DCBRECFM,DCBRECTO D68 06130000 BO READDIR2 IT IS TRACKS O'FLOW D68 06140000 L R15,=V(USRBCN) NON TRACK O'FLOW MODULE D68 06150000 READDIR2 BALR R14,R15 CALL CONVERT ROUTINE D68 06160000 * NOW DO THE REAL READ WITH MBBCCHHR TYPE CALL D68 06170000 READ BDMRDEC2,DI,BDAMABS,,,,(R5),MF=E D69 06180000 *D68 06190000 CHECK BDMRDEC2 06200000 * 06210000 RBUFMV LR R5,R4 RECORD NUMBER 06220000 L R3,LRECL 06230000 MR R4,R3 06240000 LA R4,BUFFER(R5) 06250000 LR R5,R3 06260000 * 06270000 **D 06280000 **D MVI BUF+1,C' ' 06290000 **D MVC BUF+2(131),0(R4) 06300000 **D PUT PRTDCB,BUF 06310000 * 06320000 * 06330000 L R7,READ0X1 ADDRESS FOR MODE SWITCH EXT 06340000 BSM 0,R7 SWITCH EXT 06350000 DS 0F EXT 06360000 READ0X1 DC A(READ0X2+X'80000000') EXT 06370000 READ0X2 DS 0H EXT 06380000 SPACE 06390000 MVCL R2,R4 MOVE RECORD TO RETURN AREA 06400000 LA R7,READ0X3 SWITCH OUT OF 31 BIT MODE EXT 06410000 BSM 0,R7 EXT 06420000 READ0X3 DS 0H EXT 06430000 B RETURN 06440000 EJECT 06450000 **************************************************************** 06460000 * 06470000 * RANDOM WRITE - USE BDAM DCB 06480000 * 06490000 **************************************************************** 06500000 WRITEDR LA R10,BDAMDCB 06510000 TM DCBOFLGS,X'10' 06520000 BO *+8 06530000 BAL R11,OPENBDAM 06540000 L R2,0(,R1) A(BUFFER) 06550000 L R4,4(,R1) A(RECORD NUMBER) 06560000 L R5,0(,R4) RELATIVE RECORD NUMBER 06570000 ST R5,SYNDSKA SAVE IT FOR ERROR MSG 06580000 LA R5,1(,R5) ADD 1 TO GET REAL RECORD NUMBER 06590000 C R5,SEQREC IS IT IN RANGE 06600000 BH ERRRET NO 06610000 ST R5,0(,R4) RETURN IT AS NEXT SEQ NUMBER 06620000 SR R4,R4 06630000 A R5,NRECM1 06640000 D R4,NREC R5=BLOCK # R4=RECORD # 06650000 C R5,CBLK DOES RECORD BELONG IN CURRENT BUFFER 06660000 BE RECMV YES 06670000 TM FLAG,X'80' BLOCK NEED WRITTEN? 06680000 BNO WRBDAM 06690000 L R3,CBLK 06700000 BCTR R3,0 06710000 ST R3,BLKREF 06720000 LA R3,BLKREF+1 06730000 WRITE BDMWDEC3,DI,(R10),BUFFER,'S',0,(R3) 06740000 *D68 06750000 ORG *-2 CANCEL BALR D68 06760000 LA R0,BLKREF2 LOC TO PUT MBBCCHHR D68 06770000 LR R3,R0 SAVE FOR LATER D68 06780000 L R15,=V(USRBCT) TRK O'FLOW CONVERT MODULE D68 06790000 TM DCBRECFM,DCBRECTO D68 06800000 BO WRITDIR3 IT IS TRACKS O'FLOW D68 06810000 L R15,=V(USRBCN) NON TRACK O'FLOW MODULE D68 06820000 WRITDIR3 BALR R14,R15 CALL CONVERT ROUTINE D68 06830000 * NOW DO THE REAL WRITE WITH MBBCCHHR TYPE CALL D68 06840000 WRITE BDMWDEC3,DI,BDAMABS,,,,(R3),MF=E D69 06850000 *D68 06860000 CHECK BDMWDEC3 06870000 SPACE 06880000 **D 06890000 **D L R3,ABUFFER 06900000 **D MVC BUF+1(4),=C'RWD ' 06910000 **D MVC BUF+5(128),0(R3) 06920000 **D PUT PRTDCB,BUF 06930000 **D A R3,=F'9568' 06940000 **D MVC BUF+5(128),0(R3) 06950000 **D PUT PRTDCB,BUF 06960000 **D 06970000 SPACE 2 06980000 WRBDAM ST R5,CBLK READ DIRECT FROM FILE 06990000 BCTR R5,0 07000000 ST R5,BLKREF 07010000 LA R5,BLKREF+1 07020000 READ BDMRDEC3,DI,(R10),BUFFER,'S',0,(R5) 07030000 *D68 07040000 ORG *-2 CANCEL BALR D68 07050000 LA R0,BLKREF2 LOC TO PUT MBBCCHHR D68 07060000 LR R5,R0 SAVE FOR LATER D68 07070000 L R15,=V(USRBCT) TRK O'FLOW CONVERT MODULE D68 07080000 TM DCBRECFM,DCBRECTO D68 07090000 BO READDIR3 IT IS TRACKS O'FLOW D68 07100000 L R15,=V(USRBCN) NON TRACK O'FLOW MODULE D68 07110000 READDIR3 BALR R14,R15 CALL CONVERT ROUTINE D68 07120000 * NOW DO THE REAL READ WITH MBBCCHHR TYPE CALL D68 07130000 READ BDMRDEC3,DI,BDAMABS,,,,(R5),MF=E D69 07140000 *D68 07150000 CHECK BDMRDEC3 07160000 **D 07170000 **D L R3,ABUFFER 07180000 **D MVC BUF+1(4),=C'RWR ' 07190000 **D MVC BUF+5(128),0(R3) 07200000 **D PUT PRTDCB,BUF 07210000 **D A R3,=F'9568' 07220000 **D MVC BUF+5(128),0(R3) 07230000 **D PUT PRTDCB,BUF 07240000 * 07250000 RECMV LR R5,R4 CALCULATE ADDRESS FOR RECORD 07260000 L R3,LRECL 07270000 MR R4,R3 07280000 LA R4,BUFFER(R5) 07290000 LR R5,R3 07300000 **D 07310000 **D MVC BUF+1(3),=C'RW ' 07320000 **D MVC BUF+4(129),0(R2) 07330000 **D PUT PRTDCB,BUF 07340000 * 07350000 L R7,WRBD0X1 ADDRESS FOR MODE SWITCH EXT 07360000 BSM 0,R7 SWITCH EXT 07370000 DS 0F EXT 07380000 WRBD0X1 DC A(WRBD0X2+X'80000000') EXT 07390000 WRBD0X2 DS 0H EXT 07400000 SPACE 07410000 MVCL R4,R2 MOVE RECORD INTO WRITE BUFFER 07420000 LA R7,WRBD0X3 SWITCH OUT OF 31 BIT MODE EXT 07430000 BSM 0,R7 EXT 07440000 WRBD0X3 DS 0H EXT 07450000 OI FLAG,X'80' SET WRITE FLAG 07460000 B RETURN 07470000 EJECT 07480000 **************************************************************** 07490000 * 07500000 * CLOSE BDAM DCB 07510000 * 07520000 **************************************************************** 07530000 CLOSEDR LA R10,BDAMDCB 07540000 TM DCBOFLGS,X'10' 07550000 BZ RETURN 07560000 TM FLAG,X'80' DOES CURRENT BUFFER NEED WRITTEN? 07570000 BNO CLOSEBD1 07580000 L R3,CBLK 07590000 BCTR R3,0 WRITE RECORD DIRECT 07600000 ST R3,BLKREF 07610000 LA R3,BLKREF+1 07620000 WRITE BDMWDEC4,DI,(R10),BUFFER,'S',0,(R3) 07630000 *D68 07640000 ORG *-2 CANCEL BALR D68 07650000 LA R0,BLKREF2 LOC TO PUT MBBCCHHR D68 07660000 LR R3,R0 SAVE FOR LATER D68 07670000 L R15,=V(USRBCT) TRK O'FLOW CONVERT MODULE D68 07680000 TM DCBRECFM,DCBRECTO D68 07690000 BO WRITDIR4 IT IS TRACKS O'FLOW D68 07700000 L R15,=V(USRBCN) NON TRACK O'FLOW MODULE D68 07710000 WRITDIR4 BALR R14,R15 CALL CONVERT ROUTINE D68 07720000 * NOW DO THE REAL WRITE WITH MBBCCHHR TYPE CALL D68 07730000 WRITE BDMWDEC4,DI,BDAMABS,,,,(R3),MF=E D69 07740000 *D68 07750000 CHECK BDMWDEC4 07760000 NI FLAG,X'7F' TURN OFF WRITE FLAG 07770000 CLOSEBD1 CLOSE (BDAMDCB) 07780000 CLOSE (BDAMABS) CLOSE SHADOW DCB. D69 07790000 RETURN DS 0H 07800000 BAL R9,GO24 07810001 STDRET 07820000 SPACE 07830004 ERRRET DS 0H 07840001 BAL R9,GO24 07850001 L R13,4(,R13) 07860000 LM R14,R12,12(R13) 07870000 LA R15,4 RETURN ERROR CODE 07880000 BR R14 07890000 GO24 DS 0H 07900001 **************** ADDRESSING RETURN ****************** EXT 07910000 L R5,RETADD EXT 07920000 BSM 0,R5 EXT 07930000 RETURNIT EQU * 07940000 N R9,=X'80FFFFFF' 07950002 BR R9 07960000 EJECT 07970000 *************************************************************** 07980000 * 07990000 * SYNAD EXIT FOR INPUT/OUTPUT ERRORS. 08000000 * 08010000 *************************************************************** 08020000 BSAMERR SYNADAF ACSMETH=BSAM 08030000 B BDAMERR1 08040000 BDAMERR SYNADAF ACSMETH=BDAM 08050000 BDAMERR1 ST R14,SYNADR14 SAVE R14 FOR RETURN. 08060000 LA R1,8(,R1) SKIP FIRST 8 BYTES OF SYNADAF MESSAGE. 08070000 ST R1,SYNADMSA ESTABLISH PARAMETER LIST FOR FOPERR. 08080000 LA R1,SYNADMSA 08090000 L R15,=V(FOPERR) CALL FOPERR TO PRINT SYNADAF MESSAGE. 08100000 BALR R14,R15 08110000 SYNADRLS RELEASE SYNAD SAVE AREA. 08120000 L R14,SYNADR14 RESTORE R14 TO LEAVE SYNAD EXIT. 08130000 AB335 ABEND 335 08140000 EJECT 08150000 BLKREF DS F 08160000 FLAG DC F'0' 08170000 LRECL DC F'416' LOGICAL RECORD LENGTH 08180000 BLKSIZ DC F'9984' BLOCK SIZE 08190000 NREC DS F NUMBER OF RECORDS/BLOCK (COMPUTED) 08200000 NRECM1 DS F NUMBER OF RECORDS/BLOCK-1 (COMPUTED) 08210000 SEQREC DC F'1' SEQUENCE NUMBER FOR SEQUENTIAL WRITE 08220000 CBLK DC F'0' CURRENT BLOCK NUMBER IN BUFFER 08230000 MAXBLK DC F'0' 08240000 ABUFFER DC A(BUFFER) 08250000 SYNADR14 DS F SAVE R14 FOR RETURN FROM SYNAD EXIT. 08260000 SYNADMSA DS F ADDRESS OF SYNADAF MESSAGE, PLUS 8. 08270000 SYNADRN DC A(SYNDSKA) ADDRESS OF RECORD # FOR ERROR MSG 08280000 SYNDSKA DC F'0' RCD # FOR FOPERR ERROR PRINT ROUTINE 08290000 SPACE 2 08300000 **D 08310000 **D BUF DC 133C' ' 08320000 **D PRTDCB DCB BLKSIZE=133,DDNAME=DEBUG,LRECL=133,MACRF=(PM), X 08330000 **D RECFM=FBA,DSORG=PS 08340000 * MAKE SURE X IS IN COLUMN 72 WHEN TAKING OUT "**D" 08350000 * 08360000 SPACE 2 08370000 *************************************************************** 08380000 * 08390000 * BSAM DATA CONTROL BLOCK 08400000 * 08410000 *************************************************************** 08420000 BSAMDCB DCB DSORG=PS,DDNAME=VF3DPARM,RECFM=F,LRECL=9984, X08430000 MACRF=(WL),DEVD=DA,BLKSIZE=9984,SYNAD=BSAMERR 08440000 SPACE 2 08450000 *************************************************************** 08460000 * 08470000 * BDAM DATA CONTROL BLOCK 08480000 * 08490000 *************************************************************** 08500000 BDAMDCB DCB DSORG=DA,DDNAME=VF3DPARM,RECFM=F,MACRF=(RIC,WIC), X08510000 OPTCD=RF,SYNAD=BDAMERR,BLKSIZE=9984 08520000 *************************************************************** 08530000 BDAMABS DCB DSORG=DA,DDNAME=VF3DPARM,RECFM=F,MACRF=(RIC,WIC), X08540000 OPTCD=AF,SYNAD=BDAMERR D69 08550000 *************************************************************** 08560000 *D68 08570000 BLKREF2 DC D'0' LOC TO PUT MBBCCHHR D68 08580000 LTORG , D68 08590000 PRINT NOGEN D69 08600000 DCBD DSORG=DA,DEVD=DA D69 08610000 PRINT GEN D69 08620000 *D68 08630000 *************************************************************** 08640000 *************************************************************** 08650000 FOXX3D CSECT D69 08660000 BUFFER DC 9984X'00' BUFFER TO HOLD BLOCK OF RECORDS 08670000 *************************************************************** 08680000 *************************************************************** 08690000 END 08700000