User Tools

Site Tools


cdc:nos2.source:nam5871:hpput

Table of Contents

HPPUT

Table Of Contents

  • [00025] PROC HPPUT
  • [00111] PROC HBCHECK
  • [00112] PROC HBSTTP
  • [00113] PROC HCSTTP
  • [00114] PROC HRDPUT
  • [00115] PROC HRELPWL
  • [00116] PROC HUPDDAW
  • [00117] PROC LOCLLCB
  • [00118] PROC MGETS
  • [00119] PROC MRELS
  • [00120] PROC NFOB
  • [00121] PROC OVLCALL
  • [00122] PROC XDROP
  • [00123] PROC XCTLW
  • [00124] PROC XTRACE
  • [00125] PROC RDUMP

Source Code

HPPUT.txt
  1. *DECK HPPUT
  2. USETEXT NIPDEF
  3. USETEXT ACB
  4. USETEXT ACNB
  5. USETEXT ACNT
  6. USETEXT AHEADER
  7. USETEXT APPSTAT
  8. USETEXT AT
  9. USETEXT DBGBUF
  10. USETEXT DRHDR
  11. USETEXT DUMPFLG
  12. USETEXT KDIS
  13. USETEXT LLCB
  14. USETEXT NCNB
  15. USETEXT NBT
  16. USETEXT NHEADER
  17. USETEXT NWLHEAD
  18. USETEXT NWLNTRY
  19. USETEXT OVERLAY
  20. USETEXT PARAMP
  21. USETEXT PARAMS
  22. USETEXT PT
  23. USETEXT STATTAB
  24. USETEXT SUPMSG
  25. PROC HPPUT; # PROCESS A *NET PUT* WORK LIST ENTRY #
  26.  
  27. STARTIMS;
  28. #
  29. *1DC HPPUT
  30. *
  31. * 1. PROC NAME AUTHOR DATE
  32. * HPPUT J. J. LYON 75/05/02
  33. * Y HSIEH 77/05/10
  34. * C. BITTNER 81/07/17
  35. *
  36. * 2. FUNCTIONAL DESCRIPTION.
  37. * THIS ROUTINE IS RESPONSIBLE FOR PROCESSING A *NET PUT* WORK
  38. * LIST ENTRY. THIS IS DONE VIA SEVERAL JUMP TABLES.
  39. *
  40. * 3. METHOD USED.
  41. * EDIT ENTRY
  42. * IF ABT = 1 OR 2
  43. * IF IN NORMAL CONDITION (ALL DATA ALLOWED) THEN CALL
  44. * NFOB TO QUEUE DATA TO THE PIP OUTBOUND CHAIN
  45. * (BYPASS THE STATE TABLES) ELSE
  46. * CALL HOST BLOCK PROTOCOL STATE TABLE PROCESSOR (HBSTTP)
  47. * TO PUT-DATA
  48. * IF ABT = 3 THEN USE APP JUMP TABLE
  49. * IF ABT = 4 AND MSG TO NIP
  50. * VALIDATE THAT MESSAGE IS FROM NS OR CS
  51. * LINK MESSAGE TO PIP OUTBOUND CHAIN BASED
  52. * ON SOURCE NODE (COUPLER NUMBER)
  53. *
  54. * 4. ENTRY PARAMETERS.
  55. * NWLABT APPLICATION BLOCK TYPE
  56. * NWLEABH APPLICATION BLOCK HEADER
  57. * NWLOP OPPUTF OR OPPUT
  58. * ACBADDR CURRENT APPLICATION"S ACB
  59. * WLADDR CURRENT WORKLIST ENTRY
  60. *
  61. * 5. EXIT PARAMETERS.
  62. * NWLADR PROCESS NUMBER OF APPLICATION
  63. * OVLNAME ROUTINE TO PROCESS NIP PFC/SFC MESSAGES
  64. * PARAMS1 REASON CODE FOR LGL/ERR,IF ONE OCCURS
  65. *
  66. * 6. COMDECKS CALLED AND SYMPL TEXTS USED.
  67. * ACB ACNB APPSTAT AT
  68. * DBGBUF DRHDR NIPDEF
  69. * NWLHEAD NWLNTRY OVERLAY PARAMS
  70. * PT STATTAB SUPMSG
  71. * ACNT AHEADER LLCB
  72. * NCNB PARAMP
  73. *
  74. * 7. ROUTINES AND OVERLAYS CALLED.
  75. * HLGLERR OVL ISSUE LGL/ERR SUP MSG
  76. * HPUTF OVL READ FRAGMENTED TEXT ARRAY INTO NIP FL
  77. * HRDPUT READ PUT THAT DIDN-T FIT IN W/L
  78. * HRELPWL RELEASE USED PORTION OF NWL
  79. * HUPDDAW UPDATE DATA AVAILABLE WORD
  80. * OVLCALL LOAD OVERLAY
  81. * XTRACE TRACES CALLS
  82. * XCTLW COMPUTE MSG LENGTH IN CM WORDS
  83. * HBCHECK VALIDATE CHARACTER TYPE
  84. * LOCLLCB LOCATE LLCB
  85. * NFOB LINK MESSAGE TO PIP OUTBOUND CHAIN
  86. * FROM APPLICATION JUMP TABLE
  87. * HBSTTP HOST BLOCK PROTOCOL STATE TABLE PROCESSOR
  88. * HCHGICT OVL CHANGE INPUT CHARACTER TYPE IN ACNB
  89. * HCSTTP HOST CONNECTION STATE TABLE PROCESSOR
  90. * HDCTRU OVL SET DATA TRUNCATION MODE IN ACNB OR ACB
  91. * HLONOFF OVL TURN ON/OFF ACN IN LIST X
  92. * HLSTDX OVL SET HALF/FULL DUPLEX
  93. * HPDBGST OVL PROCESS DBG/STOP
  94. * HPKDISP OVL PROCESS HOP COMMAND
  95. * HPNPDRL OVL PROCESS NPD/REL
  96. * HPSHISD OVL PROCESS SH/ISD (SHUTDOWN)
  97. * HPNOFFN OVL PROCESS NET/OFF/N AND FAIL/APPL/N
  98. * NGIGO OVL SEND GARBLED MESSAGE TO DAYFILE
  99. * NLOPIP OVL LINK MSG FROM NIP,NS,CS TO PIP OUTBOUND CHA
  100. * HPNONVF OVL PROCESS *NET ON* RESPONSE FROM NVF
  101. *
  102. * 8. DAYFILE MESSAGES. NONE
  103. * THIS PROCEDURE IS CALLED BY HWLP.
  104. *
  105.  #
  106. STOPIMS;
  107. #
  108.   EXTERNAL VARIABLES
  109. #
  110. XREF BEGIN
  111. PROC HBCHECK ;
  112. PROC HBSTTP; # HOST SIDE STATE TABLE PROCESSOR #
  113. PROC HCSTTP; # HOST CONNECTION STATE TABLE PROCESSOR #
  114. PROC HRDPUT; # READ *PUT* THAT DID NOT FIT IN W/L #
  115. PROC HRELPWL; # RELEASE USED PORTION OF THE NWL #
  116. PROC HUPDDAW; # UPDATE DATA AVAILABLE WORD #
  117. PROC LOCLLCB ;
  118. PROC MGETS ; # PROC TO GET BUFFER FOR FREE CHAIN #
  119. PROC MRELS; # RELEASE UNUSED BUFFER SPACE #
  120. PROC NFOB ;
  121. PROC OVLCALL; # LOAD OVERLAY #
  122. PROC XDROP; # DROP PIP (AND NIP) #
  123. PROC XCTLW;
  124. PROC XTRACE; # TRACE CALL #
  125. PROC RDUMP;
  126. END
  127. #
  128.   INTERNAL VARIABLES
  129. #
  130. ITEM RETURNF U ;
  131. #
  132.   TABLE OF UCP PFC/SFC CODES
  133. #
  134. 000900
  135. DEF ENDTAB1 #46#; # SIZE OF PFC/SFC PROCESSING TABLE #
  136. ARRAY UCPPFCSFCTAB [0:ENDTAB1]; 001200
  137. BEGIN 001300
  138. ITEM VACNFLAG B(00,00,01) =
  139. [TRUE,TRUE,TRUE,FALSE,FALSE,
  140. TRUE,FALSE,FALSE,
  141. FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,
  142. TRUE,TRUE,FALSE,TRUE,TRUE,
  143. TRUE,TRUE,
  144. TRUE,TRUE,FALSE,FALSE,FALSE,
  145. FALSE,FALSE,FALSE,FALSE,FALSE,
  146. FALSE,FALSE,FALSE,FALSE,FALSE,
  147. FALSE,
  148. FALSE,FALSE,
  149. FALSE,FALSE,FALSE,FALSE,FALSE,
  150. FALSE,FALSE,
  151. TRUE];
  152.  
  153. ITEM UCPPFCSFC U(00,42,18) =
  154. [LSTOFF,LSTON,LSTSWH,LSTFDX,LSTHDX,
  155. DCCICT,DBGSTOP,DCSTMR,
  156. DCTRU,PRUON,HOPDIS,HOPLG,HOPALT,HOPDAY,
  157. CONREQN,CONREQA,CONACR,CONEND,INTRRSP,
  158. INTRAPP,FCBRK,
  159. FCRST,FCINITN,NPDREL,NETONN,NETONA,
  160. SHISD,CRITEN,CRITEA,CRRAPN,CRRAPA,
  161. CRIAPN,CRIAPA,CRSWH,CRRCNN,CRTRM,
  162. CRRCNA,
  163. NETOFFN,FAIAPPN,
  164. FNTDMS,FNTDSM,FNTIFL,FNTIFR,FNTIAR,
  165. SACNCL,SAFSAR,
  166. 0];
  167. END 001700
  168. 001900
  169. #
  170.   JUMP TABLE FOR UCP-PFC/SFC PROCEDURES
  171. #
  172. 002400
  173. SWITCH UCPPFCSFCJT UCPL0,UCPL0,UCPL1,UCPL2,UCPL2,
  174. UCPL4,UCPL7,UCPL5,
  175. UCPL8,UCPL10,UCPL13,UCPL13,UCPL13,UCPL13,
  176. UCPL14A,UCPL14B,UCPL14C,UCPL14D,UCPL15A,
  177. UCPL15AA,UCPL15BB,
  178. UCPL15B,UCPL15C,UCPL16,UCPL17B,UCPL17A,
  179. UCPL18,UCPL19A,UCPL19B,UCPL19C,UCPL19D,
  180. UCPL19E,UCPL19F,UCPL19G,UCPL19H,UCPL19I,
  181. UCPL19J,
  182. UCPL20,UCPL21,
  183. UCPL22A,UCPL22A,UCPL22C,UCPL22D,UCPL22E,
  184. UCPL23,UCPL24,
  185. UCPL25;
  186. 002900
  187. #
  188.   JUMP TABLE FOR ABT CODES
  189. #
  190. SWITCH ABTJT ABT0,ABT1,ABT2,ABT3,ABT4,ABT0,ABT6,ABT7;
  191. ITEM COUNT ;
  192. ITEM DV; # DEVICE TYPE #
  193. ITEM FOUND B ;
  194. ITEM INDEX; # INDEX FOR SEARCHING THROUGH TABLES #
  195. ITEM TEMP ;
  196. ITEM SWTCH B;
  197. ITEM WLOPCODE; # WORKLIST OPCODE #
  198. ITEM WORDCOUNT; # SIZE OF MSG (IN WORDS) #
  199. ITEM ACNTINDX; # INDEX INTO ACNT #
  200. ITEM ABT; # APPLICATION BLOCK TYPE #
  201. ITEM ACN; # APPLICATION CONNECTION NUMBER #
  202. ITEM TRIG; # TRIGGER FOR STATE TABLE PROCESSOR #
  203.  
  204.  
  205. #**********************************************************************#
  206. BEGIN
  207. CONTROL IFEQ DEBUG,1 ;
  208. XTRACE("HPPUT") ;
  209. CONTROL FI;
  210.  
  211. P<NWLENTRY> = WLADDR; # ADDR OF NETPUT WORKLIST ENTRY #
  212. WLOPCODE = NWLOP[0]; # WORKLIST OPCODE #
  213. P<ACB> = ACBADDR;
  214. PARAMS7 = 0 ; # CLEAR ERROR PARAMS #
  215. #
  216.  STEP 1 EDIT FIELDS IN NWL ENTRY
  217. #
  218. TEMP = 0; #INITIALIZE TEMP #
  219. ABT = NWLABT[0]; # APPLICATION BLOCK TYPE #
  220. IF ABT LS APPBLK
  221. OR ABT GR APPQMSG
  222. THEN
  223. BEGIN
  224. TEMP = RLG"IAB"; # ILLEGAL ABT #
  225. GOTO PPUT75;
  226. END
  227. IF ( NWLACT[0] GQ ACTMAX
  228. OR NWLACT LQ 0 )
  229. THEN
  230. BEGIN
  231. TEMP = RLG"IA" ;
  232. GOTO PPUT75 ;
  233. END
  234.  
  235. XCTLW(NWLEABH[0],WORDCOUNT);
  236. IF ABT EQ APPCMD
  237. AND WORDCOUNT EQ 0
  238. THEN
  239. BEGIN
  240. TEMP = RLG"ISM"; # RC=7 ILLOGICAL SM #
  241. GOTO PPUT75;
  242. END
  243.  
  244. IF WORDCOUNT GR TLWMAX
  245. OR NWLTLC[0] GR TLCMAX
  246. OR (( WLOPCODE NQ WLOPPUTF)
  247. AND ( WORDCOUNT NQ NWLEBS - HDRSIZE)
  248. AND ( NWLTA EQ 0))
  249. OR (( WLOPCODE EQ WLOPPUTF)
  250. AND (NWLELTAA NQ NWLEBS - FLSIZE)
  251. AND ( NWLTA EQ 0))
  252. THEN
  253. BEGIN
  254. TEMP = RLG"IT" ;
  255. GOTO PPUT75 ;
  256. END
  257.  
  258. IF NWLTA NQ 0
  259. THEN
  260. BEGIN
  261. IF WLOPCODE EQ WLOPPUTF
  262. THEN
  263. COUNT = NWLELTAA ;
  264. ELSE
  265. COUNT = WORDCOUNT ;
  266.  
  267. HRDPUT(COUNT) ;
  268. IF NOT DONE
  269. THEN
  270. RETURN;
  271. END
  272. IF WLOPCODE EQ WLOPPUTF
  273. THEN
  274. BEGIN
  275. OVLNAME = HPUTFP; # NAME OF OVERLAY TO LOAD #
  276. OVLCALL; # LOAD AND EXECUTE OVERLAY #
  277. IF (PARAMP1 EQ 0) OR # BAD NETPUTF CALL #
  278. (NOT DONE) # TEXT DID NOT GET READ INTO NIP-S MEMORY #
  279. THEN # CANNOT CONTINUE PROCESSING NETPUTF REQ #
  280. BEGIN
  281. RETURN; # ***** EXIT FROM ROUTINE ***** #
  282. END
  283. END
  284.  
  285. P<NWLENTRY> = WLADDR; # RESET CURRENT WORKLIST ADDRESS #
  286. NWLIBU[0] = FALSE; # PRECAUTION TO CLEAR IBU BIT #
  287.  
  288. CONTROL IFEQ DEBUG,1;
  289. PNVALUE[0] = ACBAN[0]; # APPLICATION NUMBER #
  290. BPUTW[BPUTP] = PNWORD[0]; # STORE AN IN DEBUG BUFFER #
  291. BPUTP = BPUTP + 1; # INCREMENT BUFFER OFFSET PTR #
  292. IF BPUTP GR 999
  293. THEN # END OF BUFFER HAS BEEN REACHED #
  294. BPUTP = 0; # INITIALIZE OFFSET PTR TO BEG OF BUFFER #
  295.  
  296. # COPY DATA BLOCK TO DEBUG BUFFER #
  297. P<DRHDRWD> = WLADDR;
  298. P<TRAP> = WLADDR; # NETWORK WORKLIST ENTRY ADDRESS #
  299. FOR TRAPINDEX = 0 STEP 1 UNTIL DRBS[0] - 1 DO
  300. BEGIN
  301. BPUTW[BPUTP] = WORD[TRAPINDEX];
  302. BPUTP = BPUTP + 1; # INCREMENT BUFFER OFFSET PTR #
  303. IF BPUTP GR 999
  304. THEN # END OF BUFFER HAS BEEN REACHED #
  305. BPUTP = 0; # INTIALIZE OFFSET PTR TO BEG OF BUFFER #
  306. END
  307. CONTROL FI;
  308.  
  309. #
  310.  STEP 2 SWITCH ON ABT
  311. #
  312. P<AHEADER> = WLADDR + AIPHSIZE ; # APPLICATION BLOCK HEADER #
  313. P<SUPMSG> = WLADDR + AIPHSIZE + ABHSIZE; # ADDRESS OF SUP MSG #
  314. P<SMNVF> = P<SUPMSG>;
  315. INDEX = 0;
  316. P<ACNT> = ACBACNT[0]; # ADDRESS OF APPL CONNECTION TABLE #
  317. P<ACNB> = 0;
  318. IF ABT NQ APPPN
  319. THEN # VALIDATE ACN #
  320. BEGIN
  321. IF NWLADR[0] NQ 0
  322. THEN # CONNECTION DATA OR SYCH SM #
  323. ACN = NWLADR[0];
  324. ELSE
  325. BEGIN # SM #
  326. IF ABT NQ APPCMD
  327. THEN # DATA SENT ON CONNECTION ZERO #
  328. BEGIN # SEND ERROR LOGICAL TO APPLICATION #
  329. TEMP = RLG"ACN"; # INVALID ACN REASON CODE #
  330. GOTO PPUT75;
  331. END
  332. ACN = SPACN[0];
  333. UCPPFCSFC[ENDTAB1] = PFCSFC[0]; # GUARANTEES A MATCH #
  334.  
  335. PPUT10:
  336. IF UCPPFCSFC[INDEX] EQ PFCSFC[0]
  337. THEN
  338. GOTO PPUT20;
  339. INDEX = INDEX + 1;
  340. GOTO PPUT10; # CHECK NEXT ENTRY IN JUMP SWITCH #
  341. END
  342.  
  343. PPUT20:
  344. IF INDEX EQ ENDTAB1 AND PFC[0] NQ IFC AND
  345. PFC[0] NQ OFC AND PFC[0] NQ SET
  346. AND PFC[0] NQ IFT
  347. AND PFC[0] NQ OFT
  348. AND PFC[0] NQ XFT
  349. THEN
  350. BEGIN
  351. TEMP = RLG"ISM";
  352. GOTO PPUT75;
  353. END
  354. IF (ACN NQ 0 AND PFC[0] NQ HOP)
  355. OR VACNFLAG[INDEX]
  356. THEN # VALIDATE ACN #
  357. BEGIN
  358. IF ACN NQ 0 AND
  359. ACN GQ ACNTMINACN[0] AND
  360. ACN LQ ACNTHCN[0]
  361. THEN
  362. BEGIN
  363. ACNTINDX = ACN - ACNTMINACN[0] + ACNTHSIZE;
  364. P<ACNB> = ACNTACNB[ACNTINDX];
  365. IF P<ACNB> NQ 0
  366. THEN
  367. GOTO ABT$; # SWITCH ON APPLICATION BLOCK TYPE #
  368. END
  369. TEMP = RLG"ACN"; # RC=4 INVALID ACN #
  370. GOTO PPUT75;
  371. END
  372. END
  373.  
  374. ABT$:
  375. IF P<ACNB> NQ 0
  376. THEN # ACNB EXISTS, GET NCNB ADDRESS #
  377. BEGIN
  378. P<NCNB> = ACNBNCNB[0];
  379. DV = NCNBDT[0]; # DEVICE TYPE OF CONNECTION #
  380. END
  381. GOTO ABTJT[ABT]; # SWITCH ON APPLICATION BLOCK TYPE #
  382.  
  383. ABT0:
  384. TEMP = RLG"IAB"; # ABT = 0 IS ILLEGAL #
  385. GOTO PPUT75; # SEND LGL/ERR MSG TO APPL #
  386.  
  387. ABT6: # QBLK BLOCK PROCESSING #
  388. ABT7: # QMSG BLOCK PROCESSING #
  389. IF P<NCNB> NQ 0
  390. AND ((DV NQ DT$INTA
  391. AND DV NQ DT$ATOA)
  392. OR ACNBBLK[0]) # NO INTERMIXING OF BLK/MSG WITH QBLK/QMSG #
  393. THEN # QBLK/QMSG ALLOWED ON A-A CONNECTION ONLY #
  394. BEGIN # ISSUE ERROR LOGICAL RC = 9 TO APPLICATION #
  395. TEMP = RLG"NCE";
  396. GOTO PPUT75;
  397. END
  398. IF ABT EQ APPQBLK
  399. THEN # RECEIVED QBLK OF A MULTI-BLOCK QUALIFIED MESSAGE #
  400. ACNBQBLK[0] = TRUE; # SET QBLK OUTSTANDING FLAG #
  401. ELSE # RECEIVED QMSG BLOCK #
  402. ACNBQBLK[0] = FALSE;
  403. GOTO ABT$BLK; # PROCESS AS A BLK/MSG BLOCK #
  404.  
  405. ABT1:
  406. ABT2:
  407. IF ACNBQBLK[0]
  408. THEN # QBLK BLOCK OUTSTANDING, NO QMSG RECEIVED YET #
  409. BEGIN # NO INTERMIXING OF QBLK AND REGULAR BLOCK ALLOWED #
  410. TEMP = RLG"NCE"; # SEND ERROR LOGICAL RC=9 #
  411. GOTO PPUT75;
  412. END
  413. IF ABT EQ APPBLK
  414. THEN # RECEIVED BLK BLOCK OF A MESSAGE #
  415. ACNBBLK[0] = TRUE;
  416. ELSE # RECEIVED MSG BLOCK OF A MESSAGE #
  417. ACNBBLK[0] = FALSE;
  418. ABT$BLK:
  419. IF P<NCNB> NQ 0
  420. THEN # NETWORK CONNECTION BLOCK EXISTS #
  421. BEGIN
  422. IF ACNTABO[ACNTINDX] GQ ACNBABL[0]
  423. THEN # APPLICATION BLOCK LIMIT EXCEEDED ON CONNECTION #
  424. BEGIN
  425. TEMP = RLG"ABL";
  426. GOTO PPUT75; # ISSUE ERR/LGL #
  427. END
  428.  
  429. ELSE # VALIDATE APPLICATION CHARACTER TYPE USED #
  430. BEGIN
  431. IF (NWLACT[0] EQ CT60TRANS AND
  432. DV EQ DT$CONS) # ACT ON CONSOLE CONNECTION #
  433. OR (DV EQ DT$ATOA AND
  434. NOT (NWLACT[0] EQ CT8ASCII OR
  435. NWLACT[0] EQ CT12ASCII)) # ACT 1 OR 4 ON INTER-H #
  436. OR ( DV EQ DT$INTA # IN-TRA HOST WITH ACT 4#
  437. AND NWLACT[0] EQ CT6DISPLAY ) # IS NOT ALLOWABLE #
  438. THEN # INVALID ACT ON DOWNLINE BLOCK #
  439. BEGIN
  440. TEMP = RLG"IA";
  441. GOTO PPUT75; # ISSUE ERR/LGL #
  442. END
  443. END
  444.  
  445. IF NWLACT[0] EQ CT6DISPLAY
  446. AND DV EQ DT$CONS
  447. THEN
  448. NWLXPT[0] = FALSE; # CLEAR TRANSPARENT MODE BIT #
  449.  
  450. IF NCNBBST[0] EQ NBALLD # ALL DATA ALLOWED ON NETWORK SIDE #
  451. AND ACNTIS[ACNTINDX] EQ HBALLD # ALL DATA ALLOWED ON HOST SI #
  452. THEN
  453. BEGIN # QUEUE DOWNLINE DATA DIRECTLY #
  454. ACNTABO[ACNTINDX] = ACNTABO[ACNTINDX] + 1;
  455. IF ACNBTLO[0]
  456. AND (ABT EQ APMSG
  457. OR ABT EQ APPQMSG)
  458. THEN # TURN OFF TLO FLAG ON HALF DUPLEX CONNECTION #
  459. BEGIN
  460. ACNBTLO[0] = FALSE; # CLEAR TEMPORARY LIST OFF FLAG #
  461. HUPDDAW(P<ACB>,P<ACNB>,0,ACNBBLKSQ[0]);
  462. END
  463. NFOB(P<NWLENTRY>,P<NCNB>);
  464. GOTO PPUT77;
  465. END
  466. END
  467.  
  468. HBSTTP(P<ACNB>,RMSG,P<NWLENTRY>); # CALL BLOCK STATE PROCESSOR #
  469. GOTO PPUT77;
  470.  
  471. ABT3:
  472. CONTROL IFEQ STAT,1; # STATISTICS ON #
  473. ST$LNB = ST$LNB + 1; # INCREMENT *LOCAL NON-DATA BLOCKS* #
  474. ST$LNC = ST$LNC + NWLTLC[0]; # INC *LOCAL NON-DATA CHARACTERS* #
  475. CONTROL FI;
  476. IF NWLADR[0] NQ 0
  477. THEN
  478. BEGIN # SYN SM #
  479. IF NWLACT[0] NQ CT8ASCII
  480. AND NWLACT[0] NQ CT12ASCII
  481. THEN
  482. BEGIN
  483. TEMP = RLG"IA" ;
  484. GOTO PPUT75 ;
  485. END
  486. ELSE
  487. GOTO ABT1;
  488. END # SYN SM #
  489. ELSE
  490. IF NWLACT[0] NQ CT60TRANS
  491. THEN
  492. BEGIN
  493. TEMP = RLG"IA" ;
  494. GOTO PPUT75 ;
  495. END
  496.  
  497.  
  498. GOTO UCPPFCSFCJT[INDEX];
  499.  
  500.  
  501. UCPL0:
  502. # TURN ON/OFF ACN IN LIST X #
  503. OVLNAME = HLONOFFP; # NAME OF OVERLAY PROGRAM TO LOAD #
  504. GOTO PPUT76;
  505.  
  506. UCPL1:
  507. # SWITCH LISTS #
  508. IF ACNBLO[0]
  509. THEN # CONNECTION HAS LIST PROCESSING OFF #
  510. BEGIN
  511. ACNBLO[0] = FALSE; # TURN LIST PROCESSING ON FOR NEW LIST #
  512. HUPDDAW(P<ACB>,P<ACNB>,0,ACNBBLKSQ[0]); # UPDATE NO OF DELIV #
  513. END
  514. ACNBALN[0] = LSTALN[0];# NEW LIST NUMBER FOR CONNECTION #
  515. GOTO PPUT77;
  516.  
  517. UCPL2:
  518. # SET HALF OR FULL DUPLEX MODE #
  519. OVLNAME = HLSTDXP; # NAME OF OVERLAY PROGRAM TO LOAD #
  520. GOTO PPUT76;
  521.  
  522.  
  523. UCPL4:
  524. # CHANGE INPUT CHARACTER TYPE #
  525. OVLNAME = HCHGICTP; # NAME OF OVERLAY PROGRAM TO LOAD #
  526. GOTO PPUT76;
  527.  
  528. UCPL5:
  529. # CHANGE INACTIVITY TIMER TO APPLICATION SPECIFIED VALUE #
  530. OVLNAME = HDCSTMRP; # NAME OF OVERLAY PROGRAM TO LOAD #
  531. GOTO PPUT76;
  532.  
  533. UCPL7:
  534. CONTROL IFEQ DEBUG,1;
  535. IF KNAMDB[0]
  536. THEN # ACTIVATE DYNAMIC DEBUG CODE #
  537. BEGIN
  538. OVLNAME = HPDBGSTP; # CALL DEBUG/STOP PROCESSOR #
  539. GOTO PPUT76;
  540. END
  541. CONTROL FI;
  542.  
  543. UCPL8:
  544. # SET DATA TRUNCATION MODE #
  545. OVLNAME = HDCTRUP; # NAME OF OVERLAY PROGRAM TO LOAD #
  546. GOTO PPUT76;
  547.  
  548.  
  549. UCPL10:
  550. #
  551.   PROCESS A PRU/ON SUPERVISORY MESSAGE FROM APPLICATION
  552. #
  553. PARAMP1 = 0 ;
  554. HBSTTP(P<ACNB>,PRUONR,P<NWLENTRY>) ;
  555. IF PARAMP1 EQ 0
  556. THEN
  557. BEGIN # PRU/ON WAS O.K. #
  558. P<NCNB> = ACNBNCNB[0] ; # NETWORK CONNECTION TABLE #
  559. IF P<NCNB> NQ 0
  560. THEN
  561. BEGIN
  562. FOUND = FALSE ;
  563. FOR TEMP = 0 STEP NBTFETNO WHILE
  564. ( ( TEMP LQ NBTMAXID)
  565. AND NOT FOUND )
  566.  
  567. DO
  568. BEGIN # SEARCH FOR NBT ENTRY #
  569. IF NBTHN[TEMP] EQ NCNBHN[0]
  570. AND NBTIUF[TEMP]
  571. THEN
  572. BEGIN # HAVE FOUND #
  573. FOUND = TRUE ;
  574. INDEX = TEMP + OSTFET ; # INDEX INTO OUTBOUND #
  575. END
  576. END
  577.  
  578. MGETS(2,TEMP,TRUE) ; # GET 1-WORD BUFFER FOR SPECIAL #
  579. P<DRHDRWD> = TEMP ; # OUT BOUND BUFFER TO PIP #
  580. BLKID[0] = PRUSPECID ; # WITH THIS SPECIAL ID VALUE #
  581. P<NHEADER> = TEMP + BLKHSIZE ; # SET NETWORK HEADER HAS THE#
  582. NHWORD[0] = P<NCNB> ; # NCNB ADDRESS FOR LATER USE#
  583. P<DRHDRWD> = NBTIN[INDEX] ; # LINK TO PIP-OUTBOUND BUFFER #
  584. IF P<DRHDRWD> NQ 0
  585. THEN
  586. NEXTPTR[0] = TEMP ; # NOT THE FIRST ONE IN CHAIN #
  587. ELSE
  588. NBTFIRST[INDEX] = TEMP ;
  589. NBTIN[INDEX] = TEMP ;
  590. OUTREL = TRUE;
  591.  
  592. END # NON - ZERO NCNB #
  593.  
  594. END # PRU/UN WAS O.K. #
  595. ELSE # PRU/ON SUPERVISORY MESSAGE WAS REJECTED #
  596. BEGIN
  597. IF ACNTIS[ACNTINDX] EQ HBPRU
  598. THEN # NEED TO RESTORE BLOCK PROTOCOL STATE #
  599. BEGIN
  600. HBSTTP(P<ACNB>,HBPRUFN,0); # CHANGE HOST BLK PROTOCOL STATE #
  601. END
  602. END
  603.  
  604. GOTO PPUT77 ;
  605.  
  606. UCPL13:
  607. # PROCESS HOP/DIS, HOP/LG AND HOP/ALT #
  608. IF ATK[ACBAN[0]]
  609. THEN
  610. BEGIN # APPLICATION VALIDATED FOR K-DISPLAY #
  611. OVLNAME = HPKDISPP ;
  612. GOTO PPUT76; # LOAD AND EXECUTE OVERLAY #
  613. END
  614. ELSE
  615. BEGIN
  616. TEMP = RLG"ISM"; # RC=7 ILLOGICAL SM #
  617. GOTO PPUT75; # ISSUE ERR/LGL #
  618. END
  619.  
  620. UCPL14A:
  621. TRIG = NCONREQ; # TRIGGER FOR CON/REQ/N #
  622. GOTO UCPL14;
  623.  
  624. UCPL14B:
  625. TRIG = ACONREQ; # TRIGGER FOR CON/REQ/A #
  626. ACNBRC[0] = RCRC"ARC"; # RC=5 APPL REFUSED CONN #
  627. GOTO UCPL14;
  628.  
  629. UCPL14C:
  630. IF WORDCOUNT LS RACRSIZE # IF WORD COUNT LESS THAN 2 #
  631. THEN
  632. BEGIN
  633. TEMP = RLG"NFI"; # REASON CODE 10 #
  634. GOTO PPUT75; # GENERATE ERRLGL #
  635. END
  636. ELSE
  637. BEGIN
  638. TRIG = CONACRQ; # TRIGGER FOR CON/ACRQ/R #
  639. ACN = 0;
  640. GOTO UCPL14;
  641. END
  642.  
  643. UCPL14D:
  644. TRIG = CONENDR ; # TRIGGER CON/END/R #
  645.  
  646. UCPL14:
  647. # PROCESS CON/REQ/N,A CON/ACRQ/R AND CON/END/R #
  648. HCSTTP(P<ACB>,ACN,TRIG,P<NWLENTRY>); # HOST CONN STP #
  649. GOTO PPUT77;
  650.  
  651. UCPL15A:
  652. TRIG = INTRSP; # TRIGGER FOR INTR/RSP #
  653. GOTO UCPL15;
  654.  
  655. UCPL15AA:
  656. TRIG = INTRAPL ; # TRIGGER FOR INTR/APP #
  657. GOTO UCPL15 ;
  658.  
  659. UCPL15B:
  660. TRIG = RFCRST; # TRIGGER FOR FC/RST #
  661. GOTO UCPL15;
  662.  
  663. UCPL15BB:
  664. TRIG = RFCBRK; # TRIGGER FOR FC/BRK #
  665. GOTO UCPL15;
  666.  
  667. UCPL15C:
  668. TRIG = NFCINIT; # TRIGGER FOR FC/INIT/N #
  669.  
  670. UCPL15:
  671. # PROCESS INTR/RSP/U, FC/RST/U, FC/BRK/U AND FC/INIT/N #
  672. HBSTTP(P<ACNB>,TRIG,P<NWLENTRY>);
  673. GOTO PPUT77;
  674.  
  675. UCPL16:
  676. # PROCESS NPD/REL #
  677. CONTROL IFEQ DEBUG,1;
  678. IF ACBAN[0] NQ PROCAN[NSORD]
  679. THEN
  680. BEGIN
  681. TEMP = RLG"ISM"; # ILLEGAL SM #
  682. GOTO PPUT75; # ISSUE ERR/LGL #
  683. END
  684. OVLNAME = HPNPDRLP ;
  685. CONTROL FI ;
  686. GOTO PPUT76; # LOAD AND EXECUTE OVERLAY #
  687.  
  688. UCPL17A:
  689. # PROCESS NET/ON/A RESPONSE FROM NVF #
  690. ATNVFA[NETAN[0]] = TRUE ; # SET NET/ON/A RESPONSE BIT #
  691. UCPL17B:
  692. # PROCESS NET/ON/N RESPONSE FROM NVF #
  693. OVLNAME = HPNONVFP; # PROCESS NET/ON/R FROM NVF #
  694. GOTO UCPL19;
  695.  
  696. UCPL18:
  697. # PROCESS SH/ISD (SHUTDOWN) #
  698. PARAMS1 = P<NWLENTRY> ;
  699. OVLNAME = HPSHISDP ;
  700. GOTO UCPL19;
  701.  
  702. UCPL19A:
  703. TRIG = RCRITEN; # NAM RECEIVES CR/ITE/N FROM NVF #
  704. GOTO UCPL19;
  705.  
  706. UCPL19B:
  707. TRIG = RCRITEA; # NAM RECEIVES CR/ITE/A FROM NVF #
  708. GOTO UCPL19;
  709.  
  710. UCPL19C:
  711. TRIG = RCRRAPN; # NAM RECEIVES CR/RAP/N FROM NVF #
  712. GOTO UCPL19;
  713.  
  714. UCPL19D:
  715. TRIG = GCRRAPA; # NAM RECEIVES CR/RAP/A FROM NVF #
  716. GOTO UCPL19;
  717.  
  718. UCPL19E:
  719. TRIG = RCRIAPN; # NAM RECEIVES CR/IAP/N FROM NVF #
  720. GOTO UCPL19;
  721.  
  722. UCPL19F:
  723. TRIG = GCRIAPA; # NAM RECEIVES CR/IAP/A FROM NVF #
  724. GOTO UCPL19;
  725.  
  726. UCPL19G:
  727. TRIG = RCRSWHR; # NAM RECEIVES CR/SWH/R FROM NVF #
  728. GOTO UCPL19;
  729.  
  730. UCPL19H:
  731. TRIG = RCRRCNN; # NAM RECEIVES CR/RCN/N FROM NVF #
  732. GOTO UCPL19;
  733.  
  734. UCPL19I:
  735. TRIG = RCRTRMR; # NAM RECEIVES CR/TRM/R FROM NVF #
  736. GOTO UCPL19 ;
  737.  
  738. UCPL19J:
  739. TRIG = RCRRCNA ; # NAM RECEIVES CR/RCN/A FROM NVF#
  740. GOTO UCPL19 ;
  741.  
  742. UCPL19:
  743. #
  744.   PROCESS CR/ITE/N,A CR/RAP/N,A CR/IAP/N,A CR/SWH
  745.   CR/RCN/N AND CR/TRM
  746.   REJECT IF SM IS NOT FROM NVF
  747. #
  748. IF ACBAN[0] NQ NVFAN
  749. THEN
  750. BEGIN
  751. TEMP = RLG"ISM"; # RC=7 ILLOGICAL SM #
  752. GOTO PPUT75; # ISSUE ERR/LGL #
  753. END
  754. IF NWLACT[0] NQ CT60TRANS
  755. THEN
  756. BEGIN
  757. TEMP = RLG"IA"; # INVALID ACT #
  758. GOTO PPUT75;
  759. END
  760. IF PFC[0] EQ CR
  761. THEN
  762. BEGIN
  763. ACN = CRACN[0];
  764. HCSTTP(P<ACB>,ACN,TRIG,P<NWLENTRY>);
  765. GOTO PPUT77;
  766. END
  767. ELSE
  768. GOTO PPUT76; # LOAD AND EXECUTE OVERLAY #
  769.  
  770.  
  771. UCPL20:
  772. UCPL21:
  773. OVLNAME = HPNOFFNP ;
  774. OVLCALL ;
  775.  
  776. GOTO PPUT77 ;
  777.  
  778. UCPL22A:
  779. #
  780.   PROCESSING FNT/DMS
  781.   PROCESSING FNT/DSM
  782. #
  783. PARAMS1 = TDMS ;
  784. GOTO UCPL22X ;
  785. UCPL22B:
  786. #
  787.   UNUSE ACTION
  788. #
  789. GOTO UCPL22X ;
  790. UCPL22C:
  791. #
  792.   PROCESSING FNT/IFL
  793. #
  794. PARAMS1= TIFL ;
  795. GOTO UCPL22X ;
  796. UCPL22D:
  797. #
  798.   PROCESSING FNT/IFR
  799. #
  800. PARAMS1 = TIFR ;
  801. GOTO UCPL22X ;
  802. UCPL22E:
  803. #
  804.   PROCESSING FNT/IAR
  805. #
  806. PARAMS1 = TIAR ;
  807. GOTO UCPL22X ;
  808.  
  809. UCPL22X:
  810. PARAMS2 = ACBAN[0] ; # ACB OF THE SENDING S.M. APPLICATION #
  811. PARAMS3 = P<SUPMSG> ;
  812. OVLNAME = HFNTSMP ; # PROCESS THE FNT S.M. ACCORDINGLY #
  813. OVLCALL ;
  814. GOTO PPUT77 ;
  815.  
  816. UCPL23:
  817. #
  818.   PROCESSING SAC/NCL SM FROM APPLICATION
  819. #
  820. ACBABTC[0] = SACABTC[0] ; # SAVE THE ABORT #
  821. # CONDITION CODE #
  822. GOTO PPUT77 ;
  823.  
  824. UCPL24:
  825. #
  826.   PROCESSING SAF/SAR SM FROM APPLICATION
  827. #
  828. PARAMP1 = P<ACB> ; # ACB OF SPAWNNING APPL #
  829. OVLNAME = HFSPAWNP ; # PROCESS THE SAF/SAR S.M. #
  830. OVLCALL ;
  831. GOTO PPUT77 ;
  832.  
  833. ABT4:
  834.  
  835. P<AHEADER> = WLADDR + AIPHSIZE; # ADDRESS OF ABH #
  836. IF (((PFC[0] GQ MNNS AND PFC[0] LQ MXNS) AND
  837. (ACBAN[0] EQ PROCAN[NSORD])) OR
  838. ((PFC[0] GQ MNCS AND PFC[0] LQ MXCS)
  839. AND (ACBAN[0] EQ PROCAN[CSORD])))
  840. THEN # FROM NS OR CS #
  841. BEGIN
  842. IF ABHCN[0] NQ 0
  843. THEN # CN NON-ZERO #
  844. TEMP = RLG"ACN"; # RC=4 INVALID ACN #
  845. ELSE
  846. IF ABHBT[0] NQ APPPN
  847. THEN # BT NOT 4 #
  848. TEMP = RLG"IAB"; # RC=3 ILLEGAL ABT #
  849. ELSE
  850. BEGIN # BT = 4 #
  851. IF NWLACT[0] NQ CT8ASCII
  852. THEN
  853. TEMP = RLG"IA" ; # ILLEGAL ACT #
  854. END # BT = 4 #
  855. IF TEMP NQ 0
  856. THEN
  857. GOTO PPUT75; # ISSUE ERR/LGL #
  858. ELSE
  859. BEGIN
  860. PARAMP1 = P<NWLENTRY> ;
  861. OVLNAME = NLOPIPP; #NAME OF OVERLAY TO SEND S M TO PIP #
  862. GOTO PPUT76; # LOAD AND EXECUTE OVERLAY #
  863. END
  864. END
  865. ELSE # INVALID SM ON ABT 4 #
  866. BEGIN
  867. TEMP = RLG"IAB" ; # ILLEGAL ABT #
  868. GOTO PPUT75; # ISSUE ERR/LGL #
  869. END
  870. GOTO PPUT77; # EXIT #
  871.  
  872. UCPL25:
  873. IF (PFC[0] EQ IFC OR
  874. PFC[0] EQ OFC OR
  875. PFC[0] EQ SET)
  876. THEN # ITS A PRU INTERFACE SUPERVISORY MESSAGE #
  877. BEGIN
  878. HBSTTP(P<ACNB>,PRUMSG,0) ;
  879. GOTO PPUT77 ;
  880. END
  881. ELSE
  882. BEGIN
  883. IF PFC[0] EQ IFT
  884. OR PFC[0] EQ OFT
  885. OR PFC[0] EQ XFT
  886. THEN
  887. BEGIN
  888. IF SFC[0] EQ OFF
  889. OR PFCSFC[0] EQ XFTIER
  890. THEN
  891. BEGIN
  892. TRIG = HXFTOFR; # TRIGGER FOR HOST CONNECTION STATE TBL #
  893. HCSTTP(P<ACB>,ACN,TRIG,P<NWLENTRY>);
  894. END
  895. ELSE
  896. HBSTTP(P<ACNB>,PRUMSG,P<NWLENTRY>);
  897. GOTO PPUT77 ;
  898. END
  899. ELSE
  900. BEGIN
  901. TEMP = RLG"ISM" ;
  902. GOTO PPUT75 ;
  903. END
  904. END
  905.  
  906.  
  907. PPUT76:
  908. OVLCALL ; # LOAD AND EXECUTE OVERLAY #
  909. IF PARAMS7 NQ 0
  910. THEN # RETURNED ERROR CODE IS NOT ZERO #
  911. BEGIN
  912. TEMP = PARAMS7 ;
  913.  
  914. PPUT75:
  915. PARAMS1 = TEMP ; # PROCESS ERROR CODE #
  916. OVLNAME = HLGLERRP ;
  917. OVLCALL ;
  918. END
  919.  
  920. #
  921.   RETURN
  922. #
  923. PPUT77:
  924. IF NWLEID[0] EQ POBIDVALUE
  925. OR NWLEID[0] EQ HHQIDVALUE
  926. OR NWLEID[0] EQ PWLIDVALUE
  927. OR NWLEID[0] EQ DRIDVALUE
  928. THEN
  929. # BUFFER QUEUED ON PIP OUTBOUND CHAIN
  930.   OR ON A-A INTRA-HOST QUEUE
  931.   OR LINKED ON PCNB
  932.   OR LINKED ON NCNB
  933.   #
  934. BEGIN # DELINK WORKLIST ENTRY FROM NWL #
  935. HRELPWL; # RELEASE USED PORTION OF NWL #
  936. END
  937. RETURN;
  938. END
  939. TERM
cdc/nos2.source/nam5871/hpput.txt ยท Last modified: 2023/08/05 17:22 by Site Administrator