Table of Contents

DMKCST Source

References

Source Listing

DMKCST.ASSEMBLE.txt
  1. CST TITLE 'DMKCST (CP) VM/370 - RELEASE 6' 00001000
  2. ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00002000
  3. *. 00003000
  4. * MODULE NAME - 00004000
  5. * 00005000
  6. * DMKCST 00006000
  7. * 00007000
  8. * FUNCTION - 00008000
  9. * 00009000
  10. * DMKCST CONTAINS CERTAIN SPOOLING COMMAND FUNCTIONS AVAILABLE 00010000
  11. * TO CLASS G USERS. 00011000
  12. * 00012000
  13. * ATTRIBUTES - 00013000
  14. * 00014000
  15. * REENTRANT, PAGEABLE, CALLED VIA SVC 00015000
  16. * 00016000
  17. * ENTRY POINTS - 00017000
  18. * 00018000
  19. * DMKCSTAG - TAG COMMAND 00019000
  20. * 00020000
  21. * ENTRY CONDITIONS - 00021000
  22. * 00022000
  23. * GPR9 = ADDRESS OF THE COMMAND LINE BUFFER; MUST BE PRESERVED 00023000
  24. * FOR CALLS TO DMKSCNFD 00024000
  25. * GPR12 = ADDRESS OF ENTRY POINT 00025000
  26. * GPR13 = ADDRESS OF SAVEAREA 00026000
  27. * 00027000
  28. * EXIT CONDITIONS - 00028000
  29. * 00029000
  30. * NORMAL - 00030000
  31. * GPR2 = 0 00031000
  32. * 00032000
  33. * ERROR - 00033000
  34. * 00034000
  35. * GPR2 = CONTAINS THE BINARY MESSAGE NUMBER 00035000
  36. * - EITHER AN OPTION IS ILLEGAL OR SOME CONDITION 00036000
  37. * EXISTS THAT MAKES IT IMPOSSIBLE TO EXECUTE THE COMMAND 00037000
  38. * A MESSAGE IS TYPED TO DESCRIBE THE ERROR; THE ERROR 00038000
  39. * MESSAGES THAT MAY OCCUR ARE LISTED WITH EACH COMMAND 00039000
  40. EJECT 00040000
  41. * 00041000
  42. * CALLS TO OTHER ROUTINES - 00042000
  43. * 00043000
  44. * DMKFREE - TO OBTAIN A BLOCK FROM FREE STORAGE 00044000
  45. * DMKFRET - TO RETURN STORAGE 00045000
  46. * DMKSCNVU - LOCATE A VDEVBLOK 00046000
  47. * DMKSCNVN - TO GET A DEVICE TYPE EBCDIC NAME 00047000
  48. * DMKSCNVD - TO GET A VIRTUAL DEVICE ADDRESS (CUU FORM) 00048000
  49. * DMKSCNFD - SCAN THE COMMAND LINE BUFFER FOR OPTIONS 00049000
  50. * DMKCVTDB - TO CONVERT EBCDIC SPOOL ID TO BINARY 00050000
  51. * DMKCVTHB - TO CONVERT HEX ADDRESS OPTIONS TO BINARY 00051000
  52. * DMKCVTBH - TO CONVERT BINARY DEVICE ADDRESS TO EBCDIC 00052000
  53. * DMKPGTVG - TO RESERVE A PAGE OF SYSTEM VIRTUAL STORAGE 00053000
  54. * DMKPGTVR - TO RELEASE A PAGE OF SYSTEM VIRTUAL STORAGE 00054000
  55. * DMKRPAGT - TO READ A SPOOL FILE PAGE BUFFER 00055000
  56. * DMKRPAPT - TO REWRITE A MODIFIED SPOOL FILE PAGE BUFFER 00056000
  57. * DMKERMSG - WRITE ERROR MESSAGES 00057000
  58. * 00058000
  59. * EXTERNAL REFERENCES - 00059000
  60. * 00060000
  61. * DMKRSPRD - (ARSPRD) READER FILE CHAIN ANCHOR 00061000
  62. * DMKRSPPR - (ARSPPR) PRINTER FILE CHAIN ANCHOR (NOT USED) 00062000
  63. * DMKRSPPU - (ARSPPU) PUNCH FILE CHAIN ANCHOR (NOT USED) 00063000
  64. * 00064000
  65. * TABLES / WORKAREAS - 00065000
  66. * 00066000
  67. * VMBLOK, VDEVBLOK, AND SFBLOK ARE REFERENCED. VSPXBLOK IS 00067000
  68. * REFERENCED, UPDATED, OR DELETED. 00068000
  69. * 00069000
  70. * THE SAVEWRK FIELDS IN THE STANDARD SAVEAREA ARE USED BY THE 00070000
  71. * OPTION PROCESSING SUBROUTINES FOR THE FOLLOWING VALUES - 00071000
  72. * 00072000
  73. * SAVEWRK1 - ADDR OF SYSTEM VIRTUAL STORAGE PAGE 00073000
  74. * SAVEWRK2,3 - UNUSED 00074000
  75. * SAVEWRK4 - ADDR OF 24 BYTE FREE STORAGE WORK BUFFER 00075000
  76. * SAVEWRK5 - SAVE AREA FOR R0 IN EXIT ROUTINE 00076100
  77. * SAVEWRK6,7 - SAVE AREA FOR R0,R1 SCAN VALUES 00077000
  78. * SAVEWRK8 - SAVE AREA FOR R5 00077700
  79. * SAVEWRK9 - SAVEAREA TO SAVE SFBFLAG 00078400
  80. * 00079000
  81. * REGISTER USAGE - 00080000
  82. * 00081000
  83. * ALL SUBROUTINES IN THE MODULE CONFORM GENERALLY TO THIS USAGE; 00082000
  84. * ANY INDIVIDUAL DEVIATIONS OR EXTENSIONS ARE LISTED WITH THE 00083000
  85. * COMMAND DESCRIPTION 00084000
  86. * 00085000
  87. * GPR0 = LENGTH OF OPTION - RETURNED FROM DMKSCNFD 00086000
  88. * GPR1 = ADDRESS OF OPTION - RETURNED FROM DMKSCNFD 00087000
  89. * GPR2 = SCRATCH 00088000
  90. * GPR3 = INTERNAL LINKAGE - 2ND LEVEL 00089000
  91. * GPR4 = INTERNAL LINKAGE - 1ST LEVEL 00090000
  92. * GPR5 = DEVICE TYPE FLAGS - LOGICAL SUM OF TYPES 00091000
  93. * GPR6 = VSPXBLOK BASE 00092000
  94. * GPR7 = SFBLOK BASE 00093000
  95. * GPR8 = VDEVBLOK BASE 00094000
  96. * GPR9 = INPUT COMMAND LINE ADDRESS 00095000
  97. * GPR10 = REMAINING DEVICE COUNT 00096000
  98. * GPR11 = VMBLOK BASE 00097000
  99. * GPR12 = DMKCST BASE 00098000
  100. * GPR13 = SAVEAREA BASE 00099000
  101. * GPR14 = EXTERNAL LINKAGE 00100000
  102. * GPR15 = EXTERNAL LINKAGE 00101000
  103. * 00102000
  104. * NOTES - 00103000
  105. * 00104000
  106. * NONE 00105000
  107. * 00106000
  108. * OPERATION - 00107000
  109. * 00108000
  110. * THE VARIOUS FORMS OF THE TAG COMMAND ARE PROCESSED BY THIS 00109000
  111. * MODULE. THE TAG COMMAND PROCESSOR IS ENTERED VIA A CALL 00110000
  112. * FROM DMKCFM. THE KEYWORD OPTIONS ARE INSPECTED TO DETERMINE 00111000
  113. * THE FUNCTION WHICH IS TO BE PERFORMED. THE POSSIBLE FORMS 00112000
  114. * ARE TAG DEV, TAG FILE, TAG QUERY DEV, AND TAG QUERY FILE. 00113000
  115. * EACH FORM IMPLIES A REQUEST FOR A DIFFERENT FUNCTION, WHICH 00114000
  116. * IS PERFORMED BY A SEPARATE FUNCTION PROCESSOR. ONLY ONE 00115000
  117. * FUNCTION MAY BE REQUESTED BY A SINGLE TAG COMMAND LINE. 00116000
  118. * THE SEPARATE FUNCTION PROCESSORS ISSUE CALLS TO THE INTERNAL 00117000
  119. * AND EXTERNAL SUBROUTINES TO EXECUTE THE COMMANDS. THE 00118000
  120. * LOGIC USED BY EACH OF THESE FUNCTION PROCESSORS IS DESCRIBED 00119000
  121. * AT THE START OF THE PROGRAMMING FOR EACH, BELOW. 00120000
  122. * 00121000
  123. * OPTION PROCESSORS - 00122000
  124. * 1. GETYPE - SAVE THE FILE TYPE (OR DEVICE TYPE) 00123000
  125. * 2. GETFILE - LOCATE THE SPOOL FILE ID, CONVERT IT, AND 00124000
  126. * CALL GETSFB TO LOCATE THE FILE'S SFB 00125000
  127. * 00126000
  128. * LIST SCANNING ROUTINES - 00127000
  129. * 1. GETDEVIC - LOCATE THE NEXT VDEVBLOK OF THE APPROPRIATE 00128000
  130. * ADDRESS, CLASS AND TYPE (2ND LEVEL ROUTINE) 00129000
  131. * 2. GETSFB - SCAN THE SPOOL READER FILE CHAIN TO LOCATE 00130000
  132. * A FILE SPECIFIED BY A SPOOL ID (2ND LEVEL 00131000
  133. * ROUTINE) 00132000
  134. * 00133000
  135. *. 00134000
  136. EJECT 00135000
  137. COPY OPTIONS @V293598 00136000
  138. EJECT 00137000
  139. COPY LOCAL OPTIONS @V293598 00138000
  140. EJECT 00139000
  141. DMKCST CSECT @V293598 00140000
  142. SPACE 3 00141000
  143. EXTRN DMKCVTBH,DMKCVTDB,DMKCVTHB @V293598 00142000
  144. EXTRN DMKERMSG @V293598 00143000
  145. EXTRN DMKPGTVG,DMKPGTVR @V293598 00144000
  146. EXTRN DMKRPAGT,DMKRPAPT @V293598 00145000
  147. EXTRN DMKSCNFD,DMKSCNVD,DMKSCNVN,DMKSCNVU @V293598 00146000
  148. SPACE 3 00147000
  149. USING PSA,R0 @V293598 00148000
  150. USING SFBLOK,R7 @V293598 00149000
  151. USING VDEVBLOK,R8 @V293598 00150000
  152. USING BUFFER,R9 @V293598 00151000
  153. USING VMBLOK,R11 @V293598 00152000
  154. USING SAVEAREA,R13 @V293598 00153000
  155. SPACE 2 00154000
  156. ID DC CL8'DMKCST' MODULE NAME @V293598 00155000
  157. EJECT 00156000
  158. *. 00157000
  159. * 00158000
  160. * SUBROUTINE NAME - 00159000
  161. * 00160000
  162. * DMKCSTAG 00161000
  163. * 00162000
  164. * FUNCTION - 00163000
  165. * 00164000
  166. * TO SPECIFY OR QUERY THE TAG APPLICATION DATA FOR A DEVICE 00165000
  167. * OR CLASS OF DEVICES, OR FOR A READER FILE. THE DEVICE(S) 00166000
  168. * MAY BE SPECIFIED BY ADDRESS OR GENERIC TYPE; THE FILE MUST 00167000
  169. * BE SPECIFIED BY SPOOL ID. FOR A TAG SPECIFICATION COMMAND 00168000
  170. * THE COMMAND LINE CONTENT FOLLOWING THE DEVICE TYPE OPTION 00169000
  171. * BECOMES THE NEW TAG DATA, AND IT IS NOT INTERPRETED OR MODI- 00170000
  172. * FIED BY THIS ROUTINE. 00171000
  173. * 00172000
  174. * COMMAND LINE FORMAT - 00173000
  175. * 00174000
  176. * +-----+-----------------------------------------+ 00175000
  177. * | TAG | DEV PRINTER <TAG APPLICATION DATA> | 00176000
  178. * | | PUNCH | 00177000
  179. * | | CONSOLE | 00178000
  180. * | | VADDR | 00179000
  181. * | | | 00180000
  182. * | | FILE SPOOLID <TAG APPLICATION DATA> | 00181000
  183. * | | | 00182000
  184. * | | QUERY DEV PRINTER | 00183000
  185. * | | PUNCH | 00184000
  186. * | | CONSOLE | 00185000
  187. * | | VADDR | 00186000
  188. * | | | 00187000
  189. * | | FILE SPOOLID | 00188000
  190. * +-----+-----------------------------------------+ 00189000
  191. * 00190000
  192. * PRINTER PUNCH CONSOLE 00191000
  193. * P PRT PU PCH CON 00192000
  194. * 00193000
  195. * 00194000
  196. * OPERATION - 00195000
  197. * 00196000
  198. * 1. CALL DMKSCNFD TO LOCATE THE FIRST OPTION REQUEST; 00197000
  199. * IF IT IS MISSING, EXIT GIVING MSG003E. 00198000
  200. * 2. IF THE FIRST OPTION IS DEV OR FILE, PASS CONTROL TO 00199000
  201. * THE CORRESPONDING PROCESSING ROUTINE. 00200000
  202. * 3. IF THE FIRST OPTION IS NOT QUERY, EXIT GIVING MSG003E. 00201000
  203. * 4. CALL DMKSCNFD TO LOCATE THE SECOND OPTION REQUEST; 00202000
  204. * IF IT IS MISSING, EXIT GIVING MSG003E. 00203000
  205. * 5. IF THE SECOND OPTION IS DEV OR FILE, PASS CONTROL TO 00204000
  206. * THE CORRESPONDING QUERY PROCESSING ROUTINE. 00205000
  207. * 6. IF THE SECOND OPTION IS NEITHER DEV OR FILE, EXIT 00206000
  208. * GIVING MSG003E. 00207000
  209. * 00208000
  210. EJECT 00209000
  211. * RESPONSES - 00210000
  212. * 00211000
  213. * THE FOLLOWING ARE TYPICAL RESPONSES FOR THE TAG QUERY 00212000
  214. * COMMAND FORM PROCESSED BY THIS SUBROUTINE. XXX DENOTES 00213000
  215. * A VIRTUAL DEVICE ADDRESS. 00214000
  216. * 00215000
  217. * TAG QUERY DEV 00216000
  218. * CONS XXX TAG: 00217000
  219. * PRT XXX TAG: 00218000
  220. * PUN XXX TAG: 00219000
  221. * 00220000
  222. * (EACH OF THE ABOVE RESPONSES IS FOLLOWED BY A LINE CONTAINING 00221000
  223. * THE REFERENCED DEVICE'S TAG AS IT IS CURRENTLY SET.) 00222000
  224. * 00223000
  225. * TAG NOT SET 00224000
  226. * 00225000
  227. * 00226000
  228. * TAG QUERY FILE 00227000
  229. * 00228000
  230. * (IF A NONBLANK TAG IS SET FOR THE SPECIFIED FILE, THE 00229000
  231. * RESPONSE IS A LINE CONTAINING THE FILE'S TAG AS CURRENTLY 00230000
  232. * SET.) 00231000
  233. * 00232000
  234. * (TAG BLANK) 00233000
  235. * (TAG MISSING) 00234000
  236. * 00235000
  237. * 00236000
  238. * ERROR MESSAGES - 00237000
  239. * 00238000
  240. * DMKCST003E INVALID OPTION - (OPTION) 00239000
  241. * DMKCST006E INVALID DEVICE TYPE - (ADDR) 00240000
  242. * DMKCST022E VADDR MISSING OR INVALID 00241000
  243. * DMKCST026E OPERAND MISSING OR INVALID 00242000
  244. * DMKCST027E SPOOLID MISSING OR INVALID 00243000
  245. * DMKCST040E DEV (ADDR) DOES NOT EXIST 00244000
  246. * DMKCST042E SPOOLID (ID) DOES NOT EXIST 00245000
  247. * 00246000
  248. * SPOOL (PAGING) ERROR (WITH R2 RETURN CODE = 429) 00247000
  249. *. 00248000
  250. EJECT 00249000
  251. DMKCSTAG RELOC @V293598 00250000
  252. SPACE 00251000
  253. XC SAVEWRK1(4),SAVEWRK1 CLEAR SAVEWRK1 @V293598 00252000
  254. XC SAVEWRK2(32),SAVEWRK2 CLEAR SAVEWRK2-9 @V293598 00253000
  255. AG01 CALL DMKSCNFD LOCATE OPTION REQUEST @V293598 00254000
  256. BNZ MSG026E OPERAND MISSING OR INVALID @V293598 00255000
  257. LR R14,R0 COUNT @V293598 00256000
  258. BCTR R14,0 -1 @V293598 00257000
  259. C R0,F2 COUNT LESS THAT 2 ?? @V293598 00258000
  260. BL MSG003E YES - INVALID OPTION @V293598 00259000
  261. EX R14,CLCDEV DOES IT SAY DEV ?? @V293598 00260000
  262. BE TD01 YES, TAG SPECIFIED DEVICE(S)@V293598 00261000
  263. EX R14,CLCFILE DOES IT SAY FILE ?? @V293598 00262000
  264. BE TF01 YES, TAG THE SPECIFIED FILE @V293598 00263000
  265. EX R14,CLCQUERY DOES IT SAY QUERY ?? @V293598 00264000
  266. BNE MSG003E INVALID OPTION IF NOT @V293598 00265000
  267. AG02 CALL DMKSCNFD LOCATE NEXT OPTION PARAMATER@V293598 00266000
  268. BNZ MSG026E NO GOOD IF IT IS MISSING @V293598 00267000
  269. C R0,F2 AT LEAST TWO CHARS LONG ?? @V293598 00268000
  270. BL MSG003E NO GOOD IF IT IS NOT @V293598 00269000
  271. LR R14,R0 LNGTH OF SPECIFIED PARAMETER@V293598 00270000
  272. BCTR R14,0 DECREMENT COUNT FOR CHAR OP @V293598 00271000
  273. EX R14,CLCDEV DOES IT SAY 'DEV ' ?? @V293598 00272000
  274. BE QD01 YEP - PROCESS A DEVICE QUERY@V293598 00273000
  275. EX R14,CLCFILE DOES IT SAY 'FILE ' ?? @V293598 00274000
  276. BE QF01 YEP - PROCESS A FILE QUERY @V293598 00275000
  277. B MSG003E OTHERWISE INVALID OPTION @V293598 00276000
  278. EJECT 00277000
  279. *. 00278000
  280. * OPERATION OF PROCESSOR FOR TAG DEV - 00279000
  281. * 00280000
  282. * 1. CALL GETYPE; IF TYPE = 'ALL', OR IF DEVICE TYPE IS NOT 00281000
  283. * CONSOLE OR SPOOL OUTPUT, EXIT GIVING MSG006E. 00282000
  284. * 2. CALL DMKSCNFD TO LOCATE THE START OF THE NEW TAG DATA; 00283000
  285. * IF PRESENT, CALCULATE AND VALIDATE THE TAG DATA BYTE 00284000
  286. * COUNT, AND STORE THE TAG BYTE COUNT AND DATA ADDRESS IN 00285000
  287. * SAVEWRK6 AND SAVEWRK7, RESPECTIVELY. 00286000
  288. * 3. IF NEW TAG DATA HAS BEEN SPECIFIED, GO TO STEP 6. 00287300
  289. * 4. IF OLD VSPXBLOK IS LONGER THAN MINIMUM, GET A SHORT 00287600
  290. * ONE, MOVE IN THE OLD HEADER INFO AND FRET THE OLD ONE. 00287900
  291. * 5. GO TO STEP 8. 00288200
  292. * 6. GET A NEW VSPXBLOK WHICH IS LONG ENOUGH FOR THE NEW 00288500
  293. * TAG INFORMATION, MOVE IN THE OLD HEADER INFO 00288800
  294. * AND FRET THE OLD ONE. 00289100
  295. * 7. MOVE THE NEW TAG DATA AND TAG LENGTH INTO THE VSPXBLOK. 00289400
  296. * 8. CALL GETDEVIC; IF LAST DEVICE, EXIT; OTHERWISE GO TO 00289700
  297. * STEP 3. 00302000
  298. *. 00303000
  299. SPACE 3 00304000
  300. TD01 SR R6,R6 INDICATE POSSIBLE VADDR @V293598 00305000
  301. BAL R4,GETYPE GET DEVICE TYPE @V293598 00306000
  302. SPACE 00307000
  303. TD02 EX R5,CLIALL TYPE = ALL ?? @V293598 00308000
  304. BE MSG006E YES - INVALID TYPE @V293598 00309000
  305. TD03 TM VDEVTYPC,CLASURO OUTPUT TYPE DEVICE ?? @V293598 00310000
  306. BO TD04 O.K. IF U.R. OUPTUT DEVICE @V293598 00311000
  307. TM VDEVTYPC,CLASTERM IS IT A TERMINAL DEVICE ?? @V293598 00312000
  308. BNO MSG006E NO GOOD IF IT ISN'T @V293598 00313000
  309. CLI VDEVTYPE,TYP3210 IS IT A VIRTUAL CONSOLE ?? @V293598 00314000
  310. BNE MSG006E NO - INVALID DEVICE TYPE @V293598 00315000
  311. SPACE 00316000
  312. TD04 MVC SAVEWRK6(4),ZEROES INIT TAG DATA COUNT TO ZERO @V293598 00317000
  313. ST R5,SAVEWRK8 SAVE R5 -- NEED A SCRATCH @VA05033 00317500
  314. CALL DMKSCNFD CALL SCN TO GET PAST BLANKS @VA05013 00317625
  315. BC 2,TD05A IF NO TAG, GO RESET OLD ONE @VA05013 00317750
  316. LR R3,R1 POINT R3 TO BEGINNING OF TAG @VA05013 00317875
  317. L R4,BUFCNT GET REMAINING TAG COUNT @VA05013 00318000
  318. ALR R4,R0 ADD IN LENGTH OF 1ST TOKEN @VA05013 00318125
  319. STM R3,R4,BUFNXT POINT BUFFER TO BEG. OF TAG @VA05013 00318250
  320. LTR R5,R4 COUNT = 0 ? @VA04461 00318400
  321. BNP TD05A YES, RESET OLD TAGS @VA05033 00318810
  322. LA R2,L'VSPXTAG MAX TAG CHARACTER COUNT @VA04461 00319200
  323. CLR R5,R2 DATA LEFT GREATER THAN MAX? @VA04461 00319600
  324. BNH TD05 NO, USE COUNT AS IS @VA04461 00320000
  325. LR R5,R2 YES, SCAN ONLY MAXIMUN @VA04461 00320400
  326. TD05 LR R2,R3 SAVE START ADDRESS @VA04461 00320800
  327. LR R1,R5 SAVE DATA LENGTH @VA04461 00321200
  328. TDSCANST CLI 0(R3),X'15' LOGICAL LINE END ? @VA04461 00321600
  329. BE TDSCANE YES, COMPUTE TEXT LENGTH @VA04461 00322000
  330. LA R3,1(,R3) NO, POINT TO NEXT TEXT BYTE @VA04461 00322400
  331. BCTR R4,R0 DECREMENT REAL BUFFER LENGTH AVA04461 00322800
  332. BCT R5,TDSCANST LOOP THROUGH TEXT LENGTH @VA04461 00323200
  333. TDSCANE STM R3,R4,BUFNXT SAVE UPDATED BUFFER ADDRESS @VA04461 00323600
  334. ST R2,SAVEWRK7 SAVE TAG START ADDRESS @VA04461 00324000
  335. SR R1,R5 CALCULATE TAG DATA LENGTH @VA04461 00324400
  336. ST R1,SAVEWRK6 AND SAVE IT @VA04461 00324800
  337. SPACE 00325500
  338. TD05A L R5,SAVEWRK8 RESTORE R5 FOR LATER TEST @VA05033 00326200
  339. TD06 L R6,VDEVEXTN BASE FOR OLD XBLOK @V293598 00327000
  340. CLI SAVEWRK6+3,X'00' ANY NEW TAG DATA ?? @V293598 00328000
  341. BNE TD08 YES - MAKE NEW XBLOK @V293598 00329000
  342. SPACE 00332000
  343. USING VSPXBLOK,R6 DEFINE OLD XBLOK ADDRESSING @V293598 00333000
  344. SPACE 00334000
  345. CLI VSPXLEN,VSPXSIZ1 ALREADY AT MINIMUM? @VA09273 00335000
  346. BE TD11 XFER IF SO @VA09273 00335500
  347. LA R0,VSPXSIZ1 GET A MINIMUM LENGTH BLOCK @VA09273 00336000
  348. CALL DMKFREE GET THE STORAGE @VA09273 00336500
  349. MVC 0(VSPXSIZ1*8,R1),VSPXBLOK MOVE IN OLD HDR @VA09273 00337000
  350. MVI VSPXTGLN-VSPXBLOK(R1),X'00' ZERO TAG LENGTH @VA09273 00337500
  351. STC R0,VSPXLEN-VSPXBLOK(R1) LENGTH OF THE BLOCK @VA09273 00338000
  352. ST R1,VDEVEXTN THE NEW VSPXBLOK @VA09273 00338500
  353. SR R0,R0 GET THE LENGTH @VA09273 00339000
  354. IC R0,VSPXLEN OF THE OLD ONE @VA09273 00339500
  355. LR R1,R6 ADDRESS OF THE OLD ONE @VA09273 00340000
  356. CALL DMKFRET FRET THE STORAGE @VA09273 00340500
  357. B TD11 GO LOOK AT NEXT DEVICE @VA09273 00341000
  358. SPACE 00341500
  359. TD08 LA R0,VSPXSIZ1*8+7 HEADER LENGTH @VA09273 00342000
  360. AL R0,SAVEWRK6 TAG LENGTH @VA09273 00342500
  361. SRL R0,3 CONVERT TO DOUBLEWORDS @VA09273 00343000
  362. CALL DMKFREE STORAGE FOR NEW VSPXBLOK @VA09273 00343500
  363. MVC 0(VSPXSIZ1*8,R1),VSPXBLOK MOVE IN OLD HDR @VA09273 00344000
  364. STC R0,VSPXLEN-VSPXBLOK(R1) LGTH OF NEW VSPXBLOK @VA09273 00344500
  365. MVC VSPXTGLN-VSPXBLOK(1,R1),SAVEWRK6+3 NEW TAG LGTH @VA09273 00345000
  366. ST R1,VDEVEXTN SAVE ADDRESS IN VDEVBLOK @VA09273 00345500
  367. SR R0,R0 PREPARE TO FRET OLD ONE @VA09273 00346000
  368. IC R0,VSPXLEN OLD LENGTH IN DBLWDS @VA09273 00346500
  369. LR R1,R6 ADDRESS OF OLD ONE @VA09273 00347000
  370. CALL DMKFRET FRET THE STORAGE @VA09273 00347500
  371. L R6,VDEVEXTN RESTORE ADDRESSIBILITY @VA09273 00348000
  372. L R2,SAVEWRK6 NEW TAG DATA COUNT @V293598 00358000
  373. LTR R2,R2 ANY ?? @V293598 00359000
  374. BZ TD11 NEXT DEVICE IF NOT @V60B9BA 00360000
  375. BCTR R2,0 -1 @V293598 00361000
  376. L R3,SAVEWRK7 NEW TAG DATA ADDR @V293598 00362000
  377. EX R2,TDMOVE MOVE IN THE NEW TAG DATA @V293598 00363000
  378. SPACE 00364000
  379. DROP R6 @V293598 00376000
  380. SPACE 00377000
  381. TD11 LTR R5,R5 ANY MORE DEVICES ?? @V293598 00380000
  382. BZ TD12 NO - @V293598 00381000
  383. BAL R3,GETDEVIC GET NEXT DEVICE @V293598 00382000
  384. LTR R10,R10 ALL DONE ?? @V293598 00383000
  385. BNZ TD06 NO - PROCESS THIS DEVICE @V293598 00384000
  386. SPACE 00385000
  387. TD12 B CSTEXIT @V293598 00386000
  388. SPACE 3 00387000
  389. TDMOVE MVC VSPXTAG-VSPXBLOK(0,R6),0(R3) EX TAG DATA MOVE @V60B9BA 00388000
  390. EJECT 00389000
  391. *. 00390000
  392. * OPERATION OF PROCESSOR FOR TAG FILE - 00391000
  393. * 00392000
  394. * 1. CALL GETFILE TO GET THE ADDRESS OF THE REQUESTED FILE'S 00393000
  395. * SPOOL FILE BLOCK; IF THE SPECIFIED ID IS INVALID, OR 00394000
  396. * IF A CORRESPONDING FILE OWNED BY THE CALLER IS NOT FOUND, 00395000
  397. * THE GETFILE OR GETSFB SUBROUTINE WILL EXIT WITH AN ERROR 00396000
  398. * MESSAGE. 00397000
  399. * 2. CALL DMKPGTVR TO RESERVE A PAGE OF SYSTEM VIRTUAL STORAGE 00398000
  400. * TO BE USED AS A BUFFER FOR THE SPOOL DATA BLOCK WHICH 00399000
  401. * CONTAINS THE TAG RECORD. 00400000
  402. * 3. READ THE FIRST SPOOL DATA BLOCK BY CALLING DMKRPAGT; IF 00401000
  403. * AN ERROR OCCURS, ISSUE AN ERROR MESSAGE AND EXIT. 00402000
  404. * 4. INSPECT TO SEE THAT THE FIRST SPOOL RECORD CONTAINS A 00403000
  405. * DATA FIELD; QUIT AND EXIT IF IT DOES NOT. 00404000
  406. * 5. CLEAR THE EXISTING TAG FIELD TO BLANKS. 00405000
  407. * 6. CALL DMKSCNFD TO LOCATE THE NEW TAG DATA; IF NONE IS 00406000
  408. * FOUND, LEAVE THE SPOOL FILE TAG RECORD BLANK AND GO 00407000
  409. * TO STEP 8. 00408000
  410. * 7. MOVE THE NEW TAG DATA TO THE SPOOL FILE TAG RECORD, 00409000
  411. * TRUNCATING ON THE RIGHT AS NECESSARY. 00410000
  412. * 8. CALL DMKRPAPT TO REWRITE THE MODIFIED SPOOL DATA BLOCK. 00411000
  413. * 9. CALL DMKPGTVR TO RETURN THE SYSTEM VIRTUAL STORAGE PAGE, 00412000
  414. * AND EXIT. 00413000
  415. *. 00414000
  416. SPACE 3 00415000
  417. TF01 BAL R4,GETFILE LOCATE REQUESTED FILE'S SFB @V293598 00416000
  418. SL R8,VMDVSTRT GET VDEVBLOK DISP @VM01086 00417000
  419. CALL DMKPGTVG GOT IT, RESERVE SY VIRT PAGE@V293598 00418000
  420. ST R1,SAVEWRK1 SAVE ADDRESS OF SY VIRT PAGE@V293598 00419000
  421. L R0,SFBSTART DASD ADDR OF FILE'S 1ST BUFR@V293598 00420000
  422. MVC SAVEWRK9(1),SFBFLAG SAVE FLAGS @VA09978 00420100
  423. OI SFBFLAG,SFBINUSE MARK SPOOL FILE BLOCK IN USE @VA09978 00420200
  424. CALL DMKRPAGT,PARM=(BRING+SYSTEM) READ IN 1ST BUFFER@V293598 00421000
  425. BNZ MSG424E PAGING ERROR - QUIT @V305435 00422000
  426. MVC SFBFLAG,SAVEWRK9 RESTORE FLAG IF IT WAS ORIG.ON @VA09978 00422100
  427. AL R8,VMDVSTRT GET VDEVBLOK ADDR @VM01086 00423000
  428. CLI 16(R2),X'03' IS THERE A TAG RECORD? @VA08508 00423300
  429. BNE MSG027E INVALID FILE MESSAGE @VA12943 00423610
  430. CLI 24(R2),X'08' IS THIS REALLY A TAG RECORD? @VA09783 00423750
  431. BNE MSG027E INVALID FILE TYPE @VA12943 00423860
  432. TM 20(R2),SKIP IS THERE A TAG RECORD HERE ?@V293598 00424000
  433. BO MSG027E INVALID FILE @VA12943 00425010
  434. LH R6,22(R2) TAG RECORD DATA LENGTH @V293598 00426000
  435. LR R1,R6 SAVE IT FOR LATER @V293598 00427000
  436. BCTR R1,0 -1 CHAR COUNT FOR CHAR OP @V293598 00428000
  437. BCTR R1,0 & -1 FOR INITIAL BLANK CHAR @V293598 00429000
  438. MVI 28(R2),C' ' BLANK THE FIRST CHARACTER @V293598 00430000
  439. LTR R1,R1 ANY MORE TO DO ?? @V293598 00431000
  440. BM TF02 NOPE - SKIP MOVE @V293598 00432000
  441. EX R1,TFCLEAR CLEAR THE ENTIRE TAG RECORD @V293598 00433000
  442. EJECT 00433325
  443. TF02 EQU * @VA05013 00433650
  444. CALL DMKSCNFD CALL SCN TO GET PAST BLANKS @VA05013 00433975
  445. BC 2,TF04 IF NO TAG, USE OLD BLANKED ONE @VA05013 00434300
  446. LR R3,R1 POINT R3 TO BEGINNING OF TAG @VA05013 00434625
  447. L R4,BUFCNT GET REMAINING TAG COUNT @VA05013 00434950
  448. ALR R4,R0 ADD IN LENGTH OF 1ST TOKEN @VA05013 00435275
  449. STM R3,R4,BUFNXT POINT BUFFER TO BEG. OF TAG @VA05013 00435600
  450. LTR R0,R4 DATA COUNT = 0 ? @VA04461 00436000
  451. BNP TF04 YES @VA04461 00437000
  452. CLR R0,R6 ALL FIT INTO THE RECORD ?? @V293598 00439000
  453. BH TF03 NOPE, TRUNCATE TO MAX RECORD@V293598 00440000
  454. LR R6,R0 OTHERWISE, USE ACTUAL COUNT @V293598 00441000
  455. TF03 LR R5,R3 SAVE DATA ADDRESS @VA04461 00442000
  456. TFSCANST CLI 0(R3),X'15' LOGICAL LINE END? @VA04461 00442200
  457. BE TFSCANE YES, ALL DONE @VA04461 00442400
  458. LA R3,1(,R3) NO, KEEP CHECKING @VA04461 00442600
  459. BCTR R4,R0 DECREMENT REAL DATA LENGTH @VA04461 00442800
  460. BCT R6,TFSCANST LOOP @VA04461 00443000
  461. TFSCANE STM R3,R4,BUFNXT RESTORE BUFFER POINTERS @VA04461 00443200
  462. SR R3,R5 LENGTH FOR MOVE IN R3 @VA04461 00443400
  463. BCTR R3,R0 MINUS ONE MORE @VA04461 00443600
  464. EX R3,TFMOVE EXECUTE DATA MOVE @VA04461 00443800
  465. SPACE 00444000
  466. TF04 L R0,SFBSTART DASD ADDR OF 1ST SPOOL BUFR @V293598 00445000
  467. L R1,SAVEWRK1 ADDR OF SYSTEM VIRTUAL PAGE @V293598 00446000
  468. CALL DMKRPAPT,PARM=SYSTEM WRITE NEW BUFFER TO DASD @V293598 00447000
  469. BNZ MSG424E PAGING ERROR ON WRITE - QUIT @VA09978 00447100
  470. SPACE 00448000
  471. TF05 L R1,SAVEWRK1 ADDR OF SYSTEM VIRTUAL PAGE @V293598 00449000
  472. CALL DMKPGTVR RETURN SYSTEM VIRTUAL PAGE @V293598 00450000
  473. B CSTEXIT AND GO BACK TO DMKCFM @V293598 00451000
  474. SPACE 3 00452000
  475. TFCLEAR MVC 29(0,R2),28(R2) EXECUTED ABOVE TO CLEAR TAG @V293598 00453000
  476. TFMOVE MVC 28(0,R2),0(R5) EXECUTED ABOVE TO RESET TAG @VA04461 00454000
  477. EJECT 00455000
  478. *. 00456000
  479. * OPERATION OF PROCESSOR FOR TAG QUERY DEV - 00457000
  480. * 00458000
  481. * 1. CALL GETYPE TO GET THE FIRST DEVICE TO BE PROCESSED. 00459000
  482. * 2. TEST FOR A VALID DEVICE REQUEST; EXIT WITH AN ERROR 00460000
  483. * MESSAGE IF A VIRTUAL UNIT RECORD OUTPUT DEVICE OR 00461000
  484. * A CONSOLE WAS NOT SPECIFIED. 00462000
  485. * 3. CALL DMKFREE TO RESERVE A 24 BYTE BLOCK OF FREE STORAGE 00463000
  486. * FOR USE AS A MESSAGE BUFFER, AND SAVE ITS ADDRESS IN 00464000
  487. * SAVEWRK4. 00465000
  488. * 4. CALL DMKSCNVD TO GET THE VIRTUAL DEVICE CUU, CONVERT IT 00466000
  489. * TO EBCDIC BY CALLING DMKCVTBH, GET THE DEVICE TYPE NAME 00467000
  490. * BY CALLING DMKSCNVU, AND BUILD THE FIRST DEVICE 00468000
  491. * RESPONSE LINE IN THE FREE STORAGE WORK AREA. 00469000
  492. * 5. CHECK FOR THE EXISTENCE OF A TAG FOR THE FILE; IF 00470000
  493. * NONE EXISTS, AMEND THE FIRST RESPONSE LINE TO REFLECT 00471000
  494. * THE FACT. 00472000
  495. * 6. STACK THE FIRST RESPONSE LINE FOR OUTPUT BY DMKCFM 00473000
  496. * BY CALLING THE STACK SUBROUTINE. 00474000
  497. * 7. IF A TAG EXISTS, STACK IT FOR OUTPUT BY CALLING STACK. 00475000
  498. * 8. IF THERE ARE MORE DEVICES TO BE PROCESSED, GO TO STEP 4. 00476000
  499. * 9. RETURN THE SYSTEM VIRTUAL STORAGE PAGE AND EXIT VIA EXIT1 00477000
  500. * TO RETURN THE FREE STORAGE BUFFER 00478000
  501. *. 00479000
  502. SPACE 3 00480000
  503. QD01 SR R6,R6 INDICATE POSSIBLE VADDR @V293598 00481000
  504. BAL R4,GETYPE GET DEVICE TYPE & 1ST DEVICE@V293598 00482000
  505. SPACE 00483000
  506. EX R5,CLIALL DOES TYPE = 'ALL' ?? @V293598 00484000
  507. BE MSG006E 'ALL' IS INVALID FOR TAG @V293598 00485000
  508. TM VDEVTYPC,CLASURO UNIT RECORD OUTPUT DEVICE ??@V293598 00486000
  509. BO QD02 YES - VALID TYPE @V293598 00487000
  510. TM VDEVTYPC,CLASTERM TERMINAL TYPE ?? @V293598 00488000
  511. BNO MSG006E INVALID TYPE IF NOT @V293598 00489000
  512. CLI VDEVTYPE,TYP3210 DOES TYPE = 'CONSOLE' ?? @V293598 00490000
  513. BNE MSG006E INVALID TYPE IF NOT @V293598 00491000
  514. SPACE 00492000
  515. QD02 LA R0,3 SET TO REQUEST 24 BYTES @V293598 00493000
  516. CALL DMKFREE GET A WORK AREA @V293598 00494000
  517. ST R1,SAVEWRK4 AND SAVE ITS ADDRESS @V293598 00495000
  518. SPACE 00496000
  519. QD03 L R2,SAVEWRK4 RESTORE WORK AREA ADDR @V293598 00497000
  520. CALL DMKSCNVD GET THE VIRTUAL DEVICE CUU @V293598 00498000
  521. BNZ QD04 DEV DISAPPEARED, TRY ANOTHER@V293598 00499000
  522. CALL DMKCVTBH CONVERT TO EBCDIC @V293598 00500000
  523. STCM R1,7,5(R2) STORE IT IN RESPONSE LINE @V293598 00501000
  524. EJECT 00502000
  525. CALL DMKSCNVN GET DEVICE TYPE NAME @V293598 00503000
  526. ST R1,0(R2) PUT THAT IN THE RESPONSE TOO@V293598 00504000
  527. MVI 4(R2),C' ' CLEAR THE OTHER CHAR @V293598 00505000
  528. SPACE 00506000
  529. L R6,VDEVEXTN SPOOL EXTENSION BLOCK ADDR @V293598 00507000
  530. LTR R6,R6 DOES ONE EXIST ?? @V293598 00508000
  531. BZ QD05 NO, RESPONSE = 'TAG NOT SET'@V293598 00509000
  532. SPACE 00510000
  533. USING VSPXBLOK,R6 DEFINE VSPXBLOK ADDRESSING @V293598 00511000
  534. SPACE 00512000
  535. CLI VSPXTGLN,X'00' A TAG IN THE EXTN BLOCK ?? @V293598 00513000
  536. BE QD05 NOPE - 'TAG NOT SET' @V293598 00514000
  537. SPACE 00515000
  538. MVC 8(5,R2),=C' TAG:' SET REMAINDER OF 1ST LINE @V293598 00516000
  539. LA R0,13 1ST RESPONSE LINE CHAR COUNT@V293598 00517000
  540. LR R1,R2 RESPONSE LINE ADDRESS @V293598 00518000
  541. BAL R3,STACK STACK IT FOR FUTURE OUTPUT @V293598 00519000
  542. SR R0,R0 CLEAR FOR INSERT @V293598 00520000
  543. IC R0,VSPXTGLN TAG LENGTH @V293598 00521000
  544. LA R1,VSPXTAG DEVICE TAG DATA ADDRESS @V293598 00522000
  545. BAL R3,STACK STACK THAT LINE NEXT @V293598 00523000
  546. SPACE 00524000
  547. DROP R6 @V293598 00525000
  548. SPACE 00526000
  549. QD04 LTR R5,R5 ANY MORE TO GO ?? @V293598 00527000
  550. BZ CSTEXIT NOPE - ALL DONE @V293598 00528000
  551. BAL R3,GETDEVIC GET THE NEXT DEVICE @V293598 00529000
  552. LTR R10,R10 ARE WE DONE ?? @V293598 00530000
  553. BNZ QD03 NOPE - PROCESS THIS DEVICE @V293598 00531000
  554. B CSTEXIT FREE 24 BYTE AREA AND RETURN@V293598 00532000
  555. SPACE 00533000
  556. QD05 MVC 8(12,R2),=C' TAG NOT SET' RESPOND WITH NO TAG @V293598 00534000
  557. LA R0,20 RESPONSE LINE CHAR COUNT @V293598 00535000
  558. LR R1,R2 RESPONSE LINE ADDRESS @V293598 00536000
  559. BAL R3,STACK STACK THE LINE FOR OUTPUT @V293598 00537000
  560. B QD04 AND LOOK FOR MORE TO DO @V293598 00538000
  561. EJECT 00539000
  562. *. 00540000
  563. * 00541000
  564. * OPERATION OF PROCESSOR FOR TAG QUERY FILE - 00542000
  565. * 00543000
  566. * 1. CALL GETFILE TO GET THE ADDRESS OF THE REQUESTED FILE'S 00544000
  567. * SPOOL FILE BLOCK; IF THE SPECIFIED ID IS INVALID, OR 00545000
  568. * IF A CORRESPONDING FILE OWNED BY THE CALLER IS NOT FOUND, 00546000
  569. * THE GETFILE OR GETSFB SUBROUTINE WILL EXIT WITH AN ERROR 00547000
  570. * MESSAGE. 00548000
  571. * 2. CALL DMKPGTVR TO RESERVE A PAGE OF SYSTEM VIRTUAL STORAGE 00549000
  572. * TO BE USED AS A BUFFER FOR THE SPOOL DATA BLOCK WHICH 00550000
  573. * CONTAINS THE TAG RECORD. 00551000
  574. * 3. READ THE FIRST SPOOL DATA BLOCK BY CALLING DMKRPAGT; IF 00552000
  575. * AN ERROR OCCURS, ISSUE AN ERROR MESSAGE AND EXIT. 00553000
  576. * 4. INSPECT TO SEE THAT THE FIRST SPOOL RECORD CONTAINS A 00554000
  577. * DATA FIELD; IF IT DOES NOT, STACK A 'TAG MISSING' RESPONSE 00555000
  578. * LINE AND GO TO STEP 7. 00556000
  579. * 5. COMPUTE THE LENGTH OF THE TAG RECORD DATA TRUNCATING 00557000
  580. * TRAILING BLANKS. 00558000
  581. * 6. IF SOME NONBLANK TAG RECORD DATA IS FOUND, STACK THE 00559000
  582. * TAG RECORD TEXT FOR OUTPUT USING THE COMPUTED LENGTH; 00560000
  583. * OTHERWISE, STACK A 'TAG BLANK' RESPONSE LINE. 00561000
  584. * 7. CALL DMKPGTVR TO RETURN THE SYSTEM VIRTUAL STORAGE PAGE, 00562000
  585. * AND EXIT. 00563000
  586. *. 00564000
  587. SPACE 3 00565000
  588. QF01 BAL R4,GETFILE LOCATE THE SPOOL FILE BLOCK @V293598 00566000
  589. SL R8,VMDVSTRT GET VDEVBLOK DISP @VM01086 00567000
  590. CALL DMKPGTVG RESERVE A SYS VIRTUAL PAGE @V293598 00568000
  591. ST R1,SAVEWRK1 AND SAVE ITS ADDRESS @V293598 00569000
  592. L R0,SFBSTART DASD @ OF 1ST SPOOL DATA BUF@V293598 00570000
  593. MVC SAVEWRK9(1),SFBFLAG SAVE FLAG @VA09978 00570100
  594. OI SFBFLAG,SFBINUSE MARK SPOOL FILE BLOCK IN USE @VA09978 00570200
  595. CALL DMKRPAGT,PARM=(BRING+SYSTEM) READ IT IN @V293598 00571000
  596. BNZ MSG424E PAGING ERROR - QUIT @V305435 00572000
  597. MVC SFBFLAG,SAVEWRK9 RESTORE FLAG IF IT WAS ORIG.ON @VA09978 00572100
  598. AL R8,VMDVSTRT GET VDEVBLOK ADDR @VM01086 00573000
  599. CLI 16(R2),X'03' IS THERE A TAG RECORD? @VA08508 00573300
  600. BNE QF07 NONE--TAG MISSING @VA08508 00573600
  601. CLI 24(R2),X'08' IS THIS REALLY A TAG RECORD? @VA09783 00573750
  602. BNE QF07 NONE--TAG MISSING. @VA09783 00573850
  603. TM 20(R2),SKIP IS THERE A TAG RECORD HERE ?@V293598 00574000
  604. BO QF07 NOPE - TAG MISSING @V293598 00575000
  605. QF02 LA R1,28(R2) ADDR OF START OF TAG DATA @V293598 00576000
  606. LR R6,R1 SAVE IT FOR LATER @V293598 00577000
  607. AH R6,22(R2) ADDR OF END OF TAG DATA @V293598 00578000
  608. BCTR R6,0 ADDR OF LAST TAG DATA CHAR @V293598 00579000
  609. QF03 CLI 0(R6),C' ' IS THIS CHARACTER BLANK ?? @V293598 00580000
  610. BNE QF04 NO - THIS IS REALLY THE END @V293598 00581000
  611. CLR R6,R1 ANY MORE CHARACTERS LEFT ?? @V293598 00582000
  612. BNH QF06 NOPE - TAG BLANK @V293598 00583000
  613. BCT R6,QF03 MORE TO GO - KEEP LOOKING @V293598 00584000
  614. SPACE 00585000
  615. QF04 SLR R6,R1 NONBLANK TAG DATA COUNT -1 @V293598 00586000
  616. LA R0,1(R6) TOTAL NONBLANK TAG DATA CNT @V293598 00587000
  617. BAL R3,STACK STACK IT FOR LATER OUTPUT @V293598 00588000
  618. EJECT 00589000
  619. QF05 L R1,SAVEWRK1 RESTORE SYS VIRT PAGE ADDR @V293598 00590000
  620. CALL DMKPGTVR RELEASE THE SYS VIRT PAGE @V293598 00591000
  621. B CSTEXIT AND RETURN @V293598 00592000
  622. SPACE 00593000
  623. QF06 LA R1,=C'(TAG BLANK)' SET RESPONSE LINE ADDRESS @V293598 00594000
  624. LA R0,11 AND COUNT @V293598 00595000
  625. BAL R3,STACK AND STACK IT FOR OUTPUT @V293598 00596000
  626. B QF05 RELEASE PAGE AND RETURN @V293598 00597000
  627. SPACE 00598000
  628. QF07 LA R1,=C'(TAG MISSING)' SET RESPONSE LINE ADDRESS @V293598 00599000
  629. LA R0,13 AND COUNT @V293598 00600000
  630. BAL R3,STACK AND STACK IT FOR OUTPUT @V293598 00601000
  631. B QF05 RELEASE PAGE AND RETURN @V293598 00602000
  632. EJECT 00603000
  633. *. 00604000
  634. **************************************** 00605000
  635. * 00606000
  636. * SUBROUTINES 00607000
  637. * 00608000
  638. **************************************** 00609000
  639. * 00610000
  640. * 00611000
  641. * 00612000
  642. * OPERATION OF GETYPE - 00613000
  643. * 00614000
  644. * 1. CALL DMKSCNFD TO LOCATE DEVICE TYPE FIELD 00615000
  645. * 2. IF OPTION = 'READER', 'PRINT', 'PUNCH' OR 'ALL', SET 00616000
  646. * GPR5 = APPROPRIATE DEVICE TYPE. IF OPTION = 'ALL', SET 00617000
  647. * GPR5 EQUAL TO CSTRDR+TYPPRT+TYPPUN; THEN, GO TO STEP 4 00618000
  648. * IF MISSING OR INVALID AND COMMAND IS SPOOL OR CLOSE, 00619000
  649. * EXIT GIVING MSG022E. 00620000
  650. * 3. IF OPTION = VADDR, CALL DMKSCNVU TO LOCATE THE VDEVBLOK, 00621000
  651. * SET GPR5 AND GPR10 = 0, AND EXIT 00622000
  652. * 4. IF TYPE WAS NOT VADDR, LOAD GPR8 WITH VMDVSTRT-VDEVSIZE, 00623000
  653. * AND GPR10 WITH VMDVCNT, AND CALL GETDEVIC TO LOCATE THE 00624000
  654. * FIRST DEVICE OF THE CORRECT TYPE 00625000
  655. * 5. EXIT 00626000
  656. *. 00627000
  657. SPACE 3 00628000
  658. GETYPE EQU * @V293598 00629000
  659. SPACE 00630000
  660. GT01 LA R5,CSTRDR+TYPPRT+TYPPUN SET FOR ALL TYPE @V293598 00631000
  661. CALL DMKSCNFD LOCATE DEVICE TYPE FIELD @V293598 00632000
  662. STM R0,R1,SAVEWRK6 SAVE COUNT AND ADDR OF TYPE @V293598 00633000
  663. BZ GT02 -- @V293598 00634000
  664. LTR R6,R6 VIRTUAL ADDRESS POSSIBLE ?? @V293598 00635000
  665. BZ MSG022E YES -- VADDR MISSING @V293598 00636000
  666. B DEVIC NO OPTION DEFAULT TO ALL @V293598 00637000
  667. SPACE 00638000
  668. GT02 EQU * @V293598 00639000
  669. * GPR1 ADDRESS OF TYPE 00640000
  670. LR R14,R0 GET OPTION COUNT @V293598 00641000
  671. BCTR R14,0 -1 @V293598 00642000
  672. C R0,F2 COUNT LENGTH OF 2 @V293598 00643000
  673. BE GT02A VALID FOR PUNCH @V293598 00644000
  674. BL GT02B VALID FOR READER PRINTER @V293598 00645000
  675. EX R14,CLCALL ALL ?? @V293598 00646000
  676. BE DEVIC YES @V293598 00647000
  677. LA R5,CSTCON SET R5 TO CONSOLE TYPE @V293598 00648000
  678. EX R14,CLCCONS CONSOLE ?? @V293598 00649000
  679. BE DEVIC YES -- @V293598 00650000
  680. LA R5,CSTRDR SET R5 TO READER TYPE @V293598 00651000
  681. EX R14,CLCRDR RDR ?? @V293598 00652000
  682. BE DEVIC YES @V293598 00653000
  683. LA R5,TYPPRT PRINTER MASK @V293598 00654000
  684. EX R14,CLCPRT PRT ?? @V293598 00655000
  685. BE DEVIC YES - @V293598 00656000
  686. SPACE 00657000
  687. LA R5,TYPPUN SET GPR5 TO PUNCH TYPE @V293598 00658000
  688. EX R14,CLCPCH PCH ?? @V293598 00659000
  689. BE DEVIC YES @V293598 00660000
  690. GT02A LA R5,TYPPUN PUNCH MASK @V293598 00661000
  691. EX R14,CLCPUN PUNCH ?? @V293598 00662000
  692. BE DEVIC YES - @V293598 00663000
  693. SPACE 00664000
  694. GT02B LA R5,TYPPRT SET GPR5 TO PRINTER TYPE @V293598 00665000
  695. EX R14,CLCPRINT PRINTER ?? @V293598 00666000
  696. BE DEVIC YES - @V293598 00667000
  697. SPACE 00668000
  698. LA R5,CSTRDR TYPE MASK FOR READER @V293598 00669000
  699. EX R14,CLCREAD READER ?? @V293598 00670000
  700. BE DEVIC @V293598 00671000
  701. LTR R6,R6 POSSIBLE VADDR ?? @V293598 00672000
  702. BZ GT03 YES -- @V293598 00673000
  703. B MSG006E NO -- ERROR DMKCST006E @V293598 00674000
  704. SPACE 00675000
  705. GT03 EQU * MUST BE VADDR @V293598 00676000
  706. SPACE 00677000
  707. STM R0,R1,SAVEWRK6 SAVE COUNT AND DEVICE ADDR @V293598 00678000
  708. C R0,F3 COUNT OF 3 OR LESS ?? @V293598 00679000
  709. BH MSG022E VADDR INVALID @V293598 00680000
  710. CALL DMKCVTHB CONVERT TO BINARY @V293598 00681000
  711. BNZ MSG022E INVALID VADDRESS @V293598 00682000
  712. CALL DMKSCNVU LOCATE VDEVBLOK @V293598 00683000
  713. BNZ MSG040E NONEXISTENT UNIT @V293598 00684000
  714. TM VDEVTYPC,CLASURO+CLASTERM OUTPUT OR CON CLASS ? @V293598 00685000
  715. BZ GT03A NO - CHECK INPUT TYPE @V293598 00686000
  716. TM VDEVTYPE,TYPPRT+TYPPUN PRINTER OR PUNCH ?? @V293598 00687000
  717. BNZ GT03B YES -- @V293598 00688000
  718. CLI VDEVTYPE,TYP3210 CONSOLE TYPE ? @V293598 00689000
  719. BE GT03B YES -- @V293598 00690000
  720. B MSG006E INVALID DEVICE TYPE @V293598 00691000
  721. GT03A TM VDEVTYPC,CLASURI INPUT DEVICE TYPE ?? @V293598 00692000
  722. BZ MSG006E NO -- @V293598 00693000
  723. TM VDEVTYPE,TYPRDR READER ?? @V293598 00694000
  724. BZ MSG006E NO -- INVALID DEVICE TYPE @V293598 00695000
  725. GT03B EQU * @V293598 00696000
  726. TM VDEVSTAT,VDEVDED DEDICATED TO REAL DEVICE ?? @V293598 00697000
  727. BO MSG006E YES -- INVALID DEVICE TYPE @V293598 00698000
  728. SR R5,R5 SET GPR5 TO ZERO @V293598 00699000
  729. SR R10,10 SET GPR10 TO ZERO @V293598 00700000
  730. B GT06 RETURN TO CALLER @V293598 00701000
  731. SPACE 2 00702000
  732. DEVIC EQU * HERE TO SET UP FOR GETDEVIC @V293598 00703000
  733. * C R6,FFS NEED VDEVBLOK ADDRESS ?? 00704000
  734. * BE GT05 NO, MUST BE HOLD OR FREE CMD 00705000
  735. GT04 L R8,VMDVSTRT POINTER TO VDEVBLOK TABLE @V293598 00706000
  736. S R8,=A(VDEVSIZE*8) SUBSTRACT BLOK SIZE @V293598 00707000
  737. LH R10,VMDVCNT VDEVICE COUNT @V293598 00708000
  738. LTR R10,R10 ANY DEVICES FOR THIS USER ??@V293598 00709000
  739. BP GT04A YES -- @V293598 00710000
  740. MSG040 LA R2,40 NO -- DOES NOT EXIST @V293598 00711000
  741. B EXIT8 ERROR MSG DMKCST040E @V293598 00712000
  742. GT04A EQU * @V293598 00713000
  743. A R10,F1 INCREASE DEVICE COUNT BY ONE@V293598 00714000
  744. BAL R3,GETDEVIC GET NEXT DEVICE @V293598 00715000
  745. LTR R10,R10 ANY MORE VDEVBLOKS ?? @V293598 00716000
  746. BZ MSG040 NO -- ERROR DMKCST040E @V293598 00717000
  747. B GT06 SET ZERO COND @V293598 00718000
  748. SPACE 00719000
  749. *GT05 L R6,FFS SET 1ST TIME SWITCH FOR GETCHAIN 00720000
  750. * BAL R3,GETCHAIN GET NEXT FILE CHAIN 00721000
  751. SPACE 00722000
  752. GT06 CR R2,R2 SET CC = ZERO @V293598 00723000
  753. BR R4 RETURN TO CALLER @V293598 00724000
  754. SPACE 3 00725000
  755. *. 00726000
  756. * OPERATION OF GETFILE - 00727000
  757. * 00728000
  758. * 1. CALL DMKSCNFD TO LOCATE THE SPOOL ID OPTION IN THE INPUT 00729000
  759. * COMMAND LINE; ISSUE MSG027E AND EXIT IF IT IS MISSING. 00730000
  760. * 2. SAVE THE OPTION SCAN REGISTER CONTENTS IN SAVEWRK6 AND 00731000
  761. * SAVEWRK7. 00732000
  762. * 3. CALL DMKCVTDB TO CONVERT THE EBCDIC DECIMAL SPOOL ID TO 00733000
  763. * BINARY; IF THE SPOOL ID IS INVALID, ISSUE MSG027E AND 00734000
  764. * EXIT. 00735000
  765. * 4. GO DIRECTLY DO GETSFB TO SCAN THE READER FILE QUEUE FOR 00736000
  766. * A FILE WITH A MATCHING SPOOL ID. 00737000
  767. *. 00738000
  768. SPACE 3 00739000
  769. GETFILE EQU * HERE TO DETERMINE SPECIFIED SPOOL ID NUMBER @V293598 00740000
  770. CALL DMKSCNFD GET THE SPOOL ID @V293598 00741000
  771. BNZ MSG027E NO GOOD IF IT IS NOT THERE @V293598 00742000
  772. STM R0,R1,SAVEWRK6 SAVE THE INPUT BUFFER REGS @V293598 00743000
  773. CALL DMKCVTDB CONVERT THE ID TO BINARY @V293598 00744000
  774. BZ GETSFB GO FIND THE SFB IF ID GOOD @V293598 00745000
  775. B MSG027E OTHERWISE, ISSUE ERROR MSG @V293598 00746000
  776. EJECT 00747000
  777. *. 00748000
  778. * OPERATION OF GETDEVIC - 00749000
  779. * 00750000
  780. * 1. UPON ENTRY, THE FOLLOWING REGISTERS MUST BE LOADED - 00751000
  781. * GPR5 = THE DEVICE TYPE TO SEARCH FOR 00752000
  782. * GPR8 = ADDRESS OF VDEVBLOK AT WHICH TO START SEARCH 00753000
  783. * GPR10 = NUMBER OF VDEVBLOKS TO SEARCH 00754000
  784. * 2. ADD VDEVSIZE TO GPR8 AND DECREMENT GPR10; IF GPR10 = 0,EXIT 00755000
  785. * 3. TEST FOR DEVICE CLASS OF UNIT RECORD; IF NOT U/R, GO TO 2 00756000
  786. * 4. EXECUTE TM USING MASK IN GPR5 AGAINST VDEVTYPE; BRANCH 00757000
  787. * ON ONES BACK TO CALLER; OTHERWISE, GO TO STEP 2 00758000
  788. * 5. NOTE THAT GETDEVIC IS A 2ND LEVEL ROUTINE; LINKAGE IS VIA 00759000
  789. * GPR3 00760000
  790. *. 00761000
  791. SPACE 3 00762000
  792. GETDEVIC EQU * HERE TO LOCATE NEXT DEVICE FOR THIS TYPE @V293598 00763000
  793. SPACE 00764000
  794. GD01 EQU * @V293598 00765000
  795. * GPR5 = DEVICE TYPE TO SEARCH FOR 00766000
  796. * GPR8 = ADDRESS OF VDEVBLOK TO START SEARCH 00767000
  797. * GPR10 = NUMBER OF VDEVBLOKS TO SEARCH 00768000
  798. SPACE 00769000
  799. GD02 A R8,=A(VDEVSIZE*8) POINT TO NEXT DEVBLOK @V293598 00770000
  800. BCT R10,GD03 DECREMENT COUNT @V293598 00771000
  801. BR R3 COUNT IS ZERO, RETURN @V293598 00772000
  802. SPACE 00773000
  803. GD03 CLC VDEVADD,FFS ACTIVE DEVICE @V293598 00774000
  804. BE GD02 NO -- @V293598 00775000
  805. TM VDEVSTAT,VDEVDED DEDICATED TO REAL DEVICE ?? @V293598 00776000
  806. BO GD02 YES -- TRY NEXT @V293598 00777000
  807. TM VDEVTYPC,CLASURI INPUT UNIT RECORD ?? @V293598 00778000
  808. BZ GD04 NO - CHECK OUTPUT @V293598 00779000
  809. EX R5,TMRDR VALID READER ?? @V293598 00780000
  810. BCR 7,R3 YES - @V293598 00781000
  811. B GD02 NO - TRY NEXT BLOK @V293598 00782000
  812. SPACE 00783000
  813. GD04 EQU * @V293598 00784000
  814. CLI VDEVTYPC,CLASURO OUTPUT CLASS ?? @V293598 00785000
  815. BNE GD05 NO -- @V293598 00786000
  816. TM VDEVTYPE,TYPPUN+TYPPRT TYPE PUNCH OR PRINTER @V293598 00787000
  817. BZ GD02 NO - @V293598 00788000
  818. EX R5,TMTYPE MATCH SEARCH DEV PUN OR PRT @V293598 00789000
  819. BZ GD02 NO @V293598 00790000
  820. BR R3 YES - @V293598 00791000
  821. SPACE 00792000
  822. GD05 CLI VDEVTYPC,CLASTERM CONSOLE CLASS ? @V293598 00793000
  823. BNE GD02 NO -- GET NEXT DEVICE @V293598 00794000
  824. CLI VDEVTYPE,TYP3210 CONSOLE TYPE ? @V293598 00795000
  825. BNE GD02 NO -- GET NEXT DEVICE @V293598 00796000
  826. EX R5,TMCON CONSOLE TYPE REQUESTED ? @V293598 00797000
  827. BZ GD02 NO -- GET NEXT DEVICE @V293598 00798000
  828. BR R3 RETURN TO CALLER @V293598 00799000
  829. EJECT 00800000
  830. EJECT 00801000
  831. *. 00802000
  832. * OPERATION OF GETSFB - 00803000
  833. * 00804000
  834. * 1. LOAD THE ADDRESS OF THE FIRST FILE IN THE SPOOL READER 00805000
  835. * FILE CHAIN. 00806000
  836. * 2. INSPECT TO SEE IF THERE IS A FILE HERE; IF NOT, ISSUE 00807000
  837. * MSG042E AND EXIT. 00808000
  838. * 3. INSPECT THE FILE TO SEE IF ITS ID MATCHES THE ID PASSED 00809000
  839. * TO GETSFB IN GPR1; IF SO, GO TO STEP 5. 00810000
  840. * 4. LOAD THE ADDRESS OF THE NEXT FILE IN THE SPOOL READER 00811000
  841. * FILE CHAIN, AND GO TO STEP 1. 00812000
  842. * 5. INSPECT THE FILE TO SEE IF ITS OWNER ID MATCHES THE 00813000
  843. * CALLER'S USER ID; IF NOT, GO TO STEP 4. 00814000
  844. * 6. RETURN TO THE CALLER. 00815000
  845. *. 00816000
  846. SPACE 3 00817000
  847. GETSFB EQU * HERE TO LOCATE A PARTICULAR SPOOL FILE @V293598 00818000
  848. L R7,ARSPRD START OF READER FILE CHAIN @V293598 00819000
  849. GS01 LTR R7,R7 IS THERE A FILE HERE ?? @V293598 00820000
  850. BZ MSG042E NO - NO MATCHING FILE FOUND @V293598 00821000
  851. CH R1,SFBFILID IS THIS THE ONE ?? @V293598 00822000
  852. BE GS03 PERHAPS - CHECK THE OWNER ID@V293598 00823000
  853. GS02 L R7,SFBPNT ADDR OF NEXT SFB IN CHAIN @V293598 00824000
  854. B GS01 GO INSPECT THIS ONE @V293598 00825000
  855. SPACE 00826000
  856. GS03 CLC SFBUSER(8),VMUSER DOES THE CALLER OWN THE FILE@V293598 00827000
  857. BCR 8,R4 YES - GO BACK TO PROCESS IT @V293598 00828000
  858. B GS02 OTHERWISE LOOK SOME MORE @V293598 00829000
  859. EJECT 00830000
  860. *. 00831000
  861. * OPERATION OF STACK - 00832000
  862. * 00833000
  863. * 1. COMPUTE THE AMOUNT OF STORAGE NEEDED TO HOLD THE MESSAGE 00834000
  864. * TO BE STACKED, AND CALL DMKFREE TO RESERVE THAT AMOUNT 00835000
  865. * FROM FREE STORAGE. 00836000
  866. * 2. BUILD THE MESSAGE ELEMENT BY STORING THE ELEMENT SIZE, 00837000
  867. * MESSAGE CHARACTER COUNT, AND MESSAGE TEXT IN THE RESERVED 00838000
  868. * FREE STORAGE. 00839000
  869. * 3. STARTING AT THE ANCHOR IN THE VMBLOK, SCAN THE CONSOLE 00840000
  870. * OUTPUT STACK TO FIND THE END; ENQUEUE THE NEW ELEMENT 00841000
  871. * AT THE END OF THE STACK, AND RETURN. 00842000
  872. * 00843000
  873. * (THE STACKED LINES WILL BE PRINTED BY DMKCFM ON RETURN 00844000
  874. * TO THAT ROUTINE FOLLOWING THE COMPLETION OF COMMAND 00845000
  875. * PROCESSING.) 00846000
  876. *. 00847000
  877. SPACE 3 00848000
  878. STACK EQU * HERE TO STACK CONSOLE OUTPUT LINES @V293598 00849000
  879. LR R4,R0 GET SIZE OF DATA @V293598 00850000
  880. LR R2,R1 SET DATA ADDRESS @V293598 00851000
  881. LA R0,7(R4) ROUND UP TO DOUBLE WORD @V293598 00852000
  882. SRL R0,3 GET SIZE IN DOUBLE WORDS @V293598 00853000
  883. A R0,F1 ONE MORE FOR CHAINING @V293598 00854000
  884. CALL DMKFREE GET BUFFER @V293598 00855000
  885. STH R4,4(R1) SAVE LINE SIZE @V293598 00856000
  886. STH R0,6(R1) SAVE BUFFER SIZE @V293598 00857000
  887. BCTR R4,0 DECREMENT FOR CHAR OP @V293598 00858000
  888. EX R4,STMOVE MOVE DATA TO STACK @V293598 00859000
  889. SR R0,R0 ZERO @V293598 00860000
  890. ST R0,0(R1) CLEAR POINTER @V293598 00861000
  891. LA R2,VMSTKO GET OUTPUT STACK POINTER @V293598 00862000
  892. STLOOP L R4,0(R2) GET POINTER TO STACK BUFFER @V293598 00863000
  893. LTR R4,R4 TEST FOR END OF CHAIN @V293598 00864000
  894. BZ STCHAIN FOUND END, CHAIN THIS BUFFER@V293598 00865000
  895. LR R2,R4 POINT TO THIS BUFFER @V293598 00866000
  896. B STLOOP LOOP TO FIND THE END @V293598 00867000
  897. SPACE 00868000
  898. STCHAIN ST R1,0(R2) CHAIN AT END @V293598 00869000
  899. BR R3 RETURN @V293598 00870000
  900. * 00871000
  901. STMOVE MVC 8(0,R1),0(R2) EX FOR STACK BUFFER MOVE @V293598 00872000
  902. EJECT 00873000
  903. **************************************** 00874000
  904. * 00875000
  905. * ERROR EXITS FROM DMKCST 00876000
  906. * 00877000
  907. **************************************** 00878000
  908. SPACE 2 00879000
  909. MSG003E EQU * HERE IF INVALID OPTION FOR THIS COMMAND @V293598 00880000
  910. LA R2,003 ERROR MSG DMKCST003E @V293598 00881000
  911. B EXIT8 EXIT TO ERROR MODULE @V293598 00882000
  912. SPACE 2 00883000
  913. MSG006E EQU * HERE IF DEVICE TYPE IS INVALID @V293598 00884000
  914. LA R2,006 ERROR MSG DMKCST006E @V293598 00885000
  915. LM R0,R1,SAVEWRK6 COUNT & ADDR OF INVALID TYPE@V293598 00886000
  916. B EXIT8 EXIT TO ERROR MODULE @V293598 00887000
  917. SPACE 2 00888000
  918. MSG022E EQU * HERE IF VIRTUAL ADDRESS MISSING OR @V293598 00889000
  919. * 00890000
  920. LA R2,022 ERROR MSG DMKCST022E @V293598 00891000
  921. B EXIT8R1 .. @V293598 00892000
  922. SPACE 2 00893000
  923. MSG026E EQU * HERE IF OPERAND MISSING OR INVALID @V293598 00894000
  924. LA R2,026 ERROR MSG DMKCST026E @V293598 00895000
  925. B EXIT8R1 .. @V293598 00896000
  926. SPACE 2 00897000
  927. MSG027E EQU * HERE IF SPOOL ID MISSING OR INVALID @V293598 00898000
  928. LA R2,027 ERROR MSG DMKCST027E @V293598 00899000
  929. B EXIT8R1 .. @V293598 00900000
  930. SPACE 2 00901000
  931. MSG040E EQU * HERE IF DEVICE DOES NOT EXIST @V293598 00902000
  932. LA R2,040 ERROR MSG DMKCST040E @V293598 00903000
  933. LM R0,R1,SAVEWRK6 COUNT AND ADDRESS OF OPTION @V293598 00904000
  934. B EXIT8 @V293598 00905000
  935. SPACE 2 00906000
  936. MSG042E EQU * HERE IF SPOOL FILE DOES NOT EXIST @V293598 00907000
  937. LA R2,042 ERROR MSG DMKCST042E @V293598 00908000
  938. LM R0,R1,SAVEWRK6 COUNT & ADDRESS OF SPOOL ID @V293598 00909000
  939. B EXIT8 @V293598 00910000
  940. SPACE 2 00911000
  941. MSG424E EQU * HERE ON PAGING ERROR @V305435 00912000
  942. MVC SFBFLAG,SAVEWRK9 RESTORE FLAG IF IT WAS ORIG.ON @VA09978 00912100
  943. L R1,SAVEWRK1 ADDR OF SYS VIRT PAGE @VM01086 00913000
  944. CALL DMKPGTVR RETURN THE PAGE @VM01086 00914000
  945. LA R2,424 MESSAGE NUMBER @V305435 00915000
  946. B EXIT8R1 RETURN @V305435 00916000
  947. EJECT 00917000
  948. **************************************** 00918000
  949. * 00919000
  950. * FINAL EXIT BACK TO DMKCFM 00920000
  951. * 00921000
  952. **************************************** 00922000
  953. SPACE 3 00923000
  954. CSTEXIT EQU * HERE FOR NORMAL EXIT FROM DMKCST @V293598 00924000
  955. SR R2,R2 CLEAR ERROR REGISTER @V293598 00925000
  956. B EXIT1 NOW EXIT @V293598 00926000
  957. SPACE 2 00927000
  958. EXIT8R1 SR R1,R1 @V293598 00928000
  959. SR R0,R0 @V293598 00929000
  960. EXIT8 ICM R0,14,ID+3 MOVE IN MODULE ID @V293598 00930000
  961. EXIT1 STM R0,R2,SAVEWRK5 SAVE CALL GPRS @V293598 00931000
  962. L R1,SAVEWRK4 ADDRESS OF 24 BYTE AREA @V293598 00932000
  963. LTR R1,R1 ADDRESS PRESENT ?? @V293598 00933000
  964. BZ EXIT2 NO --- @V293598 00934000
  965. LA R0,3 LENGTH OF AREA @V293598 00935000
  966. CALL DMKFRET RETURN AREA TO FREE STORAGE @V293598 00936000
  967. EXIT2 LM R0,R2,SAVEWRK5 RESTORE GPRS @V293598 00937000
  968. LTR R2,R2 ERROR CODE PRESENT ?? @V293598 00938000
  969. BNZ ERREXIT YES -- @V293598 00939000
  970. EXIT3 EXIT EXIT NO CALL TO ERMSG @V293598 00940000
  971. SPACE 00941000
  972. ERREXIT CALL DMKERMSG EXIT TO MESSAGE MODULE @V293598 00942000
  973. SPACE 00943000
  974. * MODULE DMKERMSG WILL GIVE SVC16 AND RETURN CONTROL TO DMKCFM 00944000
  975. EJECT 00945000
  976. **************************************** 00946000
  977. * 00947000
  978. * EXECUTED INSTRUCTIONS 00948000
  979. * 00949000
  980. **************************************** 00950000
  981. SPACE 3 00951000
  982. CLCALL CLC 0(0,R1),=C'ALL ' COMPARE FOR ALL @V293598 00952000
  983. CLCRDR CLC 0(0,R1),=C'RDR ' COMPARE FOR RDR @V293598 00953000
  984. CLCPCH CLC 0(0,R1),=C'PCH ' COMPARE FOR PCH @V293598 00954000
  985. CLCPRT CLC 0(0,R1),=C'PRT ' COMPARE FOR PRT @V293598 00955000
  986. CLCPRINT CLC 0(0,R1),=C'PRINTER ' COMPARE FOR PRINTER @V293598 00956000
  987. CLCPUN CLC 0(0,R1),=C'PUNCH ' COMPARE FOR PUNCH @V293598 00957000
  988. CLCREAD CLC 0(0,R1),=C'READER ' COMPARE FOR READER @V293598 00958000
  989. CLCCONS CLC 0(0,R1),=C'CONSOLE ' COMPARE FOR CONSOLE @V293598 00959000
  990. CLCDEV CLC 0(0,R1),=C'DEV ' COMPARE FOR DEV @V293598 00960000
  991. CLCFILE CLC 0(0,R1),=C'FILE ' COMPARE FOR FILE @V293598 00961000
  992. CLCQUERY CLC 0(0,R1),=C'QUERY ' COMPARE FOR QUERY @V293598 00962000
  993. * 00963000
  994. CLIALL CLI =AL1(CSTRDR+TYPPRT+TYPPUN),X'00' MASK = RDR PRT @V293598 00964000
  995. * PUNCH 00965000
  996. TMRDR TM =AL1(CSTRDR),X'00' MASK = READER @V293598 00966000
  997. TMPRT TM =AL1(TYPPRT),X'00' MASK = PRINTER @V293598 00967000
  998. TMPUN TM =AL1(TYPPUN),X'00' MASK = PUNCH @V293598 00968000
  999. TMTYPE TM VDEVTYPE,X'00' TEST VDEV TYPE @V293598 00969000
  1000. TMCON TM =AL1(CSTCON),X'00' MASK = CONSOLE @V293598 00970000
  1001. EJECT 00971000
  1002. **************************************** 00972000
  1003. * 00973000
  1004. * MESSAGES AND CONSTANTS 00974000
  1005. * 00975000
  1006. **************************************** 00976000
  1007. SPACE 2 00977000
  1008. EJECT 00978000
  1009. CSTRDR EQU X'20' @V293598 00979000
  1010. CSTCON EQU X'10' @V293598 00980000
  1011. PSA , @V306638 00981000
  1012. COPY CONBUF @V306638 00982000
  1013. COPY DEVTYPES @V306638 00983000
  1014. COPY EQU @V306638 00984000
  1015. COPY RBLOKS @V306638 00985000
  1016. COPY SAVE @V306638 00986000
  1017. COPY SPOOL @V306638 00987000
  1018. COPY UDIRECT @V306638 00988000
  1019. COPY VBLOKS @V306638 00989000
  1020. COPY VMBLOK @V306638 00990000
  1021. END 00991000