Table of Contents

DMKPEQ Source

References

Source Listing

DMKPEQ.ASSEMBLE.txt
  1. PEQ TITLE 'DMKPEQ VM/370 VERSION 6, LEVEL 0' 00001000
  2. COPY OPTIONS 00002000
  3. COPY LOCAL 00003000
  4. EJECT , 00004000
  5. DMKPEQ CSECT 00005000
  6. USING VMBLOK,R11 00006000
  7. USING SAVEAREA,R13 00007000
  8. USING PERBLOK,R8 00008000
  9. USING PEXBLOK,R7 00009000
  10. USING PSA,R0 00010000
  11. SPACE 00011000
  12. EXTRN DMKCVTBH,DMKERMSG,DMKCVTBD 00012000
  13. SPACE 00013000
  14. MODID DC CL8'DMKPEQ' PAGEABLE MODULE IDENTIFIER 00014000
  15. EJECT 00015000
  16. *---------------------------------------------------------------------* 00016000
  17. * INITIALIZE AND DETERMINE TYPE OF QUERY * 00017000
  18. *---------------------------------------------------------------------* 00018000
  19. DMKPEQRY RELOC , ENTRY FROM DMKPEC 00019000
  20. MVC SAVER2(4),ZEROES SET RET CODE 00020000
  21. L R8,VMPERCTL LOAD POINTER TO PER BLOK 00021000
  22. LTR R8,R8 ANY? 00022000
  23. BZ NOTRACE NO, PER TRACE NOT IN EFFECT 00023000
  24. CLC SAVER0(2),=C'* ' WANT NAMES DISPLAYED? 00024000
  25. BE PUTNAMES YES, GO DISPLAY SAVED NAMES 00025000
  26. STM R0,R1,SAVEWRK1 SAVE NAME (IF ANY) 00026000
  27. L R7,PERCHAIN ASSUME WANT CURRENT CHAIN 00027000
  28. LTR R0,R0 WAS NAME ZERO? 00028000
  29. BZ QUERYO YES, GO PRODUCE OUTPUT 00029000
  30. L R6,PERSAVED POINT TO LIST OF SAVED TRACES 00030000
  31. QFNDLP LTR R6,R6 ANY? 00031000
  32. BZ NOTRACE NO, GIVE EMSG 00032000
  33. CLC PESNAME-PESBLOK(8,R6),SAVEWRK1 IS THIS THE BLOK? 00033000
  34. BE GOTBLOK YES, GO LOAD R7 00034000
  35. L R6,PESNEXT-PESBLOK(,R6) LOAD FWD POINTER 00035000
  36. B QFNDLP GO CHECK IT 00036000
  37. GOTBLOK L R7,PESCHAIN-PESBLOK(,R6) 00037000
  38. EJECT 00038000
  39. *---------------------------------------------------------------------* 00039000
  40. * START PRODUCING QUERY OUTPUT * 00040000
  41. *---------------------------------------------------------------------* 00041000
  42. QUERYO EQU * HERE TO PRODUCE QUERY OUTPUT 00042000
  43. LTR R7,R7 ANY? 00043000
  44. BZ NOTRACE NO, GIVE ERROR MSG 00044000
  45. QLOOP MVI PERBUF,C' ' MOVE IN A BLANK 00045000
  46. MVC PERBUF+1(79),PERBUF CLEAR BUFFER 00046000
  47. LA R2,PERBUF POINT TO BUFFER 00047000
  48. LA R3,80 INDICATE 80 BYTES LEFT 00048000
  49. SPACE 00049000
  50. *---------------------------------------------------------------------* 00050000
  51. * MOVE NAME OF TRACE TO OUTPUT LINE * 00051000
  52. *---------------------------------------------------------------------* 00052000
  53. IC R0,PEXFLAGT LOAD TYPE FLAGS 00053000
  54. TM PEXFLAGT,X'0F' ANY THING ON IN SECOND BYTE? 00054000
  55. BZ *+8 NO, SKIP AND 00055000
  56. N R0,F15 KILL OTHER BITS 00056000
  57. LA R1,TYPEBYTE POINT TO PLIST 00057000
  58. BAL R6,BITNAME AND OUTPUT TYPE 00058000
  59. SPACE 00059000
  60. *---------------------------------------------------------------------* 00060000
  61. * IF GREG DISPLAY REGISTER NUMBERS * 00061000
  62. *---------------------------------------------------------------------* 00062000
  63. QTRYADD TM PEXFLAGT,PEXGPR GREG? 00063000
  64. BNO QTRYPGT NO, GO SEE ABOUT PAGE TRACE 00064000
  65. CLC PEXGREG(2),FFS IS IT OK? 00065000
  66. BE QTRYST YES, GO SEE IF RANGE 00066000
  67. MVC PERBUF(8),BLANKS CLEAR FIRST PART OF BUFFER 00067000
  68. LA R2,PERBUF POINT TO BUFFER 00068000
  69. LA R3,80 LOAD LENGTH 00069000
  70. SLR R0,R0 CLEAR R0 00070000
  71. ICM R0,B'1100',PEXGREG LOAD REGISTER FLAGS 00071000
  72. LA R1,16 LOAD COUNTER 00072000
  73. ZAP SAVEWRK8(2),=P'0' ZERO IT 00073000
  74. QGLP1 ALR R0,R0 SHIFT UP 00074000
  75. BC B'1100',QGLP2 IF NO CARRY GO TO END OF LOOP 00075000
  76. MVI 1(R2),C'G' MOVE IN G 00076000
  77. UNPK SAVEWRK9(3),SAVEWRK8(2) UNPACK 00077000
  78. MVC 2(2,R2),SAVEWRK9 MOVE IN REG ID 00078000
  79. LA R15,4 SET SPACE TAKEN 00079000
  80. CLI 2(R2),C'0' LEADING ZERO? 00080000
  81. BNE QGLP3 NO, SKIP FIX 00081000
  82. BCTR R15,0 MINUS 1 00082000
  83. MVC 2(2,R2),3(R2) SQUEAZE OUT LEADING ZERO 00083000
  84. QGLP3 ALR R2,R15 POINT TO NEXT PLACE 00084000
  85. SLR R3,R15 DEC LENGTH 00085000
  86. QGLP2 AP SAVEWRK8(2),=P'10' ADD TO REG NUMBER 00086000
  87. BCT R1,QGLP1 GO BACK TO TOP 00087000
  88. B QTRYDAT GO SEE IF ANY DATA 00088000
  89. SPACE 00089000
  90. *---------------------------------------------------------------------* 00090000
  91. * PUT OUT INCREMENT FOR PAGE TRACE * 00091000
  92. *---------------------------------------------------------------------* 00092000
  93. QTRYPGT TM PEXFLAGT,PEXPGT IS IT A PAGE TRACE? 00093000
  94. BNO QTRYST NO, GO SEE IF NEED TO PUT OUT RANGE 00094000
  95. L R1,PEXINCR LOAD INCREMENT 00095000
  96. LTR R1,R1 ANY? 00096000
  97. BZ QCOMMN NO, GO DISPLAY OPTIONS 00097000
  98. N R1,=X'000003FF' EVEN NUMBER OF K? 00098000
  99. L R1,PEXINCR RELOAD PAGE SIZE 00099000
  100. BZ PUTK YES, PUT OUT IN K 00100000
  101. BAL R6,PUTDEC GO DISPLAY NUMBER 00101000
  102. B QCOMMN GO JOIN COMMON 00102000
  103. PUTK SRL R1,10 SHIFT TO MAKE K 00103000
  104. BAL R6,PUTDEC PUT OUT NUMERIC PART 00104000
  105. MVI 0(R2),C'K' PUT OUT K 00105000
  106. LA R2,1(,R2) POINT PAST IT 00106000
  107. BCTR R3,0 DECREMENT LENGTH 00107000
  108. B QCOMMN JOIN COMMON 00108000
  109. SPACE 00109000
  110. *---------------------------------------------------------------------* 00110000
  111. * PUT OUT RANGE OR ADDRESS FOR STORE AND BRANCH * 00111000
  112. *---------------------------------------------------------------------* 00112000
  113. QTRYST TM PEXFLAGT,PEXST+PEXBR COULD THERE BE A RANGE? 00113000
  114. BZ QTRYDAT NO, GO SEE IF ANY DATA 00114000
  115. CLI PEXFLAGT,PEXBR ONLY BRANCH? 00115000
  116. BE QCOMMN YES, THEN NO RANGE 00116000
  117. LM R0,R1,PEXADDR3 LOAD RANGE FOR DISPLAY 00117000
  118. CLI PEXFLAGT,PEXBRTB IS IT? 00118000
  119. BE QRG3 YES, SKIP OTHER CHECKS 00119000
  120. CLI PEXDLEN,0 ANY DATA? 00120000
  121. BE *+6 NO, SKIP SETTING EQUAL 00121000
  122. LR R1,R0 SET EQUAL THEN 00122000
  123. QRG3 LTR R0,R0 IS THE FIRST ZERO? 00123000
  124. BNZ PUTRST NO, PUT IT OUT 00124000
  125. CL R1,XRIGHT24 IS THE SECOND FFFFFF 00125000
  126. BE QCOMMN YES, THEN NO NEED TO DISPLAY 00126000
  127. PUTRST BAL R6,PUTRNG PUT OUT RANGE 00127000
  128. SPACE 00128000
  129. *---------------------------------------------------------------------* 00129000
  130. * PUT OUT DATA * 00130000
  131. *---------------------------------------------------------------------* 00131000
  132. QTRYDAT CLI PEXDLEN,0 ANY DATA? 00132000
  133. BE QCOMMN NO, GO TO COMMON SECTION 00133000
  134. LA R4,PEXDATA POINT TO DATA 00134000
  135. SLR R5,R5 CLEAR R5 FOR IC 00135000
  136. IC R5,PEXDLEN LOAD DATA LENGTH 00136000
  137. BCTR R3,0 SUBTRACT 1 00137000
  138. LA R2,1(,R2) POINT TO FIRST SLOT 00138000
  139. QODLP SL R3,F2 SUBTRACT 2 00139000
  140. BNL QODLP2 STILL SPACE, CONTINUE 00140000
  141. BAL R6,BUFRESET GO RESET BUFFER 00141000
  142. QODLP2 UNPK SAVEWRK8(3),0(2,R4) UNPACK 2 HEX DIGITS 00142000
  143. TR SAVEWRK8(2),HEXTAB-C'0' TRANSLATE TO EBCDIC 00143000
  144. MVC 0(2,R2),SAVEWRK8 MOVE TO LINE 00144000
  145. LA R2,2(,R2) POINT TO NEXT SLOT 00145000
  146. LA R4,1(,R4) POINT TO NEXT PAIR 00146000
  147. BCT R5,QODLP GO ON 00147000
  148. SPACE 00148000
  149. *---------------------------------------------------------------------* 00149000
  150. * DISPLAY RANGE * 00150000
  151. *---------------------------------------------------------------------* 00151000
  152. QCOMMN LM R0,R1,PEXADDR1 LOAD RANGE 00152000
  153. LTR R0,R0 ZERO? 00153000
  154. BNE QROUT NO, OUTPUT RANGE 00154000
  155. CL R1,XRIGHT24 FFFFFF? 00155000
  156. BE QCOMMN1 NO, GO OUTPUT REST OF STUFF 00156000
  157. QROUT SL R3,F6 MINUS LENGTH 00157000
  158. BNL QNBRT IF OK, DON'T CALL BUFRESET 00158000
  159. BAL R6,BUFRESET GO RESET BUFFER 00159000
  160. SL R3,F6 MINUS LENGTH 00160000
  161. LM R0,R1,PEXADDR1 RELOAD ADDR 00161000
  162. QNBRT MVC 1(5,R2),NRANGE MOVE IN NAME 00162000
  163. LA R2,6(,R2) POINT TO NEXT SPACE 00163000
  164. BAL R6,PUTRNG PUT OUT RANGE 00164000
  165. SPACE 00165000
  166. *---------------------------------------------------------------------* 00166000
  167. * DISPLAY OPTIONS * 00167000
  168. *---------------------------------------------------------------------* 00168000
  169. QCOMMN1 IC R0,PEXFLAGO INSERT OPTION FLAGS 00169000
  170. LA R1,OPTBYTE POINT TO PLIST 00170000
  171. BAL R6,BITNAME AND DISPLAY BIT NAMES 00171000
  172. SPACE 00172000
  173. *---------------------------------------------------------------------* 00173000
  174. * DISPLAY STEP AND SKIP * 00174000
  175. *---------------------------------------------------------------------* 00175000
  176. L R1,PEXSTEP LOAD STEP 00176000
  177. CL R1,F1 ANY? 00177000
  178. BNH QTRYSKIP NO, TRY SKIP 00178000
  179. SL R3,F5 ENOUGH SPACE? 00179000
  180. BNL *+12 YES, SKIP CALL 00180000
  181. BAL R6,BUFRESET GO RESET BUFFER 00181000
  182. SL R3,F5 MINUS LENGTH 00182000
  183. MVC 1(4,R2),NSTEP MOVE IN ID 00183000
  184. LA R2,5(,R2) POINT TO NEXT SPACE 00184000
  185. L R1,PEXSTEP LOAD IT 00185000
  186. BAL R6,PUTDEC GO PUT OUT NUMBER 00186000
  187. QTRYSKIP L R1,PEXSKIP LOAD SKIP COUNT 00187000
  188. CL R1,F1 IS THERE ANY? 00188000
  189. BNH QTRYCMD NO, SEE IF ASSOCIATED COMMAND 00189000
  190. SL R3,F5 ENOUGH SPACE? 00190000
  191. BNL *+12 YES, SKIP CALL 00191000
  192. BAL R6,BUFRESET RESET BUFFER 00192000
  193. SL R3,F5 DEC COUNT 00193000
  194. MVC 1(4,R2),NSKIP MOVE IN NAME 00194000
  195. LA R2,5(,R2) POINT ON 00195000
  196. L R1,PEXSKIP LOAD IT AGAIN 00196000
  197. BAL R6,PUTDEC AND PUT IT OUT 00197000
  198. SPACE 00198000
  199. *---------------------------------------------------------------------* 00199000
  200. * DISPLAY ASSOCIATED COMMAND IF ANY * 00200000
  201. *---------------------------------------------------------------------* 00201000
  202. QTRYCMD L R1,PEXCMND LOAD POINTER 00202000
  203. LTR R1,R1 IS THERE A COMMAND? 00203000
  204. BZ QOUT1 NO, GO DUMP BUFFER 00204000
  205. SLR R4,R4 CLEAR FOR IC 00205000
  206. IC R4,0(,R1) INSERT LENGTH OF COMMAND 00206000
  207. LA R5,1(,R1) AND POINT TO FIRST BYTE 00207000
  208. CL R3,F3 ENOUGH SPACE FOR KEYWORD? 00208000
  209. BNL QCMD1 YES, GO MOVE TO BUFFER 00209000
  210. BAL R6,BUFRESET GO RESET BUFFER 00210000
  211. QCMD1 MVC 1(3,R2),NCMD MOVE IN KEYWORD 00211000
  212. SL R3,F5 INDICATE LENGTH USED 00212000
  213. LA R2,5(,R2) POINT TO PLACE TO PUT CMND 00213000
  214. QCMLP1 SL R3,F1 MINUS 1 00214000
  215. BNL *+12 ENOUGH SPACE, CONTINUE 00215000
  216. BAL R6,BUFRESET RESET BUFFER 00216000
  217. SL R3,F1 MINUS 1 00217000
  218. MVC 0(1,R2),0(R5) MOVE IN CHARACTER 00218000
  219. CLI 0(R2),X'15' EOL? 00219000
  220. BNE *+8 NO, SKIP MVI 00220000
  221. MVI 0(R2),C';' MOVE IN SEMICOLEN 00221000
  222. LA R2,1(,R2) POINT TO NEXT SPACE 00222000
  223. LA R5,1(,R5) AND NEXT SLOT 00223000
  224. BCT R4,QCMLP1 GO BACK FOR NEXT CHAR 00224000
  225. SPACE 00225000
  226. *---------------------------------------------------------------------* 00226000
  227. * DUMP REST OF BUFFER AND FINISH UP LOOP * 00227000
  228. *---------------------------------------------------------------------* 00228000
  229. QOUT1 LR R0,R2 MOVE ADDR TO R0 00229000
  230. LA R1,PERBUF POINT TO BUFFER 00230000
  231. SLR R0,R1 GET LENGTH 00231000
  232. SLR R2,R2 CLEAR REG 00232000
  233. CALL DMKQCNWT GO OUTPUT LINE TO CONSOLE 00233000
  234. LTR R2,R2 ATTN HIT? 00234000
  235. BNZ QRET YES, RETURN TO CALLER 00235000
  236. QLOOPND L R7,PEXNEXT POINT TO NEXT PEXBLOCK 00236000
  237. LTR R7,R7 ANY? 00237000
  238. BNZ QLOOP YES, GO HANDLE IT 00238000
  239. QRET EXIT , RETURN TO CALLER 00239000
  240. EJECT 00240000
  241. *---------------------------------------------------------------------* 00241000
  242. * ROUTINE TO CONVERT TO EBCDIC DECIMAL * 00242000
  243. *---------------------------------------------------------------------* 00243000
  244. PUTDEC CVD R1,SAVEWRK2 CONVERT TO DECIMAL 00244000
  245. UNPK SAVEWRK4(15),SAVEWRK2(8) UNPACK 00245000
  246. OI SAVEWRK4+14,X'F0' FIX ZONE 00246000
  247. LA R1,SAVEWRK4 POINT TO NUMBER 00247000
  248. LA R14,14 LOAD COUNT FOR ZERO SUPPRESSION 00248000
  249. PUTDL1 CLI 0(R1),C'0' ZERO? 00249000
  250. BNE PUTD2 NO, THEN DONE 00250000
  251. LA R1,1(,R1) POINT TO NEXT 00251000
  252. BCT R14,PUTDL1 GO BACK FOR MORE 00252000
  253. PUTD2 LA R15,2(,R14) GET SPACE NEEDED 00253000
  254. CLR R3,R15 ENOUGH? 00254000
  255. BNL PUTDEC1 YES, KEEP GOING 00255000
  256. ST R6,SAVEWRK9 SAVE RET ADDR 00256000
  257. ST R1,SAVEWRK2 SAVE ADDR 00257000
  258. ST R14,SAVEWRK3 AND LENGTH 00258000
  259. BAL R6,BUFRESET RESET BUFFER 00259000
  260. L R6,SAVEWRK9 LOAD RET ADDR 00260000
  261. L R1,SAVEWRK2 LOAD ADDR 00261000
  262. L R14,SAVEWRK3 AND LENGTH 00262000
  263. PUTDEC1 EX R14,MVCDEC MOVE IT IN 00263000
  264. LA R2,2(R2,R14) POINT TO NEXT 00264000
  265. SLR R3,R0 MINUS LENGTH 00265000
  266. SL R3,F2 MINUS 2 MORE 00266000
  267. BR R6 RETURN 00267000
  268. MVCDEC MVC 1(*-*,R2),0(R1) EXECUTED MOVE 00268000
  269. SPACE 00269000
  270. *---------------------------------------------------------------------* 00270000
  271. * ROUTINE TO PUT OUT RANGE * 00271000
  272. *---------------------------------------------------------------------* 00272000
  273. PUTRNG EQU * 00273000
  274. STM R0,R1,SAVEWRK8 SAVE RANGE 00274000
  275. LR R1,R0 MOVE LOW END 00275000
  276. CALL DMKCVTBH GO CONVERT 00276000
  277. STCM R0,B'0011',SAVEWRK2 SAVE IN LINE 00277000
  278. STCM R1,B'1111',SAVEWRK2+2 SAVE REST OF IT 00278000
  279. LA R1,SAVEWRK2 POINT TO NUMBER 00279000
  280. LA R14,5 LOAD MAX COMPRESS 00280000
  281. RNGCLP CLI 0(R1),C'0' ZERO? 00281000
  282. BNE RNGCDN NO, THEN GET OUT OF LOOP 00282000
  283. LA R1,1(,R1) POINT TO NEXT 00283000
  284. BCT R14,RNGCLP GO BACK TO CHECK NEXT 00284000
  285. RNGCDN CLC SAVEWRK8(4),SAVEWRK9 ARE TWO ADDRS THE SAME? 00285000
  286. BE MVRNG YES, GO MOVE RANGE 00286000
  287. MVI SAVEWRK2+6,C':' MOVE IN COLEN 00287000
  288. ST R1,SAVEWRK6 SAVE ADDR 00288000
  289. ST R14,SAVEWRK7 SAVE LENGTH 00289000
  290. L R1,SAVEWRK9 LOAD SECOND 00290000
  291. CALL DMKCVTBH CONVERT 00291000
  292. STCM R0,B'0011',SAVEWRK2+7 SAVE FIRST 2 CHARS 00292000
  293. STCM R1,B'1111',SAVEWRK2+9 AND LAST 4 00293000
  294. LA R14,5 LOAD MAX COUNT FOR COMPRESS 00294000
  295. RNGCLP1 CLI SAVEWRK2+7,C'0' ZERO? 00295000
  296. BNE RNGCDN1 NO, THEN GET OUT OF LOOP 00296000
  297. MVC SAVEWRK2+7(5),SAVEWRK2+8 MOVE DOWN ADDR 00297000
  298. BCT R14,RNGCLP1 GO BACK AND CHECK NEXT 00298000
  299. RNGCDN1 AL R14,SAVEWRK7 ADD LENGTH OF PREVIOUS 00299000
  300. LA R14,2(,R14) GET TOTAL LENGTH -1 00300000
  301. L R1,SAVEWRK6 RELOAD POINTER 00301000
  302. MVRNG LA R15,2(,R14) GET LENGTH NEEDED 00302000
  303. CLR R15,R3 ENOUGH SPACE? 00303000
  304. BNH DOMVRNG YES, GO DO MOVE 00304000
  305. ST R14,SAVEWRK6 SAVE LENGTH 00305000
  306. ST R1,SAVEWRK7 AND ADDR 00306000
  307. ST R6,SAVEWRK8 AND RET ADDR 00307000
  308. BAL R6,BUFRESET RESET BUFFER 00308000
  309. L R6,SAVEWRK8 RELOAD RET ADDR 00309000
  310. L R1,SAVEWRK7 ADDR 00310000
  311. L R14,SAVEWRK6 AND LENGTH 00311000
  312. DOMVRNG EX R14,MVCRNG MOVE RANGE IN 00312000
  313. LA R15,2(,R14) GET SPACE USED 00313000
  314. SLR R3,R15 GET NEW LEFT 00314000
  315. ALR R2,R15 AND NEW ADDR 00315000
  316. BR R6 AND RETURN 00316000
  317. MVCRNG MVC 1(*-*,R2),0(R1) EXECUTED MOVE 00317000
  318. SPACE 00318000
  319. *---------------------------------------------------------------------* 00319000
  320. * ROUTINE TO TYPE BUFFER AND RESET IT * 00320000
  321. *---------------------------------------------------------------------* 00321000
  322. BUFRESET LA R1,PERBUF POINT TO BUFFER 00322000
  323. LR R0,R2 MOVE ADDR TO R0 00323000
  324. SLR R0,R1 CALC LENGTH 00324000
  325. SLR R2,R2 CLEAR FLAGS 00325000
  326. CALL DMKQCNWT AND TYPE THE LINE 00326000
  327. LTR R2,R2 ATTN HIT? 00327000
  328. BNZ QRET YES, STOP DISPLAYING 00328000
  329. LA R2,PERBUF+2 INDENT 2 00329000
  330. LA R3,78 LOAD LENGTH 00330000
  331. MVI PERBUF,C' ' MOVE IN A BLANK 00331000
  332. MVC PERBUF+1(79),PERBUF AND CLEAR TO ZEROS 00332000
  333. BR R6 RETURN 00333000
  334. SPACE 00334000
  335. *---------------------------------------------------------------------* 00335000
  336. * ROUTINE TO DISPLAY NAMES OF FLAGS ON IN A BYTE * 00336000
  337. *---------------------------------------------------------------------* 00337000
  338. BITNAME EQU * 00338000
  339. SLL R0,24 SHIFT BYTE INTO POSITION 00339000
  340. BITNLP ALR R0,R0 SHIFT OVER 1 BIT 00340000
  341. BC B'0011',OUTNMB IF CARRY THEN OUTPUT BIT NAME 00341000
  342. BZR R6 NO MORE BITS, RETURN 00342000
  343. BITCNL LA R1,2(,R1) POINT TO NEXT 00343000
  344. B BITNLP GO FOR NEXT BIT 00344000
  345. OUTNMB SLR R4,R4 CLEAR R4 FOR IC 00345000
  346. ICM R4,B'0011',0(R1) INSERT BIT INFO 00346000
  347. BZ BITCNL NONE, CONTINUE LOOP 00347000
  348. SRDL R4,12 SHIFT OFFSET INTO R5 00348000
  349. CLR R4,R3 ENOUGH? 00349000
  350. BL PUTBIT1 YES, SKIP CALL 00350000
  351. STM R0,R1,SAVEWRK8 SAVE R0-R1 00351000
  352. LR R5,R6 AND RET ADDR 00352000
  353. BAL R6,BUFRESET RESET BUFFER 00353000
  354. LM R0,R1,SAVEWRK8 GET R0-R1 BACK 00354000
  355. LR R6,R5 AND RET CODE 00355000
  356. B OUTNMB GO TRY AGAIN 00356000
  357. PUTBIT1 SRL R5,20 AND SHIFT IT TO POSITION 00357000
  358. ALR R5,R12 GET PROPER ADDR 00358000
  359. BCTR R4,0 MINUS 1 FOR EX 00359000
  360. EX R4,BITMV MOVE NAME TO LINE 00360000
  361. LA R4,2(,R4) ADD TO GET LENGTH USED 00361000
  362. SLR R3,R4 GET NEW WHAT LEFT 00362000
  363. ALR R2,R4 GET NEW AVAIL ADDR 00363000
  364. B BITCNL GO FOR NEXT BIT 00364000
  365. BITMV MVC 1(*-*,R2),0(R5) MOVE NAME TO LINE 00365000
  366. SPACE 00366000
  367. *---------------------------------------------------------------------* 00367000
  368. * PLISTS USED BY BITNAME TO DISPLAY BIT NAMES * 00368000
  369. *---------------------------------------------------------------------* 00369000
  370. SPACE 00370000
  371. * PEXFLAGT BIT NAMES 00371000
  372. TYPEBYTE DC AL2(NBRANCH-DMKPEQ+L'NBRANCH*4096) 00372000
  373. DC AL2(NIFETCH-DMKPEQ+L'NIFETCH*4096) 00373000
  374. DC AL2(NSTORE-DMKPEQ+L'NSTORE*4096) 00374000
  375. DC AL2(NGREG-DMKPEQ+L'NGREG*4096) 00375000
  376. DC AL2(NBRANCH-DMKPEQ+L'NBRANCH*4096) 00376000
  377. DC AL2(NPAGETR-DMKPEQ+L'NPAGETR*4096) 00377000
  378. DC AL2(NMASK-DMKPEQ+L'NMASK*4096) 00378000
  379. * BIT 7 IS UNUSED 00379000
  380. SPACE 00380000
  381. * PEXFLAGO BIT NAMES 00381000
  382. OPTBYTE DC AL2(NRUN-DMKPEQ+L'NRUN*4096) 00382000
  383. DC AL2(NPRINT-DMKPEQ+L'NPRINT*4096) 00383000
  384. DC AL2(NTERM-DMKPEQ+L'NTERM*4096) 00384000
  385. DC 3AL2(*-*) NO NAMES FOR BITS 3, 4, AND 5 00385000
  386. * BITS 6 AND 7 ARE UNUSED 00386000
  387. EJECT 00387000
  388. *---------------------------------------------------------------------* 00388000
  389. * DISPLAY NAMES OF SAVED TRACE SETS * 00389000
  390. *---------------------------------------------------------------------* 00390000
  391. PUTNAMES EQU * HERE TO DISPLAY NAMES OF SAVED SETS 00391000
  392. L R6,PERSAVED LOAD POINTER TO CHAIN 00392000
  393. LTR R6,R6 ANY? 00393000
  394. BZ NOSAVED NO, GO GIVE EMSG 00394000
  395. LP1 MVI PERBUF,C' ' MOVE IN A BLANK 00395000
  396. MVC PERBUF+1(79),PERBUF CLEAR BUFFER 00396000
  397. LA R5,9 MAX OF 9 TO A LINE 00397000
  398. LA R4,PERBUF POINT TO FIRST ONE 00398000
  399. LP2 MVC 0(8,R4),PESNAME-PESBLOK(R6) MOVE IN NAME 00399000
  400. LA R4,9(,R4) POINT TO NEXT BLOK 00400000
  401. L R6,PESNEXT-PESBLOK(,R6) LOAD FORWARD POINTER 00401000
  402. LTR R6,R6 IS THERE ONE? 00402000
  403. BZ PUTIT NO, GO DUMP BUFFER 00403000
  404. BCT R5,LP2 GO BACK FOR MORE 00404000
  405. PUTIT LA R1,PERBUF POINT TO BUFFER 00405000
  406. LR R0,R4 MOVE ADDR 00406000
  407. SLR R0,R1 CALC LENGTH 00407000
  408. SLR R2,R2 SET FLAG REGISTER 00408000
  409. CALL DMKQCNWT AND TYPE MSG 00409000
  410. LTR R2,R2 ANY ATTN HIT? 00410000
  411. BNZ QRET YES, EXIT 00411000
  412. LTR R6,R6 SHOULD WE GO FOR MORE? 00412000
  413. BNZ LP1 YES, GO TO IT 00413000
  414. B QRET OTHERWISE EXIT 00414000
  415. EJECT 00415000
  416. *---------------------------------------------------------------------* 00416000
  417. * PRODUCE ERROR MSG * 00417000
  418. *---------------------------------------------------------------------* 00418000
  419. NOSAVED LA R2,101 LOAD NON-EXISTANT MSG NUMBER 00419000
  420. LA R1,NOSMSG POINT TO MSG 00420000
  421. LA R0,L'NOSMSG LOAD LENGTH 00421000
  422. B PUTMSG AND GO PUT OUT MSG 00422000
  423. NOTRACE LA R1,NOMSG POINT TO MSG 00423000
  424. LA R0,LNOMSG LOAD LENGTH 00424000
  425. LA R2,47 LOAD MSG NUMBER 00425000
  426. PUTMSG ST R2,SAVER2 SET RET CODE 00426000
  427. ICM R0,B'1110',MODID+3 INSERT MOD ID 00427000
  428. ICM R2,B'1000',=X'80' INSERT RETURN FLAG 00428000
  429. CALL DMKERMSG ERROR 00429000
  430. B QRET GO EXIT 00430000
  431. EJECT 00431000
  432. *---------------------------------------------------------------------* 00432000
  433. * CONSTANTS * 00433000
  434. *---------------------------------------------------------------------* 00434000
  435. SPACE 00435000
  436. HEXTAB DC C'0123456789ABCDEF' HEX TRANSLATE TABLE 00436000
  437. NBRANCH DC C'BRANCH' 00437000
  438. NCMD DC C'CMD' 00438000
  439. NGREG DC C'GREG' 00439000
  440. NIFETCH DC C'IFETCH' 00440000
  441. NPAGETR DC C'PAGETRACE' 00441000
  442. NMASK DC C'MASK' 00442000
  443. NPRINT DC C'PRINTER' 00443000
  444. NRANGE DC C'RANGE' 00444000
  445. NRUN DC C'RUN' 00445000
  446. NSKIP DC C'SKIP' 00446000
  447. NSTEP DC C'STEP' 00447000
  448. NTERM DC C'TERMINAL' 00448000
  449. NSTORE DC C'STORE' 00449000
  450. NOMSG DC C'TRACE',X'00',C'SET' 00450000
  451. LNOMSG EQU *-NOMSG 00451000
  452. NOSMSG DC C'TRACE SETS DO NOT EXIST' 00452000
  453. EJECT 00453000
  454. *---------------------------------------------------------------------* 00454000
  455. * LITERALS * 00455000
  456. *---------------------------------------------------------------------* 00456000
  457. LTORG 00457000
  458. EJECT 00458000
  459. *---------------------------------------------------------------------* 00459000
  460. * DSECTS AND EQUATES * 00460000
  461. *---------------------------------------------------------------------* 00461000
  462. SPACE 00462000
  463. COPY EQU 00463000
  464. COPY PERBLOKS 00464000
  465. PSA 00465000
  466. COPY SAVE 00466000
  467. COPY VMBLOK 00467000
  468. END 00468000