Table of Contents

DMKCSO Source

References

Source Listing

DMKCSO.ASSEMBLE.txt
  1. CSO TITLE 'DMKCSO (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00002000
  3. *. 00003000
  4. * MODULE NAME - 00004000
  5. * 00005000
  6. * DMKCSO 00006000
  7. * 00007000
  8. * FUNCTION - 00008000
  9. * 00009000
  10. * DMKCSO CONTAINS THE SPOOLING COMMANDS USED TO CONTROL THE REAL 00010000
  11. * SPOOLING UNIT RECORD DEVICES ATTACHED TO THE SYSTEM. THE FUNC- 00011000
  12. * TION OF EACH COMMAND IS DESCRIBED SEPARATELY 00012000
  13. * 00013000
  14. * ATTRIBUTES - 00014000
  15. * 00015000
  16. * REENTRANT, PAGEABLE, CALLED VIA SVC 00016000
  17. * 00017000
  18. * ENTRY POINTS - 00018000
  19. * 00019000
  20. * DMKCSOFL - FLUSH COMMAND 00020000
  21. * DMKCSOSP - SPACE COMMAND 00021000
  22. * DMKCSODR - DRAIN COMMAND 00022000
  23. * DMKCSOST - START COMMAND 00023000
  24. * DMKCSOSD - START DEVICE BY TYPE 00024000
  25. * DMKCSORP - REPEAT COMMAND 00025000
  26. * DMKCSOBS - BACK SPACE COMMAND 00026000
  27. * 00027000
  28. * ENTRY CONDITIONS - 00028000
  29. * 00029000
  30. * GPR9 = ADDRESS OF THE COMMAND LINE BUFFER; MUST BE PRESERVED 00030000
  31. * FOR CALLS TO DMKSCNFD 00031000
  32. * GPR12 = ADDRESS OF ENTRY POINT 00032000
  33. * GPR13 = ADDRESS OF SAVEAREA 00033000
  34. * 00034000
  35. * EXIT CONDITIONS - 00035000
  36. * 00036000
  37. * NORMAL - 00037000
  38. * GPR2 = 0 00038000
  39. * SOME COMMANDS WRITE A VERIFYING MESSAGE TO THE OPERA- 00039000
  40. * TOR; THESE MESSAGES ARE DESCRIBED WITH THE COMMANDS 00040000
  41. * THAT ISSUE THEM 00041000
  42. * 00042000
  43. * ERROR - 00043000
  44. * GPR2 = CONTAINS THE BINARY ERROR MESSAGE NUMBER 00044000
  45. * - EITHER AN OPTION IS ILLEGAL, OR SOME CONDITION 00045000
  46. * EXISTS THAT MAKES IT IMPOSSIBLE TO EXECUTE THE COMMAND 00046000
  47. * A MESSAGE IS PRINTED TO DESCRIBE THE ERROR; THE ERROR 00047000
  48. * MESSAGES THAT MAY OCCUR ARE LISTED WITH EACH COMMAND 00048000
  49. * 00049000
  50. * CALLS TO OTHER ROUTINES - 00050000
  51. * 00051000
  52. * DMKSCNRU - TO LOCATE THE RDEVBLOK FOR A SPOOLING DEVICE 00052000
  53. * DMKSTKIO - TO STACK IOBLOKS USED TO START OUTPUT DEVICES 00053000
  54. * DMKSCNFD - TO SCAN THE COMMAND LINE BUFFER FOR OPTIONS 00054000
  55. * DMKSPLDL - TO DELETE FILES ON DELETE CHAIN (DMKRSPDL) 00055000
  56. * DMKDSPCH - EXIT VIA GOTO TO WAIT FOR INTERRUPT FROM I/O 00056000
  57. * DMKFREE - TO OBTAIN FREE STORAGE FOR MESSAGE BUFFERS AND 00057000
  58. * IOBLOKS 00058000
  59. * DMKFRET - TO RETURN USED BLOKS TO FREE STORAGE 00059000
  60. * DMKQCNWT - TO WRITE ERROR AND VERIFICATION MESSAGES 00060000
  61. * DMKCVTBH - TO CONVERT BINARY UNIT ADDRESSES INTO PRINTABLE HEX 00061000
  62. * CHARACTERS FOR ERROR MESSAGES 00062000
  63. * DMKCVTHB - TO CONVERT HEX OPTIONS TO BINARY ADDRESSES 00063000
  64. * DMKCVTDB - TO CONVERT DECIMAL TO BINARY 00064000
  65. * DMKERMSG - TO WRITE ERROR MESSAGES 00065000
  66. * DMKCKSPL - CHECKPOINT THE REAL DEVICE STATUS 00066000
  67. * DMKPTRAN - BRING IN THE 3800 IMAGELIB TABLE 00067000
  68. * 00068000
  69. * EXTERNAL REFERENCES - 00069000
  70. * 00070000
  71. * DMKRSPEX - USED AS IOBIRA FOR IOBLOKS USED TO START UNIT 00071000
  72. * RECORD OUTPUT UNITS 00072000
  73. * DMKQNTBL - ANCHOR FOR 3800 NAMED SYSTEMS USED AS 00073000
  74. * IMAGE LIBRARIES 00074000
  75. * 00075000
  76. * TABLES / WORKAREAS - 00076000
  77. * 00077000
  78. * 00078000
  79. * REGISTER USAGE - 00079000
  80. * 00080000
  81. * ALL SUBROUTINES IN THE MODULE CONFORM GENERALLY TO THIS USAGE; 00081000
  82. * ANY INDIVIDUAL DIFFERENCES OR EXTENSIONS ARE LISTED WITH THE 00082000
  83. * COMMAND DESCRIPTION 00083000
  84. * 00084000
  85. * GPR0 = OPTION LENGTH - RETURNED FROM DMKSCNFD 00085000
  86. * GPR1 = OPTION ADDRESS - RETURNED FROM DMKSCNFD 00086000
  87. * GPR2 = SCRATCH 00087000
  88. * GPR3 = LENGTH FIELD FOR EXECUTED MVC'S AND TRT'S 00088000
  89. * GPR4 = INTERNAL SUBROUTINE LINKAGE 00089000
  90. * GPR5 = INDICATOR FOR MULTIPURPOSE ROUTINES (START/DRAIN) 00090000
  91. * GPR6 = SCRATCH 00091000
  92. * GPR7 = SCRATCH 00092000
  93. * GPR8 = RDEVBLOK BASE 00093000
  94. * GPR9 = RSPLCTL BASE 00094000
  95. * GPR10 = IOBLOK BASE 00095000
  96. * GPR11 = VMBLOK BASE FOR SYSVMBK 00096000
  97. * GPR12 = DMKCSO BASE 00097000
  98. * GPR13 = SAVEAREA BASE 00098000
  99. * GPR14 = EXTERNAL LINKAGE 00099000
  100. * GPR15 = EXTERNAL LINKAGE 00100000
  101. * 00101000
  102. * NOTES - NONE 00102000
  103. * 00103000
  104. * OPERATION - 00104000
  105. * 00105000
  106. * ALL COMMAND PROCESSORS ARE ENTERED VIA A CALL FROM DMKCFM; THE 00106000
  107. * THE FUNCTION, FORMAT AND OPERATION OF EACH COMMAND ARE DESCRI- 00107000
  108. * BED IN THE FOLLOWING SECTIONS 00108000
  109. *. 00109000
  110. EJECT 00110000
  111. COPY OPTIONS 00111000
  112. COPY LOCAL OPTIONS 00112000
  113. SPACE 3 00113000
  114. DMKCSO CSECT 00114000
  115. SPACE 3 00115000
  116. EXTRN DMKCVTBH,DMKCVTHB,DMKRSPEX 00116000
  117. EXTRN DMKSCNFD,DMKCVTDB,DMKERMSG,DMKSTKIO,DMKSCNRU @V396298 00117000
  118. EXTRN DMKSPLDL 00118000
  119. EXTRN DMKCKSPL @V304298 00119000
  120. EXTRN DMKQCNWT @V4075A0 00120000
  121. EXTRN DMKQNTBL @V60B9BA 00121000
  122. SPACE 3 00122000
  123. USING PSA,R0 00123000
  124. USING VMBLOK,R11 00124000
  125. USING SAVEAREA,R13 00125000
  126. EJECT 00126000
  127. *. 00127000
  128. * SUBROUTINE NAME - 00128000
  129. * 00129000
  130. * DMKCSOFL 00130000
  131. * 00131000
  132. * FUNCTION - 00132000
  133. * 00133000
  134. * TO IMMEDIATELY TERMINATE THE OUTPUT ON THE SPECIFIED REAL 00134000
  135. * SPOOL PRINTER OR PUNCH. IF THE DEVICE HAS BEEN DRAINED, OUTPUT 00135000
  136. * OUTPUT WILL STOP; OTHERWISE, THE NEXT FILE OR THE NEXT COPY OF 00136000
  137. * THE CURRENT FILE WILL BE STARTED. IF HOLD IS SPECIFIED 00137000
  138. * THE FILE WILL BE HELD: OTHERWISE DELETE THE FILE. 00138000
  139. * 00139000
  140. * COMMAND LINE FORMAT - 00140000
  141. * 00141000
  142. * +-------+------------------------+ 00142000
  143. * | FLUSH | RADDR <ALL> <HOLD> | 00143000
  144. * | F | ALL HO | 00144000
  145. * +-------+------------------------+ 00145000
  146. * 00146000
  147. * OPERATION - 00147000
  148. * 00148000
  149. * 1. BAL TO GETDEVIC TO LOCATE THE RDEVBLOK FOR THE OUTPUT DEV 00149000
  150. * 2. IF DEVICE NOT PRT OR PCH: EXIT GIVING MSG021E. 00150000
  151. * IF DEVICE DEDICATED: EXIT GIVING MSG140E. 00151000
  152. * IF DEVICE IF OFFLINE: EXIT GIVING MSG046E. 00152000
  153. * IF DEVICE NO ACTIVE: EXIT GIVING MSG141E. 00153000
  154. * 3. SET THE RDEVTERM BIT IN RDEVFLAG 00154000
  155. * 4. CALL DMKSCNFD TO LOCATE NEXT OPTION: 00155000
  156. * IF 'ALL', LOCATE SFBLOK AND SET SFBCOPY TO 1 00156000
  157. * AND GO TO STEP4. 00157000
  158. * IF 'HOLD': SET SFBSHOLD FLAG AND GO TO STEP4. 00158000
  159. * IF NONE: EXIT. 00159000
  160. * 00160000
  161. * RESPONSE - 00161000
  162. * 00162000
  163. * PRT RAD FLUSHED USERID FILE RECDS COPY STAT 00163000
  164. * PUN 00164000
  165. * 00165000
  166. * PRT RAD FILE HELD USERID FILE RECDS COPY STAT 00166000
  167. * PUN 00167000
  168. * 00168000
  169. * ERROR MESSAGES - 00169000
  170. * 00170000
  171. * DMKCSO003E INVALID OPTION - (OPTION) 00171000
  172. * DMKCSO006E INVALID DEVICE TYPE - (ADDR) 00172000
  173. * DMKCSO013E CONFLICTING OPTION - (OPTION) 00173000
  174. * DMKCSO021E RADDR MISSING OR INVALID 00174000
  175. * DMKCSO040E DEV (ADDR) DOES NOT EXIST 00175000
  176. * DMKCSO046E (TYPE) (RADDR) OFFLINE 00176000
  177. * DMKCSO140E (TYPE) (RADDR) ATTACHED TO (USERID) 00177000
  178. * DMKCSO141E (TYPE) (RADDR) NOT ACTIVE 00178000
  179. *. 00179000
  180. EJECT 00180000
  181. ID DC CL8'DMKCSO' MODULE NAME 00181000
  182. SPACE 2 00182000
  183. DMKCSOFL RELOC 00183000
  184. BAL R4,CLEAR CLEAR SAVEWRK1,2-9 00184000
  185. BAL R4,GETDEVIC GO LOCATE DEVICE BLOK 00185000
  186. USING RDEVBLOK,R8 R8 POINTS TO RDEVBLOK 00186000
  187. SPACE 2 00187000
  188. FLSCAN EQU * 00188000
  189. CALL DMKSCNFD IS NEXT OPTION ALL ?? 00189000
  190. BNZ FLCONT NO - NONE PRESENT 00190000
  191. LR R14,R0 COUNT 00191000
  192. BCTR R14,0 -1 00192000
  193. C R0,F2 COUNT OF 2 00193000
  194. BL MSG003E INVALID OPTION 00194000
  195. BE TESTHLD MIN FOR HOLD 00195000
  196. EX R14,CLCALL ALL ?? 00196000
  197. BNE TESTREQ NO - 00197000
  198. TM SAVEWRK1,X'40' COPY OPTION PRESENT ?? 00198000
  199. BO MSG013E CONFLICTING OPTION 00199000
  200. OI SAVEWRK1,X'40' SET COPIES TO ONE 00200000
  201. B FLSCAN CHECK FOR MORE OPTIONS 00201000
  202. SPACE 00202000
  203. TESTREQ DS 0H @V200930 00203000
  204. SPACE 00204000
  205. TESTHLD EX R14,CLCHOLD HOLD ?? 00205000
  206. BNE MSG003E INVALID OPTION 00206000
  207. TM SAVEWRK1,X'80' HOLD FLAG SET ?? 00207000
  208. BO MSG013E YES -- CONFLICTING OPTION 00208000
  209. OI SAVEWRK1,X'80' YES - FILE TO BE HELD 00209000
  210. B FLSCAN 00210000
  211. SPACE 00211000
  212. USING SFBLOK,R7 00212000
  213. USING RSPLCTL,R9 00213000
  214. FLCONT ICM R9,B'1111',RDEVSPL IS THERE A ACTIVE FILE ?? @VA00716 00214000
  215. BZ MSG141E NO ACTIVE FILE 00215000
  216. SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00216000
  217. TM RDEVFLAG,RDEVACNT PUNCHING ACCOUNTING CARDS ?? 00217000
  218. BO MSG141E YES -- GIVE INACTIVE MSG 00218000
  219. OI RDEVFLAG,RDEVTERM SET TERMINATE FLAG 00219000
  220. SPACE 00220000
  221. LR R7,R9 SET SFBLOK ADDRESS IF 00221000
  222. CLI 0(R9),X'FF' THIS IS THE SFBLOK ADDRESS 00222000
  223. BE *+8 YES -- PLACE HERE BY WARM START 00223000
  224. L R7,RSPSFBLK SPOOL FILE BLOCK PRESENT ?? 00224000
  225. LTR R7,R7 ?? 00225000
  226. BZ CSOEXIT NO - LEAVE 00226000
  227. FLHOLD TM SAVEWRK1,X'80' HOLD OPTION SET ?? 00227000
  228. BZ *+8 NO - 00228000
  229. OI SFBFLAG,SFBSHOLD SET SFBLOK SYSTEM HOLD 00229000
  230. FLCOPY TM SAVEWRK1,X'40' SET COPIES TO ONE ?? 00230000
  231. BZ *+10 NO - LEAVE COPIES AS IS @VA00716 00231000
  232. MVC SFBCOPY(2),F1+2 SET COPY TO ONE @VA00716 00232000
  233. OI SFBFLAG,SFBRECER INDICATE RECORD ALLOCATION IN ERROR 00233000
  234. B CSOEXIT AND EXIT 00234000
  235. SPACE 00235000
  236. EJECT 00236000
  237. *. 00237000
  238. * SUBROUTINE NAME - 00238000
  239. * 00239000
  240. * DMKCSOSP 00240000
  241. * 00241000
  242. * FUNCTION - 00242000
  243. * 00243000
  244. * TO FORCE THE SPECIFIED REAL SPOOL PRINTER TO SINGLE-SPACED 00244000
  245. * OUTPUT FOR THE REMAINDER OF THE CURRENT SPOOL FILE. A START 00245000
  246. * COMMAND TO RADDR WILL RESET THE SPACE FLAG. 00246000
  247. * 00247000
  248. * COMMAND LINE FORMAT - 00248000
  249. * 00249000
  250. * +-------+-------+ 00250000
  251. * | SPACE | RADDR | 00251000
  252. * | SPA | | 00252000
  253. * +-------+-------+ 00253000
  254. * 00254000
  255. * OPERATION - 00255000
  256. * 00256000
  257. * 1. BAL TO GETDEVIC TO LOCATE RDEVBLOK FOR PRINTER 00257000
  258. * 2. IF DEVICE NOT PRINTER, EXIT GIVING MSG021E. 00258000
  259. * IF DEVICE DEDICATED: EXIT GIVING MSG140E. 00259000
  260. * IF DEVICE OFFLINE: EXIT GIVING MSG046E. 00260000
  261. * IF DEVICE NOT ACTIVE: EXIT GIVING MSG141E. 00261000
  262. * 3. SET THE RDEVSPAC BIT IN RDEVFLAG 00262000
  263. * 4. EXIT 00263000
  264. * 00264000
  265. * RESPONSE - 00265000
  266. * 00266000
  267. * NONE 00267000
  268. * 00268000
  269. * 00269000
  270. * ERROR MESSAGES - 00270000
  271. * 00271000
  272. * DMKCSO006E INVALID DEVICE TYPE - (ADDR) 00272000
  273. * DMKCSO021E RADDR MISSING OR INVALID 00273000
  274. * DMKCSO040E DEV (ADDR) DOES NOT EXIST 00274000
  275. * DMKCSO046E (TYPE) (RADDR) OFFLINE 00275000
  276. * DMKCSO140E (TYPE) (RADDR) ATTACHED TO (USERID) 00276000
  277. * DMKCSO141E (TYPE) (RADDR) NOT ACTIVE 00277000
  278. *. 00278000
  279. EJECT 00279000
  280. DMKCSOSP RELOC 00280000
  281. BAL R4,CLEAR CLEAR SAVEWRK1,2-9 00281000
  282. BAL R4,GETDEVIC GO LOCATE RDEVBLOK 00282000
  283. USING RDEVBLOK,R8 R8 POINTS TO RDEVBLOK 00283000
  284. TM RDEVTYPE,TYPPRT IS IT A PRINTER ?? 00284000
  285. BZ MSG006E NO -- INVALID ADDRESS 00285000
  286. SPACE 00286000
  287. ICM R2,B'1111',RDEVSPL GET ACTIVE FILE POINTER @VA00716 00287000
  288. BZ MSG141E NO ACTIVE FILE - BRANCH @VA00716 00288000
  289. SPACE 00289000
  290. SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00290000
  291. OI RDEVFLAG,RDEVSPAC SET SPACE REQUEST 00291000
  292. B CSOEXIT AND LEAVE 00292000
  293. EJECT 00293000
  294. *. 00294000
  295. * SUBROUTINE NAME - 00295000
  296. * 00296000
  297. * DMKCSODR 00297000
  298. * 00298000
  299. * FUNCTION - 00299000
  300. * 00300000
  301. * TO HALT THE OPERATION OF THE SPECIFIED DEVICE(S) AFTER THEY 00301000
  302. * HAVE COMPLETED PROCESSING THE CURRENTLY ACTIVE FILE 00302000
  303. * 00303000
  304. * COMMAND LINE FORMAT - 00304000
  305. * 00305000
  306. * +-------+----------+ 00306000
  307. * | DRAIN | READER | 00307000
  308. * | DR | PRINTER | 00308000
  309. * | | PUNCH | 00309000
  310. * | | ALL | 00310000
  311. * | | --- | 00311000
  312. * | | RADDR ...| 00312000
  313. * +-------+----------+ 00313000
  314. * 00314000
  315. * READER PRINTER PUNCH ALL 00315000
  316. * R RDR P PRT PU PCH ALL 00316000
  317. * 00317000
  318. * 00318000
  319. * OPERATION - 00319000
  320. * 00320000
  321. * 1. SET RDEVDRAN FLAG IN GPR5 00321000
  322. * 2. SET 'DRAINED' IN MESSAGE AREA OF SAVEAREA 00322000
  323. * 3. JOIN COMMON START/DRAIN CODE AT STEP 3 FOR DMKCSOST 00323000
  324. * 00324000
  325. * RESPONSE - 00325000
  326. * 00326000
  327. * PRT XXX DRAINED SYSTEM CLASS = ABCD NOSEP 00327000
  328. * PUN SEP 00328000
  329. * RDR XXX DRAINED SYSTEM 00329000
  330. * 00330000
  331. * MESSAGE ISSUED BY THIS MODULE IF DEVICE IS 00331000
  332. * NOT ACTIVE. IF DEVICE IS ACTIVE, MODULE 00332000
  333. * DMKRSP WILL ISSUE THE MESSAGE WHEN CURRENT 00333000
  334. * FILE IS FINISHED. 00334000
  335. * 00335000
  336. * ERROR MESSAGES - 00336000
  337. * 00337000
  338. * DMKCSO003E INVALID OPTION _ (OPTION) 00338000
  339. * DMKCSO006E INVALID DEVICE TYPE - (ADDR) 00339000
  340. * DMKCSO021E RADDR MISSING OR INVALID 00340000
  341. * DMKCSO040E DEV (ADDR) DOES NOT EXIST 00341000
  342. * DMKCSO046E (TYPE) (RADDR) OFFLINE 00342000
  343. * DMKCSO140E (TYPE) (RADDR) ATTACHED TO (USERID) 00343000
  344. *. 00344000
  345. EJECT 00345000
  346. DMKCSODR RELOC 00346000
  347. BAL R4,CLEAR CLEAR SAVEWRK1,2-9 00347000
  348. LA R5,RDEVDRAN SET DRAIN OPTION 00348000
  349. LA R0,HLDSIZE GET STORAGE FOR THE WRKAREA @V60B9BA 00349000
  350. CALL DMKFREE GO GET IT @V60B9BA 00350000
  351. ST R1,SAVEWRK3 SAVE THE POINTER TO IT @V60B9BA 00351000
  352. XC 0(HLDSIZE*8,R1),0(R1) CLEAR THE AREA @V60B9BA 00352000
  353. B STARTX AND JOIN COMMON DRAIN/START CODE 00353000
  354. EJECT 00354000
  355. *. 00355000
  356. * SUBROUTINE NAME - 00356000
  357. * 00357000
  358. * DMKCSOST 00358000
  359. * 00359000
  360. * FUNCTION - 00360000
  361. * 00361000
  362. * TO RESTART A SPOOLING DEVICE AFTER IT HAS BEEN DRAINED, 00362000
  363. * AND/OR TO CHANGE THE OUTPUT CLASSES THAT IT MAY SERVICE. IF 00363000
  364. * THE NOSEP OPTION IS SPECIFIED, NO OUTPUT SEPARATOR WILL BE 00364000
  365. * PRINTED OR PUNCHED BETWEEN JOBS. 00365000
  366. * 00366000
  367. * COMMAND LINE FORMAT - 00367000
  368. * 00368000
  369. * +-------+-------------------------------+ 00369000
  370. * | START | READER | 00370000
  371. * | STA | PRINTER | 00371000
  372. * | | PUNCH | 00372000
  373. * | | ALL | 00373000
  374. * | | --- | 00374000
  375. * | | RADDR <CLASS ABCD> <NOSEP>... | 00375000
  376. * | | ... <FLASH FFFF> ... | 00376000
  377. * | | ... <CHARS CCCC> <PURGE>... | 00377000
  378. * | | ...<FCB 6|8|12> ... | 00378000
  379. * | | ...<IMAGE IIIIIIII> | 00379000
  380. * +-------+-------------------------------+ 00380000
  381. * 00381000
  382. * READER PRINTER PUNCH ALL CLASS NOSEP 00382000
  383. * R RDR P PRT PU PCH ALL CL NOS 00383000
  384. * 00384000
  385. * FLASH CHARS PURGE FCB IMAGE 00385000
  386. * FL CH PU FCB IM 00386000
  387. * 00387000
  388. * CLASS (ABCD) ABCD 1 TO 4 CLASSES (A-Z OR 0-9) 00388000
  389. * 00389000
  390. * FLASH (FFFF) 1 TO 4 CHARACTERS (FLASH OVERLAY NAME) 00390000
  391. * 00391000
  392. * CHARS (CCCC) 1 TO 4 CHARACTERS (CHAR ARR TBL FOR SEP) 00392000
  393. * 00393000
  394. * FCB 6, 8, OR 12 LINES/INCH (SEP PAGE) 00394000
  395. * 00395000
  396. * IMAGE 1 TO 8 CHARACTERS (IMAGE LIBRARY NAME) 00396000
  397. * 00397000
  398. * PURGE PURGE FILES HAVING INVALID MODULE NAMES 00398000
  399. * FOR A 3800 00399000
  400. * 00400000
  401. * 00401000
  402. * OPERATION - 00402000
  403. * 00403000
  404. * 1. ENTRY DMKCSOSD- SAVE DEVICE TYPE IN SAVEWRK1+1 AND 00404000
  405. * INDICATE THAT ERROR, DRAIN OR START MESSAGES ARE NOT 00405000
  406. * TO BE PRINTED. CLEAR DRAIN FLAG FROM GPR5. 00406000
  407. * 2. IF TYPE = X'FF' OR X'FE', GO TO STEP 11A. 00407000
  408. * IF TYPE = PUNCH AND PRINTER: GO TO STEP 13. 00408000
  409. * IF TYPE = PUNCH: GO TO STEP 15. 00409000
  410. * OTHERWISE GO TO STEP 14. 00410000
  411. * 3. ENTRY DMKCSOST- CLEAR DRAIN FLAG FROM GPR5. 00411000
  412. * 4. STARTX- CALL DMKFREE TO OBTAIN WORK AREA. 00412000
  413. * CALL DMKSCNFD TO LOCATE DEVICE OPTION 00413000
  414. * IF 'ALL' OR NONE: GO TO STEP 12. 00414000
  415. * IF 'RDR': GO TO STEP 16. 00415000
  416. * IF 'PCH': GO TO STEP 15. 00416000
  417. * IF 'PRT': GO TO STEP 14. 00417000
  418. * 5. BAL TO GETDVIC2 TO LOCATE RDEVBLOK. SAVE THE REAL 00418000
  419. * DEVICE ADDRESS IN SAVEWRK4. 00419000
  420. * IF NONE: EXIT. 00420000
  421. * 6. CALL DMKSCNFD TO LOCATE NEXT OPTION - 00421000
  422. * IF 'CLASS' CALL DMKSCNFD TO LOCATE CLASS, 00422000
  423. * IF NONE OR CLASS INVALID: EXIT 00423000
  424. * GIVING MSG028E. OTHERWISE SAVE CLASS 00424000
  425. * IN SAVEWRK2 AND GO TO STEP 6. 00425000
  426. * IF 'NOSEP': INDICATE BY FLAG IN SAVEWRK1 AND GO TO STEP 6. 00426000
  427. * IF 'FLASH': FIND FLASH NAME AND IF INVALID EXIT W/ERROR. 00427000
  428. * ELSE SAVE NAME IN HLDFLASH AND GO TO STEP 6. 00428000
  429. * IF 'CHARS': FIND CHARS NAME AND IF INVALID EXIT W/ERROR. 00429000
  430. * ELSE SAVE NAME IN HLDCHARS AND GO TO STEP 6. 00430000
  431. * IF 'FCB': FIND IF 6, 8, OR 12. IF NOT EXIT W/ERROR. 00431000
  432. * ELSE SAVE VALUE IN HLDFCB AND GO TO STEP 6. 00432000
  433. * IF 'IMAGE': FIND IMAGE NAME AND IF INVALID EXIT W/ERROR. 00433000
  434. * ELSE SAVE VALUE IN HLDIMAGE AND GOTO STEP 6. 00434000
  435. * IF 'PURGE': SET THE HLDPURGE FLAG AND GOTO STEP 5. 00435000
  436. * OTHERWISE RESET SCAN POINTERS TO PREVIOUS OPTION. 00436000
  437. * 7. IF DEVICE IS INVALID TYPE: EXIT GIVING MSG021E. 00437000
  438. * IF DEVICE IS DEDICATED: EXIT GIVING MSG140E. 00438000
  439. * IF DEVICE IS OFFLINE: EXIT GIVING MSG046E. 00439000
  440. * 8. IF NEW CLASS IS PRESENT: MOVE CLASSES TO RDEVCLAS. 00440000
  441. * SET RDEVSEP - TURN ON SEPARATOR FLAG. 00441000
  442. * IF NOSEP: RESET RDEVSEP- TURN OFF SEPARATOR FLAG. 00442000
  443. * IF FLASH, CHARS, FCB, IMAGE, OR PURGE ARE PRESENT, 00443000
  444. * STORE THEIR VALUES IN THE IN THE PROPER LOCATIONS 00444000
  445. * IN THE RDEVBLOK. 00445000
  446. * 9. IF START COMMAND GIVE STARTED MESSAGES FOR ALL DEVICES. 00446000
  447. * IF DRAIN COMMAND AND DEVICE NOT BUSY GIVE DRAINED MSG. 00447000
  448. * 10. IF DEVICE IS NOT BUSY: BUILD IOBLOK WITH A 00448000
  449. * DUMMY DEVICE END INTERRUPT AND STACK IT VIA A CALL 00449000
  450. * TO DMKSTKIO. 00450000
  451. * 11. IF TYPE = RADDR: GO TO STEP 5. OTHERWISE GO TO STEP4. 00451000
  452. * 11A. DODEL - CALL DMKSPLDL TO DELETE FILES ON DELETE CHAIN 00452000
  453. * 12. DOALL- SET GPR6 TO READER DEVICE CHAIN. 00453000
  454. * BAL TO SCANDEV. 00454000
  455. * 13. STPUPR- SET GPR6 TO PUNCH DEVICE CHAIN. 00455000
  456. * BAL TO SCANDEV. 00456000
  457. * 14. STPRT- SET GPR6 TO PRINTER DEVICE CHAIN. 00457000
  458. * BAL TO SCANDEV AND ON RETURN EXIT. 00458000
  459. * 15. STPCH- SET GPR6 TO PUNCH DEVICE CHAIN. 00459000
  460. * BAL TO SCANDEV AND ON RETURN EXIT. 00460000
  461. * 16. STRDR- SET GPR6 TO READER DEVICE CHAIN 00461000
  462. * BAL TO SCANDEV AND ON RETURN EXIT. 00462000
  463. * 17. SCANDEV- LOCATE EACH RDEVBLOK ON THE 00463000
  464. * DEVICE CHAIN GIVEN IN GPR6 AND 00464000
  465. * GO TO STEP 10. 00465000
  466. * 18. DONEXT- IF TYPE IS REAL ADDRESS: GO TO STEP 4. 00466000
  467. * IF NOT LAST DEVICE ON DEVICE CHAIN: GO TO 00467000
  468. * STEP 17. OTHERWISE RETURN TO CALLER. 00468000
  469. * 00469000
  470. * RESPONSE - 00470000
  471. * 00471000
  472. * PRT XXX STARTED SYSTEM CLASS = ABCD NOSEP 00472000
  473. * PUN SEP 00473000
  474. * RDR XXX STARTED SYSTEM 00474000
  475. * 00475000
  476. * ERROR MESSAGES - 00476000
  477. * 00477000
  478. * DMKCSO003E INVALID OPTION - (OPTION) 00478000
  479. * DMKCSO006E INVALID DEVICE TYPE - (ADDR) 00479000
  480. * DMKCSO013E CONFLICTING OPTION - (OPTION) 00480000
  481. * DMKCSO021E RADDR MISSING OR INVALID 00481000
  482. * DMKCSO028E CLASS MISSING OR INVALID 00482000
  483. * DMKCSO040E DEV (ADDR) DOES NOT EXIST 00483000
  484. * DMKCSO046E (TYPE) (RADDR) OFFLINE 00484000
  485. * DMKCSO140E (TYPE) (RADDR) ATTACHED TO (USERID) 00485000
  486. *. 00486000
  487. EJECT 00487000
  488. DMKCSOSD RELOC 00488000
  489. USING BUFFER,R9 00489000
  490. USING RDEVBLOK,R8 00490000
  491. BAL R4,CLEAR CLEAR SAVE WORK AREA 00491000
  492. STC R5,SAVEWRK1+1 SAVE DEVICE TYPE 00492000
  493. SR R5,R5 INDICATE START 00493000
  494. OI SAVEWRK1,X'01' INDICATE NO MESSAGES TO BE PRINTED 00494000
  495. LA R0,HLDSIZE GET STORAGE FOR THE WRKAREA @V60B9BA 00495000
  496. CALL DMKFREE GO GET IT @V60B9BA 00496000
  497. ST R1,SAVEWRK3 SAVE THE POINTER TO IT @V60B9BA 00497000
  498. XC 0(HLDSIZE*8,R1),0(R1) CLEAR THE AREA @V60B9BA 00498000
  499. SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00499000
  500. CLI SAVEWRK1+1,X'FE' SET BY DMKCPI TO START ALL 00500000
  501. * X'FF' START ALL DEVICES 00501000
  502. * X'FE' START ALL DEVICES EXCEPT DRAINED DEVICES 00502000
  503. BNL DODEL YES -- 00503000
  504. TM SAVEWRK1+1,TYPPUN+TYPPRT PUNCH AND PRINTER 00504000
  505. BO STPUPR YES - START BOTH 00505000
  506. TM SAVEWRK1+1,TYPPUN PUNCH ?? 00506000
  507. BO STPCH 00507000
  508. B STPRT 00508000
  509. SPACE 00509000
  510. SPACE 00510000
  511. DMKCSOST RELOC 00511000
  512. BAL R4,CLEAR CLEAR SAVEWRK1,2-9 00512000
  513. SR R5,R5 CLEAR DRAIN CODE REGISTER 00513000
  514. LA R0,HLDSIZE GET STORAGE FOR THE WRKAREA @V60B9BA 00514000
  515. CALL DMKFREE GO GET IT @V60B9BA 00515000
  516. ST R1,SAVEWRK3 SAVE THE POINTER TO IT @V60B9BA 00516000
  517. STARTX EQU * DRAIN JOINS HERE -- 00517000
  518. L R1,SAVEWRK3 RESTORE WORKAREA POINTER @V60B9BA 00518000
  519. XC 0(HLDSIZE*8,R1),0(R1) CLEAR THE AREA @V60B9BA 00519000
  520. SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00520000
  521. CALL DMKSCNFD PICK UP FIRST OPTION 00521000
  522. BNZ DOALL DEFAULT ALL 00522000
  523. LR R14,R0 COUNT 00523000
  524. BCTR R14,0 -1 00524000
  525. C R0,F3 LENGTH OF 3 ?? 00525000
  526. BNE CNT1 NO - 00526000
  527. SPACE 00527000
  528. CLC =C'RDR',0(R1) RDR ?? 00528000
  529. BE STRDR YES - 00529000
  530. CLC =C'PRT',0(R1) PRT ?? 00530000
  531. BE STPRT YES - 00531000
  532. CLC =C'PCH',0(R1) PCH ?? 00532000
  533. BE STPCH YES - 00533000
  534. CLC =C'ALL',0(R1) ALL ?? 00534000
  535. BE DOALL YES - 00535000
  536. SPACE 00536000
  537. CNT1 EX R14,CLCREAD READER ?? 00537000
  538. BE STRDR YES - 00538000
  539. EX R14,CLCPRINT PRINTER ?? 00539000
  540. BE STPRT YES - 00540000
  541. C R0,F2 COUNT OF 2 00541000
  542. BL RADDR NO - COULD BE RADDR 00542000
  543. EX R14,CLCPUN PUNCH ?? 00543000
  544. BE STPCH YES - 00544000
  545. SPACE 00545000
  546. RADDR MVI SAVEWRK1+2,X'02' CLEAR WORK BYTE 00546000
  547. SPACE 00547000
  548. BAL R4,GETDVIC2 LOCATE RDEVBLOK 00548000
  549. ST R1,SAVEWRK4 SAVE REAL DEVICE ADDRESS 00549000
  550. STSCAN MVC SAVEWRK8(8),BUFNXT SAVE COMMAND LINE INFO 00550000
  551. SPACE 00551000
  552. CALL DMKSCNFD LOCATE NEXT OPTION 00552000
  553. BNZ PROCESS NONE PROCESS 00553000
  554. LR R14,R0 COUNT 00554000
  555. BCTR R14,0 -1 00555000
  556. TM RDEVTYPC,CLASURI READER TYPE DEVICE ?? 00556000
  557. BO CKRADD YES - FURTHER OPTS INVALID @V60B9BA 00557000
  558. L R3,SAVEWRK3 WE NEED THE WORK AREA @V60B9BA 00558000
  559. USING HLDAREA,R3 ADDRESSIBILITY @V60B9BA 00559000
  560. C R0,F2 MIN COUNT FOR CLASS 00560000
  561. BL CKRADD NO -- CHECK FOR VALID RADDR 00561000
  562. BE TSTFLASH YES - TEST FLASH @V60B9BA 00562000
  563. SPACE 00563000
  564. TSTFCB CLI RDEVTYPE,TYP3800 IS THIS A 3800 ? @V60B9BA 00564000
  565. BNE TSTNOSEP FCB ONLY VALID FOR 3800 @V60B9BA 00565000
  566. EX R14,CLCFCB FCB OPTION ? @V60B9BA 00566000
  567. BNE TSTNOSEP XFER IF NOT @V60B9BA 00567000
  568. CLI HLDFCB,X'00' FCB ALREADY SET ? @V60B9BA 00568000
  569. BNE MSG013E YES - CONFLICTING OPTIONS @V60B9BA 00569000
  570. CALL DMKSCNFD GET THE FCB VALUE @V60B9BA 00570000
  571. BNZ MSG246E ERROR - MISSING @V60B9BA 00571000
  572. CALL DMKCVTDB DECIMAL TO BINARY @V60B9BA 00572000
  573. BNZ MSG246E XFER IF INVALID @V60B9BA 00573000
  574. STC R1,HLDFCB SAVE IT FOR NOW @V60B9BA 00574000
  575. C R1,F6 IS IT A 6 ? @V60B9BA 00575000
  576. BE STSCAN YES - GET NEXT OPTION @V60B9BA 00576000
  577. C R1,F8 IS IT AN 8 ? @V60B9BA 00577000
  578. BE STSCAN YES - GET NEXT OPTION @V60B9BA 00578000
  579. C R1,=F'12' IS IT A 12 ? @V60B9BA 00579000
  580. BE STSCAN YES - GET NEXT OPTION @V60B9BA 00580000
  581. B MSG246E INVALID FCB VALUE @V60B9BA 00581000
  582. SPACE 00582000
  583. TSTNOSEP EX R14,CLCNOS NOSEP ?? @V60B9BA 00583000
  584. BNE TSTFLASH NO - @V60B9BA 00584000
  585. TM SAVEWRK1+2,X'80' NOSEP FLAG SET ?? 00585000
  586. BO MSG013E YES - CONFLICTING OPTION 00586000
  587. OI SAVEWRK1+2,X'80' INDICATE NOSEP 00587000
  588. B STSCAN GET NEXT OPTION 00588000
  589. SPACE 00589000
  590. TSTFLASH CLI RDEVTYPE,TYP3800 IS THIS A 3800 ? @V60B9BA 00590000
  591. BNE TSTCLASS SKIP ESOTERIC STUFF IF NOT @V60B9BA 00591000
  592. EX R14,CLCFLASH TEST FOR FLASH @V60B9BA 00592000
  593. BNE TSTCHARS XFER IF NOT FLASH @V60B9BA 00593000
  594. CLI HLDFLASH,X'00' FLASH SET ? @V60B9BA 00594000
  595. BNE MSG013E YES - CONFLICTING OPTION @V60B9BA 00595000
  596. MVC HLDFLASH,BLANKS INITIALIZE @V60B9BA 00596000
  597. CALL DMKSCNFD GET THE FLASH NAME @V60B9BA 00597000
  598. BNZ MSG243E MISSING FLASH NAME @V60B9BA 00598000
  599. C R0,F4 MOVE THAN 4 CHARS ? @V60B9BA 00599000
  600. BH MSG243E ERROR IF SO @V60B9BA 00600000
  601. LR R2,R0 THE EXECUTE TARGET @V60B9BA 00601000
  602. BCTR R2,0 DECREMENT FOR MVC @V60B9BA 00602000
  603. EX R2,MVCFLASH MOVE IT INTO WORK AREA @V60B9BA 00603000
  604. B STSCAN GET NEXT OPTION @V60B9BA 00604000
  605. SPACE 00605000
  606. TSTCHARS EX R14,CLCCHARS TEST FOR CHARS @V60B9BA 00606000
  607. BNE TSTIMAGE XFER IF NOT CHARS @V60B9BA 00607000
  608. CLI HLDCHARS,X'00' CHARS SET ? @V60B9BA 00608000
  609. BNE MSG013E YES - CONFLICTING OPTION @V60B9BA 00609000
  610. MVC HLDCHARS,BLANKS INITIALIZE @V60B9BA 00610000
  611. CALL DMKSCNFD GET THE CHARS NAME @V60B9BA 00611000
  612. BNZ MSG245E MISSING CHARS NAME @V60B9BA 00612000
  613. C R0,F4 MOVE THAN 4 CHARS ? @V60B9BA 00613000
  614. BH MSG245E ERROR IF SO @V60B9BA 00614000
  615. LR R2,R0 THE EXECUTE TARGET @V60B9BA 00615000
  616. BCTR R2,0 DECREMENT FOR MVC @V60B9BA 00616000
  617. EX R2,MVCCHARS MOVE IT INTO WORK AREA @V60B9BA 00617000
  618. B STSCAN GET NEXT OPTION @V60B9BA 00618000
  619. SPACE 00619000
  620. TSTIMAGE EX R14,CLCIMAGE TEST FOR IMAGE @V60B9BA 00620000
  621. BNE TSTPURGE XFER IF NOT IMAGE @V60B9BA 00621000
  622. CLI HLDIMAGE,X'00' IMAGE SET ? @V60B9BA 00622000
  623. BNE MSG013E YES - CONFLICTING OPTION @V60B9BA 00623000
  624. MVC HLDIMAGE,BLANKS INITIALIZE @V60B9BA 00624000
  625. CALL DMKSCNFD GET THE IMAGE NAME @V60B9BA 00625000
  626. BNZ MSG244E MISSING IMAGE NAME @V60B9BA 00626000
  627. C R0,F8 MOVE THAN 8 CHARS ? @V60B9BA 00627000
  628. BH MSG244E ERROR IF SO @V60B9BA 00628000
  629. LR R2,R0 THE EXECUTE TARGET @V60B9BA 00629000
  630. BCTR R2,0 DECREMENT FOR MVC @V60B9BA 00630000
  631. EX R2,MVCIMAGE MOVE IT INTO WORK AREA @V60B9BA 00631000
  632. B STSCAN GET NEXT OPTION @V60B9BA 00632000
  633. SPACE 00633000
  634. TSTPURGE EX R14,CLCPURGE PURGE OPTION ? @V60B9BA 00634000
  635. BNE TSTCLASS XFER IF NOT @V60B9BA 00635000
  636. TM HLDFLAG1,HLDPURGE SET ALREADY ? @V60B9BA 00636000
  637. BO MSG013E YES - CONFLICTING OPTION @V60B9BA 00637000
  638. OI HLDFLAG1,HLDPURGE SET THE FLAG @V60B9BA 00638000
  639. B STSCAN GET NEXT OPTION @V60B9BA 00639000
  640. DROP R3 NO LONGER NEEDED @V60B9BA 00640000
  641. SPACE 00641000
  642. TSTCLASS EQU * 00642000
  643. EX R14,CLCCLASS CLASS ?? 00643000
  644. BE CLASSOK YES -- 00644000
  645. CKRADD CALL DMKCVTHB IS IT A VALID REAL ADDRESS 00645000
  646. LM R0,R1,BALRSAVE RESTORE LENGTH AND ADDRESS 00646000
  647. BNZ MSG003E NO -- INVALID OPTION 00647000
  648. B RSTSCAN YES -- 00648000
  649. CLASSOK TM SAVEWRK1+2,X'40' CLASS PRESENT ?? 00649000
  650. BO MSG013E YES -- CONFLICTING OPTION 00650000
  651. OI SAVEWRK1+2,X'40' INDICATE CLASSES 00651000
  652. SPACE 00652000
  653. CALL DMKSCNFD GET CLASSES 00653000
  654. BNZ MSG028E CLASSES MISSING 00654000
  655. C R0,F4 MAX OF 4 CLASSES 00655000
  656. BH MSG028E TO MANY CLASSES 00656000
  657. LR R3,R0 COUNT 00657000
  658. MVC SAVEWRK2(4),BLANKS BLANK AREA TO SAVE CLASSES 00658000
  659. LA R4,SAVEWRK2 ADDRESS OF AREA 00659000
  660. SPACE 00660000
  661. CLASSTRT IC R2,0(R1) GET CLASS IN R2 @V200930 00661000
  662. CLI 0(R1),C'*' IS IT CLASS ALL ?? @V200930 00662000
  663. BE SETCLAS YES, SET IT @V200930 00663000
  664. CLI 0(R1),C'A' VALIDATE CLASS @V200930 00664000
  665. BL MSG028E INVALID CLASS 00665000
  666. TRT 0(1,R1),ALPHANUM TEST CLASS 00666000
  667. BH *+8 VALID - 00667000
  668. B MSG028E ALL OTHERS INVALID 00668000
  669. SETCLAS DS 0H @V200930 00669000
  670. STC R2,0(R4) STORE CLASS IN SAVEWRK2 AREA 00670000
  671. LA R1,1(R1) UPDATE 00671000
  672. LA R4,1(R4) ADDRESS 00672000
  673. BCT R3,CLASSTRT AND COUNT DOWN 00673000
  674. B STSCAN GET NEXT OPTION 00674000
  675. SPACE 00675000
  676. RSTSCAN MVC BUFNXT(8),SAVEWRK8 RESTORE BUFFER POINTERS 00676000
  677. PROCESS EQU * HERE TO PROCESS THE CURRENT DEVICE 00677000
  678. SPACE 00678000
  679. BAL R4,TSTSTAT CHECK FOR DEDICATED OR OFFLINE @VA00716 00679000
  680. * CASE OF MORE RADDRESSES 00680000
  681. MVC SAVEWRK1+3(1),RDEVFLAG SAVE ITS ORIG VALUE @V60B9BA 00681000
  682. LTR R5,R5 START COMMAND ? 00682000
  683. BNZ TESTSTAT NO -- DRAIN COMMAND 00683000
  684. CLI SAVEWRK2,C' ' NEW CLASS PRESENT ?? 00684000
  685. BNH *+10 NO -- LEAVE ALONE 00685000
  686. MVC RDEVCLAS(4),SAVEWRK2 MOVE IN NEW CLASSES 00686000
  687. OI RDEVFLAG,RDEVSEP TURN ON SEPERATOR FLAG 00687000
  688. TM SAVEWRK1+2,X'80' NOSEP INDICATOR ON ?? 00688000
  689. BZ *+8 NO -- LEAVE SEP FLAG ON - 00689000
  690. NI RDEVFLAG,X'FF'-RDEVSEP TURN OFF SEP FLAG 00690000
  691. XC SAVEWRK2(4),SAVEWRK2 CLEAR CLASS SAVE AREA 00691000
  692. NI SAVEWRK1+2,X'7F' CLEAR SEP FLAG 00692000
  693. CLI RDEVTYPE,TYP3800 IS IT A 3800 PRINTER ? @V60B9BA 00693000
  694. BNE TESTSTAT XFER IF NOT @V60B9BA 00694000
  695. L R3,SAVEWRK3 POINT TO WORK AREA @V60B9BA 00695000
  696. USING HLDAREA,R3 ADDRESSIBILITY @V60B9BA 00696000
  697. CLI HLDFCB,X'00' FCB RESET ? @V60B9BA 00697000
  698. BE *+10 XFER IF NOT @V60B9BA 00698000
  699. MVC RDEVFSEP,HLDFCB MOVE IN NEW VALUE @V60B9BA 00699000
  700. CLI HLDFLASH,X'00' FLASH NAME RESET ? @V60B9BA 00700000
  701. BE *+10 XFER IF NOT @V60B9BA 00701000
  702. MVC RDEVOVLY,HLDFLASH NEW FLASH NAME @V60B9BA 00702000
  703. CLI HLDCHARS,X'00' CHARS RESET ? @V60B9BA 00703000
  704. BE *+10 XFER IF NOT @V60B9BA 00704000
  705. MVC RDEVXSEP,HLDCHARS NEW CHAR ARR TBL FOR SEP @V60B9BA 00705000
  706. NI RDEVSTA2,X'FF'-RDEVPURG RESET IT FIRST @V60B9BA 00706000
  707. TM HLDFLAG1,HLDPURGE PURGE SET ? @V60B9BA 00707000
  708. BZ TESTSTAT XFER IF NOT @V60B9BA 00708000
  709. OI RDEVSTA2,RDEVPURG SET THE PURGE OPTION @V60B9BA 00709000
  710. B TESTSTAT .. 00710000
  711. SPACE 00711000
  712. TESTDEV EQU * HERE TO TEST DEVICE FOR DEVICE INTERRUPT 00712000
  713. TM SAVEWRK1,X'03' FROM DMKCSU OR DMKCPI AND/OR 00713000
  714. * NO INVALID OPTION ??? 00714000
  715. BNZ TESTSTAT YES -- 00715000
  716. CALL DMKSCNFD ANY MORE OPTIONS ?? 00716000
  717. BZ MSG003E YES -- INVALID OPTION 00717000
  718. OI SAVEWRK1,X'02' SET NO INVALID OPTIONS 00718000
  719. TESTSTAT TM RDEVSTAT,RDEVDED+RDEVDISA DEDICATED OR OFFLINE ?? 00719000
  720. BNZ DONEXT1 YES, DON'T TOUCH OR CHECKPOINT @VA09477 00720000
  721. CLI SAVEWRK1+1,X'FF' START ALL - FROM DMKCPI 00721000
  722. BE STARTALL YES - START ALL DEVICES 00722000
  723. TM SAVEWRK1,X'01' CALLED FROM DMKCSU OR DMKCPI 00723000
  724. BZ STARTALL NO - 00724000
  725. TM RDEVFLAG,RDEVDRAN DEVICE DRAINED ?? 00725000
  726. BO DONEXT1 YES, DON'T TOUCH OR CHECKPOINT @VA09477 00726000
  727. STARTALL DS 0H @VA11294 00727100
  728. NI RDEVFLAG,X'FF'-RDEVLOAD RESET LOAD FLAG @VA11294 00727200
  729. LTR R5,R5 DRAIN COMMAND ? @VA11294 00727300
  730. BZ NOTDRAIN NO - NORMAL PATH @VA11294 00727400
  731. TM RDEVFLAG,RDEVDRAN ALREADY DRAINED ? @VA11294 00727500
  732. BO TESTDEV1 YES - 3800 ACT COUNT CORRECT @VA11294 00727600
  733. NOTDRAIN DS 0H @VA11294 00727700
  734. NI RDEVFLAG,X'FF'-RDEVDRAN RESET DRAIN FLAG @VA11294 00727800
  735. EX R5,SETDRAIN SET START / DRAIN OPTIONS @VA11294 00727900
  736. CLI RDEVTYPE,TYP3800 3800 ? @V60B9BA 00729000
  737. BNE TESTDEV1 XFER IF NOT @V60B9BA 00730000
  738. LTR R5,R5 DRAIN COMMAND? @VA09264 00730100
  739. BZ START2 XFER IF NOT @VA09264 00730200
  740. L R3,RDEVEXTN POINT TO RDEVBLOK EXTENSION @VA09264 00730300
  741. USING RSPXBLOK,R3 ADDRESSIBILITY @VA09264 00730400
  742. XC RSPXBLOK(RSPXSIZE*8),RSPXBLOK CLEAR IT @VA09264 00730500
  743. DROP R3 NO LONGER NEEDED @VA09264 00730600
  744. START2 DS 0H @VA09264 00730700
  745. SPACE 00731000
  746. *. 00732000
  747. * AT THIS POINT, THE IMAGE LIBRARY ACTIVITY COUNTS MUST BE 00733000
  748. * UPDATED FOR BOTH THE DRAIN AND START COMMANDS. 00734000
  749. * 1. FOR THE DRAIN COMMAND, DECREMENT THE ACTIVITY COUNT 00735000
  750. * OF THE SYSTEM NAMED IN RDEVIMAG IF THE 3800 IS NOT 00736000
  751. * ALREADY DRAINED. 00737000
  752. * 2. FOR THE START COMMAND WHEN A NEW IMAGE LIBRARY IS NOT 00738000
  753. * SPECIFIED, INCREMENT THE ACTIVITY COUNT OF THE SYSTEM 00739000
  754. * IN RDEVIMAG ONLY IF THE DEVICE IS CURRENTLY DRAINED. 00740000
  755. * 3. FOR THE START COMMAND WHEN A NEW IMAGE LIBRARY NAME 00741000
  756. * IS SPECIFIED: 00742000
  757. * A. IF THE DEVICE IS ALREADY STARTED,DECREMENT THE 00743000
  758. * COUNT FOR THE SYSTEM SSPECIFIED IN RDEVIMAG AND 00744000
  759. * INCREMENT THE COUNT FOR THE SYSTEM IN HLDIMAGE, 00745000
  760. * UNLESS THEY ARE THE SAME SYSTEM, IN WHICH CASE 00746000
  761. * DO NOTHING. 00747000
  762. * B. IF THE DEVICE IS CURRENTLY DRAINED, JUST INCREMENT 00748000
  763. * THE ACTIVITY COUNT OF THE SYSTEM STORED IN HLDIMAGE. 00749000
  764. * 4. IN ANY CASE WHERE THE NEW IMAGE LIBRARY IS NOT FOUND, 00750000
  765. * EXIT WITH ERROR MESSAGE DMKCSO244E. 00751000
  766. *. 00752000
  767. SPACE 00753000
  768. L R3,SAVEWRK3 POINT TO WORK AREA @V60B9BA 00754000
  769. USING HLDAREA,R3 ADDRESSIBILITY @V60B9BA 00755000
  770. L R1,=A(DMKQNTBL) START OF 3800 IMAGE LIBS @V60B9BA 00756000
  771. LTR R1,R1 ARE THERE ANY ? @V60B9BA 00757000
  772. BZ MSG244E THERE SHOULD BE ONE @V60B9BA 00758000
  773. TRANS 2,1,OPT=(BRING,DEFER,SYSTEM) GET IT IN @V60B9BA 00759000
  774. LR R14,R2 POINT TO EACH SYSTEM ENTRY @V60B9BA 00760000
  775. USING NPRTBL,R14 ADDRESSIBILITY @V60B9BA 00761000
  776. LTR R14,R14 ANY IMAGE LIBS EXIST? @V60B9BA 00762000
  777. BZ CKIMAGE2 XFER IF NOT @V60B9BA 00763000
  778. CKIMAGE0 CLC HLDIMAGE,NPRNAME IS IT THE NEW ONE ? @V60B9BA 00764000
  779. BNE CKIMAG0A XFER IF NOT @V60B9BA 00765000
  780. ST R14,HLDPTRN SAVE THE POINTER @V60B9BA 00766000
  781. CKIMAG0A CLC RDEVIMAG,NPRNAME IS THIS THE OLD ONE ? @V60B9BA 00767000
  782. BNE CKIMAGE1 XFER IF NOT @V60B9BA 00768000
  783. ST R14,HLDPTRO SAVE THE POINTER @V60B9BA 00769000
  784. CKIMAGE1 AL R14,NPRPNT NEXT ONE @V60B9BA 00770000
  785. CLC NPRPNT,ZEROES IS IT THE DUMMY LAST ENTRY? @V60B9BA 00771000
  786. BNE CKIMAGE0 TRY NEXT ONE IF NOT @V60B9BA 00772000
  787. CKIMAGE2 CLI HLDIMAGE,X'00' NEW IMAGE SPECIFIED ? @V60B9BA 00773000
  788. BE CKIMAG2A XFER IF NOT @V60B9BA 00774000
  789. OC HLDPTRN,HLDPTRN DID WE FIND ITS NAME ? @V60B9BA 00775000
  790. BZ MSG244E ERROR IF NOT @V60B9BA 00776000
  791. SPACE 00777000
  792. CKIMAG2A LTR R5,R5 DRAIN COMMAND ? @V60B9BA 00778000
  793. BNZ DECRDV XFER IF SO @V60B9BA 00779000
  794. CLI HLDIMAGE,X'00' NEW IMAGE SPECIFIED ? @V60B9BA 00780000
  795. BNE NEWIMAGE XFER IF SO @V60B9BA 00781000
  796. TM SAVEWRK1+3,RDEVDRAN ORIGINALLY DRAINED? @V60B9BA 00782000
  797. BZ TESTDEV1 XFER IF NOT @V60B9BA 00783000
  798. L R14,HLDPTRO INCREMENT RDEVIMAG @V60B9BA 00784000
  799. LTR R14,R14 DID WE FIND IT ? @V60B9BA 00785000
  800. BZ MSG244E ERROR-WE CAN'T INCR IT @V60B9BA 00786000
  801. B INCRMNT GO DO IT @V60B9BA 00787000
  802. NEWIMAGE L R14,HLDPTRN HLDIMAGE WILL BE INCR'ED @V60B9BA 00788000
  803. MVC RDEVIMAG,HLDIMAGE ALSO MOVE NEW ONE IN @V60B9BA 00789000
  804. TM SAVEWRK1+3,RDEVDRAN ORIGINALLY DRAINED? @V60B9BA 00790000
  805. BO INCRMNT XFER IF SO @V60B9BA 00791000
  806. CLC HLDPTRN,HLDPTRO OLD AND NEW THE SAME ? @V60B9BA 00792000
  807. BE TESTDEV1 FINISHED IF SO @V60B9BA 00793000
  808. INCRMNT SR R15,R15 INITIALIZE @V60B9BA 00794000
  809. IC R15,NPRCNT CURRENT COUNT @V60B9BA 00795000
  810. LA R15,1(R15) INCREMENT @V60B9BA 00796000
  811. STC R15,NPRCNT SAVE IT @V60B9BA 00797000
  812. TM SAVEWRK1+3,RDEVDRAN ORIGINALLY DRAINED? @V60B9BA 00798000
  813. BO TESTDEV1 XFER IF SO @V60B9BA 00799000
  814. DECRDV L R14,HLDPTRO RDEVIMAGE POINTER @V60B9BA 00800000
  815. LTR R14,R14 DID WE FIND IT ? @V60B9BA 00801000
  816. BZ TESTDEV1 DON'T DECR, BUT GO ON @V60B9BA 00802000
  817. SR R15,R15 ZERO IT @V60B9BA 00803000
  818. IC R15,NPRCNT OLD COUNT @V60B9BA 00804000
  819. LTR R15,R15 ALREADY ZERO ?? @V60B9BA 00805000
  820. BZ TESTDEV1 XFER IF SO @V60B9BA 00806000
  821. BCTR R15,0 DECREMENT IT @V60B9BA 00807000
  822. STC R15,NPRCNT NEW COUNT @V60B9BA 00808000
  823. DROP R14,R3 NO LONGER NEEDED @V60B9BA 00809000
  824. SPACE 00810000
  825. SPACE 00811000
  826. TESTDEV1 BAL R3,STARTMSG GO GIVE START/DRAIN MSG 00812000
  827. TM RDEVFLAG,RDEVACNT IS IT BUSY WITH ACCOUNT FILE 00813000
  828. BO DONEXT YES - 00814000
  829. ICM R4,B'1111',RDEVSPL IS DEVICE ACTIVE ?? @VA00716 00815000
  830. BZ STARTDEV NO - START IT 00816000
  831. CLI 0(R4),X'FF' IS SFBLOK ADDRESS IN RDEVSPL ?? 00817000
  832. * ACTIVE FILE WHEN CHECKPOINT WAS TAKEN. 00818000
  833. BE STARTDEV YES -- GIVE DEVICE END 00819000
  834. TM RDEVSTAT,RDEVNRDY NOT READY FLAG SET ?? 00820000
  835. BO STARTDEV YES --GIVE DEVICE END 00821000
  836. TM RDEVFLAG,RDEVTERM FILE TO BE FLUSHED ?? 00822000
  837. BZ DONEXT NO -- 00823000
  838. ICM R3,B'1111',RDEVAIOB IS THERE A ACTIVE IOB ?? @VA00716 00824000
  839. BNZ DONEXT YES - 00825000
  840. ICM R14,B'1111',RSPSFBLK-RSPLCTL(R4) PRT GOING IDLE @VA13341 00825400
  841. BZ DONEXT YES,NO NEED FOR NEW ONE. @VA13341 00825800
  842. TM RDEVSTA2,RDEVINTL SFBLOK ALREADY EXIST? @VA05941 00826000
  843. BZ STARTDEV NO. @VA05941 00827000
  844. BALR R3,R0 @VA05941 00828000
  845. RDEVINTL EQU X'08' @VA05941 00829000
  846. SPACE 00830000
  847. STARTDEV LA R0,IOBSIZE GET CORE FOR AN 00831000
  848. CALL DMKFREE IOBLOK 00832000
  849. L R2,SAVEWRK4 RESTORE ADDRESS OF DEVICE 00833000
  850. USING IOBLOK,R1 TEMPORARY ADDRESSABILITY 00834000
  851. XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR IOBLOK 00835000
  852. ST R1,IOBLINK IOBLOK POINTS TO ITSELF (= ORIGINAL COPY) 00836000
  853. STH R2,IOBRADD STORE DEVICE ADDRESS 00837000
  854. MVI IOBCSW+4,DE INSERT DUMMY DEVICE END @VA00716 00838000
  855. MVC IOBUSER(4),ASYSVM USE ADDRESS OF SYSTEM VMBLOK 00839000
  856. MVI IOBFLAG,IOBCP SET FLAGS AND STATUS 00840000
  857. LTR R3,R3 SHOULD FATAL FLAG BE SET 00841000
  858. BNZ SETIRA NO -- 00842000
  859. OI IOBSTAT,IOBFATAL CLEAR DEVICE AND RECHAIN FILE 00843000
  860. ICM R3,B'1111',RSPSFBLK-RSPLCTL(R4) SPOOL FILE @VA00716 00844000
  861. * BLOK PRESENT? 00845000
  862. BZ SETIRA NO -- 00846000
  863. OI SFBFLAG2-SFBLOK(R3),SFBREQUE FORCE REQUEUING OF FILE 00847000
  864. SETIRA L R3,=A(DMKRSPEX) SET DMKRSPEX AS 00848000
  865. ST R3,IOBIRA INTERRUPT RETURN ADDRESS 00849000
  866. MVC IOBMISC(3),ID+3 INDICATE CALL FROM CSO 00850000
  867. LR R10,R1 SET UP IOB REG FOR CALL 00851000
  868. CALL DMKSTKIO AND STACK THE BLOK FOR DISPATCH 00852000
  869. B DONEXT 00856000
  870. SPACE 3 00857000
  871. DODEL EQU * HERE TO DELETE FILES ON DELETE CHAIN 00858000
  872. SR R7,R7 INDICATE NO SPOOL FILE 00859000
  873. CALL DMKSPLDL,AFFINITY START DELETE ROUTINE @V4075A0 00860000
  874. DOALL EQU * HERE TO START OR DRAIN ALL DEVICES 00861000
  875. TM SAVEWRK1+2,X'02' RADDRESS AND ALL DONE ?? 00862000
  876. BO STEXIT YES -- 00863000
  877. L R6,ARIORD POINTER TO READER CHAIN @VA00716 00864000
  878. MVC SAVEWRK6(3),=C'RDR' SET UP FOR MESSAGE 00865000
  879. BAL R10,SCANDEV 00866000
  880. STPUPR L R6,ARIOPU POINTER TO PUNCH CHAIN 00867000
  881. MVC SAVEWRK6(3),=C'PUN' SET UP FOR MESSAGE 00868000
  882. BAL R10,SCANDEV 00869000
  883. STPRT L R6,ARIOPR POINTER TO PRINTER CHAIN 00870000
  884. MVC SAVEWRK6(3),=C'PRT' SET UP FOR MESSAGE 00871000
  885. B SCANEXIT SCAN FOR DEVICE AND EXIT @VA00716 00872000
  886. SPACE 00873000
  887. STPCH L R6,ARIOPU POINTER TO PUNCH CHAIN 00874000
  888. MVC SAVEWRK6(3),=C'PUN' SET UP FOR MESSAGE 00875000
  889. B SCANEXIT SCAN FOR DEVICE AND EXIT @VA00716 00876000
  890. SPACE 00877000
  891. STRDR L R6,ARIORD POINTER TO READER CHAIN @VA00716 00878000
  892. MVC SAVEWRK6(3),=C'RDR' SET UP MESSAGE 00879000
  893. SCANEXIT BAL R10,SCANDEV SCAN FOR DEVICE @VA00716 00880000
  894. B STEXIT AND EXIT @VA00716 00881000
  895. SPACE 00882000
  896. ALL EQU X'80' 00883000
  897. SPACE 00884000
  898. SETDRAIN OI RDEVFLAG,0 EXECUTED TO SET DRAIN FLAG 00885000
  899. TMTYPE TM RDEVTYPE,X'00' EXECUTED TO TEST TYPE 00886000
  900. SPACE 00887000
  901. SPACE 2 00888000
  902. ORG *-193 00889000
  903. ALPHANUM EQU * TRT TABLE TO VALIDATE THE 36 LEGAL OUTPUT CLASSES 00890000
  904. ORG 00891000
  905. DC C'ABCDEFGHI' VALID CLASSES 00892000
  906. DC 7X'00' ILLEGAL CLASSES 00893000
  907. DC C'JKLMNOPQR' VALID CLASSES 00894000
  908. DC 8X'00' ILLEGAL CLASSES 00895000
  909. DC C'STUVWXYZ' VALID CLASSES 00896000
  910. DC 6X'00' ILLEGAL CLASSES 00897000
  911. DC C'0123456789' VALID CLASSES 00898000
  912. DC 6X'00' ILLEGAL CLASSES 00899000
  913. SPACE 2 00900000
  914. DS 0H 00901000
  915. SPACE 00902000
  916. SCANDEV ST R10,SAVEWRK5 SAVE RETURN ADDRESS 00903000
  917. ICM R7,B'1111',0(R6) GET NUMBER OF LIST ENTRIES @VA00716 00904000
  918. BZ ZEROCNT BRANCH IF ZERO ENTRIES @VA00716 00905000
  919. NEXTDEV LA R6,4(,R6) POINT TO NEXT LIST ENTRY 00906000
  920. LH R8,0(,R6) GET INDEX INTO DEVICE TABLE 00907000
  921. SLL R8,3(0) CONVERT TO BYTE INDEX @V200820 00908000
  922. A R8,ARIODV POINT TO RDEVLBOK 00909000
  923. LH R2,2(,R6) GET DEVICE ADDRESS 00910000
  924. ST R2,SAVEWRK4 SAVE DEVICE ADDRESS 00911000
  925. MVC SAVEWRK1+3(1),RDEVFLAG MOVE IN ORIGINAL STATUS @V60B9BA 00912000
  926. B TESTDEV RETURN TO TEST DEVICE 00913000
  927. SPACE 00914000
  928. DONEXT CALL DMKCKSPL,AFFINITY,PARM=CHGRDV CHKPNT THE CHANGE @V4075A0 00915000
  929. DONEXT1 EQU * @VA09477 00915100
  930. TM SAVEWRK1+2,X'02' REAL ADDRESS ?? @V304298 00916000
  931. BO STARTX YES -- 00917000
  932. BCT R7,NEXTDEV COUNT DOWN LIST TO NEXT DEVICE 00918000
  933. ZEROCNT L R10,SAVEWRK5 RESTORE RETURN ADDRESS 00919000
  934. BR R10 RETURN 00920000
  935. SPACE 3 00921000
  936. STEXIT L R1,SAVEWRK3 GET RID OF THE WORK AREA @V60B9BA 00922000
  937. LTR R1,R1 IS THERE ONE ? @V60B9BA 00923000
  938. BZ STEXIT2 XFER IF NOT @V60B9BA 00924000
  939. LA R0,HLDSIZE NUMBER OF DBL WDS @V60B9BA 00925000
  940. CALL DMKFRET GIVE BACK THE STORAGE @V60B9BA 00926000
  941. STEXIT2 EXIT , @V60B9BA 00927000
  942. SPACE 3 00928000
  943. STARTMSG EQU * HERE TO PRINT MSG DRAINED OR STARTED 00929000
  944. TM SAVEWRK1,X'01' WAS CALLER DMKCSU OR DMKCPI ?? 00930000
  945. BCR 1,R3 YES -- RETURN WITHOUT GIVING MSG 00931000
  946. ICM R4,B'1111',RDEVSPL DEVICE ACTIVE WITH FILE ? @VA00716 00932000
  947. BZ MOVETYPE NO - 00933000
  948. LTR R5,R5 DRAIN OR START MSG 00934000
  949. BZ MOVETYPE START MSG ONLY ON ACTIVE 00935000
  950. TM RDEVSTAT,RDEVNRDY NOTREADY FLAG SET ?? 00936000
  951. BZ DONEXT NO -- DO NEXT DEVICE 00937000
  952. TM RDEVFLAG,RDEVTERM FLUSH COMMAND GIVEN TO THIS DEVICE ? 00938000
  953. BZ DONEXT NO -- DO NEXT DEVICE 00939000
  954. NI RDEVSTAT,X'FF'-RDEVBUSY RESET DEVICE BUSY FLAG 00940000
  955. SR R3,R3 INDICATE FATAL ERROR IN NEW IOBLOK 00941000
  956. ST R3,RDEVAIOB CLEAR ACTIVE IOBLOK ADDRESS 00942000
  957. ST R3,RDEVIOER CLEAR IOERBLOK ADDRESS 00943000
  958. B STARTDEV GO GIVE DEVICE END INTERRUPT 00944000
  959. MOVETYPE MVC DEVTYPE(3),SAVEWRK6 FILE IN MSG DEVICE TYPE 00945000
  960. MVC DEVCLASS(4),RDEVCLAS MOVE IN CLASSES 00946000
  961. OC DEVCLASS(4),BLANKS EDIT FOR UCASE @V200930 00947000
  962. L R1,SAVEWRK4 GET DEVICE ADDRESS 00948000
  963. CALL DMKCVTBH AND CONVERT 00949000
  964. STCM R1,B'0111',DEVADDR AND STORE IN MSG 00950000
  965. MVC DEVMSG(7),=C'STARTED' 00951000
  966. LTR R5,R5 STARTING ?? 00952000
  967. BZ *+10 00953000
  968. MVC DEVMSG(7),=C'DRAINED' 00954000
  969. MVC DEVSEP(3),=C' NO' SET NOSEP @V200930 00955000
  970. TM RDEVFLAG,RDEVSEP TEST FOR NOSEP @V200930 00956000
  971. BZ *+10 YES IT IS NOSEP @V200930 00957000
  972. MVC DEVSEP(3),BLANKS MARK AS SEP @V200930 00958000
  973. LA R0,STARTLR READER MSG SIZE @V200930 00959000
  974. TM RDEVTYPC,CLASURI IS IT A READER TYPE ?? @V200930 00960000
  975. BO *+8 YES, CONT @V200930 00961000
  976. LA R0,STARTL LENGTH AND 00962000
  977. LA R1,STMSG AND ADDRESS OF MESSAGE 00963000
  978. CALL DMKQCNWT,AFFINITY,PARM=(NORET+OPERATOR) @V4075A0 00964000
  979. NI RDEVFLAG,X'FF'-RDEVSPAC RESET SPACE FLAG 00965000
  980. TM VMOSTAT,VMSYSOP IS USER SYSTEM OPERATOR ?? 00966000
  981. BCR 1,R3 YES -- RETURN TO CALLER 00967000
  982. CALL DMKQCNWT,AFFINITY,PARM=NORET SEND MSG TO USER @V4075A0 00968000
  983. BR R3 RETURN TO CALLER 00969000
  984. SPACE 00970000
  985. STMSG DS 0H @V200930 00971000
  986. DEVTYPE DC CL5' ' @V200930 00972000
  987. DEVADDR DC CL3' ' @V200930 00973000
  988. DC CL1' ' @V200930 00974000
  989. DEVMSG DC CL7' ' STARTED OR DRAINED @V200930 00975000
  990. DC CL3' ' @V200930 00976000
  991. DEVUSER DC CL8'SYSTEM ' @V200930 00977000
  992. STARTLR EQU *-STMSG READER MSG SIZE @V200930 00978000
  993. DC CL9' CLASS = ' @V200930 00979000
  994. DEVCLASS DC CL4' ' @V200930 00980000
  995. DEVSEP DC CL6' NOSEP' @V200930 00981000
  996. STARTL EQU *-STMSG @V200930 00982000
  997. DS 0H 00983000
  998. EJECT 00984000
  999. *. 00985000
  1000. * SUBROUTINE NAME - 00986000
  1001. * 00987000
  1002. * DMKCSORP 00988000
  1003. * 00989000
  1004. * FUNCTION - 00990000
  1005. * 00991000
  1006. * TO REPEAT THE CURRENTLY ACTIVE FILE ON THE SPECIFIED DEVICE A 00992000
  1007. * SPECIFIED NUMBER OF TIMES. THE NUMBER OF COPIES SPECIFIED IS 00993000
  1008. * ADDED TO THE NUMBER SPECIFIED BY THE USER. IF 'HOLD' IS 00994000
  1009. * SPECIFIED THE FILE WILL BE HELD AFTER PRINTING THE 00995000
  1010. * LAST COPY REQUESTED. 00996000
  1011. * 00997000
  1012. * COMMAND LINE FORMAT - 00998000
  1013. * 00999000
  1014. * +--------+-----------------------+ 01000000
  1015. * | REPEAT | RADDR <COPY> <HOLD> | 01001000
  1016. * | REP | HO | 01002000
  1017. * +--------+-----------------------+ 01003000
  1018. * 01004000
  1019. * OPERATION - 01005000
  1020. * 01006000
  1021. * 1. BAL TO GETDEVIC TO LOCATE THE RDEVBLOK FOR THE DEVICE ON 01007000
  1022. * WHICH THE FILE IS TO BE REPEATED 01008000
  1023. * 2. IF DEVICE NOT PRINTER OR PUNCH: EXIT GIVING MSG021E. 01009000
  1024. * IF DEVICE IS DEDICATE: EXIT GIVING MSG140E. 01010000
  1025. * IF DEVICE IS OFFLINE: EXIT GIVING MSG046E. 01011000
  1026. * IF DEVICE NOT ACTIVE: EXIT GIVING MSG141E. 01012000
  1027. * 3. CALL DMKSCNFD TO LOCATE THE NUMBER OF COPIES REQUESTED 01013000
  1028. * OR KEYWORD 'HOLD'. IF 'HOLD' SET SFBSHOLD AND 01014000
  1029. * GO TO STEP 3. 01015000
  1030. * 4. IF NO NUMBER IS GIVEN, 1 IS ASSUMED 01016000
  1031. * 5. CONVERT THE NUMBER TO BINARY AND VERIFY THAT THE NUMBER 01017000
  1032. * REQUESTED IS LESS THAN 100 01018000
  1033. * 6. ADD THE NUMBER GIVEN TO THE COPIES FIELD IN THE SFBLOK 01019000
  1034. * IF NONE: GO TO STEP 7. 01020000
  1035. * IF TOTAL COPIES IN SFBLOK IS OVER 99, RESET TO 99 COPIES 01021000
  1036. * 7. EXIT 01022000
  1037. * 01023000
  1038. * RESPONSE - 01024000
  1039. * 01025000
  1040. * TYPE XXX REPEATED USERID FILE= NNNN RECDS=NNNNNN COPY= NN C TYP 01026000
  1041. * 01027000
  1042. * 01028000
  1043. * ERROR MESSAGES - 01029000
  1044. * 01030000
  1045. * DMKCSO003E INVALID OPTION - (OPTION) 01031000
  1046. * DMKCSO006E INVALID DEVICE TYPE - (ADDR) 01032000
  1047. * DMKCSO013E CONFLICTING OPTION - (OPTION) 01033000
  1048. * DMKCSO021E RADDR MISSING OR INVALID 01034000
  1049. * DMKCSO030E COPIES MISSING OR INVALID 01035000
  1050. * DMKCSO040E DEV (ADDR) DOES NOT EXIST 01036000
  1051. * DMKCSO046E (TYPE) (RADDR) OFFLINE 01037000
  1052. * DMKCSO140E (TYPE) (RADDR) ATTACHED TO (USERID) 01038000
  1053. * DMKCSO141E (TYPE) (RADDR) NOT ACTIVE 01039000
  1054. *. 01040000
  1055. SPACE 01041000
  1056. DMKCSORP RELOC 01042000
  1057. BAL R4,CLEAR CLEAR SAVEWRK1,2-9 01043000
  1058. BAL R4,GETDEVIC LOCATE REAL DEVICE BLOK FOR FILE 01044000
  1059. * TO BE REPEATED 01045000
  1060. ST R1,SAVEWRK2 SAVE DEVICE ADDRESS 01046000
  1061. USING RDEVBLOK,R8 01047000
  1062. LA R2,1 DEFAULT NUMBER FOR REPEAT 01048000
  1063. REPSCAN EQU * 01049000
  1064. CALL DMKSCNFD DID USER SPECIFY NUMBER OF REPEATS ? 01050000
  1065. BNZ SETRPEAT NO -- 01051000
  1066. TM SAVEWRK1,X'C0' HOLD AND COPY SET ?? 01052000
  1067. BO MSG003E YES -- INVALID OPTION 01053000
  1068. LR R14,R0 COUNT 01054000
  1069. BCTR R14,0 -1 01055000
  1070. C R0,F2 VALID COUNT FOR HOLD 01056000
  1071. BL CVTCOPY MUST BE COUNT 01057000
  1072. EX R14,CLCHOLD HOLD OPTION ?? 01058000
  1073. BNE CVTCOPY NO - 01059000
  1074. TM SAVEWRK1,X'80' HOLD OPTION SET ?? 01060000
  1075. BO MSG013E YES -- CONFLICTING OPTION 01061000
  1076. OI SAVEWRK1,X'80' SET SWITCH 01062000
  1077. B REPSCAN 01063000
  1078. SPACE 01064000
  1079. CVTCOPY C R0,F2 LENGTH GREATER THAN 2 ?? 01065000
  1080. BH MSG003E YES ---INVALID OPTION 01066000
  1081. TM SAVEWRK1,X'40' COPY OPTION PRESENT ?? 01067000
  1082. BO MSG013E YES -- CONFLICTING OPTION 01068000
  1083. CALL DMKCVTDB CONVERT NUMBER OF REPEATS 01069000
  1084. BNZ MSG030E NUMBER OF COPIES MISSING 01070000
  1085. LR R2,R1 GET NUMBER OF TIMES TO REPAET 01071000
  1086. C R2,=F'99' MORE THAN 99 COPIES REQUESTED ?? 01072000
  1087. BH MSG030E YES -- NUMBER OF COPIES INVALID 01073000
  1088. LTR R1,R1 COPIES EQUAL ZERO ?? 01074000
  1089. BZ MSG030E YES - 01075000
  1090. OI SAVEWRK1,X'40' INDICATE COPY OPTION PRESENT 01076000
  1091. B REPSCAN LOCATE NEXT OPTION 01077000
  1092. SPACE 01078000
  1093. USING SFBLOK,R7 01079000
  1094. USING RSPLCTL,R9 01080000
  1095. SETRPEAT L R1,SAVEWRK2 GET DEVICE ADDRESS @VA00716 01081000
  1096. ICM R9,B'1111',RDEVSPL FILE POINTER PRESENT ?? @VA00716 01082000
  1097. BZ MSG141E NO - CANNOT REPEAT 01083000
  1098. TM RDEVFLAG,RDEVACNT PUNCHING ACCOUNTING CARDS ?? 01084000
  1099. BO MSG141E YES -- GIVE INACTIVE MSG 01085000
  1100. LR R7,R9 SET UP SFBLOK ADDRESS 01086000
  1101. CLI 0(R9),X'FF' IF FILE IS ACTIVE ON WARM START 01087000
  1102. BE *+8 YES -- 01088000
  1103. L R7,RSPSFBLK GET ADDRESS OF SFBLOK 01089000
  1104. LTR R7,R7 SPOOL FILE PRESENT ?? 01090000
  1105. BZ MSG141E NO - 01091000
  1106. SPACE 01092000
  1107. TM SAVEWRK1,X'80' HOLD INDICATED ?? 01093000
  1108. BZ ADDCOPY NO - 01094000
  1109. OI SFBFLAG,SFBSHOLD+SFBRECOK SET SYSTEM HOLD AND RECORD 01095000
  1110. * ALLOCATION OK 01096000
  1111. SPACE 01097000
  1112. ADDCOPY TM SAVEWRK1,X'80' HOLD PRESENT ?? 01098000
  1113. BZ SETCOPY NO -- 01099000
  1114. TM SAVEWRK1,X'40' COPY PRESENT ?? 01100000
  1115. BZ CSOEXIT NO - 01101000
  1116. SETCOPY AH R2,SFBCOPY ADD REPEAT TO NUMBER OF COPIES 01102000
  1117. C R2,=F'99' TOTAL COPIES LARGER THAN 99 ? @VW01227 01103000
  1118. BNH *+8 NO -- 01104000
  1119. LA R2,99 SET TO 99 COPIES 01105000
  1120. STH R2,SFBCOPY AND STORE IN SFBLOK 01106000
  1121. B CSOEXIT EXIT 01107000
  1122. SPACE 01108000
  1123. EJECT 01109000
  1124. *. 01110000
  1125. * SUBROUTINE NAME - 01111000
  1126. * 01112000
  1127. * DMKCSOBS 01113000
  1128. * 01114000
  1129. * FUNCTION - 01115000
  1130. * 01116000
  1131. * TO BACKSPACE THE OUTPUT OF A REAL SPOOL PRINTER A SPECIFIED 01117000
  1132. * NUMBER OF FORMS PAGES, OR TO BACK UP THE OUTPUT OF A PRINTER 01118000
  1133. * OR PUNCH TO THE BEGINNING OF THE CURRENT FILE 01119000
  1134. * 01120000
  1135. * COMMAND LINE FORMAT - 01121000
  1136. * 01122000
  1137. * PUNCHES 01123000
  1138. * 01124000
  1139. * +-----------+----------------+ 01125000
  1140. * | BACKSPACE | RADDR <FILE> | 01126000
  1141. * | BA | ---- | 01127000
  1142. * +-----------+----------------+ 01128000
  1143. * 01129000
  1144. * PRINTERS 01130000
  1145. * 01131000
  1146. * +-----------+---------------------------+ 01132000
  1147. * | BACKSPACE | RADDR <FILE> | 01133000
  1148. * | BA | <PAGES> <EOF> | 01134000
  1149. * | | 1 | 01135000
  1150. * | | - | 01136000
  1151. * +-----------+---------------------------+ 01137000
  1152. * 01138000
  1153. * FILE EOF 01139000
  1154. * F EOF 01140000
  1155. * 01141000
  1156. * OPERATION - 01142000
  1157. * 01143000
  1158. * 1. BAL TO GETDEVIC TO LOCATE THE RDEVBLOK FOR THE DEVICE 01144000
  1159. * TO BE BACKSPACED 01145000
  1160. * 2. IF DEVICE NOT PRINTER OR PUNCH: EXIT GIVING MSG021E. 01146000
  1161. * IF DEVICE DEDICATE: EXIT GIVING MSG140E. 01147000
  1162. * IF DEVICE NOT ACTIVE: EXIT GIVING MSG141E. 01148000
  1163. * IF DEVICE OFFLINE: EXIT GIVING MSG046E. 01149000
  1164. * 3. CALL DMKSCNFD TO LOCATE BACKSPACE OPTION 01150000
  1165. * 4. IF NO OPTION IS GIVEN, ASSUME 1 PAGE 01151000
  1166. * 5. IF THE 'FILE' OPTION IS SPECIFIED, SET THE RDEVRSTR FLAG 01152000
  1167. * AND EXIT 01153000
  1168. * 6. IF A NUMERIC OPTION IS SPECIFIED, CONVERT IT TO BINARY. 01154000
  1169. * IF THE EOF OPTION IS ALSO GIVEN, OBTAIN THE 01155000
  1170. * NEGATIVE OF THE BACKUP COUNT AND 01156000
  1171. * SAVE IT IN THE RSPLCTL CONTROL BLOK; THEN SET THE RDEVBACK 01157000
  1172. * FLAG AND EXIT 01158000
  1173. * 01159000
  1174. * RESPONSE - 01160000
  1175. * 01161000
  1176. * TYPE XXX BACKSPACE USERID FILE= NNNN RECDS=NNNNNN COPY= NN C TYP 01162000
  1177. * 01163000
  1178. * ERROR MESSAGES - 01164000
  1179. * 01165000
  1180. * DMKCSO003E INVALID OPTION - (OPTION) 01166000
  1181. * DMKCSO006E INVALID DEVICE TYPE - (ADDR) 01167000
  1182. * DMKCSO021E RADDR MISSING OR INVALID 01168000
  1183. * DMKCSO040E DEV (ADDR) DOES NOT EXIST 01169000
  1184. * DMKCSO046E (TYPE) (RADDR) OFFLINE 01170000
  1185. * DMKCSO140E (TYPE) (RADDR) ATTACHED TO (USERID) 01171000
  1186. * DMKCSO141E (TYPE) (RADDR) NOT ACTIVE 01172000
  1187. * DMKCSO441E NOT ACCEPTED. PREVIOUS BACKSPACE STILL BEING 01172010
  1188. * PROCESSED. @VA13377 01172020
  1189. *. 01173000
  1190. SPACE 01174000
  1191. DMKCSOBS RELOC 01175000
  1192. BAL R4,CLEAR CLEAR SAVEWRK1,2-9 01176000
  1193. BAL R4,GETDEVIC LOCATE RDEVBLOK FOR FILE TO BE 01177000
  1194. * BACKSPACED 01178000
  1195. USING RDEVBLOK,R8 01179000
  1196. ICM R4,B'1111',RDEVSPL ACTIVE FILE POINTER PRESENT ?@VA00716 01180000
  1197. BZ MSG141E NO - CANNOT BACKSPACE 01181000
  1198. TM RDEVFLAG,RDEVBACK SEE IF ALREADY BACKSPACING @VA13377 01181300
  1199. BO MSG441E YES, CAN'T DO IT AGAIN YET @VA13377 01181600
  1200. TM RDEVFLAG,RDEVACNT PUNCHING ACCOUNTING CARDS ?? 01182000
  1201. BO MSG141E YES -- GIVE INACTIVE MSG 01183000
  1202. LA R2,1 DEFAULT OF 1 FOR BACKSPACE NUMBER 01184000
  1203. SWITCH @VA08060 01185000
  1204. CALL DMKSCNFD DID USER SPECIFY NUMBER OF PAGES ?? 01186000
  1205. BNZ SETBACK NO -- USE ONE 01187000
  1206. C R0,F8 LENGTH GREATER THAN 8 ? 01188000
  1207. BH MSG003E YES -- ERROR MSG DMKCSO003E 01189000
  1208. LR R14,R0 COUNT 01190000
  1209. BCTR R14,0 -1 01191000
  1210. EX R14,CLCFILE IS IT BACKSPACE FILE ?? 01192000
  1211. BE SETFILE YES - 01193000
  1212. STM R0,R1,SAVEWRK8 SAVE LENGTH AND ADDRESS OF OPTION 01194000
  1213. TM RDEVTYPE,TYPPUN PUNCH ?? 01195000
  1214. BO MSG003E INVALID OPTION 01196000
  1215. CALL DMKCVTDB CONVERT USER REQUEST 01197000
  1216. BZ CNTGOOD PAGE COUNT GOOD 01198000
  1217. BSERR LM R0,R1,SAVEWRK8 GET LENGTH AND ADDRESS 01199000
  1218. B MSG003E ERROR MSG INVALID OPTION 01200000
  1219. * 'FILE' 01201000
  1220. CNTGOOD EQU * 01202000
  1221. LTR R1,R1 COUNT ZERO ?? 01203000
  1222. BZ BSERR YES - INVALID OPTION 01204000
  1223. LR R2,R1 GET NUMBER TO BACKSPACE 01205000
  1224. SETBACK TM RDEVTYPE,TYPPUN IS IT PUNCH 01206000
  1225. BO SETFILE YES - HAS TO BE FILE 01207000
  1226. CALL DMKSCNFD ANY MORE OPTIONS ?? 01208000
  1227. BNZ NOTEOF NO, IT'S A NORMAL BACKSPAC @V60B9BA 01209000
  1228. C R0,F3 SEE IF IT IS EOF OPTION @V60B9BA 01210000
  1229. BNE MSG003E NOPE, IT MUST BE INVALID @V60B9BA 01211000
  1230. CLC 0(3,R1),=C'EOF' IS IT REALLY EOF ? @V60B9BA 01212000
  1231. BNE MSG003E NOPE, IT IS INVALID @V60B9BA 01213000
  1232. LNR R2,R2 LOAD NEGATIVE BACKSP CNT @V60B9BA 01214000
  1233. * TO INDICATE EOF OPTION 01215000
  1234. NOTEOF ST R2,RSPMISC-RSPLCTL(R4) SAVE BACKSPACE NUMBER IN @V60B9BA 01216000
  1235. * RSPLCTL 01217000
  1236. OI RDEVFLAG,RDEVBACK SET BACKSPACE 01218000
  1237. B CSOEXIT AND EXIT 01219000
  1238. SPACE 01220000
  1239. SETFILE EQU * 01221000
  1240. CALL DMKSCNFD ANY MORE OPTIONS ?? 01222000
  1241. BZ MSG003E YES -- INVALID OPTION 01223000
  1242. OI RDEVFLAG,RDEVRSTR YES - SET RESTART FLAG IN RDEVBLOK 01224000
  1243. B CSOEXIT AND LEAVE 01225000
  1244. EJECT 01226000
  1245. *. 01227000
  1246. * OPERATION OF GETDEVIC SUBROUTINE - 01228000
  1247. * 01229000
  1248. * 1. CALL DMKSCNFD TO LOCATE THE DEVICE ADDRESS FIELD 01230000
  1249. * 2. IF NO OPTION IS FOUND: EXIT GIVING MSG021E. 01231000
  1250. * 3. CONVERT THE ADDRESS TO BINARY 01232000
  1251. * 4. IF THE CONVERSION FAILS, EXIT GIVING MSG021E. 01233000
  1252. * 5. CALL DMKSCNRU TO LOCATE THE DEVICE BLOK FOR THE SPECIFIED 01234000
  1253. * UNIT; IF NOT FOUND, EXIT GIVING MSG040E. 01235000
  1254. * 6. OTHERWISE, RETURN TO CALLER WITH GPR8 = RDEVBLOK 01236000
  1255. *. 01237000
  1256. SPACE 01238000
  1257. USING RDEVBLOK,R8 01239000
  1258. GETDEVIC EQU * HERE TO LOCATE THE DEVICE SPECIFIED IN THE COMMAND 01240000
  1259. CALL DMKSCNFD LOCATE NEXT OPTION 01241000
  1260. BNZ MSG021E DEVICE ADDRESS IS MISSING 01242000
  1261. SPACE 01243000
  1262. GETDVIC2 C R0,F3 LENGTH GREATER THAN 3 ?? 01244000
  1263. BH MSG021E YES -- INVALID RADDRESS 01245000
  1264. LR R14,R0 GET LENGTH 01246000
  1265. BCTR R14,0 -1 01247000
  1266. EX R14,MVCADDR MOVE ADDRESS TO SAVEWRK7 01248000
  1267. CALL DMKCVTHB CONVERT TO BINARY 01249000
  1268. BNZ MSG021E INVALID HEX CHARACTERS IN ADDRESS 01250000
  1269. CALL DMKSCNRU 01251000
  1270. BNZ MSG040E COULDN'T FIND A DEVICE AT THAT 01252000
  1271. * ADDRESS 01253000
  1272. L R14,ARIORD POINT TO LIST OF SYSTEM READERS 01254000
  1273. MVC SAVEWRK6(3),=C'RDR' SET FOR ERROR MSG 01255000
  1274. TM RDEVTYPC,CLASURI READER TYPE ?? 01256000
  1275. BO VALDEV VALIDATE DEVICE FOR SPOOLING 01257000
  1276. L R14,ARIOPR POINT TO LIST OF SYSTEM PRINTERS 01258000
  1277. MVC SAVEWRK6(3),=C'PRT' PRINTER TYPE ?? 01259000
  1278. TM RDEVTYPE,TYPPRT PRINTER ?? 01260000
  1279. BO VALDEV VALIDATE DEVICE FOR SPOOLING 01261000
  1280. L R14,ARIOPU POINT TO LIST OF SYSTEM PUNCHES 01262000
  1281. MVC SAVEWRK6(3),=C'PUN' SET FOR PUNCH 01263000
  1282. SPACE 01264000
  1283. VALDEV ICM R15,B'1111',0(R14) GET NUMBER OF DEVICES 01265000
  1284. BZ MSG006E NO DEVICES - INVALID TYPE 01266000
  1285. GETDEVLP LA R14,4(R14) UPDATE TO NEXT ENTRY 01267000
  1286. CH R1,2(R14) IS THIS DEVICE ON LIST ?? 01268000
  1287. BE DEVAVAIL YES -- CHECK FOR DEVICE @VA00716 01269000
  1288. * AVAILABILITY 01270000
  1289. BCT R15,GETDEVLP TRY NEXT ENTRY 01271000
  1290. B MSG006E -- INVALID DEVICE TYPE 01272000
  1291. SPACE 01273000
  1292. DEVAVAIL TM SAVEWRK1+2,X'02' START OR DRAIN COMMAND ? @VA00716 01274000
  1293. BCR 1,R4 YES - BRANCH (RETURN) @VA00716 01275000
  1294. TM RDEVTYPC,CLASURO UNIT RECORD OUTPUT TYPE ? @VA00716 01276000
  1295. BZ MSG006E NO - INVALID ADDRESS @VA00716 01277000
  1296. TSTSTAT TM RDEVSTAT,RDEVDED IS THE DEVICE DEDICATED ? @VA00716 01278000
  1297. BO MSG140E YES -- ERROR @VA00716 01279000
  1298. TM RDEVSTAT,RDEVDISA IS THE DEVICE OFFLINE ? @VA00716 01280000
  1299. BO MSG046E YES -- ERROR @VA00716 01281000
  1300. BR R4 RETURN TO CALLER @VA00716 01282000
  1301. SPACE 01283000
  1302. MVCADDR MVC SAVEWRK7(0),0(R1) MOVE NAME TO SAVEWRK7 01284000
  1303. SPACE 3 01285000
  1304. CLEAR XC SAVEWRK2(32),SAVEWRK2 CLEAR WORK AREA 01286000
  1305. XC SAVEWRK1(4),SAVEWRK1 01287000
  1306. BR R4 RETURN 01288000
  1307. SPACE 3 01289000
  1308. EJECT 01290000
  1309. ****************************************************** 01291000
  1310. * 01292000
  1311. * ERROR EXITS FROM DMKCSO 01293000
  1312. * 01294000
  1313. ****************************************************** 01295000
  1314. SPACE 3 01296000
  1315. MSG003E EQU * HERE IF OPTION IS INVALID 01297000
  1316. LA R2,003 ERROR MSG DMKCSO003E 01298000
  1317. B EXIT8 01299000
  1318. SPACE 01300000
  1319. MSG006E EQU * HERE IF INVALID DEVICE TYPE 01301000
  1320. LA R2,006 ERROR MSG DMKCSO006E 01302000
  1321. B EXIT1 01303000
  1322. SPACE 01304000
  1323. MSG013E EQU * HERE IF CONFLICTING OPTIONS 01305000
  1324. LA R2,013 ERROR MSG DMKCSO013E 01306000
  1325. B EXIT8 .. 01307000
  1326. SPACE 01308000
  1327. MSG021E EQU * HERE IF RADDR MISSING OR INVALID 01309000
  1328. LA R2,021 ERROR MSG DMKCSO021E 01310000
  1329. B EXIT8R1 01311000
  1330. SPACE 01312000
  1331. SPACE 01313000
  1332. MSG028E EQU * HERE IF CLASS IS MISSING OR INVALID 01314000
  1333. LA R2,028 ERROR MSG DMKCSO028E 01315000
  1334. B EXIT8R1 EXIT 01316000
  1335. SPACE 01317000
  1336. MSG030E EQU * HERE IF COPIES MISSING OR INVALID 01318000
  1337. LA R2,030 ERROR MSG DMKCSO030E 01319000
  1338. B EXIT8R1 EXIT 01320000
  1339. SPACE 01321000
  1340. SPACE 2 01322000
  1341. MSG040E EQU * HERE IF DEVICE ADDRESS DOES NOT EXIST 01323000
  1342. LA R2,040 ERROR MSG DMKCSO040E 01324000
  1343. B EXIT1 SET UP MESSAGE 01325000
  1344. SPACE 01326000
  1345. SPACE 01327000
  1346. MSG046E EQU * HERE IF DEVICE IS OFFLINE 01328000
  1347. LA R2,046 ERROR MSG DMKCSO046E 01329000
  1348. B EXIT2 SET GPR0 AND GPR1 01330000
  1349. SPACE 01331000
  1350. MSG140E EQU * HERE IF DEVICE IS ATTACHED TO USER 01332000
  1351. L R14,RDEVUSER ADDRESS OF USER VMBLOK 01333000
  1352. MVC SAVEWRK8(8),VMUSER-VMBLOK(R14) GET USER ID 01334000
  1353. LA R0,16 LENGTH OF DATA FOR ERROR MSG 01335000
  1354. LA R1,SAVEWRK6 ADDRESS OF DATA 01336000
  1355. LA R2,140 ERROR MSG DMKCSO140E 01337000
  1356. B EXIT8 EXIT 01338000
  1357. SPACE 01339000
  1358. MSG141E EQU * HERE IF DEVICE NOT ACTIVE 01340000
  1359. LA R2,141 ERROR MSG DMKCSO141E 01341000
  1360. B EXIT2 SET UP GPR0 AND GPR1 01342000
  1361. SPACE 01343000
  1362. MSG243E EQU * HERE IF FLASH MISSING OR INVALID @V60B9BA 01344000
  1363. LA R2,243 ERR MSG DMKCSO243E @V60B9BA 01345000
  1364. B EXIT8R1 EXIT @V60B9BA 01346000
  1365. SPACE 01347000
  1366. MSG244E EQU * HERE IF IMAGE LIBRARY MISSING OR INVALID @V60B9BA 01348000
  1367. TM SAVEWRK1,X'01' CALLED FROM DMKCPI?? @V60B9BA 01349000
  1368. BO DONEXT IGNORE ERROR IF SO @V60B9BA 01350000
  1369. LA R2,244 ERR MSG DMKCSO244E @V60B9BA 01351000
  1370. B EXIT8R1 EXIT @V60B9BA 01352000
  1371. SPACE 01353000
  1372. MSG245E EQU * HERE IF CHARS MISSING OR INVALID @V60B9BA 01354000
  1373. LA R2,245 ERR MSG DMKCSO245E @V60B9BA 01355000
  1374. B EXIT8R1 EXIT @V60B9BA 01356000
  1375. SPACE 01357000
  1376. MSG246E EQU * HERE IF FCB MISSING OR INVALID @V60B9BA 01358000
  1377. LA R2,246 ERR MSG DMKCSO246E @V60B9BA 01359000
  1378. B EXIT8R1 EXIT @V60B9BA 01360000
  1379. SPACE 01361000
  1380. MSG441E EQU * HERE ON BACKSPACE WHEN ALREADY BACKSPACING @VA13377 01361100
  1381. LA R2,441 ERR MSG DMKCSO441E @VA13377 01361200
  1382. LA R1,BACKSPAC VARIABLE FOR SUBSTITUTION @VA13377 01361300
  1383. LA R0,L'BACKSPAC LENGTH TO SUBSTITUTE @VA13377 01361400
  1384. B EXIT8 GO PROCESS THE MSG @VA13377 01361500
  1385. SPACE 1 01361600
  1386. EXIT1 LA R0,3 LENGTH OF REAL ADDRESS 01362000
  1387. LA R1,SAVEWRK7 ADDRESS OF REAL ADDRESS 01363000
  1388. B EXIT8 EXIT 01364000
  1389. SPACE 01365000
  1390. EXIT2 LA R0,8 LENGTH OF TYPE AND REAL ADDRESS 01366000
  1391. LA R1,SAVEWRK6 ADDRESS OF DATA 01367000
  1392. B EXIT8 EXIT 01368000
  1393. SPACE 3 01369000
  1394. CLCALL CLC 0(0,R1),=C'ALL ' 01370000
  1395. CLCHOLD CLC 0(0,R1),=C'HOLD ' 01371000
  1396. CLCPRINT CLC 0(0,R1),=C'PRINTER ' 01372000
  1397. CLCREAD CLC 0(0,R1),=C'READER ' 01373000
  1398. CLCPUN CLC 0(0,R1),=C'PUNCH ' 01374000
  1399. CLCFILE CLC 0(0,R1),=C'FILE ' 01375000
  1400. CLCNOS CLC 0(0,R1),=C'NOSEP ' 01376000
  1401. CLCCLASS CLC 0(0,R1),=C'CLASS ' 01377000
  1402. CLCFLASH CLC 0(0,R1),=C'FLASH ' @V60B9BA 01378000
  1403. CLCCHARS CLC 0(0,R1),=C'CHARS ' @V60B9BA 01379000
  1404. CLCFCB CLC 0(0,R1),=C'FCB ' @V60B9BA 01380000
  1405. CLCIMAGE CLC 0(0,R1),=C'IMAGE ' @V60B9BA 01381000
  1406. CLCPURGE CLC 0(0,R1),=C'PURGE ' @V60B9BA 01382000
  1407. MVCFLASH MVC HLDFLASH-HLDAREA(0,R3),0(R1) @V60B9BA 01383000
  1408. MVCCHARS MVC HLDCHARS-HLDAREA(0,R3),0(R1) @V60B9BA 01384000
  1409. MVCIMAGE MVC HLDIMAGE-HLDAREA(0,R3),0(R1) @V60B9BA 01385000
  1410. EJECT 01386000
  1411. *********************************** 01388000
  1412. * 01389000
  1413. * FINAL EXIT BACK TO DMKCFM OR DMKERM 01390000
  1414. * 01391000
  1415. *********************************** 01392000
  1416. SPACE 3 01393000
  1417. DS 0H 01394000
  1418. SPACE 2 01395000
  1419. EXIT8R1 SR R1,R1 NO DATA IN R0 AND R1 01396000
  1420. SR R0,R0 NO DATA IN RO BUT DATA IN R1 01397000
  1421. EXIT8 ICM R0,B'1110',ID+3 LOAD MODULE ID (CSO) 01398000
  1422. STM R0,R1,SAVEWRK4 SAVE REGS NOW @VMI0010 01399000
  1423. L R1,SAVEWRK3 GIVE BACK THE WORK AREA @V60B9BA 01400000
  1424. LTR R1,R1 IS THERE ONE ? @V60B9BA 01401000
  1425. BZ EXIT8A XFER IF NOT @V60B9BA 01402000
  1426. LA R0,HLDSIZE SIZE IN DBL WDS @V60B9BA 01403000
  1427. CALL DMKFRET GIVE IT BACK @V60B9BA 01404000
  1428. EXIT8A LM R0,R1,SAVEWRK4 RESTORE THE REGS @VMI0010 01405000
  1429. CALL DMKERMSG GO TO ERROR MSG MODULE 01406000
  1430. * 01407000
  1431. * DMKERMSG WILL EXIT TO DMKCFM VIA SVC 16 01408000
  1432. * 01409000
  1433. SPACE 2 01410000
  1434. CSOMSG EQU * HERE TO PRINT COMMAND COMPLETED MESSAGE 01411000
  1435. LA R0,16 MSG LENGTH 01412000
  1436. LA R1,CMDMSG ADDRESS OF MSG 01413000
  1437. CALL DMKQCNWT,PARM=NORET 01414000
  1438. SPACE 2 01415000
  1439. CSOEXIT EQU * HERE TO EXIT 01416000
  1440. EXIT 01417000
  1441. EJECT 01418000
  1442. CMDMSG DC C'COMMAND COMPLETE' 01420000
  1443. BACKSPAC DC C'BACKSPACE' @VA13377 01421000
  1444. LTORG 01422000
  1445. EJECT 01423000
  1446. HLDAREA DSECT , WORK AREA FOR START COMMAND @V60B9BA 01424000
  1447. HLDFLASH DS CL4 FLASH OVERLAY NAME @V60B9BA 01425000
  1448. HLDCHARS DS CL4 CHAR ARR TBL FOR SEP PAGE @V60B9BA 01426000
  1449. HLDIMAGE DS CL8 IMAGE LIBRARY FOR LOADS @V60B9BA 01427000
  1450. HLDPTRO DS A PTR TO NPRTBL FOR RDEVIMAG @V60B9BA 01428000
  1451. HLDPTRN DS A PTR TO NPRTBL FOR HLDIMAGE @V60B9BA 01429000
  1452. HLDFCB DS 1X FCB FOR SEP PAGE (6|8|12) @V60B9BA 01430000
  1453. HLDFLAG1 DS 1X FLAG BYTE @V60B9BA 01431000
  1454. HLDPURGE EQU X'80' PURGE SPECIFIED FLAG @V60B9BA 01432000
  1455. DS 6X RESERVED @V60B9BA 01433000
  1456. HLDSIZE EQU (*-HLDAREA)/8 WORK AREA SIZE (DBL WDS) @V60B9BA 01434000
  1457. SPACE 01435000
  1458. PSA , @V306638 01436000
  1459. COPY CONBUF @V306638 01437000
  1460. COPY DEVTYPES @V306638 01438000
  1461. COPY EQU @V306638 01439000
  1462. COPY IOBLOKS @V306638 01440000
  1463. COPY IOER @V306638 01441000
  1464. COPY RBLOKS @V306638 01442000
  1465. COPY SAVE @V306638 01443000
  1466. COPY SPOOL @V306638 01444000
  1467. COPY NPRTBL @V60B9BA 01445000
  1468. COPY UDIRECT @V306638 01446000
  1469. COPY VBLOKS @V306638 01447000
  1470. COPY VMBLOK @V306638 01448000
  1471. SPACE 4 01449000
  1472. END 01450000