IEDQAL TITLE 'IEDQAL - COMPARE AT OFFSET ROUTINE' 00600022 IEDQAL CSECT 01200022 *********************************************************************** 01800022 * * 02400022 *TITLE 'IEDQAL' - COMPARE AT OFFSET ROUTINE * 03000022 * * 03600022 *STATUS -- CHANGE LEVEL * 04200022 * * 04800022 *FUNCTION -- FINDS AND COMPARES THE NEXT CHARACTERS FROM AN * 05400022 * OFFSET INTO THE BUFFER, TO THE CHARACTERS WHOSE ADDRESS * 06000022 * IS PASSED TO THE ROUTINE. * 06600022 * * 07200022 *ENTRY POINT -- 'IEDQAL' * 07800022 * CALLING SEQUENCE- * 08400022 * L R15,AVTAL * 09000022 * BALR R14,R15 * 09600022 * * 10200022 * REGISTERS 2-12 ARE SAVED AND RESTORED IN PASSED R13 * 10800022 * * 11400022 *INPUT -- * 12000022 * EXPECTED REGISTER CONTENTS * 12600022 * USING R6,BUFFER DSECT * 13200022 * USING R9,AVT BASE * 13800022 * USING R13,SAVE AREA * 14400022 * USING R15,BASE REGISTER * 15000022 * * 15600022 * PARAMETERS PASSED - * 16200022 * * 16800022 * REGISTER 0 - ADDRESS OF CHARACTER STRING FOR COMPARE WITH * 17400022 * LENGTH OF STRING IN HI-ORDER BYTE. (OR ZERO * 18000022 * IF LENGTH IS THE FIRST BYTE OF STRING. * 18600022 * REGISTER 1 - OFFSET OF FIELD IN BUFFER * 19200022 * REGISTER 2 - BLANK CHARACTER IF BLANKS ARE TO BE IGNORED * 19800022 * - NEGATIVE IF BLANKS ARE CHARACTERS * 20400022 * * 21000022 *OUTPUT -- * 21600022 * PARAMETERS RETURNED - * 22200022 * REGISTER 0 - UPDATED OFFSET * 22800022 * REGISTER 1 - ADDRESS OF LAST CHARACTER FOUND * 23400022 * REGISTER 15- COUNT OF CHARACTERS COMPARED EQUAL * 24000022 * AVTDOUBL -- CHARACTERS FOUND * 24600022 *EXTERNAL REFERENCES -- * 25200022 * * 25800022 * TAVTD -- AVTDOUBL AS WORK AREA * 26400022 * BUFFER CURRENTLY BEING PROCESSED * 27000022 * * 27600022 *EXITS, NORMAL -- RETURN TO CALLER VIA A BRANCH REGISTER 14 * 28200022 * PARAMETER LIST (IN RECB) AND REGISTER 15 RETURN CODE * 28800022 * * 29400022 * CHANGE ACTIVITY = * 29450027 * $21=OZ52119 ETC2402 81.04.28 162624: IEDQAN 0C4 AFTER QAL CALL @21A* 29500027 * $21=OZ52120 ETC2402 81.04.28 162624: AVT OVERLAID AT AVTDOUBL @22A* 29550027 *********************************************************************** 30000022 EJECT 30600022 ********* REGISTER EQUATES ********* 31200022 SPACE 31800022 R0 EQU 0 32400022 RPARM EQU 1 33000022 RBLANK EQU 2 33600022 RUNIT EQU 3 34200022 RCNTS EQU 4 34800022 RDATA EQU 5 DATA ADDR WITHIN UNIT 35400022 RPREFIX EQU 6 BUFFER (PARAMETER REGISTER) 36000022 ROFF EQU 7 OFFSET OF DATA 36600022 RCHAR EQU 8 ADDR OF DATA TO COMPARE 37200022 RAVT EQU 9 AVT BASE 37800022 RWORK EQU 10 WORK REGISTER 38400022 RCNT EQU 11 COUNT OF CHARACTERS COMPARED 39000022 R12 EQU 12 39600022 RSAVE EQU 13 SAVE AREA ADDRESS 40200022 R14 EQU 14 RETURN REGISTER 40800022 RBASE EQU 15 MODULE BASE REGISTER 41400022 SPACE 2 42000022 ********* OTHER EQUATES ********* 42600022 SPACE 1 43200022 TFOUR EQU 24 43800022 EQ EQU 8 CONDITION CODE EQUAL 44400022 SAVREG EQU 12 OFFSET IN SAVE AREA FOR STORE MULTI 45000022 MAXCNT EQU 8 MAX CHARACTER COUNT 45600022 ONE EQU 1 INCREMENT AMOUNT 46200022 EJECT 46800022 USING IEDQAL01,R12 47400022 USING IEDQAVTD,RAVT 48000022 USING IEDQPRF,RPREFIX 48600022 SPACE 2 49200022 IEDQAL01 EQU * 49800022 STM R14,R12,SAVREG(RSAVE) SAVE REGISTERS 50400022 LR R12,RBASE 51000022 IEDQAL IEDHJN ENTER 52000022 SR RBASE,RBASE INSURE POSITIVE RETURN 54600022 LR RCHAR,R0 GET ADDR OF CHARS 55200022 LR RCNT,RPARM SAVE COUNT 55800022 SRL RCNT,TFOUR SHIFT TO LOW BYTE 56400022 LTR RCNT,RCNT COUNT IN REG 57000022 BNZ COUNT YES 57600022 IC RCNT,0(,RCHAR) NO, MUST BE IN DATA FIELD 58200022 LA RCHAR,ONE(,RCHAR) BUMP PAST LENGTH 58800022 LTR RCNT,RCNT COUNT EQUAL TO ZERO? @22A 58850027 BZ ZEROCNT COUNT ZERO, NO SEARCH @22A 58900027 COUNT EQU * 59400022 SR RCNTS,RCNTS CLEAR 59800022 LA R0,MAXCNT GET MAXIMUM COUNT 60200022 CR RCNT,R0 GREATER THAN MAXIMUM 60600022 BNH CNTOK NO 61200022 LA RCNT,MAXCNT SET MAXIMUM 61800022 CNTOK EQU * 62400022 LR R0,RCNT SET COUNT 63000022 N RPARM,AVTCLRHI CLEAR 63600022 LA RWORK,AVTDOUBL GET WORKAREA PTR 64200022 LR ROFF,RPARM SET OFFSET 64800022 LR RUNIT,RPREFIX POINT TO UNIT 65400022 CLM RPARM,3,PRFSIZE IS SCAN START OUT OF BUFFER @21A 65450027 BNL INVPARM YES, EXIT WITHOUT SEARCH @21A 65500027 B LOOP AND LOOK AGAIN 69000022 NXTUNIT EQU * 69060022 L RUNIT,PRFTIC-IEDQPRF(,RUNIT) GET NEXT UNIT 69120022 SH ROFF,AVTKEYLE SUBTRACT UNIT SIZE 69180022 LOOP EQU * 69240022 CLM RPARM,3,PRFSIZE OUT OF BUFFER @21C 69300027 BNL DONE YES ,GET OUT 69360022 CH ROFF,AVTKEYLE DATA IN THIS UNIT 69420022 BNL NXTUNIT NO, GET NEXT UNIT 69480022 MOVDATA EQU * 69600022 LA RDATA,AVTUMALN(RUNIT,ROFF) DEVELOP ADDR OF BYTE 70200022 LA RCNTS,ONE(,RCNTS) NUMBER SCANNED 70500022 LA ROFF,ONE(,ROFF) OFFSET IN UNIT 70800022 LA RPARM,ONE(,RPARM) OFFSET IN BUFFER 71100022 LTR RBLANK,RBLANK BLANK SPECIFIED 71400022 BM NOBLK NO 72000022 EX RBLANK,COMPBLK CHECK FOR BLANK 72600022 BE LOOP SKIP BLANK 73200022 NOBLK EQU * 73800022 MVC 0(1,RWORK),0(RDATA) MOVE TO WORK AREA 74400022 LA RWORK,ONE(RWORK) INCR WORK AREA ADDRESS 75000022 BCT RCNT,LOOP OUT OF COUNT 75600022 NOTOUT EQU * 76600022 LNR RCNT,RCNT NO CHARS LEFT OVER 77600022 AR RCNT,R0 NUMBER CHARS FOUND 78600022 LR RBASE,RCNT NUMBER OF CHARS FOUND 82200022 LR R0,RPARM OFFSET OF NEXT BYTE 82800022 LR RPARM,RDATA ADDR OF LAST IN STRING 83400022 BCTR RCNT,0 DECR FOR COMPARE 84000022 EX RCNT,COMP IS STRING IN BUFFER 84600022 BE SETOFF YES, SET DATOFF TO RETURN 85200022 SR RBASE,RBASE NO, SET RETURN CODE 85800022 SR R0,RCNTS RESET TO ORIGINAL OFFSET 86700022 SETOFF EQU * 87600022 LM RBLANK,R12,28(RSAVE) RESTORE REGS 88200022 BR R14 AND RETURN 88800022 DONE EQU * 88900022 LA RPARM,ONE(,RPARM) BUMP PAST END OF BUFFER 89000022 LA RCNTS,ONE(,RCNTS) BUMP FOR LATER 89100022 B NOTOUT RETURN 89200022 ZEROCNT EQU * COUNT TO SCAN EQUAL ZERO @22A 89209527 N RPARM,AVTCLRHI CLEAR HIGH TWO BYTES @22A 89219027 LR ROFF,RPARM SET OFFSET IN REG @22A 89228527 LR RUNIT,RPREFIX POINT TO FIRST UNIT @22A 89238027 CLM RPARM,3,PRFSIZE IS SCAN START OUT OF BUFFER @21A 89247527 BNH PRFLOOP NO, USE PASSED OFFSET @21A 89257027 INVPARM EQU * OFFSET INVALID AT ENTRY @21A 89266527 ICM ROFF,3,PRFSIZE SET END OFFSET PRFSIZE @21A 89276027 PRFLOOP EQU * FIND PROPER UNIT @21A 89285527 CH ROFF,AVTKEYLE DATA IN THIS UNIT @21A 89295027 BNH SETBUF YES, GOT PROPER UNIT @21A 89304527 L RUNIT,PRFTIC-IEDQPRF(,RUNIT) GET NEXT UNIT @21A 89314027 SH ROFF,AVTKEYLE SUBTRACT UNIT SIZE @21A 89323527 B PRFLOOP FIND PROPER UNIT @21A 89333027 SETBUF EQU * UNIT WITH PROPER OFFSET FND @21A 89342527 LA RPARM,ONE(,RPARM) OFFSET EQUAL OFFSET + ONE @21A 89352027 LR R0,RPARM OFFSET RETURNED IN REG0 @21A 89361527 LA RPARM,AVTUMALN(RUNIT,ROFF) DEVELOP ADDR OF BYTE @21A 89371027 SR RBASE,RBASE SET NOT FOUND RETURN CODE @21A 89380527 B SETOFF BRANCH TO RETURN @21A 89390027 SPACE 1 89400022 COMPBLK CLI 0(RDATA),0 90000022 SPACE 2 90600022 COMP CLC 0(0,RCHAR),AVTDOUBL COMPARE CHAR TO AVTDOUBL 91200022 EJECT 91800022 TAVTD 92400022 TPRFD 93000022 PRFDATAD EQU PRFKEY 93600022 PRFDATOF EQU PRFCOUNT 94200022 END 94800022