* /* START OF SPECIFICATIONS **** 00050002 *01* PROCESSOR = ASSEMXF-370R 00100002 **** END OF SPECIFICATIONS ***/ 00150002 TITLE 'IGG019VD - GET MOVE VARIABLE AND UNDEFINED RECORDS (OCR)' 00300019 IGG019VD CSECT 00600019 *********************************************************** @YM00638 00650002 *MODULE-NAME @YM00638 00700002 * IGG019VD @YM00638 00750002 * @YM00638 00800002 *DESCRIPTIVE-NAME @YM00638 00850002 * OCR GET, MOVE MODE, VARIABLE AND UNDEFINED RECORDS @YM00638 00860002 * @YM00638 00870002 *COPYRIGHT @YM00638 00880002 * NONE @YM00638 00890002 * @YM00638 00892002 *CHANGE-ACTIVITY @YM00638 00894002 * 00900019 * RELEASE 20 ADDITIONS/CHANGES/DELETIONS 01200020 * RELEASE 21 ADDITIONS/CHANGES/DELETIONS 01500020 * RELEASE 22 ADDITIONS/CHANGES/DELETIONS 01800020 * RELEASE 23 ADDITIONS/CHANGES/DELETIONS 02100020 * RELEASE 24 ADDITIONS/CHANGES/DELETIONS 02400020 * RELEASE 25 ADDITIONS/CHANGES/DELETIONS 02700020 * RELEASE 26 ADDITIONS/CHANGES/DELETIONS 03000020 * RELEASE 27 ADDITIONS/CHANGES/DELETIONS 03300020 * 03600019 * STATUS - CHANGE LEVEL 00 RELEASE 20 03900020 * 04200019 * 04500019 *FUNCTION-GET- TO MOVE A LOGICAL RECORD FROM A BUFFER TO A USER 04800019 * WORKAREA. IF THE BUFFER IS EMPTIED A NEW ONE IS ACCEPTED 05100019 * AFTER THE OLD ONE HAS BEEN SCHEDULED FOR REFILLING 05400019 * BY THE END OF BLOCK ROUTINE 05700019 * RELEASE- CAUSES THE REMAINING CONTENTS OF THE CURRENT BUFFER 06000019 * TO BE IGNORED 06300019 * 06600019 *ENTRY POINTS 06900019 * LABEL OCR010 07200019 * LABEL OCR020 07500019 * 07800019 *ENTRY INSTRUCTION SEQUENCE 08100019 * GET RELESE 08400019 * LA 1,DCB LA 1,DCB 08700019 * L 15,48(1) L 15,48(1) 09000019 * BALR 14,15 BALR 14,8(15) 09300019 * 09600019 *INPUT FROM USER AS ADDRESSES IN FOLLOWING REGISTERS 09900019 * REG 0 USED IN MOVE MODE-CONTAINS ADDRESS OF INPUT AREA 10200019 * REG 1 DCB ADDRESS 10500019 * REG 13 WORK-SAVE ADDRESS 10800019 * REG 14 USER IN-LINE RETURN ADDRESS 11100019 * REG 15 THIS ROUTINES INITIAL BASE ADDRESS 11400019 * 11700019 *OUTPUT REGISTER ADDRESSES AS FOLLOWS 12000019 * REG 0 NOT APPLICABLE 12300019 * REG 1 RECORD ADDRESS LOCATED FOR USER 12600019 * REG 13 WORK-SAVE ADDRESS 12900019 * REG 14 RETURN ADDRESS 13200019 * REG 15 RETURN CODE 13500019 * REG 2-12 AS UPON ENTRY TO THIS ROUTINE 13800019 * 14100019 *EXTERNAL ROUTINES 14400019 * 14700019 * IGG019VE - INPUT ERROR ROUTINE WHICH DETECTS, CORRECTS DEVICE 15000019 * ERRORS AND RETURNS BLOCK OF DATA. 15300019 * IGG019CC END OF BLOCK ROUTINE WHICH SCHEDULES REQUESTS. 15600019 *EXITS 15900019 * OCR025 BRANCH TO USER,RETURNS PARAMETERS 16200019 * OCR034 BRANCH AND LINK TO END OF BLOCK ROUTINE 16500019 * OCR130 BRANCH AND LINK TO END OF BLOCK ROUTINE 16800019 * OCR040 BRANCH AND LINK TO INPUT ERROR ROUTINE 17100019 * OCR145 BRANCH TO USER, RETURNS PARAMETERS 17400019 * 17700019 *TABLES/WORKAREAS 18000019 * 18300019 * USER SAVE/WORK AREA-LAST 13 WORDS USED 18600019 * DCB 18900019 * 19200019 * IOB 19500019 * 19800019 *ATTRIBUTES---REENTRANT,REUSABLE,PROBLEM PROGRAM MODE 20100019 * 20400019 ******************************************************************* 20700019 * 21000019 * ALL REGISTER EQUATES HAVE AN 'R' AT THE END OF THE SYMBOL 21300019 * 21600019 * 21900019 *********************************************************************** 22200019 PARA1R EQU 1 PARAMETER REGISTER 1 22500019 BUFADR EQU 1 ADDRESS OF BUFFER 22800019 DCBR EQU 2 DCB ADDRESS 23100019 IOBADR EQU 3 IOB ADDRESS 23400019 EOBADR EQU 4 EOB ADDRESS 23700019 RECADR EQU 5 RECORD ADDRESS 24000019 WORK3R EQU 6 WORK REGISTER 24300019 WORK1R EQU 7 WORK REGISTER 24600019 CON255R EQU 7 WORK REGISTER-CONTAINS 255 24900019 BASER EQU 8 BASE REGISTER 25200019 SAVR EQU 13 USER SAVE AREA 25500019 RETR EQU 14 RETURN ADDRESS 25800019 WORK2R EQU 14 WORK REGISTER 26100019 ENTRYR EQU 15 ENTRY ADDRESS 26400019 LNGHR EQU 15 WORK REGISTER-CONTAINS BUFFER LNGH 26700019 *********************************************************************** 27000019 EOFBIT EQU X'40' DCBORBYT-END OF FILE BIT 27300019 BUFPRIME EQU X'20' DCBORBYT-BUFFERS PRIMED BIT 27600019 ERRFLGS EQU X'3F' DCBIFLGS-DCB ERROR FLGS OFF 27900019 BUF EQU 0 OFFSET OF BUFFER ADDRESS IN CCW 28200019 CNT EQU 6 OFFSET OF COUNT IN CCW 28500019 LINECNT EQU 28 OFFSET OF LINE COUNT IN ERROR CNTRS 28800019 NOERROR EQU X'00' TESTS FOR RETURN CODE OF ZERO 29100019 C255 EQU 255 USED TO CLEAR 256 BYTES OF CORE 29400019 C256 EQU 256 USED TO INCREMENT POINTER BY 256 29700019 ADDRESS EQU 3 LENGTH OF AN ADDRESS 30000019 ONE EQU 1 USED TO INCREMENT BY 1 30300019 USERREG EQU 36 SAVE AREA OFFSET TO REG2 30600019 RETREG EQU 20 SAVE AREA OFFSET TO REG14 30900019 SAVREG EQU 20 SAVE AREA OFFSET TO STORE REGISTERS 31200019 REG0SAV EQU 28 OFFSET IN SAVE AREA FOR REGISTER 0 31500019 RELEASE EQU X'F0' USED IF BUFFER IS TO BE RELEASED 31800019 LNGH EQU 2 LENGTH OF NUMBER IN PREFIX 32100019 LPREFIX EQU 4 LENGTH OF A VARIABLE RECORD PREFIX 32400019 ZERO EQU 0 USED AS A CONSTANT OF ZERO 32700019 UNDEF EQU X'C0' USED TO TEST FOR UNDEFINED RECORDS 33000019 TWO EQU 2 USED AS AN OFFSET OF TWO IN PREFIX 33300019 EJECT 33600019 USING IGG019VD,ENTRYR USE ENTRY POINT AS A BASE (REG 15) 33900019 USING IHADCB,PARA1R USE DCB ADDRESS AS A BASE (REG 1) 34200019 * 34500019 OCR010 B OCR030 BRANCH AROUND RELEASE 34800019 ZEROS DC X'00000000' FILL FOR ENTRY AT +8 - USE AS CON=0 35100019 * 35400019 OCR020 CLC DCBEOBAD+1(ADDRESS),DCBRECAD+1 END OF BLOCK YET 35700019 BCR 8,RETR YES, RETURN TO USER 36000019 OI DCBIOBA,RELEASE SET, RELEASE SWITCH 36300019 OCR025 BR RETR RETURN TO THE USER 36600019 OCR030 STM RETR,BASER,SAVREG(SAVR) SAVE USER REGISTERS 36900019 * 37200019 DROP ENTRYR DROP REG 15 AS BASE FOR MODULE 37500019 DROP PARA1R DROP REG 1 AS BASE FOR DCB 37800019 USING IGG019VD,BASER NEW BASE REG ADDRESSABILITY 38100019 USING IHADCB,DCBR NEW DCB REG ADDRESSABILITY 38400019 * 38700019 LR BASER,ENTRYR LOAD BASE ADDRESS 39000019 LR DCBR,PARA1R LOAD DCB ADDRESS 39300019 LM IOBADR,RECADR,DCBIOBA LOAD WORK REGISTERS 39600019 TM DCBORBYT,BUFPRIME ARE THE BUFFERS PRIMED 39900019 BNZ OCR035 YES, BRANCH 40200019 *********************************************************************** 40500019 * 40800019 * PRIME BUFFERS SUBROUTINE 41100019 * 41400019 *********************************************************************** 41700019 * 42000019 NI DCBIFLGS,ERRFLGS MAKE SURE ERROR FLAGS ARE OFF 42300019 * 42600019 SR WORK3R,WORK3R CLEAR A WORK REGISTER 42900019 IC WORK3R,DCBBUFNO GET NUMBER OF BUFFERS 43200019 B OCR033 BRANCH TO SCHEDULE BUFFERS 43500019 * 43800019 OCR032 L IOBADR,0(IOBADR) GET NEXT IOB ADDRESS 44100019 ST IOBADR,DCBIOBA STORE THE ADDRESS OF NEXT IOB TO DCB 44400019 OCR033 BAL RETR,OCR100 BRANCH AND LINK TO CLEAR THE BUFFER 44700019 * 45000019 L ENTRYR,DCBEOB LOAD ADDRESS OF END OF BLOCK ROUTINE 45300019 OCR034 BALR RETR,ENTRYR BRANCH AND LINK TO EOB ROUTINE 45600019 BCT WORK3R,OCR032 IF MORE IOBS TO SCHEDULE ,BRANCH 45900019 * 46200019 OI DCBORBYT,BUFPRIME SET BUFFERS PRIMED SWITCH ON 46500019 * 46800019 *********************************************************************** 47100019 OCR035 TM DCBIOBA,RELEASE RELEASE CALLED FOR 47400019 BO OCR095 BRANCH TO SCHEDULE BUFFER 47700019 * 48000019 CR RECADR,EOBADR HAS END OF BLOCK BEEN REACHED YET 48300019 BL OCR045 NO, BRANCH 48600019 OCR037 L ENTRYR,DCBGERR LOAD ADDRESS OF SYNCH AND ERROR PROC 48900019 OCR040 BALR RETR,ENTRYR BRANCH AND LINK TO GERR RTN 49200019 OCR045 CLC DCBERRCN+1(ADDRESS),ZEROS ARE COUNTERS SPECIFIED 49500019 BE OCR050 NO, BRANCH 49800019 * 50100019 L WORK1R,DCBERRCN LOAD ADDRESS OF 32 BYTE COUNT AREA 50400019 L WORK2R,LINECNT(WORK1R) LOAD NO. OF LINES READ 50700019 LA WORK2R,ONE(WORK2R) ADD 1 TO THE COUNT 51000019 ST WORK2R,LINECNT(WORK1R) STORE COUNT 51300019 OCR050 LR WORK2R,RECADR LOAD RECORD ADDRESS 51600019 L PARA1R,REG0SAV(SAVR) MAKE WORK AREA ADDRESSABLE 51900019 SR WORK1R,WORK1R CLEAR REGISTER 52200019 IC WORK1R,DCBOFFSR LOAD CHANNEL PROGRAM OFFSET 52500019 AR WORK1R,IOBADR LOAD CHANNEL PROGRAM ADDRESS 52800019 LH LNGHR,CNT(WORK1R) LOAD LENGTH OF BUFFER FROM CCW 53100019 * 53400019 TM DCBRECFM,UNDEF UNDEFINED RECORDS SPECIFIED 53700019 BO OCR055 YES, BRANCH 54000019 LA LNGHR,LPREFIX(LNGHR) ADD 4 TO VAR RECS TO GET END 54300019 OCR055 LR WORK3R,LNGHR LOAD COUNT TO SCAN RECORD BUFFER 54600019 OCR057 CLI 0(RECADR),ZERO IS BUFFER BYTE = 0 54900019 BNE OCR060 NO, BRANCH 55200019 LA RECADR,ONE(RECADR) INCREMENT BUFFER POINTER BY 1 55500019 BCT WORK3R,OCR057 BRANCH TO CHECK NEXT BYTE FOR ZERO 55800019 OCR060 AR WORK2R,LNGHR ADD MAX LNGH TO BEGIN TO GET END 56100019 OCR070 ST WORK2R,DCBRECAD STORE ADDRESS OF NEXT RECORD 56400019 SR WORK2R,RECADR SUB BEGIN OF DATA FROM END OF BUFFER 56700019 * 57000019 TM DCBRECFM,UNDEF TEST FOR UNDEFINED RECORDS 57300019 BO OCR080 YES, BRANCH 57600019 * 57900019 LA WORK2R,LPREFIX(WORK2R) ADD 4 TO VAR RECS TO INCLUDE PREF 58200019 STH WORK2R,DCBLRECL STORE LNGTH TO DCB 58500019 MVC 0(LNGH,PARA1R),DCBLRECL MOVE LENGTH TO PREFIX 58800019 XC TWO(LNGH,PARA1R),TWO(PARA1R) CLEAR RIGHTMOST TWO BYTES 59100019 * OF PREFIX IN USER AREA 59400019 LA PARA1R,LPREFIX(PARA1R) GET ADDR OF RECORD IN WORK AREA 59700019 SH WORK2R,FOUR SUBTRACT FOUR TO GET LNGTH OF REC 60000019 B OCR090 BRANCH TO MOVE RECORD 60300019 * 60600019 * 60900019 OCR080 STH WORK2R,DCBLRECL STORE RECORD LENGTH TO DCB 61200019 * 61500019 OCR090 LTR WORK2R,WORK2R TEST LENGTH OF RECORD FOR 0 61800019 BZ OCR092 IF LENGTH IS ZERO, DO NOT MOVE 62100019 BCTR WORK2R,0 DECREMENT LENGTH BY 1 FOR MOVE 62400019 EX WORK2R,OCR117E MOVE RECORD TO USER WORK AREA 62700019 OCR092 CLC DCBEOBAD+1(ADDRESS),DCBRECAD+1 TEST IF MORE THAN RECS 63000019 BH OCR150 YES, BRANCH 63300019 * 63600019 * 63900019 OCR095 LA RETR,OCR125 LOAD RETURN ADDRESS FOR SUBROUTINE 64200019 EJECT 64500019 *********************************************************************** 64800019 * 65100019 * CLEAR BUFFER SUBROUTINE 65400019 * 65700019 *********************************************************************** 66000019 OCR100 SR WORK1R,WORK1R CLEAR REGISTER 66300019 IC WORK1R,DCBOFFSR GET OFFSET OF CHANNEL PROGRAM 66600019 AR WORK1R,IOBADR GET ADDRESS OF CHANNEL PROGRAM 66900019 L BUFADR,BUF(WORK1R) LOAD BUFFER ADDRESS 67200019 LA BUFADR,ONE(BUFADR) CLEAR HI BYTE AND INCREMENT BY 1 67500019 SH BUFADR,CNT(WORK1R) SUBTRACT RECORD LENGTH 67800019 TM DCBRECFM,UNDEF UNDEFINED RECORDS 68100019 BO OCR105 YES, BRANCH 68400019 SH BUFADR,FOUR FOUR BYTE PREFIX IN IN BUFFER 68700019 * 69000019 OCR105 LH LNGHR,DCBBUFL LOAD LENGTH OF BUFFER 69300019 LA CON255R,C255 LOAD CONSTANT = 255 69600019 BCTR LNGHR,0 DECREMENT LENGTH BY 1 69900019 * 70200019 OCR110 CR LNGHR,CON255R COMPARE LENGTH TO CLEAR WITH 255 70500019 BNH OCR120 IF 255 OR LESS, BRANCH 70800019 * 71100019 EX CON255R,OCR115E CLEAR 256 BYTES 71400019 * 71700019 SR LNGHR,CON255R SUBTRACT 255 FROM AMOUNT TO BE CLEAR 72000019 BCTR LNGHR,0 SUBTRACT ONE MORE 72300019 LA BUFADR,C256(BUFADR) INCREMENT BUFFER ADDRESS BY 256 72600019 B OCR110 BRANCH TO CLEAR NEXT PORTION OF BUF 72900019 * 73200019 OCR115E XC 0(1,BUFADR),0(BUFADR) CLEAR INSTRUCTION USED BY EXECUTE 73500019 OCR117E MVC 0(1,PARA1R),0(RECADR) MOVE INSTRUCTION USED BY EXECUTE 73800019 * 74100019 OCR120 EX LNGHR,OCR115E CLEAR REMAINDER OF BUFFER 74400019 BR RETR BRANCH TO CALLING ROUTINE 74700019 *********************************************************************** 75000019 EJECT 75300019 OCR125 TM DCBORBYT,EOFBIT TEST IF END OF FILE IS ON 75600019 BO OCR135 IF YES, DO NOT SCHEDULE, BRANCH 75900019 L ENTRYR,DCBEOB LOAD END OF BLOCK ROUTINE ADDRESS 76200019 * 76500019 OCR130 BALR RETR,ENTRYR BRANCH AND LINK TO THE EOB ROUTINE 76800019 * 77100019 OCR135 TM DCBIOBA,RELEASE IS RELEASE SWITCH ON 77400019 BO OCR037 IF YES, BRANCH 77700019 * 78000019 SR ENTRYR,ENTRYR CLEAR REGISTER 78300019 CLI DCBEIB+1,NOERROR IS RETURN CODE =0 78600019 BE OCR140 YES, BRANCH TO RESTORE REGS 78900019 * 79200019 IC ENTRYR,DCBEIB+1 LOAD RETURN CODE 79500019 XC DCBEIB+1(ONE),DCBEIB+1 CLEAR RETURN CODE SAVE AREA 79800019 * 80100019 OCR140 LM DCBR,BASER,USERREG(SAVR) RESTORE USER REGISTERS 80400019 L PARA1R,REG0SAV(SAVR) RESTORE WORK AREA ADDRESS 80700019 L RETR,RETREG(SAVR) RESTORE RETURN REGISTER 81000019 OCR145 BR RETR RETURN TO USER 81300019 * 81600019 OCR150 SR ENTRYR,ENTRYR SET RETURN CODE TO ZERO 81900019 B OCR140 BRANCH TO RETURN TO USER 82200019 FOUR DC H'4' USED AS A CONSTANT OF 4 82500019 CNOP 0,8 PAD MODULE TO DOUBLE WORD 82800019 DCBD DSORG=PS,DEVD=OR @YM00635 83100002 END 83400019