User Tools

Site Tools


cdc:nos2.source:nam5871:np_senf

NP$SENF

Table Of Contents

  • [00012] PROC NP$SENF(NBACKTRIG)
  • [00129] PROC NP$CIO
  • [00130] PROC NP$D2N
  • [00132] PROC NP$RCL
  • [00133] PROC NP$PUT
  • [00134] PROC NETPUT
  • [00135] PROC NP$UPRU
  • [00137] PROC NP$BTO8
  • [00138] PROC NP$SHRK

Source Code

NP$SENF.txt
  1. *DECK,NP$SENF
  2. *IF,DEF,XFR
  3. USETEXT NX$ACBF
  4. USETEXT AIPDEF
  5. USETEXT HEADER
  6. USETEXT NP$STAT
  7. USETEXT NP$DB
  8. USETEXT NP$NWL
  9. USETEXT NP$MODE
  10. USETEXT NP$GETS
  11. USETEXT NX$ACBX
  12. PROC NP$SENF(NBACKTRIG);
  13. BEGIN
  14. #
  15. *1DC NP$SENF
  16. *
  17. * 1. PROC NAME AUTHOR DATE
  18. * NP$SENF Y. C. YIP 02/19/1985
  19. *
  20. * 2. FUNCTIONAL DESCRIPTION
  21. * NP$SENF PERFORMS THE SENDING ACTION OF A FILE IN
  22. * CHARACTER MODE TO THE RECEIVER. THE SAME MODULE IS
  23. * USED IN INBTRAHOST FILE TRANSFER.
  24. *
  25. * 3. METHOD USED
  26. *
  27. * LEGEND: CHECKMARK WINDOW SIZE REFERS TO THE
  28. * MAX NUMBER OF DATA BLOCKS THAT CAN BE NETPUT
  29. * BEFORE A CHECKMARK MUST BE SENT IF MFACIL USED
  30. *
  31. * MAX-CHARK REACHED REFERS TO THE MAXIMUM NUMBER
  32. * OF CHECKMARKS THAT CAN BE SENT BEFORE A MR IS
  33. * RECEIVED FROM THE RECEIVER.
  34. *
  35. * UNTIL ABL WINDOW CLOSED OR MAX CHECKMARKS REACHED OR
  36. * EOI REACHED
  37. * PERFORM:
  38. * IF CHECKMARK WINDOW OPEN
  39. * READ FROM DISKBUFF
  40. * TEST FOR DISK FET STATUS AND UPDATE
  41. * FTTEOR, FTTEOI AND FTTLEV ACCORDINGLY.
  42. * IF RESTART PENDING FLAG SET
  43. * SET CHECKMARK RESTART INDEX
  44. * SET DISK OUTFET ACCORDING TO THE
  45. * OFFSET CONTAINED IN THE CHECKMARK BUFFER ASSOCIATED
  46. * WITH RESTART INDEX
  47. * CLEAR RESTART PENDING FLAG
  48. * ENDIF
  49. * SAVE CURRENT DISK FETOUT IN DISKOLDOUT
  50. * IF TRANSLATION FLAG SET
  51. * THEN
  52. * CALL TRANSLATION SERVICE
  53. * ELSE
  54. * COPY CONTENTS OF DISK BUFF INTO NETWORK BUFFER
  55. * AS A INTRAHOST FILE TRANSFER ACTION.
  56. * ENDIF
  57. * IF MFACIL SET (ONLY FOR INTERHOST)
  58. * THEN
  59. * CALL NP$UPRU TO UPDATE FTTWORD, FTTDBIT AND FTTPRU.
  60. * ENDIF
  61. * IF NETWORK BUFFER FULL OR EOR REACHED
  62. * THEN
  63. * SET LOC$HA AND LOC$TA
  64. * SET ACN AND TLC
  65. * IF DISK BUFFER ALSO EMPTY
  66. * UPDATE TBH$TBC
  67. * ENDIF
  68. * IF FTTEOI SET
  69. * SET NBACKTRIG TO TRIG-EOI
  70. * EXIT LOOP
  71. * ENDIF
  72. * SET TBH IN THE HEADER
  73. * NEPUT BLOCK.
  74. * RESET NETBUF FET POINTERS
  75. * RESET CMB$NBYTE, CMB$NCOUNT AND CMB$NBUF FLAG
  76. * IF MFACIL USED (ONLY FOR INTERHOST)
  77. * DECREMENT CHECKMARK WINDOW SIZE BY 1
  78. * ENDIF
  79. * ELSE
  80. * PERFORM A SHORT TIME RECALL
  81. * SET BACKTRIG TO SEND TRIGGER AGAIN
  82. * ENDIF
  83. * ELSE (MS WINDOW CLOSED)
  84. * IF ABL WINDOW OPEN
  85. * SEND CHECKMARK
  86. * UPDATE CHECKMARK STATUS BUFFER FROM FTT
  87. * ENDIF
  88. * ENDIF
  89. * END-LOOP (END OF UNTIL)
  90. * IF ABL WINDOW CLOSED
  91. * THEN
  92. * SET FTTSTATE TO ABL-CLOSED-STATE
  93. * ENDIF
  94. * IF MAX-CHECKMARK REACHED
  95. * SET FTTSTATE TO MAX-CHECKMARK-REACHED STATE
  96. * ENDIF
  97. * RETURN
  98. *
  99. * 4. ENTRY CONDITIONS
  100. * FTTINDEX SET TO THE CURRENT FILE TRANSFER INDEX.
  101. *
  102. * 5. EXIT CONDITONS
  103. * FTTLEV UPDATED.
  104. * DISKFET UPDATED
  105. * NBACKTRIG SET TO EOI=TRIGGER IF EOI REACHED
  106. *
  107. * 6. COMDECKS CALLED AND SYMPL TEXTS USED.
  108. * NP$NWL, NX$ACBX
  109. *
  110. * 7. ROUTINES CALLED
  111. * NP$CIO - CALLS CIO FUNCTIONS TO PERFORM READ
  112. * NP$RCL - PERFORMS TIME RECALL
  113. * NP$D2N - PERFORMS DISK TO NETBUF TRANSLATION
  114. * NP$PUT - PERFORMS NETPUT
  115. * NP$UPRU - PERFORMS UPDATING OF PRU NUMBER, WORD AND DBIT
  116. * IN THE FTT.
  117. * NP$BT
  118. * NUMBERS.
  119. * 8. DAYFILE MESSAGES
  120. * NONE
  121. *
  122. #
  123.  
  124. #
  125. ****
  126. #
  127. XREF
  128. BEGIN
  129. PROC NP$CIO; # PROCEDURE TO PERFORM CIO FUNCTIONS#
  130. PROC NP$D2N; # TRANSLATION SERVICE FROM DISK TO #
  131. # NETWORK BUFFER #
  132. PROC NP$RCL; # PROCEDURE TO PERFORM THE RECALL #
  133. PROC NP$PUT; # INTERNAL PROCEDURE TO NETPUT BLOCK#
  134. PROC NETPUT; # PROCEDURE TO NETPUT BLOCKS #
  135. PROC NP$UPRU; # PROCEDURE TO UPDATE PRU,WORD AND #
  136. # DBIT IN FTT #
  137. PROC NP$BTO8; # PROC TO TRANSLATE INTEGER TO ASCII#
  138. PROC NP$SHRK; # PROC TO SHRINK CHECKMARK TABLE #
  139. END
  140. #
  141. ****
  142. #
  143. DEF COLON # O"072"#; # DEFINITIONS FOR COLON 64 CHARSET #
  144. DEF COLON3 # 3 #; # HALF BYTE OF 072 #
  145. DEF COLON10 # 10 #; # LOWER HALF BYTE OF 072 #
  146. ITEM NBACKTRIG; # BACK TRIGGER #
  147. ITEM INDEX; # LOOP INDEX #
  148. ITEM DONE B; # DONE FLAG #
  149. ITEM CHKINDEX; # TEMPORARY CHECKMARK INDEX #
  150. ITEM DISKOLDOUT; # OLD OUT POINTER OF DISK #
  151. ITEM CONT B; # CONTINUATION FLAG #
  152. ITEM INDEX1; # LOOP INDEX #
  153. BASED ARRAY COPYAREA[0:0] S(1);
  154. BEGIN
  155. ITEM WORD U(00,00,60); # TEMPLATE FOR CHANGING MEMORY #
  156. END
  157.  
  158.  
  159. CONTROL EJECT;
  160. # #
  161. # CODE OF NP$SENF BEGINS HERE #
  162. # #
  163. P<CMB> = FTTCMV$BLK[FTTINDEX]; # SET CMB TEMPLATE TO CHARACTER #
  164. # CONVERSION ADDRESS FROM FTT #
  165. P<FET$CIO> = FTTFETADR[FTTINDEX]; # SET FET$CIO TEMPLATE TO #
  166. # FET ADDRESS FROM FTT #
  167. P<FET$WORK> = FTTFETW[FTTINDEX]; # SET NETWORK FET TO ADDRESS #
  168. # FROM FTT #
  169. P<CHK> = FTTCKTBL[FTTINDEX]; # CHECK MARK TABLE ADDRESS #
  170. DONE = FALSE; # SET DONE FLAG TO FALSE #
  171. P<TBH$HDR> = FETWFIRST[0]; # SET TBH TEMPLATE TO FIRST WORD #
  172. # OF THE NETWORK BUFFER #
  173. FOR INDEX = 0 WHILE (FTTCURBLK[FTTINDEX] GR 0) AND
  174. ( FTTOUTCWS[FTTINDEX] NQ FTTCWS[FTTINDEX]) AND
  175. NOT DONE
  176. DO # LOOP WHILE ABL WINDOW OPEN AND #
  177. BEGIN # MAX CHECKMARKS NOT REACHED AND #
  178. # EOI NOT YET READ FROM DISK #
  179. IF FTTBLK$MS[FTTINDEX] GR 0 # IF MS WINDOW OPEN #
  180. THEN
  181. BEGIN
  182. IF FETCOMP[0] AND FTTEORI[FTTINDEX] EQ 0 # IF CIO COMPLETE #
  183. THEN # AND LAST STATUS FROM DISK NOT EOR #
  184. BEGIN # OR EOI #
  185. # GET DATA IS REQUIRED #
  186. FETCODE[0] = 0; # CLEAR FETCODE #
  187. NP$CIO(CIO$READ); # PERFORM CIO READ #
  188. IF FETEC[0] NQ 0 AND FETSTATUS[0] NQ CIO$EOI
  189. THEN # IF AT NQ 0 AND STATUS = 741031B #
  190. BEGIN
  191. NBACKTRIG = NSCTERR; # SET BACKTRIG TO CIO ERROR #
  192. GOTO NPEXIT; # EXIT LOOP AND RETURN #
  193. END
  194. ELSE
  195. BEGIN
  196. IF FETCODE[0] EQ CIO$NORMAL # IF RETURN CODE = 11B #
  197. THEN
  198. BEGIN
  199. FTTTBC[FTTINDEX] = 0; # CLEAR TBC FROM FTT #
  200. END
  201. ELSE
  202. BEGIN
  203. IF FETCODE[0] EQ CIO$EOR OR FETCODE[0] EQ CIO$EOF
  204. THEN # IF EOR OR EOF FOUND IN CODE #
  205. BEGIN
  206. FTTEOR[FTTINDEX] = TRUE; # SET EOR FLAG IN FTT #
  207. FTTLEV[FTTINDEX] = FETLEVEL[0]; # SAVE LEVEL NUMBER #
  208. END
  209. IF FETEC[0] EQ 1 # EOI IS FOUND #
  210. THEN
  211. BEGIN
  212. FTTEOI[FTTINDEX] = TRUE; # SET EOI FLAG IN FTT #
  213. FETEC[0] = 0; # CLEAR ERROR CODE #
  214. END
  215. END
  216. END
  217. END # GET DATA IS REQUIRED #
  218. IF FTTRPND[FTTINDEX] # IF RESTART PENDING #
  219. THEN
  220. BEGIN
  221. IF CHK$IDX[0] EQ CHK$START # IF A NON-ZERO CHECKMARK EXIST#
  222. THEN
  223. BEGIN
  224. CHKINDEX = CHK$START; # SAVE POINTER TO CHECKMARK TABLE #
  225. FETOUT[0] = FETOUT[0] + CHK$WORD[CHKINDEX];
  226. END
  227. ELSE
  228. BEGIN
  229. CHKINDEX = 1; # START FROM RR(0) #
  230. END
  231. FTTRPND[FTTINDEX]= FALSE; # CLEAR RESTART PENDING FLAG #
  232. END # ENTRY #
  233. DISKOLDOUT = FETOUT[0]; # SAVE OLD FET OUT POINTER #
  234. IF NOT FTTNOTRAN[FTTINDEX] # IF TRANSLATION NEEDED #
  235. THEN
  236. BEGIN
  237. NP$D2N(LOC(FETWFIRST[0]),LOC(FETFIR[0]),P<CMB>); # CALL TS#
  238. END
  239. ELSE
  240. BEGIN # TRANSLATION NOT NEEDED #
  241. P<COPYAREA> = 0;
  242. IF FETWIN[0] EQ FETWFIRST[0] # BEGINNING OF BLOCK #
  243. THEN
  244. BEGIN
  245. FETWIN[0] = FETWIN[0] + 1; # RESERVE ONE WORD FOR TBH #
  246. END
  247. IF (FTTEOI[FTTINDEX] OR # IF EOI SET #
  248. FTTEOR[FTTINDEX]) AND
  249. (FETIN[0] EQ FETOUT[0]) # DISK BUFFER EMPTIED #
  250. THEN
  251. BEGIN
  252. CONT = FALSE; # DO NOT COPY FROM DISK BUFFER#
  253. CMB$DBUF[0] = 1; # SET DISKBUF EMPTY FLAG #
  254. END
  255. ELSE
  256. BEGIN
  257. CONT = TRUE; # COPY FROM DISK BUFFER #
  258. END
  259. FOR INDEX1 = 0 WHILE CONT # COPY DATA INTO NETBUF #
  260. DO
  261. BEGIN
  262. WORD[FETWIN[0]] = WORD[FETOUT[0]]; # COPY DISK DATA #
  263. # INTO NETBUF #
  264. FETWIN[0] = FETWIN[0] + 1; # BUMP IN PTR OF NETBUF #
  265. FETOUT[0] = FETOUT[0] + 1; # BUMP OUT PTR OF DISK BUF #
  266. IF FETOUT[0] EQ FETLIM[0] # WRAP AROUND DISKBUF #
  267. THEN
  268. BEGIN
  269. FETOUT[0] = FETFIR[0]; # SET OUT PTR TO FIRST PTR #
  270. END
  271. IF FETIN[0] EQ FETOUT[0] # DISKBUF EMPTIED #
  272. THEN
  273. BEGIN
  274. CMB$DBUF[0] = 1; # DISK BUFFER EMPTY #
  275. FETIN[0] = FETFIR[0];
  276. FETOUT[0] = FETFIR[0];
  277. CONT = FALSE; # EXIT LOOP #
  278. END
  279. IF FETWIN[0] EQ FETWLIMIT[0] # NETBUF FILLED #
  280. THEN
  281. BEGIN
  282. CONT = FALSE; # EXIT LOOP #
  283. CMB$NBUF[0] = 1; # SET NETBUF TO BE FULL #
  284. END
  285. END # END FOR LOOP #
  286. END # END IF #
  287. IF FTTMFACIL[FTTINDEX] # IF MFACIL SPECIFIED #
  288. THEN
  289. BEGIN
  290. NP$UPRU(DISKOLDOUT,FETOUT[0]);#UPDATE PRU NUMBER WITH OLD #
  291. END # AND NEW DISK OUT PTR #
  292. IF CMB$NBUF[0] EQ 1 OR # IF NET BUFFER IS FULL #
  293. FTTEOR[FTTINDEX] # OR EOR IS TRUE FROM FTT #
  294. THEN # PUT MSG PROCESSING BEGINS #
  295. BEGIN
  296. IF NOT FTTNOTRAN[FTTINDEX] # IF TRANSLATION NEEDED #
  297. THEN
  298. BEGIN
  299. LOC$HA = LOC(OUT$DATA); # SET HEADER TO DATA HEADER #
  300. LOC$TA = FETWFIRST[0]; # TA SET TO FIRST WORD ADDRESS#
  301. # OF NETWORK BUFFER #
  302. OUT$DAACN[0] = FTTACN[FTTINDEX]; # SET ADR IN HEADER #
  303. OUT$DATLC[0] = CMB$NCOUNT[0];
  304. END
  305. ELSE
  306. BEGIN # INTRHOST BINARY FILE XFR #
  307. LOC$HA = LOC (OUT$INTRA);
  308. # SET HEADER TO INTRHOST HDR #
  309. LOC$TA = FETWFIRST[0]; # SET TEXT ADDRESS TO FIRST #
  310. OUT$INTACN[0] = FTTACN[FTTINDEX]; # SET ADR #
  311. OUT$INTTLC[0] = (FETWIN[0] - FETWFIRST[0])*15/2;
  312. END # FOR ACT = 2 #
  313. TBH$WRD[0] = 0; # CLEAR TBH #
  314. IF CMB$DBUF[0] EQ 1 # IF DISK BUFFER EMPTY #
  315. THEN
  316. BEGIN
  317. TBH$TBC[0] = FTTTBC[FTTINDEX]; # UPDATE TBC OF TBH #
  318. # USING TBC FROM FTT #
  319. FTTEOR[FTTINDEX] = FALSE; # CLEAR EOR BIT IN FTT #
  320. P<COPYAREA> = 0;
  321. IF CMB$STATE[0] NQ 0 # IF DAGGLING 00 OCCUR #
  322. THEN
  323. BEGIN
  324. OUT$DATLC[0] = OUT$DATLC[0] + 1; # ADD 072B : #
  325. CMB$NCOUNT[0] = CMB$NCOUNT[0] + 1;
  326. IF CMB$NBYTE LS 0 # IF HALF BYTE AVAILABLE #
  327. THEN
  328. BEGIN
  329. B<56,04>WORD[FETWIN[0]] = COLON3;
  330. B<00,04>WORD[FETWIN[0] + 1] = COLON10;
  331. END
  332. ELSE
  333. BEGIN # COMPLETE BYTE #
  334. B<52 - CMB$NBYTE[0],8>WORD[FETWIN[0]] = COLON;
  335. END
  336. END
  337. CMB$STATE[0] = 0; # CLEAR STATE FROM POSSIBLE #
  338. # REMAINING GARBAGE #
  339. IF FTTEOI[FTTINDEX] # EOI TRUE FROM FTT #
  340. THEN
  341. BEGIN
  342. DONE = TRUE; # SET DONE FLAG TO TRUE #
  343. NBACKTRIG = NSCTEOI; # SET BACK TRIG TO EOI TRIGGER#
  344. END
  345. END
  346. TBH$TBN[0] = FTTTBN[FTTINDEX]; # SET SERIAL BLOCK NUMBER#
  347. FTTTBN[FTTINDEX] = FTTTBN[FTTINDEX] + 1; # BUMP TBN IN FTT#
  348. IF NOT FTTNOTRAN[FTTINDEX] # IF TRANSLATION NEEDED #
  349. THEN
  350. BEGIN
  351. TBH$OLEN[0] = CMB$NCOUNT - TBH$LEN; # UPDATE OLEN IN TBC#
  352. END
  353. ELSE # INTRAHOST BINARY #
  354. BEGIN
  355. CMB$DBUF[0] = 0; # READY FOR NEXT READ AND SO #
  356. # SET DISK BUFFER NOT EMPTY #
  357. TBH$OLEN[0] = OUT$INTTLC[0]; # OLEN ACCORDING TO ACT =4 #
  358. END
  359. OPCODE = OP$PUT; # SET OPCODE IN NETPUT #
  360. *IF DEF,STAT,1
  361. IAM = TYPE"PUT"; # SET TYPE OF EXECUTING #
  362. # ROUTINE #
  363. NP$PUT; # NETPUT BLOCK #
  364. FTTCURBLK[FTTINDEX] = FTTCURBLK[FTTINDEX] - 1;
  365. # DECREASE ABL WINDOW #
  366. FETWIN[0] = FETWFIRST[0]; # RESET IN POINTER FOR NETBUF #
  367. FETWOUT[0] = FETWFIRST[0]; # RESET OUT POINTER FOR NETBUF#
  368. TBH$FWD[0] = 0; # CLEAR FIRST WORD OF NETBUF #
  369. CMB$NCOUNT[0] = TBH$LEN; # RESET CMB$NCOUNT TO 6 #
  370. CMB$NBYTE[0] = INITNBYTE; # RESET CMB$NBYTE TO 4 #
  371. CMB$NBUF[0] = 0; # SET NETFUF EMPTY FLAG #
  372. IF FTTMFACIL[FTTINDEX] # IF MFACIL SPECIFIED #
  373. THEN
  374. BEGIN
  375. FTTBLK$MS[FTTINDEX] = FTTBLK$MS[FTTINDEX] - 1;
  376. END
  377. END
  378. ELSE
  379. BEGIN # NETBUF NOT FULL OR DISK #
  380. NP$RCL(0); # DISK BUFFER NOT EMPTY #
  381. NBACKTRIG = NSCTSND; # AND NOT EOI #
  382. # SET SEND DATA AS BACK TRIG #
  383. IF FTTNOTRAN[FTTINDEX] # IF INTRAHOST BINARY XFR #
  384. THEN
  385. BEGIN
  386. CMB$DBUF[0] = 0; # SET DISK BUFFER NOT EMPTY #
  387. END
  388. END # SET SEND TRIGGER AS BACKTRIG#
  389. # SEND SEND DATA AS BACKTRIG #
  390. END
  391. ELSE
  392. BEGIN
  393. # MS WINDOW CLOSED NETPUT(MS)#
  394. IF FTTMFACIL[FTTINDEX] # IF M FACIL SPECIFIED #
  395. THEN
  396. BEGIN
  397. IF FTTCURBLK[FTTINDEX] GR 0 # IF ABL WINDOW OPEN #
  398. THEN
  399. BEGIN
  400. FTTBLK$MS[FTTINDEX] = MSWINDOWSZ; # RESET MS WINDOW #
  401. FTTOUTCWS[FTTINDEX] = FTTOUTCWS[FTTINDEX] + 1;
  402. # BUMP OUTSTANDING CHECKMARK #
  403. # COUNT #
  404. FTTLCKSNT[FTTINDEX] = FTTLCKSNT[FTTINDEX] + 1;
  405. NP$BTO8(FTTLCKSNT[FTTINDEX],CHKINDEX); # CONVERT TO ASCII#
  406. ABH$L7ADR = FTTACN[FTTINDEX]; # SET ADR IN ABH #
  407. L7$PFC = LEV7$MS; # SEND MS #
  408. L7$DD = B<STARTBIT,DDLEN>CHKINDEX;
  409. OPCODE = OP$PUT;
  410. LOC$HA = LOC(ABH$LEV7); # SET HEADER ADDRESS #
  411. LOC$TA = LOC(LV7$MSG); # SET TEXT ADDRESS #
  412. *IF DEF,STAT,1
  413. IAM = TYPE"PUT";
  414. *IF DEF,DEBUG,1
  415. DB$CALL = LOC(NETPUT); # COLLECT STATISTICS #
  416. NP$PUT; # NETPUT MS #
  417. FTTCURBLK[FTTINDEX] = FTTCURBLK[FTTINDEX] - 1;
  418. CHK$IDX = CHK$IDX + 1; # BUMP LAST ENTRY OF CHECKMARK#
  419. # TABLE #
  420. CHK$MARK[CHK$IDX] = FTTLCKSNT[FTTINDEX];
  421. CHK$WORD[CHK$IDX] = FTTWORD[FTTINDEX]; # CHECKMARK TABLE #
  422. CHK$DBIT[CHK$IDX] = FTTDBIT[FTTINDEX];
  423. CHK$PRUNO[CHK$IDX] = FTTCURPRU[FTTINDEX];#CURPRU UPDATED #
  424. CHK$TBN[CHK$IDX] = FTTTBN[FTTINDEX]; # TBN SAVED #
  425. END
  426. END
  427. END # TRANSLATION #
  428. END # END WHILE #
  429. IF FTTCURBLK[FTTINDEX] EQ 0 # IF ABL WINDOW CLOSED #
  430. THEN
  431. BEGIN
  432. FTTSTATE[FTTINDEX] = NSCCABL; # NEW STATE IS ABL-CLOSED STAE #
  433. END
  434. IF FTTOUTCWS[FTTINDEX] EQ FTTCWS[FTTINDEX]
  435. THEN
  436. BEGIN # IF MAX CHECKMARKS REACHED #
  437. NBACKTRIG = NSCTMCM; # SET BACK TRIGGER TO MAX CHECKMRKS #
  438. END # REACHED TRIGGER #
  439. NPEXIT: RETURN; # RETURN TO CALLER #
  440. END # END OF PROC NP$SENF #
  441. TERM
  442. *ENDIF
cdc/nos2.source/nam5871/np_senf.txt ยท Last modified: 2023/08/05 17:22 by Site Administrator