ibm:vm370-lib:dumpscan:dmmloc.assemble_src
Table of Contents
DMMLOC Source
References
- Fixes Applied : 1
- This Source Date : Friday, December 8, 1978
- Last Fix ID : [R09878DM]
Source Listing
- DMMLOC.ASSEMBLE.txt
- LOC TITLE 'DMMLOC (IPCS) VM/370 - RELEASE 6' 00001000
- * 00002000
- * 00003000
- * MODULE NAME: 00004000
- * DMMLOC (SUBROUTINE OF DUMPSCAN) 00005000
- * 00006000
- * FUNCTION: 00007000
- * LOCATE 'STRING' WITHIN THE LIMITS 'FROM' 'TO' 00008000
- * 00009000
- * ATTRIBUTES: 00010000
- * REUSABLE 00011000
- * NON-REENTRANT 00012000
- * 00013000
- * ENTRY POINTS: 00014000
- * DMMLOC 00015000
- * 00016000
- * ENTRY CONDITIONS: 00017000
- * R2 POINTS TO A PLIST CONTAINING THE COMMAND 00018000
- * 00019000
- * EXIT CONDITIONS: 00020000
- * 00021000
- * CALLS TO OTHER ROUTINES: 00022000
- * DMMGET TO FETCH DATA INTO CORE 00023000
- * DMMINT TO TRANSLATE HEX TO EBCDIC 00024000
- * DMMHEX TO TRANSLATE EBCDIC TO HEX 00025000
- * DMMFEX TO WRITE THE FOUND LOCATION TO A SCREEN 00026000
- * DMMFED TO WRITE THE FOUND LOCATION TO A TYPEWRITER 00027000
- * 00028000
- * EXTERNAL REFERENCES: 00029000
- * INPUT COMMAND INPUT LINE 00030000
- * INLENGTH INPUT LINE LENGTH 00031000
- * BUFF1 CURRENT HEX DATA TO BE TRANSLATED 00032000
- * TYPEFLAG INDICATOR OF DEVICE TYPE 00033000
- * 00034000
- * TABLES/WORKAREAS: 00035000
- * LOCBUFF TWO PAGE BUFFER FOR TRANSLATED HEX DATA 00036000
- * 00037000
- * REGISTER USAGE: 00038000
- * R15 ADDRESSES OF EXTERNAL ROUTINES 00039000
- * R14 RETURNS FROM EXTERNAL ROUTINES 00040000
- * R13 SAVE AREA ADDRESS 00041000
- * R12 BASE 00042000
- * R10 INTERNAL LINKS 00043000
- * R9-R2 WORK REGISTERS 00044000
- * R2 POINTS TO PLIST PASSED BY CALLER 00045000
- * R2 PASSES ADDRESS OF PLIST TO SUBROUTINES 00046000
- * 00047000
- * NOTES: 00048000
- * 00049000
- * OPERATION: 00050000
- * 'LOCATE' ACCEPTS A COMMAND OF THE FORM:- 00051000
- * 'LOCATE' 'STRING' 'FROM' 'TO' 00052000
- * WHERE 'STRING' MAY BE ANY CONTIGUOUS STRING 00053000
- * OF UP TO 16 HEXADECIMAL DIGITS. 'FROM' IS 00054000
- * THE ADDRESS AT WHICH THE SEARCH BEGINS, 00055000
- * AND 'TO' IS THE END ADDRESS. 'LOCATE' WILL 00056000
- * SEARCH THAT RANGE OF THE DUMP, SEARCHING 00057000
- * ON A HALF BYTE BOUNDARY, FOR THE GIVEN STRING. 00058000
- * SEARCH STOPS WHEN EITHER THE 'TO' ADDRESS IS 00059000
- * REACHED, OR THE STRING IS FOUND. 'LOCATE WILL 00060000
- * PASS OVER PAGES NOT IN THE DUMP. 00061000
- * M.O. IS AS FOLLOWS. THE INPUT STRING IS SCANNED 00062000
- * FOR VALID, CONTIGUOUS HEX CHARACTERS. EACH ONE 00063000
- * CAUSES A BIT TO BE SET IN A MASK HALF BYTE. 00064000
- * THERE ARE FOUR MASKS, ALLOWING A STRING LENGTH 00065000
- * OF 16 CHARACTERS. THEN THE PAGE CONTAINING THE 00066000
- * 'FROM' ADDRESS IS BROUGHT INTO 'BUFF1' BY DMMGET. 00067000
- * THE HEX DATA IS THEN XLATED INTO EBCDIC IN 'LOCBUFF' 00068000
- * (IF THE 'FROM' ADDRESS IS LESS THAN 8 BYTES, 00069000
- * ((16 HEX DIGITS)) FROM THE END OF THE PAGE, 00070000
- * THE LAST 8 BYTES ARE TRANSLATED INTO THE 16 BYTES 00071000
- * IMMEDIATELY PRECEDING 'LOCBUFF', AND THE NEXT PAGE 00072000
- * IS TRANSLATED. THIS IS BECAUSE THE STRING MIGHT 00073000
- * RUN ACROSS A PAGE BOUNDARY.) THE FIRST FOUR BYTES 00074000
- * OF THE STRING ARE LOADED INTO R4. THE MASK IS LOADED 00075000
- * INTO R2, AND R3 IS POINTED AT THE TRANSLATED 00076000
- * EQUIVALENT 'TO' LOCATION IN 'LOCBUFF'. AN EXECUTE 00077000
- * INSTRUCTION WITH A 'CLM' AS ITS OBJECT, IS USED 00078000
- * FOR THE COMPARE. IF NO MATCH OCCURS, THE PTR IN R3 00079000
- * IS UPDATED, THE LIMITS ARE CHECKED, AND ANOTHER 00080000
- * COMPARISON IS MADE UNTIL THE 'TO' EQUIVALENT 00081000
- * ADDRESS IS REACHED. IF THERE IS A MATCH, THE 00082000
- * MASK IS REPLACED BY THE NEXT ONE, THE R3 POINTER 00083000
- * IS UPDATED BY 4 AND THE NEXT WORD IN THE STRING IS 00084000
- * COMPARED AGAINST THE NEXT WORD IN THE TRANSLATED 00085000
- * BUFFER. THIS IS CONTINUED UNTIL ALL WORDS IN THE 00086000
- * STRING AGREE WITH THE BUFFER, SUBJECT TO THE MASKING. 00087000
- * THE MATCHING ADDRESS IN R3 FROM 'LOCBUFF', IS 00088000
- * CONVERTED BACK TO A REAL ADDRESS FROM THE DUMP. 00089000
- * THIS ADDRESS IS PASSED TO EITHER DMMFED, FOR 00090000
- * A TYPEWRITER TYPE DEVICE, OR DMMFEX FOR A GRAPHICS 00091000
- * DEVICE. 00092000
- * 00093000
- * ERROR MESSAGES: 00094000
- * DMMLOC715I NON-HEX CHARACTER IN STRING 00095000
- * DMMLOC716I STRING ' ' NOT FOUND. 00096000
- * DMMLOC717I INVALID FORM OF INPUT. 00097000
- * 00098000
- * * * * * * * *------- -------- -------- -------- ------* 00099000
- DMMLOC CSECT @VA04250 00100000
- ENTRY PREBUFAD ADDRESS OF GOTTEN BUFFER @V4075A2 00100500
- ENTRY BOUND INCREMENT PARAMETER. @V4075A2 00100600
- EXTRN INPUT ADDRESS OF INPUT LINE @VA04250 00101000
- EXTRN SCRNAREA SCREEN @VA04250 00102000
- EXTRN INLENGTH INPUT LINE LENGTH @VA04250 00103000
- EXTRN STRINGAD LOC SEARCH ARGUMENT @V4075A2 00103300
- EXTRN STRINGLN LENGTH OF SEARCH ARG. @V4075A2 00103600
- EXTRN HEXAD LAST DISPLAY ADDRESS FOR SCROLL @VA04250 00104000
- EXTRN BUFF1 HEX BUFFER @VA04250 00105000
- EXTRN DMMFED LINE WRITE @VA04250 00106000
- EXTRN DMMFEX SCREEN WRITE @VA04250 00107000
- EXTRN DMMGET DATA FETCH @VA04250 00108000
- EXTRN DMMHEX BCD - TO - HEX @VA04250 00109000
- EXTRN DMMINT HEX TO BCD @VA04250 00110000
- EXTRN TYPEFLAG DEVICE TYPE @VA04250 00111000
- EXTRN CONSOLE VIRT CONS ADDRESS @VA04250 00112000
- STM R14,R12,SAVEDISP(R13) SAVE CALLERS REGS @VA04250 00113000
- LR R12,R15 ADDRESSABILITY @VA04250 00114000
- USING DMMLOC,R12 @VA04250 00115000
- ST R13,SAVEBACK CALLERS SAVE AREA @VA04250 00116000
- B EYECATCH BYPASS EYECATCHER @VA04250 00117000
- DS 0D ALIGN @VA04250 00118000
- DC CL8'DMMLOC' EYECATCHER @VA04250 00119000
- RELLEV DC C'REL4LEV0' RELEASE AND LEVEL @V4075A1 00120000
- EYECATCH LA R13,SAVEAREA LOC SAVEAREA @VA04250 00121000
- XC RETCODE,RETCODE CLEAR RETURN CODE @VA04250 00122000
- ************************************************************ @V4075A2 00122100
- * WE NEED A 2 PAGE (8K) BUFFER INTO WHICH THE PAGE BEING @V4075A2 00122125
- * SCANNED WILL BE TRANSLATED ( HEX INTO EBCDIC). THIS @V4075A2 00122150
- * CHECK TO SEE IF IT WAS ALREADY DMSFREED, AND IF SO, @V4075A2 00122175
- * BYPASSES THE DMSFREE. IF NOT, IT GETS 1030 DWORDS. @V4075A2 00122200
- * THE TEST IS MADE ON THE ADDRESS OF THE FIRST BYTE @V4075A2 00122225
- * PAST THE END OF THE BUFFER, WHICH IS '0' UNTIL THE @V4075A2 00122250
- * DMSFREE IS DONE. @V4075A2 00122275
- ************************************************************ @V4075A2 00122300
- L R3,TBUFFEND TEST TO SEE IF CORE IS GOTTEN @V4075A2 00122325
- LTR R3,R3 FOR THE TRANSLATED BUFF YET @V4075A2 00122350
- BNZ NOFREE GOOD ADD - DONT GET CORE @V4075A2 00122375
- DMSFREE DWORDS=(1030),ERR=FREEERR TRANSLATED DATA @V4075A2 00122400
- ST R1,PREBUFAD ADDRESS OF GOTTEN CORE @V4075A2 00122425
- LA R3,PREBUFL ADD THE LENGTH OF THE PREBUFFER @V4075A2 00122450
- AR R3,R1 TO GET TO THE MAIN BUFFER @V4075A2 00122475
- ST R3,BUFFADD SAVE THAT @V4075A2 00122500
- L R1,DEC8176 DISPLACEMENT OF LAST BUFF LINE @V4075A2 00122525
- AR R3,R1 ADD TO BUFFER ADDRESS @V4075A2 00122550
- ST R3,LASTLINE AND SAVE THAT @V4075A2 00122575
- LA R3,16(R3) POINT TO END OF BUFFER @V4075A2 00122600
- NOFREE ST R3,TBUFFEND AND SAVE THAT @V4075A2 00122625
- ********************************************************************** 00123500
- * SAVE THE PLIST PTR, AND POINT TO THE START OF THE STRING 00124500
- ********************************************************************** 00125500
- ST R2,PLISTADD SAVE PLIST PTR @V4075A2 00126500
- L R4,STRNGADD ADDRESS OF STRING @V4075A2 00127500
- ST R4,STRING AND PLUG IT @V4075A2 00128500
- ********************************************************************** 00129500
- * NOW R4 POINTS TO THE FIRST CHAR OF THE SEARCH @V4075A2 00130500
- * ARG WHOSE ADDR IS STRING. SCAN DOWN THE STRING @V4075A2 00131500
- * CHECKING HEX VALIDITY AND COUNTING THE BYTES. @V4075A2 00132500
- * DO THIS FOR UP TO 16 BYTES. WHEN A BLANK IS @V4075A2 00133500
- * FOUND, END THE STRING. @V4075A2 00134500
- ********************************************************************** 00135500
- MVI BLANKSW,NOBLANK NO BLANKS YET IN STRING @VA04250 00177000
- LA R2,BYTES COUNT BYTES IN A WORD - 4 @VA04250 00178000
- LA R3,WORDS COUNT WORDS IN THE STRING - 4 @VA04250 00179000
- * * * * * * * *------- -------- -------- -------- ------* 00180000
- * * * * * * * * FIRST CHECK INPUT VALIDITY 00181000
- * * * * * * * *------- -------- -------- -------- ------* 00182000
- ZEROMASK LA R5,NULL ZERO MASK REGISTER @VA04250 00183000
- VALID SLL R5,1 SHIFT THE MASK @VA04250 00184000
- CLI BLANKSW,YESBLANK DID WE END THE STRING YET? @VA04250 00185000
- BE BUMPPTR YES - KEEP GOING TO FILL MASKS @VA04250 00186000
- * * * * * * * * ------- -------- -------- ------- * 00187000
- * * * * * * * * ARE THESE ALL HEX CHARACTERS 00188000
- * * * * * * * * ------- -------- -------- ------- * 00189000
- HEXCHECK CLI 0(R4),A BELOW 'A' @VA04250 00190000
- BL BLANKCHK NON HEX @VA04250 00191000
- CLI 0(R4),F ABOVE 'F' @VA04250 00192000
- BH HICHEK SO FAR @VA04250 00193000
- B SETABIT OK - USE IT @VA04250 00194000
- HICHEK CLI 0(R4),ZERO BELOW '0' @VA04250 00195000
- BL BLANKCHK NON HEX @VA04250 00196000
- CLI 0(R4),NINE ABOVE '9' @VA04250 00197000
- BH BLANKCHK NON HEX @VA04250 00198000
- SETABIT LA R5,BIT(R5) SET A BIT FOR A VALID CHAR @VA04250 00199000
- B BUMPPTR GO GET NEXT @VA04250 00200000
- BLANKCHK CLI 0(R4),BLANK BLANKYET? @VA04250 00201000
- BNE NONHEXST NO - NON-HEX IN STRING @VA04250 00202000
- ST R4,STRNGEND SAVE ADDRESS OF FIRST BYTE PAST @VA04250 00203000
- MVI BLANKSW,YESBLANK SET SW ON @VA04250 00204000
- BUMPPTR LA R4,ONE(R4) NEXT @VA04250 00205000
- BCT R2,VALID GO DO NEXT BYTE, THIS WORD @VA04250 00206000
- * * * * * * * * ------- -------- -------- ------- * 00207000
- * * * * * * * * NOW WE ARE ROUND THE SMALL LOOP 00208000
- * * * * * * * * AND HAVE PUT A BIT OR NOBIT FOR 00209000
- * * * * * * * * EACH BYTE IN THE FIRST WORD 00210000
- * * * * * * * * INTO THE MASK REG R5. NOW SAVE 00211000
- * * * * * * * * THE MASK AND SET UP FOR NEXT WORD. 00212000
- * * * * * * * * ------- -------- -------- ------- * 00213000
- SLL R3,2 CONVERT BYTE COUNT TO WORD COUN @VA04250 00214000
- ST R5,MASKS(R3) STORE IT @VA04250 00215000
- SRL R3,2 RESTORE R3 @VA04250 00216000
- LA R2,BYTES RESET COUNT IN R4 @VA04250 00217000
- BCT R3,ZEROMASK ROUND AGAIN @VA04250 00218000
- * * * * * * * * ------- -------- -------- ------- * 00219000
- * * * * * * * * NOW ALL FOUR MASKS ARE STORED 00220000
- * * * * * * * * TRANSLATE 'FROM' AND 'TO' ADDRESSES 00221000
- * * * * * * * * IN THE PLIST TO HEX. 00222000
- * * * * * * * * ------- -------- -------- ------- * 00223000
- L R4,PLISTADD ADDRESS OF INPUT PLIST @VA04250 00224000
- LA R4,P3(R4) 'FROM ' ADDRESS - PLIST THIRD @VA04250 00225000
- CLI 0(R4),YESBLANK IS 'FROM' ADDRESS SUPPLIED? @VA04250 00226000
- BE NOPARM NO, GO ISSUED MSG717 @VA04250 00227000
- BAL R10,GOHEX GO HEX IT @VA04250 00228000
- ST R5,FROM SAVE HEX START ADDRESS @VA04250 00229000
- L R4,PLISTADD ADDRESS OF INPUT PLIST @VA04250 00230000
- LA R4,P4(R4) 'TO' ADDRESS PLIST FOURTH @VA04250 00231000
- CLI 0(R4),YESBLANK IS 'TO' ADDRESS SUPPLIED? @VA04250 00232000
- BE NOPARM NO, GO ISSUE MSG717 @VA04250 00233000
- BAL R10,GOHEX CONVERT TO HEX @VA04250 00234000
- ST R5,TO SAVE IT @VA04250 00235000
- ************************************************************ @V4075A2 00236100
- * SET THE DEFAULT BOUND VALUE, THEN @V4075A2 00236150
- * SEE IF THERE IS A 5TH PARM - THE SEARCH BOUNDARY @V4075A2 00236200
- * IF THERE IS, GO TRANSLATE IT TO A HEX VALUE. @V4075A2 00236250
- ************************************************************ @V4075A2 00236300
- LA R4,ONE SET BOUND TO THE DEFAULT - 1 @V4075A2 00236350
- ST R4,BOUND AND PLUG IT @V4075A2 00236400
- L R4,PLISTADD POINT TO PLIST @V4075A2 00236450
- LA R4,P5(R4) AND GET THE FIFTH PARM @V4075A2 00236500
- CLC FENCE,0(R4) IS THERE A BOUNDARY PARM? @V4075A2 00236550
- BE HILOCHEK NO - LET MY DEFAULT GO @V4075A2 00236600
- BAL R10,GOHEX YES - GO TRANSLATE EBCD TO BIN @V4075A2 00236650
- LTR R5,R5 CHECK FOR ZERO INCREMENT @VA09878 00236660
- BZ NOPARM ZERO-THATS WRONG TELL THEM @VA09878 00236670
- C R5,FOURK CHECK FOR MAX VALUE @V4075A2 00236700
- BNH DOUBLE NOT OVER MAX - USE IT @V4075A2 00236750
- L R5,FOURK SET TO MAX @V4075A2 00236800
- DOUBLE SLL R5,ONE CONVERT TO BYTES @V4075A2 00236850
- ST R5,BOUND AND SET THE BOUND VALUE @V4075A2 00236900
- HILOCHEK CLC FROM,TO NOW SEE THAT TO IS ABOVE FROM @V4075A2 00236950
- BH NOTFOUND YES - KICK IT BACK @VA04250 00237000
- * * * * * * * * ------- -------- -------- ------- * 00238000
- * * * * * * * * NOW GET THE FROM ADDRESS, REDUCE 00239000
- * * * * * * * * IT TO A PAGE BOUNDARY AND GET IT 00240000
- * * * * * * * * IT INTO CORE, TO TRANSLATE. 00241000
- * * * * * * * * ------- -------- -------- ------- * 00242000
- L R2,FROM GET FROM ADDRESS @VA04250 00243000
- SRL R2,12 DROP OFF DISPLACEMENT @VA04250 00244000
- SLL R2,12 RESTORE TO A PAGE @VA04250 00245000
- REGET1 ST R2,PAGEFROM SAVE THAT @VA04250 00246000
- BAL R10,GOGET GO FETCH THE PAGE INTO 'BUFF1' @VA04250 00247000
- LTR R15,R15 HOW WAS IT? @VA04250 00248000
- BZ GOODGET1 OK - CARRY ON @VA04250 00249000
- C R15,CODE4 WARNING? @VA04250 00250000
- BNE RETCODE8 NO - GET OUT @VA04250 00251000
- C R2,OFFENDER OFF THE END? @VA04250 00252000
- BE SAVEREG2 YES - STOP THE SEARCH @VA04250 00253000
- BADGET1 L R2,PAGEFROM PAGE NOT IN DUMP - GO FOR NEXT @VA04250 00254000
- A R2,FOURK ADD 4096 @VA04250 00255000
- C R2,TO GONE PAST THE 'TO' ADDRESS? @VA04250 00256000
- BL FROMFIX NO - GO GET NEXT PAG @VA04831 00257500
- B NOTFOUND TOO FAR - QUIT @VA04250 00258000
- FROMFIX L R6,FROM GET LAST 'FROM' ADDRESS @VA04831 00258200
- A R6,FOURK BUMP BY A PAGE @VA04831 00258400
- ST R6,FROM AND REPLACE IT @VA04831 00258600
- B REGET1 CONTINUE @VA04831 00258800
- GOODGET1 ST R2,PAGESTRT SAVE INCORE PAGE ADDRESS @VA04250 00259000
- L R3,FROM GET FROM ADDRESS @VA04250 00260000
- SLL R3,20 STRIP 'FROM' TO A DISP. ONLY @VA04250 00261000
- SRL R3,20 AND RESTORE IT @VA04250 00262000
- AR R2,R3 ADD TO INCORE PAGE BOUNDARY @VA04250 00263000
- ST R2,START SAVE INCORE START ADDR OF HEX @VA04250 00264000
- * * * * * * * * ------- -------- -------- ------- * 00265000
- * * * * * * * * NOW SEE IF START IS IN LAST 8 BYTES 00266000
- * * * * * * * * IF IT IS, GET THE NEXT PAGE INSTEAD 00267000
- * * * * * * * * ------- -------- -------- ------- * 00268000
- CLC START,LASTHEX IS START BELOW LAST HEX LINE? @VA04250 00269000
- BNL STARTHI NO - GO JUGGLE PAGES @VA04250 00270000
- * * * * * * * * ------- -------- -------- ------- * 00271000
- * * * * * * * * NOW TRANSLATE THE PAGE INTO 00272000
- * * * * * * * * EBCDIC IN 'LOCBUFF'. 00273000
- * * * * * * * * ------- -------- -------- ------- * 00274000
- STARTLOW CLC PAGEFROM,LASTPAGE WANTED PAGE SAME AS LAST PAG? @VA04250 00275000
- BE SETSTART BYPASS TRANSLATE @VA04250 00276000
- * * * * * * * * ------- -------- -------- ------- * 00277000
- * * * * * * * * TRANSLATE A PAGE. 00278000
- * * * * * * * * ------- -------- -------- ------- * 00279000
- TRANSET LA R3,TRANINL LENGTH TO TRANSLATE @VA04250 00280000
- L R4,PAGESTRT ADDRESS OF INPUT DATA @VA04250 00281000
- LA R6,TRANINL SET UP A COUNT @VA04250 00282000
- L R7,BUFFADD ADDRESS FOR TRANSLATED STUFF @VA04250 00283000
- GOGOINT BAL R10,GOINT GO TRANSLATE @VA04250 00284000
- MVC 0(TRANOUTL,R7),0(R5) PLUG TRANSLATEEE @VA04250 00285000
- LA R4,TRANINL(R4) BUMP INPUT PTR @VA04250 00286000
- LA R7,TRANOUTL(R7) AND OUTPUT PTR @VA04250 00287000
- BCT R6,GOGOINT NEXT LINE OVER THE TOP? @VA04250 00288000
- * * * * * * * * ------- -------- -------- ------- * 00289000
- * * * * * * * * POINT TO THE ADDRESS IN 'LOCBUFF' 00290000
- * * * * * * * * WHICH CORRESPONDS TO 'START' 00291000
- * * * * * * * * ------- -------- -------- ------- * 00292000
- SETSTART MVC LASTPAGE,PAGEFROM SAVE ADDR OF PAGE JUST XLATED @VA04250 00293000
- L R2,FROM TRUE START ADDRESS @VA04250 00294000
- L R3,PAGEFROM START OF THAT PAGE @VA04250 00295000
- SR R2,R3 GET DISPLACEMENT OF START @VA04250 00296000
- AR R2,R2 DOUBLE IT AS ITS TRANSLATED @VA04250 00297000
- L R3,BUFFADD GET START OF TRANSLATED AREA @VA04250 00298000
- AR R3,R2 AND ADD DIPLACEMENT @VA04250 00299000
- ST R3,TRANSTAR PLUG IN CORE SEARCH START ADDR @VA04250 00300000
- * * * * * * * * ------- -------- -------- ------- * 00301000
- * * * * * * * * DO THE SAME FOR STOP 00302000
- * * * * * * * * ------- -------- -------- ------- * 00303000
- SETSTOP L R2,TO TRUE STOP ADDRESS IN HEX @V4075A2 00304500
- L R4,PAGEFROM START OF HEX SEARCH PAGE @VA04250 00305000
- SR R2,R4 GET BYTE DISPLACEMENT OF STOP @VA04250 00306000
- AR R2,R2 DOUBLE IT @VA04250 00307000
- L R4,BUFFADD IN CORE START OF TRANS AREA @VA04250 00308000
- AR R4,R2 ADD THE DISPLACEMENT @VA04250 00309000
- ST R4,TRANSTOP SAVE STOP ADDRESS @VA04250 00310000
- * * * * * * * * ------- -------- -------- ------- * 00311000
- * * * * * * * * R3 NOW POINTS TO 'START' IN THE 00312000
- * * * * * * * * TRANSLATED BUFFER. SET UP FOR THE 00313000
- * * * * * * * * COMPARE. 00314000
- * * * * * * * * ------- -------- -------- ------- * 00315000
- COMPSET L R2,MASK1 GET FIRST MASK @VA04250 00316000
- L R4,STRING GET ADDRESS OF START OF STRING @VA04250 00317000
- L R4,0(R4) GET FIRST FOUR BYTES OF STRING @VA04250 00318000
- * * * * * * * * ------- -------- -------- ------- * 00319000
- * * * * * * * * HERE STARTS THE COMPARE LOOP. THE 00320000
- * * * * * * * * MASK REG CONTAINS IN ITS LOW 4 BITS 00321000
- * * * * * * * * A 1 BIT FOR EACH NON ASTERISK 00322000
- * * * * * * * * BYTE IN THE FIRST FOUR BYTES OF THE 00323000
- * * * * * * * * INPUT STRING. 00324000
- * * * * * * * * THE MASK REG IS USED AS THE 'OR' 00325000
- * * * * * * * * REG IN AN EXECUTE INSTRUCTION. 00326000
- * * * * * * * * THE OBJECT OF THE EXECUTE IS A 00327000
- * * * * * * * * 'CLM' WHICH COMPARES THE FIRST FOUR 00328000
- * * * * * * * * BYTES OF 'STRING' WITH SUCCESSIVE 00329000
- * * * * * * * * FOUR BYTE AREAS OF THE TRANSLATED 00330000
- * * * * * * * * BUFFER. IF THERE IS A MATCH, THEN 00331000
- * * * * * * * * WE GO ON TO COMPARE THE OTHER 00332000
- * * * * * * * * TWELVE BYTES. EACH WORD IS MAPPED BY 00333000
- * * * * * * * * A DIFFERENT MASK REG. ONLY THAT 00334000
- * * * * * * * * PORTION OF THE STRING WHICH IS 00335000
- * * * * * * * * NON ASTERISK, AND CONTAINS NO 00336000
- * * * * * * * * BLANKS, IS CONSIDERED IN THE 00337000
- * * * * * * * * COMPARE. THIS ALLOWS ONE PATTERN 00338000
- * * * * * * * * OF COMPARES FOR ALL STRING LENGTHS 00339000
- * * * * * * * * UP TO SIXTEEN BYTES. 00340000
- * * * * * * * * ------- -------- -------- ------- * 00341000
- EXECUTOR EX R2,MASKOMP EXECUTE THE COMPARE UNDER MASK @VA04250 00342000
- BE TRY2 GOT A HIT - TRY SECOND WORD @VA04250 00343000
- BUMPTRAN L R1,BOUND GET THE INCREMENT VALUE @V4075A2 00344350
- AR R3,R1 AND BUMP THE COMPARE PTR @V4075A2 00344700
- C R3,TRANSTOP HAVE WE DONE IT ALL? @VA04250 00345000
- BNL NOTFOUND NO MATCH HERE @VA04250 00346000
- C R3,LASTLINE LAST BUFFER LINE - MAY BE O/FLO @V4075A2 00347500
- BNL NEXTPAGE YES - GO FIX IT UP @VA04250 00348000
- B EXECUTOR TRY NEXT COMPARE @VA04250 00349000
- MASKOMP CLM R4,ZMASK,0(R3) COMPARE UNDER MASK @VA04250 00350000
- * * * * * * * * ------- -------- -------- ------- * 00351000
- * * * * * * * * GOT A HIT ON THE FIRST WORD 00352000
- * * * * * * * * TRY SECOND ETC. 00353000
- * * * * * * * * ------- -------- -------- ------- * 00354000
- TRY2 L R2,MASK2 GET NEXT MASK @VA04250 00355000
- LA R3,WORDS(R3) POINT TO NEXT WORD IN BUFFER @VA04250 00356000
- L R4,STRING GET STRING POINTER @VA04250 00357000
- L R4,WORDS(R4) AND GET THE SECOND WORD @VA04250 00358000
- EX R2,MASKOMP DO THE COMPARE @VA04250 00359000
- BE TRY3 GOT ANOTHER HIT - TRY THIRD @VA04250 00360000
- * * * * * * * * ------- -------- -------- ------- * 00361000
- * * * * * * * * MISSED - RESTORE THE COMPARE 00362000
- * * * * * * * * CONDITIONS AND CONTINUE 00363000
- * * * * * * * * ------- -------- -------- ------- * 00364000
- L R2,MASK1 RESTORE MASK @VA04250 00365000
- S R3,FOUR BACKUP DATA POINTER @VA04250 00366000
- L R4,STRING AND PICK UP @VA04250 00367000
- L R4,0(R4) THE FIRST STRING BYTE @VA04250 00368000
- B BUMPTRAN GO TRY NEXT BYTE @VA04250 00369000
- * * * * * * * * ------- -------- -------- ------- * 00370000
- * * * * * * * * GOT A HIT ON FIRST TWO WORDS 00371000
- * * * * * * * * TRY FOR THREE 00372000
- * * * * * * * * ------- -------- -------- ------- * 00373000
- TRY3 L R2,MASK3 GET NEXT MASK @VA04250 00374000
- LA R3,WORDS(R3) POINT TO NEXT WORD IN BUFFER @VA04250 00375000
- L R4,STRING GET STRING POINTER @VA04250 00376000
- L R4,WORD3(R4) AND GET THE SECOND WORD @VA04250 00377000
- EX R2,MASKOMP DO THE COMPARE @VA04250 00378000
- BE TRY4 GOT ANOTHER HIT - TRY FOURTH @VA04250 00379000
- * * * * * * * * ------- -------- -------- ------- * 00380000
- * * * * * * * * MISSED - RESTORE THE COMPARE 00381000
- * * * * * * * * CONDITIONS AND CONTINUE 00382000
- * * * * * * * * ------- -------- -------- ------- * 00383000
- L R2,MASK1 RESTORE MASK @VA04250 00384000
- S R3,EIGHT BACKUP DATA POINTER @VA04250 00385000
- L R4,STRING AND PICK UP @VA04250 00386000
- L R4,0(R4) THE FIRST STRING BYTE @VA04250 00387000
- B BUMPTRAN GO TRY NEXT BYTE @VA04250 00388000
- * * * * * * * * ------- -------- -------- ------- * 00389000
- * * * * * * * * FOURTH AND FINAL TRY 00390000
- * * * * * * * * ------- -------- -------- ------- * 00391000
- TRY4 L R2,MASK4 GET NEXT MASK @VA04250 00392000
- LA R3,WORDS(R3) POINT TO NEXT WORD IN BUFFER @VA04250 00393000
- L R4,STRING GET STRING POINTER @VA04250 00394000
- L R4,WORD4(R4) AND GET THE FOURTH WORD @VA04250 00395000
- EX R2,MASKOMP DO THE COMPARE @VA04250 00396000
- BE MATCH GOT ANOTHER HIT - FULL MATCH @VA04250 00397000
- * * * * * * * * ------- -------- -------- ------- * 00398000
- * * * * * * * * MISSED - RESTORE THE COMPARE 00399000
- * * * * * * * * CONDITIONS AND CONTINUE 00400000
- * * * * * * * * ------- -------- -------- ------- * 00401000
- L R2,MASK1 RESTORE MASK @VA04250 00402000
- S R3,TWELVE BACKUP DATA POINTER @VA04250 00403000
- L R4,STRING AND PICK UP @VA04250 00404000
- L R4,0(R4) THE FIRST STRING BYTE @VA04250 00405000
- B BUMPTRAN GO TRY NEXT BYTE @VA04250 00406000
- * * * * * * * * ------- -------- -------- ------- * 00407000
- * * * * * * * * WE HAVE A MATCH ON ALL FOUR WORDS 00408000
- * * * * * * * * CONVERT THE INCORE ADDRESS OF 00409000
- * * * * * * * * THE MATCH TO A REAL ADDRESS, 00410000
- * * * * * * * * FIND OUT THE DEVICE TYPE, AND 00411000
- * * * * * * * * PASS THE ADDRESS TO EITHER 00412000
- * * * * * * * * 'FED' IF 2741, OR 'FEX' IF 3270 00413000
- * * * * * * * * ------- -------- -------- ------- * 00414000
- MATCH L R2,BUFFADD GET START OF TRAN DATA @VA04250 00415000
- S R3,TWELVE POINT R3 TO START OF MATCH DATA @VA04250 00416000
- SR R3,R2 GET OFFSET INTO BUFFER @VA04250 00417000
- BNM DIVIDE HIT MAY BE IN LAST LINE @VA04250 00418000
- * * * * * * * * ------- -------- -------- ------- * 00419000
- * * * * * * * * HIT CAME IN PRE-BUFFER - LAST 00420000
- * * * * * * * * 16 TRANS BYTES OF PREVIOUS PAGE 00421000
- * * * * * * * * SO REAL ADDRESS IS FOUND THUS:- 00422000
- * * * * * * * * ------- -------- -------- ------- * 00423000
- AR R2,R3 R2 POINTS TO HIT @VA04250 00424000
- L R3,BUFFADD GET BUFFER ADDRESS @VA04250 00425000
- SR R3,R2 R3 HAS #BYTES BEFORE PAGE @VA04250 00426000
- SRL R3,1 DIVIDE BY 2 FOR HEX @VA04250 00427000
- L R2,PAGEFROM REAL ADDRESS OF PAGE @VA04250 00428000
- SR R2,R3 R2 HAS REAL ADDR OF MATCH @VA04250 00429000
- ST R2,MATCHADD SAVE IT @VA04250 00430000
- B CONVERT @VA04250 00431000
- * * * * * * * * ------- -------- -------- ------- * 00432000
- * * * * * * * * THIS IS THE USUAL WAY TO GET 00433000
- * * * * * * * * THE REAL ADDRESS OF THE MATCH 00434000
- * * * * * * * * ------- -------- -------- ------- * 00435000
- DIVIDE SRL R3,1 DIVIDE BY TWO TO GET BYTE DISP @VA04250 00436000
- L R2,PAGEFROM GET REAL PAGE START @VA04250 00437000
- AR R2,R3 R2 HAS REAL ADDRESS OF MATCH. @VA04250 00438000
- ST R2,MATCHADD YOU JUST NEVER KNOW... @VA04250 00439000
- * * * * * * * * ------- -------- -------- ------- * 00440000
- * * * * * * * * CONVERT THIS HEX ADDRESS TO AN 00441000
- * * * * * * * * EBCDIC ADDRESS TO PASS IN A PLIST. 00442000
- * * * * * * * * ------- -------- -------- ------- * 00443000
- CONVERT LA R3,ADRL GET LENGTH TO TRANSLATE @VA04250 00444000
- L R4,MATCHADD GET ADDRESS AND ROUND IT @VA04250 00445000
- SRL R4,4 CONVERT TO A 16 BYTE BOUND @VA04250 00446000
- SLL R4,4 AND RESTORE @VA04250 00447000
- ST R4,MATCHRND SAVE THE ROUNDED MATCH ADDRESS @VA04250 00448000
- LA R4,MATCHRND GET ADDRESS TO TRANSLATE @VA04250 00449000
- BAL R10,GOINT GO TRANSLATE IT @VA04250 00450000
- MVC OUTPLADD(ADDR),TRANAD(R5) PLUG ADDRESS IN PLIST @VA04250 00451000
- LA R2,OUTPLIST PASS OUR PLIST @VA04250 00452000
- * * * * * * * * ------- -------- -------- ------- * 00453000
- * * * * * * * * NOW FIND THE DEVICE TYPE 00454000
- * * * * * * * * ------- -------- -------- ------- * 00455000
- L R3,TYPEADD GO AFTER DEVICE TYPE @VA04250 00456000
- CLI 0(R3),TYPER IS IT A TYPEWRITER? @VA04250 00457000
- BE GOGOFED GO PASS IT TO DMMFED @VA04250 00458000
- * * * * * * * * ------- -------- -------- ------- * 00459000
- * * * * * * * * WE HAVE A GRAPHICS DEVICE. 00460000
- * * * * * * * * PASS THE ADDRESS TO DMMFEX. 00461000
- * * * * * * * * ------- -------- -------- ------- * 00462000
- GOGOFEX MVC OUTPLCMD,X INSERT 'X' COMMAND @VA04250 00463000
- MVC OUTPLEN,FENCE FENCE END OF PLIST @VA04250 00464000
- BAL R10,GOFEX GO TO SCREEN DISPLAY @VA04250 00465000
- B RETURN RETURN @VA04250 00466000
- * * * * * * * * ------- -------- -------- ------- * 00467000
- * * * * * * * * SET A RETCODE OF 8 00468000
- * * * * * * * * ------- -------- -------- ------- * 00469000
- RETCODE8 MVC RETCODE,CODE8 SET 8 @VA04250 00470000
- B RETURN SEND IT BACK @VA04250 00471000
- * * * * * * * * ------- -------- -------- ------- * 00472000
- * * * * * * * * SAVE R2 FOR MESSAGE WRITER 00473000
- * * * * * * * * ------- -------- -------- ------- * 00474000
- SAVEREG2 LR R4,R2 SAVE R2 IN R4 @VA04250 00475000
- B NOTFOUND GO WRITE MESSAGE @VA04250 00476000
- * * * * * * * * ------- -------- -------- ------- * 00477000
- * * * * * * * * GOT A 2741. SET UP FOR FED 00478000
- * * * * * * * * THE FOUND STRING MAY NOT ALL LIE 00479000
- * * * * * * * * ON ONE SIXTEEN BYTE LINE. CHECK 00480000
- * * * * * * * * TO SEE IF THIS IS SO, AND WRITE 00481000
- * * * * * * * * ONE OR TWO LINES ACCORDINGLY. 00482000
- * * * * * * * * ------- -------- -------- ------- * 00483000
- GOGOFED MVC OUTPLCMD,DISPLAY INSERT 'DISPLAY' COMMAND @VA04250 00484000
- MVC OUTPLFEN,FENCE FENCE END @VA04250 00485000
- L R3,STRNGEND GET OFF-END-OF-STRING ADDRESS @VA04250 00486000
- S R3,STRING LESS START @VA04250 00487000
- BCTR R3,R0 LESS 1 - BACK TO LAST BYTE @VA04250 00488000
- SRL R3,1 CONVERT HALF BYTES TO BYTES @VA04250 00489000
- A R3,MATCHADD ADDRESS OF LAST BYTE OF MATCH @VA04250 00490000
- SRL R3,4 CONVERT IT TO A @VA04250 00491000
- SLL R3,4 16 BYTE BOUNDARY. @VA04250 00492000
- L R4,MATCHADD DO THE SAME FOR THE START OF @VA04250 00493000
- SRL R4,4 THE STRING @VA04250 00494000
- SLL R4,4 AND THEN SEE IF THEY ARE SAME @VA04250 00495000
- CR R3,R4 IF NOT - PRINT TWO LINES @VA04250 00496000
- BE WRITE1 BUT IF THEY ARE.... @VA04250 00497000
- MVC OUTPLEN,TWENTY SHOW TWO LINES @VA04250 00498000
- B GOFEDLNK GO TO THE LINK @VA04250 00499000
- WRITE1 MVC OUTPLEN,TEN SHOW ONE LINE @VA04250 00500000
- GOFEDLNK BAL R10,GOFED GO TO FED ROUTINE @VA04250 00501000
- B RETURN RETURN @VA04250 00502000
- * * * * * * * * ------- -------- -------- ------- * 00503000
- * * * * * * * * COMMON BAL TO GET DATA IN CORE 00504000
- * * * * * * * * ------- -------- -------- ------- * 00505000
- GOGET L R15,GETADD ADDRESS @VA04250 00506000
- BALR R14,R15 LINK @VA04250 00507000
- C R15,CODE8 FATAL? @VA04250 00508000
- BE CODECHEK YES - GO BURY IT @VA04250 00509000
- BR R10 NO - LET SENDER HAVE RETURN @VA04250 00510000
- * * * * * * * * ------- -------- -------- ------- * 00511000
- * * * * * * * * COMMON BAL TO HEX-TO-EBCDIC CODE 00512000
- * * * * * * * * ------- -------- -------- ------- * 00513000
- GOINT L R15,INTADD @VA04250 00514000
- BALR R14,R15 LINK @VA04250 00515000
- LTR R15,R15 HOW WAS IT @VA04250 00516000
- BNZ CODECHEK HOW BAD? @VA04250 00517000
- BR R10 @VA04250 00518000
- * * * * * * * * ------- -------- -------- ------- * 00519000
- * * * * * * * * COMMON BAL TO EBCDIC-ADD-TO-HEX 00520000
- * * * * * * * * ------- -------- -------- ------- * 00521000
- GOHEX L R15,HEXADD ADDRESS @VA04250 00522000
- BALR R14,R15 LINK @VA04250 00523000
- LTR R15,R15 CHECK RETURN @VA04250 00524000
- BNZ CODECHEK HOW BAD @VA04250 00525000
- BR R10 BACK OK @VA04250 00526000
- * * * * * * * * ------- -------- -------- ------- * 00527000
- * * * * * * * * COMMON BAL TO DMMFED 00528000
- * * * * * * * * ------- -------- -------- ------- * 00529000
- GOFED L R15,FEDADD ADDRESS @VA04250 00530000
- BALR R14,R15 LINK @VA04250 00531000
- LTR R15,R15 BAD? @VA04250 00532000
- BNZ CODECHEK HOW BAD? @VA04250 00533000
- L R3,HEXADADD LAST DISPLAYED ADDRESS @VA04250 00534000
- ST R2,0(R3) STORE LAST FED ADDRESS @VA04250 00535000
- BR R10 CONTINUE @VA04250 00536000
- * * * * * * * * ------- -------- -------- ------- * 00537000
- * * * * * * * * COMMON BAL TO DMMFEX 00538000
- * * * * * * * * ------- -------- -------- ------- * 00539000
- GOFEX L R15,FEXADD ADDRESS @VA04250 00540000
- BALR R14,R15 LINK @VA04250 00541000
- LTR R15,R15 BAD? @VA04250 00542000
- BNZ CODECHEK HOW BAD @VA04250 00543000
- BR R10 RETURN @VA04250 00544000
- * * * * * * * * ------- -------- -------- ------- * 00545000
- * * * * * * * * POSTS RETURN CODES. 00546000
- * * * * * * * * ------- -------- -------- ------- * 00547000
- CODECHEK ST R15,RETCODE NO - FATAL ERROR - PASS RETURN @VA04250 00548000
- B RETURN GO BACK @VA04250 00549000
- * * * * * * * * ------- -------- -------- ------- * @V4075A2 00549100
- * * * * * * * * NO PARMS WERE FOUND @V4075A2 00549200
- * * * * * * * * ------- -------- -------- ------- * @V4075A2 00549300
- NOPARM LA R8,ERMSG717 INVALID FORM OF COMMAND @V4075A2 00549400
- LA R9,E717L LENGTH @V4075A2 00549500
- BAL R10,WRTERM WRITE @V4075A2 00549600
- MVC RETCODE,CODE4 WARNING RETURN @V4075A2 00549700
- B RETURN RET @V4075A2 00549800
- * * * * * * * * ------- -------- -------- ------- * 00550000
- * * * * * * * * UNSUCCESSFUL SEARCH. 00551000
- * * * * * * * * MOVE THE STRING INTO THE ERROR 00552000
- * * * * * * * * MESSAGE AND DISPLAY IT. 00553000
- * * * * * * * * FIRST GET THE LENGTH OF THE STRING 00554000
- * * * * * * * * (INLENGTH-((STRING-INPUTADD))), IS 00555000
- * * * * * * * * LENGTH OF STRING+(FROM AND TO) 00556000
- * * * * * * * * ------- -------- -------- ------- * 00557000
- NOTFOUND MVI OUTMSG,BLANK SET UP TO CLEAR MSG AREA @VA04250 00558000
- MVC OUTMSG+ONE(LINEL-ONE),OUTMSG CLEAR TO BLANKS @VA04250 00559000
- MVC OUTMSG,ERMSG716 MOVE MSG HEADER @VA04250 00560000
- L R2,STRLNADD ADDRESS OF LENGTH OF STRING @V4075A2 00561000
- L R2,0(R2) LENGTH @VA04250 00562000
- L R3,STRING ADDRESS OF STRING @VA04250 00563000
- C R2,FORTY MAX LENGTH @VA04250 00567000
- BH FIXUP SET IT RIGHT @VA04250 00568000
- EXMOVE EX R2,MOVESTR DO THE MOVE @VA04250 00570000
- B MOREMSG CONTINUE WITH REST OF MESSAGE @VA04250 00571000
- MOVESTR MVC OUTSTRNG(NULL),0(R3) MOVE STRING TO OUTPUT AREA @VA04250 00572000
- FIXUP LA R2,DEFAULT DEFAULT LENGTH - 40 @VA04250 00573000
- B EXMOVE GO MOVE IT @VA04250 00574000
- MOREMSG LA R3,OUTSTRNG GET ADDRESS OF OUTSTRING @VA04250 00575000
- AR R3,R2 ADD LENGTH OF STRING @VA04250 00576000
- MVC 0(L'E716TEXT,R3),E716TEXT MOVE IN TEXT @VA04250 00577000
- LA R8,OUTMSG ADDRESS @VA04250 00578000
- C R4,OFFENDER WAS IT OFF THE END @VA04250 00579000
- BNE NOTOFF NO - WRITE SHORT MESSAGE @VA04250 00580000
- MVC L'E716TEXT(L'E7T2,R3),E7T2 ADD 'OFF END' MSG @VA04250 00581000
- NOTOFF LA R9,LINEL LENGTH TO WRITE @VA04250 00582000
- BAL R10,WRTERM GO WRITE IT @VA04250 00583000
- MVC RETCODE,CODE4 WARNING @VA04250 00584000
- B RETURN @VA04250 00585000
- * * * * * * * * ------- -------- -------- ------- * 00586000
- * * * * * * * * NON-HEX CHAR IN 'STRING' 00587000
- * * * * * * * * ------- -------- -------- ------- * 00588000
- NONHEXST LA R8,ERMSG715 'NON-HEX CHARACTER IN STRING @VA04250 00589000
- LA R9,E715L LENGTH @VA04250 00590000
- BAL R10,WRTERM GO WRITE IT @VA04250 00591000
- MVC RETCODE,CODE4 WARNING RETURN @VA04250 00592000
- B RETURN GO BACK @VA04250 00593000
- * * * * * * * * ------- -------- -------- ------- * 00594000
- * * * * * * * * THIS CLEARS THE SCREEN AND POSITIONS 00595000
- * * * * * * * * THE FOLLOWING WRITE AT THE TOP 00596000
- * * * * * * * * OF THE SCREEN 00597000
- * * * * * * * *------- -------- -------- -------- ------* 00598000
- WRTERM STM R7,R9,SAVCLR SAVE REGS @VA04250 00599000
- L R8,SCRNADD GET THE ADDRESS OF THE SCREEN @VA04250 00600000
- ST R8,CCWC PLUG ADDRESS IN CCW @VA04250 00601000
- LA R8,CCWC CCW ADD @VA04250 00602000
- L R9,CONSADD VIRT CONS ADDRESS LOCATION @VA04250 00603000
- L R9,0(R9) VIRT CON CUU @VA04250 00604000
- MVI CCWC,ERASE RESTORE CMD CODE @VA04250 00605000
- MVI CCWCTL,ON SET ERASE BYTE @VA04250 00606000
- WAITT WAIT FOR PREVIOUS I/O @VA04250 00607000
- CLEAR DC X'83890058' DIAGNOSE @VA04250 00608000
- RELOAD LM R7,R9,SAVCLR RESTORE REGS @VA04250 00609000
- ST R8,PARMLIS1 SAVE MSG TEXT PTR IN PARM LIST @V4075A2 00610100
- ST R9,PARMLIS2 AND TEXT LENGTH @V4075A2 00610200
- LA R1,PARMLIS1 POINTER TO PASS @V4075A2 00610300
- L R15,FEDLNADD ADDRESS OF DMMFEDLN - LINE WRITER@V4075A2 00610400
- BALR R14,R15 GO WRITE THE LINE @V4075A2 00610500
- BR R10 AND RETURN @V4075A2 00610600
- PARMLIS1 DS F PARM1 @V4075A2 00610700
- PARMLIS2 DS F PARM2 @V4075A2 00610800
- FEDLNADD DC V(DMMFEDLN) LINE WRITER ROUTINE @V4075A2 00610900
- * * * * * * * * ------- -------- -------- ------- * 00612000
- * * * * * * * * START IS IN LAST 8 HEX BYTES 00613000
- * * * * * * * * TRANSLATE ONLY THOSE EIGHT, 00614000
- * * * * * * * * SET THEM IN PREBUFF, AND GET THE 00615000
- * * * * * * * * NEXT PAGE INTO LOCBUFF. 00616000
- * * * * * * * * ------- -------- -------- ------- * 00617000
- STARTHI AR R3,R3 DOUBLE DISP AS IT IS TRANSLATED @V4075A2 00618100
- A R3,BUFFADD ADD TO START OF TRANS AREA @V4075A2 00618200
- S R3,EIGHTK AND POINT INTO THE PREBUFFER @V4075A2 00618300
- ST R3,COMPPTR AND SAVE THE COMPARE POINTER @V4075A2 00618400
- LA R3,LAST8L LENGTH OF LAST 8 - 8 BYTES @V4075A2 00618500
- L R4,LASTHEX ADDRESS @VA04250 00619000
- BAL R10,GOINT GO TRANSLATE LAST EIGHT BYTES @VA04250 00620000
- L R3,PREBUFAD ADDRESS OF SPILL AREA @VA04250 00621000
- MVC 0(PREBUFL,R3),0(R5) MOVE TRANSLATED STUFF @VA04250 00622000
- * * * * * * * * ------- -------- -------- ------- * 00623000
- * * * * * * * * NOW GET THE NEXT PAGE INTO CORE 00624000
- * * * * * * * * ------- -------- -------- ------- * 00625000
- GETNEXT L R2,PAGEFROM GET OLD REAL PAGE @VA04250 00626000
- A R2,FOURK ADD 4096 @VA04250 00627000
- REGET2 ST R2,PAGEFROM UPDATE FOR 'MATCH' @VA04250 00628000
- ST R2,LASTPAGE UPDATE FOR NO TRANSLATE @VA04250 00629000
- BAL R10,GOGET FETCH IT IN @VA04250 00630000
- LTR R15,R15 CHECK RETURN @VA04250 00631000
- BZ GOODGET2 OK - CONTINUE @VA04250 00632000
- L R1,PREBUFAD GET THE ADDRESS OF PREBUFF @V4075A2 00633300
- XC 0(PREBUFL,R1),0(R1) AND CLEAR THE PREBUFF @V4075A2 00633600
- C R15,CODE4 WARNING? @VA04250 00634000
- BNE RETCODE8 NO - GET OUT @VA04250 00635000
- C R2,OFFENDER OFF THE END? @VA04250 00636000
- BE SAVEREG2 YES - STOP THE SEARCH @VA04250 00637000
- BADGET2 L R2,PAGEFROM GET PAGE @VA04250 00638000
- A R2,FOURK BUMP BY 4096 @VA04250 00639000
- C R2,TO PAST END OF SEARCH? @VA04250 00640000
- BL REGET2 NO - ZIP AROUND AGAIN @VA04250 00641000
- B NOTFOUND YES - QUIT @VA04250 00642000
- GOODGET2 ST R2,PAGESTRT STORE IT @VA04250 00643000
- * * * * * * * * ------- -------- -------- ------- * 00644000
- * * * * * * * * NOW TRANSLATE THE NEXT PAGE 00645000
- * * * * * * * * ------- -------- -------- ------- * 00646000
- TRANNEXT LA R3,TRANINL LENGTH TO TRANSLATE @V4075A2 00647500
- L R4,PAGESTRT ADDRESS OF INPUT DATA @VA04250 00648000
- LA R6,TRANINL SET UP A COUNT @VA04250 00649000
- L R7,BUFFADD ADDRESS FOR TRANSLATED STUFF @VA04250 00650000
- GOTOINT BAL R10,GOINT GO TRANSLATE @VA04250 00651000
- MVC 0(TRANOUTL,R7),0(R5) PLUG TRANSLATEEE @VA04250 00652000
- LA R4,TRANINL(R4) BUMP INPUT PTR @VA04250 00653000
- LA R7,TRANOUTL(R7) AND OUTPUT PTR @VA04250 00654000
- BCT R6,GOTOINT NEXT LINE OVER THE TOP? @VA04250 00655000
- * * * * * * * * ------- -------- -------- ------- * 00656000
- * * * * * * * * NOW SET START AT PREBUFF AND 00657000
- * * * * * * * * LET 'ER RIP. 00658000
- * * * * * * * * ------- -------- -------- ------- * 00659000
- SCANSET L R3,COMPPTR GET ADDR TO START COMPARE @V4075A2 00660500
- B SETSTOP AND GO GET ADDRESS TO STOP @V4075A2 00661250
- * * * * * * * * ------- -------- -------- ------- * 00665000
- * * * * * * * * WE FELL OFF THE TOP OF THE PAGE. 00666000
- * * * * * * * * GET THE NEXT PAGE . 00667000
- * * * * * * * * ------- -------- -------- ------- * 00668000
- NEXTPAGE S R3,EIGHTK POINT BACK INTO PREBUFF @V4075A2 00669200
- ST R3,COMPPTR AND SAVE IT @V4075A2 00669400
- L R7,PREBUFAD POINT TO PREBUFF @V4075A2 00669600
- L R8,LASTLINE LAST TRANS LINE @VA04250 00670000
- MVC 0(PREBUFL,R7),0(R8) MOVE LAST LINE @VA04250 00671000
- B GETNEXT GO GET NEXT PAGE @VA04250 00672000
- FREEERR LR R2,R15 SAVE THE ERROR RETURN @V4075A2 00672100
- LINEDIT TEXT='ERROR ''...'' IN DMSFREE OR DMSFRET, SEE SYSTEM X00672200
- PROGRAMMERS GUIDE',DOT=NO,SUB=(DEC,(2)) FRETER @V4075A2 00672300
- MVC RETCODE,CODE8 SET BADNESS INDICATOR @V4075A2 00672400
- B RETURN AND QUIT @V4075A2 00672500
- * * * * * * * * ------- -------- -------- ------- * 00673000
- * * * * * * * * CLOSE 00674000
- * * * * * * * * ------- -------- -------- ------- * 00675000
- RETURN L R13,SAVEBACK RESTORE CALLER SAVE PTR @VA04250 00676000
- MVC SAVREG15(L'RETCODE,R13),RETCODE PLUG RETCODE @VA04250 00677000
- LM R14,R12,SAVEDISP(R13) RESTORE CALLERS REGS @VA04250 00678000
- BR R14 RETURN @VA04250 00679000
- * * * * * * * * ------- -------- -------- ------- * 00680000
- * * * * * * * * CONSTANTS FOR CLEAR 00681000
- * * * * * * * * ------- -------- -------- ------- * 00682000
- CCWC CCW X'19',X'0',X'20',1760 ERASE CCW @VA04250 00683000
- CCWCTL EQU CCWC+5 CONTROL BYTE @VA04250 00684000
- SAVCLR DS 3F SAVE FOR CLEAR SUBR. @VA04250 00685000
- SCRNADD DC AL4(SCRNAREA) ADDRESS OF AREA TO BE DISPLAYED @VA04250 00686000
- * * * * * * * * ------- -------- -------- ------- * 00687000
- * * * * * * * * SAVEAREA 00688000
- * * * * * * * * ------- -------- -------- ------- * 00689000
- SAVEAREA DS 0F THIS PROGRAM'S SAVE AREA @VA04250 00690000
- SAVEUSR DS F USER WORD @VA04250 00691000
- SAVEFWD DS F FORWARD POINTER @VA04250 00692000
- SAVEBACK DS F BACKWARD POINTER @VA04250 00693000
- SAVER14 DS F SAVE AREA FOR CALLER'S R14 @VA04250 00694000
- SAVER15 DS F SAVE AREA FOR CALLER'S R15 @VA04250 00695000
- SAVER0 DS F SAVE AREA FOR CALLER'S R0 @VA04250 00696000
- SAVER1 DS F SAVE AREA FOR CALLER'S R1 @VA04250 00697000
- SAVER2 DS F SAVE AREA FOR CALLER'S R2 @VA04250 00698000
- SAVER3 DS F SAVE AREA FOR CALLER'S R3 @VA04250 00699000
- SAVER4 DS F SAVE AREA FOR CALLER'S R4 @VA04250 00700000
- SAVER5 DS F SAVE AREA FOR CALLER'S R5 @VA04250 00701000
- SAVER6 DS F SAVE AREA FOR CALLER'S R6 @VA04250 00702000
- SAVER7 DS F SAVE AREA FOR CALLER'S R7 @VA04250 00703000
- SAVER8 DS F SAVE AREA FOR CALLER'S R8 @VA04250 00704000
- SAVER9 DS F SAVE AREA FOR CALLER'S R9 @VA04250 00705000
- SAVER10 DS F SAVE AREA FOR CALLER'S R10 @VA04250 00706000
- SAVER11 DS F SAVE AREA FOR CALLER'S R11 @VA04250 00707000
- SAVER12 DS F SAVE AREA FOR CALLER'S R12 @VA04250 00708000
- * * * * * * * * ------- -------- -------- ------- * 00709000
- RETCODE DS F RETURN CODE @VA04250 00710000
- PLISTADD DS F ADDRESS OF INPUT PLIST @VA04250 00711000
- HEXADD DC AL4(DMMHEX) ADDRESS-TO-HEX @VA04250 00712000
- GETADD DC AL4(DMMGET) FETCH INTO CORE @VA04250 00713000
- FEDADD DC AL4(DMMFED) LINE WRITER @VA04250 00714000
- FEXADD DC AL4(DMMFEX) SCREEN WRITER @VA04250 00715000
- INTADD DC AL4(DMMINT) HEX-TO-EBCDIC @VA04250 00716000
- HEXADADD DC AL4(HEXAD) LAST DISPLAY ADDRESS (SCROLL) @VA04250 00717000
- INPUTADD DC AL4(INPUT) INPUT LINE @VA04250 00718000
- INLENADD DC AL4(INLENGTH) INPUT LINE LENGTH @VA04250 00719000
- STRNGADD DC AL4(STRINGAD) ADDRESS OF START OF STRING @V4075A2 00719300
- STRLNADD DC AL4(STRINGLN) ADDRESS OF LENGTH OF STRING @V4075A2 00719600
- PREBUFAD DC F'0' SPILL AREA @V4075A2 00720100
- BUFFADD DC F'0' TRANSLATED BUFFER @V4075A2 00720600
- LASTLINE DC F'0' LAST LINE IN TRANS BUFFER @V4075A2 00721100
- TBUFFEND DC F'0' END OF TRANSLATED BUFFER @V4075A2 00721600
- LASTHEX DC AL4(BUFF1+4088) LAST 8-BYTE LINE IN HEX BUFFER @VA04250 00724000
- TYPEADD DC AL4(TYPEFLAG) DEVICE TYPE @VA04250 00725000
- CONSADD DC AL4(CONSOLE) VIRT CONS ADDRESS @VA04250 00726000
- BOUND DC F'1' DEFAULT STEP FOR SEARCH @V4075A2 00726500
- CODE4 DC F'4' WARNING RETURN CODE @VA04250 00727000
- CODE8 DC F'8' FATAL RETURN @VA04250 00728000
- MATCHADD DS F INCORE ADDRESS OF MATCH @VA04250 00729000
- MATCHRND DS F ROUNDED MATCH ADDRESS @VA04250 00730000
- STRING DS F ADDRESS OF START OF 'STRING' @VA04250 00731000
- STRNGEND DS F ADDR FIRST BLANK AFTER STRING @VA04250 00732000
- FROM DS F REAL FROM ADD @VA04250 00733000
- TO DS F REAL TO ADD @VA04250 00734000
- START DS F INCORE FROM ADD @VA04250 00735000
- STOP DS F INCORE TO ADD @VA04250 00736000
- TRANSTAR DS F INCORE TRANSLATED FROM ADDRESS @VA04250 00737000
- TRANSTOP DS F IN CORE TRANSLATED TO ADDRESS @VA04250 00738000
- PAGEFROM DS F REAL PAGE START @VA04250 00739000
- PAGESTRT DS F INCORE PAGE START @VA04250 00740000
- COMPPTR DS F CURR PTR INTO THE TRANS BUFFER @V4075A2 00740500
- OFFENDER DC X'000000FF' '0FF END OF DUMP' INDICATOR @VA04250 00741000
- LASTPAGE DC XL4'FFFFFFFF' PREVIOUS TRANSLATED PAGE @VA04250 00742000
- FOUR DC F'4' FOUR @VA04250 00743000
- EIGHT DC F'8' EIGHT @VA04250 00744000
- TWELVE DC F'12' TWELVE @VA04250 00745000
- SIXTEEN DC F'16' SIXTEEN @VA04250 00746000
- FORTY DC F'40' MAX FOR STRING MSG @VA04250 00747000
- DEC4088 DC F'4088' 4088 @VA04250 00748000
- FOURK DC F'4096' 4096 @VA04250 00749000
- DEC8176 DC F'8176' 8176 @VA04250 00750000
- EIGHTK DC F'8192' 8192 @VA04250 00751000
- MASKS DS 5F MASKS @VA04250 00752000
- ORG MASKS @VA04250 00753000
- MASK DS F FILLER MASK @VA04250 00754000
- MASK4 DS F LAST MASK @VA04250 00755000
- MASK3 DS F MASK @VA04250 00756000
- MASK2 DS F MASK @VA04250 00757000
- MASK1 DS F FIRST MASK @VA04250 00758000
- OUTPLIST DS 8D PLIST @VA04250 00759000
- ORG OUTPLIST PLIST TO PASS TO FED OR FEX @VA04250 00760000
- OUTPLCMD DS D COMMAND @VA04250 00761000
- OUTPLADD DC CL8' ' ADDRESS @VA04250 00762000
- OUTPLEN DS D LENGTH @VA04250 00763000
- OUTPLFEN DS D FENCE @VA04250 00764000
- X DC CL8'X' X COMMAND @VA04250 00765000
- DISPLAY DC CL8'DISPLAY' DISPLAY COMMAND @VA04250 00766000
- TEN DC CL8'10' LENGTH FOR 1 LINE TO FED @VA04250 00767000
- TWENTY DC CL8'20' LENGTH FOR 2 @VA04250 00768000
- FENCE DC XL8'FFFFFFFFFFFFFFFF' FENCE @VA04250 00769000
- BLANKSW DC X'00' BLANK DETECTED YET? SW. @VA04250 00770000
- * * * * * * * * ------- -------- -------- ------- * 00771000
- * * * * * * * * MESSAGES 00772000
- * * * * * * * * ------- -------- -------- ------- * 00773000
- ERMSG715 DC C'DMMLOC715I NON-HEX CHARACTER IN STRING' @VA04250 00774000
- E715L EQU *-ERMSG715 LENGTH @VA04250 00775000
- ERMSG716 DC C'DMMLOC716I STRING ''' @VA04250 00776000
- E716TEXT DC CL11''' NOT FOUND' TEXT @VA04250 00777000
- E7T2 DC C' BEFORE END OF DUMP' @VA04250 00778000
- ERMSG717 DC C'DMMLOC717I INVALID FORM OF LOCATE COMMAND' @VA04250 00779000
- E717L EQU *-ERMSG717 LENGTH @VA04250 00780000
- OUTMSG DS CL19 OUTAREA FOR VARIABLE LENGTH MSG @VA04250 00781000
- OUTSTRNG DS CL61 REST OF OUTAREA @VA04250 00782000
- * * * * * * * * ------- -------- -------- ------- * 00783000
- * * * * * * * * EQUATES 00784000
- * * * * * * * * ------- -------- -------- ------- * 00785000
- ZMASK EQU X'0' MASK FOR CLM @VA04250 00786000
- NULL EQU X'00' CLEAR REG @VA04250 00787000
- ERASE EQU X'19' ERASE BYTE FOR CCW @VA04250 00788000
- BLANK EQU X'40' BLANK SCANNER @VA04250 00789000
- NOBLANK EQU X'40' BLANK SWITCHER @VA04250 00790000
- YESBLANK EQU X'FF' HIT BLANKS IN STRING @VA04250 00791000
- ASTERISK EQU X'5C' ASTERISK @VA04250 00792000
- A EQU X'C1' A @VA04250 00793000
- F EQU X'C6' F @VA04250 00794000
- ZERO EQU X'F0' ZERO @VA04250 00795000
- NINE EQU X'F9' NINE @VA04250 00796000
- TYPER EQU X'FF' TYPEWRITER @VA04250 00797000
- LOCRED EQU X'FF' READ BY LOCATE @VA04250 00798000
- ON EQU X'FF' SWITCH STATUS @VA04250 00799000
- ONE EQU 1 BOMP POINTER @VA04250 00800000
- BIT EQU 1 BIT TO SET IN COMPARE MASK @VA04250 00801000
- TRANAD EQU 2 TRANS ADDRESS @VA04250 00802000
- BYTES EQU 4 FOUR BYTES TO A WORD @VA04250 00803000
- WORDS EQU 4 4 WORDS TO A STRING @VA04250 00804000
- ADRL EQU 4 LENGTH OF ADDRESS @VA04250 00805000
- ADDR EQU 6 LENGTH OF ADDRESS IN PLIST @VA04250 00806000
- WORD3 EQU 8 DISP TO THIRD WORD OF STRING @VA04250 00807000
- LAST8L EQU 8 LENGTH LAST 8 IN TRANS BUFFER @VA04250 00808000
- WORD4 EQU 12 DISP TO FOURTH WORD OF STRING @VA04250 00809000
- SAVEDISP EQU 12 REGS IN SAVE AREA @VA04250 00810000
- SAVREG15 EQU 16 REG 15 IN SAVE AREA @VA04250 00811000
- PREBUFL EQU 16 LENGTH OF PRE BUFFER @V4075A2 00812500
- P3 EQU 16 DISPLACEMENT OF THIRD PARM @VA04250 00813000
- P4 EQU 24 DISP OF FOURTH PARM @VA04250 00814000
- P5 EQU 32 DISP'MENT TO 5TH PARM - BOUNDARY @V4075A2 00814500
- DEFAULT EQU 40 DEFAULT LENGTH @VA04250 00815000
- TRYDIAG EQU 50 TRIES FOR DIAGNOSE @VA04250 00816000
- TRANINL EQU 64 LENGTH OF INPUT TO TRANS @VA04250 00817000
- LINEL EQU 80 LINE LENGTH @VA04250 00818000
- TRANOUTL EQU 128 LENGTH OF A TRANSLATED BLOCK @VA04250 00819000
- * * * * * * * * ------- -------- -------- ------- * 00820000
- * * * * * * * * PATCH AREA 00821000
- * * * * * * * * ------- -------- -------- ------- * 00822000
- PATCH DC 50F'0' PATCH @VA04250 00823000
- LTORG @VA04250 00824000
- REGEQU @VA04250 00828000
- END 00829000
ibm/vm370-lib/dumpscan/dmmloc.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator