Table of Contents

DMTASK Source

References

Source Listing

DMTASK.ASSEMBLE.txt
  1. ASK TITLE 'DMTASK (RSCS) VM/370 - RELEASE 6' 00001000
  2. *. 00002000
  3. * MODULE NAME - 00003000
  4. * 00004000
  5. * DMTASK 00005000
  6. * 00006000
  7. * FUNCTION - 00007000
  8. * 00008000
  9. * THE DMTASK MODULE IS THE SERVICE ROUTINE WHICH 00009000
  10. * CREATES NEW TASKS AND DELETES EXISTING TASKS 00010000
  11. * EXECUTED BY MSUP. THE ENTRY TO DMTASK IS BY MEANS 00011000
  12. * OF A BRANCH AND LINK FROM TASK PROGRAMMING. ANY 00012000
  13. * ENTRY TO DMTASK CAUSES THE CALLING TASK'S 00013000
  14. * EXECUTION TO BE SUSPENDED THROUGH THE FREEZE SVC 00014000
  15. * FUNCTION. 00015000
  16. * 00016000
  17. * ATTRIBUTES - 00017000
  18. * 00018000
  19. * REUSABLE, NON-INTERRUPTABLE 00019000
  20. * 00020000
  21. * ENTRY POINTS - 00021000
  22. * 00022000
  23. * DMTASK - INITIATE TASK, TERMINATE TASK, QUERY TASK STATUS 00023000
  24. * 00024000
  25. * ENTRY CONDITIONS - 00025000
  26. * 00026000
  27. * GPR0 = FOUR BYTE TASK NAME 00027000
  28. * GPR1 = ADDR OF SYS SAVE AREA FOR TASK TO CREATE 00028000
  29. * = X'00' IF QUERY STATUS REQUEST 00029000
  30. * = ANY NEGATIVE VALUE IF DELETE REQUEST 00030000
  31. * GPR14 = RETURN ADDRESS 00031000
  32. * GPR15 = ENTRY ADDRESS (FROM 'TASKREQ') 00032000
  33. * 00033000
  34. * EXIT CONDITIONS - 00034000
  35. * 00035000
  36. * NORMAL - 00036000
  37. * 00037000
  38. * GPR15 = X'00' CREATE OR DELETE SUCCESSFUL, OR TASK 00038000
  39. * EXISTS ON QUERY STATUS 00039000
  40. * 00040000
  41. * ERROR - 00041000
  42. * 00042000
  43. * GPR15 = X'04' DUPLICATE NAME ON CREATE 00043000
  44. * ACTIVE I/O ON DELETE REQUEST 00044000
  45. * 00045000
  46. * = X'08' NO AVAILABLE ID ON CREATE 00046000
  47. * TASK DOES NOT EXIST ON QUERY OR DELETE REQUEST 00047000
  48. * 00048000
  49. * = X'10' (OR HIGHER) ERROR RETURN CODE FROM DMTQRQ 00049000
  50. * 00050000
  51. EJECT 00051000
  52. * 00052000
  53. * CALLS TO OTHER ROUTINES - 00053000
  54. * 00054000
  55. * DMTQRQ - TO RESERVE AND RELEASE SUP QUEUE ELEMENTS 00055000
  56. * 00056000
  57. * EXTERNAL REFERENCES - 00057000
  58. * 00058000
  59. * NONE 00059000
  60. * 00060000
  61. * TABLES / WORKAREAS - 00061000
  62. * 00062000
  63. * DMTVEC - SUPERVISOR COMMON AREA 00063000
  64. * TASK ELEMENT 00064000
  65. * I/O ELEMENT 00065000
  66. * GIVE REQUEST ELEMENT 00066000
  67. * FREE QUEUE ELEMENT 00067000
  68. * 00068000
  69. * REGISTER USAGE - 00069000
  70. * 00070000
  71. * GPR0 = TASK NAME 00071000
  72. * GPR1 = TASK ELEMENT POINTER 00072000
  73. * GPR2 = SCRATCH 00073000
  74. * GPR3 = SCRATCH 00074000
  75. * GPR4 = TASK ELEMENT POINTER 00075000
  76. * GPR5 = SCRATCH 00076000
  77. * GPR6 = I/O ELEMENT POINTER, SCRATCH 00077000
  78. * GPR7 = SCRATCH 00078000
  79. * GPR8 = SCRATCH 00079000
  80. * GPR9 = SCRATCH 00080000
  81. * GPR10 = UNUSED 00081000
  82. * GPR11 = UNUSED 00082000
  83. * GPR12 = DMTASK BASE REGISTER 00083000
  84. * GPR13 = TASK SAVE AREA POINTER 00084000
  85. * GPR14 = LINKAGE RETURN ADDR (INTERNAL AND EXTERNAL) 00085000
  86. * GPR15 = EXTERNAL LINKAGE ENTRY ADDR AND RETURN CODE 00086000
  87. * 00087000
  88. * NOTES - 00088000
  89. * 00089000
  90. * THE DMTASK SUPERVISOR SERVICE ROUTINE IS INTENDED TO 00090000
  91. * USED WITH SUBSTANTIAL ADDITIONAL TASK LEVEL SOFTWARE 00091000
  92. * SUPPORT. 00092000
  93. * 00093000
  94. * OPERATION - 00094000
  95. * 00095000
  96. * ON A REQUEST TO GENERATE A NEW TASK, DMTASK GETS 00096000
  97. * A SUPERVISOR STATUS QUEUE ELEMENT BY A CALL TO 00097000
  98. * DMTQRQ, BUILDS A NEW TASK ELEMENT FROM THE 00098000
  99. * INFORMATION PROVIDED BY THE CALLING TASK, FINDS 00099000
  100. * A ONE BYTE TASK ID WHICH IS NOT IN USE BY ANOTHER 00100000
  101. * TASK, AND ENQUEUES THE NEW TASK ELEMENT. WHEN 00101000
  102. * PROCESSING IS COMPLETE, DMTASK EXITS TO THE MSUP 00102000
  103. * DISPATCHER. SINCE THE NEW TASK IS INITIALIZED 00103000
  104. * DISPATCHABLE, THE NEW TASK CAN RECEIVE CONTROL 00104000
  105. * BEFORE THE CALLING (CREATING) TASK IS REDISPATCHED 00105000
  106. * ON RETURN FROM THE CREATE REQUEST. 00106000
  107. * 00107000
  108. * ON A REQUEST TO TERMINATE A TASK, DMTASK BEGINS 00108000
  109. * BY SETTING THE "LIMBO" FLAG IN THE TASK ELEMENT OF 00109000
  110. * THE TASK TO BE TERMINATED, UNLESS THE TASK TO BE 00110000
  111. * TERMINATED IS THE SAME AS THE CALLING TASK. 00111000
  112. * SETTING OF THE "LIMBO" FLAG MARKS THE TASK AS 00112000
  113. * BEING PERMANENTLY NOT DISPATCHABLE. THE 00113000
  114. * TERMINATION PROCESSING CONTINUES BY THE PURGING OF 00114000
  115. * ALL INACTIVE I/O REQUESTS FOR THE TASK, ALL 00115000
  116. * ASYNCHRONOUS EXIT REQUESTS FOR THE TASK, AND ALL 00116000
  117. * PENDING GIVE REQUESTS FOR THE TASK. ALL PENDING 00117000
  118. * GIVE REQUESTS ADDRESSED TO THE TERMINATING TASK 00118000
  119. * ARE PURGED, AND EACH ASSOCIATED GIVE TABLE IS 00119000
  120. * POSTED WITH A X'FF' CODE. A SEARCH IS MADE FOR 00120000
  121. * ACTIVE I/O PROCESSING WHICH WAS INITIATED BY THE 00121000
  122. * TASK BEING TERMINATED; IF SUCH I/O IS FOUND, 00122000
  123. * PROCESSING IS TERMINATED AND CONTROL IS PASSED TO 00123000
  124. * THE DISPATCHER WITH AN ERROR RETURN CONTROL AND 00124000
  125. * THE TASK TO BE TERMINATED COMPLETELY DISABLED, BUT 00125000
  126. * STILL IN EXISTENCE. (IT IS THE RESPONSIBILITY OF 00126000
  127. * THE CALLING TASK TO CAUSE THE ACTIVE I/O TO BE 00127000
  128. * TERMINATED AND TO RETRY THE TERMINATE REQUEST.) 00128000
  129. * 00129000
  130. * IF NO I/O IS ACTIVE FOR THE TERMINATING TASK, THE 00130000
  131. * MAIN STORAGE RESERVED BY THE TASK IS RELEASED, THE 00131000
  132. * TASK'S TASK ELEMENT IS DEQUEUED AND FREED BY A 00132000
  133. * CALL TO DMTQRQ, AND CONTROL IS RETURNED TO THE 00133000
  134. * DISPATCHER. 00134000
  135. * 00135000
  136. * 00136000
  137. *. 00137000
  138. EJECT 00138000
  139. DMTASK CSECT 00139000
  140. SPACE 00140000
  141. * ENTRY POINT FOR CALL TO DMTASK ROUTINE 00141000
  142. SPACE 00142000
  143. FREEZE SAVE CALLING TASK'S STAT AND GET S/A ADDR 00143000
  144. SPACE 00144000
  145. LR R13,R14 REG.13 = ADDRESS OF CALLER'S TASK SAVE AREA 00145000
  146. USING TAREA,R13 DEFINE TASK SAVE AREA DSECT ADDRESSA 00146000
  147. USING SVECTORS,0 GET SVECTORS ADDRESSABILITY 00147000
  148. USING TASKE,R4 GET TASK ELEMENT ADDRESSABILITY 00148000
  149. SPACE 00149000
  150. LA R12,0(R15) REG.12 = BASE REGISTER FOR TASK ROUTINE 00150000
  151. USING DMTASK,R12 DEFINE DMTASK ADDRESSABILITY 00151000
  152. SPACE 00152000
  153. XC TGREG15(4),TGREG15 SET RETURN CODE TO ZERO FOR NOW 00153000
  154. SR R2,R2 CLEAR ID COUNTER FOR START OF TASK QUEUE SCAN 00154000
  155. LA R3,TASKQ INITIALIZE TASK ELEMENT POINTER 00155000
  156. TASCAN EQU * 00156000
  157. ICM R4,B'1111',TASKNEXT-TASKE(R3) REG 4 = ADDR OF NEXT ELEME 00157000
  158. BZ TAQEND NOPE - WE ARE AT THE END OF THE QUEUE 00158000
  159. CL R0,TASKNAME IS THIS THE REQUESTED NAME? 00159000
  160. BE TAQHIT YES - QUIT SCANNING AND CHECK REQUEST 00160000
  161. LR R3,R4 UPDATE TO NEXT 00161000
  162. B TASCAN AND KEEP ON SCANNING 00162000
  163. DROP R4 00163000
  164. EJECT 00164000
  165. TAQEND EQU * 00165000
  166. USING TASKE,R1 GET TASKE ELEMENT ADDRESSABILTIY 00166000
  167. LTR R5,R1 WHAT KIND OF REQUEST IS THIS, ANYWAY? 00167000
  168. BNP TANOFIND RETURN WITH CODE IF NOT AN INITIALIZE REQUEST 00168000
  169. * 00169000
  170. * GENERATE A NEW ID 00170000
  171. * 00171000
  172. SR R2,R2 CLEAR ID COUNTER 00172000
  173. LA R4,255 SET LIMIT 00173000
  174. TAIDGEN EQU * 00174000
  175. LA R2,1(R2) GENERATE NEXT SEQ ID 00175000
  176. CLR R2,R4 HAVE ALL BEEN TRIED? 00176000
  177. BNL TANOROOM YES - RETURN ERROR 00177000
  178. LA R1,TASKQ INITIALIZE TASK QUEUE PTR 00178000
  179. TAIDSCAN EQU * 00179000
  180. ICM R1,B'1111',TASKNEXT LOOK AT NEXT TASK ELEMENT 00180000
  181. BZ TAMAKE END OF QUEUE - GOT AN ID IN REG.2 00181000
  182. CLM R2,B'0001',TASKID IS ID IN USE HERE? 00182000
  183. BNE TAIDSCAN NOPE - KEEP LOOKING 00183000
  184. B TAIDGEN ID IN USE - TRY NEXT SEQ ID 00184000
  185. SPACE 00185000
  186. TAMAKE EQU * 00186000
  187. SR R1,R1 CLEAR REG.R1 FOR GET CALL TO SUP QUEUE MANAGER 00187000
  188. L R15,QREQ REG.15 = ENTRY ADDRESS FOR SUP QUEUE MANAGER 00188000
  189. BALR R14,R15 GET A FREE QUEUE ELEMENT 00189000
  190. LTR R15,R15 WAS ONE AVAILABLE? 00190000
  191. BNZ TAQERROR NOPE - QUIT NOW 00191000
  192. MVC TASKNEXT(4),TASKNEXT-TASKE(R3) CHAIN NEXT TO NEW ELEMENT 00192000
  193. ST R1,TASKNEXT-TASKE(R3) AND CHAIN NEW TO LAST ELEMENT 00193000
  194. ST R5,TASKSAVE SET TASK SAVE AREA ADDRESS IN NEW ELEMEN 00194000
  195. STC R2,TASKID SET THE NEW TASK ID 00195000
  196. MVI TASKSTAT,X'00' INITIALIZE NEW TASK FLAGS TO ZERO 00196000
  197. ST R0,TASKNAME SET TASK NAME TO REQUESTED VALUE 00197000
  198. ST R2,TGREG0 RETURN NEW TASK ID IN REG.0 SAVE AREA 00198000
  199. ST R1,TGREG13-TAREA(R5) SET NEW TASK'S REG 13 TO ITS TASK T 00199000
  200. SPACE 00200000
  201. TAEXIT EQU * 00201000
  202. L R15,DISPATCH REG.15 = ENTRY ADDRESS FOR DISPATCH 00202000
  203. BALR R14,R15 AND RETURN TO CALLER THROUGH DISPATCHER 00203000
  204. DROP R1 00204000
  205. USING TASKE,R4 GET TASK ELEMENT ADDRESSABILITY 00205000
  206. SPACE 00206000
  207. TAQHIT EQU * 00207000
  208. LTR R5,R1 TEST THE TYPE OF ACTION REQUESTED 00208000
  209. BZ TAEXIT EXIT WITH NORMAL RETURN IF STATUS REQUEST 00209000
  210. BP TADUPNAM RETURN DUPLICATE NAME CODE IF INITIALIZE REQ 00210000
  211. SPACE 00211000
  212. CL R4,ACTIVE IS THIS THE ACTIVE TASK? 00212000
  213. BE TANOSTOP YEP - DON'T TURN OFF HIS DISPATCHING 00213000
  214. OI TASKSTAT,LIMBO SET TASK PERMANENTLY NON-DISPATCHABLE 00214000
  215. TANOSTOP EQU * 00215000
  216. LA R6,MPXIOQ SET UP TO PURGE INACTIVE MULTIPLEXOR I/O 00216000
  217. BAL R14,TAIOPURG PURGE 'EM 00217000
  218. LA R6,SELIOQ SET TO PURGE INACTIVE SELECTOR I/O, TOO 00218000
  219. BAL R14,TAIOPURG DO IT 00219000
  220. LA R6,IOEXITQ SET UP TO PURGE ASYN I/O EXIT REQ ELEMENTS 00220000
  221. BAL R14,TAQPURGE AND DO IT 00221000
  222. LA R6,EXTQ SET UP TO PURGE EXTERNAL EXITS 00222000
  223. BAL R14,TAQPURGE AGAIN 00223000
  224. LA R6,ALERTQ SET UP TO PURGE TASK ALERT EXITS 00224000
  225. BAL R14,TAQPURGE AND AGAIN 00225000
  226. LA R6,GIVEQ SET UP TO PURGE PENDING GIVE REQUESTS 00226000
  227. BAL R14,TAQPURGE AND AGAIN 00227000
  228. EJECT 00228000
  229. * 00229000
  230. * NOW CHECK FOR A POSSIBLE PENDING TAKE RESPONSE FROM THE 00230000
  231. * TASK WHICH IS BEING TERMINATED 00231000
  232. * 00232000
  233. SPACE 00233000
  234. LA R6,GIVEQ INITIALIZE GIVE QUEUE ELEMENT POINTER 00234000
  235. USING GIVEE,R6 GET GIVE ELEMENT ADDRESSABILITY 00235000
  236. TAGPURGE EQU * 00236000
  237. LR R5,R6 MAKE THE CURRENT QUEUE ELEMENT LAST 00237000
  238. ICM R6,B'1111',GIVENEXT-GIVEE(R5) MOVE THE ELEMENT POINTER T 00238000
  239. BZ TAIOCHEK YES - NO PENDING TAKE RESPONSE FOR THIS TASK 00239000
  240. CLC GIVENID(1),TASKID WAS THIS ELEMENT GIVEN TO TASK? 00240000
  241. BNE TAGPURGE NOPE - KEEP LOOKING 00241000
  242. MVC GIVENEXT-GIVEE(4,R5),GIVENEXT UNCHAIN ELEMENT IF SO 00242000
  243. L R1,GIVEADDR REG.1 = ADDR OF GIVER'S SYNCH LOCK 00243000
  244. LA R0,X'FF' SET POST CODE TO TASK TERMINATE CODE 00244000
  245. L R15,POSTREQ REG.15 = ENTRY TO POST ROUTINE 00245000
  246. BALR R14,R15 CALL THE POST ROUTINE TO NOTIFY GIVER 00246000
  247. LR R1,R6 REG.1 = ADDR OF TERMINATED GIVE ELEMENT 00247000
  248. L R15,QREQ REG.15 = ENTRY ADDR TO SUPERVISOR QUEUE MGR 00248000
  249. BALR R14,R15 FREE THE TERMINATED GIVE ELEMENT 00249000
  250. SPACE 00250000
  251. TAIOCHEK EQU * 00251000
  252. LA R6,MPXIOQ SET UP TO SCAN FOR ANY RUNNING I/O 00252000
  253. BAL R14,TAIOSCAN GO LOOK FOR ANY ACTIVE MULTIPLEXOR I/O 00253000
  254. LA R6,SELIOQ SET UP TO SCAN THE SELECTOR I/O QUEUE 00254000
  255. BAL R14,TAIOSCAN LOOK FOR ACTIVE SELECTOR I/O 00255000
  256. SPACE 2 00256000
  257. * 00257000
  258. * IF WE GET TO HERE, THE TASK HAS NO ACTIVE I/O PENDING AND 00258000
  259. * HAS BEEN ENTIRELY PURGED EXCEPT FOR ALLOCATED MAIN STORAGE 00259000
  260. * AND THE TASK QUEUE ELEMENT 00260000
  261. * 00261000
  262. SPACE 00262000
  263. L R5,MAINMAP REG.5 = ADDRESS OF START OF MAIN STORAGE MAP 00263000
  264. BCTR R5,0 BUMP BACK ONE FOR CONVENIENCE 00264000
  265. L R6,MAINSIZE REG.6 = TOTAL NUMBER OF PAGES TO BE CHECKED 00265000
  266. TAFREE EQU * 00266000
  267. LA R5,1(R5) BUMP POINTER TO THE NEXT PAGE ENTRY 00267000
  268. CLC 0(1,R5),TASKID DOES THIS PAGE BELONG TO THE TASK? 00268000
  269. BNE TAFREEOK NOPE - LEAVE IT ALONE 00269000
  270. MVI 0(R5),X'00' FREE THE PAGE IF IT DOES 00270000
  271. TAFREEOK EQU * 00271000
  272. BCT R6,TAFREE SHUFFLE THROUGH THE WHOLE MAP 00272000
  273. SPACE 00273000
  274. MVC TASKNEXT-TASKE(4,R3),TASKNEXT REMOVE TASK ELEMENT FROM Q 00274000
  275. LR R1,R4 SET REG.1 TO ELEMENT ADDRESS FOR FREE 00275000
  276. L R15,QREQ REG.15 = ENTRY ADDRESS FOR SUP QUEUE MANAGER 00276000
  277. BALR R14,R15 FREE THE TERMINATED TASK ELEMENT 00277000
  278. B TAEXIT AND RETURN TO CALLER 00278000
  279. DROP R6 00279000
  280. EJECT 00280000
  281. USING IOE,R6 GET I/O ELEMENT ADDRESSABILITY 00281000
  282. TAIOPURG EQU * SUBROUTINE TO PURGE INACTIVE I/O REQ ELEMENTS 00282000
  283. LR R5,R6 MAKE CURRENT ACTIVE ELEMENT LAST 00283000
  284. ICM R6,B'1111',IONEXT-IOE(R5) REG 6 = ADDR OF NEXT ACTIVE RE 00284000
  285. BCR 8,R14 (BZ) YEP - RETURN TO THE CALLER 00285000
  286. LR R8,R6 OTHERWISE INITIALIZE FOR A SUBQUEUE SCAN 00286000
  287. TASQNEXT EQU * 00287000
  288. LR R7,R8 MAKE THE CURRENT INACTIVE ELEMENT LAST 00288000
  289. L R8,IOSUBQ-IOE(R7) AND MOVE POINTER TO THE NEXT ELEMENT 00289000
  290. TASQTEST EQU * 00290000
  291. LTR R8,R8 IS THIS THE END OF THE INACTIVE SUBQUEUE? 00291000
  292. BZ TAIOPURG YEP - GO LOOK FOR ANOTHER ACTIVE ELEMENT 00292000
  293. CLC IOID-IOE(1,R8),TASKID IS THIS ELEMENT ONE OF 'EM? 00293000
  294. BNE TASQNEXT NOPE - GO TO THE NEXT INACTIVE ELEMENT 00294000
  295. MVC IOSUBQ-IOE(4,R7),IOSUBQ-IOE(R8) DEQUEUE THE TASK'S ELEME 00295000
  296. LR R1,R8 REG.1 = ADDR OF INACTIVE ELEMENT TO BE FREED 00296000
  297. L R8,IOSUBQ-IOE(R8) BUT FIRST, GET THE ADDR OF THE NEXT EL 00297000
  298. LR R9,R14 SAVE THE RETURN ADDRESS IN REG.9 00298000
  299. L R15,QREQ REG.15 = ADDR OF QUEUE MANAGER ENTRY POINT 00299000
  300. BALR R14,R15 FREE THE ELEMENT 00300000
  301. LTR R15,R15 DID IT WORK OUT O.K.? 00301000
  302. BNZ TAQERROR NOPE - QUIT WITH A BAD ERROR 00302000
  303. LR R14,R9 OTHERWISE RESTORE THE RETURN ADDRESS 00303000
  304. B TASQTEST AND CHECK THE NEXT INACTIVE ELEMENT 00304000
  305. SPACE 2 00305000
  306. USING FREEE,R5 GET FREE ELEMENT ADDRESSABILITY 00306000
  307. TAQPURGE EQU * PURGE ALL TASK'S STANDARD FORMAT QUEUE ELEMENTS 00307000
  308. LR R5,R6 MAKE THE CURRENT QUEUE ELEMENT LAST 00308000
  309. L R6,FREENEXT MOVE THE ELEMENT POINTER TO THE NEXT 00309000
  310. TAQPTEST EQU * 00310000
  311. LTR R6,R6 IS THIS THE END OF THE QUEUE? 00311000
  312. BCR 8,R14 (BZ) YEP - RETURN TO THE CALLER 00312000
  313. CLC FREEID-FREEE(1,R6),TASKID IS THIS ELEMENT TO BE PURG 00313000
  314. BNE TAQPURGE NOPE - CHECK THE NEXT ELEMENT IN THE QUEUE 00314000
  315. MVC FREENEXT(4),FREENEXT-FREEE(R6) FIRST DEQUEUE IT 00315000
  316. LR R1,R6 REG.1 = ADDR OF ELEMENT TO BE FREED FOR QUEUE MGR 00316000
  317. L R6,FREENEXT-FREEE(R6) REG 6 = ADDR OF THE NEXT QUEUE ELE 00317000
  318. LR R7,R14 SAVE THE RETURN ADDRESS IN REG.7 00318000
  319. L R15,QREQ REG.15 = QUEUE MANAGER REQUEST ENTRY POINT 00319000
  320. BALR R14,R15 FREE THE ELEMENT 00320000
  321. LTR R15,R15 DID THAT WORK PROPERLY? 00321000
  322. BNZ TAQERROR NOPE - PUNT 00322000
  323. LR R14,R7 OTHERWISE RESTORE THE RETURN ADDRESS 00323000
  324. B TAQPTEST AND CHECK THE NEXT QUEUE ELEMENT 00324000
  325. SPACE 2 00325000
  326. TAIOSCAN EQU * SCAN I/O QUEUES FOR TASK'S ACTIVE I/O 00326000
  327. ICM R6,B'1111',IONEXT REG 6 = NEXT ELEMENT IN THE ACTIVE QUE 00327000
  328. BCR 8,R14 (BZ) YEP - RETURN TO THE CALLER 00328000
  329. CLC IOID(1),TASKID IS THIS ONE OF THE TASK'S ELEMENTS 00329000
  330. BNE TAIOSCAN NOPE - KEEP LOOKING 00330000
  331. B TAIOHOT OTHERWISE EXIT WITH ACTIVE I/O ERROR INDICATION 00331000
  332. EJECT 00332000
  333. TADUPNAM EQU * INIT TASK NAME DUPLICATES AN EXISTING TASK NAME 00333000
  334. TAIOHOT EQU * TERM TASK HAS ACTIVE I/O RUNNING 00334000
  335. LA R15,4 ERROR CODE 4 00335000
  336. B TAEREXIT STORE RETURN CODE AND RETURN TO CALLER 00336000
  337. SPACE 00337000
  338. TANOROOM EQU * INIT FAILED DUE TO EXHAUSTED ID NUMBERS 00338000
  339. TANOFIND EQU * STAT OR TERM TASK NAME WAS NOT FOUND 00339000
  340. LA R15,8 ERROR CODE 8 00340000
  341. SPACE 00341000
  342. TAQERROR EQU * 00342000
  343. * QUEUE MANAGER HAS SET A CODE IN REG 15 00343000
  344. TAEREXIT EQU * 00344000
  345. ST R15,TGREG15 SET THE RETURN CODE IN REG.15 SAVE AREA 00345000
  346. B TAEXIT RETURN TO THE CALLER 00346000
  347. EJECT 00347000
  348. COPY RSSEQU 00348000
  349. EJECT 00349000
  350. COPY SVECTORS 00350000
  351. EJECT 00351000
  352. COPY TAREA 00352000
  353. EJECT 00353000
  354. COPY TASKE 00354000
  355. EJECT 00355000
  356. COPY IOE 00356000
  357. EJECT 00357000
  358. COPY FREEE 00358000
  359. EJECT 00359000
  360. COPY GIVEE 00360000
  361. END 00361000