User Tools

Site Tools


cdc:nos2.source:nam5871:cssrca

CSSRCA

Table Of Contents

  • [00008] PROC CSSRCA(ELINDX)
  • [00009] CSSRCA - RESOLVE COMMAND ADDRESSES.
  • [00014] RESOLVE COMMAND ADDRESSES.
  • [00051] PROC SSTRQE
  • [00052] PROC SSTAQE

Source Code

CSSRCA.txt
  1. *DECK CSSRCA
  2. USETEXT TEXTOV
  3. USETEXT TXTAPSS;
  4. USETEXT TXTSUSS;
  5. USETEXT TEXTCS;
  6. USETEXT TEXTSS;
  7. USETEXT TXCMDCS;
  8. PROC CSSRCA(ELINDX);
  9. # TITLE CSSRCA - RESOLVE COMMAND ADDRESSES. #
  10.  
  11. BEGIN # CSSRCA #
  12.  
  13. #
  14. ** CSSRCA - RESOLVE COMMAND ADDRESSES.
  15. *
  16. * C. BRION 82/02/19.
  17. * C. BRION 82/05/06.
  18. *
  19. *
  20. * THIS PROCEDURE PROCESSES THE VALID COMMANDS THAT HAVE BEEN
  21. * DETERMINED TO NEED THE COMMAND ELEMENT'S PHYSICAL ADDRESSES
  22. * RESOLVED FROM THE APPROPRIATE NCF CROSS REFERENCE TABLE.
  23. * THE ELEMENTS TO BE RESOLVED ARE EITHER FROM A COMMAND THAT
  24. * EFFECTS A SINGLE NPU OR TWO NPUS. CURRENTLY ONLY COMMANDS
  25. * EFFECTING TRUNKS AND LOGICAL LINKS WILL EFFECT TWO NPUS.
  26. * THE MULTIPLE SEND COMMAND MAY EFFECT MORE THAN 1 NPU.
  27. *
  28. * PROC CSSRCA
  29. *
  30. * ENTRY:
  31. * ELINDX = INDEX INTO THE SYNTAX PARAMETER LIST WHERE THE
  32. * COMMAND ELEMENT TO BE RESOLVED RESIDES.
  33. * WCBUF = WORD COUNT WORD OF ENTRY.
  34. * HDRCMD = ONE WORD COMMAND HEADER WORD.
  35. * PARMS = BODY OF VALID COMMAND THAT CONTAINS THE TEXT OF THE
  36. * COMMAND FOLLOWED BY THE SYNTAX PARAMETER LIST.
  37. *
  38. * EXIT:
  39. * EITHER A ROUTED COMMAND QUEUE ENTRY HAS BEEN QUEUED TO THE
  40. * ROUTED COMMAND QUEUE OR A TERMINAL TEXT ENTRY INFORMING THE
  41. * OPERATOR OF THE COMMAND PROBLEM IS ISSUED.
  42. *
  43. #
  44.  
  45. #
  46. **** PROC CSSRCA XREF LIST
  47. *
  48. #
  49. XREF
  50. BEGIN
  51. PROC SSTRQE; # SS-REMOVE QUEUE ENTRY #
  52. PROC SSTAQE; # SS-ACCEPT QUEUE ENTRY #
  53. END
  54.  
  55. #
  56. ****
  57. #
  58.  
  59. #
  60. * PROC CSSRCA DEFS
  61. #
  62. DEF CHARA #1#; # CHARACTER "A"#
  63. DEF CHAR0 #27#; # CHARACTER "0"#
  64.  
  65. # ELMLST - LIST OF POSSIBLE ELEMENT PARAMETER CODE VALUES. #
  66.  
  67. STATUS ELMLST
  68. NPU, # FOR NP0 CODE #
  69. CPLR, # FOR CP0 CODE #
  70. LINE, # FOR LI0 CODE #
  71. VCIR, # FOR VC0 CODE #
  72. TERM, # FOR TE0 CODE #
  73. TRUNK, # FOR TR0 CODE #
  74. LLINK, # FOR LL0 CODE #
  75. NPUS; # FOR NPS CODE #
  76.  
  77.  
  78.  
  79. #
  80. * PROC CSSRCA ITEMS
  81. #
  82.  
  83. ITEM I,J U; # LOOP INDUCTION VARS #
  84. ITEM CFLAG B; # CONTROL FLAG #
  85. ITEM GOFLAG B; # CONT CMD PROCESSING #
  86. ITEM MATCH B; # MATCH INDICATOR #
  87. ITEM ELINDX U; # LOCAL INDEX VARS #
  88. ITEM PLXINDX U;
  89. ITEM NPUIDX U;
  90. ITEM LPLXINDX U;
  91. ITEM LININDX U;
  92. ITEM DEVINDX U;
  93. ITEM LDEVINDX U;
  94. ITEM LLINDXF U; # LLINK XREF INDX #
  95. ITEM LLINDX U; # LLINK CURRENT INDEX #
  96. ITEM LTYPE B; # LINK TYPE ID #
  97. ITEM NOPINDX U;
  98. ITEM STRTINDX U; # INDEX VARIABLE #
  99. ITEM BEGAP U; # BEGINNING INDEX VARIABLE #
  100. # OF ADDRESS LIST PARMS #
  101. ITEM INDX U; # ELEMENT INDEX #
  102. ITEM OCBORD U; # LOCAL OCB ORDINAL #
  103. ITEM OKFLAG B; # VALID COMMAND FLAG #
  104.  
  105. #
  106. * ELMSWT - ELEMENT TYPE SWITCH.
  107. #
  108.  
  109. SWITCH ELMSWT:ELMLST
  110. ELMNPU:NPU,
  111. ELMCPLR:CPLR,
  112. ELMLINE:LINE,
  113. ELMVCIR:VCIR,
  114. ELMTRM:TERM,
  115. ELMTRK:TRUNK,
  116. ELMLLK:LLINK,
  117. ELMNPUS:NPUS;
  118.  
  119.  
  120. #
  121. * MESSAGE ARRAYS FOR TERMINAL TEXT ENTRIES TO OPERATORS.
  122. #
  123.  
  124. #
  125. * NODEF - MESSAGE FOR UNDEFINED ELEMENT.
  126. #
  127.  
  128. ARRAY NODEF [00:00] S(3);
  129. BEGIN
  130. ITEM NOD$TXT1 C(00,00,07); # ELEMNET TYPE #
  131. ITEM NOD$NAME C(00,42,07); # ELEMENT NAME #
  132. ITEM NOD$TXT2 C(01,24,12) = [",NOT DEFINED"];
  133. ITEM NOD$ZERO U(02,36,24) = [0];
  134. END
  135.  
  136. #
  137. * NONPUS - MESSAGE INDICATING NO NPUS UNDER THE OPERATORS CONTROL
  138. #
  139. ARRAY NONPUS [00:00] S(3);
  140. BEGIN
  141. ITEM NN$TXT1 C(00,00,20) = ["NO NPUS UNDER YOUR C"];
  142. ITEM NN$TXT2 C(02,00,06) = ["ONTROL"];
  143. ITEM NN$ZBYT U(02,36,24) = [0];
  144. END
  145.  
  146. #
  147. * NOSUP - MESSAGE FOR UNSUPERVISED ELEMENT.
  148. #
  149.  
  150. ARRAY NOSUP [00:00] S(4);
  151. BEGIN
  152. ITEM NOS$TXT1 C(00,00,07); # ELEMENT TYPE #
  153. ITEM NOS$NAME C(00,42,07); # ELEMENT NAME #
  154. ITEM NOS$TXT2 C(01,24,15) = [",NOT SUPERVISED"];
  155. ITEM NOS$ZERO U(02,54,06) = [0];
  156. ITEM NOS$ZER1 U(03,00,60) = [0];
  157. END
  158.  
  159. #
  160. * NOSUP2 - MESSAGE SENT WHEN NO NPUS ARE BEING SUPERVISED.
  161. #
  162. ARRAY NOSUP2 [00:00] S(3);
  163. BEGIN
  164. ITEM NS2$TXT1 C(00,00,28) = ["NO NPUS ARE BEING SUPERVISED"];
  165. ITEM NS2$ZBYT U(02,48,12) = [0];
  166. END
  167.  
  168. #
  169. * NOCTRL - MESSAGE FOR LACK OF NEEDED CONTROL MESSAGE.
  170. #
  171.  
  172. ARRAY NOCTRL [00:00] S(4);
  173. BEGIN
  174. ITEM NOC$TXT1 C(00,00,07); # ELEMENT TYPE #
  175. ITEM NOC$NAME C(00,42,07); # ELEMENT NAME #
  176. ITEM NOC$TXT2 C(01,24,23) = [",NOT UNDER YOUR CONTROL"];
  177. ITEM NOC$ZERO U(03,42,18) = [0];
  178. END
  179.  
  180. #
  181. * RESCMD - MESSAGE INDICATING RESERVED COMMAND, FOR NOPS ONLY
  182. #
  183. ARRAY RESCMD [00:00] S(5);
  184. BEGIN
  185. ITEM RC$TXT1 C(00,00,20) = ["COMMAND RESTRICTED T"];
  186. ITEM RC$TXT2 C(02,00,20) = ["O NETWORK OPERATORS "];
  187. ITEM RC$ZBYT I(04,00,60) = [0];
  188. END
  189.  
  190. #
  191. * NPADDR - NPU ADDRESS ARRAY.
  192. *
  193. * THIS ARRAY HOLDS THE NPU NODE NUMBERS, PORT NUMBERS, ELEMENT
  194. * ORDINAL VALUES, ELEMENT HOST NODE NUMBERS AND INDICATORS FOR
  195. * COMMAND CONSTRUCTION STATUS FOR EACH COMMAND SEQUENCE.
  196. #
  197.  
  198. ARRAY NPADDR [00:01] S(1);
  199. BEGIN
  200. ITEM NP$NODE U(00,00,08);
  201. ITEM NP$ORD U(00,08,12);
  202. ITEM NP$HID U(00,20,08);
  203. ITEM NP$PORT U(00,28,08);
  204. ITEM NP$NORIN B(00,36,01);
  205. END
  206.  
  207. #
  208. * CMDPAK - LOCAL COMMAND PACKET.
  209. *
  210. * THIS ARRAY HOLDS THE INFORMATION OF THE COMMAND ELEMENTS, THE
  211. * COMMAND ELEMENT LOCATION IN THE COMMAND SYNTAX PARAMETER LIST,
  212. * THE TEXT FOR THE COMMAND ELEMENT TYPE AND THE COMMAND ELEMENT
  213. * IDENTIFIER.
  214. #
  215.  
  216. ARRAY CMDPAK [00:00] S(1);
  217. BEGIN
  218. ITEM CMD$WORD U(00,00,60); # FULL WORD REF #
  219. ITEM CMD$ELTYPE C(00,00,07); # ELEMENT TYPE TEXT #
  220. ITEM CMD$ELINDX U(00,42,08); # ELEMENT INDEX IN SYNTAX #
  221. ITEM CMD$ELMID S:ELMLST (00,50,08); # INTERNAL ELEMENT ID #
  222. ITEM CMD$NOP B(00,58,01); # NOP KEYWORD PRESENT FLAG #
  223. END
  224.  
  225. #
  226. * ELNAME - LOCAL ELEMENT NAME
  227. *
  228. * THIS ARRAY HOLDS THE ARCHETYPE SVC NAME(FROM THE COMMAND
  229. * PARAMETER LIST). FLAG EL$SVCF IS SET TRUE TO ALLOW A MATCH
  230. * FROM THE DEVICE XREF TABLE.
  231. #
  232. ARRAY ELNAME [00:00] S(1);
  233. BEGIN
  234. ITEM EL$WORD U(00,00,60); # FULL WORD REF #
  235. ITEM EL$SVCF B(00,00,01); # SVC ROOT FLAG #
  236. ITEM EL$SVCNAM C(00,00,05); # ARCHETYPE SVC NAME #
  237. END
  238.  
  239.  
  240.  
  241.  
  242. #
  243. * MAIN PROC CSSRCA START
  244. #
  245.  
  246. #
  247. * INITIALIZE THE LOCAL VARIABLES
  248. #
  249.  
  250. OCBORD = HDR$OPORD[0]; # OCB ORDINAL FROM HEADER #
  251. BEGAP = HDR$SPCNT[0] + HDR$TXWCNT[0]; # BEG INDEX LOC OF THE #
  252. # ADDRESS PARM LIST #
  253. WCB$WORD[1] = 0;
  254. ABHWORD[1] = 0;
  255. WCB$SMID[1] = SMID"TTEXT"; # TERMINAL TEXT ID #
  256. WCB$WC[1] = 6; # TTEXT ENTRY SIZE #
  257. WCB$IAF[1] = TRUE; # INPUT ALLOWED TRUE #
  258. ABHADR[1] = OCBORD; # TTEXT OCB ORDINAL #
  259. ABHTLC[1] = 40; # TTEXT CHAR LENGTH #
  260. STRTINDX = HDR$TXWCNT[0] + 1; # SET 1ST ELM INDEX LOC #
  261. CMD$WORD[0] = 0; # INITIALIZE CMD PACKET #
  262. CMD$ELINDX[0] = ELINDX;
  263. IF PAR$PCODE[STRTINDX] EQ "NOP" # IF NOP KEYWORD PRESENT #
  264. THEN
  265. CMD$NOP[0] = TRUE; # SET CMD PACKET INDICATOR #
  266.  
  267. #
  268. * USING THE PASSED PARAMETER ELINDX, CHECK THE VALUE OF THE
  269. * ELEMENT IN THE SYNTAX PARAMETER LIST AND SET THE INTERNAL
  270. * ELEMENT IDENTIFIER OF THE COMMAND PACKET.
  271. #
  272.  
  273. INDX = CMD$ELINDX[0];
  274.  
  275. IF PAR$PCODE[INDX] EQ "NP0" # NPU ELEMENT #
  276. THEN
  277. CMD$ELMID[0] = ELMLST"NPU";
  278.  
  279. ELSE IF PAR$PCODE[INDX] EQ "CP0" # COUPLER ELEMENT #
  280. THEN
  281. CMD$ELMID[0] = ELMLST"CPLR";
  282.  
  283. ELSE IF PAR$PCODE[INDX] EQ "LI0" # LINE ELEMENT #
  284. THEN
  285. CMD$ELMID[0] = ELMLST"LINE";
  286.  
  287. ELSE IF PAR$PCODE[INDX] EQ "VC0" # CIRCUIT ELEMENT #
  288. THEN
  289. CMD$ELMID[0] = ELMLST"VCIR";
  290.  
  291. ELSE IF PAR$PCODE[INDX] EQ "TE0" # TERMINAL ELEMENT #
  292. THEN
  293. CMD$ELMID[0] = ELMLST"TERM";
  294.  
  295. ELSE IF PAR$PCODE[INDX] EQ "TR0" # TRUNK ELEMENT #
  296. THEN
  297. CMD$ELMID[0] = ELMLST"TRUNK";
  298.  
  299. ELSE IF PAR$PCODE[INDX] EQ "LL0" # LLINK ELEMENT #
  300. THEN
  301. CMD$ELMID[0] = ELMLST"LLINK";
  302.  
  303. ELSE IF PAR$PCODE[INDX] EQ "NPS" # MULT NPU ELEMENT #
  304. OR PAR$PCODE[INDX] EQ "AU0"
  305. THEN
  306. CMD$ELMID[0] = ELMLST"NPUS";
  307.  
  308. ELSE IF PAR$PCODE[INDX] EQ "HO0"
  309. THEN
  310. CMD$ELMID[0] = ELMLST"TERM";
  311.  
  312. #
  313. * THE TYPE OF ELEMENT IS KNOWN. MUST NOW SEARCH THE APPROPRIATE
  314. * XREF TABLE TO VERIFY THAT THE ELEMENT IS KNOWN TO CS.
  315. * EACH CASE WILL ATTEMPT TO LOCATE A MATCH IN THE XREF TABLE AND
  316. * IF A MATCH IS FOUND, SET THE LOCAL COMMAND ADDRESS INFORMATION
  317. * FOR THE NECESSARY ELEMENTS.
  318. * A COMMAND MAY NECESSITATE THE ADDRESS INFORMATION FOR DUAL NPUS.
  319. * A BRANCH IS MADE DEPENDING ON WHETHER A SINGLE OR DUAL SET OF
  320. * ADDRESS INFORMATION IS NEEDED.
  321. #
  322.  
  323. GOTO ELMSWT[CMD$ELMID[0]];
  324.  
  325.  
  326.  
  327. ELMNPU: # NPU ELEMENT #
  328.  
  329. CMD$ELTYPE[0] = "NPU: "; # SET ELEMENT TYPE TEXT #
  330. NPU$NAME[CSNPCNT] = PAR$ELNAME[INDX];
  331. NPU$NID[CSNPCNT] = X"FF"; # INSURE SEARCH MATCH #
  332.  
  333. FOR NPUIDX = 0 STEP 1 WHILE
  334. PAR$ELNAME[INDX] NQ NPU$NAME[NPUIDX]
  335. DO
  336. BEGIN
  337. END
  338.  
  339. IF NPU$NID[NPUIDX] NQ X"FF" # MATCH FOUND #
  340. THEN
  341. BEGIN
  342. NP$NODE[0] = NPU$NID[NPUIDX];
  343. GOTO ELMSINGL;
  344. END
  345. ELSE # NO MATCH #
  346. GOTO NOMATCH;
  347.  
  348.  
  349.  
  350.  
  351.  
  352. ELMCPLR: # COUPLER ELEMENT #
  353.  
  354. CMD$ELTYPE[0] = "CPLR: "; # SET ELM TYPE TEXT #
  355.  
  356. # SET THE MAX INDEX FOR THE PHYSICAL LINK XREF TABLE #
  357.  
  358. LPLXINDX = (PLXREFL / 2) -1 ;
  359.  
  360. PLX$CNPU[LPLXINDX] = X"FF"; # SET PL XREF TABLE ENTRY #
  361. # AT END TO INSURE MATCH #
  362. PLX$NAME[LPLXINDX] = PAR$ELNAME[INDX];
  363.  
  364. #
  365.   * VERIFY THAT THE COUPLER ELEMENT IS FOUND AND THAT IT IS A
  366.   * COUPLER LINK TYPE FOR A MATCH TO OCCUR.
  367.   #
  368.  
  369. FOR PLXINDX = 0 STEP 1 WHILE
  370. PAR$ELNAME[INDX] NQ PLX$NAME[PLXINDX]
  371. DO
  372. BEGIN
  373. END
  374.  
  375. IF PLX$CNPU[PLXINDX] NQ X"FF" AND
  376. NOT PLX$TYPE[PLXINDX]
  377. THEN
  378. BEGIN
  379. NP$NODE[0] = PLX$CNPU[PLXINDX];
  380. NP$NODE[1] = PLX$HNID[PLXINDX];
  381. GOTO ELMSINGL;
  382. END
  383. ELSE # NO MATCH IN XREF #
  384. GOTO NOMATCH;
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391. ELMLINE: # LINE ELEMENT #
  392.  
  393. CMD$ELTYPE[0] = "LINE: "; # SET ELEMENT TEXT #
  394.  
  395. #
  396.   * PRESET THE LAST LINE XREF TABLE ENTRY TO INSURE SEARCH MATCH
  397.   #
  398.  
  399. LIX$NAME[LIXL - 1] = PAR$ELNAME[INDX];
  400. LIX$PORT[LIXL - 1] = X"FF";
  401.  
  402. #
  403.   * SEARCH LINE XREF TABLE FOR MATCH ON NAME
  404.   #
  405.  
  406. FOR LININDX = 0 STEP 1 WHILE
  407. PAR$ELNAME[INDX] NQ LIX$NAME[LININDX]
  408. DO
  409. BEGIN
  410. IF DEX$SVCF[DEVINDX]
  411. THEN
  412. BEGIN
  413. PAR$SVCFLG[INDX] = TRUE; # SET PARAMETER SVC FLAG #
  414. # EXIT LOOP IF MATCH FOUND #
  415. IF PAR$SVCNAM[INDX] EQ DEX$CNAME[DEVINDX]
  416. THEN
  417. BEGIN
  418. J = 0; # J IS SVC ORDINAL SUM #
  419. FOR I = 0 STEP 1 UNTIL 1
  420. DO # CHECK FOR VALID SVC ORDINAL #
  421. BEGIN
  422. IF (C<I>PAR$SVCORD[INDX] GQ "A"
  423. AND C<I>PAR$SVCORD[INDX] LQ "F")
  424. OR (C<I>PAR$SVCORD[INDX] GQ "0"
  425. AND C<I>PAR$SVCORD[INDX] LQ "9")
  426. THEN
  427. BEGIN
  428. J = J*16 + B<I*6,6>PAR$SVCORD[INDX];
  429. IF C<I>PAR$SVCORD[INDX] LQ "F"
  430. THEN
  431. BEGIN
  432. J = J - CHARA + 10; # HEX DIGIT: SUBTRACT "A" #
  433. END
  434. ELSE
  435. BEGIN
  436. J = J - CHAR0; # DECIMAL DIGIT: SUBTRACT "0" #
  437. END
  438. END
  439. END
  440.  
  441. IF J LQ DEX$NSVC[DEVINDX]
  442. THEN
  443. BEGIN # SVC ORDINAL WITHIN RANGE #
  444. GOTO FOUNDV;
  445. END
  446. END
  447. PAR$SVCFLG[INDX] = FALSE;
  448. END
  449. END
  450.  
  451. FOUNDV:
  452.  
  453. IF LIX$PORT[LININDX] NQ X"FF" # MATCH FOUND #
  454. THEN
  455. BEGIN
  456. NP$NODE[0] = LIX$NID[LININDX];
  457. NP$PORT[0] = LIX$PORT[LININDX]; # SET PORT VARIABLE #
  458. GOTO ELMSINGL;
  459. END
  460. ELSE # NO MATCH IN XREF #
  461. GOTO NOMATCH;
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468. ELMVCIR: # SVC ELEMENT #
  469.  
  470. CMD$ELTYPE[0] = "SVC: "; # SET ELEMENT TEXT #
  471.  
  472. #
  473.   * PRESET THE LAST SVC XREF TABLE ENTRY TO INSURE SEARCH MATCH
  474.   #
  475.  
  476. EL$SVCNAM[0] = PAR$VCNAME[INDX]; # MOVE ARCHETYPE SVC NAME #
  477. EL$SVCF[0] = TRUE; # SVC ROOT FLAG #
  478. LDEVINDX = DEXL - 1; # SET LAST ENTRY INDEX #
  479. DEX$CNAME[LDEVINDX] = EL$SVCNAM[0];
  480. DEX$PORT[LDEVINDX] = X"FF";
  481.  
  482. #
  483.   *SEARCH FOR MATCHING NAME ON SVC ENTRY
  484.   #
  485.  
  486. FOR DEVINDX = 0 STEP 1 WHILE
  487. (EL$SVCNAM[0] NQ DEX$CNAME[DEVINDX])
  488. DO
  489. BEGIN
  490. END
  491.  
  492. IF DEX$PORT[DEVINDX] NQ X"FF" # MATCH FOUND #
  493. THEN
  494. BEGIN
  495. NP$NODE[0] = DEX$NID[DEVINDX];
  496. NP$PORT[0] = DEX$PORT[DEVINDX];
  497. GOTO ELMSINGL;
  498. END
  499. ELSE
  500. GOTO NOMATCH;
  501.  
  502.  
  503.  
  504.  
  505.  
  506.  
  507. ELMTRM: # TERMINAL ELEMENT #
  508. IF HDR$VERB[0] EQ "SE0"
  509. THEN
  510. BEGIN
  511.  
  512. IF PAR$PCODE[INDX] EQ "HO0"
  513. THEN
  514. BEGIN
  515. HDR$VERB[0] = "SE1";
  516. GOTO ROUTEOK;
  517. END
  518. ELSE
  519. BEGIN
  520. FOR I=HOPORD$ STEP 1 WHILE PAR$ELNAME[INDX] NQ OC$TNAM[I] AND
  521. I LQ MAXACN$
  522. DO
  523. BEGIN
  524. END
  525. IF I LQ MAXACN$
  526. THEN
  527. BEGIN
  528. HDR$VERB[0] = "SE1";
  529. GOTO ROUTEOK;
  530. END
  531. END
  532. END
  533.  
  534. CMD$ELTYPE[0] = "TERM: ";
  535.  
  536. #
  537.   * PRESET LAST DEVICE XREF TABLE ENTRY TO INSURE MATCH.
  538.   #
  539.  
  540. LDEVINDX = DEXL - 1 ; # SET LAST ENTRY INDEX #
  541. DEX$NAME[LDEVINDX] = PAR$ELNAME[INDX];
  542. DEX$PORT[LDEVINDX] = X"FF";
  543.  
  544. #
  545.   * SEARCH FOR MATCHING NAME ON DEVICE ENTRY.
  546.   #
  547.  
  548. FOR DEVINDX = 0 STEP 1 WHILE
  549. PAR$ELNAME[INDX] NQ DEX$NAME[DEVINDX]
  550. DO
  551. BEGIN
  552. END
  553.  
  554. IF DEX$PORT[DEVINDX] NQ X"FF" # MATCH FOUND #
  555. THEN
  556. BEGIN
  557. NP$NODE[0] = DEX$NID[DEVINDX];
  558. NP$PORT[0] = DEX$PORT[DEVINDX];
  559. GOTO ELMSINGL;
  560. END
  561. ELSE # NO MATCH IN XREF #
  562. GOTO NOMATCH;
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569. ELMTRK: # TRUNK ELEMENT #
  570.  
  571. CMD$ELTYPE[0] = "TRUNK: ";
  572.  
  573. LPLXINDX = (PLXREFL / 2) - 1; # SET LAST PLINK INDX#
  574.  
  575. #
  576.   * SET LAST ENTRY TO INSURE MATCH ON SEARCH OF PLXREF TABLE
  577.   #
  578.  
  579.  
  580. PLX$TN1[LPLXINDX] = X"FF";
  581. PLX$NAME[LPLXINDX] = PAR$ELNAME[INDX];
  582.  
  583. #
  584.   * SEARCH THE PHYSICAL LINK XREF FOR TRUNK NAME MATCH
  585.   #
  586.  
  587. FOR PLXINDX = 0 STEP 1 WHILE
  588. PAR$ELNAME[INDX] NQ PLX$NAME[PLXINDX]
  589. DO
  590. BEGIN
  591. END
  592.  
  593. IF PLX$TN1[PLXINDX] NQ X"FF" # IF MATCH AND TRUNK LINK #
  594. AND PLX$TYPE[PLXINDX]
  595. THEN
  596. BEGIN
  597. NP$NODE[0] = PLX$TN1[PLXINDX]; # SET LOCAL NODE AND PORT #
  598. NP$PORT[0] = PLX$TP1[PLXINDX]; # VALUES FOR LATER #
  599. NP$NODE[1] = PLX$TN2[PLXINDX];
  600. NP$PORT[1] = PLX$TP2[PLXINDX];
  601. GOTO ELMDUAL;
  602. END
  603. ELSE # NO MATCH IN XREF #
  604. GOTO NOMATCH;
  605.  
  606.  
  607.  
  608.  
  609.  
  610. ELMLLK: # LLINK ELEMENT #
  611.  
  612. CMD$ELTYPE[0] = "LLINK: ";
  613.  
  614. LLINDXF = (LLXREFL / 2) - 1; # SET LAST LLINK ENTRY #
  615.  
  616. #
  617.   * SET LAST ENTRY IN LLINK XREF TABLE TO INSURE MATCH
  618.   #
  619.  
  620.  
  621. LLX$HID1[LLINDXF] = X"FF";
  622. LLX$NAME[LLINDXF] = PAR$ELNAME[INDX];
  623.  
  624. #
  625.   * SEARCH THE LLINK XREF TABLE FOR LLINK NAME MATCH
  626.   #
  627.  
  628. FOR LLINDX = 0 STEP 1 WHILE
  629. PAR$ELNAME[INDX] NQ LLX$NAME[LLINDX]
  630. DO
  631. BEGIN
  632. END
  633.  
  634. IF LLX$HID1[LLINDX] NQ X"FF" # IF MATCH FOUND #
  635. THEN
  636. BEGIN
  637. NP$NODE[0] = LLX$NID1[LLINDX]; # SET LOCAL NODE PAIR #
  638. NP$NODE[1] = LLX$NID2[LLINDX];
  639. NP$HID[0] = LLX$HID1[LLINDX]; # SET HOST IDS #
  640. NP$HID[1] = LLX$HID2[LLINDX];
  641. LTYPE = LLX$TYPE[LLINDX]; # SET LOCAL LLINK TYPE #
  642. GOTO ELMDUAL;
  643. END
  644. ELSE # NO MATCH IN XREF #
  645. GOTO NOMATCH;
  646.  
  647. ELMNPUS:
  648.  
  649. #
  650. * IF THIS IS A NOP COMMAND, THEN SEARCH THE NPUCB-S TO SEE IF
  651. * THIS OPERATOR CONTROLS ANY NPU-S. IF SO, THEN SEND THE
  652. * COMMAND TO RCQ, OTHERWISE IF THIS COMMAND IS A CONTROL COM-
  653. * MAND AND THE OPERATOR IS NOT A DOP, THEN SEND THE COMMAND
  654. * TO RCQ, OTHERWISE SEND AN ERROR MESSAGE.
  655. #
  656. IF CMD$NOP[0]
  657. THEN
  658. BEGIN
  659. IF OC$TYPE[OCBORD] EQ OPTYP"HOP"
  660. THEN
  661. BEGIN
  662. GOTO ROUTEOK;
  663. END
  664.  
  665. CFLAG = FALSE;
  666. FOR I=0 STEP 1 WHILE I LS CSNPCNT
  667. DO
  668. BEGIN
  669. IF NPU$CNOP[I] EQ OCBORD AND
  670. (NPU$STAT[I] EQ SUPSTAT"SUP"
  671. OR (OC$TYPE[OCBORD] EQ OPTYP"NOP"
  672. AND (NPU$STAT[I] EQ SUPSTAT"NCFMIS" OR
  673. NPU$STAT[I] EQ SUPSTAT"LEVMIS")))
  674. THEN
  675. BEGIN
  676. CFLAG = TRUE;
  677. END
  678. END
  679.  
  680. IF CFLAG
  681. THEN
  682. BEGIN
  683. GOTO ROUTEOK;
  684. END
  685.  
  686. ELSE
  687. BEGIN
  688. IF HDR$VERB[0] EQ "CO0" AND
  689. OC$TYPE[OCBORD] NQ OPTYP"DOP"
  690. THEN
  691. BEGIN
  692. GOTO ROUTEOK;
  693. END
  694.  
  695. ELSE IF HDR$VERB[0] EQ "LO0"
  696. THEN
  697. BEGIN
  698. FOR I=0 STEP 1 WHILE I LS CSNPCNT
  699. DO
  700. BEGIN
  701. IF (NPU$STAT[I] EQ SUPSTAT"NCFMIS" OR
  702. NPU$STAT[I] EQ SUPSTAT"LEVMIS")
  703. THEN
  704. BEGIN
  705. CFLAG = TRUE;
  706. END
  707. END
  708.  
  709. IF CFLAG
  710. THEN
  711. BEGIN
  712. GOTO ROUTEOK;
  713. END
  714. END
  715.  
  716. IF OC$TYPE[OCBORD] NQ OPTYP"NOP"
  717. THEN
  718. BEGIN
  719. WCB$WC[1] = 7;
  720. SSTAQE(P<CNQ>,WCBUF[1],ABH[1],RESCMD);
  721. END
  722. ELSE
  723. BEGIN
  724. WCB$WC[1] = 5;
  725. SSTAQE(P<CNQ>,WCBUF[1],ABH[1],NONPUS);
  726. END
  727. END
  728. GOTO ENDEXIT;
  729. END
  730.  
  731. #
  732. * THIS COMMAND IS NOT A NOP COMMAND, SEND IT TO RCQ.
  733. #
  734. ELSE
  735. BEGIN
  736. CFLAG = FALSE;
  737. FOR I=0 STEP 1 WHILE I LS CSNPCNT
  738. DO
  739. BEGIN
  740. IF NPU$STAT[I] EQ SUPSTAT"SUP"
  741. THEN
  742. BEGIN
  743. CFLAG = TRUE;
  744. END
  745. END
  746. IF CFLAG
  747. THEN
  748. BEGIN
  749. GOTO ROUTEOK;
  750. END
  751. ELSE
  752. BEGIN
  753. WCB$WC[1] = 5;
  754. SSTAQE(P<CNQ>,WCBUF[1],ABH[1],NOSUP2);
  755. GOTO ENDEXIT;
  756. END
  757. END
  758.  
  759. NOMATCH: # NO MATCH IN XREF #
  760.  
  761. #
  762.   * IF NO MATCH FOUND FROM XREF SEARCH, THEN A TERMINAL TEXT
  763.   * TO THE OPERATOR TO INFORM OF THE ERRONEOUS ELEMENT NAME
  764.   * NEEDS TO BE SENT.
  765.   #
  766.  
  767. NOD$TXT1[0] = CMD$ELTYPE[0]; # SET ELEMENT TYPE TEXT #
  768. NOD$NAME[0] = PAR$ELNAME[INDX]; # SET ELEMENT NAME #
  769. WCB$WC[1] = 5; # SET ENTRY SIZE #
  770. ABHTLC[1] = 30; # SET MESSAGE CHAR LENGTH #
  771. SSTAQE(P<CNQ>,WCBUF[1],ABH[1],NODEF);
  772. GOTO ENDEXIT;
  773.  
  774.  
  775.  
  776.  
  777.  
  778. ELMDUAL: # DUAL ELEMENT COMMAND #
  779.  
  780.  
  781. #
  782.   * THE ELEMENT WAS DEFINED IN THE XREF TABLE AND EFFECTS TWO
  783.   * NPUS.
  784.   #
  785.  
  786. NP$NORIN[0] = FALSE; # INIT THE NPUCB ORDINAL #
  787. NP$NORIN[1] = FALSE; # PRESENT FLAG #
  788. NP$ORD[0] = CSNPCNT + 1;
  789. NP$ORD[1] = CSNPCNT + 1;
  790.  
  791.  
  792. #
  793.   * RESOLVE THE NPUCB ORDINALS FOR THE INDICATED NPU NODES.
  794.   #
  795.  
  796. FOR I = 0 STEP 1 UNTIL 1
  797. DO
  798. BEGIN
  799.  
  800. FOR J = 0 STEP 1 WHILE NP$NODE[I] NQ NPU$NID[J]
  801. DO
  802. BEGIN
  803. END
  804.  
  805. NP$ORD[I] = J; # ALWAYS FOUND, SET ORDINAL #
  806.  
  807. #
  808. * CHECK TO VERIFY THAT THE ORDINALS DO NOT REPEAT. IF SO, THEN
  809. * THE SAME NPU IS THE ORIGINATING AND THE TERMINATING NODE OF
  810. * THE LOGICAL LINK IN WHICH CASE, AVOID APPENDING TWO IDENTICAL
  811. * NPU ORDINAL (NOR) VALUES TO THE ADDRESS PARAMETER LIST.
  812. #
  813.  
  814. IF NP$ORD[0] NQ NP$ORD[1]
  815. THEN
  816. BEGIN
  817.  
  818.  
  819.  
  820. #
  821.   * FOR EACH NPU NODE ID DEFINED FOR THE COMMAND, SEE IF SUPER-
  822.   * VISED.
  823.   #
  824.  
  825.  
  826. IF NPU$STAT[NP$ORD[I]] EQ SUPSTAT"SUP"
  827. THEN
  828. BEGIN
  829.  
  830. #
  831.   * NPU IS SUPERVISED.
  832.   * CHECK TO SEE IF CONTROL NEEDED BY CHECKING FOR THE NOP KEYWORD
  833.   * IN THE COMMAND.
  834.   * IF CONTROL NEEDED THEN THE ORIGIN OPERATOR OF COMMAND MUST BE
  835.   * EITHER THE CONTROLLING NOP OR THE HOP.
  836.   * OTHERWISE, CONTROL NOT NEEDED QUALIFIES THE COMMAND.
  837.   #
  838.  
  839. GOFLAG = FALSE;
  840. IF NOT CMD$NOP[0]
  841. THEN
  842. GOFLAG = TRUE;
  843. ELSE IF (CMD$NOP[0] AND OCBORD EQ HOPORD$)
  844. THEN
  845. GOFLAG = TRUE;
  846. ELSE IF (CMD$NOP[0] AND OC$TYPE[OCBORD] EQ OPTYP"NOP"
  847. AND OCBORD EQ NPU$CNOP[NP$ORD[I]])
  848. THEN
  849. GOFLAG = TRUE;
  850.  
  851. IF GOFLAG
  852. THEN
  853. BEGIN
  854. PAR$PCODE[BEGAP] = "NOR";
  855. PAR$ORD[BEGAP] = NP$ORD[I];
  856. BEGAP = BEGAP + 1;
  857. NP$NORIN[I] = TRUE;
  858. HDR$APCNT[0] = HDR$APCNT[0] + 1; # BUMP NUM ADDR PARMS #
  859. END
  860.  
  861. END # IF NPU SUPERVISED #
  862.  
  863.  
  864.  
  865.  
  866. #
  867.   * IF TRUNK ELEMENT, ADD THE TRUNK LINE ADDRESS TO THE ADDRESS
  868.   * PARAMETER LIST IF A NPUCB ORDINAL WAS ADDED TO THE ADDRESS
  869.   * PARAMETER LIST.
  870.   #
  871.  
  872. IF NP$NORIN[I]
  873. THEN
  874.  
  875. BEGIN
  876. IF CMD$ELMID[0] EQ ELMLST"TRUNK"
  877. THEN
  878.  
  879. BEGIN
  880. PAR$PCODE[BEGAP] = "TLA";
  881. PAR$ELADDR[BEGAP] = NP$PORT[I];
  882. END
  883.  
  884. ELSE
  885.  
  886.  
  887. #
  888.   * MUST BE LLINK ELEMENT. ADD LLINK ADDRESS TO ADDRESS PARAMETER
  889.   * LIST IF AND ONLY IF A NPUCB ORDINAL WAS ADDED.
  890.   #
  891.  
  892. BEGIN
  893. PAR$PCODE[BEGAP] = "LLA";
  894. IF LTYPE
  895. THEN
  896. PAR$LLTYPE[BEGAP] = TRUE;
  897. ELSE
  898. PAR$LLTYPE[BEGAP] = FALSE;
  899.  
  900. PAR$LLNID1[BEGAP] = NP$HID[0];
  901. PAR$LLNID2[BEGAP] = NP$HID[1];
  902. END
  903.  
  904. BEGAP = BEGAP + 1;
  905. HDR$APCNT[0] = HDR$APCNT[0] + 1;
  906.  
  907. END
  908.  
  909. END # IF NP$ORD NQ #
  910.  
  911. END # FOR I LOOP #
  912.  
  913.  
  914. #
  915.   * IF A NPUCB ORDINAL NOT ADDED THEN SEND TERMINAL TEXT MESSAGE
  916.   * TO OPERATOR. LACK OF CONTROL IF NOP NEEDS CONTROL AND DOES
  917.   * NOT HAVE IT OR LACK OF SUPERVISION OTHERWISE.
  918.   #
  919.  
  920. IF NOT NP$NORIN[0] AND NOT NP$NORIN[1]
  921. THEN
  922. BEGIN
  923. IF OC$TYPE[OCBORD] NQ OPTYP"HOP"
  924. THEN
  925. BEGIN
  926. IF CMD$NOP[0] AND
  927. (OCBORD NQ NPU$CNOP[0] OR OCBORD NQ NPU$CNOP[1])
  928. THEN
  929. BEGIN
  930. NOC$TXT1[0] = CMD$ELTYPE[0]; # SET ELM TYPE IN MSG #
  931. NOC$NAME[0] = PAR$ELNAME[ELINDX]; # SET ELM NAME IN MSG #
  932. SSTAQE(P<CNQ>,WCBUF[1],ABH[1],NOCTRL[0]);
  933. END
  934. END
  935. ELSE
  936. BEGIN
  937. NOS$TXT1[0] = CMD$ELTYPE[0];
  938. NOS$NAME[0] = PAR$ELNAME[ELINDX];
  939. SSTAQE(P<CNQ>,WCBUF[1],ABH[1],NOSUP[0]);
  940. END
  941.  
  942. GOTO ENDEXIT;
  943. END
  944.  
  945. ELSE # NPUCB ORDINAL ADDED OK #
  946. GOTO ROUTEOK;
  947. ELMSINGL: # SINGLE ELEMENT COMMAND #
  948.  
  949. #
  950.   * RESOLVE THE NPUCB ORDINAL VALUE FOR THE INDICATED NPU NODE
  951.   #
  952.  
  953. FOR I = 0 STEP 1 WHILE NP$NODE[0] NQ NPU$NID[I]
  954. DO
  955. BEGIN
  956. END
  957.  
  958. NP$ORD[0] = I; # ALWAYS FOUND, SET ORDINAL#
  959.  
  960.  
  961. #
  962.   * CHECK IF NPU IS SUPERVISED. IF NOT, SEND MESSAGE TO OPERATOR
  963.   #
  964.  
  965.  
  966. IF NPU$STAT[NP$ORD[0]] EQ SUPSTAT"SUPLOST"
  967. THEN
  968. BEGIN
  969. NOS$TXT1[0] = CMD$ELTYPE[0]; # SET MESSAGE ELEMENT TYPE #
  970. NOS$NAME[0] = PAR$ELNAME[INDX]; # SET MSG ELEMENT NAME #
  971. SSTAQE(P<CNQ>,WCBUF[1],ABH[1],NOSUP);
  972. GOTO ENDEXIT;
  973. END
  974.  
  975. #
  976.   * NPU IS NOT UNSUPERVISED BUT MAY BE MISMATCHED. IF MISMATCHED,
  977.   * THEN ONLY A LOAD COMMAND IS ALLOWED FROM THE HOP.
  978.   #
  979.  
  980. IF (NPU$STAT[NP$ORD[0]] EQ SUPSTAT"NCFMIS" OR
  981. NPU$STAT[NP$ORD[0]] EQ SUPSTAT"LEVMIS")
  982. THEN
  983. BEGIN
  984.  
  985. IF (HDR$VERB[0] EQ "LO0" AND OC$TYPE[OCBORD] EQ OPTYP"HOP")
  986. THEN
  987. BEGIN
  988.  
  989. #
  990.   * LOAD COMMAND FROM HOP. ADD THE NPUCB ORDINAL TO THE
  991.   * VALID COMMAND AS A ADDRESS PARAMETER WORD AND INCREMENT
  992.   * THE ADDRESS PARAMETER LIST COUNT OF THE COMMAND HEADER
  993.   * WORD.
  994.   #
  995.  
  996. PAR$PCODE[BEGAP] = "NOR";
  997. PAR$ORD[BEGAP] = NP$ORD[0];
  998. HDR$APCNT[0] = HDR$APCNT[0] + 1 ;
  999. END
  1000.  
  1001. ELSE
  1002. BEGIN
  1003.  
  1004. #
  1005.   * INVALID COMMAND FROM AN OPERATOR FOR THIS NPU. SEND A
  1006.   * TERMINAL TEXT MESSAGE TO INFORM OF NPU UNSUPERVISED.
  1007.   #
  1008.  
  1009. NOS$TXT1[0] = CMD$ELTYPE[0]; # SET MSG ELEMENT TYPE #
  1010. NOS$NAME[0] = PAR$ELNAME[ELINDX];
  1011. SSTAQE(P<CNQ>,WCBUF[1],ABH[1],NOSUP);
  1012. GOTO ENDEXIT;
  1013. END
  1014.  
  1015. END
  1016.  
  1017. ELSE # NPU IS SUPERVISED NORMALLY #
  1018. BEGIN
  1019.  
  1020. #
  1021.   * THE NPU IS SUPERVISED. THE COMMAND MAY REQUIRE THAT
  1022.   * THE OPERATOR HAVE CONTROL. DETERMINE WHETHER CONTROL IS NEEDED.
  1023.   #
  1024.  
  1025. OKFLAG = FALSE; # SET FLAG TO INVALID COMMAND #
  1026.  
  1027. IF CMD$NOP[0]
  1028. THEN # IF THIS IS STRICTLY A NOP COMMAND #
  1029. BEGIN
  1030.  
  1031. IF OCBORD EQ HOPORD$
  1032. THEN
  1033. BEGIN
  1034. OKFLAG = TRUE;
  1035. END
  1036.  
  1037. ELSE IF NPU$CNOP[NP$ORD[0]] EQ OCBORD
  1038. THEN # IF OPERATOR IS THE CONTROLLING NOP #
  1039. BEGIN
  1040. OKFLAG = TRUE; # SET VALID COMMAND FLAG #
  1041. END
  1042.  
  1043. ELSE # OPERATOR IS NOT A CONTROLLING NOP #
  1044. BEGIN
  1045.  
  1046. IF HDR$VERB[0] EQ "SE0" AND
  1047. CMD$ELMID[0] EQ ELMLST"TERM"
  1048. THEN # IF THIS CMD IS A SEND TO A TERM #
  1049. BEGIN
  1050.  
  1051. FOR I=MINACN$ STEP 1 UNTIL MAXACN$
  1052. DO # SEARCH THE OCB-S FOR THE TERM NAME #
  1053. BEGIN
  1054.  
  1055. IF (OC$TNAM[I] EQ PAR$ELNAME[INDX]
  1056. OR (PAR$SVCFLG[INDX]
  1057. AND OC$SVCNAM[I] EQ PAR$SVCNAM[INDX]))
  1058. AND OC$STATE[I]
  1059. THEN # IF FOUND AND OCB IS ACTIVE #
  1060. BEGIN
  1061. OKFLAG = TRUE;
  1062. END
  1063. END
  1064. END
  1065. ELSE IF HDR$VERB[0] EQ "CO0" AND
  1066. OC$TYPE[OCBORD] NQ OPTYP"DOP"
  1067. THEN
  1068. BEGIN
  1069. OKFLAG = TRUE;
  1070. END
  1071. END
  1072. END
  1073.  
  1074. ELSE # THIS IS NOT A NOP COMMAND #
  1075. BEGIN
  1076. OKFLAG = TRUE;
  1077. END
  1078.  
  1079.  
  1080. #
  1081.   * IF EVERYTHING OK, ADD ADDRESS PARAMETERS TO VALID COMMAND
  1082.   * AND SEND ROUTED COMMAND TO COMMAND DISPATCHER VIA THE ROUTED
  1083.   * COMMAND QUEUE.
  1084.   #
  1085.  
  1086. IF OKFLAG
  1087. THEN
  1088. BEGIN
  1089.  
  1090. PAR$PCODE[BEGAP] = "NOR"; # ADD NPU ORDINAL #
  1091. PAR$ORD[BEGAP] = NP$ORD[0];
  1092. BEGAP = BEGAP + 1 ; # TO NEXT ADDR PARM WORD #
  1093. HDR$APCNT[0] = HDR$APCNT[0] + 1; # UP NUM ADDR PARMS #
  1094.  
  1095. #
  1096.   * CHECK IF LINE, CIRCUIT OR TERMINAL KEYWORD WAS PRESENT.
  1097.   * IF SO, ADD THE TRUNK/LINE ADDRESS PARAMETER WORD.
  1098.   #
  1099.  
  1100. IF CMD$ELMID EQ ELMLST"LINE"
  1101. OR CMD$ELMID EQ ELMLST"VCIR"
  1102. OR CMD$ELMID EQ ELMLST"TERM"
  1103. THEN
  1104. BEGIN
  1105.  
  1106. PAR$PCODE[BEGAP] = "TLA";
  1107. PAR$ELADDR[BEGAP] = NP$PORT[0];
  1108. HDR$APCNT[0] = HDR$APCNT[0] + 1; # UP NUM ADDR PARMS #
  1109.  
  1110. END
  1111.  
  1112. #
  1113.   * CHECK IF COUPLER KEYWORD WAS PRESENT. IF SO, ADD THE COUPLER
  1114.   * ADDRESS KEYWORD TO THE ADDRESS PARAMETER LIST.
  1115.   #
  1116.  
  1117. IF CMD$ELMID[0] EQ ELMLST"CPLR"
  1118. THEN
  1119. BEGIN
  1120. PAR$PCODE[BEGAP] = "CPA";
  1121. PAR$ELADDR[BEGAP] = NP$NODE[1];
  1122. HDR$APCNT[0] = HDR$APCNT[0] + 1;
  1123. END
  1124. END
  1125. #
  1126.   * ELEMENT IS NOT UNDER THE OPERATOR-S CONTROL, SEND A MSG
  1127.   * INDICATING SO.
  1128. #
  1129. ELSE
  1130. BEGIN
  1131.  
  1132. NOC$TXT1[0] = CMD$ELTYPE[0]; #SET ELEMENT TYPE TEXT #
  1133. NOC$NAME[0] = PAR$ELNAME[INDX];
  1134. WCB$WC[1] = 6;
  1135. ABHTLC[1] = 40;
  1136. SSTAQE(P<CNQ>,WCBUF[1],ABH[1],NOCTRL);
  1137. GOTO ENDEXIT;
  1138.  
  1139. END
  1140.  
  1141. #
  1142.   * INCREMENT THE COMMAND HEADER WORD ADDRESS PARAMETER COUNT.
  1143.   #
  1144.  
  1145. GOTO ROUTEOK;
  1146.  
  1147. END # IF NCFMIS #
  1148.  
  1149.  
  1150.  
  1151.  
  1152.  
  1153.  
  1154. ROUTEOK:
  1155.  
  1156. #
  1157.   * SEND THE ROUTED COMMAND TO THE COMMAND DISPATCHER.
  1158.   #
  1159.  
  1160. WCB$WC[1] = WCB$WC[0] + HDR$APCNT[0]; # ADJUST ENTRY SIZE #
  1161. IF PAR$SVCFLG[INDX]
  1162. THEN
  1163. BEGIN # IF SVCNAME, RESTORE PARM TO ORIGINAL STATE #
  1164. PAR$SVCFLG[INDX] = FALSE;
  1165. END
  1166. SSTAQE(P<RCQ>,WCBUF[1],HDRCMD[0],PARMS[0]);
  1167.  
  1168.  
  1169.  
  1170.  
  1171.  
  1172.  
  1173. ENDEXIT:
  1174.  
  1175. END #CSSRCA#
  1176.  
  1177. TERM
cdc/nos2.source/nam5871/cssrca.txt ยท Last modified: 2023/08/05 17:22 by Site Administrator