Table of Contents

DMKPEC Source

References

Source Listing

DMKPEC.ASSEMBLE.txt
  1. PEC TITLE 'DMKPEC VM/370 VERSION 6, LEVEL 0' 00001000
  2. COPY OPTIONS 00002000
  3. COPY LOCAL 00003000
  4. EJECT , 00004000
  5. DMKPEC 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 DMKSCNFD,DMKCVTHB,DMKERMSG,DMKCVTBH,DMKCVTBD,DMKPERCH 00012000
  13. EXTRN DMKPERT,DMKPEQRY,DMKPEDTB 00013000
  14. SPACE 00014000
  15. MODID DC CL8'DMKPEC' PAGEABLE MODULE IDENTIFIER 00015000
  16. SPACE 00016000
  17. DMKPECMD RELOC , COMMAND ENTRY FROM DMKCFM 00017000
  18. XC SAVEWRK1(4),SAVEWRK1 CLEAR CHAIN POINTER 00018000
  19. XC SAVEWRK2(4),SAVEWRK2 AND NEXT ONE 00019000
  20. XC SAVEWRK3(4),SAVEWRK3 AND CLEAR FLAG AREA 00020000
  21. MVI SAVEWRK3+1,X'FF' AND "AND" FLAGS 00021000
  22. XC SAVEWRK4(4),SAVEWRK4 CLEAR STEP COUNT 00022000
  23. XC SAVEWRK5(4),SAVEWRK5 CLEAR SKIP COUNT 00023000
  24. L R8,VMPERCTL LOAD ADDR OF TRACE EXT BLOCK 00024000
  25. * NOTE THAT IT IS NOT NECESARY FOR THE PERBLOK TO EXIST AT THIS POINT 00025000
  26. EJECT 00026000
  27. *---------------------------------------------------------------------* 00027000
  28. * SCAN COMMAND LINE FOR KEYWORDS * 00028000
  29. *---------------------------------------------------------------------* 00029000
  30. PRCD001 EQU * 00030000
  31. BAL R10,SCANIT POINT TO FIRST/NEXT KEYWORD 00031000
  32. BNZ SCANDONE ALL DONE, GO CONSOLIDATE BLOCKS 00032000
  33. CLI 0(R1),C'G' COULD IT BE A GPR KEYWORD? 00033000
  34. BE GN YES, GO HANDLE IT 00034000
  35. SCNLST LA R2,KWDLIST POINT TO KEYWORD LIST 00035000
  36. SLR R3,R3 CLEAR A REGISTER FOR IC 00036000
  37. LR R4,R0 MOVE FOR EX 00037000
  38. BCTR R4,0 MINUS 1 FOR EX 00038000
  39. FKWD CLM R4,B'0001',3(R2) LONG ENOUGH? 00039000
  40. BL NXTKWD NO, NEXT KEYWORD 00040000
  41. CLM R4,B'0001',4(R2) IS IT TOO LONG? 00041000
  42. BH NXTKWD YES, LOOK AT NEXT ONE 00042000
  43. EX R4,KWDCMP COMPARE 00043000
  44. BE GOTKWD GOT IT, GO HANDLE 00044000
  45. NXTKWD IC R3,4(,R2) INSERT LENGTH OF NAME -1 00045000
  46. LA R2,6(R2,R3) POINT TO NEXT ENTRY 00046000
  47. CLI 0(R2),X'FF' END OF LIST? 00047000
  48. BNE FKWD NO, GO LOOK AT NEXT ONE 00048000
  49. BAL R10,GETRNG SEE IF IS RANGE 00049000
  50. BZ IMPRNG YES, IMPLICIT RANGE 00050000
  51. B PRMERR1 OTHERWISE BAD KEYWORD 00051000
  52. KWDCMP CLC 5(*-*,R2),0(R1) EXECUTED COMPARE 00052000
  53. GOTKWD LH R4,0(,R2) LOAD OFFSET OF HANDLER 00053000
  54. LTR R4,R4 ANY HANDLER FOR IT? 00054000
  55. BZ PRMERR1 NO, ERROR 00055000
  56. NI SAVEWRK3+3,255-X'20' TURN OF SCAN FLAG 00056000
  57. B 0(R4,R12) AND GO TO IT 00057000
  58. EJECT 00058000
  59. *---------------------------------------------------------------------* 00059000
  60. * IFETCH <HEX STRING> * 00060000
  61. * - * 00061000
  62. * IFETCH SPECIFIES A STOP FOR ALL INSTRUCTION FETCHES OR FOR A * 00062000
  63. * PARTICULAR TYPE OF INSTRUCTION. IF ANY HEX STRING IS GIVEN A * 00063000
  64. * STOP WILL OCCUR ONLY IF THE INSTRUCTION FETCHED MATCHES THE * 00064000
  65. * GIVEN HEX STRING. * 00065000
  66. *---------------------------------------------------------------------* 00066000
  67. IFETCH EQU * HANDLE IFETCH AND STORE 00067000
  68. SLR R3,R3 CLEAR FOR LATER 00068000
  69. LR R4,R3 AND THIS ALSO 00069000
  70. BAL R10,GETXSTR TRY FOR A HEX STRING 00070000
  71. BNZ IFGET NONE, GO GET BLOK 00071000
  72. ICOMM NI SAVEWRK3+3,255-X'20' OK, THEN RESET SCAN FLAG. 00072000
  73. LR R5,R0 SAVE LENGTH FOR LATER 00073000
  74. LR R4,R1 AND ADDR 00074000
  75. LA R3,7(,R5) ROUND UP 00075000
  76. CLI 2(R2),PEXMASK IS IT A MASK STOP? 00076000
  77. BNE *+6 NO, SKIP ADD 00077000
  78. ALR R3,R5 YES, THEN NEED SPACE FOR OLD VAL 00078000
  79. SRL R3,3 AND GET DWORDS 00079000
  80. IFGET LA R0,PEXSIZE(,R3) LOAD LENGTH NEEDED 00080000
  81. CALL DMKFREE GO GET A BLOCK OF STORAGE 00081000
  82. XC 0(PEXSIZE*8,R1),0(R1) CLEAR BLOK 00082000
  83. STM R6,R7,PEXADDR3-PEXBLOK(R1) SAVE STORE RANGES 00083000
  84. LR R7,R1 MOVE FOR ADDRESSABILITY 00084000
  85. STC R0,PEXLEN SAVE LENGTH OF BLOK 00085000
  86. MVC PEXFLAGT(1),2(R2) MOVE IN TYPE FLAG 00086000
  87. LTR R4,R4 WAS THERE ANY DATA? 00087000
  88. BZ CHAINI NO, GO CHAIN BLOCK ON 00088000
  89. LA R2,PEXDATA POINT TO DATA AREA 00089000
  90. LR R3,R5 MOVE LENGTH 00090000
  91. STC R3,PEXDLEN SAVE LENGTH 00091000
  92. LR R0,R3 MOVE LENGTH 00092000
  93. LR R1,R4 MOVE ADDR 00093000
  94. MVCL R2,R4 MOVE INTO BLOK 00094000
  95. AL R0,F7 ROUND UP 00095000
  96. SRL R0,3 GET DWORDS 00096000
  97. CALL DMKFRET FRET BLOK 00097000
  98. CLI PEXFLAGT,PEXMASK IS IT A MASK STOP? 00098000
  99. BNE CHAINI NO, THEN ARE DONE 00099000
  100. TM VMESTAT,VMEXTCM IS MACHINE IN EC MODE? 00100000
  101. BNO GETDATA NO, GO GET DATA 00101000
  102. TM VMPSW,TRANMODE IS TRANSLATE ON? 00102000
  103. BNO GETDATA NO, GO GET DATA 00103000
  104. MAKEINVA OI PEXFLAGO,PEXDATAI YES, THEN MARK DATA AS INVALID 00104000
  105. B CHAINI AND GO CHAIN ON 00105000
  106. GETDATA L R3,PEXADDR3 LOAD ADDRESS 00106000
  107. SLR R1,R1 CLEAR R1 FOR IC 00107000
  108. IC R1,PEXDLEN INSERT LENGTH 00108000
  109. BCTR R1,0 MINUS 1 00109000
  110. LR R5,R1 SAVE IN R5 00110000
  111. ALR R1,R3 POINT TO LAST BYTE 00111000
  112. N R1,XPAGNUM ROUND DOWN TO 4K BOUNDRY 00112000
  113. CLR R1,R3 IS IT WITHIN 1 4K PAGE? 00113000
  114. BH TWOMOV NO, WILL HAVE TO DO IN TWO PIECES 00114000
  115. LR R1,R3 MOVE ADDRESS TO R1 00115000
  116. BAL R10,GETPAGE GO GET PAGE 00116000
  117. BNZ MAKEINVA NOT AVAIL, GO MAKE INVALID 00117000
  118. LA R4,PEXDATA+1(R5) POINT TO PLACE TO PUT IT 00118000
  119. EX R5,MASKMVC1 MOVE INTO AREA 00119000
  120. B CHAINI AND GO CHAIN ON 00120000
  121. TWOMOV SLR R6,R6 CLEAR FLAG REG 00121000
  122. LR R1,R3 MOVE ADDRRESS 00122000
  123. BAL R10,GETPAGE TRY TO GET REAL ADDRESS 00123000
  124. BNZ TWOMOV1 NOT AVAIL, TRY FOR SECOND PART ANYWAY 00124000
  125. LA R1,0(R3,R5) POINT TO LAST BYTE 00125000
  126. N R1,XPAGNUM TRUNCATE DOWN 00126000
  127. BCTR R1,0 MINUS 1 00127000
  128. SLR R1,R3 GET LENGTH 00128000
  129. LA R4,PEXDATA+1(R5) POINT TO DATA AREA 00129000
  130. EX R1,MASKMVC1 MOVE DATA IN 00130000
  131. BCTR R6,0 SET FLAG REG 00131000
  132. TWOMOV1 LA R1,0(R3,R5) POINT TO LAST BYTE 00132000
  133. N R1,XPAGNUM TRUNCATE DOWN 00133000
  134. SLR R3,R1 GET LENGTH OF FIRST PART 00134000
  135. LPR R3,R3 ... 00135000
  136. BAL R10,GETPAGE TRY TO GET PAGE 00136000
  137. BZ DOMOV1 GO MOVE DATA IN 00137000
  138. LTR R6,R6 DID WE GET ANYTHING? 00138000
  139. BZ MAKEINVA NO, GO TURN ON INVALID BIT 00139000
  140. B CHAINI YES, GO CHAIN ON 00140000
  141. DOMOV1 BCTR R6,0 SET FLAG REG 00141000
  142. LA R4,PEXDATA+1(R5) POINT TO DATA AREA 00142000
  143. LA R4,0(R4,R3) POINT TO SECOND PART 00143000
  144. SLR R5,R3 AND GET LENGTH OF SECOND PART 00144000
  145. EX R5,MASKMVC1 AND MOVE IT IN 00145000
  146. CHAINI MVC PEXNEXT(4),SAVEWRK1 MOVE IN POINTER 00146000
  147. ST R7,SAVEWRK1 AND CHAIN ON 00147000
  148. OI SAVEWRK3+3,X'40' INDICATE CHANGES MADE 00148000
  149. LA R1,1 AND WHILE WE ARE AT IT, INIT 00149000
  150. ST R1,PEXSTEP STEP 00150000
  151. ST R1,PEXSTEPN ... 00151000
  152. ST R1,PEXSKIP AND SKIP 00152000
  153. ST R1,PEXSKIPN ... 00153000
  154. B PRCD001 GO FOR NEXT KEYWORD 00154000
  155. MASKMVC1 MVC 0(*-*,R4),0(R2) EXECUTED MOVE 00155000
  156. EJECT 00156000
  157. *---------------------------------------------------------------------* 00157000
  158. * BRANCH <RANGE> * 00158000
  159. * - * 00159000
  160. * BRANCH SPECIFIES A STOP FOR EITHER SUCCESSFULL BRANCHES OR FOR * 00160000
  161. * A BRANCH INTO AN ADDRESS OR RANGE OF ADDRESSES. IF NO RANGE * 00161000
  162. * IS SPECIFIED, A STOP WILL OCCUR AFTER A SUCCESFULL BRANCH. IF * 00162000
  163. * A RANGE IS SPECIFIED, A STOP WILL OCCUR FOR A BRANCH INTO THAT * 00163000
  164. * RANGE AND A TRACEBACK OF THE LAST 5 SUCCESSFUL BRANCHES WILL BE * 00164000
  165. * DISPLAYED. * 00165000
  166. *---------------------------------------------------------------------* 00166000
  167. BRANCH EQU * HANDLE BRANCH KEYWORD 00167000
  168. LA R6,1 SET FLAG REGISTER 00168000
  169. SLR R4,R4 CLEAR RANGE 00169000
  170. LR R5,R4 ... 00170000
  171. BAL R10,GETRNG TRY TO GET A RANGE 00171000
  172. BNZ GTBRBK NO, GO GET BLOK 00172000
  173. NI SAVEWRK3+3,255-X'20' TURN OFF SCAN FLAG 00173000
  174. LR R6,R4 CLEAR FLAG REG 00174000
  175. LR R4,R0 MOVE FIRST ADDR 00175000
  176. LR R5,R1 AND SECOND 00176000
  177. GTBRBK LA R0,PEXSIZE LOAD SIZE OF BLOK 00177000
  178. CALL DMKFREE GET SPACE FOR IT 00178000
  179. LR R7,R1 POINT TO IT 00179000
  180. XC PEXBLOK(PEXSIZE*8),PEXBLOK CLEAR TO ZEROS 00180000
  181. STC R0,PEXLEN SAVE LENGTH 00181000
  182. MVI PEXFLAGT,PEXBR SET BRANCH FLAG 00182000
  183. LTR R6,R6 WAS THERE A RANGE? 00183000
  184. BNZ CHAINI NO, GO CHAIN ON 00184000
  185. STM R4,R5,PEXADDR3 SAVE RANGE 00185000
  186. MVI PEXFLAGT,PEXBRTB SET TYPE TO TRACEBACK 00186000
  187. B CHAINI AND GO CHAIN ON 00187000
  188. EJECT 00188000
  189. *---------------------------------------------------------------------* 00189000
  190. * STORE <ADDRESS HEXDATA> * 00190000
  191. * -- <RANGE> * 00191000
  192. * STORE SPECIFIES A STOP FOR ALL STORAGE ALTERATIONS OR FOR AN * 00192000
  193. * ALTERATION OF A GIVEN ADDRESS TO A GIVEN VALUE. IF NO PARMS * 00193000
  194. * ARE GIVEN A STOP WILL OCCUR FOR ALL STORE EVENTS, BUT IF THE * 00194000
  195. * PARAMETERS ARE GIVEN A STOP WILL OCCUR ONLY IF THE GIVEN * 00195000
  196. * ADDRESS IS ALTERED TO THE GIVEN VALUE OR IF THE PARAMETER WAS * 00196000
  197. * A RANGE, A STOP WILL OCCUR ONLY IF THE STORE IS MADE INTO * 00197000
  198. * THAT RANGE. * 00198000
  199. *---------------------------------------------------------------------* 00199000
  200. STORE EQU * 00200000
  201. SLR R3,R3 CLEAR FOR LATER 00201000
  202. LR R4,R3 AND THIS ALSO 00202000
  203. LR R6,R3 AND DEFAULT LOW RANGE 00203000
  204. L R7,XRIGHT24 AND LOAD HIGH RANGE 00204000
  205. BAL R10,GETRNG TRY FOR A RANGE 00205000
  206. BNZ IFGET GO JOIN COMMON IFETCH CODE 00206000
  207. NI SAVEWRK3+3,255-X'20' MARK PARM AS USED 00207000
  208. LR R6,R0 MOVE LOW 00208000
  209. LR R7,R1 AND HIGH 00209000
  210. CLR R7,R6 SHOULD WE TRY FOR HEX STRING? 00210000
  211. BNE IFGET NO, GO JOIN COMMON 00211000
  212. BAL R10,GETXSTR TRY FOR A HEX STRING 00212000
  213. BNZ IFGET NONE, GO JOIN COMMON 00213000
  214. ALR R7,R0 ADD LENGTH 00214000
  215. BCTR R7,0 MINUS 1 00215000
  216. B ICOMM AND GO JOIN COMMON IFETCH CODE 00216000
  217. EJECT 00217000
  218. *---------------------------------------------------------------------* 00218000
  219. * MASK ADDRESS HEXDATA * 00219000
  220. * - * 00220000
  221. * MASK SPECIFIES A STOP FOR AN ALTERATION OF BITS AT A GIVEN * 00221000
  222. * GIVEN ADDRESS SPECIFIED BY THE GIVEN MASK. * 00222000
  223. *---------------------------------------------------------------------* 00223000
  224. MASK EQU * 00224000
  225. BAL R10,GETRNG TRY FOR A RANGE 00225000
  226. BNZ PRMERR2 NONE, ERROR 00226000
  227. CLR R0,R1 BETTER BE THE SAME 00227000
  228. BNE PRMERR2 GO PUT OUT EMSG 00228000
  229. LR R6,R1 MOVE ADDR 00229000
  230. LR R7,R1 AND HERE ALSO 00230000
  231. NI SAVEWRK3+3,255-X'20' MARK PARM AS USED 00231000
  232. BAL R10,GETXSTR BETTER BE A HEX STRING 00232000
  233. BNZ PRMERR2 NO, ERROR 00233000
  234. ALR R7,R0 ADD LENGTH 00234000
  235. BCTR R7,0 MINUS 1 00235000
  236. B ICOMM AND JOIN COMMON 00236000
  237. EJECT 00237000
  238. *---------------------------------------------------------------------* 00238000
  239. * PAGETRACE <PAGE-SIZE> * 00239000
  240. * -- * 00240000
  241. * PAGETRACE CAUSES A TIME STAMPED STOP TO OCCUR EACH TIME A NEW * 00241000
  242. * SECTION OF STORAGE IS ENTERED. IF PAGE-SIZE IS SPECIFIED THEN * 00242000
  243. * STORAGE IS DIVIDED UP INTO SECTIONS OF THAT SIZE AND A STOP * 00243000
  244. * OCCURS EACH TIME A NEW SECTION IS ENTERED. IF THE PAGE-SIZE IS * 00244000
  245. * NOT GIVEN, THE SECTIONS OF CORE WILL BE DEFINED BY THE RANGE * 00245000
  246. * MODIFIERS. * 00246000
  247. *---------------------------------------------------------------------* 00247000
  248. PAGETR EQU * HERE TO HANDLE PAGE TRACE ELEMENT 00248000
  249. SLR R4,R4 CLEAR R4 00249000
  250. BAL R10,GETDEC TRY FOR A DECIMAL PARM 00250000
  251. BZ PAGEGOT YES, GOT IT 00251000
  252. CL R0,F1 ONLY ONE CHARACTER UNSCANNED? 00252000
  253. BH NOPAGE NO, CAN'T BE NNNK 00253000
  254. CLI 0(R1),C'K' WAS IT A K? 00254000
  255. BNE NOPAGE NO, NO PAGE SPECIFIED 00255000
  256. LM R0,R1,SAVEWRK6 RELOAD SCAN PARMS 00256000
  257. LR R15,R0 MOVE TO R15 00257000
  258. S R15,F2 DECREMENT BY 2 00258000
  259. BL NOPAGE NO PAGESIZE ONLY K PRESENT 00259000
  260. EX R15,PACKIT PACK IT 00260000
  261. CVB R1,SAVEWRK8 CONVERT TO BINARY 00261000
  262. CH R1,=H'16384' TOO BIG? 00262000
  263. BH NOPAGE YES, NO PAGE 00263000
  264. SLL R1,10 SHIFT 00264000
  265. PAGEGOT LR R4,R1 MOVE PARM TO SAFE REGISTER 00265000
  266. C R4,XRIGHT24 TOO BIG? 00266000
  267. BH NOPAGE YES, NO PAGESIZE 00267000
  268. NI SAVEWRK3+3,255-X'20' TURN OFF SCAN FLAG 00268000
  269. NOPAGE LA R0,PEXSIZE LOAD LENGTH OF BLOK 00269000
  270. CALL DMKFREE AND GET SPACE 00270000
  271. LR R7,R1 MOVE FOR ADDRESSABILITY 00271000
  272. XC PEXBLOK(PEXSIZE*8),PEXBLOK CLEAR TO ZEROS 00272000
  273. STC R0,PEXLEN SAVE BLOCK LENGTH 00273000
  274. MVC PEXADDR4(4),XRIGHT24 MOVE INITIAL ADDR 00274000
  275. MVI PEXFLAGT,PEXPGT FLAG AS PAGE TRACE 00275000
  276. ST R4,PEXINCR SAVE INCREMENT 00276000
  277. B CHAINI 00277000
  278. EJECT 00278000
  279. *---------------------------------------------------------------------* 00279000
  280. * GREGN <HEX DATA> * 00280000
  281. * - * 00281000
  282. * GREG SPECIFIES A STOP FOR EITHER ALL REGISTERS, OR A PARTICULAR * 00282000
  283. * REGISTER. IF N IS SPECIFIED (EITHER HEX OR DECIMAL). IF ANY HEX * 00283000
  284. * DATA IS SPECIFIED A STOP WILL OCCUR ONLY WHEN THE REGISTER OR * 00284000
  285. * OR REGISTERS ARE CHANGED TO THAT VALUE. A STOP WILL NOT OCCUR * 00285000
  286. * IF THE VALUE AFTER THE CHANGE IS THE SAME AS BEFORE THE CHANGE. * 00286000
  287. *---------------------------------------------------------------------* 00287000
  288. GN EQU * HANDLE GN KEYWORD 00288000
  289. CL R0,F4 LENGTH GREATER THAN 4? 00289000
  290. BH SCNLST YES, GO CHECK FOR KEYWORDS FIRST 00290000
  291. CL R0,F1 LESS THAN 2? 00291000
  292. BE SCNLST YES, THEN CONTINUE SCAN 00292000
  293. LA R1,1(,R1) POINT TO SECOND CHAR 00293000
  294. BCTR R0,0 MINUS 1 00294000
  295. CALL DMKCVTHB GO TRY TO CONVERT 00295000
  296. BZ GOTGR GOT REG, GO CHECK IT 00296000
  297. RETREG LM R0,R1,SAVEWRK6 GET REGS BACK 00297000
  298. B SCNLST GO DO SCAN 00298000
  299. GOTGR CH R1,=H'21' GREATER THAN X'15'? 00299000
  300. BH RETREG YES, NOT GN PARM THEN 00300000
  301. NI SAVEWRK3+3,255-X'20' INDICATE ACCEPT PARM 00301000
  302. CL R1,F15 TOO HIGH? 00302000
  303. BNH *+8 NO, SKIP SL 00303000
  304. SL R1,F6 SUBTRACT 6 00304000
  305. LA R4,1 LOAD A 1 00305000
  306. SLL R4,15 SHIFT IT OVER 00306000
  307. SRL R4,0(R1) SHIFT TO PROPER POSITION 00307000
  308. B TRYGDAT GO SEE IF ANY DATA 00308000
  309. GPRS L R4,FFS LOAD FLAGS FOR ALL REGS 00309000
  310. TRYGDAT SLR R2,R2 CLEAR FLAG REGISTER 00310000
  311. BAL R10,GETHXWD GO TRY FOR A HEX WORD 00311000
  312. BNZ GETGBLK NONE, GO GET BLOCK 00312000
  313. NI SAVEWRK3+3,255-X'20' OK, THEN RESET SCAN FLAG 00313000
  314. LR R3,R1 SAVE DATA 00314000
  315. LA R2,1 LOAD FLAG REG 00315000
  316. GETGBLK LA R0,PEXSIZE(R2) LOAD SIZE OF BLOK 00316000
  317. CALL DMKFREE GET SPACE FOR IT 00317000
  318. LR R7,R1 MOVE SO CAN ADDRESS 00318000
  319. XC PEXBLOK(PEXSIZE*8),PEXBLOK CLEAR 00319000
  320. STC R0,PEXLEN SAVE LENGTH 00320000
  321. MVI PEXFLAGT,PEXGPR FLAG AS GPR TRAP 00321000
  322. STH R4,PEXGREG SAVE REGISTER FLAGS 00322000
  323. LTR R2,R2 IS IT A DATA STOP? 00323000
  324. BZ CHAINI GO CHAIN ON 00324000
  325. ST R3,PEXDATA SAVE DATA 00325000
  326. MVI PEXDLEN,4 SET DATA LENGTH 00326000
  327. B CHAINI GO CHAIN ON 00327000
  328. EJECT 00328000
  329. *---------------------------------------------------------------------* 00329000
  330. * SKIP DEC-NUMBER * 00330000
  331. * -- * 00331000
  332. * IF SKIP IS SPECIFIED IT CAUSES ONLY EVERY NTH STOP TO BE * 00332000
  333. * DISPLAYED, WHERE DEC-NUMBER SPECIFIES THE NUMBER OF STOPS TO * 00333000
  334. * BE IGNORED BETWEEN DISPLAYS. * 00334000
  335. * * 00335000
  336. * STEP DEC-NUMBER * 00336000
  337. * --- * 00337000
  338. * IF STEP IS SPECIFIED CF MODE WILL BE ENTERED ONLY AFTER THE * 00338000
  339. * NUMBER OF DISPLAYS SPECIFIED BY DEC-NUMBER HAVE OCCURED. * 00339000
  340. *---------------------------------------------------------------------* 00340000
  341. SKIPK EQU * HANDLE SKIP AND STEP 00341000
  342. OI SAVEWRK3+3,X'40' INDICATE CHANGES MADE 00342000
  343. SLR R3,R3 CLEAR R3 FOR IC 00343000
  344. IC R3,2(,R2) INSERT OFFSET 00344000
  345. BAL R10,GETDEC TRY TO GET DECIMAL PARM 00345000
  346. BNZ PRMERR2 NONE, TOO BAD 00346000
  347. LTR R1,R1 LESS THAN 1? 00347000
  348. BNH PRMERR2 YES, INVALID 00348000
  349. NI SAVEWRK3+3,255-X'20' TURN OFF SCAN FLAG 00349000
  350. ST R1,SAVEAREA(R3) SAVE COUNT 00350000
  351. B PRCD001 GO FOR NEXT KEYWORD 00351000
  352. EJECT 00352000
  353. *---------------------------------------------------------------------* 00353000
  354. * RUN * 00354000
  355. * -- * 00355000
  356. * IF RUN IS SPECIFIED CF MODE WILL NOT BE ENTERED AFTER EACH * 00356000
  357. * DISPLAY, IT IS EQUIVILENT TO A STEP OF INFINITY. * 00357000
  358. * * 00358000
  359. * PRINT * 00359000
  360. * -- * 00360000
  361. * IF PRINT IS SPECIFIED, OUTPUT WILL BE DIRECTED TO THE PRINTER * 00361000
  362. * * 00362000
  363. * TERMINAL * 00363000
  364. * -- * 00364000
  365. * IF SPECIFIED, OUTPUT WILL BE DIRECTED TO THE TERMINAL. THIS IS * 00365000
  366. * THE NORMAL DEFAULT, BUT MAY BE USED TO ALTER A PREEXISTING * 00366000
  367. * TRACE ELEMENT WHERE THE OUTPUT WAS DIRECTED ELSEWHERE * 00367000
  368. *---------------------------------------------------------------------* 00368000
  369. FLAGON EQU * HANDLE PRINT, TERMINAL, RUN 00369000
  370. OI SAVEWRK3+3,X'40' INDICATE CHANGES MADE 00370000
  371. OC SAVEWRK3(1),2(R2) TURN ON FLAGS 00371000
  372. MVC SAVEWRK3+2(1),2(R2) MOVE ALSO TO WORKAREA 00372000
  373. NC SAVEWRK3+2(1),SAVEWRK3+1 HAD IT BEEN TURNED OFF ALREADY? 00373000
  374. BZ CONFLICT YES, CONFLICTING OPTIONS 00374000
  375. B PRCD001 GO GET NEXT KEYWORD 00375000
  376. EJECT 00376000
  377. *---------------------------------------------------------------------* 00377000
  378. * NORUN * 00378000
  379. * --- * 00379000
  380. * IF RUN HAD BEEN SPECIFIED FOR A TRACE ELEMENT NORUN WILL RESET * 00380000
  381. * IT SO THAT CF MODE WILL BE ENTERED AFTER DISPLAYS. * 00381000
  382. * * 00382000
  383. * NOPRINT * 00383000
  384. * --- * 00384000
  385. * IF PRINT HAD BEEN SPECIFIED FOR A TRACE ELEMENT, NOPRINT WILL * 00385000
  386. * RESET IT AND STOP OUTPUT TO THE PRINTER FOR THAT ELEMENT. * 00386000
  387. * * 00387000
  388. * NOTERMINAL * 00388000
  389. * --- * 00389000
  390. * NOTERMINAL WILL CAUSE TERMINAL OUTPUT FOR A GIVEN TRACE ELEMENT * 00390000
  391. * TO BE SUPPRESSED. * 00391000
  392. * * 00392000
  393. * NOTE: IF BOTH NOTERMINAL AND NOPRINT ARE IN EFFECT FOR A TRACE * 00393000
  394. * ELEMENT, THAT TRACE ELEMENT IS DELETED. * 00394000
  395. *---------------------------------------------------------------------* 00395000
  396. FLAGOFF EQU * HANDLE NOPRINT, NOTERMINAL, NORUN 00396000
  397. OI SAVEWRK3+3,X'40' INDICATE CHANGESS MADE 00397000
  398. NC SAVEWRK3+1(1),2(R2) TURN OFF FLAG 00398000
  399. MVC SAVEWRK3+2(1),2(R2) MOVE TO WORKAREA 00399000
  400. XI SAVEWRK3+2,X'FF' TOGGLE THE BITS 00400000
  401. NC SAVEWRK3+2(1),SAVEWRK3 HAD IT PREVIOUSLY BEEN TURNED O 00401000
  402. BNZ CONFLICT YES, CONFLICTING OPTIONS 00402000
  403. B PRCD001 GO GET NEXT KEYWORD 00403000
  404. EJECT 00404000
  405. *---------------------------------------------------------------------* 00405000
  406. * RANGE ADDRESS-RANGE * 00406000
  407. * - * 00407000
  408. * THE RANGE KEYWORD IS USED TO MODIFY THE EFFECT OF THE OTHERS BY * 00408000
  409. * LIMITING THE RANGE OVER WHICH THEY ARE IN EFFECT. THE RANGE * 00409000
  410. * GIVEN MAY BE WRAP-AROUND. THIS ROUTINE MAY ALSO BE ENTERED AT * 00410000
  411. * IMPRNG IF A KEYWORD WAS UNRECOGNIZED AND COULD BE A RANGE. THIS * 00411000
  412. * HAS THE EFFECT OF ALLOWING AN ABBREVIATION OF ZERO CHARACTERS * 00412000
  413. * FOR THE RANGE KEYWORD. * 00413000
  414. *---------------------------------------------------------------------* 00414000
  415. RANGE EQU * HANDLE RANGE KEYWORD 00415000
  416. BAL R10,GETRNG TRY FOR A RANGE 00416000
  417. BNZ PRMERR2 NONE, BAD NEWS 00417000
  418. IMPRNG NI SAVEWRK3+3,255-X'20' INDICATE PARM ACCEPTED 00418000
  419. OI SAVEWRK3+3,X'40' INDICATE CHANGES MADE 00419000
  420. LR R4,R0 MOVE IT OVER 00420000
  421. LR R5,R1 ... 00421000
  422. LA R0,2 WE WANT 2 DOUBLE WORDS 00422000
  423. CALL DMKFREE AND GO GET IT 00423000
  424. STM R4,R5,4(R1) SAVE RANGE IN BLOK 00424000
  425. CHAINR LA R3,SAVEWRK2 POINT TO CHAIN OF RANGE BLOKS 00425000
  426. CRLP ICM R4,B'1111',0(R3) POINT TO NEXT (IF ANY) 00426000
  427. BZ CHONR END OF CHAIN, GO CHAIN IT ON 00427000
  428. LR R3,R4 PUT INTO R3 00428000
  429. B CRLP AND GO FOR NEXT 00429000
  430. CHONR ST R1,0(,R3) CHAIN ON 00430000
  431. ST R4,0(,R1) AND ZERO FORWARD POINTER 00431000
  432. B PRCD001 GO BACK TOO PROCESS NEXT KEYWORD 00432000
  433. EJECT 00433000
  434. *---------------------------------------------------------------------* 00434000
  435. * CMD COMMANDS * 00435000
  436. * -- * 00436000
  437. * CMD ALLOWS ONE OR MORE CP COMMANDS TO BE ASSOCIATED WITH A PER * 00437000
  438. * TRAP. WHEN THE PER TRAP IS SATISFIED THE COMMANDS WILL BE * 00438000
  439. * EXECUTED. TO ALLOW MORE THAN ONE COMMAND, THE COMMANDS MUST * 00439000
  440. * BE SEPERATED BY ; SINCE ALL THAT FOLLOWS THE CMD KEYWORD WILL * 00440000
  441. * BE TREATED AS A COMMAND TO BE EXECUTED. * 00441000
  442. *---------------------------------------------------------------------* 00442000
  443. CF EQU * 00443000
  444. BAL R10,SCANIT SEE IF ANY MORE ON LINE 00444000
  445. BNZ PRMERR2 NO, ERROR 00445000
  446. OI SAVEWRK3+3,X'40' INDICATE ACTION NEEDED 00446000
  447. LR R5,R1 SAVE ADDR 00447000
  448. CFLP1 CALL DMKSCNFD SCAN FOR MORE 00448000
  449. BZ CFLP1 CONTINUE SCAN 00449000
  450. ALR R1,R0 POINT PAST END 00450000
  451. SLR R1,R5 GET LENGTH 00451000
  452. LR R4,R1 AND MOVE TO R4 00452000
  453. LA R0,8(,R4) ROUND UP 00453000
  454. SRL R0,3 GET DWORDS 00454000
  455. CALL DMKFREE GO FREE LINE 00455000
  456. STC R4,0(,R1) SAVE LENGTH IN BUFFER 00456000
  457. BCTR R4,0 MINUS 1 00457000
  458. EX R4,SAVBUF MOVE TO BUFFER 00458000
  459. ST R1,SAVEWRK6 SAVE POINTER 00459000
  460. LA R4,1(,R4) ADD 1 FOR BCT 00460000
  461. CFEOLLP CLI 1(R1),C';' SEMICOLEN? 00461000
  462. BNE *+8 NO, SKIP MVI 00462000
  463. MVI 1(R1),X'15' THEN MAKE IT NL CHARACTER 00463000
  464. LA R1,1(,R1) POINT TO NEXT 00464000
  465. BCT R4,CFEOLLP AND GO BACK TO CHECK FOR MORE 00465000
  466. OI SAVEWRK3+3,X'10'+X'04' INDICATE EOL AND SAVED CF 00466000
  467. B PRCD001 AND GO BACK TO MAIN LOOP 00467000
  468. SAVBUF MVC 1(*-*,R1),0(R5) MOVE LINE TO BUFFER 00468000
  469. EJECT 00469000
  470. *---------------------------------------------------------------------* 00470000
  471. * DUMP * 00471000
  472. * - * 00472000
  473. * DUMP CAUSES THE CONTENTS OF THE TRACEBACK TABLE (IF ANY) TO BE * 00473000
  474. * DISPLAYED AT THE CONSOLE. * 00474000
  475. *---------------------------------------------------------------------* 00475000
  476. DUMP EQU * 00476000
  477. CALL DMKPEDTB GO DISPLAY TABLE 00477000
  478. B PRCD001 GO FOR MORE 00478000
  479. B PRCD001 GO BACK FOR MORE 00479000
  480. EJECT 00480000
  481. *---------------------------------------------------------------------* 00481000
  482. * SAVE TRACE-NAME * 00482000
  483. * -- * 00483000
  484. * THE SAVE KEYWORD WILL CAUSE THE CURRENT TRACE SET TO BE SAVED * 00484000
  485. * UNDER THE SPECIFIED NAME. IF A TRACE SET OF THAT NAME ALREADY * 00485000
  486. * EXISTS, IT WILL BE FRET'D. * 00486000
  487. *---------------------------------------------------------------------* 00487000
  488. SAVE EQU * 00488000
  489. LTR R8,R8 ANY PERBLOK? 00489000
  490. BNH NOSAVE NO, GIVE EMSG 00490000
  491. ICM R7,B'1111',PERCHAIN LOAD CHAIN POINTER 00491000
  492. BZ NOSAVE NO CHAIN, GO GIVE EMSG 00492000
  493. BAL R10,GETPES SEE IF ONE ALREADY EXISTS 00493000
  494. BNZ MAKEPES NO, THEN WE'LL JUST HAVE TO MAKE ONE 00494000
  495. LA R6,PESCHAIN-PESBLOK(,R1) POINT TO CHAIN TO COPY INTO 00495000
  496. LA R7,PERCHAIN AND TO CHAIN TO COPY FROM 00496000
  497. B SGCOMM AND GO JOIN COMMON CODE 00497000
  498. MAKEPES BAL R10,SCANIT IS THERE A PARAMETER? 00498000
  499. BNZ PRMERR2 NO, ERROR 00499000
  500. CL R0,F1 ONE CHAR? 00500000
  501. BNE NOTAST NO, THEN IS OK 00501000
  502. CLI 0(R1),C'*' IS IT AN ASTERISK? 00502000
  503. BE PRMERR2 YES, INVALID NAME 00503000
  504. NOTAST CL R0,F8 IS IT SHORT ENOUGH 00504000
  505. BH PRMERR2 NO, GIVE EMSG 00505000
  506. LR R2,R0 SAVE LENGTH 00506000
  507. LR R3,R1 AND ADDRESS 00507000
  508. LA R0,PESSIZE LOAD SIZE OF PESBLOK 00508000
  509. CALL DMKFREE AND GO GET ONE 00509000
  510. MVC PESCHAIN-PESBLOK(4,R1),ZEROES CLEAR CHAIN POINTER 00510000
  511. MVC PESNEXT-PESBLOK(4,R1),PERSAVED MOVE IN FORWARD POINT 00511000
  512. ST R1,PERSAVED AND CHAIN IT ON 00512000
  513. MVC PESNAME-PESBLOK(8,R1),BLANKS MOVE IN BLANKS 00513000
  514. BCTR R2,0 MINUS 1 FOR EX 00514000
  515. EX R2,SAVMVC MOVE IN NAME 00515000
  516. LA R7,PERCHAIN POINT TO CHAIN TO COPY 00516000
  517. LA R6,PESCHAIN-PESBLOK(,R1) AND PLACE TO PUT IT 00517000
  518. B SGCOMM1 SKIP TRYING TO FRET CHAIN 00518000
  519. SAVMVC MVC PESNAME-PESBLOK(*-*,R1),0(R3) EXECUTED MOVE 00519000
  520. SGCOMM L R2,0(,R6) LOAD FORWARD POINTER 00520000
  521. SGCL1 LTR R1,R2 MOVE AND TEST 00521000
  522. BZ SGCOMM1 NO MORE, GO DO COPY 00522000
  523. L R2,PEXNEXT-PEXBLOK(,R2) POINT TO NEXT 00523000
  524. BAL R10,FRETPEX GO FRET PEXBLOK 00524000
  525. B SGCL1 AND TRY FOR NEXT 00525000
  526. SGCOMM1 L R7,0(,R7) LOAD POINTER 00526000
  527. NI SAVEWRK3+3,255-X'20' AND INDICATE ACCEPTED PARM 00527000
  528. SGCLP1 LTR R7,R7 ANY MORE? 00528000
  529. BZ PRCD001 NO, ALL DONE 00529000
  530. BAL R10,COPYPEX COPY THE PEXBLOK 00530000
  531. ST R1,PEXNEXT-PEXBLOK(,R6) CHAIN IT ON 00531000
  532. LR R6,R1 AND MOVE POINTER 00532000
  533. L R7,PEXNEXT POINT TO NEXT BLOK 00533000
  534. B SGCLP1 AND GO COPY IT 00534000
  535. EJECT 00535000
  536. *---------------------------------------------------------------------* 00536000
  537. * GET TRACE-NAME * 00537000
  538. * --- * 00538000
  539. * GET WILL CAUSE THE CURRENT TRACE SET TO BE REPLACED BY THE * 00539000
  540. * NAMED TRACE SET SPECIFIED. * 00540000
  541. *---------------------------------------------------------------------* 00541000
  542. GET EQU * 00542000
  543. LTR R8,R8 ANY PERBLOK? 00543000
  544. BNH PRMERR2 NO, GIVE EMSG 00544000
  545. BAL R10,GETPES TRY FOR A TRACE SET NAME 00545000
  546. BNZ PRMERR2 GO GIVE EMSG 00546000
  547. OI SAVEWRK3+3,X'40' INDICATE NEED TO RECOMPUTE CREGS 00547000
  548. LA R7,PESCHAIN-PESBLOK(,R1) POINT TO SOURCE CHAIN 00548000
  549. LA R6,PERCHAIN AND TO SINK CHAIN 00549000
  550. B SGCOMM AND GO JOIN COMMON CODE 00550000
  551. EJECT 00551000
  552. *---------------------------------------------------------------------* 00552000
  553. * CLEAR <TRACE SET NAME> * 00553000
  554. * - * 00554000
  555. * CLEAR WILL CAUSE EITHER THE CURRENT TRACE SET OR A SAVED TRACE * 00555000
  556. * SET TO BE CLEARED. IF THE PARAMETER FOLLOWING CLEAR IS A VALID * 00556000
  557. * SAVED TRACE SET NAME, THAT TRACE SET WILL BE CLEARED, OTHERWISE * 00557000
  558. * THE CURRENT TRACE SET WILL BE CLEARED. * 00558000
  559. *---------------------------------------------------------------------* 00559000
  560. CLEAR EQU * HERE TO HANDLE CLEAR REQUEST 00560000
  561. LTR R8,R8 ANY PERBLOK? 00561000
  562. BNH PRCD001 NO, JUST CONTINUE 00562000
  563. BAL R10,GETPES SEE IF HAVE TRACE SET NAME 00563000
  564. BNZ CLRCUR NO, GO CLEAR CURRENT SET 00564000
  565. NI SAVEWRK3+3,255-X'20' INDICATE PARM ACCEPTED 00565000
  566. L R7,PESCHAIN-PESBLOK(,R1) LOAD CHAIN POINTER 00566000
  567. L R2,PERSAVED LOAD CHAIN POINTER 00567000
  568. LA R3,PERSAVED AND PLACE FOR BACK CHAIN 00568000
  569. REPESL CLR R1,R2 IS THIS THE ONE? 00569000
  570. BE PESUNC YES, GO UNCHAIN 00570000
  571. LR R3,R2 MOVE FOR BACK CHAIN 00571000
  572. L R2,PESNEXT-PESBLOK(,R2) LOAD FORWARD POINTER 00572000
  573. B REPESL AND KEEP LOOKING 00573000
  574. PESUNC MVC PESNEXT-PESBLOK(4,R3),PESNEXT-PESBLOK(R2) UNCHAIN 00574000
  575. LA R0,PESSIZE LOAD SIZE 00575000
  576. CALL DMKFRET FRET PESBLOK 00576000
  577. B CLLOOP GO CLEAR CHAIN 00577000
  578. CLRCUR L R7,PERCHAIN POINT TO CHAIN OF PEXBLOKS 00578000
  579. OI SAVEWRK3+3,X'40' INDICATE NEED TO RECOMPUTE CREGS 00579000
  580. XC PERCHAIN(4),PERCHAIN AND CLEAR POINTER 00580000
  581. TM VMPSW+1,EXTMODE IN EXTENDED MODE? 00581000
  582. BNO RESETPND NO, PREVENT POSSIBLE PER INT 00582000
  583. TM VMPSW,PERMODE USER PER ON? 00583000
  584. BO CLLOOP YES, DON'T RESET PENDING PER 00584000
  585. RESETPND NI VMPEND,255-VMPERPND RESET POSSIBLE PENDING PER 00585000
  586. CLLOOP LTR R7,R7 ANY MORE? 00586000
  587. BZ PRCD001 GO FOR NEXT KEYWORD IF NOT. 00587000
  588. LR R1,R7 MOVE POINTER 00588000
  589. L R7,PEXNEXT POINT TO NEXT 00589000
  590. BAL R10,FRETPEX AND FRET THE BLOK 00590000
  591. B CLLOOP AND GO HANDLE 00591000
  592. EJECT 00592000
  593. *---------------------------------------------------------------------* 00593000
  594. * OFF * 00594000
  595. * --- * 00595000
  596. * OFF CAUSES THE EFFECTS OF THE OTHER MODIFIERS TO BE REVERSED. * 00596000
  597. *---------------------------------------------------------------------* 00597000
  598. OFF EQU * 00598000
  599. OI SAVEWRK3+3,X'08'+X'40' TURN ON OFF AND ACTION FLAGS 00599000
  600. B PRCD001 GO BACK FOR MORE 00600000
  601. EJECT 00601000
  602. *---------------------------------------------------------------------* 00602000
  603. * END * 00603000
  604. * -- * 00604000
  605. * END CAUSES COMMAND PROCCESING TO TERMINATE, ALL TRACE SET TO BE * 00605000
  606. * FRET'D AND THE CURRENT TRACE TO BE FRET'D AND IMMEDIATE RETURN * 00606000
  607. * TO THE CALLER. * 00607000
  608. *---------------------------------------------------------------------* 00608000
  609. END EQU * 00609000
  610. CALL DMKPERT RESET TRACE 00610000
  611. NI SAVEWRK3+3,255-X'80' DEQUEUE QUERY 00611000
  612. SLR R8,R8 CLEAR R8 00612000
  613. B EXIT GO EXIT 00613000
  614. EJECT 00614000
  615. *---------------------------------------------------------------------* 00615000
  616. * QUERY <SAVED TRACE NAME> * 00616000
  617. * - * 00617000
  618. * QUERY REQUESTS A DISPLAY OF THE CURRENT OR A SAVED TRACE SET. * 00618000
  619. * IF THE PARAMETER FOLLOWING THE QUERY KEYWORD IS THE NAME OF A * 00619000
  620. * SAVED TRACE SET, THAT TRACE SET WILL BE DISPLAYED, OTHERWISE * 00620000
  621. * THE CURRENT TRACE SET WILL BE DISPLAYED AFTER THE COMMAND IS * 00621000
  622. * FINISHED BEING PROCESSED. IF THE NAME GIVEN IS AN * THE NAMES * 00622000
  623. * OF THE SAVED TRACE SETS WILL BE DISPLAYED. * 00623000
  624. *---------------------------------------------------------------------* 00624000
  625. QUERY EQU * HERE FOR QUERY COMMAND 00625000
  626. LTR R8,R8 ANY PERBLOK? 00626000
  627. BNH NOSAVE NO, GIVE EMSG 00627000
  628. BAL R10,GETPES TRY TO FIND PESBLOK OF THAT NAME 00628000
  629. BZ CALQUE GOT IT, SET UP FOR QUERY 00629000
  630. BAL R10,SCANIT CHECK PARM 00630000
  631. CL R0,F1 ONE CHAR? 00631000
  632. BH NOTASTR NO, THEN MUST BE CURRENT 00632000
  633. CLI 0(R1),C'*' IS IT AN ASTERISK? 00633000
  634. BNE NOTASTR NO, THEN IS CURRENT 00634000
  635. MVC SAVEWRK8(8),BLANKS MOVE IN BLANKS 00635000
  636. MVI SAVEWRK8,C'*' AND ASTERISK 00636000
  637. LM R0,R1,SAVEWRK8 LOAD ASTERISK 00637000
  638. B CALQUE1 GO CALL QUERY 00638000
  639. NOTASTR OI SAVEWRK3+3,X'80' INDICATE QUERY ENQUED 00639000
  640. B PRCD001 GO FOR MORE 00640000
  641. CALQUE LM R0,R1,PESNAME-PESBLOK(R1) LOAD NAME 00641000
  642. CALQUE1 CALL DMKPEQRY AND PRODUCE OUTPUT 00642000
  643. NI SAVEWRK3+3,255-X'20' TURN OFF SCAN FLAG 00643000
  644. B PRCD001 AND RETURN FOR MORE KEYWORDS 00644000
  645. EJECT 00645000
  646. *---------------------------------------------------------------------* 00646000
  647. * NOW, HAVE INFO, SEE IF OFF SPECIFIED AND SET UP NEW BLOCKS * 00647000
  648. *---------------------------------------------------------------------* 00648000
  649. SPACE 00649000
  650. SCANDONE EQU * HERE AFTER SUCCESSFUL COMMAND SCANNING 00650000
  651. TM SAVEWRK3+3,X'40' ANY ACTION NEEDED? 00651000
  652. BNO EXIT NO, GO EXIT 00652000
  653. ICM R7,B'1111',SAVEWRK1 POINT TO CHAIN 00653000
  654. BZ USECHN NO CHAIN, THEN MODIFY CURRENT CHAIN 00654000
  655. OI SAVEWRK3,PEXTERM SET DEFAULT TERM OPTION 00655000
  656. ICM R1,B'1111',SAVEWRK2 SEE IF ANY RANGES 00656000
  657. BNZ MAKEM YES, CONTINUE 00657000
  658. LA R0,2 LOAD LENGTH 00658000
  659. CALL DMKFREE GET SPACE 00659000
  660. ST R1,SAVEWRK2 SAVE POINTER 00660000
  661. MVC 0(16,R1),ZEROES ZERO IT 00661000
  662. MVC 8(4,R1),XRIGHT24 MOVE IN UPPER LIMIT 00662000
  663. B MAKEM AND GO TO IT 00663000
  664. USECHN LTR R8,R8 ANY PERBLOK? 00664000
  665. BNH EXIT NO, EXIT 00665000
  666. ICM R7,B'1111',PERCHAIN LOAD CHAIN POINTER 00666000
  667. BZ CALPRC NONE, EXIT 00667000
  668. TM SAVEWRK3+3,X'08' WAS OFF SPECIFIED? 00668000
  669. BO HNDOFF1 GO HANDLE OFF 00669000
  670. MAKEM ICM R1,B'1111',SAVEWRK5 LOAD AND TEST SKIP COUNT 00670000
  671. BZ MAKSTP ZERO, CHECK STEP COUNT 00671000
  672. ST R1,PEXSKIP STORE IT 00672000
  673. ST R1,PEXSKIPN SAVE SKIP COUNTER 00673000
  674. MAKSTP ICM R1,B'1111',SAVEWRK4 LOAD AND TEST THE STEP COUNT 00674000
  675. BZ SETOPTS ZERO, GO SET/RESET OPTIONS 00675000
  676. ST R1,PEXSTEP STORE STEP COUNT 00676000
  677. ST R1,PEXSTEPN SAVE STEP COUNT 00677000
  678. SETOPTS OC PEXFLAGO(1),SAVEWRK3 OR IN OPTIONS 00678000
  679. NC PEXFLAGO(1),SAVEWRK3+1 AND TURN OFF OTHERS 00679000
  680. TM SAVEWRK3+3,X'04' SAVED CF? 00680000
  681. BZ TRYRCHN NO, GO SEE ABOUT RANGES 00681000
  682. L R2,SAVEWRK6 LOAD CF POINTER 00682000
  683. ICM R1,B'1111',PEXCMND IS THERE A CF ALREADY THERE? 00683000
  684. BZ GETNCF NO, JUST MAKE COPY OF THIS ONE 00684000
  685. SLR R0,R0 CLEAR FOR IC 00685000
  686. IC R0,0(,R1) INSERT LENGTH 00686000
  687. AL R0,F8 ROUND UP 00687000
  688. SRL R0,3 AND GET DWORDS 00688000
  689. CALL DMKFRET AND FRET IT 00689000
  690. GETNCF SLR R0,R0 CLEAR FOR IC 00690000
  691. IC R0,0(,R2) INSERT LENGTH 00691000
  692. AL R0,F8 ROUND UP 00692000
  693. SRL R0,3 GET DWORDS 00693000
  694. CALL DMKFREE AND GET SPACE 00694000
  695. SLL R0,3 MAKE BYTES 00695000
  696. LR R3,R0 MOVE TO R3 FOR MOVE 00696000
  697. ST R1,PEXCMND SAVE POINTER 00697000
  698. LR R0,R1 MOVE ADDR 00698000
  699. LR R1,R3 AND LENGTH 00699000
  700. MVCL R0,R2 AND DUPLICATE THE CF 00700000
  701. TRYRCHN ICM R4,B'1111',SAVEWRK2 POINT TO CHAIN 00701000
  702. BZ MAKENEXT NONE, GO TO NEXT 00702000
  703. MAKER1 MVC PEXADDR1(8),4(R4) MOVE IN RANGE 00703000
  704. ICM R4,B'1111',0(R4) POINT TO NEXT 00704000
  705. BZ MAKENEXT NONE, GET NEXT ELEMENT 00705000
  706. BAL R10,COPYPEX MAKE A COPY 00706000
  707. ST R1,PEXNEXT CHAIN IT ON 00707000
  708. LR R7,R1 MOVE FOR ADDR 00708000
  709. B MAKER1 GO MOVE RANGE INTO IT 00709000
  710. MAKENEXT ICM R7,B'1111',PEXNEXT POINT TO NEXT PEXBLOK 00710000
  711. BNZ MAKEM IF EXISTS, GO SET UP 00711000
  712. CLC SAVEWRK1(4),ZEROES ANYTHING TO ADD TO CHAIN? 00712000
  713. BE MERGE NO, GO MERGE 00713000
  714. TM SAVEWRK3+3,X'08' OFF SPECIFIED? 00714000
  715. BO HNDLOFF YES, GO HANDLE IT 00715000
  716. LTR R8,R8 DO WE HAVE A PERBLOK? 00716000
  717. BH OKPERBK YES, NO NEED TO ALLOCATE 00717000
  718. LA R0,PERSIZE LOAD SIZE 00718000
  719. CALL DMKFREE GO GET IT 00719000
  720. LR R8,R1 MOVE TO R8 00720000
  721. XC PERBLOK(PERSIZE*8),PERBLOK CLEAR PERBLOK 00721000
  722. ST R8,VMPERCTL SAVE POINTER 00722000
  723. OI VMPERFLG,VMPERUSE TURN ON PER TRACE BIT 00723000
  724. MVC PERBBLIP(2),=H'10000' MOVE IN BLIP COUNTER 00724000
  725. MVC PERIBLIP(6),PERBBLIP AND PROPAGATE INTO REST 00725000
  726. OKPERBK LA R7,PERCHAIN POINT TO LIST 00726000
  727. ADDLP ICM R6,B'1111',PEXNEXT POINT TO NEXT 00727000
  728. BZ GTNDC NONE, GO CHAIN ON 00728000
  729. LR R7,R6 POINT TO IT 00729000
  730. B ADDLP AND GO TRY AGAIN 00730000
  731. GTNDC MVC PEXNEXT(4),SAVEWRK1 CHAIN IT ON 00731000
  732. ST R6,SAVEWRK1 AND KILL POINTER 00732000
  733. B MERGE GO TRY TO MERGE 00733000
  734. EJECT 00734000
  735. *---------------------------------------------------------------------* 00735000
  736. * HANDLE SELECTIVE TURNING OFF OF TRACES * 00736000
  737. *---------------------------------------------------------------------* 00737000
  738. ****** NOTE: OFF IS NOT COMPLETELY IMPLEMENTED AT THIS POINT. 00738000
  739. ****** IF OFF IS SPECIFIED, ALL PEXBLOKS OF THE SAME TYPE AS 00739000
  740. ****** WAS SPECIFIED ON THE COMMAND LINE ARE DELETED. 00740000
  741. ****** NO CHECKING FOR OVERLAPING RANGES OR DATA IS MADE YET. 00741000
  742. HNDOFF1 EQU * HERE WHEN OFF SPECIFIED AND NO ELEMENTS 00742000
  743. B PRMERR2 FOR NOW WILL BE ERROR 00743000
  744. HNDLOFF EQU * HERE TO HANDLE SELECTIVE OFF 00744000
  745. ICM R7,B'1111',SAVEWRK1 LOAD CHAIN POINTER 00745000
  746. BZ CALPRC NONE, EXIT 00746000
  747. LTR R8,R8 ANY TRACES IN EFFECT? 00747000
  748. BZ EXIT THEN WHAT ARE YOU TRYING TO TURN OFF? 00748000
  749. OFFLP ICM R6,B'1111',PERCHAIN LOAD CHAIN POINTER 00749000
  750. BZ CALPRC NO PEXBLOCKS LEFT, EXIT 00750000
  751. LA R5,PERCHAIN POINT TO PREV PTR 00751000
  752. OFFLP1 CLC PEXFLAGT(1),PEXFLAGT-PEXBLOK(R6) SAME TYPE? 00752000
  753. BNE OFFNXT1 NO, TRY NEXT 00753000
  754. MVC PEXNEXT-PEXBLOK(4,R5),PEXNEXT-PEXBLOK(R6) UNCHAIN 00754000
  755. LR R1,R6 MOVE FOR CALL 00755000
  756. L R6,PEXNEXT-PEXBLOK(,R6) POINT TO NEXT 00756000
  757. BAL R10,FRETPEX FRET THE BLOCK 00757000
  758. LTR R6,R6 ANY MORE? 00758000
  759. BZ OFFNXT NO, TRY NEXT ONE 00759000
  760. B OFFLP1 YES, CHECK IT OUT 00760000
  761. OFFNXT1 LR R5,R6 UPDATE LAST PTR 00761000
  762. ICM R6,B'1111',PEXNEXT-PEXBLOK(R6) POINT TO NEXT 00762000
  763. BNZ OFFLP1 AND IF THERE, GO CHECK IT OUT 00763000
  764. OFFNXT ICM R7,B'1111',PEXNEXT POINT TO NEXT BLOK 00764000
  765. BNZ OFFLP AND IF THERE, GO HANDLE 00765000
  766. EJECT 00766000
  767. *---------------------------------------------------------------------* 00767000
  768. * MERGE PEXBLOKS WHERE POSSIBLE * 00768000
  769. *---------------------------------------------------------------------* 00769000
  770. MERGE EQU * 00770000
  771. LTR R8,R8 ANY PERBLOK? 00771000
  772. BNH EXIT NO, EXIT 00772000
  773. ICM R7,B'1111',PERCHAIN LOAD CHAIN POINTER 00773000
  774. BZ CALPRC NONE, GO CALL PERCH 00774000
  775. MERGE0 LR R6,R7 SAVE POINTER FOR BACK CHAINING 00775000
  776. MERGE1 ST R6,SAVEWRK4 SAVE FOR BACK CHAINING 00776000
  777. ICM R6,B'1111',PEXNEXT-PEXBLOK(R6) POINT TO NEXT 00777000
  778. BZ MERGEN2 NO, TRY NEXT ONE 00778000
  779. CLC PEXFLAGT(1),PEXFLAGT-PEXBLOK(R6) SAME TYPE? 00779000
  780. BNE MERGE1 NO, TRY NEXT ONE 00780000
  781. CLC PEXSTEP(16),PEXSTEP-PEXBLOK(R6) MUST BE EQUAL 00781000
  782. BNE MERGE1 NO, GO LOOK AT NEXT 00782000
  783. CLC PEXFLAGO(1),PEXFLAGO-PEXBLOK(R6) SAME OPTIONS? 00783000
  784. BNE MERGE1 NO, TRY NEXT 00784000
  785. CLI PEXFLAGT,PEXPGT IS IT A PAGE TRACE? 00785000
  786. BNE MERGE2 NO, SKIP THIS CHECK 00786000
  787. CLC PEXINCR(4),PEXINCR-PEXBLOK(R6) SAME? 00787000
  788. BNE MERGE1 NO, GO LOOK AT NEXT 00788000
  789. CLC PEXADDR1(8),PEXADDR1-PEXBLOK(R6) SAME RANGE? 00789000
  790. BNE MERGE1 NO, THEN CAN'T MERGE 00790000
  791. B MERGEIT OTHERWISE MERGE 00791000
  792. MERGE2 CLC PEXDLEN(1),PEXDLEN-PEXBLOK(R6) SAME LENGTH? 00792000
  793. BNE MERGE1 NO, CAN'T MERGE 00793000
  794. CLI PEXDLEN,0 DATA STOPS? 00794000
  795. BE MERGE5 NO, SKIP THIS CHECK 00795000
  796. CLI PEXFLAGT,PEXIFET IS IT AN IFETCH 00796000
  797. BE MERGE4 YES, SKIP ADDR CHECK 00797000
  798. CLC PEXADDR3(8),PEXADDR3-PEXBLOK(R6) SAME ADDR? 00798000
  799. BNE MERGE1 NO, TRY NEXT 00799000
  800. MERGE4 CLC PEXDLEN(1),PEXDLEN-PEXBLOK(R6) SAME LENGTH? 00800000
  801. BNE MERGE1 NO, TRY NEXT ONE 00801000
  802. SLR R1,R1 CLEAR FOR IC 00802000
  803. IC R1,PEXDLEN INSERT DATA LENGTH 00803000
  804. BCTR R1,0 MINUS 1 00804000
  805. EX R1,DATACMP DOES THE DATA COMPARE? 00805000
  806. BNE MERGE1 NO, TRY NEXT ONE 00806000
  807. MERGE5 L R2,PEXCMND LOAD FIRST POINTER 00807000
  808. L R4,PEXCMND-PEXBLOK(,R6) AND SECOND 00808000
  809. CLR R2,R4 EQUAL? 00809000
  810. BE MERGE5A YES, THEN NO CF 00810000
  811. SLR R3,R3 CLEAR R3 FOR IC 00811000
  812. LR R5,R3 AND R5 00812000
  813. IC R3,1(,R2) GET FIRST 00813000
  814. IC R5,1(,R4) AND SECOND 00814000
  815. LA R3,1(,R3) GET TOTAL LENGTH 00815000
  816. LA R5,1(,R5) AND HERE 00816000
  817. CLCL R2,R4 DO COMPARE 00817000
  818. BNE MERGE1 NOT EQUAL, TRY NEXT 00818000
  819. MERGE5A LM R0,R1,PEXADDR1 LOAD FIRST RANGE 00819000
  820. LM R2,R3,PEXADDR1-PEXBLOK(R6) LOAD SECOND SET 00820000
  821. BAL R10,RNGMRG TRY TO MERGE RANGES 00821000
  822. BNZ MERGE1 NO GO, TRY NEXT 00822000
  823. CLI PEXFLAGT,PEXBRTB IS IT A TRACE BACK? 00823000
  824. BE MERGE6 YES, NEED TO CHECK SECOND RANGE 00824000
  825. CLI PEXFLAGT,PEXST IS IT A STORE? 00825000
  826. BNE MERGE7 NO, THEN NO SECOND RANGE 00826000
  827. CLI PEXDLEN,0 DATA STOP? 00827000
  828. BNE MERGE7 THEN NO SECOND RANGE 00828000
  829. MERGE6 LR R4,R0 SAVE R0 00829000
  830. LR R5,R1 AND R1 00830000
  831. LM R0,R1,PEXADDR3 LOAD FIRST RANGE 00831000
  832. LM R2,R3,PEXADDR3-PEXBLOK(R6) AND SECOND RANGE 00832000
  833. BAL R10,RNGMRG GO TRY TO MERGE 00833000
  834. BNZ MERGE1 NO, GO TRY NEXT 00834000
  835. STM R0,R1,PEXADDR3 SAVE NEW RANGE 00835000
  836. LR R0,R4 RESTORE R0 00836000
  837. LR R1,R5 AND R1 00837000
  838. MERGE7 STM R0,R1,PEXADDR1 SAVE ADDRESS RANGE 00838000
  839. CLI PEXFLAGT,PEXGPR IS IT A GREG TRAP? 00839000
  840. BNE MERGEIT NO, THEN SKIP OC 00840000
  841. OC PEXGREG(2),PEXGREG-PEXBLOK(R6) OR IN NEW REGS 00841000
  842. MERGEIT L R5,SAVEWRK4 LOAD POINTER TO PREVIOUS BLOK 00842000
  843. MVC PEXNEXT-PEXBLOK(4,R5),PEXNEXT-PEXBLOK(R6) UNCHAIN BLOK 00843000
  844. LR R1,R6 MOVE ADDR TO R1 00844000
  845. BAL R10,FRETPEX GO FRET PEXBLOK 00845000
  846. B MERGE0 AND GO TRY IT AGAIN 00846000
  847. MERGEN2 ICM R7,B'1111',PEXNEXT POINT TO NEXT 00847000
  848. BNZ MERGE0 YES, GO START SCAN THERE 00848000
  849. CALPRC CALL DMKPERCH CALL DMKPER TO SET UP PERBLOK 00849000
  850. B EXIT AND EXIT 00850000
  851. DATACMP CLC PEXDATA(*-*),PEXDATA-PEXBLOK(R6) EXECUTED COMPARE 00851000
  852. EJECT 00852000
  853. *---------------------------------------------------------------------* 00853000
  854. * PRINT OUT ERROR MESSAGES * 00854000
  855. *---------------------------------------------------------------------* 00855000
  856. PRMERR1 LA R2,2 SET ERROR NUMBER 00856000
  857. LM R0,R1,SAVEWRK6 RESTORE POINTERS 00857000
  858. B PUTMSG GO PUT OUT MSG 00858000
  859. PRMERR2 LA R2,26 SET ERROR CODE 00859000
  860. SLR R0,R0 CLEAR COUNT 00860000
  861. LR R1,R0 AND ADDRESS 00861000
  862. B PUTMSG GO PUT OUT MSG 00862000
  863. CONFLICT LA R2,13 LOAD ERROR CODE 00863000
  864. B PUTMSG GO PUT OUT MSG 00864000
  865. NOSAVE LTR R8,R8 ANY TRACE IN EFFECT? 00865000
  866. BNH NOTRACE NO, GIVE MSG 00866000
  867. LA R1,TRSETM POINT TO MSG 00867000
  868. LA R0,LTRSETM LOAD LENGTH 00868000
  869. LA R2,47 LOAD DOES NOT EXIT MSG 00869000
  870. B PUTMSG AND PUT IT OUT 00870000
  871. NOTRACE LA R2,141 "PER" TRACE NOT ACTIVE 00871000
  872. LA R1,NOTRMSG POINT TO MSG 00872000
  873. LA R0,LNOTRMSG LOAD LENGTH 00873000
  874. B PUTMSG GO PUT OUT MSG 00874000
  875. PUTMSG ICM R0,B'1110',MODID+3 INSERT IDENTIFIER 00875000
  876. ST R2,SAVER2 SAVE RET CODE 00876000
  877. ICM R2,B'1000',=X'80' SET FLAG FOR RETURN 00877000
  878. CALL DMKERMSG GO TYPE EMSG 00878000
  879. NI SAVEWRK3+3,255-X'80' QUERY NO LONGER QUEUED 00879000
  880. TM SAVEWRK3+3,X'40' POSSIBLE "CLEAR"? 00880000
  881. BO CALPRC YES, ENSURE CREGS ARE CORRECT 00881000
  882. B EXIT GO EXIT 00882000
  883. SPACE 00883000
  884. EJECT 00884000
  885. *---------------------------------------------------------------------* 00885000
  886. * CLEAN UP AND RETURN TO CALLER * 00886000
  887. *---------------------------------------------------------------------* 00887000
  888. EXIT L R7,SAVEWRK1 POINT TO CHAIN OF TEMP ELEMENT BLOCKS 00888000
  889. ELEREL LTR R7,R7 ANY MORE? 00889000
  890. BZ FRETCF NO, GO CHECK SAVED CF 00890000
  891. LR R1,R7 MOVE FOR FRET 00891000
  892. SLR R0,R0 CLEAR RO FOR IC 00892000
  893. IC R0,PEXLEN LOAD LENGTH 00893000
  894. L R7,PEXNEXT AND POINT TO NEXT 00894000
  895. CALL DMKFRET GO FRET BLOCK 00895000
  896. B ELEREL GO FRET NEXT 00896000
  897. FRETCF TM SAVEWRK3+3,X'04' IS THERE A SAVED CF POINTER? 00897000
  898. BZ CKRNGB NONE, GO CHECK RANGE BLOCKS 00898000
  899. L R1,SAVEWRK6 LOAD POINTER 00899000
  900. SLR R0,R0 CLEAR FOR IC 00900000
  901. IC R0,0(,R1) INSERT LENGTH 00901000
  902. AL R0,F8 ROUND UP 00902000
  903. SRL R0,3 GET DWORDS 00903000
  904. CALL DMKFRET AND FRET IT 00904000
  905. CKRNGB ST R7,SAVEWRK1 ZAP POINTER (JUST IN CASE) 00905000
  906. L R2,SAVEWRK2 LOAD POINTER TO CHAIN OF RANGES 00906000
  907. ST R7,SAVEWRK2 AND ZERO IT WHILE WE'RE AT IT 00907000
  908. RNGREL LTR R2,R2 ANY MORE? 00908000
  909. BZ DOEXIT NO, JUST EXIT 00909000
  910. LR R1,R2 MOVE FOR FRET 00910000
  911. L R2,0(,R2) POINT TO NEXT ONE 00911000
  912. LA R0,2 SET FOR TWO DOUBLE WORDS 00912000
  913. CALL DMKFRET FRET IT 00913000
  914. B RNGREL GO FOR NEXT ONE 00914000
  915. DOEXIT LTR R8,R8 WAS THERE A PERBLOK? 00915000
  916. BNH ISEXIT NO, SKIP CHECK FOR QUERY 00916000
  917. TM SAVEWRK3+3,X'80' WAS A QUERY ENQUEUED? 00917000
  918. BNO TRYDEL NO, JUST EXIT 00918000
  919. L R7,PERCHAIN LOAD CHAIN POINTER 00919000
  920. SLR R0,R0 CLEAR R0 00920000
  921. CALL DMKPEQRY AND GO DO QUERY 00921000
  922. TRYDEL TM PERCR9,X'F0' ARE THERE ANY TRAPS? 00922000
  923. BNZ TRYBR GO SEE IF A BRANCH TRACEBACK TABLE NEEDED 00923000
  924. ICM R1,B'1111',PERSAVED LOAD CHAIN POINTER 00924000
  925. BNZ TRYBR GO SEE IF NEED BRANCH TRACEBACK TABLE 00925000
  926. CALL DMKPERT FRET EVERYTHING 00926000
  927. B ISEXIT GO RETURN TO CALLER 00927000
  928. TRYBR L R1,PERTBAK LOAD POINTER 00928000
  929. LA R0,(PERTBLEN+7)/8 LOAD LENGTH 00929000
  930. TM PERCR9,PEXBR IS A BRANCH TRACE ACTIVE? 00930000
  931. BNO TRYDBR NO, SEE IF NEED TO DELETE TABLE 00931000
  932. LTR R1,R1 IS THERE ONE? 00932000
  933. BNZ TRYGR YES, GO CHECK OUT GREG SAVE AREA 00933000
  934. CALL DMKFREE GO GET IT 00934000
  935. ST R1,PERTBAK AND SAVE POINTER 00935000
  936. XC 0(PERTBLEN,R1),0(R1) CLEAR TO ZEROES 00936000
  937. B TRYGR GO CHECK OUT GREG SAVEAREA 00937000
  938. TRYDBR LTR R1,R1 DOES A TABLE EXIST 00938000
  939. BZ TRYGR NO, CHECK OUT GREG 00939000
  940. CALL DMKFRET AND FRET IT 00940000
  941. MVC PERTBAK(4),ZEROES CLEAR POINTER 00941000
  942. TRYGR LA R0,16*4/8 LOAD LENGTH OF AREA 00942000
  943. L R1,PERGPRP LOAD ADDR 00943000
  944. TM PERCR9,PEXGPR IS GREG STOP ACTIVE? 00944000
  945. BNO TRYDGR GO TRY TO DELETE IT 00945000
  946. LTR R1,R1 IS THERE ONE? 00946000
  947. BNZ ISEXIT YES, THEN ALL DONE 00947000
  948. CALL DMKFREE GO GET BLOCK 00948000
  949. MVC 0(16*4,R1),VMGPRS MOVE IN REGISTERS 00949000
  950. ST R1,PERGPRP SAVE POINTER 00950000
  951. B ISEXIT AND EXIT 00951000
  952. TRYDGR LTR R1,R1 IS THERE ANY? 00952000
  953. BZ ISEXIT NO, EXIT 00953000
  954. CALL DMKFRET FRET IT 00954000
  955. MVC PERGPRP(4),ZEROES CLEAR POINTER 00955000
  956. ISEXIT NI VMESTAT,255-VMPERCM TURN OFF FLAG 00956000
  957. NI VMTRCTL,255-VMTRPER ... 00957000
  958. TM VMPSW+1,EXTMODE IN EXT MODE? 00958000
  959. BNO OUROWN NO, SEE IF WE HAVE PER 00959000
  960. TM VMPSW,PERMODE USER PER ON? 00960000
  961. BNO OUROWN NO GO CHECK PER 00961000
  962. OI VMESTAT,VMPERCM TURN ON FLAG 00962000
  963. B DONEEXIT AND EXIT 00963000
  964. OUROWN TM VMPERFLG,VMPERUSE CP PER IN EFFECT? 00964000
  965. BNO DONEEXIT NO, EXIT 00965000
  966. L R8,VMPERCTL LOAD POINTER 00966000
  967. CLI PERCR9,00 ANY TRAPS? 00967000
  968. BE DONEEXIT NO, SKIP OI 00968000
  969. OI VMTRCTL,VMTRPER TRUN ON PER TRACE 00969000
  970. OI VMPERFLG,VMPERCM TURN ON PER ANY FLAG 00970000
  971. DONEEXIT EXIT , RETURN TO CALLER 00971000
  972. EJECT 00972000
  973. *---------------------------------------------------------------------* 00973000
  974. * SCAN FOR A DECIMAL PARAMETER * 00974000
  975. *---------------------------------------------------------------------* 00975000
  976. GETDEC EQU * 00976000
  977. ST R10,SAVEWRK8 SAVE RETURN ADDR 00977000
  978. BAL R10,SCANIT GO SCAN 00978000
  979. L R10,SAVEWRK8 LOAD RETURN ADDR 00979000
  980. BNZR R10 IF ERROR, RETURN 00980000
  981. CL R0,F8 IS IT SMALL ENOUGH TO USE? 00981000
  982. BNLR R10 NO, RETURN 00982000
  983. DECCLP CLI 0(R1),C'0' BELOW ZERO? 00983000
  984. BLR R10 YES, ERROR, RETURN 00984000
  985. CLI 0(R1),C'9' ABOVE 9? 00985000
  986. BHR R10 YES, RETURN 00986000
  987. LA R1,1(,R1) POINT TO NEXT ONE 00987000
  988. BCT R0,DECCLP AND CHECK IT OUT 00988000
  989. LM R0,R1,SAVEWRK6 RELOAD POINTERS 00989000
  990. LR R15,R0 MOVE FOR EXECUTE 00990000
  991. BCTR R15,0 MINUS 1 00991000
  992. EX R15,PACKIT PACK NUMBER 00992000
  993. CVB R1,SAVEWRK8 AND CONVERT TO BINARY 00993000
  994. CLR R0,R0 SET CONDITION CODE TO ZERO 00994000
  995. BR R10 RETURN 00995000
  996. PACKIT PACK SAVEWRK8(8),0(*-*,R1) EXECUTED PACK 00996000
  997. EJECT 00997000
  998. *---------------------------------------------------------------------* 00998000
  999. * SCAN FOR A RANGE * 00999000
  1000. *---------------------------------------------------------------------* 01000000
  1001. GETRNG EQU * 01001000
  1002. ST R10,SAVEWRK8 SAVE RETURN ADDR 01002000
  1003. BAL R10,SCANIT FIND A PARM 01003000
  1004. L R10,SAVEWRK8 LOAD ADDR 01004000
  1005. BNZR R10 NONE, ERROR RETURN 01005000
  1006. LR R15,R1 MOVE ADDR 01006000
  1007. LR R14,R0 AND LENGTH 01007000
  1008. SLR R0,R0 CLEAR LENGTH 01008000
  1009. GTR1 CLI 0(R15),C'9' ABOVE 9? 01009000
  1010. BHR R10 YES, ERROR RETURN 01010000
  1011. CLI 0(R15),C'A' BELOW A? 01011000
  1012. BL GTR3 YES, MIGHT BE OK 01012000
  1013. CLI 0(R15),C'0' BELOW ZERO? 01013000
  1014. BNL GTR2 NO, THEN IS OK 01014000
  1015. CLI 0(R15),C'F' THEN MUST BE BELOW F 01015000
  1016. BHR R10 NO, ERROR RETURN 01016000
  1017. GTR2 LA R15,1(,R15) POINT TO NEXT 01017000
  1018. AL R0,F1 ADD 1 TO COUNT 01018000
  1019. BCT R14,GTR1 TRY NEXT ONE 01019000
  1020. GTR3 CL R0,F6 TOO LONG? 01020000
  1021. BHR R10 YES, ERROR RETURN 01021000
  1022. LTR R0,R0 ZERO? 01022000
  1023. BNZ *+10 NO, SKIP THIS JUNK 01023000
  1024. LR R1,R0 SET R1 TO ZERO ALSO 01024000
  1025. B GTR4 AND SKIP OTHER STUFF 01025000
  1026. STM R14,R15,SAVEWRK8 SAVE POINTERS 01026000
  1027. CALL DMKCVTHB GO CONVERT 01027000
  1028. LM R14,R15,SAVEWRK8 RESTORE POINTERS 01028000
  1029. GTR4 ST R1,SAVEWRK8 SAVE LOW BOUND 01029000
  1030. LR R0,R1 PUT IN R0 FOR A MOMENT 01030000
  1031. LTR R14,R14 ANYTHING LEFT? 01031000
  1032. BZR R10 NO, THEN WE HAVE IT 01032000
  1033. CLI 0(R15),C'-' IS IT A DASH? 01033000
  1034. BE GTR5 YES, CONTINUE 01034000
  1035. CLI 0(R15),C':' OR A COLEN? 01035000
  1036. BE GTR5 YES, CONTINUE 01036000
  1037. CLI 0(R15),C'.' PERIOD? 01037000
  1038. BNER R10 NO, ERROR RETURN 01038000
  1039. GTR5 MVC SAVEWRK9(1),0(R15) SAVE SEPERATOR 01039000
  1040. LA R15,1(,R15) POINT TO NEXT CHAR 01040000
  1041. BCT R14,GTR6 AND GO PROCESS NEXT PART 01041000
  1042. L R0,SAVEWRK8 LOAD LOW END 01042000
  1043. L R1,XRIGHT24 LOAD HIGHT 01043000
  1044. BR R10 AND RETURN 01044000
  1045. GTR6 LR R0,R14 MOVE LENGTH 01045000
  1046. LR R1,R15 AND ADDR 01046000
  1047. CL R0,F6 IS IT TOO LONG? 01047000
  1048. BHR R10 YES, ERROR RETURN 01048000
  1049. CALL DMKCVTHB TRY TO CONVERT 01049000
  1050. BNZR R10 IF ERROR, RETURN NOW 01050000
  1051. L R0,SAVEWRK8 LOAD FIRST ONE 01051000
  1052. CLI SAVEWRK9,C'.' WAS SEPERATOR A PERIOD? 01052000
  1053. BNE GTRR0 GO RETURN WITH RC=0 01053000
  1054. ALR R1,R0 ADD SINCE IS LENGTH 01054000
  1055. BCTR R1,0 MINUS 1 01055000
  1056. LA R1,0(,R1) CLEAR TOP BYTE 01056000
  1057. GTRR0 CLR R0,R0 SET CC=0 01057000
  1058. BR R10 AND RETURN 01058000
  1059. EJECT 01059000
  1060. *---------------------------------------------------------------------* 01060000
  1061. * SCAN FOR A HEX WORD * 01061000
  1062. *---------------------------------------------------------------------* 01062000
  1063. GETHXWD EQU * 01063000
  1064. ST R10,SAVEWRK8 SAVE RETURN ADDR 01064000
  1065. BAL R10,SCANIT GO SCAN FOR PARM 01065000
  1066. L R10,SAVEWRK8 GET RETURN ADDR BACK 01066000
  1067. BNZR R10 NONE, RETURN 01067000
  1068. CL R0,F8 TOO BIG? 01068000
  1069. BHR R10 YES, RETURN 01069000
  1070. CALL DMKCVTHB TRY TO CONVERT 01070000
  1071. BR R10 RETURN TO CALLER 01071000
  1072. EJECT 01072000
  1073. *---------------------------------------------------------------------* 01073000
  1074. * SCAN FOR A HEX STRING * 01074000
  1075. *---------------------------------------------------------------------* 01075000
  1076. GETXSTR EQU * 01076000
  1077. ST R10,SAVEWRK8 SAVE RETURN ADDRESS 01077000
  1078. BAL R10,SCANIT GO SCAN FOR PARM 01078000
  1079. L R10,SAVEWRK8 RELOAD RETURN ADDRESS 01079000
  1080. BNZR R10 AND IF NO PARM RETURN 01080000
  1081. STC R0,SAVEWRK8 SAVE LAST BYTE 01081000
  1082. TM SAVEWRK8,X'01' IS IT AN ODD LENGTH? 01082000
  1083. BOR R10 YES, THEN IS NOT A STRING 01083000
  1084. LR R14,R0 SAVE LENGTH FOR LATER 01084000
  1085. SRL R14,1 DIVIDE BY 2 01085000
  1086. ST R14,SAVEWRK8 AND SAVE FOR POSSIBLE RETURN 01086000
  1087. LR R14,R0 AND SET IT AGAIN 01087000
  1088. XVLOOP CLI 0(R1),C'A' LESS THAN A? 01088000
  1089. BLR R10 YES, ERROR RETURN 01089000
  1090. CLI 0(R1),C'9' HIGHER THAN 9? 01090000
  1091. BHR R10 YES, ERROR RETURN 01091000
  1092. CLI 0(R1),C'0' LOWER THAN ZERO? 01092000
  1093. BNL XVNXT NO, THEN IS OK 01093000
  1094. CLI 0(R1),C'F' THEN BETTER NOT BE ABOVE F 01094000
  1095. BHR R10 TOO BAD, ERROR RETURN 01095000
  1096. XVNXT LA R1,1(,R1) POINT TO NEXT CHAR 01096000
  1097. BCT R0,XVLOOP AND CHECK IT OUT 01097000
  1098. L R0,SAVEWRK8 LOAD LENGTH 01098000
  1099. L R1,SAVEWRK7 LOAD ADDR AGAIN 01099000
  1100. LR R15,R1 AND INTO R15 ALSO 01100000
  1101. ANDLP NC 0(2,R1),=X'1F1F' KILL FIRST 3 BITS 01101000
  1102. LA R1,2(,R1) POINT TO NEXT PAIR 01102000
  1103. BCT R0,ANDLP GO FOR MORE 01103000
  1104. BCTR R14,0 MINUS 1 FOR EX 01104000
  1105. EX R14,ZTRANS DO HEX CONV TRANSLATE 01105000
  1106. L R0,SAVEWRK8 LOAD LENGTH OF STRING 01106000
  1107. AL R0,F7 ADD 7 TO ROUND UP 01107000
  1108. SRL R0,3 GET DWORDS 01108000
  1109. CALL DMKFREE GET SOME SPACE 01109000
  1110. L R0,SAVEWRK8 LOAD LENGTH 01110000
  1111. ST R1,SAVEWRK9 AND SAVE ADDR FOR RETURN 01111000
  1112. L R15,SAVEWRK7 GET ADDR AGAIN 01112000
  1113. XCVTLP MVO 0(1,R1),0(1,R15) MOVE OVER FIRST NYBBLE 01113000
  1114. MVN 0(1,R1),1(R15) AND SECOND NYBBLE 01114000
  1115. LA R1,1(,R1) POINT TO NEXT SLOT 01115000
  1116. LA R15,2(,R15) POINT TO NEXT PAIR 01116000
  1117. BCT R0,XCVTLP AND CONTINUE CONVERSION 01117000
  1118. L R15,SAVEWRK7 LOAD POINTER FROM WHERE SCANIT PUT IT 01118000
  1119. L R14,SAVEWRK6 AND LENGTH 01119000
  1120. BCTR R14,0 MINUS 1 01120000
  1121. EX R14,BACKTR AND RESET CHARS IN LINE 01121000
  1122. LM R0,R1,SAVEWRK8 LOAD POINTERS 01122000
  1123. CLR R15,R15 SET RETCODE 01123000
  1124. BR R10 AND RETURN 01124000
  1125. ZTRANS TR 0(*-*,R15),TOBINX EXECUTED TRANSLATE 01125000
  1126. BACKTR TR 0(*-*,R15),HEXTAB TRANSLATE BACK TO EBCDIC 01126000
  1127. EJECT 01127000
  1128. *---------------------------------------------------------------------* 01128000
  1129. * SCAN FOR A POSSIBLE TRACE SET NAME * 01129000
  1130. *---------------------------------------------------------------------* 01130000
  1131. GETPES EQU * 01131000
  1132. ST R10,SAVEWRK8 SAVE RETURN ADDR 01132000
  1133. BAL R10,SCANIT SCAN LINE 01133000
  1134. L R10,SAVEWRK8 RESTORE RETURN ADDR 01134000
  1135. BNZR R10 NOT ANYTHING THERE, RETURN 01135000
  1136. CL R0,F8 IS PARM TOO LONG? 01136000
  1137. BHR R10 YES, ERROR RETURN 01137000
  1138. LR R14,R0 MOVE LENGTH SO CAN USE 01138000
  1139. BCTR R14,0 MINUS 1 FOR EX 01139000
  1140. MVC SAVEWRK8(8),BLANKS CLEAR TO BLANKS 01140000
  1141. EX R14,MVCPES AND MOVE IN NAME 01141000
  1142. L R1,PERSAVED POINT TO SAVED CHAIN 01142000
  1143. GETPESL LTR R1,R1 DONE? 01143000
  1144. BZ GETPESR YES, SET RET CODE 01144000
  1145. CLC SAVEWRK8(8),PESNAME-PESBLOK(R1) IS THIS IT? 01145000
  1146. BZR R10 YES, RETURN 01146000
  1147. L R1,PESNEXT-PESBLOK(,R1) LOAD FORWARD POINTER 01147000
  1148. B GETPESL GO CHECK IT 01148000
  1149. MVCPES MVC SAVEWRK8(*-*),0(R1) EXECUTED MOVE 01149000
  1150. GETPESR TM F1+3,X'01' SET CC 01150000
  1151. BR R10 AND RETURN 01151000
  1152. EJECT 01152000
  1153. *---------------------------------------------------------------------* 01153000
  1154. * COMMON SCAN ROUTINE * 01154000
  1155. *---------------------------------------------------------------------* 01155000
  1156. SCANIT EQU * 01156000
  1157. TM SAVEWRK3+3,X'10' END OF LINE? 01157000
  1158. BOR R10 YES, RETURN 01158000
  1159. LM R0,R1,SAVEWRK6 LOAD POINTERS 01159000
  1160. TM SAVEWRK3+3,X'20' ALREADY HAVE POINTERS? 01160000
  1161. BO SCNRZ RETURN TO CALLER WITH RET CODE ZERO 01161000
  1162. OI SAVEWRK3+3,X'20' INDICATE HAVE POINTERS 01162000
  1163. CALL DMKSCNFD SCAN 01163000
  1164. STM R0,R1,SAVEWRK6 SAVE POINTERS 01164000
  1165. BZR R10 IS OK, RETURN 01165000
  1166. OI SAVEWRK3+3,X'10' INDICATE END OF LINE 01166000
  1167. BR R10 RETURN TO CALLER 01167000
  1168. SCNRZ TM F2+3,X'01' MAKE CC=0 01168000
  1169. BR R10 AND RETURN 01169000
  1170. EJECT 01170000
  1171. *---------------------------------------------------------------------* 01171000
  1172. * MERGE TWO RANGES (IF POSSIBLE) * 01172000
  1173. *---------------------------------------------------------------------* 01173000
  1174. RNGMRG EQU * FIRST RANGE R0-R1, SECOND R2-R3 01174000
  1175. CLR R0,R2 ARE THEY IN ORDER? 01175000
  1176. BNH INORD YES, SKIP SWITCHING 01176000
  1177. STM R0,R1,SAVEWRK8 SAVE FIRST RANGE 01177000
  1178. LR R0,R2 MOVE DOWN SECOND 01178000
  1179. LR R1,R3 ... 01179000
  1180. LM R2,R3,SAVEWRK8 AND LOAD FIRST 01180000
  1181. INORD CLR R1,R2 OVERLAP (A1B>=A2A) 01181000
  1182. BNL OVERLAP YES, GO CONSTRUCT MERGED RANGE 01182000
  1183. CLR R0,R1 DOES FIRST RANGE WRAP-AROUND? 01183000
  1184. BH OVERLAP YES, THEN MUST OVERLAP 01184000
  1185. CLR R2,R3 DOES SECOND WRAP-AROUND? 01185000
  1186. BNH TRYADJ NO, CAN'T OVERLAP, TRY ADJACENT 01186000
  1187. CLR R3,R0 THEN DOES IT OVERLAP? 01187000
  1188. BNL SWAPR YES, BUT SWITCH LOW ADDR FIRST 01188000
  1189. TRYADJ LA R15,1(,R1) POINT TO BYTE AFTER LAST IN FIRST RANGE 01189000
  1190. CLR R15,R2 IS IT THE FIRST IN SECOND? 01190000
  1191. BE OVERLAP YES, THEN IS SAME AS OVERLAP 01191000
  1192. LA R15,1(,R3) POINT TO BYTE AFTER LAST IN SECOND RANGE 01192000
  1193. CLR R15,R0 IS IT THE FIRST IN FIRST? 01193000
  1194. BNER R10 NO, RETURN WITH NONZERO CC 01194000
  1195. SWAPR LR R0,R2 USE SECOND AS FIRST ADDR 01195000
  1196. OVERLAP CR R1,R0 HIGHER? 01196000
  1197. BNL *+8 YES, THEN USE AS IS (NON-WRAP-AROUND) 01197000
  1198. AL R1,MEG16 FIX WRAP-AROUND ADDR 01198000
  1199. CR R3,R0 HIGHER? 01199000
  1200. BNL *+8 YES, THEN IS OK 01200000
  1201. AL R3,MEG16 THEN FIX WRAP-AROUND ADDR 01201000
  1202. CLR R1,R3 WHICH IS HIGHER? 01202000
  1203. BNL *+6 R1 SO LEAVE ALONE 01203000
  1204. LR R1,R3 MOVE FOR RETURN 01204000
  1205. LA R1,0(,R1) CLEAR TOP BYTE (IN CASE WAS WRAP-AROUND) 01205000
  1206. CLR R0,R0 SET CC=0 01206000
  1207. BR R10 AND RETURN 01207000
  1208. EJECT 01208000
  1209. *---------------------------------------------------------------------* 01209000
  1210. * MAKE A COPY OF CURRENT PEXBLOK * 01210000
  1211. *---------------------------------------------------------------------* 01211000
  1212. COPYPEX EQU * 01212000
  1213. SLR R0,R0 CLEAR FOR IC 01213000
  1214. IC R0,PEXLEN LOAD LENGTH OF BLOK 01214000
  1215. CALL DMKFREE AND GET SPACE FOR NEW ONE 01215000
  1216. ST R1,SAVEWRK8 SAVE POINTER 01216000
  1217. SLL R0,3 GET BYTES 01217000
  1218. LR R3,R0 MOVE LENGTH 01218000
  1219. LR R0,R1 AND ADDR 01219000
  1220. LR R1,R3 PUT LENGTH HERE ALSO 01220000
  1221. LR R2,R7 AND ADDR OF SOURCE PEXBLOK 01221000
  1222. MVCL R0,R2 AND COPY IT 01222000
  1223. ICM R2,B'1111',PEXCMND LOAD COMMAND POINTER 01223000
  1224. BZ CPYRET NO, RETURN 01224000
  1225. SLR R0,R0 CLEAR FOR IC 01225000
  1226. IC R0,0(,R2) INSERT LENGTH 01226000
  1227. AL R0,F8 ROUND UP 01227000
  1228. SRL R0,3 GET DWORDS 01228000
  1229. CALL DMKFREE AND GET SPACE FOR IT 01229000
  1230. L R3,SAVEWRK8 LOAD POINTER 01230000
  1231. ST R1,PEXCMND-PEXBLOK(,R3) SAVE POINTER 01231000
  1232. SLL R0,3 GET BYTES 01232000
  1233. LR R3,R0 PUT IN R3 01233000
  1234. LR R0,R1 MOVE ADDR TO R0 01234000
  1235. LR R1,R3 AND LENGTH TO R1 01235000
  1236. MVCL R0,R2 AND COPY IT 01236000
  1237. CPYRET L R1,SAVEWRK8 RELOAD POINTER 01237000
  1238. BR R10 AND RETURN 01238000
  1239. EJECT 01239000
  1240. *---------------------------------------------------------------------* 01240000
  1241. * FRET A PEXBLOK * 01241000
  1242. *---------------------------------------------------------------------* 01242000
  1243. FRETPEX EQU * R1->PEXBLOK 01243000
  1244. CLC PEXCMND-PEXBLOK(4,R1),ZEROES ANY CF BLOK? 01244000
  1245. BZ FRETPEX1 NO, SKIP FRET THEN 01245000
  1246. ST R1,SAVEWRK8 SAVE POINTER 01246000
  1247. L R1,PEXCMND-PEXBLOK(,R1) LOAD POINTER 01247000
  1248. SLR R0,R0 CLEAR FOR IC 01248000
  1249. IC R0,0(,R1) INSERT LENGTH 01249000
  1250. AL R0,F8 ROUND UP 01250000
  1251. SRL R0,3 GET DWORDS 01251000
  1252. CALL DMKFRET AND FRET IT 01252000
  1253. L R1,SAVEWRK8 LOAD POINTER 01253000
  1254. FRETPEX1 SLR R0,R0 CLEAR FOR IC 01254000
  1255. IC R0,PEXLEN-PEXBLOK(,R1) GET LENGTH 01255000
  1256. CALL DMKFRET AND FRET IT 01256000
  1257. BR R10 AND RETURN 01257000
  1258. EJECT 01258000
  1259. *---------------------------------------------------------------------* 01259000
  1260. * PRING A PAGE INTO REAL MEMORY * 01260000
  1261. *---------------------------------------------------------------------* 01261000
  1262. GETPAGE LCTL C1,C1,VMSEG LOAD SEG TABLE POINTER 01262000
  1263. LRA R2,0(,R1) TRY TO LOAD REAL ADDRESS 01263000
  1264. BZR R10 GOT IT, RETURN 01264000
  1265. LA R2,BRING+DEFER SET OPTIONS 01265000
  1266. L R15,APTRAN LOAD THE FETCH RTN ADDR 01266000
  1267. SVC 8 GO GET THE PAGE 01267000
  1268. BR R10 AND RETURN 01268000
  1269. EJECT 01269000
  1270. *---------------------------------------------------------------------* 01270000
  1271. * CONSTANTS * 01271000
  1272. *---------------------------------------------------------------------* 01272000
  1273. SPACE 01273000
  1274. DS 0F 01274000
  1275. MEG16 DC X'01000000' 16 MEG 01275000
  1276. HEXTAB DC C'0123456789ABCDEF' TO HEX TABLE 01276000
  1277. TOBINX DC XL16'000A0B0C0D0E0F000000000000000000' 01277000
  1278. DC XL16'00010203040506070809000000000000' 01278000
  1279. NOTRMSG DC C'"PER"',X'00',C'TRACE' 01279000
  1280. LNOTRMSG EQU *-NOTRMSG 01280000
  1281. TRSETM DC C'TRACE',X'00',C'SET' 01281000
  1282. LTRSETM EQU *-TRSETM 01282000
  1283. SPACE 01283000
  1284. EJECT 01284000
  1285. *---------------------------------------------------------------------* 01285000
  1286. * DUMP LITERALS * 01286000
  1287. *---------------------------------------------------------------------* 01287000
  1288. LTORG 01288000
  1289. EJECT 01289000
  1290. *---------------------------------------------------------------------* 01290000
  1291. * KEYWORD LIST * 01291000
  1292. *---------------------------------------------------------------------* 01292000
  1293. SPACE 01293000
  1294. KWDLIST EQU * 01294000
  1295. SPACE 01295000
  1296. DC AL2(IFETCH-DMKPEC) ADDRESS OF HANDLER 01296000
  1297. DC AL1(PEXIFET) FLAG TYPE 01297000
  1298. DC AL1(0) MINIMUM TRUNCATION -1 01298000
  1299. DC AL1(5) TOTAL LENGTH -1 01299000
  1300. DC C'IFETCH' KEYWORD NAME 01300000
  1301. SPACE 01301000
  1302. DC AL2(BRANCH-DMKPEC) ADDRESS OF HANDLER 01302000
  1303. DC AL1(*-*) UNUSED FOR THIS ONE 01303000
  1304. DC AL1(0) MINIMUM TRUNCATION -1 01304000
  1305. DC AL1(5) TOTAL LENGTH -1 01305000
  1306. DC C'BRANCH' KEYWORD NAME 01306000
  1307. SPACE 01307000
  1308. DC AL2(STORE-DMKPEC) ADDRESS OF HANDLER 01308000
  1309. DC AL1(PEXST) FLAG TYPE 01309000
  1310. DC AL1(1) MINIMUM TRUNCATION -1 01310000
  1311. DC AL1(4) TOTAL LENGTH -1 01311000
  1312. DC C'STORE' KEYWORD NAME 01312000
  1313. SPACE 01313000
  1314. DC AL2(PAGETR-DMKPEC) OFFSET OF HANDLER 01314000
  1315. DC AL1(PEXPGT) FLAG AS PAGE TRACE 01315000
  1316. DC AL1(1) MINIMUM TRUNCATION -1 01316000
  1317. DC AL1(8) TOTAL LENGTH -1 01317000
  1318. DC C'PAGETRACE' KEYWORD RANGE 01318000
  1319. SPACE 01319000
  1320. DC AL2(GPRS-DMKPEC) OFFSET OF HANDLER 01320000
  1321. DC AL1(*-*) UNUSED BY THIS ONE 01321000
  1322. DC AL1(0) MINIMUM TRUNCATION -1 01322000
  1323. DC AL1(3) TOTAL LENGTH -1 01323000
  1324. DC C'GREG' KEYWORD NAME 01324000
  1325. SPACE 01325000
  1326. DC AL2(MASK-DMKPEC) OFFSET OF HANDLER 01326000
  1327. DC AL1(PEXMASK) FLAG TYPE 01327000
  1328. DC AL1(0) MINIMUM TRUNCATION -1 01328000
  1329. DC AL1(3) TOTAL LENGTH -1 01329000
  1330. DC C'MASK' KEYWORD NAME 01330000
  1331. SPACE 01331000
  1332. DC AL2(SKIPK-DMKPEC) OFFSET OF HANDLER 01332000
  1333. DC AL1(SAVEWRK5-SAVEAREA) PLACE TO PUT COUNT 01333000
  1334. DC AL1(1) MINIMUM TRUNCATION -1 01334000
  1335. DC AL1(3) TOTAL LENGTH -1 01335000
  1336. DC C'SKIP' KEYWORD NAME 01336000
  1337. SPACE 01337000
  1338. DC AL2(SKIPK-DMKPEC) OFFSET OF HANDLER 01338000
  1339. DC AL1(SAVEWRK4-SAVEAREA) PLACE TO PUT COUNT 01339000
  1340. DC AL1(2) MINIMUM TRUNCATION -1 01340000
  1341. DC AL1(3) TOTAL LENGTH -1 01341000
  1342. DC C'STEP' KEYWORD NAME 01342000
  1343. SPACE 01343000
  1344. DC AL2(FLAGON-DMKPEC) OFFSET OF HANDLER 01344000
  1345. DC AL1(PEXRUN) FLAG AS RUN 01345000
  1346. DC AL1(1) MINIMUM TRUNCATION -1 01346000
  1347. DC AL1(2) TOTAL LENGTH -1 01347000
  1348. DC C'RUN' 01348000
  1349. SPACE 01349000
  1350. DC AL2(FLAGOFF-DMKPEC) OFFSET OF HANDLER 01350000
  1351. DC AL1(255-PEXRUN) SET TO TURN OFF RUN 01351000
  1352. DC AL1(2) MINIMUM TRUNCATION -1 01352000
  1353. DC AL1(4) TOTAL LENGTH -1 01353000
  1354. DC C'NORUN' KEYWORD NAME 01354000
  1355. SPACE 01355000
  1356. DC AL2(FLAGON-DMKPEC) OFFSET OF HANDLER 01356000
  1357. DC AL1(PEXPRINT) SET TO TURN ON PRINT 01357000
  1358. DC AL1(1) MINIMUM TRUNCATION -1 01358000
  1359. DC AL1(4) TOTAL LENGTH -1 01359000
  1360. DC C'PRINT' KEYWORD NAME 01360000
  1361. SPACE 01361000
  1362. DC AL2(FLAGOFF-DMKPEC) OFFSET OF HANDLER 01362000
  1363. DC AL1(255-PEXPRINT) TURN OFF PRINT FLAG 01363000
  1364. DC AL1(2) MINIMUM TRUNCATION -1 01364000
  1365. DC AL1(6) TOTAL LENGTH -1 01365000
  1366. DC C'NOPRINT' KEYWORD NAME 01366000
  1367. SPACE 01367000
  1368. DC AL2(FLAGON-DMKPEC) OFFSET OF HANDLER 01368000
  1369. DC AL1(PEXTERM) SET TO TURN ON TERM FLAG 01369000
  1370. DC AL1(1) MINIMUM TRUNCATION -1 01370000
  1371. DC AL1(7) TOTAL LENGTH -1 01371000
  1372. DC C'TERMINAL' KEYWORD NAME 01372000
  1373. SPACE 01373000
  1374. DC AL2(FLAGOFF-DMKPEC) OFFSET OF HANDLER 01374000
  1375. DC AL1(255-PEXTERM) TURN OF TERM FLAG 01375000
  1376. DC AL1(2) MINIMUM TRUNCATION 01376000
  1377. DC AL1(9) TOTAL LENGTH -1 01377000
  1378. DC C'NOTERMINAL' KEYWORD NAME 01378000
  1379. SPACE 01379000
  1380. DC AL2(RANGE-DMKPEC) OFFSET OF HANDLER 01380000
  1381. DC AL1(*-*) UNUSED 01381000
  1382. DC AL1(0) MINIMUM TRUNCATION -1 01382000
  1383. DC AL1(4) TOTAL LENGTH -1 01383000
  1384. DC C'RANGE' KEYWORD NAME 01384000
  1385. SPACE 01385000
  1386. DC AL2(CF-DMKPEC) OFFSET OF HANDLER 01386000
  1387. DC AL1(*-*) NOT USED 01387000
  1388. DC AL1(1) MINIMUM TRUNCATION -1 01388000
  1389. DC AL1(2) TOTAL LENGTH -1 01389000
  1390. DC C'CMD' KEYWORD NAME 01390000
  1391. SPACE 01391000
  1392. DC AL2(DUMP-DMKPEC) OFFSET OF HANDLER 01392000
  1393. DC AL1(*-*) UNUSED 01393000
  1394. DC AL1(0) MINIMUM TRUNCATION -1 01394000
  1395. DC AL1(3) TOTAL LENGTH -1 01395000
  1396. DC C'DUMP' KEYWORD NAME 01396000
  1397. SPACE 01397000
  1398. DC AL2(SAVE-DMKPEC) OFFSET OF HANDLER 01398000
  1399. DC AL1(*-*) UNUSED 01399000
  1400. DC AL1(1) MINIMUM TRUNCATION -1 01400000
  1401. DC AL1(3) TOTAL LENGTH -1 01401000
  1402. DC C'SAVE' KEYWORD NAME 01402000
  1403. SPACE 01403000
  1404. DC AL2(GET-DMKPEC) OFFSET OF HANDLER 01404000
  1405. DC AL1(*-*) UNUSED 01405000
  1406. DC AL1(1) MINIMUM TRUNCATION -1 01406000
  1407. DC AL1(2) TOTAL LENGTH -1 01407000
  1408. DC C'GET' KEYWORD NAME 01408000
  1409. SPACE 01409000
  1410. DC AL2(CLEAR-DMKPEC) OFFSET OF HANDLER 01410000
  1411. DC AL1(*-*) UNUSED 01411000
  1412. DC AL1(0) MINIMUM TRUNCATION -1 01412000
  1413. DC AL1(4) TOTAL LENGTH -1 01413000
  1414. DC C'CLEAR' 01414000
  1415. SPACE 01415000
  1416. DC AL2(OFF-DMKPEC) OFFSET OF HANDLER 01416000
  1417. DC AL1(*-*) UNUSED 01417000
  1418. DC AL1(0) MINIMUM TRUNCATION -1 01418000
  1419. DC AL1(2) TOTAL LENGTH -1 01419000
  1420. DC C'OFF' KEYWORD NAME 01420000
  1421. SPACE 01421000
  1422. DC AL2(END-DMKPEC) OFFSET OF HANDLER 01422000
  1423. DC AL1(*-*) UNUSED 01423000
  1424. DC AL1(1) MINIMUM TRUNCATION -1 01424000
  1425. DC AL1(2) TOTAL LENGTH -1 01425000
  1426. DC C'END' KEYWORD NAME 01426000
  1427. SPACE 01427000
  1428. DC AL2(QUERY-DMKPEC) OFFSET OF HANDLER 01428000
  1429. DC AL1(*-*) UNUSED 01429000
  1430. DC AL1(0) MINIMUM TRUNCATION -1 01430000
  1431. DC AL1(4) TOTAL LENGTH -1 01431000
  1432. DC C'QUERY' KEWORD NAME 01432000
  1433. DC X'FF' FLAG END OF TABLE 01433000
  1434. EJECT 01434000
  1435. *---------------------------------------------------------------------* 01435000
  1436. * DSECTS AND EQUATES * 01436000
  1437. *---------------------------------------------------------------------* 01437000
  1438. SPACE 01438000
  1439. COPY EQU 01439000
  1440. COPY PERBLOKS 01440000
  1441. PSA 01441000
  1442. COPY SAVE 01442000
  1443. COPY VMBLOK 01443000
  1444. END 01444000