SX3UCP

Table Of Contents

  • [00001] PROC ADDCAR
  • [00002] ADDCAR - ADD CARTRIDGE TO SUB-FAMILY.
  • [00007] ADDCAR - ADD CATRIDGE TO SUB-FAMILY.
  • [00040] PROC ACQ$FCT
  • [00042] PROC ANLZAST
  • [00043] PROC CEXTSC
  • [00044] PROC CFLUSH
  • [00045] PROC CONVER3
  • [00047] PROC CRDAST
  • [00048] PROC CWTAST
  • [00049] PROC LOANFCTQ
  • [00050] PROC MFLUSH
  • [00051] PROC MGETENT
  • [00053] PROC MPUTENT
  • [00055] PROC RLS$FCT
  • [00056] PROC UCP$RES
  • [00058] PROC UASTPRM
  • [00336] PROC ADDCSU
  • [00337] ADDCSU - ADD *SM* SUB-CATALOG.
  • [00342] ADDCSU - ADD *SM* SUB-CATALOG.
  • [00374] PROC CADDSC
  • [00375] PROC CFLUSH
  • [00376] PROC CONVER3
  • [00378] PROC CRDAST
  • [00379] PROC CWTAST
  • [00380] PROC UCP$RES
  • [00467] PROC ADDCUBE
  • [00468] ADDCUBE - ASSIGN CUBE TO SUB-FAMILY.
  • [00473] ADDCUBE - ASSIGN CUBE TO SUB-FAMILY.
  • [00505] PROC ACQ$FCT
  • [00507] PROC CEXTSC
  • [00508] PROC CFLUSH
  • [00509] PROC CONVER3
  • [00511] PROC CRDAST
  • [00512] PROC CWTAST
  • [00513] PROC MFLUSH
  • [00514] PROC MGETENT
  • [00516] PROC MPUTENT
  • [00518] PROC RLS$FCT
  • [00519] PROC UCP$RES
  • [00617] PROC CONVER31)
1)
REQTYPE),(REQCODE),(MCSTAT),RSTATUS)
  • [00618] CONVER3 - CONVERT MAP/CATALOG ERRORS TO *UCP* ERRORS.
  • [00623] CONVER3 - CONVERT MAP/CATALOG ERRORS TO *UCP* ERRORS.
  • [00647] PROC ABORT
  • [00648] PROC MESSAGE
  • [00758] PROC GETPD
  • [00759] GETPD - RETURNS LAST *PRG$ORPH* DATE AND TIME.
  • [00764] GETPD - RETURNS LAST *PRG$ORPH* DATE AND TIME.
  • [00797] PROC CGETPD
  • [00798] PROC CONVER3
  • [00800] PROC UCP$RES
  • [00832] PROC LOANFCTQ(ACTION)
  • [00834] LOANFCTQ - ADD OR RECLAIM AN *FCTQ* ENTRY FOR *UCP* PROCS.
  • [00839] LOANFCTQ - ADD OR RECLAIM AN *FCTQ* ENTRY FOR *UCP* PROCESSING.
  • [00865] PROC ADD$LNK
  • [00866] PROC DEL$LNK
  • [00867] PROC ZFILL
  • [00901] PROC MAPRCLM
  • [00902] MAPRCLM - RE-ATTACHES DESIGNATED MAP FILE.
  • [00907] MAPRCLM - RE-ATTACHES DESIGNATED MAP FILE.
  • [00936] PROC ABORT
  • [00937] PROC CONVER3
  • [00939] PROC MESSAGE
  • [00940] PROC MRCLMLK
  • [00941] PROC SETPFP
  • [00942] PROC UCP$RES
  • [00985] PROC MAPRELS
  • [00986] MAPRELS - RETURNS THE DESIGNATED MAP FILE.
  • [00991] MAPRELS - RETURNS THE DESIGNATED MAP FILE.
  • [01018] PROC CONVER3
  • [01020] PROC MRELSLK
  • [01021] PROC UCP$RES
  • [01046] PROC NONQ$RP
  • [01047] NONQ$RP - PRELIMINARY PROCESSING OF TYPE 3 REQUEST.
  • [01053] NONQ$RP - PRELIMINARY PROCESSING OF TYPE 3 REQUEST.
  • [01077] PROC KILL$UC
  • [01078] PROC SSOVL
  • [01195] PROC PURGFCT
  • [01196] PURGFCT - DELETE *FCT* ENTRY FROM USE.
  • [01201] PURGFCT - DELETE *FCT* ENTRY FROM USE.
  • [01234] PROC ACQ$FCT
  • [01236] PROC ANLZAST
  • [01237] PROC CFLUSH
  • [01238] PROC CNTFS
  • [01239] PROC CONVER3
  • [01241] PROC CRDAST
  • [01242] PROC CWTAST
  • [01243] PROC LOANFCTQ
  • [01244] PROC RLS$FCT
  • [01245] PROC UCP$RES
  • [01247] PROC UPDAST
  • [01248] PROC ZFILL
  • [01331] PROC PURGCHN
  • [01332] PURGCHN - PURGE FRAGMENTED AND ORPHAN CHAINS.
  • [01337] PURGCHN - PURGE FRAGMENTED AND ORPHAN CHAINS.
  • [01374] PROC ABORT
  • [01375] PROC ACQ$FCT
  • [01377] PROC CFLUSH
  • [01378] PROC CONVER3
  • [01380] PROC CPUTPD
  • [01381] PROC CRDAST
  • [01382] PROC CWTAST
  • [01383] PROC LOANFCTQ
  • [01384] PROC MESSAGE
  • [01385] PROC OCTSRCH
  • [01386] PROC RLS$FCT
  • [01387] PROC RLSVOL
  • [01388] PROC UASTPRM
  • [01389] PROC UCP$RES
  • [01391] PROC UPDAST
  • [01680] PROC RESETUP
  • [01686] RESETUP - CATALOG RELEASE PROCESSING AND SETUP.
  • [01724] PROC ABORT
  • [01725] PROC BZFILL
  • [01726] PROC CONVER3
  • [01728] PROC CPUTPD
  • [01729] PROC MESSAGE
  • [01730] PROC PFD
  • [01731] PROC PURGCHN
  • [01732] PROC READ
  • [01733] PROC READW
  • [01734] PROC RETERN
  • [01735] PROC SETPFP
  • [01736] PROC UASTPRM
  • [01737] PROC UCP$RES
  • [01739] PROC ZSETFET
  • [01870] PROC RMVCAR
  • [01871] RMVCAR - REMOVE CARTRIDGE FROM SUB-FAMILY.
  • [01876] RMVCAR - REMOVE CARTRIDGE FROM SUB-FAMILY.
  • [01910] PROC ACQ$FCT
  • [01912] PROC ANLZAST
  • [01913] PROC CFLUSH
  • [01914] PROC CNTFS
  • [01915] PROC CONVER3
  • [01917] PROC CRDAST
  • [01918] PROC CWTAST
  • [01919] PROC LOANFCTQ
  • [01920] PROC MFLUSH
  • [01921] PROC MGETENT
  • [01923] PROC MPUTENT
  • [01925] PROC RLS$FCT
  • [01926] PROC UCP$RES
  • [01928] PROC UPDAST
  • [01929] PROC ZFILL
  • [02072] PROC RMVCSU
  • [02073] RMVCSU - REMOVES *SM* FROM SUB-FAMILY CATALOG.
  • [02078] RMVCSU - REMOVES *SM* FROM SUB-FAMILY CATALOG.
  • [02108] PROC CONVER3
  • [02110] PROC CRMVSC
  • [02111] PROC UCP$RES
  • [02139] PROC RMVCUBE
  • [02140] RMVCUBE - REMOVE CUBICLE FROM FAMILY.
  • [02145] RMVCUBE - REMOVE CUBICLE FROM FAMILY.
  • [02177] PROC ACQ$FCT
  • [02179] PROC CFLUSH
  • [02180] PROC CONVER3
  • [02182] PROC CRDAST
  • [02183] PROC CWTAST
  • [02184] PROC MFLUSH
  • [02185] PROC MGETENT
  • [02187] PROC MPUTENT
  • [02189] PROC RLS$FCT
  • [02190] PROC UCP$RES
  • [02192] PROC UPDAST
  • [02285] PROC UPDCAT
  • [02286] UPDCAT - UPDATE FIELDS IN THE *SFM* CATALOG.
  • [02291] UPDCAT - UPDATE FIELDS IN THE *SFM* CATALOG.
  • [02326] PROC ACQ$FCT
  • [02328] PROC CFLUSH
  • [02329] PROC CONVER3
  • [02331] PROC CPUTPD
  • [02332] PROC CRDAST
  • [02333] PROC CWTAST
  • [02334] PROC KILL$UC
  • [02335] PROC LOANFCTQ
  • [02336] PROC RLS$FCT
  • [02337] PROC UCP$RES
  • [02339] PROC UASTPRM
  • [02518] PROC UPDMAP
  • [02519] UPDMAP - UPDATE MAP ENTRY.
  • [02524] UPDMAP - UPDATE MAP ENTRY.
  • [02555] PROC CONVER3
  • [02557] PROC MFLUSH
  • [02558] PROC MPUTENT
  • [02560] PROC UCP$RES
</WRAP> === Source Code ===
SX3UCP.txt
  1. PROC ADDCAR;
  2. # TITLE ADDCAR - ADD CARTRIDGE TO SUB-FAMILY. #
  3.  
  4. BEGIN # ADDCAR #
  5.  
  6. #
  7. ** ADDCAR - ADD CATRIDGE TO SUB-FAMILY.
  8. *
  9. * *ADDCAR* UPDATES THE *SMMAP*, *FCT*, AND *AST* (IN THAT
  10. * ORDER) TO REFLECT THE ADDITION OF THE CARTRIDGE TO THE
  11. * SUB-FAMILY.
  12. *
  13. * PROC ADDCAR
  14. *
  15. * ENTRY THE TYPE 3 UCP REQUEST TO BE PROCESSED IS IN ARRAY
  16. * *CPR*. THE BASE POINTER FOR *CPR* IS ALREADY SET. THE
  17. * *LTCT* ENTRY FOR THE REQUESTING UCP IS POINTED TO BY
  18. * *LTCENTRY*.
  19. *
  20. * EXIT THE TYPE 3 REQUEST HAS BEEN PROCESSED AND A RESPONSE
  21. * HAS BEEN SENT BACK TO THE UCP INDICATING COMPLETION
  22. * OF THE REQUEST.
  23. *
  24. * RESPONSES ARE RETURNED VIA LTC$RQR[LTCENTRY].
  25. * THESE RESPONSE CODE VALUES ARE DEFINED IN *COMBCPR*.
  26. * = OK3 OK
  27. * = C$M$INTLCK CATALOG/MAP INTERLOCKED
  28. * = C$M$NOPEN CATALOG/MAP NOT OPEN
  29. * = NO$SUB$CAT NO SUCH SUBCATALOG
  30. * = PF$PROB PERMANENT FILE PROBLEM
  31. * = ILLEG$ORD ORDINAL OUT OF RANGE
  32. #
  33.  
  34. #
  35. **** PROC ADDCAR - XREF LIST BEGIN.
  36. #
  37.  
  38. XREF
  39. BEGIN
  40. PROC ACQ$FCT; # FIND THE *FCTQ* ENTRY FOR CALLER
  41.   #
  42. PROC ANLZAST; # ANALYZE THE *AST* #
  43. PROC CEXTSC; # EXTEND SUBCATALOG #
  44. PROC CFLUSH; # FLUSHES THE CATALOG I/O BUFFER #
  45. PROC CONVER3; # CONVERT MAP/CATALOG ERRORS TO
  46.   *UCP* ERRORS #
  47. PROC CRDAST; # READ ALLOCATION SUMMARY TABLE #
  48. PROC CWTAST; # WRITE ALLOCATION SUMMARY TABLE #
  49. PROC LOANFCTQ; # ADD OR RECLAIM *FCTQ* ENTRY #
  50. PROC MFLUSH; # FLUSH MAP TO FILE #
  51. PROC MGETENT; # RETURN THE MAP ENTRY TO THE
  52.   CALLER #
  53. PROC MPUTENT; # MAP ENTRY TO THE MAP FILE BUFFER
  54.   #
  55. PROC RLS$FCT; # RELEASE *FCTQ* ENTRY #
  56. PROC UCP$RES; # NOTIFY *UCP* OF REQUEST COMPLETE
  57.   #
  58. PROC UASTPRM; # UPDATE *AST* AND *PRM* #
  59. END
  60.  
  61. #
  62. **** PROC ADDCAR - XREF LIST END.
  63. #
  64.  
  65. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  66. *CALL COMBFAS
  67. *CALL COMBCMD
  68. *CALL COMBCMS
  69. *CALL COMBCPR
  70. *CALL COMBMAP
  71. *CALL COMBMCT
  72. *CALL COMXFCQ
  73. *CALL COMXLTC
  74. *CALL COMXMSC
  75.  
  76.  
  77. ITEM FCTEADDR U; # *FCTQ* ENTRY ADDRESS FROM
  78.   *ACQ$FCT* #
  79. ITEM FCTNUM U; # NUMBER OF ENTRIES TO ADD #
  80. ITEM FXS U; # INDEX TO AST$AUSF #
  81. ITEM FXL U; # INDEX TO AST$AULF #
  82. ITEM GRTO U; # TOTAL SPACE IN GROUP #
  83. ITEM GPX U; # BEST GROUP #
  84. ITEM GPS U; # BEST ORDINAL #
  85. ITEM I U; # COUNTER #
  86. ITEM LENCOUNT I; # LENGTH COUNT #
  87. ITEM POS I; # POSITION #
  88. ITEM POINT U; # HOLDS POINTER TO SET LINKAGE #
  89. ITEM START U; # BEGINNING LOOP COUNTER #
  90. ITEM STARTLN U; # STARTING LENGTH #
  91. ITEM SORL U; # SMALL OR LARGE FILE LOOP #
  92. ITEM TERMX U; # TERMINATION OF LOOP #
  93. ITEM WORD I; # LINK FIELD WORD #
  94. ITEM ORD I; # *AST* ORDINAL #
  95.  
  96.  
  97.  
  98.  
  99.  
  100. #
  101. * GET THE MAP ENTRY FOR THE REQUEST.
  102. #
  103.  
  104. LOANFCTQ(0);
  105. MGETENT(CPR$CSU[0],SMORD,LOC(MAPBUFR),ERRSTAT);
  106. IF ERRSTAT NQ CMASTAT"NOERR"
  107. THEN
  108. BEGIN
  109. GOTO ERRORTN;
  110. END
  111.  
  112. P<SMUMAP> = LOC(MAPBUFR);
  113.  
  114. #
  115. * GET THE *AST* AND EXPAND THE CATALOG IF THE REQUIRED
  116. * *FCT* ENTRY DOES NOT PHYSICALLY EXIST.
  117. #
  118.  
  119. P<AST> = ASTBADR;
  120. CRDAST(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],ASTBADR,0,ERRSTAT);
  121. IF ERRSTAT NQ CMASTAT"NOERR"
  122. THEN
  123. BEGIN
  124. GOTO ERRORTN;
  125. END
  126.  
  127. IF (PRM$ENTRC[CPR$CSU[0]] + 15) LS CPR$FCT[0]
  128. THEN # EXPAND TO INCLUDE REQUIRED ENTRY
  129.   #
  130. BEGIN
  131. FCTNUM = CPR$FCT[0] - PRM$ENTRC[CPR$CSU[0]] - 15;
  132. CEXTSC(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],FCTNUM,0,ERRSTAT);
  133. IF ERRSTAT NQ CMASTAT"NOERR"
  134. THEN
  135. BEGIN
  136. GOTO ERRORTN;
  137. END
  138.  
  139. END
  140.  
  141. ORD = CPR$FCT[0];
  142.  
  143. #
  144. * GET THE *FCTQ* ENTRY.
  145. #
  146.  
  147.  
  148. ACQ$FCT(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0], ##
  149. CPR$FCT[0],FCTEADDR,0,ERRSTAT);
  150. IF ERRSTAT NQ CMASTAT"NOERR"
  151. THEN
  152. BEGIN
  153. GOTO ERRORTN;
  154. END
  155.  
  156. #
  157. * UPDATE THE MAP ENTRY WITH THE *CSN*.
  158. #
  159.  
  160. P<FCT> = FCTEADDR + FCTQHL;
  161. CM$CSND[0] = CPR$CSND[0];
  162. CM$CCOD[0] = CPR$CCOD[0];
  163. CM$FCTORD[0] = CPR$FCT[0];
  164. MPUTENT(CPR$CSU[0],SMORD,LOC(MAPBUFR),ERRSTAT);
  165. IF ERRSTAT NQ CMASTAT"NOERR"
  166. THEN
  167. BEGIN
  168. GOTO ERRORTN;
  169. END
  170.  
  171.  
  172. #
  173. * UPDATE THE *FCT* WITH THE *CSN* OF THE CARTRIDGE, AND
  174. * THE *FAULF* AND THE *FAUSF*.
  175. #
  176.  
  177. FCT$CSND[0] = CPR$CSND[0];
  178. FCT$FAUSF[0] = 1;
  179. FCT$FAULF[0] = CPR$B[0] + 1;
  180. FCT$CCOD[0] = CPR$CCOD[0];
  181. FCT$ORD[0] = CPR$FCT[0];
  182. FCT$FLGS[0] = 0;
  183. FCT$OCL[0] = 0;
  184. FCT$OCL1[0] = 0;
  185. FCT$OCL2[0] = 0;
  186. FCT$FTST[0] = INFTST;
  187. FCT$SPAU[0] = INSPAU;
  188. FCT$PRUS[0] = INPRUS;
  189. FCT$AVOT[0] = INAVOT;
  190. FCT$CDP[0] = CPR$B[0] + 1;
  191. FCT$OCLF[0] = 0;
  192. FCT$STRD[0] = CPR$STRD[0];
  193. FCT$STWR[0] = CPR$STWR[0];
  194. FCT$SRDE[0] = CPR$SRDE[0];
  195. FCT$SWRE[0] = CPR$SWRE[0];
  196. FCT$HRDE[0] = CPR$HRDE[0];
  197. FCT$STDM[0] = CPR$STDM[0];
  198. FCT$CRLD[0] = CPR$CRLD[0];
  199. FCT$LDER[0] = CPR$LDER[0];
  200. FCT$Y[0] = CPR$Y[0];
  201. FCT$Z[0] = CPR$Z[0];
  202. IF CPR$B[0] EQ 0
  203. THEN # SET FOR END CASE #
  204. BEGIN
  205. FCT$FAUSF[0] = 0;
  206. END
  207.  
  208. IF CPR$B[0] EQ 1931
  209. THEN
  210. BEGIN
  211. FCT$FAULF[0] = 0;
  212. END
  213.  
  214.  
  215. #
  216. * INITIALIZE CARTRIDGE LINK FIELD IN *FCT*.
  217. #
  218.  
  219. SLOWFOR SORL = 1 STEP 1 UNTIL 2
  220. DO # FOR LARGE AND SMALL FILES #
  221. BEGIN
  222. IF SORL EQ 1
  223. THEN # SET LINKAGE FOR LARGE FILES #
  224. BEGIN
  225. TERMX = CPR$B[0] + 1;
  226. POINT = 0;
  227. START = INAVOT;
  228. END
  229.  
  230. IF SORL EQ 2
  231. THEN # SET LINKAGE FOR SMALL FILES #
  232. BEGIN
  233. TERMX = 1;
  234. POINT = 0;
  235. START = CPR$B[0];
  236. END
  237.  
  238. LENCOUNT = 0;
  239. SLOWFOR I = START STEP -1 UNTIL TERMX
  240. DO # INITIALIZE FIELDS #
  241. BEGIN
  242. WORD = FCT$WD(I);
  243. POS = FCT$WP(I);
  244. FCT$CLFG(WORD,POS) = 0;
  245. FCT$LEN(WORD,POS) = LENCOUNT;
  246. IF (I - INAVVS + LENCOUNT) LQ 0
  247. THEN
  248. BEGIN
  249. FCT$LINK(WORD,POS) = 1;
  250. END
  251.  
  252. ELSE
  253. BEGIN
  254. FCT$LINK(WORD,POS) = I - INAVVS + LENCOUNT;
  255. END
  256.  
  257. IF (SORL EQ 1) AND ((I - INAVVS + LENCOUNT) LS TERMX)
  258. THEN # SHORT VOLUME FOR LARGE FILES #
  259. BEGIN
  260. FCT$LINK(WORD,POS) = TERMX;
  261. END
  262.  
  263. IF LENCOUNT EQ INAVVS OR I EQ TERMX
  264. THEN
  265. BEGIN
  266. FCT$CAUF(WORD,POS) = 0;
  267. FCT$LINK(WORD,POS) = POINT;
  268. POINT = I;
  269. END
  270.  
  271. ELSE
  272. BEGIN
  273. FCT$CAUF(WORD,POS) = 1;
  274. END
  275.  
  276.  
  277. LENCOUNT = LENCOUNT + 1;
  278. IF LENCOUNT GR INAVVS
  279. THEN # MAXIMUM VOLUME FOUND #
  280. BEGIN
  281. LENCOUNT = 0;
  282. END
  283.  
  284. END
  285.  
  286. END
  287.  
  288.  
  289. RLS$FCT(FCTEADDR,0,ERRSTAT);
  290. IF ERRSTAT NQ CMASTAT"NOERR"
  291. THEN
  292. BEGIN
  293. GOTO ERRORTN;
  294. END
  295.  
  296. #
  297. * UPDATE *AST* AND PREAMBLE.
  298. #
  299.  
  300. AST$1ST[ORD] = 0;
  301. AST$2ND[ORD] = 0;
  302. AST$AULF[ORD] = INAVOT - CPR$B[0];
  303. AST$AUSF[ORD] = CPR$B[0];
  304. AST$GR[ORD] = CPR$GR[0];
  305. AST$GRT[ORD] = CPR$GRT[0];
  306. AST$AAF[ORD] = TRUE;
  307. AST$NOCLF[ORD] = FALSE;
  308.  
  309.  
  310. AST$STAT[ORD] = ASTENSTAT"ASS$CART";
  311. ANLZAST(CPR$CSU[0],-1,-1,FXS,FXL,GPX,GPS);
  312. PRM$MXAUS[CPR$CSU[0]] = AST$AUSF[FXS];
  313. PRM$MXAUL[CPR$CSU[0]] = AST$AULF[FXL];
  314. PRM$MXAUGR[CPR$CSU[0]] = GPS;
  315.  
  316. UASTPRM(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],FCTEADDR,ERRSTAT);
  317. CWTAST(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],ASTBADR,0,ERRSTAT);
  318.  
  319. #
  320. * PASS THE REQUEST STATUS TO THE *UCP* AND RETURN TO CALLER.
  321. #
  322.  
  323. ERRORTN:
  324. CONVER3(CPR$RQT[0],CPR$RQC[0],ERRSTAT,ERRSTAT);
  325. LTC$RQR[LTCENTRY] = ERRSTAT;
  326. RLS$FCT(FCTEADDR,0,ERRSTAT);
  327. LOANFCTQ(-1);
  328. MFLUSH;
  329. CFLUSH(CPR$FAM[0],CPR$SUB[0],0,ERRSTAT);
  330. UCP$RES;
  331. RETURN;
  332.  
  333. END # ADDCAR #
  334.  
  335. TERM
  336. PROC ADDCSU;
  337. # TITLE ADDCSU - ADD *SM* SUB-CATALOG. #
  338.  
  339. BEGIN # ADDCSU #
  340.  
  341. #
  342. ** ADDCSU - ADD *SM* SUB-CATALOG.
  343. *
  344. * *ADDCSU* ADDS A SUB-CATALOG TO THE CATALOG SO AS TO
  345. * ACCOMADATE AN ADDITIONAL *SM*.
  346. *
  347. * PROC ADDCSU
  348. *
  349. * ENTRY THE TYPE 3 UCP REQUEST TO BE PROCESSED IS IN ARRAY
  350. * *CPR*. THE BASE POINTER FOR *CPR* IS ALREADY SET. THE
  351. * *LTCT* ENTRY FOR THE REQUESTING UCP IS POINTED TO BY
  352. * *LTCENTRY*.
  353. *
  354. * EXIT THE TYPE 3 REQUEST HAS BEEN PROCESSED AND A RESPONSE
  355. * HAS BEEN SENT BACK TO THE UCP INDICATING COMPLETION
  356. * OF THE REQUEST.
  357. *
  358. * RESPONSES ARE RETURNED VIA LTC$RQR[LTCENTRY].
  359. * THESE RESPONSE CODE VALUES ARE DEFINED IN *COMBCPR*.
  360. * = OK3 OK
  361. * = C$M$INTLCK CATALOG/MAP INTERLOCKED
  362. * = C$M$NOPEN CATALOG/MAP NOT OPEN
  363. * = SUB$CAT$EX SUBCATALOG ALREADY EXISTS
  364. * = PF$PROB PERMANENT FILE PROBLEM
  365. * = ILLEG$ORD ORDINAL OUT OF RANGE
  366. #
  367.  
  368. #
  369. **** PROC ADDCSU - XREF LIST BEGIN.
  370. #
  371.  
  372. XREF
  373. BEGIN
  374. PROC CADDSC; # ADD SUBCATALOG #
  375. PROC CFLUSH; # FLUSHES THE CATALOG I/O BUFFER #
  376. PROC CONVER3; # CONVERT MAP/CATALOG ERRORS TO
  377.   *UCP* ERRORS #
  378. PROC CRDAST; # READ ALLOCATION SUMMARY TABLE #
  379. PROC CWTAST; # WRITE ALLOCATION SUMMARY TABLE #
  380. PROC UCP$RES; # NOTIFY *UCP* OF REQUEST COMPLETE
  381.   #
  382. END
  383.  
  384. #
  385. **** PROC ADDCSU - XREF LIST END.
  386. #
  387.  
  388. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  389. *CALL COMBFAS
  390. *CALL COMBCMD
  391. *CALL COMBCMS
  392. *CALL COMBCPR
  393. *CALL COMBMAP
  394. *CALL COMBMCT
  395. *CALL COMXLTC
  396. *CALL COMXMSC
  397.  
  398.  
  399. ITEM FCTNUM U; # *FCT* ENTRY INCREMENT #
  400. ITEM I U; # COUNTER #
  401. ITEM K U; # COUNTER #
  402.  
  403.  
  404.  
  405.  
  406.  
  407. #
  408. * CREATE A SUB-CATALOG FOR THE *SM*.
  409. #
  410.  
  411. FCTNUM = NUMFCT;
  412. CADDSC(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],FCTNUM,0,ERRSTAT);
  413. IF ERRSTAT NQ CMASTAT"NOERR"
  414. THEN
  415. BEGIN
  416. GOTO ERRORTN;
  417. END
  418.  
  419. #
  420. * GET THE AVAILABLE STREAM TABLE (*AST*).
  421. #
  422.  
  423. CRDAST(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],ASTBADR,0,ERRSTAT);
  424. IF ERRSTAT NQ CMASTAT"NOERR"
  425. THEN
  426. BEGIN
  427. CONVER3(CPR$RQT[0],CPR$RQC[0],ERRSTAT,ERRSTAT);
  428. LTC$RQR[LTCENTRY] = ERRSTAT;
  429. UCP$RES;
  430. RETURN;
  431. END
  432.  
  433. #
  434. * SET STATUS OF ENTRIES TO UNASSIGNED CUBE.
  435. #
  436.  
  437. P<AST> = ASTBADR;
  438. SLOWFOR I = 16 STEP 1 UNTIL (MAXORD + 15)
  439. DO # SET *AST* STATUS #
  440. BEGIN
  441. AST$STAT[I] = ASTENSTAT"UNASS$CUB";
  442. END
  443.  
  444. AST$NAME[15] = "*AST* ";
  445. AST$SM[15] = CPR$CSU[0];
  446.  
  447. #
  448. * REWRITE *AST*.
  449. #
  450.  
  451. CWTAST(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],ASTBADR,0,ERRSTAT);
  452.  
  453. #
  454. * SEND RESPONSE TO *UCP* AND RETURN TO CALLER.
  455. #
  456.  
  457. ERRORTN:
  458. CONVER3(CPR$RQT[0],CPR$RQC[0],ERRSTAT,ERRSTAT);
  459. LTC$RQR[LTCENTRY] = ERRSTAT;
  460. CFLUSH(CPR$FAM[0],CPR$SUB[0],0,ERRSTAT);
  461. UCP$RES;
  462. RETURN;
  463.  
  464. END # ADDCSU #
  465.  
  466. TERM
  467. PROC ADDCUBE;
  468. # TITLE ADDCUBE - ASSIGN CUBE TO SUB-FAMILY. #
  469.  
  470. BEGIN # ADDCUBE #
  471.  
  472. #
  473. ** ADDCUBE - ASSIGN CUBE TO SUB-FAMILY.
  474. *
  475. * *ADDCUBE* UPDATES THE *SMMAP*, *FCT*, AND *AST*
  476. * TO REFLECT THE ASSIGNMENT OF THE CUBICLE TO THE SUB-FAMILY.
  477. *
  478. * PROC ADDCUBE
  479. *
  480. * ENTRY THE TYPE 3 UCP REQUEST TO BE PROCESSED IS IN ARRAY
  481. * *CPR*. THE BASE POINTER FOR *CPR* IS ALREADY SET. THE
  482. * *LTCT* ENTRY FOR THE REQUESTING UCP IS POINTED TO BY
  483. * *LTCENTRY*.
  484. *
  485. * EXIT THE TYPE 3 REQUEST HAS BEEN PROCESSED AND A RESPONSE
  486. * HAS BEEN SENT BACK TO THE UCP INDICATING COMPLETION
  487. * OF THE REQUEST.
  488. *
  489. * RESPONSES ARE RETURNED VIA LTC$RQR[LTCENTRY].
  490. * THESE RESPONSE CODE VALUES ARE DEFINED IN *COMBCPR*.
  491. * = OK3 OK
  492. * = C$M$INTLCK CATALOG/MAP INTERLOCKED
  493. * = C$M$NOPEN CATALOG/MAP NOT OPEN
  494. * = NO$SUB$CAT NO SUCH SUBCATALOG
  495. * = PF$PROB PERMANENT FILE PROBLEM
  496. * = ILLEG$ORD ORDINAL OUT OF RANGE
  497. #
  498.  
  499. #
  500. **** PROC ADDCUBE - XREF LIST BEGIN.
  501. #
  502.  
  503. XREF
  504. BEGIN
  505. PROC ACQ$FCT; # FIND THE *FCTQ* ENTRY FOR CALLER
  506.   #
  507. PROC CEXTSC; # EXTEND SUBCATALOG #
  508. PROC CFLUSH; # FLUSHES THE CATALOG I/O BUFFER #
  509. PROC CONVER3; # CONVERT MAP/CATALOG ERRORS TO
  510.   *UCP* ERRORS #
  511. PROC CRDAST; # READ ALLOCATION SUMMARY TABLE #
  512. PROC CWTAST; # WRITE ALLOCATION SUMMARY TABLE #
  513. PROC MFLUSH; # FLUSH MAP TO FILE #
  514. PROC MGETENT; # RETURN THE MAP ENTRY TO THE
  515.   CALLER #
  516. PROC MPUTENT; # MAP ENTRY TO THE MAP FILE BUFFER
  517.   #
  518. PROC RLS$FCT; # RELEASE *FCTQ* ENTRY #
  519. PROC UCP$RES; # NOTIFY *UCP* OF REQUEST COMPLETE
  520.   #
  521. END
  522.  
  523. #
  524. **** PROC ADDCUBE - XREF LIST END.
  525. #
  526.  
  527. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  528. *CALL COMBFAS
  529. *CALL COMBCMD
  530. *CALL COMBCMS
  531. *CALL COMBCPR
  532. *CALL COMBMAP
  533. *CALL COMBMCT
  534. *CALL COMXFCQ
  535. *CALL COMXLTC
  536. *CALL COMXMSC
  537.  
  538.  
  539. ITEM FCTNUM U; # *FCT* ENTRY INCREMENT #
  540. ITEM FCTEADDR U; # *FCTQ* ENTRY ADDRESS RETURNED
  541.   FROM *ACQ$FCT* #
  542. ITEM ORD U; # ORDINAL OF *AST*/*FCT* ENTRY #
  543. ITEM I U; # COUNTER #
  544. ITEM K U; # COUNTER #
  545.  
  546.  
  547.  
  548.  
  549.  
  550. #
  551. * GET ALLOCATION SUMMARY TABLE FOR THE FAMILY.
  552. #
  553.  
  554. CRDAST(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],ASTBADR,0,ERRSTAT);
  555. IF ERRSTAT NQ CMASTAT"NOERR"
  556. THEN
  557. BEGIN
  558. CONVER3(CPR$RQT[0],CPR$RQC[0],ERRSTAT,ERRSTAT);
  559. LTC$RQR[LTCENTRY] = ERRSTAT;
  560. UCP$RES;
  561. RETURN;
  562. END
  563.  
  564. FCTNUM = NUMFCT;
  565.  
  566.  
  567. #
  568. * GET THE MAP ENTRY FOR THE *XY* COORDINATES OF THE REQUEST.
  569. #
  570.  
  571. MGETENT(CPR$CSU[0],SMORD,LOC(MAPBUFR),ERRSTAT);
  572. IF ERRSTAT NQ CMASTAT"NOERR"
  573. THEN
  574. BEGIN
  575. GOTO ERRORTN;
  576. END
  577.  
  578.  
  579. #
  580. * UPDATE THE MAP AND *FCT* TO REFLECT A CUBE BEING ASSIGNED
  581. * TO A FAMILY.
  582. #
  583.  
  584. P<FCT> = FCTEADDR + FCTQHL;
  585. P<SMUMAP> = LOC(MAPBUFR);
  586. CM$FMLYNM[0] = CPR$FAM[0];
  587. CM$SUB[0] = CPR$SUB[0];
  588. CM$CODE[0] = CUBSTAT"SUBFAM";
  589. CM$CSND[0] = " ";
  590. MPUTENT(CPR$CSU[0],SMORD,LOC(MAPBUFR),ERRSTAT);
  591. IF ERRSTAT NQ CMASTAT"NOERR"
  592. THEN
  593. BEGIN
  594. GOTO ERRORTN;
  595. END
  596.  
  597.  
  598.  
  599.  
  600.  
  601. #
  602. * RETURN THE RESPONSE TO THE UCP, REWRITE THE ALLOCATION
  603. * SUMMARY TABLE, AND RETURN TO THE CALLER.
  604. #
  605.  
  606. ERRORTN:
  607. CONVER3(CPR$RQT[0],CPR$RQC[0],ERRSTAT,ERRSTAT);
  608. LTC$RQR[LTCENTRY] = ERRSTAT;
  609. RLS$FCT(FCTEADDR,0,ERRSTAT);
  610. MFLUSH;
  611. UCP$RES;
  612. RETURN;
  613.  
  614. END # ADDCUBE #
  615.  
  616. TERM
  617. PROC CONVER3((REQTYPE),(REQCODE),(MCSTAT),RSTATUS);
  618. # TITLE CONVER3 - CONVERT MAP/CATALOG ERRORS TO *UCP* ERRORS. #
  619.  
  620. BEGIN # CONVER3 #
  621.  
  622. #
  623. ** CONVER3 - CONVERT MAP/CATALOG ERRORS TO *UCP* ERRORS.
  624. *
  625. * PROC CONVER3((REQTYPE),(REQCODE),(MCSTAT),RSTATUS)
  626. *
  627. * ENTRY REQTYPE - REQUEST TYPE (TYPE 3).
  628. * REQCODE - REQUEST CODE (VALID TYPE 3 CODE).
  629. * MCSTAT - MAP/CATALOG ERROR CODE.
  630. *
  631. * EXIT RSTATUS - *UCP* ERROR CODE.
  632. *
  633. * MESSAGES * EXEC ABNORMAL, CONVER3. *
  634. #
  635.  
  636. ITEM REQTYPE U; # REQUEST TYPE #
  637. ITEM REQCODE U; # REQUEST CODE #
  638. ITEM MCSTAT U; # MAP/CATALOG ERROR CODE #
  639. ITEM RSTATUS U; # *UCP* ERROR CODE RETURNED #
  640.  
  641. #
  642. **** PROC CONVER3 - XREF LIST BEGIN.
  643. #
  644.  
  645. XREF
  646. BEGIN
  647. PROC ABORT; # INTERFACE TO *ABORT* MACRO #
  648. PROC MESSAGE; # CALLS *MESSAGE* MACRO #
  649. END
  650.  
  651. #
  652. **** PROC CONVER3 - XREF LIST END.
  653. #
  654.  
  655. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  656. *CALL COMBFAS
  657. *CALL COMBCMS
  658. *CALL COMBCPR
  659. *CALL,COMXMSC
  660.  
  661. ARRAY ERRMAP [CMASTAT"NOERR":CMASTAT"STATLAST"] P(1);
  662. BEGIN
  663. ITEM ERR$RCV U(00,00,60) = [ # RESPONSE CODE VALIDITY #
  664. O"37777000000000000000", # NO ERROR #
  665. O"37775000000000000000", # FILE INTERLOCKED #
  666. O"00000000000000000000", # FILE ALREADY OPEN #
  667. O"37774000000000000000", # FILE NOT OPEN #
  668. O"00000000000000000000", # FILE NOT OPEN IN *MODIFY* MODE #
  669. O"00000000000000000000", # FILE ALREADY INITIALIZED #
  670. O"04000000000000000000", # SUBCATALOG ALREADY EXISTS #
  671. O"37674000000000000000", # NO SUCH SUBCATALOG #
  672. O"37775000000000000000", # *CIO* ERROR #
  673. O"33370000000000000000", # ORDINAL OUT OF RANGE #
  674. O"00001000000000000000", # MAP/CATALOG *ATTACH* ERROR #
  675. O"00000000000000000000", # MAP/CATALOG *DEFINE* ERROR #
  676. O"24400000000000000000", # TEMPORARY FILE *DEFINE* ERROR #
  677. O"24400000000000000000", # TEMPORARY FILE *ATTACH* ERROR #
  678. O"24400000000000000000", # TEMPORARY FILE *PURGE* ERROR #
  679. O"24400000000000000000", # TEMPORARY FILE *RENAME* ERROR #
  680. O"00000000000000000000", # *OCT* FULL #
  681. ];
  682. END
  683.  
  684. SWITCH CONV$LIST:CMASTAT # CONVERSION LIST #
  685. CONV0:NOERR, # NO ERROR #
  686. CONV1:INTLK, # FILE INTERLOCKED #
  687. CONV2:NOTOPEN, # FILE NOT OPENED #
  688. CONV4:SCEXISTS, # SUBCATALOG ALREADY EXISTS #
  689. CONV5:NOSUBCAT, # NO SUCH SUBCATALOG #
  690. CONV6:CIOERR, # *CIO* ERROR #
  691. CONV8:ORDERR, # ORDINAL OUT OF RANGE #
  692. CONV6:ATTERR, # MAP/CATALOG *ATTACH* ERROR #
  693. CONV6:DEFERR, # MAP/CATALOG *DEFINE* ERROR #
  694. CONV6:TDEFERR, # TEMPORARY FILE *DEFINE* ERROR #
  695. CONV6:TATTERR, # TEMPORARY FILE *ATTACH* ERROR #
  696. CONV6:TPRGERR, # TEMPORARY FILE *PURGE* ERROR #
  697. CONV6:TRNMERR; # TEMPORARY FILE *RENAME* ERROR #
  698. CONTROL EJECT;
  699.  
  700. #
  701. * TEST FOR AN INVALID ERROR CODE.
  702. #
  703.  
  704. IF REQTYPE NQ TYP"TYP3" ##
  705. OR MCSTAT GQ CMASTAT"STATLAST" ##
  706. OR REQCODE GQ REQTYP3"LSTREQTYP3" ##
  707. OR B<REQCODE,1>ERR$RCV[MCSTAT] EQ 0
  708. THEN
  709. BEGIN
  710. FE$RTN[0] = "CONVER3.";
  711. MESSAGE(FEMSG[0],UDFL1);
  712. ABORT;
  713. END
  714.  
  715. #
  716. * SIMULATED CASE STATEMENT TO CONVERT THE MAP/CATALOG ERROR CODE
  717. * TO THE APPROPRIATE *UCP* ERROR CODE.
  718. #
  719.  
  720. GOTO CONV$LIST[MCSTAT];
  721.  
  722. CONV0: # NO ERROR #
  723. RSTATUS = RESPTYP3"OK3";
  724. RETURN;
  725.  
  726. CONV1: # CATALOG/MAP INTERLOCKED #
  727. RSTATUS = RESPTYP3"C$M$INTLCK";
  728. RETURN;
  729.  
  730. CONV2: # CATALOG/MAP NOT OPEN #
  731. RSTATUS = RESPTYP3"C$M$NOPEN";
  732. RETURN;
  733.  
  734. CONV4: # SUBCATALOG ALREADY EXISTS #
  735. RSTATUS = RESPTYP3"SUB$CAT$EX";
  736. RETURN;
  737.  
  738. CONV5: # NO SUCH SUBCATALOG #
  739. RSTATUS = RESPTYP3"NO$SUB$CAT";
  740. RETURN;
  741.  
  742. CONV6: # PERMANENT FILE PROBLEM #
  743. RSTATUS = RESPTYP3"PF$PROB";
  744. RETURN;
  745.  
  746. CONV8: # ORDINAL OUT OF RANGE #
  747. RSTATUS = RESPTYP3"ILLEG$ORD";
  748. RETURN;
  749.  
  750. #
  751. * END SIMULATED CASE STATEMENT TO CONVERT THE MAP/CATALOG
  752. * ERROR CODE TO THE APPROPRIATE *UCP* ERROR CODE.
  753. #
  754.  
  755. END # CONVER3 #
  756.  
  757. TERM
  758. PROC GETPD;
  759. # TITLE GETPD - RETURNS LAST *PRG$ORPH* DATE AND TIME. #
  760.  
  761. BEGIN # GETPD #
  762.  
  763. #
  764. ** GETPD - RETURNS LAST *PRG$ORPH* DATE AND TIME.
  765. * *GETPD* RETURNS THE DATE AND TIME AT WHICH THE LAST
  766. * *PRG$ORPH* REQUEST FROM *SSVAL* WAS PROCESSED.
  767. * THE DATE AND TIME IS RETURNED VIA THE *CSN* FIELD
  768. * OF THE RESPONSE WORD.
  769. *
  770. * PROC GETPD
  771. *
  772. * ENTRY THE TYPE 3 UCP REQUEST TO BE PROCESSED IS IN ARRAY
  773. * *CPR*. THE BASE POINTER FOR *CPR* IS ALREADY SET. THE
  774. * *LTCT* ENTRY FOR THE REQUESTING UCP IS POINTED TO BY
  775. * *LTCENTRY*.
  776. *
  777. * EXIT THE TYPE 3 REQUEST HAS BEEN PROCESSED AND A RESPONSE
  778. * HAS BEEN SENT BACK TO THE UCP INDICATING COMPLETION
  779. * OF THE REQUEST.
  780. *
  781. * RESPONSES ARE RETURNED VIA LTC$RQR[LTCENTRY].
  782. * THESE RESPONSE CODE VALUES ARE DEFINED IN *COMBCPR*.
  783. * = OK3 OK
  784. * = C$M$INTLCK CATALOG/MAP INTERLOCKED
  785. * = C$M$NOPEN CATALOG/MAP NOT OPEN
  786. * = RESUB$REQ RESUBMIT REQUEST
  787. * = NO$SUB$CAT NO SUCH SUBCATALOG
  788. * = PF$PROB PERMANENT FILE PROBLEM
  789. #
  790.  
  791. #
  792. **** PROC GETPD - XREF LIST BEGIN.
  793. #
  794.  
  795. XREF
  796. BEGIN
  797. PROC CGETPD; # GET PURGE DATE #
  798. PROC CONVER3; # CONVERT MAP/CATALOG ERRORS TO
  799.   *UCP* ERRORS #
  800. PROC UCP$RES; # NOTIFY *UCP* OF REQUEST COMPLETE
  801.   #
  802. END
  803.  
  804. #
  805. **** PROC GETPD - XREF LIST END.
  806. #
  807.  
  808.  
  809.  
  810. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  811. *CALL COMBFAS
  812. *CALL COMBCPR
  813. *CALL COMBMAP
  814. *CALL COMXLTC
  815.  
  816. ITEM LASTPRG U; # LAST PURGE DATE AND TIME #
  817.  
  818.  
  819.  
  820.  
  821.  
  822. CGETPD(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],LASTPRG,0,ERRSTAT);
  823. CONVER3(CPR$RQT[0],CPR$RQC[0],ERRSTAT,ERRSTAT);
  824. LTC$RQR[LTCENTRY] = ERRSTAT;
  825. LTC$DATE[LTCENTRY] = LASTPRG;
  826. UCP$RES;
  827. RETURN;
  828.  
  829. END # GETPD #
  830.  
  831. TERM
  832. PROC LOANFCTQ(ACTION);
  833.  
  834. # TITLE LOANFCTQ - ADD OR RECLAIM AN *FCTQ* ENTRY FOR *UCP* PROCS. #
  835.  
  836. BEGIN # LOANFCTQ #
  837.  
  838. #
  839. ** LOANFCTQ - ADD OR RECLAIM AN *FCTQ* ENTRY FOR *UCP* PROCESSING.
  840. *
  841. * THIS PROCEDURE PROVIDES AN *FCTQ* ENTRY WHICH CAN BE USED
  842. * BY THE CALLING *UCP* REQUEST PROCESSOR IN THE EVENT THE NORMAL
  843. * *FCTQ* ENTRIES ARE IN USE BY *HLRQ* PROCESSING. THE CALLING
  844. * PROCEDURES RULES ARE TO CALL *LOANFCTQ* PRIOR TO THE *ACQ$FCT*
  845. * CALL TO ENSURE AN AVAILABLE *FCTQ* ENTRY. AFTER CALLING
  846. * *RLS$FCT*, *LOANFCTQ* IS AGAIN CALLED TO TAKE THE TEMPORARY
  847. * *FCTQ* ENTRY OUT OF THE *FCTQ* FREE SPACE CHAIN.
  848. *
  849. * PROC LOANFCTQ(ACTION)
  850. *
  851. * ENTRY ACTION = 0, AN *FCTQ* ENTRY TO BE MADE AVAILABLE.
  852. * = X, THE *FCTQ* ENTRY IS TO BE RECLAIMED.
  853. *
  854. * EXIT THE *FCTQ* FREE SPACE CHAIN IS PROPERLY ADJUSTED.
  855. #
  856.  
  857. ITEM ACTION U; # REQUESTED PROCESSING ACTION #
  858.  
  859. #
  860. **** PROC LOANFCTQ - XREF LIST BEGIN.
  861. #
  862.  
  863. XREF
  864. BEGIN
  865. PROC ADD$LNK; # ADD ENTRY TO A CHAIN #
  866. PROC DEL$LNK; # DELETE ENTRY FROM A CHAIN #
  867. PROC ZFILL; # ZERO FILL AN ARRAY #
  868. END
  869.  
  870. #
  871. **** PROC LOANFCTQ - XREF LIST END.
  872. #
  873.  
  874. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  875.  
  876. *CALL,COMBFAS
  877. *CALL,COMBCHN
  878. *CALL,COMBMCT
  879. *CALL,COMXFCQ
  880.  
  881. ARRAY LOANERFCTQ [0:0] S(FCTQHL);; # *FCTQ* HEADER #
  882. ARRAY LOANERFCT [0:0] S(FCTENTL);; # *FCT* ENTRY #
  883.  
  884.  
  885. IF ACTION EQ 0
  886. THEN
  887. BEGIN
  888. ZFILL(LOANERFCTQ[0],FCTQHL+FCTENTL);
  889. ADD$LNK(LOC(LOANERFCTQ[0]),LCHN"FCT$FRSPC",0);
  890. END
  891.  
  892. ELSE
  893. BEGIN
  894. DEL$LNK(LOC(LOANERFCTQ[0]),LCHN"FCT$FRSPC",0);
  895. END
  896.  
  897. RETURN;
  898. END # LOANFCTQ #
  899.  
  900. TERM
  901. PROC MAPRCLM;
  902. # TITLE MAPRCLM - RE-ATTACHES DESIGNATED MAP FILE. #
  903.  
  904. BEGIN # MAPRCLM #
  905.  
  906. #
  907. ** MAPRCLM - RE-ATTACHES DESIGNATED MAP FILE.
  908. *
  909. * *MAPRCLM* RE-ATTACHES THE DESIGNATED MAP FILE.
  910. *
  911. * PROC MAPRCLM
  912. *
  913. * ENTRY THE TYPE 3 UCP REQUEST TO BE PROCESSED IS IN ARRAY
  914. * *CPR*. THE BASE POINTER FOR *CPR* IS ALREADY SET. THE
  915. * *LTCT* ENTRY FOR THE REQUESTING UCP IS POINTED TO BY
  916. * *LTCENTRY*.
  917. *
  918. * EXIT THE TYPE 3 REQUEST HAS BEEN PROCESSED AND A RESPONSE
  919. * HAS BEEN SENT BACK TO THE UCP INDICATING COMPLETION
  920. * OF THE REQUEST.
  921. *
  922. * RESPONSES ARE RETURNED VIA LTC$RQR[LTCENTRY].
  923. * THESE RESPONSE CODE VALUES ARE DEFINED IN *COMBCPR*.
  924. * = OK3 OK
  925. * = PF$PROB PERMANENT FILE PROBLEM
  926. *
  927. * MESSAGES * EXEC ABNORMAL, MAPRCLM.*
  928. #
  929.  
  930. #
  931. **** PROC MAPRCLM - XREF LIST BEGIN.
  932. #
  933.  
  934. XREF
  935. BEGIN
  936. PROC ABORT; # INTERFACE TO *ABORT* MACRO #
  937. PROC CONVER3; # CONVERT MAP/CATALOG ERRORS TO
  938.   *UCP* ERRORS #
  939. PROC MESSAGE; # CALLS *MESSAGE* MACRO #
  940. PROC MRCLMLK; # RECLAIM MAP INTERLOCK. #
  941. PROC SETPFP; # SET FAMILY AND USER INDEX #
  942. PROC UCP$RES; # NOTIFY *UCP* OF REQUEST
  943.   COMPLETE. #
  944. END
  945.  
  946. #
  947. **** PROC MAPRCLM - XREF LIST END.
  948. #
  949.  
  950. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  951. *CALL COMBFAS
  952. *CALL COMBCPR
  953. *CALL COMBMAP
  954. *CALL COMBPFP
  955. *CALL COMXLTC
  956. *CALL COMXMSC
  957.  
  958.  
  959.  
  960.  
  961.  
  962. PFP$WRD0[0] = 0; # SET FAMILY AND USER INDEX #
  963. PFP$FG1[0] = TRUE;
  964. PFP$FG4[0] = TRUE;
  965. PFP$FAM[0] = DEF$FAM;
  966. PFP$UI[0] = DEF$UI;
  967. SETPFP(PFP);
  968. IF PFP$STAT[0] NQ 0
  969. THEN # FAMILY NOT FOUND #
  970. BEGIN
  971. FE$RTN[0] = "MAPRCLM.";
  972. MESSAGE(FEMSG[0],UDFL1); # ISSUE ERROR MESSAGE #
  973. ABORT;
  974. END
  975.  
  976. MRCLMLK(CPR$CSU[0],ERRSTAT);
  977. CONVER3(CPR$RQT[0],CPR$RQC[0],ERRSTAT,ERRSTAT);
  978. LTC$RQR[LTCENTRY] = ERRSTAT;
  979. UCP$RES;
  980. RETURN;
  981.  
  982. END # MAPRCLM #
  983.  
  984. TERM
  985. PROC MAPRELS;
  986. # TITLE MAPRELS - RETURNS THE DESIGNATED MAP FILE. #
  987.  
  988. BEGIN # MAPRELS #
  989.  
  990. #
  991. ** MAPRELS - RETURNS THE DESIGNATED MAP FILE.
  992. *
  993. * *MAPRELS* RETURNS THE DESIGNATED MAP FILE.
  994. *
  995. * PROC MAPRELS
  996. *
  997. * ENTRY THE TYPE 3 UCP REQUEST TO BE PROCESSED IS IN ARRAY
  998. * *CPR*. THE BASE POINTER FOR *CPR* IS ALREADY SET. THE
  999. * *LTCT* ENTRY FOR THE REQUESTING UCP IS POINTED TO BY
  1000. * *LTCENTRY*.
  1001. *
  1002. * EXIT THE TYPE 3 REQUEST HAS BEEN PROCESSED AND A RESPONSE
  1003. * HAS BEEN SENT BACK TO THE UCP INDICATING COMPLETION
  1004. * OF THE REQUEST.
  1005. *
  1006. * RESPONSES ARE RETURNED VIA LTC$RQR[LTCENTRY].
  1007. * THESE RESPONSE CODE VALUES ARE DEFINED IN *COMBCPR*.
  1008. * = OK3 OK
  1009. * = C$M$NOPEN CATALOG/MAP NOT OPEN
  1010. #
  1011.  
  1012. #
  1013. **** PROC MAPRELS - XREF LIST BEGIN.
  1014. #
  1015.  
  1016. XREF
  1017. BEGIN
  1018. PROC CONVER3; # CONVERT MAP/CATALOG ERRORS TO
  1019.   *UCP* ERRORS #
  1020. PROC MRELSLK; # RETURN A MAP FILE #
  1021. PROC UCP$RES; # NOTIFY *UCP* OF REQUEST COMPLETE
  1022.   #
  1023. END
  1024.  
  1025. #
  1026. **** PROC MAPRELS - XREF LIST END.
  1027. #
  1028.  
  1029. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  1030. *CALL COMBFAS
  1031. *CALL COMBCPR
  1032. *CALL COMXLTC
  1033.  
  1034.  
  1035.  
  1036.  
  1037.  
  1038. LTC$RQR[LTCENTRY] = RESPTYP3"OK3";
  1039. MRELSLK(CPR$CSU[0]);
  1040. UCP$RES;
  1041. RETURN;
  1042.  
  1043. END # MAPRELS #
  1044.  
  1045. TERM
  1046. PROC NONQ$RP;
  1047. # TITLE NONQ$RP - PRELIMINARY PROCESSING OF TYPE 3 REQUEST. #
  1048.  
  1049. BEGIN # NONQ$RP #
  1050.  
  1051.  
  1052. #
  1053. ** NONQ$RP - PRELIMINARY PROCESSING OF TYPE 3 REQUEST.
  1054. *
  1055. * *NONQ$RP DOES PRELIMINARY PROCESSING OF TYPE 3 *UCP* REQUESTS
  1056. * AND CALLS THE PROPER MODULE TO DO THE DETAILED PROCESSING OF
  1057. * THE REQUESTS.
  1058. *
  1059. * PROC NONQ$RP
  1060. *
  1061. * ENTRY THE TYPE 3 UCP REQUEST TO BE PROCESSED IS IN ARRAY
  1062. * *CPR*. THE BASE POINTER FOR *CPR* IS ALREADY SET. THE
  1063. * *LTCT* ENTRY FOR THE REQUESTING UCP IS POINTED TO BY
  1064. * *LTCENTRY*.
  1065. *
  1066. * EXIT THE TYPE 3 REQUEST HAS BEEN PROCESSED AND A RESPONSE
  1067. * HAS BEEN SENT BACK TO THE UCP INDICATING COMPLETION
  1068. * OF THE REQUEST.
  1069. #
  1070.  
  1071. #
  1072. **** PROC NONQ$RP - XREF LIST BEGIN.
  1073. #
  1074.  
  1075. XREF
  1076. BEGIN
  1077. PROC KILL$UC; # ABORT A *UCP* #
  1078. PROC SSOVL; # LOAD *MSAS* OVERLAYS #
  1079. END
  1080.  
  1081. #
  1082. **** PROC NONQ$RP - XREF LIST END.
  1083. #
  1084.  
  1085.  
  1086. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  1087. *CALL COMBFAS
  1088. *CALL COMBCPR
  1089. *CALL COMBOVL
  1090. *CALL COMBUCR
  1091. *CALL COMXMSC
  1092.  
  1093. #
  1094. * SWITCH LIST TO PROCESS THE TYPE 3 REQUESTS.
  1095. #
  1096.  
  1097. SWITCH TYP3SW:REQTYP3
  1098. ADDCUBEL:ADD$CUBE,
  1099. ADDCARTL:ADD$CART,
  1100. ADDCSUL:ADD$CSU,
  1101. RMVCSUL:RMV$CSU,
  1102. RMVCUBEL:RMV$CUBE,
  1103. RMVCARTL:RMV$CART,
  1104. UPDCATL:UPD$CAT,
  1105. UPDMAPL:UPD$MAP,
  1106. RELSETUPL:REL$SETUP,
  1107. PURGFRAGL:PURG$FRAG,
  1108. PURGFCTL:PURG$FCT,
  1109. GTPRGDATEL:GT$PRGDATE,
  1110. RELMPLKL:REL$MPLK,
  1111. RECMPLKL:REC$MPLK;
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117. #
  1118. * REQUEST CODE HAS TO BE VALID.
  1119. #
  1120.  
  1121. IF CPR$RQC[0] EQ REQTYP3"RES3" ##
  1122. OR CPR$RQC[0] GQ REQTYP3"LSTREQTYP3"
  1123. THEN
  1124. BEGIN
  1125. KILL$UC(KILLCODE"INVRQC");
  1126. RETURN;
  1127. END
  1128.  
  1129. #
  1130. * CALL THE APPROPRIATE PROCESSOR AND THEN RETURN TO THE CALLER.
  1131. #
  1132.  
  1133. GOTO TYP3SW[CPR$RQC[0]];
  1134.  
  1135. ADDCUBEL:
  1136. SSOVL(LADDCUBE,0);
  1137. RETURN;
  1138.  
  1139. ADDCARTL:
  1140. SSOVL(LADDCAR,0);
  1141. RETURN;
  1142.  
  1143.  
  1144. ADDCSUL:
  1145. SSOVL(LADDCSU,0);
  1146. RETURN;
  1147.  
  1148. RMVCUBEL:
  1149. SSOVL(LRMVCUBE,0);
  1150. RETURN;
  1151.  
  1152. RMVCARTL:
  1153. SSOVL(LRMVCAR,0);
  1154. RETURN;
  1155.  
  1156. RMVCSUL:
  1157. SSOVL(LRMVCSU,0);
  1158. RETURN;
  1159.  
  1160. UPDCATL:
  1161. SSOVL(LUPDCAT,0);
  1162. RETURN;
  1163.  
  1164. UPDMAPL:
  1165. SSOVL(LUPDMAP,0);
  1166. RETURN;
  1167.  
  1168. PURGFRAGL:
  1169. SSOVL(LRESETUP,0);
  1170. RETURN;
  1171.  
  1172. RELSETUPL:
  1173. SSOVL(LRESETUP,0);
  1174. RETURN;
  1175.  
  1176. PURGFCTL:
  1177. SSOVL(LPURGFCT,0);
  1178. RETURN;
  1179.  
  1180. GTPRGDATEL:
  1181. SSOVL(LGETPD,0);
  1182. RETURN;
  1183.  
  1184. RELMPLKL:
  1185. SSOVL(LMAPRELS,0);
  1186. RETURN;
  1187.  
  1188. RECMPLKL:
  1189. SSOVL(LMAPRCLM,0);
  1190. RETURN;
  1191.  
  1192. END # NONQ$RP #
  1193.  
  1194. TERM
  1195. PROC PURGFCT;
  1196. # TITLE PURGFCT - DELETE *FCT* ENTRY FROM USE. #
  1197.  
  1198. BEGIN # PURGFCT #
  1199.  
  1200. #
  1201. ** PURGFCT - DELETE *FCT* ENTRY FROM USE.
  1202. *
  1203. * *PURGFCT* DELETES AN *FCT* ENTRY AND UPDATES THE *AST*
  1204. * AND PREAMBLE.
  1205. * *FCT* ENTRY.
  1206. *
  1207. * PROC PURGFCT
  1208. *
  1209. * ENTRY THE TYPE 3 UCP REQUEST TO BE PROCESSED IS IN ARRAY
  1210. * *CPR*. THE BASE POINTER FOR *CPR* IS ALREADY SET. THE
  1211. * *LTCT* ENTRY FOR THE REQUESTING UCP IS POINTED TO BY
  1212. * *LTCENTRY*.
  1213. *
  1214. * EXIT THE TYPE 3 REQUEST HAS BEEN PROCESSED AND A RESPONSE
  1215. * HAS BEEN SENT BACK TO THE UCP INDICATING COMPLETION
  1216. * OF THE REQUEST.
  1217. *
  1218. * RESPONSES ARE RETURNED VIA LTC$RQR[LTCENTRY].
  1219. * THESE RESPONSE CODE VALUES ARE DEFINED IN *COMBCPR*.
  1220. * = OK3 OK
  1221. * = C$M$INTLCK CATALOG/MAP INTERLOCKED
  1222. * = C$M$NOPEN CATALOG/MAP NOT OPEN
  1223. * = NO$SUB$CAT NO SUCH SUBCATALOG
  1224. * = PF$PROB PERMANENT FILE PROBLEM
  1225. * = ILLEG$ORD ORDINAL OUT OF RANGE
  1226. #
  1227.  
  1228. #
  1229. **** PROC PURGFCT - XREF LIST BEGIN.
  1230. #
  1231.  
  1232. XREF
  1233. BEGIN
  1234. PROC ACQ$FCT; # FIND THE *FCTQ* ENTRY FOR CALLER
  1235.   #
  1236. PROC ANLZAST; # ANALYZE *AST* #
  1237. PROC CFLUSH; # FLUSHES THE CATALOG I/O BUFFER #
  1238. PROC CNTFS; # COUNT FREE STREAMS #
  1239. PROC CONVER3; # CONVERT MAP/CATALOG ERRORS TO
  1240.   *UCP* ERRORS #
  1241. PROC CRDAST; # READ ALLOCATION SUMMARY TABLE #
  1242. PROC CWTAST; # WRITE ALLOCATION SUMMARY TABLE #
  1243. PROC LOANFCTQ; # ADD OR RECLAIM *FCTQ* ENTRY #
  1244. PROC RLS$FCT; # RELEASE *FCTQ* ENTRY #
  1245. PROC UCP$RES; # NOTIFY *UCP* OF REQUEST COMPLETE
  1246.   #
  1247. PROC UPDAST; # UPDATE THE *AST* #
  1248. PROC ZFILL; # ZERO FILLS A BUFFER #
  1249. END
  1250.  
  1251. #
  1252. **** PROC PURGFCT - XREF LIST END.
  1253. #
  1254.  
  1255. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  1256. *CALL COMBFAS
  1257. *CALL COMBCHN
  1258. *CALL COMBCMD
  1259. *CALL COMBCMS
  1260. *CALL COMBCPR
  1261. *CALL COMBMAP
  1262. *CALL COMBMCT
  1263. *CALL COMXFCQ
  1264. *CALL COMXLTC
  1265. *CALL COMXMSC
  1266.  
  1267. ITEM FCTEADDR U; # *FCTQ* ENTRY ADDRESS #
  1268. ITEM FROMCHAIN U; # CHAIN TO MOVE *FCT* ENTRY FROM #
  1269. ITEM FXL I; # INDEX FOR LARGE *AU*S #
  1270. ITEM FXS I; # INDEX FOR SMALL *AU*S #
  1271. ITEM GPS I; # BEST GROUP #
  1272. ITEM GPX I; # BEST ORDINAL #
  1273. ITEM I U; # COUNTER #
  1274. CONTROL EJECT;
  1275.  
  1276. #
  1277. * GET THE *FCTQ* ENTRY FOR THE REQUEST.
  1278. #
  1279.  
  1280. LOANFCTQ(0);
  1281.  
  1282. ACQ$FCT(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0], ##
  1283. CPR$FCT[0],FCTEADDR,0,ERRSTAT);
  1284. IF ERRSTAT NQ CMASTAT"NOERR"
  1285. THEN
  1286. BEGIN
  1287. GOTO ERRORTN;
  1288. END
  1289.  
  1290. #
  1291. * GET THE ALLOCATION SUMMARY TABLE.
  1292. #
  1293.  
  1294. CRDAST(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],ASTBADR,0,ERRSTAT);
  1295. IF ERRSTAT NQ CMASTAT"NOERR"
  1296. THEN
  1297. BEGIN
  1298. GOTO ERRORTN;
  1299. END
  1300.  
  1301.  
  1302. P<FCT> = FCTEADDR + FCTQHL;
  1303.  
  1304. #
  1305. * SET *AST* STATUS TO UNASSIGNED CUBE, AND UPDATE PREAMBLE.
  1306. #
  1307.  
  1308. P<AST> = ASTBADR;
  1309. ZFILL(AST[CPR$FCT[0]],2);
  1310. AST$STAT[CPR$CSU[0]] = ASTENSTAT"UNASS$CUB";
  1311.  
  1312. ANLZAST(CPR$CSU[0],-1,-1,FXS,FXL,GPX,GPS);
  1313. PRM$MXAUS[CPR$CSU[0]] = AST$AUSF[FXS];
  1314. PRM$MXAUL[CPR$CSU[0]] = AST$AULF[FXL];
  1315. PRM$MXAUGR[CPR$CSU[0]] = GPS;
  1316. CWTAST(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],ASTBADR,0,ERRSTAT);
  1317. ZFILL(FCT,FCTENTL);
  1318.  
  1319. ERRORTN:
  1320. CONVER3(CPR$RQT[0],CPR$RQC[0],ERRSTAT,ERRSTAT);
  1321. LTC$RQR[LTCENTRY] = ERRSTAT;
  1322. RLS$FCT(FCTEADDR,0,ERRSTAT);
  1323. LOANFCTQ(-1);
  1324. CFLUSH(CPR$FAM[0],CPR$SUB[0],0,ERRSTAT);
  1325. UCP$RES;
  1326. RETURN;
  1327.  
  1328. END # PURGFCT #
  1329.  
  1330. TERM
  1331. PROC PURGCHN;
  1332. # TITLE PURGCHN - PURGE FRAGMENTED AND ORPHAN CHAINS. #
  1333.  
  1334. BEGIN # PURGCHN #
  1335.  
  1336. #
  1337. ** PURGCHN - PURGE FRAGMENTED AND ORPHAN CHAINS.
  1338. *
  1339. * *PURGCHN MAKES THE SPACE OCCUPIED BY A FILE FRAGMENT OR AN
  1340. * ORPHAN FILE AVAILABLE FOR RE-USE. THIS PROCEDURE PROCESSES
  1341. * BOTH PURGE FRAGMENT AND PURGE ORPHAN REQUESTS.
  1342. *
  1343. * PROC PURGCHN
  1344. *
  1345. * ENTRY THE TYPE 3 UCP REQUEST TO BE PROCESSED IS IN ARRAY
  1346. * *CPR*. THE BASE POINTER FOR *CPR* IS ALREADY SET. THE
  1347. * *LTCT* ENTRY FOR THE REQUESTING UCP IS POINTED TO BY
  1348. * *LTCENTRY*.
  1349. *
  1350. * EXIT THE TYPE 3 REQUEST HAS BEEN PROCESSED AND A RESPONSE
  1351. * HAS BEEN SENT BACK TO THE UCP INDICATING COMPLETION
  1352. * OF THE REQUEST.
  1353. *
  1354. * RESPONSES ARE RETURNED VIA LTC$RQR[LTCENTRY].
  1355. * THESE RESPONSE CODE VALUES ARE DEFINED IN *COMBCPR*.
  1356. * = OK3 OK
  1357. * = C$M$INTLCK CATALOG/MAP INTERLOCKED
  1358. * = C$M$NOPEN CATALOG/MAP NOT OPEN
  1359. * = NO$SUB$CAT NO SUCH SUBCATALOG
  1360. * = PF$PROB PERMANENT FILE PROBLEM
  1361. * = ILLEG$ORD ORDINAL OUT OF RANGE
  1362. * = NFROZ$FRAG NON FROZEN FRAGMENT.
  1363. *
  1364. * MESSAGES * EXEC ABNORMAL, PURGCHN. *
  1365. *
  1366. #
  1367.  
  1368. #
  1369. **** PROC PURGCHN - XREF LIST BEGIN.
  1370. #
  1371.  
  1372. XREF
  1373. BEGIN
  1374. PROC ABORT; # INTERFACE TO *ABORT* MACRO #
  1375. PROC ACQ$FCT; # FIND THE *FCTQ* ENTRY FOR CALLER
  1376.   #
  1377. PROC CFLUSH; # FLUSHES THE CATALOG I/O BUFFER #
  1378. PROC CONVER3; # CONVERT MAP/CATALOG ERRORS TO
  1379.   *UCP* ERRORS #
  1380. PROC CPUTPD; # PUT PURGE DATE #
  1381. PROC CRDAST; # READ ALLOCATION SUMMARY TABLE #
  1382. PROC CWTAST; # WRITE ALLOCATION SUMMARY TABLE #
  1383. PROC LOANFCTQ; # ADD OR RECLAIM *FCTQ* ENTRY #
  1384. PROC MESSAGE; # CALLS *MESSAGE* MACRO #
  1385. PROC OCTSRCH; # SEARCHES *OCT* FOR ENTRY #
  1386. PROC RLS$FCT; # RELEASE *FCTQ* ENTRY #
  1387. PROC RLSVOL; # RELEASE VOLUME #
  1388. PROC UASTPRM; # UPDATE AST AND PREAMBLE #
  1389. PROC UCP$RES; # NOTIFY *UCP* OF REQUEST COMPLETE
  1390.   #
  1391. PROC UPDAST; # UPDATE THE *AST* #
  1392. END
  1393.  
  1394. #
  1395. **** PROC PURGCHN - XREF LIST END.
  1396. #
  1397.  
  1398. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  1399. *CALL COMBFAS
  1400. *CALL COMBCMD
  1401. *CALL COMBCMS
  1402. *CALL COMBCPR
  1403. *CALL COMBMAP
  1404. *CALL COMBMCT
  1405. *CALL COMXFCQ
  1406. *CALL COMXLTC
  1407. *CALL COMXMSC
  1408.  
  1409. ITEM FCTEADDR U; # *FCTQ* ENTRY ADDRESS #
  1410. ITEM FCTERR B; # SWITCH USED TO INDICATE MAIN
  1411.   LOOP WAS TERMINATED BECAUSE OF
  1412.   AN ERROR #
  1413. ITEM FCTNBR U; # *FCT* TO FIND #
  1414. ITEM FCTAU U; # *AU* TO BE RELEASED #
  1415. ITEM FROZERR B; # NON-FROZEN-FRAGMENT ERROR FOUND
  1416.   WHICH DOES NOT REQUIRE
  1417.   CONVERSION #
  1418. ITEM FRSTTIME B; # FIRST TIME SWITCH #
  1419. ITEM GRX ; # GROUP #
  1420. ITEM I I; # COUNTER #
  1421. ITEM NEWFCT U; # USED TO HOLD THE
  1422.   OFF-CARTRIDGE-LINK *FCT* #
  1423. ITEM NEWAU U; # NEXT *AU* TO RELEASE #
  1424. ITEM ORD I; # *OCT* ORDINAL #
  1425. ITEM PRGDONE B; # SWITCH TO CONTROL MAIN LOOP #
  1426. ITEM RLSCNTL B; # SWITCH TO CONTROL FOLLOWING A
  1427.   STREAM PATH WITHIN AN *FCT* #
  1428.  
  1429.  
  1430.  
  1431.  
  1432.  
  1433. #
  1434. * GET THE ALLOCATION SUMMARY TABLE.
  1435. #
  1436.  
  1437. LOANFCTQ(0);
  1438. CRDAST(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],ASTBADR,0,ERRSTAT);
  1439. IF ERRSTAT NQ CMASTAT"NOERR"
  1440. THEN
  1441. BEGIN
  1442. GOTO ERRORTN;
  1443. END
  1444.  
  1445. #
  1446. * GET THE MAXIMUM *FCT* ORDINAL.
  1447. #
  1448.  
  1449. OCTSRCH(CPR$FAM[0],CPR$SUB[0],ORD,0,ERRSTAT);
  1450.  
  1451. IF ERRSTAT NQ CMASTAT"NOERR"
  1452. THEN
  1453. BEGIN
  1454. GOTO ERRORTN;
  1455. END
  1456.  
  1457. P<PREAMBLE> = OCT$PRMA[ORD];
  1458.  
  1459. IF PRM$SCW1[CPR$CSU[0]] EQ 0
  1460. THEN
  1461. BEGIN
  1462. ERRSTAT = CMASTAT"NOSUBCAT";
  1463. GOTO ERRORTN;
  1464. END
  1465.  
  1466. #
  1467. * ESTABLISH THE NECESSARY BEGINNING CONTROLS FOR THE MAIN LOOP.
  1468. #
  1469.  
  1470. FRSTTIME = TRUE;
  1471. PRGDONE = FALSE;
  1472. FCTNBR = CPR$FCT[0];
  1473. GRX = FCTNBR/MAXGRT;
  1474. FCTAU = CPR$AU[0];
  1475. P<AST> = ASTBADR;
  1476. FCTERR = FALSE;
  1477. FROZERR = FALSE;
  1478.  
  1479. #
  1480. * GET THE *FCT* ENTRY. FOLLOW THE AU PATH WITHIN THE *FCT*
  1481. * RELEASING AU-S. THE AU PATH WILL TERMINATE WHEN
  1482. * EITHER A NON-BUSY AU OR THE LAST AU (AS DEFINED
  1483. * BY CHAIN CONTROL) IS FOUND. WHENEVER THE AU PATH CROSSES
  1484. * *FCT*-S (DETERMINED BY THE OFF-CARTRIDGE-LINK CONTROL), THE
  1485. * AVAILABLE AU TABLE IS UPDATED TO REFLECT THE CURRENT
  1486. * CONDITION OF THE *FCT* AND THE MAIN LOOP IS REPEATED.
  1487. * IF A AU PATH DOES NOT CROSS *FCT* BOUNDARIES,
  1488. * THE MAIN LOOP WILL ONLY BE EXECUTED ONCE.
  1489. #
  1490.  
  1491. REPEAT WHILE NOT PRGDONE
  1492. DO
  1493. BEGIN # MAIN LOOP #
  1494.  
  1495. #
  1496. * GET THE *FCT* ENTRY.
  1497. #
  1498.  
  1499. ACQ$FCT(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0], ##
  1500. FCTNBR,FCTEADDR,0,ERRSTAT);
  1501. IF ERRSTAT NQ CMASTAT"NOERR"
  1502. THEN
  1503. BEGIN
  1504. FCTERR = TRUE;
  1505. PRGDONE = TRUE;
  1506. TEST DUMMY;
  1507. END
  1508.  
  1509. P<FCT> = FCTEADDR + FCTQHL;
  1510.  
  1511. #
  1512. * FRAGMENTED AU-S MUST HAVE THE FIRST AU FROZEN.
  1513. #
  1514.  
  1515. IF FRSTTIME AND CPR$RQC[0] EQ REQTYP3"PURG$FRAG"
  1516. THEN
  1517. BEGIN
  1518. FRSTTIME = FALSE;
  1519. IF FCT$FRCF(FCT$WD(CPR$AU[0]),FCT$WP(CPR$AU[0])) EQ OFF
  1520. THEN
  1521. BEGIN
  1522. ERRSTAT = RESPTYP3"NFROZ$FRAG";
  1523. FCTERR = TRUE;
  1524. PRGDONE = TRUE;
  1525. FROZERR = TRUE;
  1526. TEST DUMMY;
  1527. END
  1528.  
  1529. END
  1530.  
  1531. #
  1532. * SEARCH THE VOLUME CHAIN RELEASING VOLUMES.
  1533. #
  1534.  
  1535.  
  1536. RLSCNTL = FALSE;
  1537.  
  1538. SLOWFOR I = 0 WHILE NOT RLSCNTL
  1539. DO
  1540. BEGIN # RELEASE LOOP #
  1541.  
  1542. #
  1543. * A NONBUSY AU ENDS THE AU PATH SEARCH.
  1544. #
  1545.  
  1546. IF FCT$FBF(FCT$WD(FCTAU),FCT$WP(FCTAU)) EQ OFF
  1547. THEN
  1548. BEGIN
  1549. RLSCNTL = TRUE;
  1550. PRGDONE = TRUE;
  1551. TEST I;
  1552. END
  1553.  
  1554. RLSCNTL = ##
  1555. FCT$LINK(FCT$WD(FCTAU),FCT$WP(FCTAU)) EQ 0 ##
  1556. OR FCT$CC(FCT$WD(FCTAU),FCT$WP(FCTAU)) EQ CHAINCON"LAST"##
  1557. OR FCT$CC(FCT$WD(FCTAU),FCT$WP(FCTAU)) EQ CHAINCON"ONLY";
  1558.  
  1559.  
  1560. #
  1561. * DETERMINE WHETHER THE AU PATH CROSSES *FCT* BOUNDARIES.
  1562. * IF IT DOES, PICK UP THE NEW *FCT* TO USE.
  1563. #
  1564.  
  1565. IF FCT$CLKOCL(FCT$WD(FCTAU),FCT$WP(FCTAU)) NQ 0
  1566. THEN
  1567. BEGIN # OFF-CARTRIDGE LINK #
  1568. RLSCNTL = TRUE;
  1569. IF FCT$CLKOCL(FCT$WD(FCTAU),FCT$WP(FCTAU)) EQ 1
  1570. THEN
  1571. BEGIN
  1572. B<0,1>FCT$OCLF[0] = 0;
  1573. NEWFCT = GRX * 16 + FCT$OCL[0];
  1574. END
  1575.  
  1576. ELSE
  1577. BEGIN
  1578. IF FCT$CLKOCL(FCT$WD(FCTAU),FCT$WP(FCTAU)) EQ 2
  1579. THEN
  1580. BEGIN
  1581. B<1,1>FCT$OCLF[0] = 0;
  1582. NEWFCT = GRX * 16 + FCT$OCL1[0];
  1583. END
  1584.  
  1585. ELSE
  1586. BEGIN
  1587. B<2,1>FCT$OCLF[0] = 0;
  1588. NEWFCT = GRX * 16 + FCT$OCL2[0];
  1589. END
  1590.  
  1591. END
  1592.  
  1593. IF NEWFCT GR (PRM$ENTRC[CPR$CSU[0]] + 15) OR NEWFCT LS 16
  1594. THEN # *FCT* OUT OF RANGE #
  1595. BEGIN
  1596. RLSCNTL = TRUE;
  1597. PRGDONE = TRUE;
  1598. GOTO EXIT$RLS;
  1599. END
  1600.  
  1601. END # OFF-CARTRIDGE LINK #
  1602.  
  1603.  
  1604. IF FCT$CLKOCL(FCT$WD(FCTAU),FCT$WP(FCTAU)) EQ 0 ##
  1605. AND RLSCNTL
  1606. THEN
  1607. BEGIN
  1608. PRGDONE = TRUE;
  1609. END
  1610.  
  1611.  
  1612.  
  1613. NEWAU = FCT$LINK(FCT$WD(FCTAU),FCT$WP(FCTAU));
  1614.  
  1615. EXIT$RLS: # CLEAR AU DETAIL #
  1616. RLSVOL(0,FCTEADDR,FCTAU, ##
  1617. FCT$LEN(FCT$WD(FCTAU),FCT$WP(FCTAU))+1);
  1618. FCTAU = NEWAU;
  1619. END # RELEASE LOOP #
  1620.  
  1621.  
  1622. #
  1623. * UPDATE *AST* AND PREAMBLE FOR TO MATCH *FCT*.
  1624. #
  1625.  
  1626. UASTPRM(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],FCTEADDR,ERRSTAT);
  1627.  
  1628.  
  1629. #
  1630. * UPDATE THE *FCT* ENTRY.
  1631. #
  1632.  
  1633. RLS$FCT(FCTEADDR,0,ERRSTAT);
  1634. FCTNBR = NEWFCT;
  1635. END # MAIN LOOP #
  1636.  
  1637. #
  1638. * IF ANY ERRORS IN MAIN LOOP, PROCESSING DOES NOT CONTINUE.
  1639. #
  1640.  
  1641. IF FCTERR
  1642. THEN
  1643. BEGIN
  1644. GOTO ERRORTN;
  1645. END
  1646.  
  1647. #
  1648. * UPDATE THE DATE AND TIME ON THE PURGE ORPHAN REQUEST.
  1649. #
  1650.  
  1651. IF CPR$RQC[0] NQ REQTYP3"PURG$FRAG"
  1652. THEN
  1653. BEGIN
  1654. CPUTPD(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],0,ERRSTAT);
  1655. END
  1656.  
  1657. ERRORTN:
  1658. IF NOT FROZERR
  1659. THEN
  1660. BEGIN
  1661. CONVER3(CPR$RQT[0],CPR$RQC[0],ERRSTAT,ERRSTAT);
  1662. END
  1663.  
  1664. LTC$RQR[LTCENTRY] = ERRSTAT;
  1665. RLS$FCT(FCTEADDR,0,ERRSTAT);
  1666. LOANFCTQ(-1);
  1667. CFLUSH(CPR$FAM[0],CPR$SUB[0],0,ERRSTAT);
  1668. IF CPR$RQC[0] EQ REQTYP3"PURG$FRAG"
  1669. THEN # SSDEBUG CALL ENDS HERE #
  1670. BEGIN
  1671. UCP$RES;
  1672. END
  1673.  
  1674. RETURN;
  1675.  
  1676.  
  1677. END
  1678.  
  1679. TERM
  1680. PROC RESETUP;
  1681. #TITLE RESETUP - CATALOG RELEASE PROCESSING AND SETUP. #
  1682.  
  1683. BEGIN # RESETUP #
  1684.  
  1685. #
  1686. ** RESETUP - CATALOG RELEASE PROCESSING AND SETUP.
  1687. *
  1688. * * RESETUP PROCESSES THE UCP REQUEST WHICH RELEASES *SFMCAT*
  1689. * SPACE FOR A LIST OF FILES ON FILE *RELCOM* WHICH IS SENT
  1690. * BY *SSVAL*.
  1691. *
  1692. * PROC RESETUP
  1693. *
  1694. * ENTRY THE TYPE 3 UCP REQUEST TO BE PROCESSED IS IN ARRAY
  1695. * *CPR*. THE *LTCT* ENTRY FOR THE REQUESTING UCP IS
  1696. * POINTED TO BY *LTCENTRY*. THIS REQUEST INDICATES
  1697. * THAT A LIST OF FILES TO BE RELEASED IS AVAILABLE ON
  1698. * FILE *RELCOM*.
  1699. *
  1700. * EXIT THE TYPE 3 REQUEST HAS BEEN PROCESSED AND A RESPONSE
  1701. * HAS BEEN SENT BACK TO THE UCP INDICATING COMPLETION
  1702. * OF THE REQUEST. THE CHAINS IN THE LIST HAVE BEEN
  1703. * PUT ON THE FREE SPACE CHAIN.
  1704. *
  1705. * RESPONSES ARE RETURNED VIA LTC$RQR[LTCENTRY].
  1706. * THESE RESPONSE CODE VALUES ARE DEFINED IN *COMBCPR*.
  1707. * = OK3 OK
  1708. * = C$M$INTLCK CATALOG/MAP INTERLOCKED
  1709. * = C$M$NOPEN CATALOG/MAP NOT OPEN
  1710. * = NO$SUB$CAT NO SUCH SUBCATALOG
  1711. * = PF$PROB PERMANENT FILE PROBLEM
  1712. * = ILLEG$ORD ORDINAL OUT OF RANGE
  1713. *
  1714. * MESSAGES * EXEC ABNORMAL, RESETUP. *
  1715. *
  1716. #
  1717.  
  1718. #
  1719. **** PROC RESETUP LIST BEGIN.
  1720. #
  1721.  
  1722. XREF
  1723. BEGIN
  1724. PROC ABORT; # INTERFACE TO *ABORT* MACRO #
  1725. PROC BZFILL; # ZERO BLANK FILL #
  1726. PROC CONVER3; # CONVERT MAP/CATALOG ERRORS TO
  1727.   *UCP* ERRORS #
  1728. PROC CPUTPD; # PUT PURGE DATE #
  1729. PROC MESSAGE; # CALLS *MESSAGE* MACRO #
  1730. PROC PFD; # PERMANENT FILE ACCESS #
  1731. PROC PURGCHN; # PUT CHAIN ON FREE SPACE #
  1732. PROC READ; # READ *CIO* BUFFER #
  1733. PROC READW; # READ TO WORKING BUFFER #
  1734. PROC RETERN; # RETURN LOCAL FILE #
  1735. PROC SETPFP; # SET PF PARAMETERS #
  1736. PROC UASTPRM; # UPDATE AST AND PREAMBLE #
  1737. PROC UCP$RES; # NOTIFY *UCP* OF REQUEST
  1738.   COMPLETE #
  1739. PROC ZSETFET; # SET UP FILE *FET* #
  1740. END
  1741.  
  1742. #
  1743. **** PROC PURGCHN - XREF LIST END.
  1744. #
  1745.  
  1746. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  1747. *CALL COMBFAS
  1748. *CALL COMBBZF
  1749. *CALL COMBCPR
  1750. *CALL COMBMCT
  1751. *CALL COMBPFP
  1752. *CALL COMBPFS
  1753. *CALL COMSPFM
  1754. *CALL COMTVLD
  1755. *CALL COMTVLF
  1756. *CALL COMXFCQ
  1757. *CALL COMXLTC
  1758. *CALL COMXMSC
  1759.  
  1760. ITEM I I; # COUNTER #
  1761. ITEM STATW I; # ERROR STATUS #
  1762. ITEM SAVEPT I; # SAVE POINTER #
  1763.  
  1764. ARRAY CPRARRAY [0:0] S(CPRLEN);;
  1765.  
  1766.  
  1767. #
  1768. * PROCESS SSDEBUG CALL, *PURGE FRAGMENT*.
  1769. #
  1770.  
  1771. IF CPR$RQC[0] EQ REQTYP3"PURG$FRAG"
  1772. THEN # DELINK FRAGMENT #
  1773. BEGIN
  1774. PURGCHN;
  1775. RETURN;
  1776. END
  1777.  
  1778. #
  1779. * SWITCH TO SPECIFIED FAMILY.
  1780. #
  1781.  
  1782. PFP$WRD0[0] = 0;
  1783. PFP$FAM[0] = CPR$FAM[0];
  1784. PFP$UI[0] = DEF$UI;
  1785. PFP$FG1[0] = TRUE;
  1786. PFP$FG4 = TRUE;
  1787. SETPFP(PFP);
  1788.  
  1789. IF PFP$STAT NQ 0
  1790. THEN # PROCESS ERROR #
  1791. BEGIN
  1792. FE$RTN[0] = "RESETUP.";
  1793. MESSAGE(FEMSG[0],UDFL1);
  1794. ABORT;
  1795. END
  1796.  
  1797.  
  1798. #
  1799. * ATTACH *RELCOM* FILE GENERATED BY SSVAL.
  1800. #
  1801.  
  1802. RELNAME = RELLFN;
  1803. BZFILL(RELNAME,TYPFILL"ZFILL",7);
  1804. PFD("ATTACH",RELNAME,0,"M","W","RC",STATW,0);
  1805. IF STATW NQ OK
  1806. THEN # ATTACH ERROR #
  1807. BEGIN
  1808. FE$MSG[0] = " FILE PROBLEM, ";
  1809. FE$RTN[0] = "RESETUP.";
  1810. MESSAGE(FEMSG[0],UDFL1);
  1811. ABORT;
  1812. END
  1813.  
  1814. #
  1815. * READ *RELCOM* FILE.
  1816. #
  1817.  
  1818. RELFADR = LOC(RELCFILE);
  1819. RELBADR = LOC(RELCBUF);
  1820. ZSETFET(RELFADR,RELLFN,RELBADR,LFIXBUF);
  1821. READ(RELCFILE,RCL);
  1822. SAVEPT = P<CPR>;
  1823. P<CPR> = LOC(CPRARRAY);
  1824.  
  1825.  
  1826. #
  1827. * PROCESS EACH ENTRY.
  1828. #
  1829.  
  1830.  
  1831. SLOWFOR I = 0 STEP 1 WHILE STATW EQ OK
  1832. DO
  1833. BEGIN # MAIN LOOP #
  1834. READW(RELCFILE,CPRARRAY,CPRLEN,STATW);
  1835. IF STATW NQ OK
  1836. THEN
  1837. BEGIN
  1838. TEST I;
  1839. END
  1840.  
  1841. #
  1842. * DELINK FILE CHAIN.
  1843. #
  1844.  
  1845. PURGCHN;
  1846.  
  1847. IF LTC$RQR[LTCENTRY] NQ OK
  1848. THEN # ERROR IN PURGCHN #
  1849. BEGIN
  1850. STATW = O"777";
  1851. TEST I;
  1852. END
  1853.  
  1854. #
  1855. * WRITE TEMP FILE FOR DEBUGGING PURPOSES.
  1856. #
  1857.  
  1858.  
  1859. END # MAIN LOOP #
  1860.  
  1861. RETERN(RELCFILE,RCL);
  1862. P<CPR> = SAVEPT;
  1863. CPR$RQR[0] = LTC$RQR[LTCENTRY];
  1864. LTC$DATE[LTCENTRY] = I - 1; # FILE RELEASE COUNT #
  1865. UCP$RES;
  1866. RETURN;
  1867. END # RESETUP #
  1868.  
  1869. TERM
  1870. PROC RMVCAR;
  1871. # TITLE RMVCAR - REMOVE CARTRIDGE FROM SUB-FAMILY. #
  1872.  
  1873. BEGIN # RMVCAR #
  1874.  
  1875. #
  1876. ** RMVCAR - REMOVE CARTRIDGE FROM SUB-FAMILY.
  1877. *
  1878. * *RMVCAR* UPDATES THE *AST*, *FCT*, AND *SMMAP*
  1879. * TO REFLECT THAT THE GIVEN CARTRIDGE IS NO LONGER ASSIGNED TO
  1880. * THE SUB-FAMILY.
  1881. *
  1882. * PROC RMVCAR
  1883. *
  1884. * ENTRY THE TYPE 3 UCP REQUEST TO BE PROCESSED IS IN ARRAY
  1885. * *CPR*. THE BASE POINTER FOR *CPR* IS ALREADY SET. THE
  1886. * *LTCT* ENTRY FOR THE REQUESTING UCP IS POINTED TO BY
  1887. * *LTCENTRY*.
  1888. *
  1889. * EXIT THE TYPE 3 REQUEST HAS BEEN PROCESSED AND A RESPONSE
  1890. * HAS BEEN SENT BACK TO THE UCP INDICATING COMPLETION
  1891. * OF THE REQUEST.
  1892. *
  1893. * RESPONSES ARE RETURNED VIA LTC$RQR[LTCENTRY].
  1894. * THESE RESPONSE CODE VALUES ARE DEFINED IN *COMBCPR*.
  1895. * = OK3 OK
  1896. * = C$M$INTLCK CATALOG/MAP INTERLOCKED
  1897. * = C$M$NOPEN CATALOG/MAP NOT OPEN
  1898. * = NO$SUB$CAT NO SUCH SUBCATALOG
  1899. * = PF$PROB PERMANENT FILE PROBLEM
  1900. * = MSC$NEMPTY CARTRIDGE NOT EMPTY
  1901. * = ILLEG$ORD ORDINAL OUT OF RANGE
  1902. #
  1903.  
  1904. #
  1905. **** PROC RMVCAR - XREF LIST BEGIN.
  1906. #
  1907.  
  1908. XREF
  1909. BEGIN
  1910. PROC ACQ$FCT; # FIND THE *FCTQ* ENTRY FOR CALLER
  1911.   #
  1912. PROC ANLZAST; # ANALYZE THE *AST* #
  1913. PROC CFLUSH; # FLUSHES THE CATALOG I/O BUFFER #
  1914. PROC CNTFS; # COUNT FREE STREAMS #
  1915. PROC CONVER3; # CONVERT MAP/CATALOG ERRORS TO
  1916.   *UCP* ERRORS #
  1917. PROC CRDAST; # READ ALLOCATION SUMMARY TABLE #
  1918. PROC CWTAST; # WRITE ALLOCATION SUMMARY TABLE #
  1919. PROC LOANFCTQ; # ADD OR RECLAIM *FCTQ* ENTRY #
  1920. PROC MFLUSH; # FLUSH MAP TO FILE #
  1921. PROC MGETENT; # RETURN THE MAP ENTRY TO THE
  1922.   CALLER #
  1923. PROC MPUTENT; # MAP ENTRY TO THE MAP FILE BUFFER
  1924.   #
  1925. PROC RLS$FCT; # RELEASE *FCTQ* ENTRY #
  1926. PROC UCP$RES; # NOTIFY *UCP* OF REQUEST COMPLETE
  1927.   #
  1928. PROC UPDAST; # UPDATE THE *AST* #
  1929. PROC ZFILL; # ZERO FILL ARRAY #
  1930. END
  1931.  
  1932. #
  1933. **** PROC RMVCAR - XREF LIST END.
  1934. #
  1935.  
  1936. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  1937. *CALL COMBFAS
  1938. *CALL COMBCMD
  1939. *CALL COMBCMS
  1940. *CALL COMBCPR
  1941. *CALL COMBMAP
  1942. *CALL COMBMCT
  1943. *CALL COMXFCQ
  1944. *CALL COMXLTC
  1945. *CALL COMXMSC
  1946.  
  1947. ITEM ERRCONV B; # ERROR CODE CONVERSION FLAG #
  1948. ITEM FCTEADDR U; # *FCTQ* ENTRY ADDRESS FROM
  1949.   *ACQ$FCT* #
  1950. ITEM FXL U; # BEST ORDINAL FOR ALLOCATION #
  1951. ITEM FXS U; # BEST ORDINAL FOR ALLOCATION #
  1952. ITEM GPS U; # BEST GROUP ORDINAL #
  1953. ITEM GPX U; # BEST GROUP #
  1954. ITEM I U; # COUNTER #
  1955. ITEM ORD I; # *AST* ORDINAL #
  1956. ITEM SAVEY U; # SAVED Y COORDINATE #
  1957. ITEM SAVEZ U; # SAVED Z COORDINATE #
  1958.  
  1959.  
  1960.  
  1961.  
  1962.  
  1963. #
  1964. * GET THE MAP ENTRY FOR THE REQUEST.
  1965. #
  1966.  
  1967. LOANFCTQ(0);
  1968. ERRCONV = TRUE;
  1969. MGETENT(CPR$CSU[0],SMORD,LOC(MAPBUFR),ERRSTAT);
  1970. IF ERRSTAT NQ CMASTAT"NOERR"
  1971. THEN
  1972. BEGIN
  1973. GOTO ERRORTN;
  1974. END
  1975.  
  1976. #
  1977. * GET THE *FCTQ* ENTRY FOR THE REQUEST.
  1978. #
  1979.  
  1980.  
  1981. ACQ$FCT(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0], ##
  1982. CPR$FCT[0],FCTEADDR,0,ERRSTAT);
  1983. IF ERRSTAT NQ CMASTAT"NOERR"
  1984. THEN
  1985. BEGIN
  1986. GOTO ERRORTN;
  1987. END
  1988.  
  1989.  
  1990. #
  1991. * GET THE ALLOCATION SUMMARY TABLE.
  1992. #
  1993.  
  1994. CRDAST(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],ASTBADR,0,ERRSTAT);
  1995. IF ERRSTAT NQ CMASTAT"NOERR"
  1996. THEN
  1997. BEGIN
  1998. GOTO ERRORTN;
  1999. END
  2000.  
  2001.  
  2002. P<FCT> = FCTEADDR + FCTQHL;
  2003. P<AST> = ASTBADR;
  2004.  
  2005. #
  2006. * VERIFY THAT THE CARTRIDGE IS FREE AND UPDATE *AST*.
  2007. #
  2008.  
  2009. ORD = CPR$FCT[0];
  2010. IF (AST$AULF[ORD] + AST$AUSF[ORD] + AST$FLAWS[ORD]) NQ INAVOT
  2011. THEN # CARTRIDGE IS NOT FREE #
  2012. BEGIN
  2013. ERRSTAT = RESPTYP3"MSC$NEMPTY";
  2014. ERRCONV = FALSE; # BYPASS CODE CONVERSION #
  2015. GOTO ERRORTN;
  2016. END
  2017.  
  2018. #
  2019. * UPDATE PREAMBLE.
  2020. #
  2021.  
  2022.  
  2023. AST$1ST[ORD] = 0;
  2024. AST$2ND[ORD] = 0;
  2025. AST$STAT[ORD] = ASTENSTAT"UNASS$CART";
  2026.  
  2027. ANLZAST(CPR$CSU[0],-1,-1,FXS,FXL,GPX,GPS);
  2028. PRM$MXAUS[CPR$CSU[0]] = AST$AUSF[FXS];
  2029. PRM$MXAUL[CPR$CSU[0]] = AST$AULF[FXL];
  2030. PRM$MXAUGR[CPR$CSU[0]] = GPS;
  2031.  
  2032.  
  2033. CWTAST(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],ASTBADR,0,ERRSTAT);
  2034. IF ERRSTAT NQ CMASTAT"NOERR"
  2035. THEN
  2036. BEGIN
  2037. GOTO ERRORTN;
  2038. END
  2039.  
  2040. #
  2041. * REMOVE THE CARTRIDGE FROM THE *FCT* AND MAP (*CSN* = 0).
  2042. #
  2043.  
  2044. ZFILL(FCT,FCTENTL);
  2045. FCT$CSND[0] = " ";
  2046. P<SMUMAP> = LOC(MAPBUFR);
  2047. CM$CSND[0] = " ";
  2048. CM$CCOD[0] = 0;
  2049. CM$FLAG1[0] = FALSE; # CLEAR ERROR FLAG IN MAP ENTRY #
  2050. CM$FCTORD[0] = 0;
  2051.  
  2052. MPUTENT(CPR$CSU[0],SMORD,LOC(MAPBUFR),ERRSTAT);
  2053.  
  2054. ERRORTN:
  2055. IF ERRCONV
  2056. THEN # CONVERT ERROR CODE #
  2057. BEGIN
  2058. CONVER3(CPR$RQT[0],CPR$RQC[0],ERRSTAT,ERRSTAT);
  2059. END
  2060.  
  2061. LTC$RQR[LTCENTRY] = ERRSTAT;
  2062. RLS$FCT(FCTEADDR,0,ERRSTAT);
  2063. LOANFCTQ(-1);
  2064. MFLUSH;
  2065. CFLUSH(CPR$FAM[0],CPR$SUB[0],0,ERRSTAT);
  2066. UCP$RES;
  2067. RETURN;
  2068.  
  2069. END # RMVCAR #
  2070.  
  2071. TERM
  2072. PROC RMVCSU;
  2073. # TITLE RMVCSU - REMOVES *SM* FROM SUB-FAMILY CATALOG. #
  2074.  
  2075. BEGIN # RMVCSU #
  2076.  
  2077. #
  2078. ** RMVCSU - REMOVES *SM* FROM SUB-FAMILY CATALOG.
  2079. *
  2080. * *RMVCSU* REMOVES A *SM* FROM THE
  2081. * CATALOG FOR A SUB-FAMILY.
  2082. *
  2083. * PROC RMVCSU
  2084. *
  2085. * ENTRY THE TYPE 3 UCP REQUEST TO BE PROCESSED IS IN ARRAY
  2086. * *CPR*. THE BASE POINTER FOR *CPR* IS ALREADY SET. THE
  2087. * *LTCT* ENTRY FOR THE REQUESTING UCP IS POINTED TO BY
  2088. * *LTCENTRY*.
  2089. *
  2090. * EXIT THE TYPE 3 REQUEST HAS BEEN PROCESSED AND A RESPONSE
  2091. * HAS BEEN SENT BACK TO THE UCP INDICATING COMPLETION
  2092. * OF THE REQUEST.
  2093. *
  2094. * RESPONSES ARE RETURNED VIA LTC$RQR[LTCENTRY].
  2095. * THESE RESPONSE CODE VALUES ARE DEFINED IN *COMBCPR*.
  2096. * = OK3 OK
  2097. * = C$M$INTLCK CATALOG/MAP INTERLOCKED
  2098. * = C$M$NOPEN CATALOG/MAP NOT OPEN
  2099. * = PF$PROB PERMANENT FILE PROBLEM
  2100. #
  2101.  
  2102. #
  2103. **** PROC RMVCSU - XREF LIST BEGIN.
  2104. #
  2105.  
  2106. XREF
  2107. BEGIN
  2108. PROC CONVER3; # CONVERT MAP/CATALOG ERRORS TO
  2109.   *UCP* ERRORS #
  2110. PROC CRMVSC; # REMOVE SUBCATALOG #
  2111. PROC UCP$RES; # NOTIFY *UCP* OF REQUEST COMPLETE
  2112.   #
  2113. END
  2114.  
  2115. #
  2116. **** PROC RMVCSU - XREF LIST END.
  2117. #
  2118.  
  2119. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  2120. *CALL COMBFAS
  2121. *CALL COMBCMS
  2122. *CALL COMBCPR
  2123. *CALL COMBMAP
  2124. *CALL COMXLTC
  2125.  
  2126.  
  2127.  
  2128.  
  2129.  
  2130. CRMVSC(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],0,ERRSTAT);
  2131. CONVER3(CPR$RQT[0],CPR$RQC[0],ERRSTAT,ERRSTAT);
  2132. LTC$RQR[LTCENTRY] = ERRSTAT;
  2133. UCP$RES;
  2134. RETURN;
  2135.  
  2136. END # RMVCSU #
  2137.  
  2138. TERM
  2139. PROC RMVCUBE;
  2140. # TITLE RMVCUBE - REMOVE CUBICLE FROM FAMILY. #
  2141.  
  2142. BEGIN # RMVCUBE #
  2143.  
  2144. #
  2145. ** RMVCUBE - REMOVE CUBICLE FROM FAMILY.
  2146. *
  2147. * *RMVCUBE* UPDATES THE *AST*, *FCT* AND *SMMAP* (IN THAT
  2148. * ORDER) TO REFLECT THAT THE GIVEN CUBICLE IS NO LONGER
  2149. * ASSIGNED TO THE SUB-FAMILY.
  2150. *
  2151. * PROC RMVCUBE
  2152. *
  2153. * ENTRY THE TYPE 3 UCP REQUEST TO BE PROCESSED IS IN ARRAY
  2154. * *CPR*. THE BASE POINTER FOR *CPR* IS ALREADY SET. THE
  2155. * *LTCT* ENTRY FOR THE REQUESTING UCP IS POINTED TO BY
  2156. * *LTCENTRY*.
  2157. *
  2158. * EXIT THE TYPE 3 REQUEST HAS BEEN PROCESSED AND A RESPONSE
  2159. * HAS BEEN SENT BACK TO THE UCP INDICATING COMPLETION
  2160. * OF THE REQUEST.
  2161. *
  2162. * RESPONSES ARE RETURNED VIA LTC$RQR[LTCENTRY].
  2163. * THESE RESPONSE CODE VALUES ARE DEFINED IN *COMBCPR*.
  2164. * = OK3 OK
  2165. * = C$M$INTLCK CATALOG/MAP INTERLOCKED
  2166. * = C$M$NOPEN CATALOG/MAP NOT OPEN
  2167. * = PF$PROB PERMANENT FILE PROBLEM
  2168. * = ILLEG$ORD ORDINAL OUT OF RANGE
  2169. #
  2170.  
  2171. #
  2172. **** PROC RMVCUBE - XREF LIST BEGIN.
  2173. #
  2174.  
  2175. XREF
  2176. BEGIN
  2177. PROC ACQ$FCT; # FIND THE *FCTQ* ENTRY FOR CALLER
  2178.   #
  2179. PROC CFLUSH; # FLUSHES THE CATALOG I/O BUFFER #
  2180. PROC CONVER3; # CONVERT MAP/CATALOG ERRORS TO
  2181.   *UCP* ERRORS #
  2182. PROC CRDAST; # READ ALLOCATION SUMMARY TABLE #
  2183. PROC CWTAST; # WRITE ALLOCATION SUMMARY TABLE #
  2184. PROC MFLUSH; # FLUSH MAP TO FILE #
  2185. PROC MGETENT; # RETURN THE MAP ENTRY TO THE
  2186.   CALLER #
  2187. PROC MPUTENT; # MAP ENTRY TO THE MAP FILE BUFFER
  2188.   #
  2189. PROC RLS$FCT; # RELEASE *FCTQ* ENTRY #
  2190. PROC UCP$RES; # NOTIFY *UCP* OF REQUEST COMPLETE
  2191.   #
  2192. PROC UPDAST; # UPDATE THE *AST* #
  2193. END
  2194.  
  2195. #
  2196. **** PROC RMVCUBE - XREF LIST END.
  2197. #
  2198.  
  2199. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  2200. *CALL COMBFAS
  2201. *CALL COMBCMD
  2202. *CALL COMBCMS
  2203. *CALL COMBCPR
  2204. *CALL COMBMAP
  2205. *CALL COMBMCT
  2206. *CALL COMXFCQ
  2207. *CALL COMXLTC
  2208. *CALL COMXMSC
  2209.  
  2210. ITEM FCTEADDR U; # *FCTQ* ENTRY ADDRESS #
  2211. ITEM I U; # COUNTER #
  2212. ITEM ORD I; # *AST* ORDINAL #
  2213.  
  2214.  
  2215.  
  2216.  
  2217.  
  2218. #
  2219. * GET THE MAP ENTRY FOR THE REQUEST.
  2220. #
  2221.  
  2222. MGETENT(CPR$CSU[0],SMORD,LOC(MAPBUFR),ERRSTAT);
  2223. IF ERRSTAT NQ CMASTAT"NOERR"
  2224. THEN
  2225. BEGIN
  2226. GOTO ERRORTN;
  2227. END
  2228.  
  2229.  
  2230. #
  2231. * GET THE ALLOCATION SUMMARY TABLE.
  2232. #
  2233.  
  2234. P<AST> = ASTBADR;
  2235. CRDAST(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],ASTBADR,0,ERRSTAT);
  2236. IF ERRSTAT NQ CMASTAT"NOERR"
  2237. THEN
  2238. BEGIN
  2239. GOTO ERRORTN;
  2240. END
  2241.  
  2242. #
  2243. * UPDATE *AST* AND PREAMBLE.
  2244. #
  2245.  
  2246. ORD = CPR$FCT[0];
  2247. AST$STAT[ORD] = ASTENSTAT"UNASS$CUB";
  2248. CWTAST(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],ASTBADR,0,ERRSTAT);
  2249. IF ERRSTAT NQ CMASTAT"NOERR"
  2250. THEN
  2251. BEGIN
  2252. GOTO ERRORTN;
  2253. END
  2254.  
  2255.  
  2256. P<FCT> = FCTEADDR + FCTQHL;
  2257.  
  2258. #
  2259. * REMOVE *FCT* ORDINAL AND FAMILY NAME FROM THE MAP ENTRY
  2260. * AND INDICATE THAT THE CUBE IS UNASSIGNED.
  2261. #
  2262.  
  2263. P<SMUMAP> = LOC(MAPBUFR);
  2264. CM$CODE[0] = CUBSTAT"UNASGN";
  2265. CM$FCTORD[0] = 0;
  2266. CM$FMLYNM[0] = " ";
  2267. CM$SUB[0] = 0;
  2268. CM$FLAG1[0] = FALSE; # CLEAR ERROR FLAG IN MAP ENTRY #
  2269. MPUTENT(CPR$CSU,SMORD,LOC(MAPBUFR),ERRSTAT);
  2270.  
  2271. #
  2272. * CONVERT THE REQUEST STATUS AND RETURN IT TO THE *UCP*.
  2273. #
  2274.  
  2275.  
  2276. ERRORTN:
  2277. CONVER3(CPR$RQT[0],CPR$RQC[0],ERRSTAT,ERRSTAT);
  2278. MFLUSH;
  2279. UCP$RES;
  2280. RETURN;
  2281.  
  2282. END # RMVCUBE #
  2283.  
  2284. TERM
  2285. PROC UPDCAT;
  2286. # TITLE UPDCAT - UPDATE FIELDS IN THE *SFM* CATALOG. #
  2287.  
  2288. BEGIN # UPDCAT #
  2289.  
  2290. #
  2291. ** UPDCAT - UPDATE FIELDS IN THE *SFM* CATALOG.
  2292. *
  2293. * *UPDCAT* UPDATES FIELDS IN AN *SFM* CATALOG.
  2294. *
  2295. * PROC UPDCAT
  2296. *
  2297. * ENTRY THE TYPE 3 UCP REQUEST TO BE PROCESSED IS IN ARRAY
  2298. * *CPR*. THE BASE POINTER FOR *CPR* IS ALREADY SET. THE
  2299. * *LTCT* ENTRY FOR THE REQUESTING UCP IS POINTED TO BY
  2300. * *LTCENTRY*.
  2301. *
  2302. * EXIT THE TYPE 3 REQUEST HAS BEEN PROCESSED AND A RESPONSE
  2303. * HAS BEEN SENT BACK TO THE UCP INDICATING COMPLETION
  2304. * OF THE REQUEST.
  2305. *
  2306. * RESPONSES ARE RETURNED VIA LTC$RQR[LTCENTRY].
  2307. * THESE RESPONSE CODE VALUES ARE DEFINED IN *COMBCPR*.
  2308. * = OK3 OK
  2309. * = C$M$INTLCK CATALOG/MAP INTERLOCKED
  2310. * = C$M$NOPEN CATALOG/MAP NOT OPEN
  2311. * = NO$SUB$CAT NO SUCH SUBCATALOG
  2312. * = PF$PROB PERMANENT FILE PROBLEM
  2313. * = ILLEG$ORD ORDINAL OUT OF RANGE
  2314. *
  2315. * NOTE IN ALL BOOLEAN CASES A VALUE OF ZERO IN THE UPDATE
  2316. * FIELD IS ASSUMED TO BE FALSE AND A NON-ZERO VALUE
  2317. * TO BE TRUE.
  2318. #
  2319.  
  2320. #
  2321. **** PROC UPDCAT - XREF LIST BEGIN.
  2322. #
  2323.  
  2324. XREF
  2325. BEGIN
  2326. PROC ACQ$FCT; # FIND THE *FCTQ* ENTRY FOR CALLER
  2327.   #
  2328. PROC CFLUSH; # FLUSHES THE CATALOG I/O BUFFER #
  2329. PROC CONVER3; # CONVERT MAP/CATALOG ERRORS TO
  2330.   *UCP* ERRORS #
  2331. PROC CPUTPD; # PUT PURGE DATE #
  2332. PROC CRDAST; # READ ALLOCATION SUMMARY TABLE #
  2333. PROC CWTAST; # WRITE ALLOCATION SUMMARY TABLE #
  2334. PROC KILL$UC; # ABORT A *UCP* #
  2335. PROC LOANFCTQ; # ADD OR RECLAIM *FCTQ* ENTRY #
  2336. PROC RLS$FCT; # RELEASE *FCTQ* ENTRY #
  2337. PROC UCP$RES; # NOTIFY *UCP* OF REQUEST COMPLETE
  2338.   #
  2339. PROC UASTPRM; # UPDATE *AST* AND *PRM* #
  2340. END
  2341.  
  2342. #
  2343. **** PROC UPDCAT - XREF LIST END.
  2344. #
  2345.  
  2346. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  2347. *CALL COMBFAS
  2348. *CALL COMBCMD
  2349. *CALL COMBCMS
  2350. *CALL COMBCPR
  2351. *CALL COMBMAP
  2352. *CALL COMBMCT
  2353. *CALL COMBUCR
  2354. *CALL COMXFCQ
  2355. *CALL COMXLTC
  2356.  
  2357. SWITCH UPDUCF:UCF # FIELDS TO BE UPDATED #
  2358. UPDFRCAR:FREEFL, # FREE CARTRIDGE FLAG #
  2359. UPDINHIB:INHIB, # INHIBIT ALLOCATION #
  2360. UPDLOST:LOST, # LOST CARTRIDGE #
  2361. UPDEWPE:EWPE, # EXCESSIVE WRITE PARITY ERRORS #
  2362. UPDCMAP:CMAP, # *SMMAP* ERROR FLAG #
  2363. UPDFROZ:FROZ, # FROZEN CHAIN FLAG #
  2364. UPDCONF:CONF, # CONFLICT FLAG #
  2365. UPDSOF:SOF; # START OF FRAGMENT FLAG #
  2366.  
  2367. ITEM FCTEADDR U; # *FCTQ* ENTRY ADDRESS #
  2368. ITEM POS I; # WORD POSITION #
  2369. ITEM WORD I; # POSITION WITHIN WORD #
  2370. CONTROL EJECT;
  2371.  
  2372. #
  2373. * VALIDATE THE CATALOG FIELD NAME PARAMETER AND ABORT THE *UCP*
  2374. * IF NOT VALID.
  2375. #
  2376.  
  2377. IF CPR$FLD[0] EQ UCF"UNUSED" OR CPR$FLD[0] GQ UCF"LSTSOF"
  2378. THEN
  2379. BEGIN
  2380. KILL$UC(KILLCODE"INVRQC");
  2381. RETURN;
  2382. END
  2383.  
  2384. LOANFCTQ(0);
  2385.  
  2386. #
  2387. * GET THE ALLOCATION SUMMARY TABLE.
  2388. #
  2389.  
  2390. CRDAST(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],ASTBADR,0,ERRSTAT);
  2391. IF ERRSTAT NQ CMASTAT"NOERR"
  2392. THEN
  2393. BEGIN
  2394. GOTO ERRORTN;
  2395. END
  2396.  
  2397. #
  2398. * GET THE *FCTQ* ENTRY FOR THE REQUEST.
  2399. #
  2400.  
  2401. ACQ$FCT(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0], ##
  2402. CPR$FCT[0],FCTEADDR,0,ERRSTAT);
  2403. IF ERRSTAT NQ CMASTAT"NOERR"
  2404. THEN
  2405. BEGIN
  2406. GOTO ERRORTN;
  2407. END
  2408.  
  2409.  
  2410. P<FCT> = FCTEADDR + FCTQHL;
  2411.  
  2412.  
  2413. #
  2414. * UPDATE THE SPECIFIED CATALOG FIELD.
  2415. #
  2416.  
  2417. GOTO UPDUCF[CPR$FLD[0]];
  2418.  
  2419.  
  2420. UPDFRCAR:
  2421. IF CPR$VAL[0] EQ 0
  2422. THEN # SET FREE FLAG TO FALSE #
  2423. BEGIN
  2424. FCT$FCF[0] = FALSE;
  2425. END
  2426.  
  2427. ELSE
  2428. BEGIN
  2429. FCT$FCF[0] = TRUE;
  2430. END
  2431.  
  2432. IF NOT FCT$FCF[0]
  2433. THEN # DO NOT CLEAR INHIBIT FLAG #
  2434. BEGIN
  2435. UASTPRM(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],FCTEADDR,ERRSTAT);
  2436. GOTO ERRORTN;
  2437. END
  2438.  
  2439.  
  2440. UPDINHIB:
  2441. IF (NOT FCT$IAF[0] AND (CPR$VAL[0] EQ ON)) ##
  2442. OR (FCT$IAF[0] AND (CPR$VAL[0] EQ OFF))
  2443. THEN # FLAG UPDATE REQUIRED #
  2444. BEGIN # UPDATE INHIBIT FLAG #
  2445. FCT$IAF[0] = NOT FCT$IAF[0];
  2446. END # UPDATE INHIBIT FLAG #
  2447.  
  2448. UASTPRM(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],FCTEADDR,ERRSTAT);
  2449. GOTO ERRORTN;
  2450.  
  2451. UPDLOST:
  2452. IF (NOT FCT$LCF[0] AND (CPR$VAL[0] EQ ON)) ##
  2453. OR (FCT$LCF[0] AND (CPR$VAL[0] EQ OFF))
  2454. THEN # FLAG UPDATE REQUIRED #
  2455. BEGIN # UPDATE LOST FLAG #
  2456. FCT$LCF[0] = NOT FCT$LCF[0];
  2457. UASTPRM(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],FCTEADDR,ERRSTAT);
  2458. END # UPDATE LOST FLAG #
  2459.  
  2460. GOTO ERRORTN;
  2461.  
  2462. UPDEWPE:
  2463. IF (NOT FCT$EEF[0] AND (CPR$VAL[0] EQ ON)) ##
  2464. OR (FCT$EEF[0] AND (CPR$VAL[0] EQ OFF))
  2465. THEN # FLAG UPDATE REQUIRED #
  2466. BEGIN # UPDATE WRITE PARITY ERROR FLAG #
  2467. FCT$EEF[0] = NOT FCT$EEF[0];
  2468. UASTPRM(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],FCTEADDR,ERRSTAT);
  2469. END # UPDATE WRITE PARITY ERROR FLAG #
  2470.  
  2471. GOTO ERRORTN;
  2472.  
  2473. UPDCMAP:
  2474. FCT$SEF[0] = CPR$VAL[0] NQ OFF;
  2475. AST$AAF[CPR$FCT[0]] = FALSE;
  2476. GOTO ERRORTN;
  2477.  
  2478. UPDFROZ:
  2479. WORD = FCT$WD(CPR$AU[0]);
  2480. POS = FCT$WP(CPR$AU[0]);
  2481. FCT$FRCF(WORD,POS) = CPR$VAL[0];
  2482.  
  2483. GOTO ERRORTN;
  2484.  
  2485. UPDCONF:
  2486. FCT$AUCF(FCT$WD(CPR$AU[0]),FCT$WP(CPR$AU[0])) = CPR$VAL[0];
  2487.  
  2488. GOTO ERRORTN;
  2489.  
  2490. UPDSOF:
  2491. IF CPR$VAL EQ 0
  2492. THEN
  2493. BEGIN
  2494. FCT$SFF(FCT$WD(CPR$AU[0]),FCT$WP(CPR$AU[0])) = OFF;
  2495. END
  2496.  
  2497. ELSE
  2498. BEGIN
  2499. FCT$SFF(FCT$WD(CPR$AU[0]),FCT$WP(CPR$AU[0])) = ON;
  2500. CPUTPD(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],0,ERRSTAT);
  2501. END
  2502.  
  2503.  
  2504.  
  2505. ERRORTN:
  2506. CONVER3(CPR$RQT[0],CPR$RQC[0],ERRSTAT,ERRSTAT);
  2507. LTC$RQR[LTCENTRY] = ERRSTAT;
  2508. RLS$FCT(FCTEADDR,0,ERRSTAT);
  2509. LOANFCTQ(-1);
  2510. CFLUSH(CPR$FAM[0],CPR$SUB[0],0,ERRSTAT);
  2511. CWTAST(CPR$FAM[0],CPR$SUB[0],CPR$CSU[0],ASTBADR,0,ERRSTAT);
  2512. UCP$RES;
  2513. RETURN;
  2514.  
  2515. END # UPDCAT #
  2516.  
  2517. TERM
  2518. PROC UPDMAP;
  2519. # TITLE UPDMAP - UPDATE MAP ENTRY. #
  2520.  
  2521. BEGIN # UPDMAP #
  2522.  
  2523. #
  2524. ** UPDMAP - UPDATE MAP ENTRY.
  2525. *
  2526. * *UPDMAP* UPDATES THE *SMMAP* ENTRY WITH DATA FROM THE
  2527. * *UCP* REQUEST BLOCK.
  2528. *
  2529. * PROC UPDMAP
  2530. *
  2531. * ENTRY THE TYPE 3 UCP REQUEST TO BE PROCESSED IS IN ARRAY
  2532. * *CPR*. THE BASE POINTER FOR *CPR* IS ALREADY SET. THE
  2533. * *LTCT* ENTRY FOR THE REQUESTING UCP IS POINTED TO BY
  2534. * *LTCENTRY*.
  2535. *
  2536. * EXIT THE TYPE 3 REQUEST HAS BEEN PROCESSED AND A RESPONSE
  2537. * HAS BEEN SENT BACK TO THE UCP INDICATING COMPLETION
  2538. * OF THE REQUEST.
  2539. *
  2540. * RESPONSES ARE RETURNED VIA LTC$RQR[LTCENTRY].
  2541. * THESE RESPONSE CODE VALUES ARE DEFINED IN *COMBCPR*.
  2542. * = OK3 OK
  2543. * = C$M$INTLCK CATALOG/MAP INTERLOCKED
  2544. * = C$M$NOPEN CATALOG/MAP NOT OPEN
  2545. * = PF$PROB PERMANENT FILE PROBLEM
  2546. * = ILLEG$ORD ORDINAL OUT OF RANGE
  2547. #
  2548.  
  2549. #
  2550. **** PROC UPDMAP - XREF LIST BEGIN.
  2551. #
  2552.  
  2553. XREF
  2554. BEGIN
  2555. PROC CONVER3; # CONVERT MAP/CATALOG ERRORS TO
  2556.   *UCP* ERRORS #
  2557. PROC MFLUSH; # FLUSH MAP TO FILE #
  2558. PROC MPUTENT; # MAP ENTRY TO THE MAP FILE BUFFER
  2559.   #
  2560. PROC UCP$RES; # NOTIFY *UCP* OF REQUEST COMPLETE
  2561.   #
  2562. END
  2563.  
  2564. #
  2565. **** PROC UPDMAP - XREF LIST END.
  2566. #
  2567.  
  2568.  
  2569.  
  2570. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  2571. *CALL COMBFAS
  2572. *CALL COMBCPR
  2573. *CALL COMBMAP
  2574. *CALL COMXLTC
  2575. *CALL COMXMSC
  2576.  
  2577.  
  2578.  
  2579.  
  2580.  
  2581. #
  2582. * UPDATE THE MAP ENTRY WITH *UCP* DATA.
  2583. #
  2584.  
  2585. MPUTENT(CPR$CSU[0],SMORD,LOC(CPR$MAPENT[0]),ERRSTAT);
  2586.  
  2587. #
  2588. * SEND RESPONSE TO *UCP* AND RETURN TO CALLER.
  2589. #
  2590.  
  2591. CONVER3(CPR$RQT[0],CPR$RQC[0],ERRSTAT,ERRSTAT);
  2592. LTC$RQR[LTCENTRY] = ERRSTAT;
  2593. MFLUSH;
  2594. UCP$RES;
  2595. RETURN;
  2596. END # UPDMAP #
  2597.  
  2598. TERM