Table of Contents

DMKVMD Source

References

Source Listing

DMKVMD.ASSEMBLE.txt
  1. VMD TITLE 'DMKVMD (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 @V67CAH7 00002000
  3. *. 00003000
  4. * 00004000
  5. * MODULE NAME - 00005000
  6. * 00006000
  7. * DMKVMD 00007000
  8. * 00008000
  9. * FUNCTION - 00009000
  10. * 00010000
  11. * DMKVMD DUMPS VIRTUAL MACHINES TO SPOOL BLOCKS IN BINARY FORM. 00011000
  12. * THE OUTPUT IS READ BY DIAGNOSE X14. 00012000
  13. * THE PRIMARY USER IS IPCS. 00013000
  14. * 00014000
  15. * ORIGIN/S&D CODE - @V67CAH7 00015000
  16. * 00016000
  17. * COMMAND - 00017000
  18. * 00018000
  19. * VMDUMP (FORMAT VMTYPE) (TO * ) (( )(-|:(HEXLOC2))) 00019000
  20. * (TO USERID) (( )( ( END ))) 00020000
  21. * (SYSTEM ) ((HEXLOC1) ) 00021000
  22. * (( 0 )( . (BYTECNT))) 00022000
  23. * (( )( ( END ))) 00023000
  24. * (DSS) (*DUMPID) 00024000
  25. * 00025000
  26. * ATTRIBUTES - 00026000
  27. * 00027000
  28. * REENTRANT, PAGEABLE, CALLED VIA SVC 8 00028000
  29. * 00029000
  30. * ENTRY POINT - 00030000
  31. * 00031000
  32. * DMKVMDEP - ENTRY POINT 00032000
  33. * 00033000
  34. * ENTRY CONDITIONS - 00034000
  35. * 00035000
  36. * GPR9 - ADDRESS OF THE COMMAND LINE. 00036000
  37. * GPR11 - ADDRESS OF THE USERS VMBLOK. 00037000
  38. * GPR12 - ADDRESS OF THE ENTRY POINT. 00038000
  39. * GPR13 - ADDRESS OF THE STANDARD SAVE AREA. 00039000
  40. * 00040000
  41. * EXIT CONDITIONS - 00041000
  42. * 00042000
  43. * NORMAL - GPR2 = 0 00043000
  44. * ERROR - GPR2 = ERROR MESSAGE CODE NUMBER 00044000
  45. EJECT 00045000
  46. * 00046000
  47. * CALLS TO OTHER ROUTINES - 00047000
  48. * 00048000
  49. * DMKCKSPL - CHECKPOINT DUMP FILE 00049000
  50. * DMKCVTBH - CREATE PRINTABLE HEX FROM BINARY FOR ERROR MSG 00050000
  51. * DMKCVTDT - GET CURRENT DATE AND TIME FOR SFBLOK 00051000
  52. * DMKCVTHB - TO CONVERT COMMAND LINE PRINTABLE HEX TO BINARY 00052000
  53. * DMKERMSG - WRITE ERROR MESSAGES 00053000
  54. * DMKFREE - TO GET STORAGE FOR SFBLOK AND BIT MAP 00054000
  55. * DMKFRET - TO FREE STORAGE...BIT MAP, IF ERROR ALSO SFBLOK 00055000
  56. * DMKPGTSG - TO GET SPOOL SPACE 00056000
  57. * DMKPGTVG - GET A VIRTUAL PAGE 00057000
  58. * DMKPGTVR - RELEASE VIRTUAL PAGES 00058000
  59. * DMKPTRAN - TO BRING USER AND SYSTEM PAGES INTO STORAGE 00059000
  60. * DMKPTRUL - UNLOCK PAGES IN REAL STROAGE 00060000
  61. * DMKRPAGT - READ IN SPOOL RECORDS 00061000
  62. * DMKRPAPT - WRITE OUT SPOOL RECORDS 00062000
  63. * DMKRSPDP - NEW DUMP QUEUE 00063000
  64. * DMKRSPID - OBTAIN SFBLOK ID 00064000
  65. * DMKRSPRD - ADD DUMP TO READER QUEUE 00065000
  66. * DMKSCNFD - TO LOCATE THE NEXT ARGUMENT IN THE COMMAND LINE 00066000
  67. * DMKSPLDL - DELETE SPOOL FILES 00067000
  68. * DMKSYSDU - USERID OF SYSTEM DUMP DISPOSITION 00068000
  69. * DMKUDRFU - TO CHECK THE VALIDITY OF A USERID 00069000
  70. * 00070000
  71. * TABLES/WORKAREAS 00071000
  72. * 00072000
  73. * SFBLOK 00073000
  74. * SAVEAREA 00074000
  75. * PSA 00075000
  76. * VMBLOK 00076000
  77. * BITMAP - CREATED TEMPORARILY IN STORAGE 00077000
  78. * KEY MAP - CREATED TEMPORARILY IN SYSTEM VIRTUAL PAGES IN STOR 00078000
  79. * OUTPUT BUFFER WHERE SPOOL BLOCKS ARE BUILT PRIOR TO WRITING 00079000
  80. * TO DASD STORAGE 00080000
  81. * 00081000
  82. * REGISTER USAGE - 00082000
  83. * 00083000
  84. * R0 = WORK REGISTER 00084000
  85. * R1 = SOMETIME BASE OF BITMAP...LOTS OF TIME WORK REG 00085000
  86. * R2 = VIRTUAL PAGES BASE...IT'S A REAL ADDRESS 00086000
  87. * R3 = RANGE POINTER ...POINTS TO RANGE SPECIFICATION BEING PROCESSED 00087000
  88. * R4 = CURRENT ADDRESS OF VIRTUAL PAGE, BEING DUMPED 00088000
  89. * R5 = SFBLOK POINTER 00089000
  90. * R6 = VIRTUAL PAGES INDEX INTO R2 00090000
  91. * R7 = PROGRAMS BAL REGISTER 00091000
  92. * R8 = SPOOL INDEX INTO R10 00092000
  93. * R9 = BUFFER POINTER...LATER BASE FOR BITMAP AND WORKAREA 00093000
  94. * R10 = SPOOL RECORD BASE OR SPLINK BASE 00094000
  95. * R11 = VMBLOK POINTER 00095000
  96. * R12 = PROGRAMS BASE REGISTER 00096000
  97. * R13 = PROGRAMS SAVEAREA AND SAVEWRK'S 00097000
  98. * R14 = WORK REGISTER 00098000
  99. * R15 = WORK REGISTER 00099000
  100. EJECT 00100000
  101. * 00101000
  102. * NOTES - NONE 00102000
  103. * 00103000
  104. * OPERATION - 00104000
  105. * 00105000
  106. * THIS MODULE IS CALLED BY THE COMMAND ANALYSIS ROUTINE DMKCFM. 00106000
  107. * INITIALLY THE PARAMETERS OF THE COMMAND ARE EXAMINED, AND 00107000
  108. * INDICATORS OR ADDRESSES STORED. THEN THREE PAGES OF SPOOL 00108000
  109. * SPACE ARE RESERVED FOR THE DMPINREC AND DMPKEY1 AND 2 RECORDS. 00109000
  110. * NEXT, THE ADDRESSES REQUESTED ARE DUMPED TO SPOOL SPACE, WHILE 00110000
  111. * THE KEYS ARE SAVED AND A BIT MAP CREATED. AFTER ALL ADDRESSES 00111000
  112. * ARE DUMPED, THE DMPINREC AND KEY RECORDS ARE BUILT. LAST, THE 00112000
  113. * SPACES ARE FREED UP AND A RETURN IS ISSUED. 00113000
  114. * 00114000
  115. * DETAILED OPERATION - 00115000
  116. * 00116000
  117. * 1. ZERO WORK AREAS. 00117000
  118. * 2. GET SFBLOK SPACE, ZERO IT, MOVE SFBFNAME 'VMDUMP' IN. 00118000
  119. * 3. GET NEXT ENTRY ON COMMAND LINE, IF NONE PRESENT GO TO 9. 00119000
  120. * 4. CHECK IF ENTRY IS 'TO', IF NOT CONTINUE. ELSE, VERIFY 00120000
  121. * 'TO' AND NEXT PARAMETER AS ITS SPECIFICATION AND GO TO 3. 00121000
  122. * 5. CHECK IF ENTRY IS 'SYSTEM', IF NOT CONTINUE. ELSE, VERIFY 00122000
  123. * AND GO TO 3. 00123000
  124. * 6. CHECK IF ENTRY IS 'FORMAT', IF NOT CONTINUE. ELSE, VERIFY 00124000
  125. * 'FORMAT' AND ITS PARAMETER, AND GO TO 3. 00125000
  126. * 7. CHECK IF ENTRY IS 'DSS', IF NOT CONTINUE. ELSE SET 00126000
  127. * INDICATOR AND GO TO 3. 00127000
  128. * 8. CHECK IF ENTRY IS '*', IF NOT GO TO 10. ELSE, TAKE REST OF 00128000
  129. * COMMAND LINE UP TO 100 CHARACTERS AS COMMENT. 00129000
  130. * 9. FULL LINE IS SEARCHED. VERIFY THAT 'TO' IS SPECIFIED OR 00130000
  131. * TAKE DEFAULT. VERIFY THAT A RANGE IS SPECIFIED OR DEFAULT 00131000
  132. * TO 0-END. GO TO 11. 00132000
  133. * 10.1 ENTRY IS ASSUMED TO BE A RANGE. DETERMINE IF ENTRY IS 00133000
  134. * SINGLE ENTRY, ADDRESS AND BYTECOUNT, OR ADDRESS TO 00134000
  135. * ANOTHER ADDRESS. 00135000
  136. * 10.2 VERIFY NUMBERS AND TAKE DEFAULTS IF NECESSARY. 00136000
  137. * 10.3 ROUND ADDRESSES TO PAGE BOUNDARIES AND SAVE THEM. GO TO 3. 00137000
  138. * 11. ORDER ADDRESS RANGES IN ASCENDING ORDER. MERGE ADDRESS 00138000
  139. * RANGES TOGETHER IF POSSIBLE. 00139000
  140. * 12. FINISH BUILDING SFBLOK AND ADD IT TO DUMP IN PROCESS QUEUE. 00140000
  141. * 13. GET BITMAP SPACE AND ZERO IT OUT. 00141000
  142. * 14. GET SPACE FOR BUILDING SPOOL RECORDS IN MAIN STORAGE, AND 00142000
  143. * ZERO IT OUT. GET MAIN STORAGE SPACE FOR 2 KEY PAGES AND 00143000
  144. * ZERO THEM OUT. 00144000
  145. * 15. WRITE 3 DUMMY SPOOL BLOCKS. THESE WILL LATER BE BUILT INTO 00145000
  146. * DMPINREC, DMPKYREC 1 AND 2. 00146000
  147. * 16. DUMP ADDRESS RANGES IN SPOOL BLOCK FORM. UPDATING BIT MAP 00147000
  148. * (INDICATOR OF PAGES DUMPED) AND KEY MAPS CONCURRENTLY. 00148000
  149. * SEVERAL BAL ROUTINES ARE USED TO ASSIST: 17, 18, 19. 00149000
  150. * 17. GETPAGE ROUTINE, BRINGS PAGE INTO STORAGE, GETS KEYS FOR 00150000
  151. * PAGE, UPDATES KEY MAPS, AND RETURNS. 00151000
  152. * 18. WRSPOOL ROUTINE, UPDATES SPLINK AND WRITES SPOOL RECORD 00152000
  153. * OUT TO DASD. 00153000
  154. * 19. GETCCPD ROUTINE, GETS CCPD FOR NEXT SPOOL RECORD, AND 00154000
  155. * RETURNS IF CCPD IS AVAILABLE. ELSE, COMPLETE SPLINK CHAIN 00155000
  156. * WITH CURRENT RECORD POINTING BACK TO FIRST RECORD, TAKE 00156000
  157. * SFBLOK OFF DUMP QUEUE AND ADD IT TO DELETE QUEUE. GO TO 24. 00157000
  158. * 20. ALL DONE DUMPING USERS DEFINED STORAGE. IF VMDUMP REQUESTED 00158000
  159. * 'DSS', DUMP DISCONTIGUOUS SAVED SEGMENTS IF EXISTANT. 00159000
  160. * 21. READ IN RECORD 1, BUILD DMPINREC IN IT, WRITE IT OUT. 00160000
  161. * BUILDING MUST WAIT TILL HERE BECAUSE IT CONTAINS BITMAP. 00161000
  162. * 22. READ IN RECORDS 2, 3, AND 4, PUT KEY DATA IN THEM, WRITE 00162000
  163. * THEM OUT. DMPKYREC 1 AND 2. 00163000
  164. * 23. REMOVE COMPLETED DUMPS SFBLOK FROM DUMP IN PROGRESS QUEUE 00164000
  165. * AND ADD IT TO END OF READER QUEUE. 00165000
  166. * 24. FREE UP GOTTEN MAIN STORAGE SPACE, IF ENTERED HERE FROM 19, 00166000
  167. * GO TO 25. ELSE END PROGRAM. 00167000
  168. * 25. ERROR ROUTINES... 00168000
  169. * 00169000
  170. * ERROR MESSAGES - 00170000
  171. * 00171000
  172. * DMKVMD009E - INVALID RANGE - 'RANGE' 00172000
  173. * DMKVMD013E - CONFLICTING OPTIONS - 'OPTION' 00173000
  174. * DMKVMD020E - USERID MISSING OR INVALID 00174000
  175. * DMKVMD033E - HEXLOC MISSING OR INVALID 00175000
  176. * DMKVMD038E - PARAMETER FOR 'OPTION' OPTION MISSING OR INVALID 00176000
  177. * DMKVMD053E - 'USERID' NOT IN CP DIRECTORY 00177000
  178. * DMKVMD146E - DUMP FAILED, SPOOLING ERROR 00178000
  179. * DMKVMD160E - HEXLOC 'HEXLOC' EXCEEDS STORAGE 00179000
  180. * 00180000
  181. *. 00181000
  182. EJECT 00182000
  183. COPY OPTIONS @V67CAH7 00183000
  184. COPY LOCAL @V67CAH7 00184000
  185. DMKVMD CSECT @V67CAH7 00185000
  186. MODID DC C'DMKVMD ' @V67CAH7 00186000
  187. SPACE 2 00187000
  188. USING PSA,R0 @V67CAH7 00188000
  189. USING RANGES,R3 @V67CAH7 00189000
  190. USING VMBLOK,R11 @V67CAH7 00190000
  191. USING SAVEAREA,R13 @V67CAH7 00191000
  192. USING BUFFER,R9 @V67CAH7 00192000
  193. SPACE 2 00193000
  194. EXTRN DMKCKSPL,DMKCVTBH,DMKCVTDT,DMKCVTHB,DMKERMSG @V67CAH7 00194000
  195. EXTRN DMKFREE,DMKFRET,DMKPGTSG,DMKPGTVG,DMKPGTVR @V67CAH7 00195000
  196. EXTRN DMKPTRUL,DMKRPAGT,DMKRPAPT,DMKRSPDP,DMKRSPID @V67CAH7 00196000
  197. EXTRN DMKRSPRD,DMKSCNFD,DMKSPLDL,DMKSYSDU,DMKUDRFU @V67CAH7 00197000
  198. EJECT 00198000
  199. *********************************************************************** 00199000
  200. * * 00200000
  201. * 1.2.3. ENTRY * 00201000
  202. * * 00202000
  203. *********************************************************************** 00203000
  204. SPACE 2 00204000
  205. DMKVMDEP RELOC @V67CAH7 00205000
  206. SPACE 2 00206000
  207. XC SAVEWRK1,SAVEWRK1 * ZERO WORK @V67CAH7 00207000
  208. XC SAVEWRK2(32),SAVEWRK2 * AREA @V67CAH7 00208000
  209. LA R3,SAVEWRK2 ESTABLISH RANGE POINTER @V67CAH7 00209000
  210. SPACE 2 00210000
  211. LA R0,SFBSIZE * GET SPACE FOR @V67CAH7 00211000
  212. CALL DMKFREE * SFBLOK @V67CAH7 00212000
  213. LR R5,R1 SAVE POINTER TO SFBLOK @V67CAH7 00213000
  214. USING SFBLOK,R5 @V67CAH7 00214000
  215. XC SFBLOK(SFBSIZE*8),SFBLOK ZERO GOTTEN AREA @V67CAH7 00215000
  216. MVC SFBFNAME(7),=C'VMDUMP ' PUT DEFAULT NAME IN @V67CAH7 00216000
  217. MVC SFBFNAME+7(17),SFBFNAME+6 * TYPE AREA @V67CAH7 00217000
  218. MVC SFBUSER,BLANKS BLANK OUT USERID FIELD @V67CAH7 00218000
  219. SPACE 2 00219000
  220. GETNEXT DS 0H @V67CAH7 00220000
  221. CALL DMKSCNFD GET NEXT FIELD 00221000
  222. SPACE 00222000
  223. * DMKSCNFD FINDS THE ENTRIES WITHIN THE COMMAND LINE, AT EXIT R0 HAS 00223000
  224. * LENGTH OF ENTRY AND R1 POINTS TO ENTRYS FIRST BYTE 00224000
  225. SPACE 00225000
  226. BNZ LINEDONE IF LINE COMPLETELY READ...BRANCH @V67CAH7 00226000
  227. EJECT 00227000
  228. *********************************************************************** 00228000
  229. * * 00229000
  230. * 4. IS PARAMETER = TO ? * 00230000
  231. * * 00231000
  232. *********************************************************************** 00232000
  233. SPACE 2 00233000
  234. * 00234000
  235. CHKTO DS 0H @V67CAH7 00235000
  236. C R0,F2 COMPARE LENGTH TO 2 @V67CAH7 00236000
  237. BNE CHKSYSTM NO...NOT 'TO' @V67CAH7 00237000
  238. CLC 0(2,R1),=C'TO' * IS THIS 'TO' PARAMETER @V67CAH7 00238000
  239. BNE CHKSYSTM * NO...CHECK FOR FORMAT @V67CAH7 00239000
  240. TM SAVEWRK1,SETTO * 'TO' BEEN FOUND BEFORE @V67CAH7 00240000
  241. BO VMD013 * YES...ERROR ROUTINE @V67CAH7 00241000
  242. OI SAVEWRK1,SETTO SET 'TO' FOUND INDICATOR ON @V67CAH7 00242000
  243. CALL DMKSCNFD * GET THE 'TO' REQUEST 00243000
  244. BNZ VMD020 * IF NO ENTRY..ERROR @V67CAH7 00244000
  245. * R0 HAS LENGTH..R1 HAS ADDRESS OF ENTRY FOLLOWING 'TO' 00245000
  246. C R0,F1 * IS ENTRY'S LENGTH 1 BYTE? @V67CAH7 00246000
  247. BNE NOTSELF * NO..BRANCH AROUND * CHECK @V67CAH7 00247000
  248. CLI 0(R1),C'*' * IS ENTRY = '*' @V67CAH7 00248000
  249. BNE NOTSELF * NO...BRANCH AROUND @V67CAH7 00249000
  250. * ENTRY IS '*' 00250000
  251. MVC SFBUSER,VMUSER GET THIS USERS ID @V67CAH7 00251000
  252. B GETNEXT BRANCH BACK @V67CAH7 00252000
  253. * CONTINUE CHECK OF FIELD..IT'S NOT THIS USER...(*) 00253000
  254. NOTSELF DS 0H @V67CAH7 00254000
  255. C R0,F8 * IS LENGTH GT 8 BYTES? @V67CAH7 00255000
  256. BH VMD020 * YES..ERROR BRANCH @V67CAH7 00256000
  257. SPACE 00257000
  258. SLR R2,R2 * INDICATE ONLY WANT CC SET @V67CAH7 00258000
  259. CALL DMKUDRFU CHECK VALIDITY OF USERID 00259000
  260. BNZ VMD053 NOGOOD..BR TO ERROR ROUTINE @V67CAH7 00260000
  261. LR R8,R0 SETUP FOR EXECUTE...R0=NONO @V67CAH7 00261000
  262. BCTR R8,0 -1 FOR MVC LENGTH @V67CAH7 00262000
  263. EX R8,EXMOVE1 MOVE 'TO' USERID TO SFBUSER @V67CAH7 00263000
  264. B GETNEXT @V67CAH7 00264000
  265. SPACE 00265000
  266. EXMOVE1 MVC SFBUSER(*-*),0(R1) MOVE IT...VIA EXECUTE @V67CAH7 00266000
  267. EJECT 00267000
  268. *********************************************************************** 00268000
  269. * * 00269000
  270. * 5. IS PARAMETER = 'SYSTEM'? * 00270000
  271. * * 00271000
  272. *********************************************************************** 00272000
  273. SPACE 2 00273000
  274. CHKSYSTM DS 0H @V67CAH7 00274000
  275. C R0,F6 * IS LENGTH = 6 @V67CAH7 00275000
  276. BNE CHKFORM * NO...BRANCH @V67CAH7 00276000
  277. CLC 0(6,R1),=C'SYSTEM' * YES...IS PARAMETER=SYSTEM @V67CAH7 00277000
  278. BNE CHKFORM * NO...BRANCH @V67CAH7 00278000
  279. TM SAVEWRK1,SETTO * YES...* IS THIS FIRST @V67CAH7 00279000
  280. * * 'SYSTEM' OR 'TO' 00280000
  281. BO VMD013 * NO..ERROR,BRANCH @V67CAH7 00281000
  282. OI SAVEWRK1,SETTO * YES..SET IND ON @V67CAH7 00282000
  283. L R1,=A(DMKSYSDU) GET POINTER TO SYSTEM USERID @V67CAH7 00283000
  284. MVC SFBUSER,0(R1) MOVE SYSTEM CPDUMP USERID IN @V67CAH7 00284000
  285. B GETNEXT GO BACK, NEXT NEXT PARAMETER @V67CAH7 00285000
  286. EJECT 00286000
  287. *********************************************************************** 00287000
  288. * * 00288000
  289. * 6. IS PARAMETER = FORMAT ? * 00289000
  290. * * 00290000
  291. *********************************************************************** 00291000
  292. SPACE 2 00292000
  293. * R0 HAS LENGTH, R1 HAS ADDRESS OF ENTRY 00293000
  294. CHKFORM DS 0H @V67CAH7 00294000
  295. C R0,F6 * IS ENTRY 6 BYTES LONG? @V67CAH7 00295000
  296. BNE CHKDSS * NO...CHECK FOR ASTERISK @V67CAH7 00296000
  297. CLC 0(6,R1),=C'FORMAT' * IS ENTRY = FORMAT @V67CAH7 00297000
  298. BNE CHKDSS * NO,BR TO ASTERISK CHECK @V67CAH7 00298000
  299. SPACE 00299000
  300. TM SAVEWRK1,SETFORM * IS THIS 2ND FORMAT? @V67CAH7 00300000
  301. BO VMD013 * YES..ERROR, BRANCH @V67CAH7 00301000
  302. OI SAVEWRK1,SETFORM SET FORMAT FOUND INDICATOR @V67CAH7 00302000
  303. SPACE 00303000
  304. CALL DMKSCNFD * GET FORMAT'S ENTRY 00304000
  305. BNZ VMD038 * DOESN'T EXIST...ERROR @V67CAH7 00305000
  306. SPACE 00306000
  307. * R0 HAS LENGTH, R1 HAS ADDRESS OF ENTRY FOLLOWING 'FORMAT' 00307000
  308. C R0,F8 * IS ENTRY GT 8 BYTES @V67CAH7 00308000
  309. BH VMD038 * YES...ERROR,BRANCH @V67CAH7 00309000
  310. FORMOK DS 0H @V67CAH7 00310000
  311. LR R8,R0 * NO...ENTRY OK @V67CAH7 00311000
  312. BCTR R8,0 -1 FOR MVC INST @V67CAH7 00312000
  313. EX R8,EXMOVE2 MOVE IT INTO SFBFTYPE @V67CAH7 00313000
  314. B GETNEXT AND GET NEXT PARAMETER @V67CAH7 00314000
  315. SPACE 2 00315000
  316. EXMOVE2 MVC SFBFTYPE(*-*),0(R1) MOVE VIA EXECUTE..TO SFBLOK @V67CAH7 00316000
  317. EJECT 00317000
  318. *********************************************************************** 00318000
  319. * * 00319000
  320. * 7. IS PARAMETER = DSS ? * 00320000
  321. * * 00321000
  322. *********************************************************************** 00322000
  323. SPACE 2 00323000
  324. CHKDSS DS 0H @V67CAH7 00324000
  325. C R0,F3 * IS LENGTH 3 BYTES @V67CAH7 00325000
  326. BNE CHKASTER * NO...BRANCH @V67CAH7 00326000
  327. CLC 0(3,R1),=C'DSS' YES...* IS ENTRY 'DSS'? @V67CAH7 00327000
  328. BNE CHKASTER * NO...BRANCH @V67CAH7 00328000
  329. L R8,VMSIZE * IS VMSIZE GT @V67CAH7 00329000
  330. C R8,VMSTOR * VMSTOR? @V67CAH7 00330000
  331. BNH VMD013 * NO...ERROR,BRANCH @V67CAH7 00331000
  332. * * YES...USER HAS SOME 00332000
  333. * * TYPE OF SAVED SYSTEM 00333000
  334. OI SAVEWRK1,SETDSS * ...INDICATE DSS FOUND @V67CAH7 00334000
  335. B GETNEXT GO GET NEXT ENTRY @V67CAH7 00335000
  336. EJECT 00336000
  337. *********************************************************************** 00337000
  338. * * 00338000
  339. * 8. IS PARAMETER = * (ASTERISK) ? * 00339000
  340. * * 00340000
  341. *********************************************************************** 00341000
  342. SPACE 2 00342000
  343. * R0 HAS LENGTH, R1 HAS ADDRESS OF ENTRY 00343000
  344. CHKASTER DS 0H @V67CAH7 00344000
  345. CLI 0(R1),C'*' * IS THIS A COMMENT? @V67CAH7 00345000
  346. BNE CHKRANGE * NO..GO CHECK RANGE @V67CAH7 00346000
  347. SPACE 00347000
  348. * ***DETERMINE MESSAGE LENGTH FROM * TO END 00348000
  349. * R9 POINTS TO BUFFER 00349000
  350. * BYTES LEFT = (BUFFER LEFT + THIS FIELD) 00350000
  351. L R14,BUFCNT * GET LENGTH LEFT IN BUFFER @V67CAH7 00351000
  352. AR R0,R14 * ADD TO FIELD WORKING WITH @V67CAH7 00352000
  353. BCTR R0,0 -1 FOR * @V67CAH7 00353000
  354. LA R1,1(,R1) MOVE POINTER PAST * @V67CAH7 00354000
  355. SPACE 00355000
  356. LA R14,L'DMPDMPID * ESTABLISH 100 FOR COMPARE @V67CAH7 00356000
  357. CR R0,R14 * IS LENGTH GT 100? @V67CAH7 00357000
  358. BNH COMMOK * NO...LENGTH IS OK, BRANCH @V67CAH7 00358000
  359. LR R0,R14 * YES..SET LENGTH TO 100=MAX @V67CAH7 00359000
  360. SPACE 00360000
  361. * SAVE R0,R1 FOR BUILDING OF COMMENT IN DMPINREC 00361000
  362. COMMOK DS 0H @V67CAH7 00362000
  363. ST R0,SAVEWRK8 * SAVE LENGTH OF ENTRY @V67CAH7 00363000
  364. ST R1,SAVEWRK9 * SAVE ADDRESS OF ENTRY @V67CAH7 00364000
  365. EJECT 00365000
  366. *********************************************************************** 00366000
  367. * * 00367000
  368. * 9. HAVE THE USERID AND RANGE DEFAULTS BEEN SATISFIED? * 00368000
  369. * * 00369000
  370. *********************************************************************** 00370000
  371. SPACE 2 00371000
  372. * ROUTINE TO ENTER WHEN FULL LINE IS SEARCHED OR COMMENT FOUND 00372000
  373. SPACE 00373000
  374. LINEDONE DS 0H @V67CAH7 00374000
  375. TM SAVEWRK1,SETTO * HAS TO/SYSTEM BEEN FOUND @V67CAH7 00375000
  376. BO GOTTO * YES...SKIP GETTING USERID @V67CAH7 00376000
  377. MVC SFBUSER,VMUSER * NO...PUT USER INTO SFBLOK @V67CAH7 00377000
  378. GOTTO DS 0H @V67CAH7 00378000
  379. LA R14,SAVEWRK2 ESTABLISH ADDR OF FIRST RANGE @V67CAH7 00379000
  380. CR R3,R14 * HAS A RANGE BEEN BUILT? @V67CAH7 00380000
  381. BH ORDERANG * YES...BRANCH @V67CAH7 00381000
  382. OI SAVEWRK1+1,DSSONLY TEMPORARLY SET @V67CAH7 00382000
  383. TM SAVEWRK1,SETDSS IF 'DSS' REQUESTED @V67CAH7 00383000
  384. * DON'T DEFAULT TO 0-END 00384000
  385. BO DSSHUH DSS REQUESTED...BRANCH @V67CAH7 00385000
  386. NI SAVEWRK1+1,X'FF'-DSSONLY TURN OFF IF NOT ALONE @V67CAH7 00386000
  387. SLR R14,R14 ZERO FOR LOW RANGE @V67CAH7 00387000
  388. ST R14,RANGELOW PUT IT IN LOW POSITION @V67CAH7 00388000
  389. L R14,VMSTOR USE VMSTOR FOR HIGH RANGE @V67CAH7 00389000
  390. BCTR R14,0 -1 @V67CAH7 00390000
  391. ST R14,RANGEHI PUT IN HIGH POSITION @V67CAH7 00391000
  392. LA R3,RANGENXT UPDATE RANGE POINTER @V67CAH7 00392000
  393. B ORDERANG @V67CAH7 00393000
  394. EJECT 00394000
  395. *********************************************************************** 00395000
  396. * * 00396000
  397. * 10. RANGE ROUTINE * 00397000
  398. * * 00398000
  399. *********************************************************************** 00399000
  400. SPACE 2 00400000
  401. * ASSUMING PARAMETER IS A RANGE OF ADDRESSES 00401000
  402. * HERE DETERMINE TYPE OF RANGE SPECIFICATION 00402000
  403. CHKRANGE DS 0H @V67CAH7 00403000
  404. LA R14,SAVEWRK8 SET END OF RANGES ADDRESS @V67CAH7 00404000
  405. CR R3,R14 * HAVE THREE RANGES BEEN FOUND @V67CAH7 00405000
  406. BNL VMD009 * YES...BR TO ERROR ROUTINE @V67CAH7 00406000
  407. * R0 HAS LENGTH, R1 HAS ADDRESS OF FIELD...SAVE THESE ORIGINAL NUMBERS 00407000
  408. ST R0,SFBDATE * SAVED LENGTH @V67CAH7 00408000
  409. ST R1,SFBDATE+4 * SAVED ADDRESS @V67CAH7 00409000
  410. RANGLOOP DS 0H @V67CAH7 00410000
  411. NI SAVEWRK1,X'FF'-DOT-DASH-BLANK TURN OFF SWITCHS @V67CAH7 00411000
  412. * IS RANGE DASH 00412000
  413. OI SAVEWRK1,DASH * TURNON DASH FOUND INDICATOR @V67CAH7 00413000
  414. CLI 0(R1),C'-' * IS THIS A SET OF RANGES? @V67CAH7 00414000
  415. BE RANGESET * YES...BRANCH @V67CAH7 00415000
  416. CLI 0(R1),COLON * IS THIS A SET OF RANGES? @V67CAH7 00416000
  417. BE RANGESET * YES...BRANCH @V67CAH7 00417000
  418. NI SAVEWRK1,X'FF'-DASH * NO...TURN DASH OFF @V67CAH7 00418000
  419. SPACE 00419000
  420. * IS RANGE DOT...ADDRESS.BYTECOUNT 00420000
  421. OI SAVEWRK1,DOT * TURN DOT FOUND ON @V67CAH7 00421000
  422. CLI 0(R1),C'.' * IS THIS RANGE.BYTECOUNT? @V67CAH7 00422000
  423. BE RANGESET * YES...BRANCH @V67CAH7 00423000
  424. NI SAVEWRK1,X'FF'-DOT * NO...TURN DOT OFF @V67CAH7 00424000
  425. SPACE 00425000
  426. * IS THIS SINGLE ADDRESS OR END OF INPUT LINE? 00426000
  427. OI SAVEWRK1,BLANK * TURN BLANK FOUND 'ON' @V67CAH7 00427000
  428. CLI 0(R1),C' ' * IS THIS BLANK @V67CAH7 00428000
  429. BE RANGESET * YES...BRANCH @V67CAH7 00429000
  430. CLI 0(R1),X'15' * IS THIS LINE END @V67CAH7 00430000
  431. BE RANGESET * YES...BRANCH @V67CAH7 00431000
  432. * FAILED ON FINDING ADDRESS SEPARATOR 00432000
  433. * UPDATE POINTERS TO NEXT POSITION 00433000
  434. LA R1,1(,R1) ADD ONE TO POSITION POINTER @V67CAH7 00434000
  435. BCT R0,RANGLOOP DECREMENT FIELD LENGTH BY 1 @V67CAH7 00435000
  436. * AND CONTINUE CHECK IF ANY FIELD LEFT 00436000
  437. * IF NONE LEFT...DEFAULT TO BLANK 00437000
  438. EJECT 00438000
  439. * NOW VERIFY RANGE NUMBERS OR TAKE DEFAULTS 00439000
  440. SPACE 00440000
  441. RANGESET DS 0H @V67CAH7 00441000
  442. ST R0,SFBTIME * SAVE LENGTH OF 2ND PART @V67CAH7 00442000
  443. ST R1,SFBTIME+4 * SAVE ADDRESS OF 2ND PART @V67CAH7 00443000
  444. * RESOLVE LENGTH AND ADDRESS OF FIRST ADDRESS OF FIELD 00444000
  445. L R0,SFBDATE THIS GETS ORIGINAL COUNT @V67CAH7 00445000
  446. S R0,SFBTIME ORIG COUNT - RESIDUAL COUNT @V67CAH7 00446000
  447. L R1,SFBDATE+4 ORIGINAL ADDRESS.. @V67CAH7 00447000
  448. * R0 NOW HAS LENGTH OF 1ST FIELD, R1 HAS ADDRESS OF 1ST FIELD 00448000
  449. LTR R0,R0 IS LENGTH = 0 (DUE TO DOT @V67CAH7 00449000
  450. * OR DASH AS FIRST CHARACTER) 00450000
  451. BNZ CHKNUM NO...BRANCH TO VERIFY NUMBER @V67CAH7 00451000
  452. SLR R1,R1 YES..SET LOW RANGE TO DEFAULT=0 @V67CAH7 00452000
  453. B DONTCHK SKIP VERIFY @V67CAH7 00453000
  454. CHKNUM DS 0H @V67CAH7 00454000
  455. BAL R7,FIELDCHK VERIFY ADDR...ON RETURN R1 HAS @V67CAH7 00455000
  456. * ADDRESS IN BINARY 00456000
  457. DONTCHK DS 0H @V67CAH7 00457000
  458. ST R1,RANGELOW SAVE LOW ADDRESS OF RANGE @V67CAH7 00458000
  459. TM SAVEWRK1,BLANK IS THIS SINGLE FIELD? @V67CAH7 00459000
  460. BO STROUND * YES...R1 SET TO LOW ADDRESS @V67CAH7 00460000
  461. * * MAKE THIS HIGH ADDRESS ALSO 00461000
  462. L R0,SFBTIME RESTORE POINTERS TO @V67CAH7 00462000
  463. L R1,SFBTIME+4 SECOND ADDRESS @V67CAH7 00463000
  464. * R0,R1 RANGE INCLUDES SEPARATION CHARACTER...NOW ELIMINATE IT 00464000
  465. LA R1,1(,R1) ADD 1 TO ADDRESS POINTER @V67CAH7 00465000
  466. BCTR R0,0 SUBTRACT ONE FROM LENGTH @V67CAH7 00466000
  467. LTR R0,R0 * IS THERE NO SECOND OPERAND @V67CAH7 00467000
  468. BNH SYSSIZE * YES...GET SYSTEM SIZE FOR HIGH @V67CAH7 00468000
  469. C R0,F3 * IS 2ND ADDR 3 BYTES LONG @V67CAH7 00469000
  470. BNE VERIFY2 * NO...BRANCH @V67CAH7 00470000
  471. CLC 0(3,R1),=C'END' * YES...IS 2ND ADDRESS='END' @V67CAH7 00471000
  472. BNE VERIFY2 * NO...BRANCH TO VERIFY 2ND @V67CAH7 00472000
  473. SYSSIZE DS 0H @V67CAH7 00473000
  474. L R1,VMSTOR SET HIGH TO SYSTEM SIZE @V67CAH7 00474000
  475. BCTR R1,0 SUBTRACT 1 FROM SYSTEM SIZE @V67CAH7 00475000
  476. B STROUND GO STORE HIGH/ROUND BOTH @V67CAH7 00476000
  477. VERIFY2 DS 0H @V67CAH7 00477000
  478. BAL R7,FIELDCHK VERIFY 2ND ADDRESS @V67CAH7 00478000
  479. * ON RETURN R1= BINARY ON THE 2ND ADDRESS 00479000
  480. EJECT 00480000
  481. * CHECK RANGE TYPES 00481000
  482. SPACE 00482000
  483. TM SAVEWRK1,DOT * IS THIS ADDRESS.BYTECOUNT? @V67CAH7 00483000
  484. BO CHKDOT * YES...BRANCH @V67CAH7 00484000
  485. * THIS IS DASH TYPE RANGE 00485000
  486. C R1,RANGELOW * IS HEXLOC2 LT HEXLOC1? @V67CAH7 00486000
  487. BNL STROUND * NO...BRANCH @V67CAH7 00487000
  488. SPACE 00488000
  489. * * YES...SET UP FOR ERROR 009 00489000
  490. L R8,RANGELOW SAVE RANGELOW IN REGISTER @V67CAH7 00490000
  491. CALL DMKCVTBH R1 HAS BINARY NUMBER ALREADY 00491000
  492. STCM R0,3,SAVEWRK2+7 * SAVE SECOND @V67CAH7 00492000
  493. STCM R1,15,SAVEWRK2+9 * PRINTABLE ADDRESS @V67CAH7 00493000
  494. MVI SAVEWRK2+6,C'-' MOVE DASH BETWEEN @V67CAH7 00494000
  495. LR R1,R8 GET FIRST RANGE @V67CAH7 00495000
  496. CALL DMKCVTBH CONVERT YE OF LITTLE FAITH 00496000
  497. STCM R0,3,SAVEWRK2 * SAVE FIRST @V67CAH7 00497000
  498. STCM R1,15,SAVEWRK2+2 * PRINTABLE ADDRESS @V67CAH7 00498000
  499. LA R0,13 * SETUP FOR @V67CAH7 00499000
  500. LA R1,SAVEWRK2 * DMKERMSG @V67CAH7 00500000
  501. B VMD009 * NOW READY TO BRANCH @V67CAH7 00501000
  502. SPACE 2 00502000
  503. * THIS IS DOT TYPE RANGE 00503000
  504. CHKDOT DS 0H @V67CAH7 00504000
  505. A R1,RANGELOW ADD BYTECOUNT TO ADDRESS @V67CAH7 00505000
  506. BCTR R1,0 -1 FOR NON-COUNTED 1ST BYTE @V67CAH7 00506000
  507. C R1,VMSTOR * IS RESULT GT SYSTEMSIZE @V67CAH7 00507000
  508. BL STROUND * LOW...OK, BRANCH @V67CAH7 00508000
  509. BH VMD160 * HIGH...ERROR, BRANCH @V67CAH7 00509000
  510. BCTR R1,0 * EQUAL...SUBTRACT ONE @V67CAH7 00510000
  511. EJECT 00511000
  512. *********************************************************************** 00512000
  513. * * 00513000
  514. * 10.3 STORE AND ROUND OFF RANGES * 00514000
  515. * * 00515000
  516. *********************************************************************** 00516000
  517. SPACE 2 00517000
  518. * AT ENTRY R1 HAS HIGH NUMBER OF RANGE 00518000
  519. STROUND DS 0H @V67CAH7 00519000
  520. N R1,XPAGNUM ROUND TO PAGE BOUNDARY @V67CAH7 00520000
  521. * BY THE WAY XPAGNUM = X00FFF000 00521000
  522. ST R1,RANGEHI STORE HIGH ADDRESS @V67CAH7 00522000
  523. NC RANGELOW,XPAGNUM ROUND LOW TO PAGE BOUND @V67CAH7 00523000
  524. LA R3,RANGENXT UPDATE RANGE POINTER @V67CAH7 00524000
  525. B GETNEXT BRANCH TO GET NEXT PARAMETER @V67CAH7 00525000
  526. SPACE 3 00526000
  527. *********************************************************************** 00527000
  528. * * 00528000
  529. * FIELD CHECK * 00529000
  530. * * 00530000
  531. *********************************************************************** 00531000
  532. SPACE 2 00532000
  533. * FIELDCHK VERIFIES A FIELD OF PRINTABLE HEX CHARACTERS DEFINED BY 00533000
  534. * R0 AS LENGTH AND R1 AS POINTER TO FIELD...EITHER BRANCHES TO 00534000
  535. * ERROR MESSAGES FOR BAD DATA OR RETURNS R1 WITH BINARY OF THE 00535000
  536. * NUMBER FOR GOOD DATA 00536000
  537. FIELDCHK DS 0H @V67CAH7 00537000
  538. C R0,F6 * MORE THAN 6 CHARACTERS @V67CAH7 00538000
  539. BH VMD033 * YES...ERROR, BRANCH @V67CAH7 00539000
  540. CALL DMKCVTHB CONVERT TO BINARY, R1 HAS BINARY 00540000
  541. * ON RETURN 00541000
  542. BNZ VMD033 NUMBER BAD...ERROR BRANCH @V67CAH7 00542000
  543. SPACE 00543000
  544. C R1,VMSTOR * IS NUMBER GT USERS SYSTEM SIZE @V67CAH7 00544000
  545. BLR R7 * LOW...GOOD NUMBER, RETURN @V67CAH7 00545000
  546. BH VMD160 * HIGH...ERROR, BRANCH @V67CAH7 00546000
  547. BCTR R1,0 * EQUAL...SUBTRACT 1 @V67CAH7 00547000
  548. BR R7 * AND RETURN @V67CAH7 00548000
  549. EJECT 00549000
  550. SPACE 2 00550000
  551. *********************************************************************** 00551000
  552. * * 00552000
  553. * 11. CONSOLIDATE RANGES ROUTINE * 00553000
  554. * * 00554000
  555. *********************************************************************** 00555000
  556. SPACE 2 00556000
  557. * ORDER...ORDER RANGE GROUPS TO BE IN ASCENDING ORDER 00557000
  558. SPACE 00558000
  559. ORDERANG DS 0H @V67CAH7 00559000
  560. S R3,F8 POINT TO LAST RANGE BUILT @V67CAH7 00560000
  561. LA R6,SAVEWRK2 POINTER1 TO POINT TO FIRST ENTRY @V67CAH7 00561000
  562. P2SET DS 0H @V67CAH7 00562000
  563. LR R7,R6 POINTER2 EQUALS POINTER1 @V67CAH7 00563000
  564. UPP2 DS 0H @V67CAH7 00564000
  565. LA R7,RANGENXT-RANGES(,R7) POINTER2 TO NEXT RANGE @V67CAH7 00565000
  566. CR R7,R3 * IS POINTER2 PAST LAST RANGE @V67CAH7 00566000
  567. BH UPPOINT1 * YES...BRANCH @V67CAH7 00567000
  568. CLC RANGELOW-RANGES(4,R6),RANGELOW-RANGES(R7) @V67CAH7 00568000
  569. * SHOULD THE RANGES BE REVERSED? 00569000
  570. BNH UPP2 NO...BRANCH @V67CAH7 00570000
  571. * POINTER1'S DATA IS GT POINTER2'S...REVERSE THEM 00571000
  572. XC RANGELOW-RANGES(8,R6),RANGELOW-RANGES(R7) @V67CAH7 00572000
  573. XC RANGELOW-RANGES(8,R7),RANGELOW-RANGES(R6) @V67CAH7 00573000
  574. XC RANGELOW-RANGES(8,R6),RANGELOW-RANGES(R7) @V67CAH7 00574000
  575. B UPP2 @V67CAH7 00575000
  576. UPPOINT1 DS 0H @V67CAH7 00576000
  577. LA R6,RANGENXT-RANGES(,R6) UPDATE P1 TO NEXT RANGE @V67CAH7 00577000
  578. CR R6,R3 * POINTER1 PAST END OF RANGES @V67CAH7 00578000
  579. BL P2SET * NO...BRANCH BACK @V67CAH7 00579000
  580. EJECT 00580000
  581. * MERGE...MERGE THE RANGES TOGETHER IF POSSIBLE 00581000
  582. SPACE 00582000
  583. LA R6,SAVEWRK2-8 ESTABLISH P1 TO BEFORE 1ST RGE @V67CAH7 00583000
  584. LR R8,R3 ESTABLISH MOVABLE END PTR = R8 @V67CAH7 00584000
  585. MUPP1 DS 0H @V67CAH7 00585000
  586. LA R6,RANGENXT-RANGES(,R6) UPDATE PTR1=NEXT RANGE @V67CAH7 00586000
  587. LA R7,RANGENXT-RANGES(,R6) RANGE FOLLOWING PTR1 @V67CAH7 00587000
  588. * IN POINTER2 00588000
  589. ENDCHK DS 0H @V67CAH7 00589000
  590. CR R6,R8 * IS POINTER1 AT LAST RANGE @V67CAH7 00590000
  591. BNL MERGDONE * YES...DONE,BRANCH @V67CAH7 00591000
  592. * REMEMBER THEY ARE ALREADY IN ASCENDING ORDER 00592000
  593. L R14,RANGELOW-RANGES(,R7) *ESTABLISH ABUTTING @V67CAH7 00593000
  594. S R14,F4096 *PAGE ADDRESS IN R14 @V67CAH7 00594000
  595. C R14,RANGEHI-RANGES(,R6) *RANGES ABUT/OVERLAP? @V67CAH7 00595000
  596. BH MUPP1 *NO..BRANCH @V67CAH7 00596000
  597. CLC RANGEHI-RANGES(4,R6),RANGEHI-RANGES(R7) DOES @V67CAH7 00597000
  598. * FIRST RANGE ENCOMPASS RANGE 2 00598000
  599. BNL MERGED * YES...BRANCH @V67CAH7 00599000
  600. MVC RANGEHI-RANGES(4,R6),RANGEHI-RANGES(R7) MERGE @V67CAH7 00600000
  601. SPACE 2 00601000
  602. * NOW MOVE FOLLOWING RANGES UP BEHIND MERGED ONE 00602000
  603. SPACE 00603000
  604. * DETERMINE LENGTH OF DATA TO MOVE 00604000
  605. MERGED DS 0H @V67CAH7 00605000
  606. LA R0,RANGENXT-RANGES(,R7) POINT R0 TO NEXT RANGE @V67CAH7 00606000
  607. LA R14,RANGENXT-RANGES-1(,R8) @V67CAH7 00607000
  608. * POINT TO LAST CHAR OF RANGES 00608000
  609. SR R14,R0 * HOW MANY BYTES TO MOVE? @V67CAH7 00609000
  610. BNP UPMEND * NONE...BRANCH @V67CAH7 00610000
  611. EX R14,EXMOVE3 EXECUTE A MOVE TO BRING @V67CAH7 00611000
  612. * FOLLOWING RANGES UP AGAINST MERGED ONE 00612000
  613. UPMEND DS 0H @V67CAH7 00613000
  614. S R8,F8 MOVE MOVABLE END POINTER TO @V67CAH7 00614000
  615. * POINT TO LAST RANGE 00615000
  616. B ENDCHK CHECK IF AT LAST RANGE @V67CAH7 00616000
  617. SPACE 00617000
  618. * MERGE RANGES 00618000
  619. EXMOVE3 MVC RANGELOW-RANGES(*-*,R7),RANGENXT-RANGES(R7) @V67CAH7 00619000
  620. SPACE 00620000
  621. MERGDONE DS 0H @V67CAH7 00621000
  622. LA R3,SAVEWRK2 REESTABLISH RANGE POINTER @V67CAH7 00622000
  623. DROP R9 DON'T NEED BUFFER ANYMORE...IT WILL BE @V67CAH7 00623000
  624. * RELOADED CORRECTLY FROM SAVEAREA AT EXIT 00624000
  625. SPACE 2 00625000
  626. * R3 IS RANGE POINTER POINTING TO FIRST RANGE 00626000
  627. * R8 IS END POINTER STILL...KEEP IT TILL GET BITMAP STORAGE 00627000
  628. SPACE 00628000
  629. *********************************************************************** 00629000
  630. * * 00630000
  631. * DONE ANALYZING COMMAND * 00631000
  632. * * 00632000
  633. *********************************************************************** 00633000
  634. EJECT 00634000
  635. *********************************************************************** 00635000
  636. * * 00636000
  637. * 12. BUILD SFBLOK AND PUT ON DUMP IN PROGRESS QUEUE (DMKRSPDP). * 00637000
  638. * RESERVE 3 PAGES FOR DMPINREC AND DMPKEYS...THEN BUILD RECORDS OF * 00638000
  639. * DUMP, RETURN AND BUILD DMPINREC AND KEY RECORDS. * 00639000
  640. * BUILD BIT MAP AND KEYMAP IN STORAGE (2 PAGES FOR KEYMAP). * 00640000
  641. * * 00641000
  642. *********************************************************************** 00642000
  643. SPACE 2 00643000
  644. * SET UP SFBLOK 00644000
  645. SPACE 00645000
  646. MVI SFBTYPE,TYP1403 PRINTER FILE TYPE @V67CAH7 00646000
  647. * THIS ROUTINE GETS THE TIME AND DATE 00647000
  648. LA R1,SFBDATE * SETUP DATE @V67CAH7 00648000
  649. LA R2,SFBTIME * AND TIME @V67CAH7 00649000
  650. CALL DMKCVTDT * AND FILL THEM IN 00650000
  651. MVC SFBCOPY,F1+2 SET NUMBER COPIES TO 1 @V67CAH7 00651000
  652. OI SFBFLAG,SFBDUMP SET DUMP INDICATOR ON @V67CAH7 00652000
  653. MVC SFBORIG,VMUSER DEFINE WHOSE DUMP IT IS @V67CAH7 00653000
  654. MVC SFBRECSZ,F4096+2 RECSIZE=X1000 (2 BYTES) @V67CAH7 00654000
  655. MVI SFBCLAS,C'V' SET CLASS TO BE 'V' @V67CAH7 00655000
  656. MVI SFBMISC1+1,C'V' USE THIS TO DISTINGUISH @V67CAH7 00656000
  657. * BETWEEN CP DUMPS AND VM DUMPS 00657000
  658. MVC SFBDIST,VMDIST PICK UP DIST FROM DUMPER @V67CAH7 00658000
  659. SPACE 2 00659000
  660. * THIS ROUTINE IS A COPY OF DMKSPL'S (GETID) 00660000
  661. GETID DS 0H @V67CAH7 00661000
  662. L R14,=A(DMKRSPID) ADDR OF UNIQUE SPOOLID @V67CAH7 00662000
  663. LH R1,0(,R14) NEXT AVAILABLE SPOOLID @V67CAH7 00663000
  664. STH R1,SFBFILID SAVE IN SFBLOK @V67CAH7 00664000
  665. LA R1,1(,R1) UPDATE BY ONE @V67CAH7 00665000
  666. CH R1,MAXFILE ID REACHED MAX NUMBER? @V67CAH7 00666000
  667. BNH STOREID * NO @V67CAH7 00667000
  668. LA R1,1 * YES...START AT ONE @V67CAH7 00668000
  669. STOREID DS 0H STORE NEXT SPOOLID @V67CAH7 00669000
  670. STH R1,0(,R14) BACK IN RSPID @V67CAH7 00670000
  671. SPACE 00671000
  672. * HERE ADD SFBLOK TO DUMP QUEUE 00672000
  673. L R14,=A(DMKRSPDP) * ROUTINE @V67CAH7 00673000
  674. L R1,0(,R14) * TO ADD @V67CAH7 00674000
  675. ST R1,SFBPNT * SFBLOK TO @V67CAH7 00675000
  676. ST R5,0(,R14) * DUMP Q AS FIRST ENTRY @V67CAH7 00676000
  677. EJECT 00677000
  678. *********************************************************************** 00678000
  679. * * 00679000
  680. * 13. GET BITMAP * 00680000
  681. * * 00681000
  682. *********************************************************************** 00682000
  683. SPACE 2 00683000
  684. * GET SPACE FOR BIT MAP 00684000
  685. SPACE 2 00685000
  686. LA R0,BITMAPSZ * GET BIT MAP SIZE @V67CAH7 00686000
  687. CALL DMKFREE * AND RESERVE SPACE 00687000
  688. LR R9,R1 * AND MAKE R9=BASE OF BITMAP @V67CAH7 00688000
  689. USING BITMAP,R9 @V67CAH7 00689000
  690. SPACE 2 00690000
  691. * ZERO OUT BITMAP 00691000
  692. SPACE 00692000
  693. LR R0,R1 'TO' ADDRESS @V67CAH7 00693000
  694. LA R1,BITMAPSZ*8 'TO' LENGTH @V67CAH7 00694000
  695. SLR R7,R7 * ZERO 2ND BYTE COUNT... @V67CAH7 00695000
  696. * SINCE THE COUNT IS ZERO..THE ADDRESS ISN'T 00696000
  697. * CHECKED...SO REG6 NEEDN'T BE SET 00697000
  698. MVCL R0,R6 ZERO BITMAP @V67CAH7 00698000
  699. SPACE 00699000
  700. ST R8,LASTRANG SAVE LAST RANGE POINTER @V67CAH7 00700000
  701. EJECT 00701000
  702. *********************************************************************** 00702000
  703. * * 00703000
  704. * 14. GET MAIN STORAGE SPACE * 00704000
  705. * * 00705000
  706. *********************************************************************** 00706000
  707. SPACE 2 00707000
  708. * GET AND LOCK IN REAL STORAGE A VIRTUAL PAGE 00708000
  709. SPACE 00709000
  710. CALL DMKPGTVG GET VIRTUAL PAGE... X00710000
  711. R1 ON RETURN IS VIRTUAL ADDRESS 00711000
  712. ST R1,SPOLADDR SAVE VIRT ADDR OF INT SPOOLREC @V67CAH7 00712000
  713. TRANS 2,1,OPT=(BRING,LOCK,DEFER,SYSTEM) 00713000
  714. * NOW HAVE 4K SPACE TO BUILD SPOOL BLOCKS IN...REAL ADDR POINTER=R2 00714000
  715. LR R10,R2 USE R10 AS SPLINK BASE @V67CAH7 00715000
  716. USING SPLINK,R10 @V67CAH7 00716000
  717. * ZERO OUT PAGE 00717000
  718. LR R0,R10 POINTER TO 1ST OPERAND @V67CAH7 00718000
  719. L R1,F4096 LENGTH OF 1ST FIELD @V67CAH7 00719000
  720. SLR R7,R7 * ZERO SECOND OPERAND COUNT @V67CAH7 00720000
  721. MVCL R0,R6 ZERO WHOLE PAGE @V67CAH7 00721000
  722. SPACE 00722000
  723. LA R1,1 * SET NUMBER OF RECORDS @V67CAH7 00723000
  724. ST R1,SPRECNUM * TO 1 FOR ALL RECORDS @V67CAH7 00724000
  725. EJECT 00725000
  726. * GET SPACE FOR KEYS...2 PAGES 00726000
  727. CALL DMKPGTVG GET A PAGE OF SYSTEM VIRTUAL 00727000
  728. ST R1,KEYVIRT1 SAVE VIRTUAL ADDR OF KEY PAGE1 @V67CAH7 00728000
  729. TRANS 2,1,OPT=(BRING,LOCK,DEFER,SYSTEM) LOCK IT 00729000
  730. ST R2,BITKEY1 SAVE LOCKED 4K PAGES' REAL ADDR @V67CAH7 00730000
  731. * NOW ZERO THAT PAGE 00731000
  732. LR R0,R2 ADDRESS OF PAGE TO R0 @V67CAH7 00732000
  733. L R1,F4096 LENGTH OF FIRST FIELD @V67CAH7 00733000
  734. SLR R15,R15 * ZERO SECOND OPERAND COUNT @V67CAH7 00734000
  735. MVCL R0,R14 ZERO WHOLE PAGE @V67CAH7 00735000
  736. SPACE 00736000
  737. CALL DMKPGTVG GET A PAGE OF SYSTEM VIRTUAL 00737000
  738. ST R1,KEYVIRT2 SAVE VIRT ADDR OF KEY PAGE 2 @V67CAH7 00738000
  739. TRANS 2,1,OPT=(BRING,LOCK,DEFER,SYSTEM) LOCK IT 00739000
  740. ST R2,BITKEY2 SAVE LOCKED 4K PAGES' REAL ADDR @V67CAH7 00740000
  741. * NOW ZERO THAT PAGE 00741000
  742. LR R0,R2 ADDRESS OF PAGE TO R0 @V67CAH7 00742000
  743. L R1,F4096 LENGTH OF FIRST FIELD @V67CAH7 00743000
  744. SLR R15,R15 * ZERO SECOND OPERAND COUNT @V67CAH7 00744000
  745. MVCL R0,R14 ZERO WHOLE PAGE @V67CAH7 00745000
  746. EJECT 00746000
  747. *********************************************************************** 00747000
  748. * * 00748000
  749. * 15,16 DO ACTUAL DUMPING * 00749000
  750. * * 00750000
  751. *********************************************************************** 00751000
  752. SPACE 2 00752000
  753. * WRITE 3 BLANK SPOOL RECORDS 00753000
  754. * 00754000
  755. BAL R7,GETCCPD GET FIRST CCPD... @V67CAH7 00755000
  756. * ON RETURN R1 CONTAINS IT 00756000
  757. ST R1,SFBSTART SAVE ORIGINAL POINTER @V67CAH7 00757000
  758. * 00758000
  759. ST R1,SPNXTPAG TEMPORARILY PUT CCPD @V67CAH7 00759000
  760. * IN FORWARD SPLINK POINTER 00760000
  761. SLR R6,R6 * ZERO FIRST @V67CAH7 00761000
  762. ST R6,CURRENT * BACKWARD POINTER @V67CAH7 00762000
  763. SPACE 00763000
  764. LA R6,3 COUNTER TO CREATE 3 BLANK BLOCKS @V67CAH7 00764000
  765. BLKSPOOL DS 0H @V67CAH7 00765000
  766. BAL R7,GETCCPD GET NEXT SPOOL RECORD CCPD @V67CAH7 00766000
  767. BAL R7,WRSPOOL GO UPDATE SPLINK/WRITE SPOOL REC @V67CAH7 00767000
  768. BCT R6,BLKSPOOL IF NOT THREE WRITTEN..RETURN @V67CAH7 00768000
  769. SPACE 2 00769000
  770. * GET LOW PAGE RANGE AND PUT ADDRESS IN R4 00770000
  771. SPACE 00771000
  772. L R4,RANGELOW FIRST PAGE ADDRESS TO BRING IN @V67CAH7 00772000
  773. BAL R7,GETPAGE @V67CAH7 00773000
  774. SR R6,R6 VIRTUAL PAGE INDEX = 0 @V67CAH7 00774000
  775. * R2 AND R6 DEFINE VIRTUAL PAGE POSITIONS...R2= BASE, R6=INDEX 00775000
  776. * R10 AND R8 DEFINE SPOOL BLOCK POSITION...R10 = BASE, R8 = INDEX 00776000
  777. LA R8,4*SPSIZE+TAGSIZE @V67CAH7 00777000
  778. * * STARTING DISPLACEMENT INTO RECORD 4 EQUALS 00778000
  779. * * THE FOUR SPLINKS AND TAGSIZE 00779000
  780. SPACE 2 00780000
  781. * BEFORE ENTERING FOLLOWING CODE...REMEMBER THAT R6 IS VIRTUAL PAGE 00781000
  782. * INDEX INDICATING THE NUMBER OF BYTES ALREADY TAKEN FROM THE PAGE. 00782000
  783. * R8, THE SPOOL INDEX, INDICATES THE NUMBER OF BYTES WRITTEN TO THE 00783000
  784. * 4K SPOOL RECORD. 00784000
  785. MOVECHK DS 0H @V67CAH7 00785000
  786. L R1,F4096 SET SUBTRACTION REGISTER UP @V67CAH7 00786000
  787. * * IS VIRTUAL PAGE INDEX GT SPOOL INDEX? 00787000
  788. CR R6,R8 @V67CAH7 00788000
  789. BH FILSPOOL * YES...BRANCH @V67CAH7 00789000
  790. * * NO...SPOOL INDEX IS GREATER OR EQUAL 00790000
  791. * * INDICATING THERE ARE FEWER 00791000
  792. * * OR EQUAL BYTES LEFT IN SPOOL 00792000
  793. * * THAN BYTES AVAILABLE IN 00793000
  794. * * VIRTUAL PAGE. 00794000
  795. SR R1,R8 * SUB SPOOL INDEX FROM 4096 @V67CAH7 00795000
  796. * * THIS WILL BE HOW MUCH TO MOVE. 00796000
  797. B MOVE4 * BRANCH AND DO MOVE @V67CAH7 00797000
  798. EJECT 00798000
  799. FILSPOOL DS 0H * YES... @V67CAH7 00799000
  800. * * PAGE INDEX GREATER INDICATING 00800000
  801. * * LESS BYTES ARE AVAILABLE ON THE 00801000
  802. * * VIRT PAGE THAN SPOOL COULD USE. 00802000
  803. SR R1,R6 * SUBT PAGE INDEX FROM 4096 @V67CAH7 00803000
  804. * * THIS IS MAXIMUM BYTE COUNT THAT 00804000
  805. * * THAT CAN BE MOVED 00805000
  806. MOVE4 DS 0H @V67CAH7 00806000
  807. LA R14,0(R6,R2) THIS IS 'FROM' ADDRESS FOR MOVE @V67CAH7 00807000
  808. LR R15,R1 LENGTH OF MOVE FOR MVCL 2ND PARM @V67CAH7 00808000
  809. LA R0,0(R8,R10) THIS IS 'TO' ADDRESS @V67CAH7 00809000
  810. SPACE 00810000
  811. * R1 ALREADY HAS LENGTH IN IT...FOR MVCL 1ST LENGTH PARAMETER 00811000
  812. SPACE 00812000
  813. AR R6,R1 * ADD MOVED LENGTH @V67CAH7 00813000
  814. AR R8,R1 * TO BOTH INDEXES @V67CAH7 00814000
  815. MVCL R0,R14 THIS IS IT...BUILD SPOOL RECORD @V67CAH7 00815000
  816. C R6,F4096 * IS VIRT PAGE COMPLETELY MOVED? @V67CAH7 00816000
  817. BNE FULLSPOL * NO...BRANCH @V67CAH7 00817000
  818. SPACE 00818000
  819. * AT THIS POINT VIRTUAL PAGE IS EXPENDED...GET A NEW OR END 00819000
  820. SPACE 00820000
  821. CALL DMKPTRUL UNLOCK PAGE R2 POINTS AT...R2=REAL ADDR 00821000
  822. SLR R6,R6 ZERO VIRTUAL PAGE INDEX @V67CAH7 00822000
  823. SPACE 2 00823000
  824. * UPDATE BIT MAP ROUTINE 00824000
  825. SPACE 00825000
  826. LR R15,R4 * GET CURRENT PAGE DUMPED @V67CAH7 00826000
  827. SRL R15,12 PAGE NUMBER @V67CAH7 00827000
  828. LA R14,7 * GET LOW ORDER 3 BITS @V67CAH7 00828000
  829. NR R14,R15 * OF PAGE NUMBER @V67CAH7 00829000
  830. SRL R15,3 GET BYTE DISPLACEMENT IN BITMAP @V67CAH7 00830000
  831. IC R14,BITTRANS(R14) GET CORRECT MASK TO 'OR' @V67CAH7 00831000
  832. LA R15,BITMAP(R15) GET PROPER INDEX INTO BITMAP @V67CAH7 00832000
  833. EX R14,BITSET SET BIT FOR PROPER PAGE @V67CAH7 00833000
  834. SPACE 00834000
  835. * DONE WITH BITMAP UPDATE 00835000
  836. EJECT 00836000
  837. * NOW UPDATE CURRENT PAGE AND RANGE POINTERS 00837000
  838. SPACE 00838000
  839. UPADDR DS 0H @V67CAH7 00839000
  840. A R4,F4096 UPDATE CURRENT POINTER @V67CAH7 00840000
  841. C R4,RANGEHI * IS CURRENT ADDRESS PTR @V67CAH7 00841000
  842. * * GT HIGH RANGE 00842000
  843. BNH PRESPCHK * NO...BRANCH @V67CAH7 00843000
  844. LA R3,RANGENXT * YES...UPDATE RANGE PTR @V67CAH7 00844000
  845. UPRANGE DS 0H @V67CAH7 00845000
  846. L R4,RANGELOW UPDATE CURRENT PAGE DUMP POINTER @V67CAH7 00846000
  847. C R3,LASTRANG * IS RANGE PTR PAST ALL RANGES @V67CAH7 00847000
  848. BH ALLDUMP1 * YES..BRANCH @V67CAH7 00848000
  849. PRESPCHK DS 0H @V67CAH7 00849000
  850. BAL R7,GETPAGE * NO...GET NEXT VIRTUAL PAGE @V67CAH7 00850000
  851. SPACE 00851000
  852. FULLSPOL DS 0H @V67CAH7 00852000
  853. C R8,F4096 * IS SPOOL RECORD FILLED? @V67CAH7 00853000
  854. BL MOVECHK * NO...BRANCH @V67CAH7 00854000
  855. SPACE 00855000
  856. * THE SPOOL BLOCK IS BUILT...UPDATE SPLINK...WRITE OUT 00856000
  857. SPACE 00857000
  858. BAL R7,GETCCPD * YES..GET NEXT CCPD @V67CAH7 00858000
  859. BAL R7,WRSPOOL * ..UPDATE SPLINK,WRITE OUT @V67CAH7 00859000
  860. B MOVECHK * AND GO GET NEXT @V67CAH7 00860000
  861. SPACE 00861000
  862. * BELOW IS A BRANCHED AROUND AREA 00862000
  863. SPACE 00863000
  864. * SET PROPER BIT TO INDICATE PAGE IS DUMP 00864000
  865. * THE IMMEDIATE FIELD IS REPLACED BY 'EX' 00865000
  866. BITSET OI 0(R15),X'00' @V67CAH7 00866000
  867. EJECT 00867000
  868. GETPAGE DS 0H @V67CAH7 00868000
  869. SPACE 00869000
  870. * BRING PAGE POINTED TO BY CURPAGE INTO STORAGE AND LOCK, THEN 00870000
  871. * PUT IT'S REAL ADDRESS INTO R2 00871000
  872. SPACE 00872000
  873. LR R1,R4 LOAD CURRENT PAGE TO DUMP INTO R1 @V67CAH7 00873000
  874. TRANS 2,1,OPT=(BRING,LOCK,DEFER) GET USERS VIRT PAGE 00874000
  875. * AT EXIT OF TRANS...R2 WILL BE REAL STORAGE ADDRESS OF VIRTUAL PAGE 00875000
  876. BZ GETKEY GOT PAGE....BRANCH @V67CAH7 00876000
  877. SPACE 00877000
  878. * THE ONLY INCORRECT CODE THAT CAN HAPPEN IS CC=2 DUE TO DSS PROCESSING 00878000
  879. * AND INDICATES THAT THE SEGMENT IS INVALID BUT STILL WITHIN 'VMSIZE' 00879000
  880. SPACE 00880000
  881. B UPADDR BRANCH TO TRY NEXT PAGE OF RANGE @V67CAH7 00881000
  882. SPACE 00882000
  883. * ROUTINE TO GET KEYS FOR EACH 2K AND PUT THEM INTO KEYMAP 00883000
  884. * FIRST GET SWAPTABLE KEYS 00884000
  885. GETKEY DS 0H @V67CAH7 00885000
  886. L R1,VMSEG OBTAIN SEGMENT TABLE BASE @V67CAH7 00886000
  887. LR R14,R4 VIRTUAL ADDR TO WORK REG @V67CAH7 00887000
  888. SRDL R14,16 GET SEGMENT NUMBER ONLY @V67CAH7 00888000
  889. SLL R14,2 SEGMENT NUMBER * 4 @V67CAH7 00889000
  890. LA R1,0(R14,R1) POINT TO CORRECT SEG ENTRY @V67CAH7 00890000
  891. * SEGMENT IS ALWAYS VALID BECAUSE ITS PAGE IS IN STORAGE 00891000
  892. L R1,0(,R1) PAGE TABLE POINTER @V67CAH7 00892000
  893. LA R1,16*L'PAGCORE+(SWPFLAG-SWPVM)(,R1) @V67CAH7 00893000
  894. * GET SWAPTABLE ORIGIN 00894000
  895. SR R14,R14 ZERO WORK REGISTER @V67CAH7 00895000
  896. SLDL R14,4 MOVE PAGE NUMBER IN @V67CAH7 00896000
  897. SLL R14,3 MULTIPLY BY 8 (SIZE OF EACH @V67CAH7 00897000
  898. * SWAPTABLE ENTRY) 00898000
  899. * R14 NOW HAS CORRECT DISPLACEMENT INTO SWAPTABLE FOR THIS 00899000
  900. * VIRTUAL PAGE... R1 HAS BASE TO SWAPTABLE 00900000
  901. IC R15,SWPKEY1-SWPFLAG(R14,R1) 1ST SWAPTABLE KEY @V67CAH7 00901000
  902. SLL R15,8 MOVE IT TO HIGHER ORDER @V67CAH7 00902000
  903. IC R15,SWPKEY2-SWPFLAG(R14,R1) 2ND SWAPTABLE KEY @V67CAH7 00903000
  904. * R15 NOW HAS BOTH SWAPTABLE KEYS 00904000
  905. EJECT 00905000
  906. * NOW GET REAL STORAGE KEYS 00906000
  907. SPACE 00907000
  908. SLR R1,R1 ZERO WORK REGISTER @V67CAH7 00908000
  909. ISK R1,R2 PUT STORAGE KEY INTO R1 @V67CAH7 00909000
  910. SLL R1,8 SAVE KEY IN HIGHER ORDER @V67CAH7 00910000
  911. LA R14,2048(,R2) GET NEXT 2K ADDRESS AND @V67CAH7 00911000
  912. ISK R1,R14 PUT 2ND 2K'S KEY IN R1 LOW ORDER @V67CAH7 00912000
  913. * NOW R1 HAS KEYS TO REAL STORAGE 00913000
  914. TM VMOSTAT,VMSHR * IS THIS A SHARE SYSTEM? @V67CAH7 00914000
  915. BZ NONSHR * NO...BRANCH @V67CAH7 00915000
  916. N R1,=A(X'0E0E') SHUT OFF PHONY KEY OF SHARED @V67CAH7 00916000
  917. NONSHR DS 0H @V67CAH7 00917000
  918. OR R1,R15 PUT REAL AND VIRT KEY TOGETHER @V67CAH7 00918000
  919. L R14,=A(X'FEFE') SET UP FOR 'ECMODE' @V67CAH7 00919000
  920. TM VMPSTAT,VMV370R * IS THIS MACHINE ECMODE ON? @V67CAH7 00920000
  921. BO MODESET * YES...BRANCH @V67CAH7 00921000
  922. L R14,=A(X'F8F8') SET FOR BCMODE @V67CAH7 00922000
  923. MODESET DS 0H @V67CAH7 00923000
  924. NR R1,R14 SHUTOFF WHATEVER IS NECESSARY @V67CAH7 00924000
  925. * R1 NOW HAS TWO CORRECT KEYS AS HALFWORD 00925000
  926. SPACE 00926000
  927. * NOW GET PLACE IN KEY MAP TO PUT KEYS 00927000
  928. LR R14,R4 * GET PAGE NUMBER @V67CAH7 00928000
  929. SRL R14,11 * TIMES 2 IN WORK REG @V67CAH7 00929000
  930. * * OK SINCE R4 IS ALWAYS 00930000
  931. * * ROUNDED TO PAGE BOUNDARY 00931000
  932. * R14 NOW HAS PROPER INDEX INTO KEYMAP..IF IT WAS CONTIGUOUS FOR 2PAGES 00932000
  933. * ALSO, REMEMBER THAT WE ARE WORKING WITH HALFWORDS 00933000
  934. CH R14,F4096+2 * IS THIS FOR 2ND KEY PAGE? @V67CAH7 00934000
  935. BL FIRSTPG * NO...BRANCH @V67CAH7 00935000
  936. * * YES... 00936000
  937. SECONDPG DS 0H @V67CAH7 00937000
  938. S R14,F4096 FORCE SECOND PAGE TO BEGINNING @V67CAH7 00938000
  939. L R15,BITKEY2 GET KEYMAP2 ADDRESS @V67CAH7 00939000
  940. B UPKEYMAP BRANCH @V67CAH7 00940000
  941. SPACE 00941000
  942. FIRSTPG DS 0H @V67CAH7 00942000
  943. L R15,BITKEY1 GET KEYMAP1 ADDRESS @V67CAH7 00943000
  944. UPKEYMAP DS 0H @V67CAH7 00944000
  945. STH R1,0(R14,R15) STORE KEYS GOTTEN @V67CAH7 00945000
  946. BR R7 RETURN @V67CAH7 00946000
  947. EJECT 00947000
  948. SPACE 2 00948000
  949. WRSPOOL DS 0H @V67CAH7 00949000
  950. SPACE 00950000
  951. * THIS ROUTINE UPDATES SPLINK BY: 00951000
  952. * 1.MOVING CURRENT TO SPLINK BACKWARD POINTER 00952000
  953. * 2.MOVE FORWARD SPLINK POINTER TO CURRENT 00953000
  954. * 3.MOVE NEXTCCPD TO FORWARD SPLINK POINTER 00954000
  955. * THEN WRITE OUT SPOOL RECORD TO CURRENT'S POSITION AND UPDATE SFBLAST, 00955000
  956. * AND RESET SPOOL INDEX TO 16 (RIGHT AFTER SPLINK) 00956000
  957. SPACE 00957000
  958. ST R2,SVREG2 PRESERVE VIRT PAGE PTR @V67CAH7 00958000
  959. MVC SPPREPAG,CURRENT CURRENT TO BACKWARD @V67CAH7 00959000
  960. MVC CURRENT,SPNXTPAG FORWARD TO CURRENT @V67CAH7 00960000
  961. MVC SPNXTPAG,NEXTCCPD NEXT TO FORWARD @V67CAH7 00961000
  962. L R0,CURRENT * SETUP FOR WRITE TO DASD @V67CAH7 00962000
  963. * * PUT CCPD INTO R0 00963000
  964. L R1,SPOLADDR * SYSTEM VIRT ADDRESS, @V67CAH7 00964000
  965. * * THIS GETS RESOLVED TO 00965000
  966. * * THE REAL ADDRESS 00966000
  967. * * (NOW IN R10) BY DMKRPAPT 00967000
  968. CALL DMKRPAPT,PARM=(SYSTEM) WRITE OUT SPOOL RECORD 00968000
  969. MVC SFBLAST,CURRENT UPDATE SFBLOK @V67CAH7 00969000
  970. L R8,SFBRECNO * ROUTINE TO @V67CAH7 00970000
  971. LA R8,1(R8) * ADD ONE TO @V67CAH7 00971000
  972. ST R8,SFBRECNO * RECORD COUNTER @V67CAH7 00972000
  973. LA R8,16 INITIALIZE SPOOL INDEX @V67CAH7 00973000
  974. * AFTER SPLINK 00974000
  975. L R2,SVREG2 RESET POINTER... @V67CAH7 00975000
  976. BR R7 RETURN @V67CAH7 00976000
  977. EJECT 00977000
  978. GETCCPD DS 0H @V67CAH7 00978000
  979. SPACE 00979000
  980. * THIS ROUTINE RESERVES A SPOOL AREA PAGE AND PUTS ITS CCPD IN NEXTCCPD 00980000
  981. * IF NO SPOOL AREA SPACE IS AVAILABLE THE DUMP IS PURGED AND AN ERROR 00981000
  982. * MESSAGE ISSUED. 00982000
  983. SPACE 00983000
  984. CALL DMKPGTSG GET NEW CCPD 00984000
  985. ST R1,NEXTCCPD ON RETURN R1 HAS CCPD, SAVE @V67CAH7 00985000
  986. LTR R1,R1 * IF R1=0, CCPD NOT AVAIL @V67CAH7 00986000
  987. BNZR R7 * OK...RETURN @V67CAH7 00987000
  988. * CAN'T GET SPOOL BLOCK, APPEND DUMP TO DELETE CHAIN 00988000
  989. SPACE 00989000
  990. * MUST MAKE LAST SPLINK FORWARD POINTER (SPNXTPT) POINT TO FIRST 00990000
  991. * SPLINK RECORD SO IT CAN BE PROPERLY DELETED 00991000
  992. ICM R14,15,SFBSTART PICK UP FIRST SPLINK PTR @V67CAH7 00992000
  993. BZ ERROR146 IF THIS IS 1ST TRY TO GET @V67CAH7 00993000
  994. * CCPD...DON'T WRITE ANY SPLINKS 00994000
  995. ST R14,NEXTCCPD NOT FIRST ATTEMPT... @V67CAH7 00995000
  996. * POINT LAST TO FIRST SPLINK REC 00996000
  997. BAL R7,WRSPOOL WRITE LAST RECORD CORRECTLY @V67CAH7 00997000
  998. * SO DMKSPLCR CAN DELETE ALL SPOOLRECS 00998000
  999. SPACE 00999000
  1000. * FIND SFBLOK ON DMKRSPDP 01000000
  1001. ERROR146 DS 0H @V67CAH7 01001000
  1002. L R14,=A(DMKRSPDP) GET PTR TO DUMP ANCHOR @V67CAH7 01002000
  1003. NEXTSF DS 0H @V67CAH7 01003000
  1004. ICM R1,15,SFBPNT-SFBLOK(R14) GET NEXT SFBLOK PTR @V67CAH7 01004000
  1005. BZ BLOWUP1 NONEXISTANT...ERROR, BRANCH @V67CAH7 01005000
  1006. CR R1,R5 * IS THIS DESIRED SFBLOK? @V67CAH7 01006000
  1007. BE UPCHAIN * YES...BRANCH @V67CAH7 01007000
  1008. LR R14,R1 * NO...SAVE OLD POINTER @V67CAH7 01008000
  1009. B NEXTSF GO GET NEXT SFBLOK @V67CAH7 01009000
  1010. * FOUND PROPER SFBLOK... R1 POINTS TO IT, R14 POINTS TO PREVIOUS SFBLOK 01010000
  1011. UPCHAIN DS 0H @V67CAH7 01011000
  1012. L R1,SFBPNT PUT SFBLOKS FORWARD PTR IN R1 @V67CAH7 01012000
  1013. ST R1,SFBPNT-SFBLOK(,R14) GO AROUND DESIRED SFBLOK @V67CAH7 01013000
  1014. * DESIRED SFBLOK NOW REMOVED FROM DUMP IN PROGRESS CHAIN 01014000
  1015. * DELETE IT 01015000
  1016. LR R7,R5 SFBLOK POINTER TO REG 7 @V67CAH7 01016000
  1017. CALL DMKSPLDL CALL FUMIGATOR 01017000
  1018. B VMD146 GET OUT...AND GIVE MESSAGE @V67CAH7 01018000
  1019. EJECT 01019000
  1020. *********************************************************************** 01020000
  1021. * * 01021000
  1022. * 20. PROCESS DISCONTIGIOUS SAVED SEGMENTS * 01022000
  1023. * AND ANY SAVED SYSTEM WHICH EXCEEDS VMSTOR * 01023000
  1024. * * 01024000
  1025. *********************************************************************** 01025000
  1026. SPACE 2 01026000
  1027. * SAFE TO WAIT TILL NOW TO DUMP DSS..IT'S ALWAYS ABOVE DEFINED STORAGE 01027000
  1028. SPACE 01028000
  1029. ALLDUMP1 DS 0H @V67CAH7 01029000
  1030. TM SAVEWRK1,SETDSS * WAS 'DSS' SPECIFIED @V67CAH7 01030000
  1031. BNO ALLDUMP2 * NO...FINISHED, BRANCH @V67CAH7 01031000
  1032. SPACE 2 01032000
  1033. * 'DSS' BEING SPECIFIED MEANS THAT DISCONTIGUOUS SAVED SEGMENTS (DSS), 01033000
  1034. * OR ANY SAVED SYSTEMS MUST BE DUMPED 01034000
  1035. SPACE 01035000
  1036. S R3,F8 BACK UP, OVERLAY LAST RANGE @V67CAH7 01036000
  1037. DSSHUH DS 0H @V67CAH7 01037000
  1038. NI SAVEWRK1,X'FF'-SETDSS TURN OFF DSS INDICATOR @V67CAH7 01038000
  1039. L R1,VMSIZE * IS VMSIZE GT VMSTOR @V67CAH7 01039000
  1040. SPACE 01040000
  1041. * ROUND VMSIZE TO IT'S PAGE BOUNDARY 01041000
  1042. BCTR R1,0 REDUCE VALUE BY 1 @V67CAH7 01042000
  1043. N R1,XPAGNUM AND ROUND TO PAGE BOUNDARY @V67CAH7 01043000
  1044. ST R1,RANGEHI SAVE HIGH VALUE @V67CAH7 01044000
  1045. SPACE 01045000
  1046. * ROUND VMSTOR TO PAGE AFTER 'END' REQUEST 01046000
  1047. L R1,VMSTOR GET VMSTOR IN A REGISTER @V67CAH7 01047000
  1048. BCTR R1,0 AND REDUCE BY 1 @V67CAH7 01048000
  1049. N R1,XPAGNUM AND ROUND DOWN TO PREV PAGE @V67CAH7 01049000
  1050. A R1,F4096 AND ADD ONE PAGE @V67CAH7 01050000
  1051. ST R1,RANGELOW SAVE LOW VALUE @V67CAH7 01051000
  1052. SPACE 01052000
  1053. TM SAVEWRK1+1,DSSONLY * HERE DUE TO DSS ONLY? @V67CAH7 01053000
  1054. BO ORDERANG * YES...BRANCH @V67CAH7 01054000
  1055. B UPRANGE * NO...GO TO DUMP ROUTINE @V67CAH7 01055000
  1056. SPACE 2 01056000
  1057. EJECT 01057000
  1058. ALLDUMP2 DS 0H @V67CAH7 01058000
  1059. MVC NEXTCCPD,SFBSTART CREATE LOOP OF SPOOLRECS @V67CAH7 01059000
  1060. BAL R7,WRSPOOL WRITE OUT LAST RECORD @V67CAH7 01060000
  1061. * ALL DONE DUMPING VIRTUAL PAGES 01061000
  1062. SPACE 01062000
  1063. * FREE UP VIRTUAL PAGE FOR SPOOL BLOCK...R10 POINTS TO REAL ADDRESS 01063000
  1064. LR R2,R10 GET REAL ADDR IN R2 @V67CAH7 01064000
  1065. CALL DMKPTRUL UNLOCK PAGE 01065000
  1066. SPACE 01066000
  1067. DROP R10 NOW UNLOCKED.. @V67CAH7 01067000
  1068. * R2 WILL BE FLOATING BASE 01068000
  1069. USING SPLINK,R2 R2 AS SPOOL BASE @V67CAH7 01069000
  1070. SPACE 3 01070000
  1071. *********************************************************************** 01071000
  1072. * * 01072000
  1073. * 21. BUILD DMPINREC * 01073000
  1074. * * 01074000
  1075. *********************************************************************** 01075000
  1076. SPACE 2 01076000
  1077. MVC NEXTCCPD(4),SFBSTART SET TO GET DMPINREC @V67CAH7 01077000
  1078. BAL R7,GETSPOOL GET DMINREC @V67CAH7 01078000
  1079. * R2 HAS REAL ADDRESS OF PAGE 01079000
  1080. LA R3,SPSIZE+TAGSIZE(R2) ESTABLISH R3 AS BASE @V67CAH7 01080000
  1081. * FOR BUILDING DMPINREC 01081000
  1082. USING DMPINREC,R3 @V67CAH7 01082000
  1083. * ACTUAL BUILDING STARTS HERE 01083000
  1084. MVC DMPGPRS(16*4),VMGPRS MOVE GENERAL REGISTERS @V67CAH7 01084000
  1085. TM VMPSTAT,VMV370R * IS ECMODE 'ON' @V67CAH7 01085000
  1086. BO ECMODEON * YES... BRANCH @V67CAH7 01086000
  1087. MVC DMPCRS(4),VMVCR0 * NO...GET SINGLE REG @V67CAH7 01087000
  1088. B BLDDUMP2 * AND BRANCH @V67CAH7 01088000
  1089. ECMODEON DS 0H @V67CAH7 01089000
  1090. L R1,VMECEXT ECMODE = ON... @V67CAH7 01090000
  1091. * GET ECBLOK POINTER 01091000
  1092. USING ECBLOK,R1 ECBLOK ADDRESSABILITY @V67CAH7 01092000
  1093. MVC DMPCRS(16*4),EXTCR0 GET CONTROL REGISTERS @V67CAH7 01093000
  1094. DROP R1 DONE USING ECBLOK @V67CAH7 01094000
  1095. EJECT 01095000
  1096. BLDDUMP2 DS 0H @V67CAH7 01096000
  1097. CLI SFBFTYPE,C' ' * IS SFBFTYPE UNFILLED? @V67CAH7 01097000
  1098. BNE BLDDUMP3 * NO...IS FILLED..BRANCH @V67CAH7 01098000
  1099. MVC SFBFTYPE(4),=C'FILE' * YES...FILL WITH 'FILE' @V67CAH7 01099000
  1100. B BLDDUMP4 SKIP MOVING TO DMPIN @V67CAH7 01100000
  1101. SPACE 01101000
  1102. BLDDUMP3 DS 0H @V67CAH7 01102000
  1103. MVC DMPVMTYP,SFBFTYPE PUT REQUESTED NAME IN @V67CAH7 01103000
  1104. SPACE 01104000
  1105. BLDDUMP4 DS 0H @V67CAH7 01105000
  1106. MVC DMPFPRS(4*8),VMFPRS FLOATING POINT REGS @V67CAH7 01106000
  1107. MVC DMPCPUID,CPUID HARDWARE CPUID @V67CAH7 01107000
  1108. STCK DMPTODCK TIME FOR DMPINREC @V67CAH7 01108000
  1109. MVC DMPSYSRV,VMSTOR VIRT MACH DEFINED SIZE @V67CAH7 01109000
  1110. MVC DMPSYSRM,VMSIZE VIRT MACHINE REAL SIZE, @V67CAH7 01110000
  1111. * INCLUDES ANY DSS 01111000
  1112. MVC DMPPSW,VMPSW GET VIRTUAL MACHINE PSW @V67CAH7 01112000
  1113. MVC DMPPGMAP(256),BITBYTES * MOVE BITMAP @V67CAH7 01113000
  1114. MVC DMPPGMAP+256(256),BITBYTES+256 * IN TWO PARTS @V67CAH7 01114000
  1115. SPACE 2 01115000
  1116. * MOVE COMMENT TO DMPINREC 01116000
  1117. SPACE 01117000
  1118. ICM R8,15,SAVEWRK8 * IS THERE A COMMENT? @V67CAH7 01118000
  1119. BNH BLDDUMP5 * NO...BRANCH @V67CAH7 01119000
  1120. MVI DMPDMPID,C' ' * YES... BLANK OUT @V67CAH7 01120000
  1121. * * FULL COMMENT AREA 01121000
  1122. MVC DMPDMPID+1(L'DMPDMPID-1),DMPDMPID @V67CAH7 01122000
  1123. BCTR R8,0 * SET LENGTH FOR MVC @V67CAH7 01123000
  1124. L R1,SAVEWRK9 * SET PTR TO COMMENT @V67CAH7 01124000
  1125. EX R8,EXMOVE5 * MOVE TO DMPINREC @V67CAH7 01125000
  1126. SPACE 2 01126000
  1127. * WRITE OUT DMPINREC, SINCE UPPER 256 BYTES AREN'T USED IGNORE THEM 01127000
  1128. SPACE 01128000
  1129. BLDDUMP5 DS 0H @V67CAH7 01129000
  1130. L R0,NEXTCCPD CCPD ADDRESS @V67CAH7 01130000
  1131. MVC NEXTCCPD,SPNXTPAG GET CCPD OF RECORD 2 @V67CAH7 01131000
  1132. L R1,SPOLADDR VIRTUAL ADDRESS @V67CAH7 01132000
  1133. CALL DMKRPAPT,PARM=(SYSTEM) WRITE OUT DMPINREC 01133000
  1134. EJECT 01134000
  1135. *********************************************************************** 01135000
  1136. * * 01136000
  1137. * 22. BUILD KEY PAGES ON SPOOL * 01137000
  1138. * * 01138000
  1139. *********************************************************************** 01139000
  1140. SPACE 2 01140000
  1141. * THIS ROUTINE BUILDS THE DMPKYREC'S FROM THE IN STORAGE KEY DATA 01141000
  1142. * R8 = SPOOL RECORD INDEX...R2 = SPOOL RECORD BASE 01142000
  1143. * R3 = KEY RECORD INDEX 01143000
  1144. * BITKEY1 IS POINTER TO FIRST PAGE OF KEYS 01144000
  1145. * BITKEY2 IS POINTER TO SECOND PAGE OF KEYS 01145000
  1146. BAL R7,GETSPOOL GET REC 2...R2 AS BASE @V67CAH7 01146000
  1147. * IF ANY DMPINREC IS LEFT TO BUILD...HERE IS WHERE TO PUT INTO REC2 01147000
  1148. LA R8,2*SPSIZE+TAGSIZE SPOOL REC INDEX SETTING @V67CAH7 01148000
  1149. SPACE 01149000
  1150. * FILL RECORD 2 WITH KEY DATA 01150000
  1151. SPACE 01151000
  1152. L R15,F4096 * DETERMINE LENGTH @V67CAH7 01152000
  1153. SR R15,R8 * OF MOVE @V67CAH7 01153000
  1154. LR R3,R15 SAVE MOVE LENGTH @V67CAH7 01154000
  1155. LA R14,0(R8,R2) TO ADDRESS FOR MVCL @V67CAH7 01155000
  1156. L R0,BITKEY1 FROM ADDRESS FOR MVCL @V67CAH7 01156000
  1157. LR R1,R15 FROM LENGTH @V67CAH7 01157000
  1158. MVCL R14,R0 MOVE IT... @V67CAH7 01158000
  1159. SPACE 01159000
  1160. * WRITE OUT RECORD 2 01160000
  1161. SPACE 01161000
  1162. L R0,NEXTCCPD RECORD 2'S CCPD @V67CAH7 01162000
  1163. MVC NEXTCCPD,SPNXTPAG GET CCPD OF RECORD 3 @V67CAH7 01163000
  1164. L R1,SPOLADDR VIRT ADDR IN STORAGE @V67CAH7 01164000
  1165. CALL DMKRPAPT,PARM=(SYSTEM) PUT RECORD 2 ON DASD 01165000
  1166. SPACE 01166000
  1167. * RECORD 3 01167000
  1168. BAL R7,GETSPOOL READ IN REC3..R2=BASE @V67CAH7 01168000
  1169. SPACE 01169000
  1170. * THE FIRST INTERNAL PAGE OF KEY DATA ISN'T WRITTEN YET, WRITE REST NOW 01170000
  1171. * R8 HAS NUMBER OF BYTES LEFT TO WRITE. 01171000
  1172. SPACE 01172000
  1173. LA R14,SPSIZE(R2) 'TO' ADDRESS @V67CAH7 01173000
  1174. L R0,BITKEY1 * 'FROM' @V67CAH7 01174000
  1175. AR R0,R3 * ADDRESS @V67CAH7 01175000
  1176. * LENGTH OF MOVE IS EQUAL TO AMOUNT NOT MOVED INTO RECORD 2 01176000
  1177. LR R1,R8 LENGTH OF MOVE @V67CAH7 01177000
  1178. LR R15,R8 TO LENGTH OF MOVE @V67CAH7 01178000
  1179. MVCL R14,R0 MOVE REMAINDER OF @V67CAH7 01179000
  1180. * INTERNAL KEY PAGE 1 01180000
  1181. SPACE 2 01181000
  1182. * KEY 1 PAGE BUILT ON SPOOL RECORDS 01182000
  1183. EJECT 01183000
  1184. * NOW MOVE INTERNAL KEY PAGE 2 01184000
  1185. LA R8,SPSIZE(R8) ESTABLISH SPOOL INDEX @V67CAH7 01185000
  1186. LA R14,0(R8,R2) TO ADDRESS @V67CAH7 01186000
  1187. L R0,BITKEY2 FROM ADDRESS @V67CAH7 01187000
  1188. L R15,F4096 * DETERMINE LENGTH @V67CAH7 01188000
  1189. SR R15,R8 * TO MOVE @V67CAH7 01189000
  1190. LR R1,R15 FROM LENGTH @V67CAH7 01190000
  1191. LR R3,R15 SAVE LENGTH OF BITKEY2 @V67CAH7 01191000
  1192. MVCL R14,R0 FILL REMAINDER OF REC3 @V67CAH7 01192000
  1193. L R0,NEXTCCPD RECORD 3'S CCPD @V67CAH7 01193000
  1194. MVC NEXTCCPD,SPNXTPAG GET CCPD OF RECORD 4 @V67CAH7 01194000
  1195. L R1,SPOLADDR REAL ADDR IN STORAGE @V67CAH7 01195000
  1196. CALL DMKRPAPT,PARM=(SYSTEM) WRITE RECORD 3 TO DASD 01196000
  1197. SPACE 01197000
  1198. * RECORD 4 01198000
  1199. BAL R7,GETSPOOL GET RECORD 4 @V67CAH7 01199000
  1200. L R15,F4096 * LENGTH OF MOVE @V67CAH7 01200000
  1201. SR R15,R3 * TO RECORD 4 @V67CAH7 01201000
  1202. LA R14,SPSIZE(R2) TO ADDRESS @V67CAH7 01202000
  1203. L R0,BITKEY2 * FROM @V67CAH7 01203000
  1204. AR R0,R3 * ADDRESS @V67CAH7 01204000
  1205. LR R1,R15 FROM LENGTH @V67CAH7 01205000
  1206. MVCL R14,R0 MOVE DATA TO RECORD 4 @V67CAH7 01206000
  1207. * ALL KEY DATA MOVED NOW... 01207000
  1208. L R0,NEXTCCPD GET RECORD4'S CCPD @V67CAH7 01208000
  1209. L R1,SPOLADDR VIRT ADDRESS OF REC 4 @V67CAH7 01209000
  1210. CALL DMKRPAPT,PARM=(SYSTEM) WRITE RECORD4 TO DASD 01210000
  1211. EJECT 01211000
  1212. *********************************************************************** 01212000
  1213. * * 01213000
  1214. * 23. MOVE BUILT DUMP TO READER QUEUE * 01214000
  1215. * * 01215000
  1216. *********************************************************************** 01216000
  1217. SPACE 2 01217000
  1218. * SFBLOK NOW EXISTS ON DUMP IN PROGRESS QUEUE (DMKRSPDP). 01218000
  1219. * MOVE IT TO RDR QUEUE ON DMKRSPRD. 01219000
  1220. * R5 POINTS TO SFBLOK ON DMKRSPDP CHAIN...FOLLOW CHAIN UNTIL GET TO 01220000
  1221. * CORRECT SFBLOK (EQUAL ADDRESS TO R5), REMOVE IT FROM CHAIN, 01221000
  1222. * ADD IT TO RDR CHAIN. 01222000
  1223. L R14,=A(DMKRSPDP) POINT TO ANCHOR @V67CAH7 01223000
  1224. GETSF DS 0H @V67CAH7 01224000
  1225. ICM R1,15,SFBPNT-SFBLOK(R14) GET 1ST SFBLOK PTR @V67CAH7 01225000
  1226. BNZ GETSF2 NO PTR PRESENT..BOMB @V67CAH7 01226000
  1227. BLOWUP1 DS 0H @V67CAH7 01227000
  1228. ABEND 1 ...THIS SHOULDN'T HAPPEN 01228000
  1229. GETSF2 DS 0H @V67CAH7 01229000
  1230. CR R1,R5 * IS THIS DESIRED SFBLOK? @V67CAH7 01230000
  1231. BE GOTSF * YES...BRANCH @V67CAH7 01231000
  1232. LR R14,R1 * NO...UPDATE PTR TO PREV SFBLOK @V67CAH7 01232000
  1233. B GETSF BRANCH TO TRY AGAIN @V67CAH7 01233000
  1234. SPACE 01234000
  1235. GOTSF DS 0H @V67CAH7 01235000
  1236. * NOW R14=POINTER TO SFBLOK BEFORE DESIRED ONE, R1=POINTER TO SFBLOK 01236000
  1237. MVC SFBPNT-SFBLOK(L'SFBPNT,R14),SFBPNT-SFBLOK(R1) @V67CAH7 01237000
  1238. * REMOVES SFBLOK FROM QUEUE 01238000
  1239. SPACE 01239000
  1240. * ADD SFBLOK TO BACK OF READER QUEUE...FIND LAST ENTRY 01240000
  1241. L R14,ARSPRD ANCHOR TO READER CHAIN @V67CAH7 01241000
  1242. NEXTRDR DS 0H @V67CAH7 01242000
  1243. LR R2,R14 SAVE LAST ADDRESS @V67CAH7 01243000
  1244. ICM R14,15,SFBPNT-SFBLOK(R2) GET FORWARD POINTER @V67CAH7 01244000
  1245. BNZ NEXTRDR IF NOT PAST END...GET NEXT @V67CAH7 01245000
  1246. * R2 HAS LAST ENTRY ON RDR CHAIN 01246000
  1247. ST R5,SFBPNT-SFBLOK(,R2) ADD SFBLOK TO RDR CHAIN @V67CAH7 01247000
  1248. ST R14,SFBPNT-SFBLOK(,R5) 0 FORWARD PTR... @V67CAH7 01248000
  1249. * MIGHT HAVE PICKED POINTER UP IN DUMP QUEUE 01249000
  1250. SPACE 2 01250000
  1251. * CHECKPOINT DUMP FILE 01251000
  1252. SPACE 01252000
  1253. LR R7,R5 SET SFBLOK PTR AS DMKCKS WANTS @V67CAH7 01253000
  1254. CALL DMKCKSPL,PARM=ADDSFB+RDRCHN 01254000
  1255. EJECT 01255000
  1256. *********************************************************************** 01256000
  1257. * * 01257000
  1258. * 24. FREE WORK AREAS * 01258000
  1259. * * 01259000
  1260. *********************************************************************** 01260000
  1261. SPACE 01261000
  1262. * SPOLADDR POINTS TO SYSTEM VIRTUAL ADDRESS OF SPOOL PAGE 01262000
  1263. FREEALL DS 0H @V67CAH7 01263000
  1264. L R1,SPOLADDR GET VIRTUAL ADDRESS IN R1 @V67CAH7 01264000
  1265. CALL DMKPGTVR RELEASE PAGE (SPOOL BLOCK) 01265000
  1266. SPACE 01266000
  1267. * FREE UP TWO PAGES FOR KEYS 01267000
  1268. L R2,BITKEY1 REAL ADDRESS OF FIRST KEY PAGE @V67CAH7 01268000
  1269. CALL DMKPTRUL UNLOCK IT 01269000
  1270. L R1,KEYVIRT1 GET VIRTUAL ADDRESS TO RELEASE @V67CAH7 01270000
  1271. CALL DMKPGTVR RELEASE FIRST KEY PAGE 01271000
  1272. SPACE 01272000
  1273. L R2,BITKEY2 REAL ADDRESS OF 2ND KEY PAGE @V67CAH7 01273000
  1274. CALL DMKPTRUL UNLOCK IT 01274000
  1275. L R1,KEYVIRT2 VIRTUAL ADDRESS OF 2ND KEY PAGE @V67CAH7 01275000
  1276. CALL DMKPGTVR RELEASE 2ND KEY PAGE 01276000
  1277. SPACE 01277000
  1278. * FREE BITMAP SPACE 01278000
  1279. LA R0,BITMAPSZ GET NUMBER OF DOUBLE WORDS @V67CAH7 01279000
  1280. LR R1,R9 ADDR OF AREA TO BE GIVENUP @V67CAH7 01280000
  1281. CALL DMKFRET RID THY SELF OF EXCESSES 01281000
  1282. TM SAVEWRK1,ER146PRO * THIS FOR ERROR61 PROCESS @V67CAH7 01282000
  1283. BO VMD146B * YES...BR TO ISSUE MESSAGE @V67CAH7 01283000
  1284. SPACE 01284000
  1285. * COMMAND COMPLETE 01285000
  1286. MSG 'COMMAND COMPLETE' * ISSUE MESSAGE THAT 01286000
  1287. CALL DMKQCNWT,PARM=NORET * COMMAND IS COMPLETED 01287000
  1288. * END PROGRAM 01288000
  1289. EXIT 01289000
  1290. EJECT 01290000
  1291. SPACE 2 01291000
  1292. GETSPOOL DS 0H @V67CAH7 01292000
  1293. SPACE 01293000
  1294. * GETS SPOOL BLOCK WHOSE CCPD IS IN NEXTCCPD 01294000
  1295. SPACE 01295000
  1296. L R0,NEXTCCPD * SETUP FOR @V67CAH7 01296000
  1297. L R1,SPOLADDR * DMKRPA @V67CAH7 01297000
  1298. CALL DMKRPAGT,PARM=(SYSTEM+BRING) GET DMPINREC 01298000
  1299. BZR R7 RETURN @V67CAH7 01299000
  1300. OI SAVEWRK1+1,FLOATSP IND SPOOL BLOCK=UNLOCK @V67CAH7 01300000
  1301. B ERROR146 PROB GETIN PAGE...ERROR @V67CAH7 01301000
  1302. SPACE 4 01302000
  1303. EXMOVE5 MVC DMPDMPID(*-*),0(R1) MOVE COMMENT TO DMPINREC @V67CAH7 01303000
  1304. EJECT 01304000
  1305. *********************************************************************** 01305000
  1306. * * 01306000
  1307. * 25. ERROR ROUTINES * 01307000
  1308. * * 01308000
  1309. *********************************************************************** 01309000
  1310. SPACE 2 01310000
  1311. VMD009 DS 0H THIS ERROR IS PREVIOUSLY SETUP WITHIN PROG @V67CAH7 01311000
  1312. LA R2,009 SET ERROR CODE FOR INVALID RANGE @V67CAH7 01312000
  1313. B CALLERM @V67CAH7 01313000
  1314. SPACE 2 01314000
  1315. VMD013 DS 0H @V67CAH7 01315000
  1316. LA R2,13 ERROR CODE, CONFLICTING OPTION @V67CAH7 01316000
  1317. * REGS 0,1 ALREADY SETUP AT ENTRY 01317000
  1318. B CALLERM BRANCH TO ERROR WRITER @V67CAH7 01318000
  1319. SPACE 2 01319000
  1320. VMD020 DS 0H @V67CAH7 01320000
  1321. LA R2,20 ERROR CODE,USERID MISSING/INVALID @V67CAH7 01321000
  1322. B NOVAR BRANCH TO ERROR WRITER @V67CAH7 01322000
  1323. SPACE 2 01323000
  1324. VMD033 DS 0H @V67CAH7 01324000
  1325. LA R2,33 ERROR CODE, HEXLOC MISSING/INVALID @V67CAH7 01325000
  1326. B NOVAR BRANCH @V67CAH7 01326000
  1327. SPACE 2 01327000
  1328. VMD038 DS 0H @V67CAH7 01328000
  1329. LA R2,38 ERROR CODE, PARAMETER MISSING @V67CAH7 01329000
  1330. MVC SAVEWRK2(8),MSG38 BUILD MESSAGE MODIFIER @V67CAH7 01330000
  1331. LA R1,SAVEWRK2 POINT TO DATA @V67CAH7 01331000
  1332. LA R0,8 LENGTH OF DATA @V67CAH7 01332000
  1333. B CALLERM BRANCH @V67CAH7 01333000
  1334. SPACE 2 01334000
  1335. VMD053 DS 0H @V67CAH7 01335000
  1336. LA R2,53 ERROR CODE, USERID NOT IN DIRECT @V67CAH7 01336000
  1337. * REGS 0,1 ALREADY SETUP AT ENTRY 01337000
  1338. B CALLERM BRANCH TO WRITE ERROR MSG @V67CAH7 01338000
  1339. EJECT 01339000
  1340. VMD146 DS 0H @V67CAH7 01340000
  1341. TM SAVEWRK1+1,FLOATSP * SPOOL BLOCK BEEN FREED @V67CAH7 01341000
  1342. BO VMD146A * YES...BRANCH @V67CAH7 01342000
  1343. * FREE UP VIRTUAL PAGE FOR SPOOL BLOCK...R10 POINTS TO REAL ADDRESS 01343000
  1344. LR R2,R10 GET REAL ADDR IN R2 @V67CAH7 01344000
  1345. CALL DMKPTRUL UNLOCK PAGE 01345000
  1346. VMD146A DS 0H @V67CAH7 01346000
  1347. OI SAVEWRK1,ER146PRO SET ER146 PROCESSING IND @V67CAH7 01347000
  1348. B FREEALL GO FREE AREAS @V67CAH7 01348000
  1349. VMD146B DS 0H @V67CAH7 01349000
  1350. LA R2,146 ERROR CODE, SPOOLING ERROR @V67CAH7 01350000
  1351. B NOVAR BRANCH @V67CAH7 01351000
  1352. SPACE 2 01352000
  1353. VMD160 DS 0H @V67CAH7 01353000
  1354. LA R2,160 ERROR CODE, HEXLOC EXCEEDS STORAGE @V67CAH7 01354000
  1355. CALL DMKCVTBH R1 POINTS TO ADDR GT STORAGE SIZE 01355000
  1356. STCM R0,3,SAVEWRK2 * BUILD BUFFER @V67CAH7 01356000
  1357. STCM R1,15,SAVEWRK2+2 * AREA @V67CAH7 01357000
  1358. LA R0,6 * ESTABLISH LENGTH @V67CAH7 01358000
  1359. LA R1,SAVEWRK2 * AND POINTER @V67CAH7 01359000
  1360. B CALLERM BRANCH TO WRITE ERROR MSG @V67CAH7 01360000
  1361. SPACE 4 01361000
  1362. NOVAR DS 0H @V67CAH7 01362000
  1363. SR R1,R1 ZERO PARM REGISTER @V67CAH7 01363000
  1364. SPACE 2 01364000
  1365. * SETUP AND EXECUTE ERROR MESSAGE 01365000
  1366. CALLERM DS 0H @V67CAH7 01366000
  1367. ICM R0,14,MODID+3 INSERT MODULE ID @V67CAH7 01367000
  1368. TM SAVEWRK1,ER146PRO IS THIS DUE TO ERROR61 @V67CAH7 01368000
  1369. BO PUTERMSG YES...SKIP MOST OF SETUP @V67CAH7 01369000
  1370. ICM R2,B'1000',X40FFS FLAG TO FRET BUFFER @V67CAH7 01370000
  1371. LA R3,SFBSIZE LENGTH OF SFBLOK @V67CAH7 01371000
  1372. SLL R3,24 SHIFT NUMB TO HI ORDER BYTE @V67CAH7 01372000
  1373. AR R3,R5 ADD ADDR OF SFBLOK @V67CAH7 01373000
  1374. * TO LOW ORDER 01374000
  1375. PUTERMSG DS 0H @V67CAH7 01375000
  1376. CALL DMKERMSG 01376000
  1377. EJECT 01377000
  1378. SPACE 2 01378000
  1379. * DEFINED STORAGE 01379000
  1380. SPACE 01380000
  1381. BITTRANS DC X'8040201008040201' @V67CAH7 01381000
  1382. MAXFILE DC H'9900' @V67CAH7 01382000
  1383. MSG38 DS 0CL8 @V67CAH7 01383000
  1384. DC C' ' 1ST OPTIONAL FIELD=IGNORE IT @V67CAH7 01384000
  1385. DC X'00' FIELD DELIMITER @V67CAH7 01385000
  1386. DC C'FORMAT' 2ND OPTIONAL FIELD @V67CAH7 01386000
  1387. SPACE 2 01387000
  1388. * MY EQUATES 01388000
  1389. SPACE 01389000
  1390. * SAVEWRK1 SETTINGS 01390000
  1391. * INDICATES: 01391000
  1392. SPACE 01392000
  1393. SETTO EQU X'01' A 'TO' OR 'SYSTEM' ENTRY FOUND @V67CAH7 01393000
  1394. SETFORM EQU X'02' A 'FORMAT' ENTRY FOUND @V67CAH7 01394000
  1395. ER146PRO EQU X'04' ERROR 146 PROCESSING HAPPENING @V67CAH7 01395000
  1396. DASH EQU X'10' A DASH FOUND FOR THIS ENTRY @V67CAH7 01396000
  1397. DOT EQU X'20' A DOT FOUND FOR THIS ENTRY @V67CAH7 01397000
  1398. BLANK EQU X'40' A BLANK FOUND FOR THIS ENTRY @V67CAH7 01398000
  1399. * DASH,DOT,BLANK ARE RESET FOR EACH RANGE ENTRY 01399000
  1400. SETDSS EQU X'80' 'DSS' SPECIFIED ON VMDUMP, @V67CAH7 01400000
  1401. * REQUESTS DUMPING DISCONTIGIOUS SAVED SEGMENTS 01401000
  1402. SPACE 2 01402000
  1403. * SAVEWRK1+1 SETTINGS 01403000
  1404. * INDICATES: 01404000
  1405. SPACE 01405000
  1406. FLOATSP EQU X'01' FLOATING INTERNAL SPOOL BLOCK @V67CAH7 01406000
  1407. DSSONLY EQU X'02' DSS SPECIFIED ALONE...DON'T @V67CAH7 01407000
  1408. * FORCE 0-END DEFAULT 01408000
  1409. SPACE 2 01409000
  1410. TAGSIZE EQU 240 SIZE OF TAG SPACE TO SAVE @V67CAH7 01410000
  1411. COLON EQU X'7A' A 'COLON' @V67CAH7 01411000
  1412. EJECT 01412000
  1413. SPACE 2 01413000
  1414. * MY DSECTS 01414000
  1415. SPACE 01415000
  1416. RANGES DSECT DSECT TO BUILD INSTORAGE RANGES IN SEQUENCE @V67CAH7 01416000
  1417. RANGELOW DS 1F RANGE LOW ADDRESS @V67CAH7 01417000
  1418. RANGEHI DS 1F RANGE HIGH ADDRESS @V67CAH7 01418000
  1419. RANGENXT EQU * UPDATE MECHANISM @V67CAH7 01419000
  1420. SPACE 01420000
  1421. BITMAP DSECT MAP PUT IN DMPINREC TO INDICATE PAGES @V67CAH7 01421000
  1422. BITBYTES DS 512X DUMPED...EACH BIT INDICATES ONE PAGE. @V67CAH7 01422000
  1423. * 0 = NOT DUMPED, 1 = DUMPED 01423000
  1424. * FIRST BIT OF FIRST BYTE IS FOR PAGE 0, 01424000
  1425. * AND THEY GO SEQUENTIALLY FROM THERE. 01425000
  1426. BITKEY1 DS F REAL ADDRESS OF KEY PAGE 1 @V67CAH7 01426000
  1427. BITKEY2 DS F REAL ADDRESS OF KEY PAGE 2 @V67CAH7 01427000
  1428. CURRENT DS F HOLDS THE CURRENT SPOOL RECS CCPD @V67CAH7 01428000
  1429. NEXTCCPD DS F HOLDS THE NEXT SPOOL RECORDS CCPD @V67CAH7 01429000
  1430. SPOLADDR DS F HOLDS THE SPOOL RECS,SYSTEM VIRT. ADDR @V67CAH7 01430000
  1431. KEYVIRT1 DS F SYSTEM VIRTUAL ADDR OF FIRST KEY PAGE @V67CAH7 01431000
  1432. KEYVIRT2 DS F SYSTEM VIRTUAL ADDR OF 2ND KEY PAGE @V67CAH7 01432000
  1433. LASTRANG DS F END OF RANGE POINTER...POINTER TO @V67CAH7 01433000
  1434. * LAST RANGE REALLY 01434000
  1435. SVREG2 DS F STORAGE FOR REG2 WHEN ITS NEEDED @V67CAH7 01435000
  1436. BITMAPSZ EQU ((*-BITMAP)+7)/8 @V67CAH7 01436000
  1437. EJECT 01437000
  1438. SPACE 2 01438000
  1439. COPY EQU @V67CAH7 01439000
  1440. COPY DEVTYPES @V67CAH7 01440000
  1441. PSA 01441000
  1442. COPY VMBLOK @V67CAH7 01442000
  1443. COPY SAVE @V67CAH7 01443000
  1444. COPY SPOOL @V67CAH7 01444000
  1445. COPY CONBUF @V67CAH7 01445000
  1446. COPY DMPBLOKS @V67CAH7 01446000
  1447. COPY CORE @V67CAH7 01447000
  1448. END DMKVMD @V67CAH7 01448000