User Tools

Site Tools


cdc:nos2.source:nam5871:nvfcuhs

NVFCUHS

Table Of Contents

  • [00007] PROC NVFCUHS
  • [00008] NVFCUHS - UPDATE HOP STATUS.
  • [00012] UPDATE HOP STATUS.
  • [00054] PROC MOVE
  • [00055] PROC SSSAWR
  • [00056] PROC SSTAQE
  • [00057] PROC SSTATS
  • [00058] PROC SSTRTS
  • [00118] PROC XMITHQ
  • [00208] PROC PURGEHQ

Source Code

NVFCUHS.txt
  1. *DECK NVFCUHS
  2. USETEXT TEXTNVF
  3. USETEXT TEXTSS
  4. USETEXT TXTAPSS
  5. USETEXT TXTANVF
  6. USETEXT TXINNVF
  7. PROC NVFCUHS;
  8. # TITLE NVFCUHS - UPDATE HOP STATUS. #
  9.  
  10. BEGIN # NVFCUHS #
  11. #
  12. ** NVFCUHS - UPDATE HOP STATUS.
  13. *
  14. * D. G. DEPEW. 82/03/04.
  15. *
  16. * THIS PROCEDURE PERFORMS ALL THE CONNECTION(C) LAYER PROCESSING
  17. * REQUIRED FOR THE INBOUND, SPECIAL HOP SUPERVISORY MESSAGES.
  18. *
  19. * PROC NVFCUHS
  20. *
  21. * ENTRY WCBUF[0] = WORD COUNT WORD FROM ORIGINAL CONNECTION
  22. * TRAFFIC QUEUE (*CTQ*) ENTRY.
  23. * ABHBUF[0] = APPLICATION BLOCK HEADER FOR THE SM (BASED
  24. * ARRAY *ABH* IN *TXTAPSS* POINTS HERE).
  25. * MSGBUF[0] = BODY OF THE SM (BASED ARRAY *APSM* IN
  26. * *TXTAPSS* POINTS HERE). THE POSSIBLE PFC/SFC
  27. * VALUES ARE: HOP/START, HOP/CMD, HOP/BRK,
  28. * HOP/PAGE, HOP/END, HOP/IG.
  29. *
  30. * EXIT ANY OF THE FOLLOWING IN VARIOUS COMBINATIONS ACCORDING TO
  31. * THE SM RECEIVED AND THE STATE OF THE HOP PSEUDO ACN:
  32. * - THE HOP PSEUDO ACN STATE HAS BEEN UPDATED.
  33. * - AN ENTRY HAS BEEN PLACED IN THE PROTOCOL EVENT QUEUE
  34. * (*PEQ*).
  35. * - ONE OR MORE HOP ENTRIES IN THE WAITING BLOCK QUEUE
  36. * (*WBQ*) HAVE BEEN TRANSFERRED TO THE OUTGOING TRAFFIC
  37. * QUEUE (*OTQ*).
  38. * - ALL OUTPUT ENQUEUED FOR THE HOP (IN THE *WBQ*) HAS BEEN
  39. * DISCARDED.
  40. * - AN ENTRY HAS BEEN PLACED IN THE OPERATOR TYPEIN QUEUE
  41. * (*OPTQ*).
  42. * - HOP PAGING STATUS HAS BEEN UPDATED.
  43. * - HOP IGNORE STATUS HAS BEEN UPDATED.
  44. *
  45. * NOTE THE PROCESSING IS DEFINED BY THE NVF/HOP C-LAYER STATE
  46. * DIAGRAM.
  47. #
  48.  
  49. #
  50. **** PROC NVFCUHS - XREF LIST.
  51. #
  52. XREF
  53. BEGIN
  54. PROC MOVE; # MOVE STORAGE DIRECT ADDRESSING (MACREL) #
  55. PROC SSSAWR; # ACCEPT WORKLIST REQUEST #
  56. PROC SSTAQE; # ACCEPT QUEUE ENTRY #
  57. PROC SSTATS; # ALLOCATE TABLE SPACE AT END OF TABLE #
  58. PROC SSTRTS; # REMOVE TABLE SPACE ANYWHERE IN TABLE #
  59. END
  60.  
  61. *CALL HMSGNVF
  62.  
  63. #
  64. ****
  65. #
  66.  
  67.  
  68. ITEM STATE S:HCNST; # TEMP CELL FOR STATE OF HOP PSEUDO ACN #
  69.  
  70. #
  71. * FOLLOWING ITEMS ARE USED ONLY BY EMBEDDED PROCS (SOME ARE
  72. * SHARED).
  73. #
  74.  
  75. ITEM I; # LOOP INDUCTION VARIABLE #
  76. ITEM COUNT; # NUMBER OF HOP *WBQ* ENTRIES TO BE MOVED #
  77. ITEM LICNT; # COUNT OF DISPLAY LINES IN *WBQ* ENTRY #
  78. ITEM OORD; # OUTGOING TRAFFIC QUEUE ORDINAL #
  79. ITEM SIZ; # *OTQ* ENTRY SIZE #
  80. ITEM WBC; # *WBQ* ENTRY COUNT OR ENTRY SIZE #
  81. ITEM WORD; # WAITING BLOCK QUEUE ORDINAL #
  82.  
  83.  
  84. BASED ARRAY TEXTLOC [00:00] S(1); ;
  85.  
  86.  
  87. ARRAY OUTDISC [00:00] S(5);
  88. BEGIN
  89. ITEM OD$PSFC U(00,00,16) = [HOPDIS];
  90. ITEM OD$ZERO1 U(00,16,43) = [0];
  91. ITEM OD$IAF B(00,59,01) = [TRUE]; # INPUT OK #
  92. ITEM OD$TEXT1 C(01,00,16) = ["OUTPUT DISCARDED"];
  93. ITEM OD$ZERO2 U(02,36,24) = [0];
  94. ITEM OD$TEXT2 C(03,00,07) = ["READY.."];
  95. ITEM OD$ZERO3 U(03,42,18) = [0];
  96. ITEM OD$ZERO4 U(04,00,60) = [0];
  97. END
  98.  
  99. ARRAY PAGEMSG [00:00] S(4);
  100. BEGIN
  101. ITEM PG$PSFC U(00,00,16) = [HOPDIS];
  102. ITEM PG$ZERO1 U(00,16,44) = [0]; # NO INPUT #
  103. ITEM PG$TEXT C(01,00,15) = ["PAGE ACCEPTED.."];
  104. ITEM PG$ZERO2 U(02,30,30) = [0];
  105. ITEM PG$ZERO3 U(03,00,60) = [0];
  106. END
  107.  
  108. DEF ODTLW$ #5#; # *OUTPUT DISCARDED* TEXT LENGTH IN WORDS #
  109. DEF ODQES$ #7#; # *OUTPUT DISCARDED* QUEUE ENTRY SIZE #
  110. DEF PGTLW$ #4#; # *PAGE ACCEPTED..* TEXT LENGTH IN WORDS #
  111. DEF PGQES$ #6#; # *PAGE ACCEPTED..* QUEUE ENTRY SIZE #
  112.  
  113.  
  114.  
  115.  
  116. CONTROL EJECT;
  117.  
  118. PROC XMITHQ;
  119.  
  120. BEGIN # XMITHQ #
  121. #
  122. * XMITHQ - TRANSMIT HOP QUEUE.
  123. *
  124. * THIS EMBEDDED PROC MOVES HOP ENTRIES IN THE WAITING BLOCK QUEUE
  125. * (*WBQ*) TO THE OUTGOING TRAFFIC QUEUE (*OTQ*). THE NUMBER OF
  126. * ENTRIES MOVED DEPENDS UPON PAGING STATUS AND WHETHER THERE
  127. * ACTUALLY IS DATA QUEUED (IN THE *WBQ*) FOR THE HOP.
  128. *
  129. * PROC XMITHQ
  130. *
  131. * ENTRY 1. THE *WBQ* CONTAINS ZERO OR MORE HOP ENTRIES.
  132. * 2. THE ACN LIST ENTRY FOR THE HOP CONTAINS ALL REQUIRED
  133. * INFORMATION - NAMELY, THE COUNT OF HOP ENTRIES IN THE
  134. * *WBQ* AND THE PAGING STATUS FLAG.
  135. *
  136. * EXIT 1. ZERO OR MORE HOP ENTRIES HAVE BEEN REMOVED FROM THE
  137. * *WBQ* AND PLACED IN THE *OTQ*.
  138. * 2. THE COUNT OF LINES CURRENTLY BEING DISPLAYED HAS BEEN
  139. * SET TO THE LINE COUNT OF THE LAST *WBQ* ENTRY MOVED
  140. * (ZERO IF NO ENTRIES MOVED).
  141. * 3. THE HOP WAITING BLOCK COUNT HAS BEEN UPDATED
  142. * APPROPRIATELY.
  143. *
  144. * NOTE HOP ENTRIES IN THE *WBQ* ARE ALREADY IN CORRECT HOP/DIS
  145. * FORMAT EXCEPT FOR THE EXTRA WORD AT THE END, WHICH IS
  146. * REQUIRED BY NIP AND MUST BE ADDED.
  147. #
  148.  
  149.  
  150.  
  151. #
  152. * THE FIRST TASK IS TO DETERMINE HOW MANY BLOCKS (HOP *WBQ* ENTRIES)
  153. * TO MOVE. IF PAGING IS ON, MOVE ONE BLOCK (AT MOST A SCREENFULL).
  154. * IF PAGING IS OFF, MOVE ALL ENQUEUED BLOCKS. OF COURSE, IF THERE
  155. * ARE CURRENTLY NO HOP ENTRIES IN THE *WBQ*, NOTHING HAPPENS.
  156. #
  157. WBC = ACN$WBCNT[HOPORD$];
  158. IF ACN$PWAIT[HOPORD$]
  159. AND WBC NQ 0
  160. THEN
  161. COUNT = 1;
  162. ELSE
  163. COUNT = WBC; # CAN BE ZERO #
  164. ACN$WBCNT[HOPORD$] = WBC - COUNT; # UPDATED #
  165.  
  166.  
  167. #
  168. * NOW MOVE THE BLOCKS. SET THE COUNT OF TEXT LINES CURRENTLY BEING
  169. * DISPLAYED TO THE LINE COUNT OF THE LAST BLOCK MOVED (IF ONE).
  170. * PROVIDE FOR THE EXTRA WORD REQUIRED IN THE HOP/DIS SM. IN ORDER
  171. * TO MOVE A BLOCK, WE MUST FIRST FIND IT.
  172. #
  173. LICNT = 0; # INITIALIZE #
  174. WORD = 0;
  175.  
  176. FOR I=1 STEP 1 UNTIL COUNT
  177. DO # MOVE *COUNT* BLOCKS, ZERO OK #
  178. BEGIN
  179. FOR WORD = WORD STEP WBQ$ESIZE[WORD]
  180. WHILE WBQ$ABHACN[WORD] NQ 0
  181. OR WBQ$CRSACN[WORD] NQ 0
  182. DO # FIND HOP ENTRY (HOP/DIS SM) #
  183. BEGIN END
  184.  
  185. OORD = OTQLNGTH; # WHERE *OTQ* ENTRY WILL BE #
  186. WBC = WBQ$ESIZE[WORD]; # SIZE OF ENTRY TO BE MOVED #
  187. SIZ = WBC + 1; # SIZE OF HOP/DIS NTRY IN *OTQ* #
  188. LICNT = WBQ$LICNT[WORD]; # TEXT LINES IN *WBQ* ENTRY #
  189. WBQ$ESIZE[WORD] = SIZ; # UPDATE PRIOR TO MOVE #
  190. WBQ$TLC[WORD] = WBQ$TLC[WORD] + 1;
  191. SSTATS (P<OTQ>, SIZ); # MAKE ROOM #
  192. MOVE (WBC, WBQ[WORD], OTQ[OORD]);
  193. SSTRTS (P<WBQ>, WORD, WBC); # DELETE WAITING BLOCK #
  194. OTQ$WORD[OTQLNGTH-1] = 0; # EXTRA WORD #
  195.  
  196. IF OORD EQ 0
  197. THEN # FIRST ENTRY IN *OTQ* #
  198. SSSAWR (WWDF"SACNI");
  199. END
  200.  
  201. ACN$BLCNT[HOPORD$] = LICNT; # NUMBER LINES ON SCREEN #
  202.  
  203. END # XMITHQ #
  204.  
  205.  
  206.  
  207.  
  208. PROC PURGEHQ;
  209.  
  210. BEGIN # PURGEHQ #
  211. #
  212. * PURGEHQ - PURGE HOP QUEUE.
  213. *
  214. * THIS EMBEDDED PROC REMOVES ALL HOP ENTRIES FROM THE WAITING BLOCK
  215. * QUEUE (*WBQ*).
  216. *
  217. * PROC PURGEHQ
  218. *
  219. * ENTRY 1. THE *WBQ* CONTAINS ZERO OR MORE HOP ENTRIES.
  220. * 2. THE ACN LIST ENTRY FOR THE HOP CONTAINS ALL REQUIRED
  221. * INFORMATION - NAMELY, THE COUNT OF HOP *WBQ* ENTRIES.
  222. *
  223. * EXIT 1. ALL HOP ENTRIES IN THE *WBQ* HAVE BEEN DELETED.
  224. * 2. THE COUNTS OF *WBQ* ENTRIES AND LINES CURRENTLY BEING
  225. * DISPLAYED (BOTH IN THE ACN LIST ENTRY FOR THE HOP)
  226. * HAVE BEEN CLEARED.
  227. #
  228.  
  229.  
  230.  
  231. #
  232. * INITIALIZE AND UPDATE THE ACN LIST ENTRY FOR THE HOP.
  233. #
  234. COUNT = ACN$WBCNT[HOPORD$]; # NUMBER OF BLOCKS TO DELETE #
  235. ACN$WBCNT[HOPORD$] = 0;
  236. ACN$BLCNT[HOPORD$] = 0; # START NEW PAGE #
  237.  
  238.  
  239. #
  240. * NOW DELETE THE ENTRIES. IN ORDER TO DELETE AN ENTRY, WE MUST
  241. * FIRST FIND IT.
  242. #
  243. WORD = 0;
  244. FOR I=1 STEP 1 UNTIL COUNT
  245. DO # DEL *COUNT* ENTRIES, ZERO OK #
  246. BEGIN
  247. FOR WORD = WORD STEP WBQ$ESIZE[WORD]
  248. WHILE WBQ$ABHACN[WORD] NQ 0
  249. OR WBQ$CRSACN[WORD] NQ 0
  250. DO # FIND HOP ENTRY (HOP/DIS SM) #
  251. BEGIN END
  252.  
  253. WBC = WBQ$ESIZE[WORD]; # SIZE OF ENTRY TO BE DELETED #
  254. SSTRTS (P<WBQ>, WORD, WBC); # DELETE WAITING BLOCK #
  255. END
  256.  
  257. END # PURGEHQ #
  258.  
  259.  
  260.  
  261.  
  262.  
  263. CONTROL EJECT;
  264. #
  265. * MAIN ROUTINE BEGINS HERE.
  266. *
  267. * WE EXECUTE WHAT AMOUNTS TO A CASE CONSTRUCT TO PROCESS THE SIX
  268. * TYPES OF INCOMING HOP SM-S.
  269. #
  270.  
  271.  
  272.  
  273. IF WCB$SMID[0] EQ CTQSTAT"SHSTART"
  274. THEN # K-DISPLAY ASSIGNED TO NVF #
  275. BEGIN
  276.  
  277.  
  278. #
  279. * INITIALIZE THE HOP ACN LIST ENTRY. SEND THE HOP/START TO THE
  280. * I-LAYER (AS PROTOCOL EVENT), IF APPROPRIATE. UPDATE THE STATE.
  281. #
  282. STATE = ACN$HOPST[HOPORD$];
  283. ACN$WORD0[HOPORD$] = 0;
  284. ACN$WORD1[HOPORD$] = 0;
  285. ACN$ACN[HOPORD$] = 1; # INSURE NON-MATCH W/REAL ACN'S #
  286. IF STATE EQ S"INACT"
  287. THEN # SEND HOP/START TO I-LAYER #
  288. BEGIN
  289. WCB$SMID[0] = HPESTAT"HOPSRT"; # HOP/START ID FOR I-LAYER #
  290. SSTAQE (P<PEQ>, WCBUF[0], ABH[0], APSM[0]); # TO I-LAYER #
  291. END
  292.  
  293. IF STATE EQ S"ENDED"
  294. THEN
  295. ACN$HOPST[HOPORD$] = S"RESTART";
  296. ELSE
  297. BEGIN
  298. ACN$HOPST[HOPORD$] = S"CREATE";
  299. ACN$PL[HOPORD$] = HOPLPL[0] - 1;
  300. END
  301. END
  302.  
  303.  
  304.  
  305. ELSE IF WCB$SMID[0] EQ CTQSTAT"SHCMD"
  306. THEN # HOP ENTERED A COMMAND #
  307. BEGIN
  308.  
  309.  
  310. #
  311. * FORWARD THE COMMAND TO THE I-LAYER (AS OPERATOR TYPEIN) FOR
  312. * SYNTAX CRACKING AND COMMAND PROCESSING. ECHO THE COMMAND BACK
  313. * TO THE K-DISPLAY VIA HOP/DIS SM. UPDATE THE STATE AND SEND HIM
  314. * THE NEXT PAGE OF QUEUED OUTPUT (IF ANY). NOTE THAT *OPTQ*
  315. * ENTRIES DO NOT CONTAIN A PFC/SFC WORD.
  316. #
  317. WCB$WORD[1] = WCB$WC[0] - 1; # DEDUCT FOR PFC/SFC WORD #
  318. ABHWORD[1] = 0;
  319. ABHTLC[1] = HOPDTL[0]; # ACTUAL CHAR COUNT #
  320. P<TEXTLOC> = LOC(SPMSG1[0]); # LOCATION OF COMMAND TEXT #
  321. SSTAQE (P<OPTQ>, WCBUF[1], ABH[1], TEXTLOC[0]); # TO I-LAYER #
  322.  
  323. WCB$WORD[0] = WCB$WC[0] + 1; # EXTRA WORD FOR HOP/DIS SM #
  324. ABHTLC[0] = ABHTLC[0] + 1;
  325. SPMSG0[0] = 0; # NO INPUT ALLOWED #
  326. PFCSFC[0] = HOPDIS;
  327. SSTAQE (P<OTQ>, WCBUF[0], ABH[0], APSM[0]); # ECHO COMMAND #
  328. OTQ$WORD[OTQLNGTH-1] = 0; # EXTRA WORD #
  329.  
  330. ACN$HOPST[HOPORD$] = S"COMMAND";
  331. XMITHQ; # XMIT QUEUED HOP DATA (IF ANY) #
  332.  
  333. END
  334.  
  335.  
  336.  
  337. ELSE IF WCB$SMID[0] EQ CTQSTAT"SHBRK"
  338. THEN # HOP ENTERED A BREAK #
  339. BEGIN
  340.  
  341.  
  342. #
  343. * RELEASE ALL QUEUED (IN THE *WBQ*) OUTPUT. IF THE HOP PSEUDO
  344. * ACN IS IN THE *ACTIVE* STATE, SEND THE *OUTPUT DISCARDED*
  345. * MESSAGE FOLLOWED BY *READY..*. IF A COMMAND IS IN PROGRESS,
  346. * FORWARD THE BREAK TO THE I-LAYER AS AN OPERATOR TYPEIN (*OPTQ*).
  347. * UPDATE THE STATE.
  348. #
  349. PURGEHQ; # PURGE QUEUED HOP DATA(IF ANY) #
  350.  
  351. IF ACN$HOPST[HOPORD$] EQ S"CREATE"
  352. THEN # BREAK HISTORY BUFFER OUTPUT #
  353. ACN$HOPST[HOPORD$] = S"STARTBRK";
  354.  
  355. ELSE IF ACN$HOPST[HOPORD$] EQ S"ACTIVE"
  356. THEN # BREAK UNSOLICITED STATUS RPTS #
  357. BEGIN
  358. WCB$WORD[0] = ODQES$;
  359. ABHTLC[0] = ODTLW$;
  360. SSTAQE (P<OTQ>, WCBUF[0], ABH[0], OUTDISC);
  361. ACN$BLCNT[HOPORD$] = 2; # START NEW PAGE W/ 2 LINES #
  362. END
  363.  
  364. ELSE IF ACN$HOPST[HOPORD$] EQ S"COMMAND"
  365. THEN # BREAK COMMAND IN PROGRESS #
  366. BEGIN
  367. WCB$WORD[1] = 2; # MIN QUEUE ENTRY LENGTH #
  368. ABHWORD[1] = 0; # TLC = 0 #
  369. ABHBRK[1] = 1;
  370. SSTAQE (P<OPTQ>, WCBUF[1], ABH[1], TEXTLOC[0]); #TO I-LAYER #
  371. ACN$HOPST[HOPORD$] = S"BREAK";
  372. END
  373.  
  374. ELSE # MUST BE BRK HIST AFT RESTART #
  375. ACN$HOPST[HOPORD$] = S"RESBREAK";
  376.  
  377. END
  378.  
  379.  
  380.  
  381. ELSE IF WCB$SMID[0] EQ CTQSTAT"SHIG"
  382. THEN # HOP WANTS TO IGNORE NVF REPTS #
  383.  
  384.  
  385. #
  386. * ALL THAT IS REQUIRED IS TO SET THE APPROPRIATE FLAG IN THE HOP
  387. * ENTRY OF THE ACN LIST.
  388. #
  389. ACN$IGNOR[HOPORD$] = TRUE;
  390.  
  391.  
  392.  
  393. ELSE IF WCB$SMID[0] EQ CTQSTAT"SHEND"
  394. THEN # K-DIS NO LONGER ASS'D TO NVF #
  395. BEGIN
  396.  
  397.  
  398. #
  399. * RELEASE ALL QUEUED (IN THE *WBQ*) OUTPUT. IF THE HOP PSEUDO
  400. * ACN IS IN THE *ACTIVE* STATE, SEND A HOP/END PROTOCOL EVENT TO
  401. * THE I-LAYER. IF A COMMAND IS IN PROGRESS, SEND A HOP/END-
  402. * WARNING PROTOCOL EVENT TO THE I-LAYER (HOP/END WILL BE SENT
  403. * WHEN COMMAND IS CLEANED UP). UPDATE THE HOP PSEUDO ACN STATE.
  404. #
  405. PURGEHQ; # PURGE QUEUED HOP DATA(IF ANY) #
  406.  
  407. IF ACN$HOPST[HOPORD$] EQ S"ACTIVE"
  408. OR ACN$HOPST[HOPORD$] EQ S"COMMAND"
  409. THEN # MUST SEND P.E. TO I-LAYER #
  410. BEGIN
  411. WCB$WORD[0] = 2; # MIN QUEUE ENTRY SIZE #
  412. ABHTLC[0] = 0;
  413. IF ACN$HOPST[HOPORD$] EQ S"ACTIVE"
  414. THEN
  415. WCB$SMID[0] = HPESTAT"HOPEND";
  416. ELSE
  417. WCB$SMID[0] = HPESTAT"HOPENDW";
  418. SSTAQE(P<PEQ>, WCBUF[0], ABH[0], APSM[0]); # TO I-LAYER #
  419. END
  420.  
  421. IF ACN$HOPST[HOPORD$] EQ S"CREATE"
  422. OR ACN$HOPST[HOPORD$] EQ S"STARTBRK"
  423. THEN
  424. ACN$HOPST[HOPORD$] = S"STARTEND";
  425. ELSE
  426. ACN$HOPST[HOPORD$] = S"ENDED";
  427.  
  428. END
  429.  
  430.  
  431.  
  432. ELSE # MUST BE A PAGING COMMAND SM #
  433. BEGIN
  434. #
  435. * IF THE COMMAND IS A PAGING COMMAND FOR THE RIGHT K-DISPLAY, SEND
  436. * A NEW PAGE OF HELP TEXT TO THE RIGHT K-DISPLAY.
  437. #
  438. IF (HOPPC[0] EQ "(" ) OR
  439. (HOPPC[0] EQ ")" )
  440. THEN
  441. BEGIN
  442. WCB$SMID[1] = HOPDIS;
  443. WCB$WC[1] = RKPAGESZ$ + 1;
  444. ABHWORD[1] = 0;
  445. ABHABT[1] = APPCMD;
  446. ABHACT[1] = CT60TRANS;
  447. ABHTLC[1] = RKPAGESZ$;
  448. #
  449. * IF THE COMMAND IS A PAGE FORWARD COMMAND, SEND THE NEXT PAGE
  450. * OF HELP TEXT.
  451. #
  452. IF HOPPC[0] EQ "("
  453. THEN
  454. BEGIN
  455. IF CURPAGE EQ LASTPAGE$
  456. THEN
  457. BEGIN
  458. CURPAGE = PAGE1$;
  459. END
  460. ELSE
  461. BEGIN
  462. CURPAGE = CURPAGE + 1;
  463. END
  464. END
  465. #
  466. * IF THE COMMAND IS A PAGE BACKWARD COMMAND, SEND THE PREVIOUS
  467. * PAGE OF HELP TEXT.
  468. #
  469. ELSE # HOPPC = ")" #
  470. BEGIN
  471. IF CURPAGE EQ PAGE1$
  472. THEN
  473. BEGIN
  474. CURPAGE = LASTPAGE$;
  475. END
  476. ELSE
  477. BEGIN
  478. CURPAGE = CURPAGE - 1;
  479. END
  480. END
  481.  
  482. SSTAQE(P<OTQ>,WCBUF[1],ABH[1],RKPAGE[CURPAGE]);
  483. END
  484. #
  485. * IF THE COMMAND INDICATES A CHANGE IN PAGING STATUS IS DESIRED,
  486. * SEND THE *PAGE ACCEPTED..* MESSAGE AND REMEMBER THE NEW PAGING
  487. * STATUS. THEN SEND THE HOP AS MUCH QUEUED (IN THE *WBQ*) DATA
  488. * (IF ANY) AS IS CONSISTENT WITH THE UPDATED PAGING STATUS.
  489. #
  490. ELSE
  491. BEGIN
  492. IF HOPPC[0] NQ ACN$PCHAR[HOPORD$]
  493. THEN # PAGING STATUS CHANGE #
  494. BEGIN
  495. WCB$WORD[0] = PGQES$;
  496. ABHTLC[0] = PGTLW$;
  497. SSTAQE (P<OTQ>, WCBUF[0], ABH[0], PAGEMSG);
  498. ACN$PCHAR[HOPORD$] = HOPPC[0];
  499. END
  500.  
  501. XMITHQ; # XMIT QUEUED HOP DATA (IF ANY) #
  502. END
  503. END
  504.  
  505.  
  506. END # NVFCUHS #
  507.  
  508. TERM
cdc/nos2.source/nam5871/nvfcuhs.txt ยท Last modified: 2023/08/05 17:22 by Site Administrator