Table of Contents

DMMLOC Source

References

Source Listing

DMMLOC.ASSEMBLE.txt
  1. LOC TITLE 'DMMLOC (IPCS) VM/370 - RELEASE 6' 00001000
  2. * 00002000
  3. * 00003000
  4. * MODULE NAME: 00004000
  5. * DMMLOC (SUBROUTINE OF DUMPSCAN) 00005000
  6. * 00006000
  7. * FUNCTION: 00007000
  8. * LOCATE 'STRING' WITHIN THE LIMITS 'FROM' 'TO' 00008000
  9. * 00009000
  10. * ATTRIBUTES: 00010000
  11. * REUSABLE 00011000
  12. * NON-REENTRANT 00012000
  13. * 00013000
  14. * ENTRY POINTS: 00014000
  15. * DMMLOC 00015000
  16. * 00016000
  17. * ENTRY CONDITIONS: 00017000
  18. * R2 POINTS TO A PLIST CONTAINING THE COMMAND 00018000
  19. * 00019000
  20. * EXIT CONDITIONS: 00020000
  21. * 00021000
  22. * CALLS TO OTHER ROUTINES: 00022000
  23. * DMMGET TO FETCH DATA INTO CORE 00023000
  24. * DMMINT TO TRANSLATE HEX TO EBCDIC 00024000
  25. * DMMHEX TO TRANSLATE EBCDIC TO HEX 00025000
  26. * DMMFEX TO WRITE THE FOUND LOCATION TO A SCREEN 00026000
  27. * DMMFED TO WRITE THE FOUND LOCATION TO A TYPEWRITER 00027000
  28. * 00028000
  29. * EXTERNAL REFERENCES: 00029000
  30. * INPUT COMMAND INPUT LINE 00030000
  31. * INLENGTH INPUT LINE LENGTH 00031000
  32. * BUFF1 CURRENT HEX DATA TO BE TRANSLATED 00032000
  33. * TYPEFLAG INDICATOR OF DEVICE TYPE 00033000
  34. * 00034000
  35. * TABLES/WORKAREAS: 00035000
  36. * LOCBUFF TWO PAGE BUFFER FOR TRANSLATED HEX DATA 00036000
  37. * 00037000
  38. * REGISTER USAGE: 00038000
  39. * R15 ADDRESSES OF EXTERNAL ROUTINES 00039000
  40. * R14 RETURNS FROM EXTERNAL ROUTINES 00040000
  41. * R13 SAVE AREA ADDRESS 00041000
  42. * R12 BASE 00042000
  43. * R10 INTERNAL LINKS 00043000
  44. * R9-R2 WORK REGISTERS 00044000
  45. * R2 POINTS TO PLIST PASSED BY CALLER 00045000
  46. * R2 PASSES ADDRESS OF PLIST TO SUBROUTINES 00046000
  47. * 00047000
  48. * NOTES: 00048000
  49. * 00049000
  50. * OPERATION: 00050000
  51. * 'LOCATE' ACCEPTS A COMMAND OF THE FORM:- 00051000
  52. * 'LOCATE' 'STRING' 'FROM' 'TO' 00052000
  53. * WHERE 'STRING' MAY BE ANY CONTIGUOUS STRING 00053000
  54. * OF UP TO 16 HEXADECIMAL DIGITS. 'FROM' IS 00054000
  55. * THE ADDRESS AT WHICH THE SEARCH BEGINS, 00055000
  56. * AND 'TO' IS THE END ADDRESS. 'LOCATE' WILL 00056000
  57. * SEARCH THAT RANGE OF THE DUMP, SEARCHING 00057000
  58. * ON A HALF BYTE BOUNDARY, FOR THE GIVEN STRING. 00058000
  59. * SEARCH STOPS WHEN EITHER THE 'TO' ADDRESS IS 00059000
  60. * REACHED, OR THE STRING IS FOUND. 'LOCATE WILL 00060000
  61. * PASS OVER PAGES NOT IN THE DUMP. 00061000
  62. * M.O. IS AS FOLLOWS. THE INPUT STRING IS SCANNED 00062000
  63. * FOR VALID, CONTIGUOUS HEX CHARACTERS. EACH ONE 00063000
  64. * CAUSES A BIT TO BE SET IN A MASK HALF BYTE. 00064000
  65. * THERE ARE FOUR MASKS, ALLOWING A STRING LENGTH 00065000
  66. * OF 16 CHARACTERS. THEN THE PAGE CONTAINING THE 00066000
  67. * 'FROM' ADDRESS IS BROUGHT INTO 'BUFF1' BY DMMGET. 00067000
  68. * THE HEX DATA IS THEN XLATED INTO EBCDIC IN 'LOCBUFF' 00068000
  69. * (IF THE 'FROM' ADDRESS IS LESS THAN 8 BYTES, 00069000
  70. * ((16 HEX DIGITS)) FROM THE END OF THE PAGE, 00070000
  71. * THE LAST 8 BYTES ARE TRANSLATED INTO THE 16 BYTES 00071000
  72. * IMMEDIATELY PRECEDING 'LOCBUFF', AND THE NEXT PAGE 00072000
  73. * IS TRANSLATED. THIS IS BECAUSE THE STRING MIGHT 00073000
  74. * RUN ACROSS A PAGE BOUNDARY.) THE FIRST FOUR BYTES 00074000
  75. * OF THE STRING ARE LOADED INTO R4. THE MASK IS LOADED 00075000
  76. * INTO R2, AND R3 IS POINTED AT THE TRANSLATED 00076000
  77. * EQUIVALENT 'TO' LOCATION IN 'LOCBUFF'. AN EXECUTE 00077000
  78. * INSTRUCTION WITH A 'CLM' AS ITS OBJECT, IS USED 00078000
  79. * FOR THE COMPARE. IF NO MATCH OCCURS, THE PTR IN R3 00079000
  80. * IS UPDATED, THE LIMITS ARE CHECKED, AND ANOTHER 00080000
  81. * COMPARISON IS MADE UNTIL THE 'TO' EQUIVALENT 00081000
  82. * ADDRESS IS REACHED. IF THERE IS A MATCH, THE 00082000
  83. * MASK IS REPLACED BY THE NEXT ONE, THE R3 POINTER 00083000
  84. * IS UPDATED BY 4 AND THE NEXT WORD IN THE STRING IS 00084000
  85. * COMPARED AGAINST THE NEXT WORD IN THE TRANSLATED 00085000
  86. * BUFFER. THIS IS CONTINUED UNTIL ALL WORDS IN THE 00086000
  87. * STRING AGREE WITH THE BUFFER, SUBJECT TO THE MASKING. 00087000
  88. * THE MATCHING ADDRESS IN R3 FROM 'LOCBUFF', IS 00088000
  89. * CONVERTED BACK TO A REAL ADDRESS FROM THE DUMP. 00089000
  90. * THIS ADDRESS IS PASSED TO EITHER DMMFED, FOR 00090000
  91. * A TYPEWRITER TYPE DEVICE, OR DMMFEX FOR A GRAPHICS 00091000
  92. * DEVICE. 00092000
  93. * 00093000
  94. * ERROR MESSAGES: 00094000
  95. * DMMLOC715I NON-HEX CHARACTER IN STRING 00095000
  96. * DMMLOC716I STRING ' ' NOT FOUND. 00096000
  97. * DMMLOC717I INVALID FORM OF INPUT. 00097000
  98. * 00098000
  99. * * * * * * * *------- -------- -------- -------- ------* 00099000
  100. DMMLOC CSECT @VA04250 00100000
  101. ENTRY PREBUFAD ADDRESS OF GOTTEN BUFFER @V4075A2 00100500
  102. ENTRY BOUND INCREMENT PARAMETER. @V4075A2 00100600
  103. EXTRN INPUT ADDRESS OF INPUT LINE @VA04250 00101000
  104. EXTRN SCRNAREA SCREEN @VA04250 00102000
  105. EXTRN INLENGTH INPUT LINE LENGTH @VA04250 00103000
  106. EXTRN STRINGAD LOC SEARCH ARGUMENT @V4075A2 00103300
  107. EXTRN STRINGLN LENGTH OF SEARCH ARG. @V4075A2 00103600
  108. EXTRN HEXAD LAST DISPLAY ADDRESS FOR SCROLL @VA04250 00104000
  109. EXTRN BUFF1 HEX BUFFER @VA04250 00105000
  110. EXTRN DMMFED LINE WRITE @VA04250 00106000
  111. EXTRN DMMFEX SCREEN WRITE @VA04250 00107000
  112. EXTRN DMMGET DATA FETCH @VA04250 00108000
  113. EXTRN DMMHEX BCD - TO - HEX @VA04250 00109000
  114. EXTRN DMMINT HEX TO BCD @VA04250 00110000
  115. EXTRN TYPEFLAG DEVICE TYPE @VA04250 00111000
  116. EXTRN CONSOLE VIRT CONS ADDRESS @VA04250 00112000
  117. STM R14,R12,SAVEDISP(R13) SAVE CALLERS REGS @VA04250 00113000
  118. LR R12,R15 ADDRESSABILITY @VA04250 00114000
  119. USING DMMLOC,R12 @VA04250 00115000
  120. ST R13,SAVEBACK CALLERS SAVE AREA @VA04250 00116000
  121. B EYECATCH BYPASS EYECATCHER @VA04250 00117000
  122. DS 0D ALIGN @VA04250 00118000
  123. DC CL8'DMMLOC' EYECATCHER @VA04250 00119000
  124. RELLEV DC C'REL4LEV0' RELEASE AND LEVEL @V4075A1 00120000
  125. EYECATCH LA R13,SAVEAREA LOC SAVEAREA @VA04250 00121000
  126. XC RETCODE,RETCODE CLEAR RETURN CODE @VA04250 00122000
  127. ************************************************************ @V4075A2 00122100
  128. * WE NEED A 2 PAGE (8K) BUFFER INTO WHICH THE PAGE BEING @V4075A2 00122125
  129. * SCANNED WILL BE TRANSLATED ( HEX INTO EBCDIC). THIS @V4075A2 00122150
  130. * CHECK TO SEE IF IT WAS ALREADY DMSFREED, AND IF SO, @V4075A2 00122175
  131. * BYPASSES THE DMSFREE. IF NOT, IT GETS 1030 DWORDS. @V4075A2 00122200
  132. * THE TEST IS MADE ON THE ADDRESS OF THE FIRST BYTE @V4075A2 00122225
  133. * PAST THE END OF THE BUFFER, WHICH IS '0' UNTIL THE @V4075A2 00122250
  134. * DMSFREE IS DONE. @V4075A2 00122275
  135. ************************************************************ @V4075A2 00122300
  136. L R3,TBUFFEND TEST TO SEE IF CORE IS GOTTEN @V4075A2 00122325
  137. LTR R3,R3 FOR THE TRANSLATED BUFF YET @V4075A2 00122350
  138. BNZ NOFREE GOOD ADD - DONT GET CORE @V4075A2 00122375
  139. DMSFREE DWORDS=(1030),ERR=FREEERR TRANSLATED DATA @V4075A2 00122400
  140. ST R1,PREBUFAD ADDRESS OF GOTTEN CORE @V4075A2 00122425
  141. LA R3,PREBUFL ADD THE LENGTH OF THE PREBUFFER @V4075A2 00122450
  142. AR R3,R1 TO GET TO THE MAIN BUFFER @V4075A2 00122475
  143. ST R3,BUFFADD SAVE THAT @V4075A2 00122500
  144. L R1,DEC8176 DISPLACEMENT OF LAST BUFF LINE @V4075A2 00122525
  145. AR R3,R1 ADD TO BUFFER ADDRESS @V4075A2 00122550
  146. ST R3,LASTLINE AND SAVE THAT @V4075A2 00122575
  147. LA R3,16(R3) POINT TO END OF BUFFER @V4075A2 00122600
  148. NOFREE ST R3,TBUFFEND AND SAVE THAT @V4075A2 00122625
  149. ********************************************************************** 00123500
  150. * SAVE THE PLIST PTR, AND POINT TO THE START OF THE STRING 00124500
  151. ********************************************************************** 00125500
  152. ST R2,PLISTADD SAVE PLIST PTR @V4075A2 00126500
  153. L R4,STRNGADD ADDRESS OF STRING @V4075A2 00127500
  154. ST R4,STRING AND PLUG IT @V4075A2 00128500
  155. ********************************************************************** 00129500
  156. * NOW R4 POINTS TO THE FIRST CHAR OF THE SEARCH @V4075A2 00130500
  157. * ARG WHOSE ADDR IS STRING. SCAN DOWN THE STRING @V4075A2 00131500
  158. * CHECKING HEX VALIDITY AND COUNTING THE BYTES. @V4075A2 00132500
  159. * DO THIS FOR UP TO 16 BYTES. WHEN A BLANK IS @V4075A2 00133500
  160. * FOUND, END THE STRING. @V4075A2 00134500
  161. ********************************************************************** 00135500
  162. MVI BLANKSW,NOBLANK NO BLANKS YET IN STRING @VA04250 00177000
  163. LA R2,BYTES COUNT BYTES IN A WORD - 4 @VA04250 00178000
  164. LA R3,WORDS COUNT WORDS IN THE STRING - 4 @VA04250 00179000
  165. * * * * * * * *------- -------- -------- -------- ------* 00180000
  166. * * * * * * * * FIRST CHECK INPUT VALIDITY 00181000
  167. * * * * * * * *------- -------- -------- -------- ------* 00182000
  168. ZEROMASK LA R5,NULL ZERO MASK REGISTER @VA04250 00183000
  169. VALID SLL R5,1 SHIFT THE MASK @VA04250 00184000
  170. CLI BLANKSW,YESBLANK DID WE END THE STRING YET? @VA04250 00185000
  171. BE BUMPPTR YES - KEEP GOING TO FILL MASKS @VA04250 00186000
  172. * * * * * * * * ------- -------- -------- ------- * 00187000
  173. * * * * * * * * ARE THESE ALL HEX CHARACTERS 00188000
  174. * * * * * * * * ------- -------- -------- ------- * 00189000
  175. HEXCHECK CLI 0(R4),A BELOW 'A' @VA04250 00190000
  176. BL BLANKCHK NON HEX @VA04250 00191000
  177. CLI 0(R4),F ABOVE 'F' @VA04250 00192000
  178. BH HICHEK SO FAR @VA04250 00193000
  179. B SETABIT OK - USE IT @VA04250 00194000
  180. HICHEK CLI 0(R4),ZERO BELOW '0' @VA04250 00195000
  181. BL BLANKCHK NON HEX @VA04250 00196000
  182. CLI 0(R4),NINE ABOVE '9' @VA04250 00197000
  183. BH BLANKCHK NON HEX @VA04250 00198000
  184. SETABIT LA R5,BIT(R5) SET A BIT FOR A VALID CHAR @VA04250 00199000
  185. B BUMPPTR GO GET NEXT @VA04250 00200000
  186. BLANKCHK CLI 0(R4),BLANK BLANKYET? @VA04250 00201000
  187. BNE NONHEXST NO - NON-HEX IN STRING @VA04250 00202000
  188. ST R4,STRNGEND SAVE ADDRESS OF FIRST BYTE PAST @VA04250 00203000
  189. MVI BLANKSW,YESBLANK SET SW ON @VA04250 00204000
  190. BUMPPTR LA R4,ONE(R4) NEXT @VA04250 00205000
  191. BCT R2,VALID GO DO NEXT BYTE, THIS WORD @VA04250 00206000
  192. * * * * * * * * ------- -------- -------- ------- * 00207000
  193. * * * * * * * * NOW WE ARE ROUND THE SMALL LOOP 00208000
  194. * * * * * * * * AND HAVE PUT A BIT OR NOBIT FOR 00209000
  195. * * * * * * * * EACH BYTE IN THE FIRST WORD 00210000
  196. * * * * * * * * INTO THE MASK REG R5. NOW SAVE 00211000
  197. * * * * * * * * THE MASK AND SET UP FOR NEXT WORD. 00212000
  198. * * * * * * * * ------- -------- -------- ------- * 00213000
  199. SLL R3,2 CONVERT BYTE COUNT TO WORD COUN @VA04250 00214000
  200. ST R5,MASKS(R3) STORE IT @VA04250 00215000
  201. SRL R3,2 RESTORE R3 @VA04250 00216000
  202. LA R2,BYTES RESET COUNT IN R4 @VA04250 00217000
  203. BCT R3,ZEROMASK ROUND AGAIN @VA04250 00218000
  204. * * * * * * * * ------- -------- -------- ------- * 00219000
  205. * * * * * * * * NOW ALL FOUR MASKS ARE STORED 00220000
  206. * * * * * * * * TRANSLATE 'FROM' AND 'TO' ADDRESSES 00221000
  207. * * * * * * * * IN THE PLIST TO HEX. 00222000
  208. * * * * * * * * ------- -------- -------- ------- * 00223000
  209. L R4,PLISTADD ADDRESS OF INPUT PLIST @VA04250 00224000
  210. LA R4,P3(R4) 'FROM ' ADDRESS - PLIST THIRD @VA04250 00225000
  211. CLI 0(R4),YESBLANK IS 'FROM' ADDRESS SUPPLIED? @VA04250 00226000
  212. BE NOPARM NO, GO ISSUED MSG717 @VA04250 00227000
  213. BAL R10,GOHEX GO HEX IT @VA04250 00228000
  214. ST R5,FROM SAVE HEX START ADDRESS @VA04250 00229000
  215. L R4,PLISTADD ADDRESS OF INPUT PLIST @VA04250 00230000
  216. LA R4,P4(R4) 'TO' ADDRESS PLIST FOURTH @VA04250 00231000
  217. CLI 0(R4),YESBLANK IS 'TO' ADDRESS SUPPLIED? @VA04250 00232000
  218. BE NOPARM NO, GO ISSUE MSG717 @VA04250 00233000
  219. BAL R10,GOHEX CONVERT TO HEX @VA04250 00234000
  220. ST R5,TO SAVE IT @VA04250 00235000
  221. ************************************************************ @V4075A2 00236100
  222. * SET THE DEFAULT BOUND VALUE, THEN @V4075A2 00236150
  223. * SEE IF THERE IS A 5TH PARM - THE SEARCH BOUNDARY @V4075A2 00236200
  224. * IF THERE IS, GO TRANSLATE IT TO A HEX VALUE. @V4075A2 00236250
  225. ************************************************************ @V4075A2 00236300
  226. LA R4,ONE SET BOUND TO THE DEFAULT - 1 @V4075A2 00236350
  227. ST R4,BOUND AND PLUG IT @V4075A2 00236400
  228. L R4,PLISTADD POINT TO PLIST @V4075A2 00236450
  229. LA R4,P5(R4) AND GET THE FIFTH PARM @V4075A2 00236500
  230. CLC FENCE,0(R4) IS THERE A BOUNDARY PARM? @V4075A2 00236550
  231. BE HILOCHEK NO - LET MY DEFAULT GO @V4075A2 00236600
  232. BAL R10,GOHEX YES - GO TRANSLATE EBCD TO BIN @V4075A2 00236650
  233. LTR R5,R5 CHECK FOR ZERO INCREMENT @VA09878 00236660
  234. BZ NOPARM ZERO-THATS WRONG TELL THEM @VA09878 00236670
  235. C R5,FOURK CHECK FOR MAX VALUE @V4075A2 00236700
  236. BNH DOUBLE NOT OVER MAX - USE IT @V4075A2 00236750
  237. L R5,FOURK SET TO MAX @V4075A2 00236800
  238. DOUBLE SLL R5,ONE CONVERT TO BYTES @V4075A2 00236850
  239. ST R5,BOUND AND SET THE BOUND VALUE @V4075A2 00236900
  240. HILOCHEK CLC FROM,TO NOW SEE THAT TO IS ABOVE FROM @V4075A2 00236950
  241. BH NOTFOUND YES - KICK IT BACK @VA04250 00237000
  242. * * * * * * * * ------- -------- -------- ------- * 00238000
  243. * * * * * * * * NOW GET THE FROM ADDRESS, REDUCE 00239000
  244. * * * * * * * * IT TO A PAGE BOUNDARY AND GET IT 00240000
  245. * * * * * * * * IT INTO CORE, TO TRANSLATE. 00241000
  246. * * * * * * * * ------- -------- -------- ------- * 00242000
  247. L R2,FROM GET FROM ADDRESS @VA04250 00243000
  248. SRL R2,12 DROP OFF DISPLACEMENT @VA04250 00244000
  249. SLL R2,12 RESTORE TO A PAGE @VA04250 00245000
  250. REGET1 ST R2,PAGEFROM SAVE THAT @VA04250 00246000
  251. BAL R10,GOGET GO FETCH THE PAGE INTO 'BUFF1' @VA04250 00247000
  252. LTR R15,R15 HOW WAS IT? @VA04250 00248000
  253. BZ GOODGET1 OK - CARRY ON @VA04250 00249000
  254. C R15,CODE4 WARNING? @VA04250 00250000
  255. BNE RETCODE8 NO - GET OUT @VA04250 00251000
  256. C R2,OFFENDER OFF THE END? @VA04250 00252000
  257. BE SAVEREG2 YES - STOP THE SEARCH @VA04250 00253000
  258. BADGET1 L R2,PAGEFROM PAGE NOT IN DUMP - GO FOR NEXT @VA04250 00254000
  259. A R2,FOURK ADD 4096 @VA04250 00255000
  260. C R2,TO GONE PAST THE 'TO' ADDRESS? @VA04250 00256000
  261. BL FROMFIX NO - GO GET NEXT PAG @VA04831 00257500
  262. B NOTFOUND TOO FAR - QUIT @VA04250 00258000
  263. FROMFIX L R6,FROM GET LAST 'FROM' ADDRESS @VA04831 00258200
  264. A R6,FOURK BUMP BY A PAGE @VA04831 00258400
  265. ST R6,FROM AND REPLACE IT @VA04831 00258600
  266. B REGET1 CONTINUE @VA04831 00258800
  267. GOODGET1 ST R2,PAGESTRT SAVE INCORE PAGE ADDRESS @VA04250 00259000
  268. L R3,FROM GET FROM ADDRESS @VA04250 00260000
  269. SLL R3,20 STRIP 'FROM' TO A DISP. ONLY @VA04250 00261000
  270. SRL R3,20 AND RESTORE IT @VA04250 00262000
  271. AR R2,R3 ADD TO INCORE PAGE BOUNDARY @VA04250 00263000
  272. ST R2,START SAVE INCORE START ADDR OF HEX @VA04250 00264000
  273. * * * * * * * * ------- -------- -------- ------- * 00265000
  274. * * * * * * * * NOW SEE IF START IS IN LAST 8 BYTES 00266000
  275. * * * * * * * * IF IT IS, GET THE NEXT PAGE INSTEAD 00267000
  276. * * * * * * * * ------- -------- -------- ------- * 00268000
  277. CLC START,LASTHEX IS START BELOW LAST HEX LINE? @VA04250 00269000
  278. BNL STARTHI NO - GO JUGGLE PAGES @VA04250 00270000
  279. * * * * * * * * ------- -------- -------- ------- * 00271000
  280. * * * * * * * * NOW TRANSLATE THE PAGE INTO 00272000
  281. * * * * * * * * EBCDIC IN 'LOCBUFF'. 00273000
  282. * * * * * * * * ------- -------- -------- ------- * 00274000
  283. STARTLOW CLC PAGEFROM,LASTPAGE WANTED PAGE SAME AS LAST PAG? @VA04250 00275000
  284. BE SETSTART BYPASS TRANSLATE @VA04250 00276000
  285. * * * * * * * * ------- -------- -------- ------- * 00277000
  286. * * * * * * * * TRANSLATE A PAGE. 00278000
  287. * * * * * * * * ------- -------- -------- ------- * 00279000
  288. TRANSET LA R3,TRANINL LENGTH TO TRANSLATE @VA04250 00280000
  289. L R4,PAGESTRT ADDRESS OF INPUT DATA @VA04250 00281000
  290. LA R6,TRANINL SET UP A COUNT @VA04250 00282000
  291. L R7,BUFFADD ADDRESS FOR TRANSLATED STUFF @VA04250 00283000
  292. GOGOINT BAL R10,GOINT GO TRANSLATE @VA04250 00284000
  293. MVC 0(TRANOUTL,R7),0(R5) PLUG TRANSLATEEE @VA04250 00285000
  294. LA R4,TRANINL(R4) BUMP INPUT PTR @VA04250 00286000
  295. LA R7,TRANOUTL(R7) AND OUTPUT PTR @VA04250 00287000
  296. BCT R6,GOGOINT NEXT LINE OVER THE TOP? @VA04250 00288000
  297. * * * * * * * * ------- -------- -------- ------- * 00289000
  298. * * * * * * * * POINT TO THE ADDRESS IN 'LOCBUFF' 00290000
  299. * * * * * * * * WHICH CORRESPONDS TO 'START' 00291000
  300. * * * * * * * * ------- -------- -------- ------- * 00292000
  301. SETSTART MVC LASTPAGE,PAGEFROM SAVE ADDR OF PAGE JUST XLATED @VA04250 00293000
  302. L R2,FROM TRUE START ADDRESS @VA04250 00294000
  303. L R3,PAGEFROM START OF THAT PAGE @VA04250 00295000
  304. SR R2,R3 GET DISPLACEMENT OF START @VA04250 00296000
  305. AR R2,R2 DOUBLE IT AS ITS TRANSLATED @VA04250 00297000
  306. L R3,BUFFADD GET START OF TRANSLATED AREA @VA04250 00298000
  307. AR R3,R2 AND ADD DIPLACEMENT @VA04250 00299000
  308. ST R3,TRANSTAR PLUG IN CORE SEARCH START ADDR @VA04250 00300000
  309. * * * * * * * * ------- -------- -------- ------- * 00301000
  310. * * * * * * * * DO THE SAME FOR STOP 00302000
  311. * * * * * * * * ------- -------- -------- ------- * 00303000
  312. SETSTOP L R2,TO TRUE STOP ADDRESS IN HEX @V4075A2 00304500
  313. L R4,PAGEFROM START OF HEX SEARCH PAGE @VA04250 00305000
  314. SR R2,R4 GET BYTE DISPLACEMENT OF STOP @VA04250 00306000
  315. AR R2,R2 DOUBLE IT @VA04250 00307000
  316. L R4,BUFFADD IN CORE START OF TRANS AREA @VA04250 00308000
  317. AR R4,R2 ADD THE DISPLACEMENT @VA04250 00309000
  318. ST R4,TRANSTOP SAVE STOP ADDRESS @VA04250 00310000
  319. * * * * * * * * ------- -------- -------- ------- * 00311000
  320. * * * * * * * * R3 NOW POINTS TO 'START' IN THE 00312000
  321. * * * * * * * * TRANSLATED BUFFER. SET UP FOR THE 00313000
  322. * * * * * * * * COMPARE. 00314000
  323. * * * * * * * * ------- -------- -------- ------- * 00315000
  324. COMPSET L R2,MASK1 GET FIRST MASK @VA04250 00316000
  325. L R4,STRING GET ADDRESS OF START OF STRING @VA04250 00317000
  326. L R4,0(R4) GET FIRST FOUR BYTES OF STRING @VA04250 00318000
  327. * * * * * * * * ------- -------- -------- ------- * 00319000
  328. * * * * * * * * HERE STARTS THE COMPARE LOOP. THE 00320000
  329. * * * * * * * * MASK REG CONTAINS IN ITS LOW 4 BITS 00321000
  330. * * * * * * * * A 1 BIT FOR EACH NON ASTERISK 00322000
  331. * * * * * * * * BYTE IN THE FIRST FOUR BYTES OF THE 00323000
  332. * * * * * * * * INPUT STRING. 00324000
  333. * * * * * * * * THE MASK REG IS USED AS THE 'OR' 00325000
  334. * * * * * * * * REG IN AN EXECUTE INSTRUCTION. 00326000
  335. * * * * * * * * THE OBJECT OF THE EXECUTE IS A 00327000
  336. * * * * * * * * 'CLM' WHICH COMPARES THE FIRST FOUR 00328000
  337. * * * * * * * * BYTES OF 'STRING' WITH SUCCESSIVE 00329000
  338. * * * * * * * * FOUR BYTE AREAS OF THE TRANSLATED 00330000
  339. * * * * * * * * BUFFER. IF THERE IS A MATCH, THEN 00331000
  340. * * * * * * * * WE GO ON TO COMPARE THE OTHER 00332000
  341. * * * * * * * * TWELVE BYTES. EACH WORD IS MAPPED BY 00333000
  342. * * * * * * * * A DIFFERENT MASK REG. ONLY THAT 00334000
  343. * * * * * * * * PORTION OF THE STRING WHICH IS 00335000
  344. * * * * * * * * NON ASTERISK, AND CONTAINS NO 00336000
  345. * * * * * * * * BLANKS, IS CONSIDERED IN THE 00337000
  346. * * * * * * * * COMPARE. THIS ALLOWS ONE PATTERN 00338000
  347. * * * * * * * * OF COMPARES FOR ALL STRING LENGTHS 00339000
  348. * * * * * * * * UP TO SIXTEEN BYTES. 00340000
  349. * * * * * * * * ------- -------- -------- ------- * 00341000
  350. EXECUTOR EX R2,MASKOMP EXECUTE THE COMPARE UNDER MASK @VA04250 00342000
  351. BE TRY2 GOT A HIT - TRY SECOND WORD @VA04250 00343000
  352. BUMPTRAN L R1,BOUND GET THE INCREMENT VALUE @V4075A2 00344350
  353. AR R3,R1 AND BUMP THE COMPARE PTR @V4075A2 00344700
  354. C R3,TRANSTOP HAVE WE DONE IT ALL? @VA04250 00345000
  355. BNL NOTFOUND NO MATCH HERE @VA04250 00346000
  356. C R3,LASTLINE LAST BUFFER LINE - MAY BE O/FLO @V4075A2 00347500
  357. BNL NEXTPAGE YES - GO FIX IT UP @VA04250 00348000
  358. B EXECUTOR TRY NEXT COMPARE @VA04250 00349000
  359. MASKOMP CLM R4,ZMASK,0(R3) COMPARE UNDER MASK @VA04250 00350000
  360. * * * * * * * * ------- -------- -------- ------- * 00351000
  361. * * * * * * * * GOT A HIT ON THE FIRST WORD 00352000
  362. * * * * * * * * TRY SECOND ETC. 00353000
  363. * * * * * * * * ------- -------- -------- ------- * 00354000
  364. TRY2 L R2,MASK2 GET NEXT MASK @VA04250 00355000
  365. LA R3,WORDS(R3) POINT TO NEXT WORD IN BUFFER @VA04250 00356000
  366. L R4,STRING GET STRING POINTER @VA04250 00357000
  367. L R4,WORDS(R4) AND GET THE SECOND WORD @VA04250 00358000
  368. EX R2,MASKOMP DO THE COMPARE @VA04250 00359000
  369. BE TRY3 GOT ANOTHER HIT - TRY THIRD @VA04250 00360000
  370. * * * * * * * * ------- -------- -------- ------- * 00361000
  371. * * * * * * * * MISSED - RESTORE THE COMPARE 00362000
  372. * * * * * * * * CONDITIONS AND CONTINUE 00363000
  373. * * * * * * * * ------- -------- -------- ------- * 00364000
  374. L R2,MASK1 RESTORE MASK @VA04250 00365000
  375. S R3,FOUR BACKUP DATA POINTER @VA04250 00366000
  376. L R4,STRING AND PICK UP @VA04250 00367000
  377. L R4,0(R4) THE FIRST STRING BYTE @VA04250 00368000
  378. B BUMPTRAN GO TRY NEXT BYTE @VA04250 00369000
  379. * * * * * * * * ------- -------- -------- ------- * 00370000
  380. * * * * * * * * GOT A HIT ON FIRST TWO WORDS 00371000
  381. * * * * * * * * TRY FOR THREE 00372000
  382. * * * * * * * * ------- -------- -------- ------- * 00373000
  383. TRY3 L R2,MASK3 GET NEXT MASK @VA04250 00374000
  384. LA R3,WORDS(R3) POINT TO NEXT WORD IN BUFFER @VA04250 00375000
  385. L R4,STRING GET STRING POINTER @VA04250 00376000
  386. L R4,WORD3(R4) AND GET THE SECOND WORD @VA04250 00377000
  387. EX R2,MASKOMP DO THE COMPARE @VA04250 00378000
  388. BE TRY4 GOT ANOTHER HIT - TRY FOURTH @VA04250 00379000
  389. * * * * * * * * ------- -------- -------- ------- * 00380000
  390. * * * * * * * * MISSED - RESTORE THE COMPARE 00381000
  391. * * * * * * * * CONDITIONS AND CONTINUE 00382000
  392. * * * * * * * * ------- -------- -------- ------- * 00383000
  393. L R2,MASK1 RESTORE MASK @VA04250 00384000
  394. S R3,EIGHT BACKUP DATA POINTER @VA04250 00385000
  395. L R4,STRING AND PICK UP @VA04250 00386000
  396. L R4,0(R4) THE FIRST STRING BYTE @VA04250 00387000
  397. B BUMPTRAN GO TRY NEXT BYTE @VA04250 00388000
  398. * * * * * * * * ------- -------- -------- ------- * 00389000
  399. * * * * * * * * FOURTH AND FINAL TRY 00390000
  400. * * * * * * * * ------- -------- -------- ------- * 00391000
  401. TRY4 L R2,MASK4 GET NEXT MASK @VA04250 00392000
  402. LA R3,WORDS(R3) POINT TO NEXT WORD IN BUFFER @VA04250 00393000
  403. L R4,STRING GET STRING POINTER @VA04250 00394000
  404. L R4,WORD4(R4) AND GET THE FOURTH WORD @VA04250 00395000
  405. EX R2,MASKOMP DO THE COMPARE @VA04250 00396000
  406. BE MATCH GOT ANOTHER HIT - FULL MATCH @VA04250 00397000
  407. * * * * * * * * ------- -------- -------- ------- * 00398000
  408. * * * * * * * * MISSED - RESTORE THE COMPARE 00399000
  409. * * * * * * * * CONDITIONS AND CONTINUE 00400000
  410. * * * * * * * * ------- -------- -------- ------- * 00401000
  411. L R2,MASK1 RESTORE MASK @VA04250 00402000
  412. S R3,TWELVE BACKUP DATA POINTER @VA04250 00403000
  413. L R4,STRING AND PICK UP @VA04250 00404000
  414. L R4,0(R4) THE FIRST STRING BYTE @VA04250 00405000
  415. B BUMPTRAN GO TRY NEXT BYTE @VA04250 00406000
  416. * * * * * * * * ------- -------- -------- ------- * 00407000
  417. * * * * * * * * WE HAVE A MATCH ON ALL FOUR WORDS 00408000
  418. * * * * * * * * CONVERT THE INCORE ADDRESS OF 00409000
  419. * * * * * * * * THE MATCH TO A REAL ADDRESS, 00410000
  420. * * * * * * * * FIND OUT THE DEVICE TYPE, AND 00411000
  421. * * * * * * * * PASS THE ADDRESS TO EITHER 00412000
  422. * * * * * * * * 'FED' IF 2741, OR 'FEX' IF 3270 00413000
  423. * * * * * * * * ------- -------- -------- ------- * 00414000
  424. MATCH L R2,BUFFADD GET START OF TRAN DATA @VA04250 00415000
  425. S R3,TWELVE POINT R3 TO START OF MATCH DATA @VA04250 00416000
  426. SR R3,R2 GET OFFSET INTO BUFFER @VA04250 00417000
  427. BNM DIVIDE HIT MAY BE IN LAST LINE @VA04250 00418000
  428. * * * * * * * * ------- -------- -------- ------- * 00419000
  429. * * * * * * * * HIT CAME IN PRE-BUFFER - LAST 00420000
  430. * * * * * * * * 16 TRANS BYTES OF PREVIOUS PAGE 00421000
  431. * * * * * * * * SO REAL ADDRESS IS FOUND THUS:- 00422000
  432. * * * * * * * * ------- -------- -------- ------- * 00423000
  433. AR R2,R3 R2 POINTS TO HIT @VA04250 00424000
  434. L R3,BUFFADD GET BUFFER ADDRESS @VA04250 00425000
  435. SR R3,R2 R3 HAS #BYTES BEFORE PAGE @VA04250 00426000
  436. SRL R3,1 DIVIDE BY 2 FOR HEX @VA04250 00427000
  437. L R2,PAGEFROM REAL ADDRESS OF PAGE @VA04250 00428000
  438. SR R2,R3 R2 HAS REAL ADDR OF MATCH @VA04250 00429000
  439. ST R2,MATCHADD SAVE IT @VA04250 00430000
  440. B CONVERT @VA04250 00431000
  441. * * * * * * * * ------- -------- -------- ------- * 00432000
  442. * * * * * * * * THIS IS THE USUAL WAY TO GET 00433000
  443. * * * * * * * * THE REAL ADDRESS OF THE MATCH 00434000
  444. * * * * * * * * ------- -------- -------- ------- * 00435000
  445. DIVIDE SRL R3,1 DIVIDE BY TWO TO GET BYTE DISP @VA04250 00436000
  446. L R2,PAGEFROM GET REAL PAGE START @VA04250 00437000
  447. AR R2,R3 R2 HAS REAL ADDRESS OF MATCH. @VA04250 00438000
  448. ST R2,MATCHADD YOU JUST NEVER KNOW... @VA04250 00439000
  449. * * * * * * * * ------- -------- -------- ------- * 00440000
  450. * * * * * * * * CONVERT THIS HEX ADDRESS TO AN 00441000
  451. * * * * * * * * EBCDIC ADDRESS TO PASS IN A PLIST. 00442000
  452. * * * * * * * * ------- -------- -------- ------- * 00443000
  453. CONVERT LA R3,ADRL GET LENGTH TO TRANSLATE @VA04250 00444000
  454. L R4,MATCHADD GET ADDRESS AND ROUND IT @VA04250 00445000
  455. SRL R4,4 CONVERT TO A 16 BYTE BOUND @VA04250 00446000
  456. SLL R4,4 AND RESTORE @VA04250 00447000
  457. ST R4,MATCHRND SAVE THE ROUNDED MATCH ADDRESS @VA04250 00448000
  458. LA R4,MATCHRND GET ADDRESS TO TRANSLATE @VA04250 00449000
  459. BAL R10,GOINT GO TRANSLATE IT @VA04250 00450000
  460. MVC OUTPLADD(ADDR),TRANAD(R5) PLUG ADDRESS IN PLIST @VA04250 00451000
  461. LA R2,OUTPLIST PASS OUR PLIST @VA04250 00452000
  462. * * * * * * * * ------- -------- -------- ------- * 00453000
  463. * * * * * * * * NOW FIND THE DEVICE TYPE 00454000
  464. * * * * * * * * ------- -------- -------- ------- * 00455000
  465. L R3,TYPEADD GO AFTER DEVICE TYPE @VA04250 00456000
  466. CLI 0(R3),TYPER IS IT A TYPEWRITER? @VA04250 00457000
  467. BE GOGOFED GO PASS IT TO DMMFED @VA04250 00458000
  468. * * * * * * * * ------- -------- -------- ------- * 00459000
  469. * * * * * * * * WE HAVE A GRAPHICS DEVICE. 00460000
  470. * * * * * * * * PASS THE ADDRESS TO DMMFEX. 00461000
  471. * * * * * * * * ------- -------- -------- ------- * 00462000
  472. GOGOFEX MVC OUTPLCMD,X INSERT 'X' COMMAND @VA04250 00463000
  473. MVC OUTPLEN,FENCE FENCE END OF PLIST @VA04250 00464000
  474. BAL R10,GOFEX GO TO SCREEN DISPLAY @VA04250 00465000
  475. B RETURN RETURN @VA04250 00466000
  476. * * * * * * * * ------- -------- -------- ------- * 00467000
  477. * * * * * * * * SET A RETCODE OF 8 00468000
  478. * * * * * * * * ------- -------- -------- ------- * 00469000
  479. RETCODE8 MVC RETCODE,CODE8 SET 8 @VA04250 00470000
  480. B RETURN SEND IT BACK @VA04250 00471000
  481. * * * * * * * * ------- -------- -------- ------- * 00472000
  482. * * * * * * * * SAVE R2 FOR MESSAGE WRITER 00473000
  483. * * * * * * * * ------- -------- -------- ------- * 00474000
  484. SAVEREG2 LR R4,R2 SAVE R2 IN R4 @VA04250 00475000
  485. B NOTFOUND GO WRITE MESSAGE @VA04250 00476000
  486. * * * * * * * * ------- -------- -------- ------- * 00477000
  487. * * * * * * * * GOT A 2741. SET UP FOR FED 00478000
  488. * * * * * * * * THE FOUND STRING MAY NOT ALL LIE 00479000
  489. * * * * * * * * ON ONE SIXTEEN BYTE LINE. CHECK 00480000
  490. * * * * * * * * TO SEE IF THIS IS SO, AND WRITE 00481000
  491. * * * * * * * * ONE OR TWO LINES ACCORDINGLY. 00482000
  492. * * * * * * * * ------- -------- -------- ------- * 00483000
  493. GOGOFED MVC OUTPLCMD,DISPLAY INSERT 'DISPLAY' COMMAND @VA04250 00484000
  494. MVC OUTPLFEN,FENCE FENCE END @VA04250 00485000
  495. L R3,STRNGEND GET OFF-END-OF-STRING ADDRESS @VA04250 00486000
  496. S R3,STRING LESS START @VA04250 00487000
  497. BCTR R3,R0 LESS 1 - BACK TO LAST BYTE @VA04250 00488000
  498. SRL R3,1 CONVERT HALF BYTES TO BYTES @VA04250 00489000
  499. A R3,MATCHADD ADDRESS OF LAST BYTE OF MATCH @VA04250 00490000
  500. SRL R3,4 CONVERT IT TO A @VA04250 00491000
  501. SLL R3,4 16 BYTE BOUNDARY. @VA04250 00492000
  502. L R4,MATCHADD DO THE SAME FOR THE START OF @VA04250 00493000
  503. SRL R4,4 THE STRING @VA04250 00494000
  504. SLL R4,4 AND THEN SEE IF THEY ARE SAME @VA04250 00495000
  505. CR R3,R4 IF NOT - PRINT TWO LINES @VA04250 00496000
  506. BE WRITE1 BUT IF THEY ARE.... @VA04250 00497000
  507. MVC OUTPLEN,TWENTY SHOW TWO LINES @VA04250 00498000
  508. B GOFEDLNK GO TO THE LINK @VA04250 00499000
  509. WRITE1 MVC OUTPLEN,TEN SHOW ONE LINE @VA04250 00500000
  510. GOFEDLNK BAL R10,GOFED GO TO FED ROUTINE @VA04250 00501000
  511. B RETURN RETURN @VA04250 00502000
  512. * * * * * * * * ------- -------- -------- ------- * 00503000
  513. * * * * * * * * COMMON BAL TO GET DATA IN CORE 00504000
  514. * * * * * * * * ------- -------- -------- ------- * 00505000
  515. GOGET L R15,GETADD ADDRESS @VA04250 00506000
  516. BALR R14,R15 LINK @VA04250 00507000
  517. C R15,CODE8 FATAL? @VA04250 00508000
  518. BE CODECHEK YES - GO BURY IT @VA04250 00509000
  519. BR R10 NO - LET SENDER HAVE RETURN @VA04250 00510000
  520. * * * * * * * * ------- -------- -------- ------- * 00511000
  521. * * * * * * * * COMMON BAL TO HEX-TO-EBCDIC CODE 00512000
  522. * * * * * * * * ------- -------- -------- ------- * 00513000
  523. GOINT L R15,INTADD @VA04250 00514000
  524. BALR R14,R15 LINK @VA04250 00515000
  525. LTR R15,R15 HOW WAS IT @VA04250 00516000
  526. BNZ CODECHEK HOW BAD? @VA04250 00517000
  527. BR R10 @VA04250 00518000
  528. * * * * * * * * ------- -------- -------- ------- * 00519000
  529. * * * * * * * * COMMON BAL TO EBCDIC-ADD-TO-HEX 00520000
  530. * * * * * * * * ------- -------- -------- ------- * 00521000
  531. GOHEX L R15,HEXADD ADDRESS @VA04250 00522000
  532. BALR R14,R15 LINK @VA04250 00523000
  533. LTR R15,R15 CHECK RETURN @VA04250 00524000
  534. BNZ CODECHEK HOW BAD @VA04250 00525000
  535. BR R10 BACK OK @VA04250 00526000
  536. * * * * * * * * ------- -------- -------- ------- * 00527000
  537. * * * * * * * * COMMON BAL TO DMMFED 00528000
  538. * * * * * * * * ------- -------- -------- ------- * 00529000
  539. GOFED L R15,FEDADD ADDRESS @VA04250 00530000
  540. BALR R14,R15 LINK @VA04250 00531000
  541. LTR R15,R15 BAD? @VA04250 00532000
  542. BNZ CODECHEK HOW BAD? @VA04250 00533000
  543. L R3,HEXADADD LAST DISPLAYED ADDRESS @VA04250 00534000
  544. ST R2,0(R3) STORE LAST FED ADDRESS @VA04250 00535000
  545. BR R10 CONTINUE @VA04250 00536000
  546. * * * * * * * * ------- -------- -------- ------- * 00537000
  547. * * * * * * * * COMMON BAL TO DMMFEX 00538000
  548. * * * * * * * * ------- -------- -------- ------- * 00539000
  549. GOFEX L R15,FEXADD ADDRESS @VA04250 00540000
  550. BALR R14,R15 LINK @VA04250 00541000
  551. LTR R15,R15 BAD? @VA04250 00542000
  552. BNZ CODECHEK HOW BAD @VA04250 00543000
  553. BR R10 RETURN @VA04250 00544000
  554. * * * * * * * * ------- -------- -------- ------- * 00545000
  555. * * * * * * * * POSTS RETURN CODES. 00546000
  556. * * * * * * * * ------- -------- -------- ------- * 00547000
  557. CODECHEK ST R15,RETCODE NO - FATAL ERROR - PASS RETURN @VA04250 00548000
  558. B RETURN GO BACK @VA04250 00549000
  559. * * * * * * * * ------- -------- -------- ------- * @V4075A2 00549100
  560. * * * * * * * * NO PARMS WERE FOUND @V4075A2 00549200
  561. * * * * * * * * ------- -------- -------- ------- * @V4075A2 00549300
  562. NOPARM LA R8,ERMSG717 INVALID FORM OF COMMAND @V4075A2 00549400
  563. LA R9,E717L LENGTH @V4075A2 00549500
  564. BAL R10,WRTERM WRITE @V4075A2 00549600
  565. MVC RETCODE,CODE4 WARNING RETURN @V4075A2 00549700
  566. B RETURN RET @V4075A2 00549800
  567. * * * * * * * * ------- -------- -------- ------- * 00550000
  568. * * * * * * * * UNSUCCESSFUL SEARCH. 00551000
  569. * * * * * * * * MOVE THE STRING INTO THE ERROR 00552000
  570. * * * * * * * * MESSAGE AND DISPLAY IT. 00553000
  571. * * * * * * * * FIRST GET THE LENGTH OF THE STRING 00554000
  572. * * * * * * * * (INLENGTH-((STRING-INPUTADD))), IS 00555000
  573. * * * * * * * * LENGTH OF STRING+(FROM AND TO) 00556000
  574. * * * * * * * * ------- -------- -------- ------- * 00557000
  575. NOTFOUND MVI OUTMSG,BLANK SET UP TO CLEAR MSG AREA @VA04250 00558000
  576. MVC OUTMSG+ONE(LINEL-ONE),OUTMSG CLEAR TO BLANKS @VA04250 00559000
  577. MVC OUTMSG,ERMSG716 MOVE MSG HEADER @VA04250 00560000
  578. L R2,STRLNADD ADDRESS OF LENGTH OF STRING @V4075A2 00561000
  579. L R2,0(R2) LENGTH @VA04250 00562000
  580. L R3,STRING ADDRESS OF STRING @VA04250 00563000
  581. C R2,FORTY MAX LENGTH @VA04250 00567000
  582. BH FIXUP SET IT RIGHT @VA04250 00568000
  583. EXMOVE EX R2,MOVESTR DO THE MOVE @VA04250 00570000
  584. B MOREMSG CONTINUE WITH REST OF MESSAGE @VA04250 00571000
  585. MOVESTR MVC OUTSTRNG(NULL),0(R3) MOVE STRING TO OUTPUT AREA @VA04250 00572000
  586. FIXUP LA R2,DEFAULT DEFAULT LENGTH - 40 @VA04250 00573000
  587. B EXMOVE GO MOVE IT @VA04250 00574000
  588. MOREMSG LA R3,OUTSTRNG GET ADDRESS OF OUTSTRING @VA04250 00575000
  589. AR R3,R2 ADD LENGTH OF STRING @VA04250 00576000
  590. MVC 0(L'E716TEXT,R3),E716TEXT MOVE IN TEXT @VA04250 00577000
  591. LA R8,OUTMSG ADDRESS @VA04250 00578000
  592. C R4,OFFENDER WAS IT OFF THE END @VA04250 00579000
  593. BNE NOTOFF NO - WRITE SHORT MESSAGE @VA04250 00580000
  594. MVC L'E716TEXT(L'E7T2,R3),E7T2 ADD 'OFF END' MSG @VA04250 00581000
  595. NOTOFF LA R9,LINEL LENGTH TO WRITE @VA04250 00582000
  596. BAL R10,WRTERM GO WRITE IT @VA04250 00583000
  597. MVC RETCODE,CODE4 WARNING @VA04250 00584000
  598. B RETURN @VA04250 00585000
  599. * * * * * * * * ------- -------- -------- ------- * 00586000
  600. * * * * * * * * NON-HEX CHAR IN 'STRING' 00587000
  601. * * * * * * * * ------- -------- -------- ------- * 00588000
  602. NONHEXST LA R8,ERMSG715 'NON-HEX CHARACTER IN STRING @VA04250 00589000
  603. LA R9,E715L LENGTH @VA04250 00590000
  604. BAL R10,WRTERM GO WRITE IT @VA04250 00591000
  605. MVC RETCODE,CODE4 WARNING RETURN @VA04250 00592000
  606. B RETURN GO BACK @VA04250 00593000
  607. * * * * * * * * ------- -------- -------- ------- * 00594000
  608. * * * * * * * * THIS CLEARS THE SCREEN AND POSITIONS 00595000
  609. * * * * * * * * THE FOLLOWING WRITE AT THE TOP 00596000
  610. * * * * * * * * OF THE SCREEN 00597000
  611. * * * * * * * *------- -------- -------- -------- ------* 00598000
  612. WRTERM STM R7,R9,SAVCLR SAVE REGS @VA04250 00599000
  613. L R8,SCRNADD GET THE ADDRESS OF THE SCREEN @VA04250 00600000
  614. ST R8,CCWC PLUG ADDRESS IN CCW @VA04250 00601000
  615. LA R8,CCWC CCW ADD @VA04250 00602000
  616. L R9,CONSADD VIRT CONS ADDRESS LOCATION @VA04250 00603000
  617. L R9,0(R9) VIRT CON CUU @VA04250 00604000
  618. MVI CCWC,ERASE RESTORE CMD CODE @VA04250 00605000
  619. MVI CCWCTL,ON SET ERASE BYTE @VA04250 00606000
  620. WAITT WAIT FOR PREVIOUS I/O @VA04250 00607000
  621. CLEAR DC X'83890058' DIAGNOSE @VA04250 00608000
  622. RELOAD LM R7,R9,SAVCLR RESTORE REGS @VA04250 00609000
  623. ST R8,PARMLIS1 SAVE MSG TEXT PTR IN PARM LIST @V4075A2 00610100
  624. ST R9,PARMLIS2 AND TEXT LENGTH @V4075A2 00610200
  625. LA R1,PARMLIS1 POINTER TO PASS @V4075A2 00610300
  626. L R15,FEDLNADD ADDRESS OF DMMFEDLN - LINE WRITER@V4075A2 00610400
  627. BALR R14,R15 GO WRITE THE LINE @V4075A2 00610500
  628. BR R10 AND RETURN @V4075A2 00610600
  629. PARMLIS1 DS F PARM1 @V4075A2 00610700
  630. PARMLIS2 DS F PARM2 @V4075A2 00610800
  631. FEDLNADD DC V(DMMFEDLN) LINE WRITER ROUTINE @V4075A2 00610900
  632. * * * * * * * * ------- -------- -------- ------- * 00612000
  633. * * * * * * * * START IS IN LAST 8 HEX BYTES 00613000
  634. * * * * * * * * TRANSLATE ONLY THOSE EIGHT, 00614000
  635. * * * * * * * * SET THEM IN PREBUFF, AND GET THE 00615000
  636. * * * * * * * * NEXT PAGE INTO LOCBUFF. 00616000
  637. * * * * * * * * ------- -------- -------- ------- * 00617000
  638. STARTHI AR R3,R3 DOUBLE DISP AS IT IS TRANSLATED @V4075A2 00618100
  639. A R3,BUFFADD ADD TO START OF TRANS AREA @V4075A2 00618200
  640. S R3,EIGHTK AND POINT INTO THE PREBUFFER @V4075A2 00618300
  641. ST R3,COMPPTR AND SAVE THE COMPARE POINTER @V4075A2 00618400
  642. LA R3,LAST8L LENGTH OF LAST 8 - 8 BYTES @V4075A2 00618500
  643. L R4,LASTHEX ADDRESS @VA04250 00619000
  644. BAL R10,GOINT GO TRANSLATE LAST EIGHT BYTES @VA04250 00620000
  645. L R3,PREBUFAD ADDRESS OF SPILL AREA @VA04250 00621000
  646. MVC 0(PREBUFL,R3),0(R5) MOVE TRANSLATED STUFF @VA04250 00622000
  647. * * * * * * * * ------- -------- -------- ------- * 00623000
  648. * * * * * * * * NOW GET THE NEXT PAGE INTO CORE 00624000
  649. * * * * * * * * ------- -------- -------- ------- * 00625000
  650. GETNEXT L R2,PAGEFROM GET OLD REAL PAGE @VA04250 00626000
  651. A R2,FOURK ADD 4096 @VA04250 00627000
  652. REGET2 ST R2,PAGEFROM UPDATE FOR 'MATCH' @VA04250 00628000
  653. ST R2,LASTPAGE UPDATE FOR NO TRANSLATE @VA04250 00629000
  654. BAL R10,GOGET FETCH IT IN @VA04250 00630000
  655. LTR R15,R15 CHECK RETURN @VA04250 00631000
  656. BZ GOODGET2 OK - CONTINUE @VA04250 00632000
  657. L R1,PREBUFAD GET THE ADDRESS OF PREBUFF @V4075A2 00633300
  658. XC 0(PREBUFL,R1),0(R1) AND CLEAR THE PREBUFF @V4075A2 00633600
  659. C R15,CODE4 WARNING? @VA04250 00634000
  660. BNE RETCODE8 NO - GET OUT @VA04250 00635000
  661. C R2,OFFENDER OFF THE END? @VA04250 00636000
  662. BE SAVEREG2 YES - STOP THE SEARCH @VA04250 00637000
  663. BADGET2 L R2,PAGEFROM GET PAGE @VA04250 00638000
  664. A R2,FOURK BUMP BY 4096 @VA04250 00639000
  665. C R2,TO PAST END OF SEARCH? @VA04250 00640000
  666. BL REGET2 NO - ZIP AROUND AGAIN @VA04250 00641000
  667. B NOTFOUND YES - QUIT @VA04250 00642000
  668. GOODGET2 ST R2,PAGESTRT STORE IT @VA04250 00643000
  669. * * * * * * * * ------- -------- -------- ------- * 00644000
  670. * * * * * * * * NOW TRANSLATE THE NEXT PAGE 00645000
  671. * * * * * * * * ------- -------- -------- ------- * 00646000
  672. TRANNEXT LA R3,TRANINL LENGTH TO TRANSLATE @V4075A2 00647500
  673. L R4,PAGESTRT ADDRESS OF INPUT DATA @VA04250 00648000
  674. LA R6,TRANINL SET UP A COUNT @VA04250 00649000
  675. L R7,BUFFADD ADDRESS FOR TRANSLATED STUFF @VA04250 00650000
  676. GOTOINT BAL R10,GOINT GO TRANSLATE @VA04250 00651000
  677. MVC 0(TRANOUTL,R7),0(R5) PLUG TRANSLATEEE @VA04250 00652000
  678. LA R4,TRANINL(R4) BUMP INPUT PTR @VA04250 00653000
  679. LA R7,TRANOUTL(R7) AND OUTPUT PTR @VA04250 00654000
  680. BCT R6,GOTOINT NEXT LINE OVER THE TOP? @VA04250 00655000
  681. * * * * * * * * ------- -------- -------- ------- * 00656000
  682. * * * * * * * * NOW SET START AT PREBUFF AND 00657000
  683. * * * * * * * * LET 'ER RIP. 00658000
  684. * * * * * * * * ------- -------- -------- ------- * 00659000
  685. SCANSET L R3,COMPPTR GET ADDR TO START COMPARE @V4075A2 00660500
  686. B SETSTOP AND GO GET ADDRESS TO STOP @V4075A2 00661250
  687. * * * * * * * * ------- -------- -------- ------- * 00665000
  688. * * * * * * * * WE FELL OFF THE TOP OF THE PAGE. 00666000
  689. * * * * * * * * GET THE NEXT PAGE . 00667000
  690. * * * * * * * * ------- -------- -------- ------- * 00668000
  691. NEXTPAGE S R3,EIGHTK POINT BACK INTO PREBUFF @V4075A2 00669200
  692. ST R3,COMPPTR AND SAVE IT @V4075A2 00669400
  693. L R7,PREBUFAD POINT TO PREBUFF @V4075A2 00669600
  694. L R8,LASTLINE LAST TRANS LINE @VA04250 00670000
  695. MVC 0(PREBUFL,R7),0(R8) MOVE LAST LINE @VA04250 00671000
  696. B GETNEXT GO GET NEXT PAGE @VA04250 00672000
  697. FREEERR LR R2,R15 SAVE THE ERROR RETURN @V4075A2 00672100
  698. LINEDIT TEXT='ERROR ''...'' IN DMSFREE OR DMSFRET, SEE SYSTEM X00672200
  699. PROGRAMMERS GUIDE',DOT=NO,SUB=(DEC,(2)) FRETER @V4075A2 00672300
  700. MVC RETCODE,CODE8 SET BADNESS INDICATOR @V4075A2 00672400
  701. B RETURN AND QUIT @V4075A2 00672500
  702. * * * * * * * * ------- -------- -------- ------- * 00673000
  703. * * * * * * * * CLOSE 00674000
  704. * * * * * * * * ------- -------- -------- ------- * 00675000
  705. RETURN L R13,SAVEBACK RESTORE CALLER SAVE PTR @VA04250 00676000
  706. MVC SAVREG15(L'RETCODE,R13),RETCODE PLUG RETCODE @VA04250 00677000
  707. LM R14,R12,SAVEDISP(R13) RESTORE CALLERS REGS @VA04250 00678000
  708. BR R14 RETURN @VA04250 00679000
  709. * * * * * * * * ------- -------- -------- ------- * 00680000
  710. * * * * * * * * CONSTANTS FOR CLEAR 00681000
  711. * * * * * * * * ------- -------- -------- ------- * 00682000
  712. CCWC CCW X'19',X'0',X'20',1760 ERASE CCW @VA04250 00683000
  713. CCWCTL EQU CCWC+5 CONTROL BYTE @VA04250 00684000
  714. SAVCLR DS 3F SAVE FOR CLEAR SUBR. @VA04250 00685000
  715. SCRNADD DC AL4(SCRNAREA) ADDRESS OF AREA TO BE DISPLAYED @VA04250 00686000
  716. * * * * * * * * ------- -------- -------- ------- * 00687000
  717. * * * * * * * * SAVEAREA 00688000
  718. * * * * * * * * ------- -------- -------- ------- * 00689000
  719. SAVEAREA DS 0F THIS PROGRAM'S SAVE AREA @VA04250 00690000
  720. SAVEUSR DS F USER WORD @VA04250 00691000
  721. SAVEFWD DS F FORWARD POINTER @VA04250 00692000
  722. SAVEBACK DS F BACKWARD POINTER @VA04250 00693000
  723. SAVER14 DS F SAVE AREA FOR CALLER'S R14 @VA04250 00694000
  724. SAVER15 DS F SAVE AREA FOR CALLER'S R15 @VA04250 00695000
  725. SAVER0 DS F SAVE AREA FOR CALLER'S R0 @VA04250 00696000
  726. SAVER1 DS F SAVE AREA FOR CALLER'S R1 @VA04250 00697000
  727. SAVER2 DS F SAVE AREA FOR CALLER'S R2 @VA04250 00698000
  728. SAVER3 DS F SAVE AREA FOR CALLER'S R3 @VA04250 00699000
  729. SAVER4 DS F SAVE AREA FOR CALLER'S R4 @VA04250 00700000
  730. SAVER5 DS F SAVE AREA FOR CALLER'S R5 @VA04250 00701000
  731. SAVER6 DS F SAVE AREA FOR CALLER'S R6 @VA04250 00702000
  732. SAVER7 DS F SAVE AREA FOR CALLER'S R7 @VA04250 00703000
  733. SAVER8 DS F SAVE AREA FOR CALLER'S R8 @VA04250 00704000
  734. SAVER9 DS F SAVE AREA FOR CALLER'S R9 @VA04250 00705000
  735. SAVER10 DS F SAVE AREA FOR CALLER'S R10 @VA04250 00706000
  736. SAVER11 DS F SAVE AREA FOR CALLER'S R11 @VA04250 00707000
  737. SAVER12 DS F SAVE AREA FOR CALLER'S R12 @VA04250 00708000
  738. * * * * * * * * ------- -------- -------- ------- * 00709000
  739. RETCODE DS F RETURN CODE @VA04250 00710000
  740. PLISTADD DS F ADDRESS OF INPUT PLIST @VA04250 00711000
  741. HEXADD DC AL4(DMMHEX) ADDRESS-TO-HEX @VA04250 00712000
  742. GETADD DC AL4(DMMGET) FETCH INTO CORE @VA04250 00713000
  743. FEDADD DC AL4(DMMFED) LINE WRITER @VA04250 00714000
  744. FEXADD DC AL4(DMMFEX) SCREEN WRITER @VA04250 00715000
  745. INTADD DC AL4(DMMINT) HEX-TO-EBCDIC @VA04250 00716000
  746. HEXADADD DC AL4(HEXAD) LAST DISPLAY ADDRESS (SCROLL) @VA04250 00717000
  747. INPUTADD DC AL4(INPUT) INPUT LINE @VA04250 00718000
  748. INLENADD DC AL4(INLENGTH) INPUT LINE LENGTH @VA04250 00719000
  749. STRNGADD DC AL4(STRINGAD) ADDRESS OF START OF STRING @V4075A2 00719300
  750. STRLNADD DC AL4(STRINGLN) ADDRESS OF LENGTH OF STRING @V4075A2 00719600
  751. PREBUFAD DC F'0' SPILL AREA @V4075A2 00720100
  752. BUFFADD DC F'0' TRANSLATED BUFFER @V4075A2 00720600
  753. LASTLINE DC F'0' LAST LINE IN TRANS BUFFER @V4075A2 00721100
  754. TBUFFEND DC F'0' END OF TRANSLATED BUFFER @V4075A2 00721600
  755. LASTHEX DC AL4(BUFF1+4088) LAST 8-BYTE LINE IN HEX BUFFER @VA04250 00724000
  756. TYPEADD DC AL4(TYPEFLAG) DEVICE TYPE @VA04250 00725000
  757. CONSADD DC AL4(CONSOLE) VIRT CONS ADDRESS @VA04250 00726000
  758. BOUND DC F'1' DEFAULT STEP FOR SEARCH @V4075A2 00726500
  759. CODE4 DC F'4' WARNING RETURN CODE @VA04250 00727000
  760. CODE8 DC F'8' FATAL RETURN @VA04250 00728000
  761. MATCHADD DS F INCORE ADDRESS OF MATCH @VA04250 00729000
  762. MATCHRND DS F ROUNDED MATCH ADDRESS @VA04250 00730000
  763. STRING DS F ADDRESS OF START OF 'STRING' @VA04250 00731000
  764. STRNGEND DS F ADDR FIRST BLANK AFTER STRING @VA04250 00732000
  765. FROM DS F REAL FROM ADD @VA04250 00733000
  766. TO DS F REAL TO ADD @VA04250 00734000
  767. START DS F INCORE FROM ADD @VA04250 00735000
  768. STOP DS F INCORE TO ADD @VA04250 00736000
  769. TRANSTAR DS F INCORE TRANSLATED FROM ADDRESS @VA04250 00737000
  770. TRANSTOP DS F IN CORE TRANSLATED TO ADDRESS @VA04250 00738000
  771. PAGEFROM DS F REAL PAGE START @VA04250 00739000
  772. PAGESTRT DS F INCORE PAGE START @VA04250 00740000
  773. COMPPTR DS F CURR PTR INTO THE TRANS BUFFER @V4075A2 00740500
  774. OFFENDER DC X'000000FF' '0FF END OF DUMP' INDICATOR @VA04250 00741000
  775. LASTPAGE DC XL4'FFFFFFFF' PREVIOUS TRANSLATED PAGE @VA04250 00742000
  776. FOUR DC F'4' FOUR @VA04250 00743000
  777. EIGHT DC F'8' EIGHT @VA04250 00744000
  778. TWELVE DC F'12' TWELVE @VA04250 00745000
  779. SIXTEEN DC F'16' SIXTEEN @VA04250 00746000
  780. FORTY DC F'40' MAX FOR STRING MSG @VA04250 00747000
  781. DEC4088 DC F'4088' 4088 @VA04250 00748000
  782. FOURK DC F'4096' 4096 @VA04250 00749000
  783. DEC8176 DC F'8176' 8176 @VA04250 00750000
  784. EIGHTK DC F'8192' 8192 @VA04250 00751000
  785. MASKS DS 5F MASKS @VA04250 00752000
  786. ORG MASKS @VA04250 00753000
  787. MASK DS F FILLER MASK @VA04250 00754000
  788. MASK4 DS F LAST MASK @VA04250 00755000
  789. MASK3 DS F MASK @VA04250 00756000
  790. MASK2 DS F MASK @VA04250 00757000
  791. MASK1 DS F FIRST MASK @VA04250 00758000
  792. OUTPLIST DS 8D PLIST @VA04250 00759000
  793. ORG OUTPLIST PLIST TO PASS TO FED OR FEX @VA04250 00760000
  794. OUTPLCMD DS D COMMAND @VA04250 00761000
  795. OUTPLADD DC CL8' ' ADDRESS @VA04250 00762000
  796. OUTPLEN DS D LENGTH @VA04250 00763000
  797. OUTPLFEN DS D FENCE @VA04250 00764000
  798. X DC CL8'X' X COMMAND @VA04250 00765000
  799. DISPLAY DC CL8'DISPLAY' DISPLAY COMMAND @VA04250 00766000
  800. TEN DC CL8'10' LENGTH FOR 1 LINE TO FED @VA04250 00767000
  801. TWENTY DC CL8'20' LENGTH FOR 2 @VA04250 00768000
  802. FENCE DC XL8'FFFFFFFFFFFFFFFF' FENCE @VA04250 00769000
  803. BLANKSW DC X'00' BLANK DETECTED YET? SW. @VA04250 00770000
  804. * * * * * * * * ------- -------- -------- ------- * 00771000
  805. * * * * * * * * MESSAGES 00772000
  806. * * * * * * * * ------- -------- -------- ------- * 00773000
  807. ERMSG715 DC C'DMMLOC715I NON-HEX CHARACTER IN STRING' @VA04250 00774000
  808. E715L EQU *-ERMSG715 LENGTH @VA04250 00775000
  809. ERMSG716 DC C'DMMLOC716I STRING ''' @VA04250 00776000
  810. E716TEXT DC CL11''' NOT FOUND' TEXT @VA04250 00777000
  811. E7T2 DC C' BEFORE END OF DUMP' @VA04250 00778000
  812. ERMSG717 DC C'DMMLOC717I INVALID FORM OF LOCATE COMMAND' @VA04250 00779000
  813. E717L EQU *-ERMSG717 LENGTH @VA04250 00780000
  814. OUTMSG DS CL19 OUTAREA FOR VARIABLE LENGTH MSG @VA04250 00781000
  815. OUTSTRNG DS CL61 REST OF OUTAREA @VA04250 00782000
  816. * * * * * * * * ------- -------- -------- ------- * 00783000
  817. * * * * * * * * EQUATES 00784000
  818. * * * * * * * * ------- -------- -------- ------- * 00785000
  819. ZMASK EQU X'0' MASK FOR CLM @VA04250 00786000
  820. NULL EQU X'00' CLEAR REG @VA04250 00787000
  821. ERASE EQU X'19' ERASE BYTE FOR CCW @VA04250 00788000
  822. BLANK EQU X'40' BLANK SCANNER @VA04250 00789000
  823. NOBLANK EQU X'40' BLANK SWITCHER @VA04250 00790000
  824. YESBLANK EQU X'FF' HIT BLANKS IN STRING @VA04250 00791000
  825. ASTERISK EQU X'5C' ASTERISK @VA04250 00792000
  826. A EQU X'C1' A @VA04250 00793000
  827. F EQU X'C6' F @VA04250 00794000
  828. ZERO EQU X'F0' ZERO @VA04250 00795000
  829. NINE EQU X'F9' NINE @VA04250 00796000
  830. TYPER EQU X'FF' TYPEWRITER @VA04250 00797000
  831. LOCRED EQU X'FF' READ BY LOCATE @VA04250 00798000
  832. ON EQU X'FF' SWITCH STATUS @VA04250 00799000
  833. ONE EQU 1 BOMP POINTER @VA04250 00800000
  834. BIT EQU 1 BIT TO SET IN COMPARE MASK @VA04250 00801000
  835. TRANAD EQU 2 TRANS ADDRESS @VA04250 00802000
  836. BYTES EQU 4 FOUR BYTES TO A WORD @VA04250 00803000
  837. WORDS EQU 4 4 WORDS TO A STRING @VA04250 00804000
  838. ADRL EQU 4 LENGTH OF ADDRESS @VA04250 00805000
  839. ADDR EQU 6 LENGTH OF ADDRESS IN PLIST @VA04250 00806000
  840. WORD3 EQU 8 DISP TO THIRD WORD OF STRING @VA04250 00807000
  841. LAST8L EQU 8 LENGTH LAST 8 IN TRANS BUFFER @VA04250 00808000
  842. WORD4 EQU 12 DISP TO FOURTH WORD OF STRING @VA04250 00809000
  843. SAVEDISP EQU 12 REGS IN SAVE AREA @VA04250 00810000
  844. SAVREG15 EQU 16 REG 15 IN SAVE AREA @VA04250 00811000
  845. PREBUFL EQU 16 LENGTH OF PRE BUFFER @V4075A2 00812500
  846. P3 EQU 16 DISPLACEMENT OF THIRD PARM @VA04250 00813000
  847. P4 EQU 24 DISP OF FOURTH PARM @VA04250 00814000
  848. P5 EQU 32 DISP'MENT TO 5TH PARM - BOUNDARY @V4075A2 00814500
  849. DEFAULT EQU 40 DEFAULT LENGTH @VA04250 00815000
  850. TRYDIAG EQU 50 TRIES FOR DIAGNOSE @VA04250 00816000
  851. TRANINL EQU 64 LENGTH OF INPUT TO TRANS @VA04250 00817000
  852. LINEL EQU 80 LINE LENGTH @VA04250 00818000
  853. TRANOUTL EQU 128 LENGTH OF A TRANSLATED BLOCK @VA04250 00819000
  854. * * * * * * * * ------- -------- -------- ------- * 00820000
  855. * * * * * * * * PATCH AREA 00821000
  856. * * * * * * * * ------- -------- -------- ------- * 00822000
  857. PATCH DC 50F'0' PATCH @VA04250 00823000
  858. LTORG @VA04250 00824000
  859. REGEQU @VA04250 00828000
  860. END 00829000