User Tools

Site Tools


cdc:nos2.source:nam5871:nvftvvd

NVFTVVD

Table Of Contents

  • [00008] PROC NVFTVVD
  • [00009] NVFTVVD - VERIFY VALIDATION DATA
  • [00013] VERIFY VALIDATION DATA.
  • [00066] PROC ABORT
  • [00067] PROC MESSAGE
  • [00073] PROC NVFSCAD
  • [00074] PROC NVFTETC
  • [00075] PROC NVFTILP
  • [00076] PROC NVFTPSV
  • [00077] PROC NVFTPUV
  • [00078] PROC NVFTURT
  • [00079] PROC NVFTVAA
  • [00080] PROC NVFUMQE
  • [00081] PROC SSTAQE
  • [00082] FUNC XSFW C(10)
  • [00405] PROC MASKINPUT1)
  • [00406] MASKINPUT - OVERMASK INPUT LINE
  • [00410] MASKINPUT - OVERMASK INPUT LINE

Source Code

NVFTVVD.txt
  1. *DECK NVFTVVD
  2. USETEXT TEXTNVF
  3. USETEXT TEXTSS
  4. USETEXT TXSMNVF
  5. USETEXT TXTANVF
  6. USETEXT TXTAPSS
  7.  
  8. PROC NVFTVVD;
  9. # TITLE NVFTVVD - VERIFY VALIDATION DATA #
  10.  
  11. BEGIN # NVFTVVD #
  12. #
  13. ** NVFTVVD - VERIFY VALIDATION DATA.
  14. *
  15. * E. THAVIKULWAT 81/10/14
  16. *
  17. * THIS PROCEDURES' MAIN FUNCTION IS TO DETERMINE WHETHER OR NOT
  18. * USER VERIFICATION WAS SUCCESSFUL. IT IS CALLED INTO EXECUTION
  19. * BY PROCEDURE *NVFTDQE*.
  20. *
  21. * PROC NVFTVVD
  22. *
  23. * ENTRY:
  24. * WC IN *WCBUF*
  25. * ABH IN *ABHBUF*
  26. * VERIFICATION DATA IN *MSGBUF*
  27. *
  28. * EXIT:
  29. * PASSWORD OVERMASK IS ISSUED ON LOGIN FOR ASYNCHRONOUS
  30. * TERMINAL CLASSES AND ONE OF THE FOLLOWING:
  31. * 1) APPLICATION PROMPT ISSUED.
  32. * 2) CONNECTION SWITCHED TO APPROPRIATE APPLICATION.
  33. * 3) CONNECTION TERMINATED.
  34. * 4) PERSONAL IDENTIFIER PROMPT ISSUED.
  35. *
  36. * NOTES:
  37. * SHOULD A CONNECTION-BROKEN OCCUR PRIOR TO THIS, NO FURTHER
  38. * PROCESSING OF THE DATA IS DONE AND THE TERMINATING ROUTINE
  39. * IS CALLED. VERIFICATION IS SUCCESSFUL ONLY IF THE SECURITY
  40. * COUNT IS NOT EXHAUSTED, FAMILY NAME, USER NAME, PASSWORD, AND
  41. * PERSONAL ID ARE VALID, AND THE USER IS VALIDATED FOR AT LEAST
  42. * ONE APPLICATION.
  43. * IF THE TERMINAL CLASS IS 8 OR UNDER (ASYNCHRONOUS) BUT NOT A
  44. * IBM2741, THE TERMINAL INPUT LINE CONTAINING THE PASSWORD WILL
  45. * BE MASKED. SEE FURTHER NOTES IN INTERNAL PROCEDURE *MASKINPUT*.
  46. *
  47. * METHOD:
  48. * SEARCH PTAC TABLE FOR ENTRY THAT MATCHES ACN OF THIS REQUEST.
  49. * IF MATCH, INITIAL LOGIN, AND THE TERMINAL IS OF THE
  50. * ASYNCHRONOUS TERMINAL CLASS, ISSUE THE PASSWORD OVERMASK.
  51. * COPY THE VALIDATION DATA INTO THE PTAC ENTRY. IF
  52. * CONNECTION-BROKEN OCCURRED PRIOR TO THIS, CALL *NVFTETC* AND
  53. * EXIT. IF TERMINAL IS STILL CONNECTED, VERIFY VALIDATION DATA
  54. * AND ROUTE CONTROL TO THE APPROPRIATE ROUTINE. IF NO PTAC
  55. * ENTRY IS FOUND FOR THIS ACN, SET UP DECREMENT FAMILY COUNT
  56. * (73B) AND EXIT.
  57. #
  58.  
  59. #
  60. **** PROC NVFTVVD - XREF LIST.
  61. #
  62.  
  63. $BEGIN
  64. XREF
  65. BEGIN
  66. PROC ABORT; # ABORT JOB #
  67. PROC MESSAGE; # SEND MESSAGE TO SYSTEM AND USER DAYFILE #
  68. END
  69. $END
  70.  
  71. XREF
  72. BEGIN
  73. PROC NVFSCAD; # COMPLETE APPLICATION DEPARTURE #
  74. PROC NVFTETC; # END TERMINAL CONNECTION #
  75. PROC NVFTILP; # ISSUE LOGIN PROMPTS #
  76. PROC NVFTPSV; # PROCESS SUCCESSFUL VALIDATION #
  77. PROC NVFTPUV; # PROCESS UNSUCCESSFUL VALIDATION #
  78. PROC NVFTURT; # UPDATE *RAU* TABLE #
  79. PROC NVFTVAA; # VALIDATE USER'S RIGHT TO ACCESS APPL #
  80. PROC NVFUMQE; # TRANSFER TEXT QUEUE #
  81. PROC SSTAQE; # ACCEPT QUEUE ENTRY #
  82. FUNC XSFW C(10); # SPACE FILL WORD #
  83. END
  84.  
  85. *CALL TMSGNVF
  86.  
  87.  
  88. #
  89. ****
  90. #
  91. ITEM AS I; # SUBSCRIPT FOR ARRAY AST #
  92. ITEM ASENTRY I; # NUMBER OF AST ENTRIES #
  93. ITEM I I; # LOOP VARIABLE #
  94. ITEM J I; # LOOP VARIABLE #
  95. ITEM LNGTH I; # LENGTH OF MESSAGE #
  96. ITEM MATCH B; # EXIT LOOP VARIABLE #
  97. ITEM NENTRY I; # NUMBER OF ENTRIES IN TABLE #
  98. ITEM PRIAPP B; # PRIMARY APPLICATION INDICATOR #
  99. ITEM PT I; # SUBSCRIPT FOR ARRAY PTAC #
  100. ITEM PTTC I; # TERMINAL CLASS #
  101.  
  102. $BEGIN
  103. #
  104. * FOLLOWING ARRAY CONTAINS MESSAGE ISSUED TO THE DAYFILE UPON NOT
  105. * FINDING AN EXPECTED PTAC ENTRY.
  106. #
  107. ARRAY DAYMSG[00:00] S(4);
  108. BEGIN
  109. ITEM DAY$MSG1 C(00,00,27) = ["NVFTVVD - CANNOT FIND PTAC "];
  110. ITEM DAY$MSG2 C(02,42,05) = ["ENTRY"];
  111. END
  112.  
  113. $END
  114.  
  115. #
  116. * THE FOLLOWING ARRAY WILL BE USED AS TEMPORARY STORAGE OF THE
  117. * PERSONAL ID
  118. #
  119. ARRAY PIDENTRY[00:00] S(2);
  120. BEGIN
  121. ITEM PID$WRD1 U(00,00,60);
  122. ITEM PID$WRD2 U(01,00,60);
  123. ITEM PID$CHAR C(00,00,20);
  124. END
  125.  
  126. #
  127. * THE FOLLOWING BASED ARRAY POINTER POINTS TO THE FIRST WORD OF
  128. * THE VALIDATION DATA PORTION OF THE PTAC ENTRY.
  129. #
  130. BASED ARRAY BPTACVD[00:00] S(1);
  131. BEGIN
  132. ITEM BPT$WORD U(00,00,60); # FULL WORD REFERENCE #
  133. END
  134.  
  135. #
  136. * SEARCH PTAC TABLE FOR ENTRY THAT MATCHES ON ACN.
  137. #
  138. MATCH = FALSE;
  139. NENTRY = PTALNGTH / PTACSIZ$; # CALCULATE NUMBER OF ENTRIES #
  140. FOR PT = 0 STEP 1 WHILE (NOT MATCH AND PT LS NENTRY)
  141. DO
  142. BEGIN
  143. IF PTA$VCB[PT] EQ ABHADR[0]
  144. THEN # PTAC ENTRY FOUND #
  145. BEGIN
  146.  
  147. #
  148. * COPY VALIDATION DATA FROM *MSGBUF* TO PTAC ENTRY.
  149. #
  150. P<BPTACVD> = LOC(PTA$FWORD[PT]); # POINTS TO FAMILY WORD #
  151. FOR I = 0 STEP 1 UNTIL (WCB$WC[0] - 9)
  152. DO
  153. BEGIN
  154. BPT$WORD[I] = MSG$WORD[I];
  155. END
  156.  
  157. #
  158. * COPY CHARGE AND PROJECT DATA FROM *MSGBUF* TO PTA ENTRY
  159. #
  160.  
  161. J = I;
  162. P<BPTACVD> = LOC(PTA$CHGNUM[PT]); # POINTS TO CHARGE NUMBER #
  163. FOR I = 0 STEP 1 UNTIL 2
  164. DO
  165. BEGIN
  166. BPT$WORD[I] = MSG$WORD[J+I];
  167. END
  168.  
  169. #
  170. * COPY THE PERSONAL IDENTIFIER *MSGBUF* TO A TEMPORARY LOCATION AND
  171. * COPY THE PASSWORD EXPIRATION DATE FROM *MSGBUF* TO THE PTAC ENTRY.
  172. #
  173. J = J + I;
  174. PID$WRD1[0] = MSG$WORD[J];
  175. PID$WRD2[0] = MSG$WORD[J + 1];
  176. P<BPTACVD> = LOC(PTA$EXPDAT[PT]);
  177. BPT$WORD[0] = MSG$WORD[J + 2];
  178. #
  179. * IF THIS IS A USER LOGIN, TERMINAL CLASS IS ANY ASYNCHRO-
  180. * NEOUS TYPE OTHER THAN TC2741, AND NEITHER A MANDATORY
  181. * NOR A PRIMARY USER NAME HAS BEEN SPECIFIED IN NDL FOR
  182. * THIS TERMINAL, THEN WE NEED TO SEND OUT A PASSWORD MASK.
  183. #
  184. PTTC = PTA$TC[PT];
  185. IF (PTA$IUVF[PT]) AND (PTTC LQ TCT4014$) AND (PTTC NQ TC2741$)
  186. AND (PTA$USRIND[PT] NQ MNDATRY$)
  187. AND (PTA$USRIND[PT] NQ PRIMARY$)
  188. AND (NOT PTA$WSV[PT])
  189. THEN
  190. MASKINPUT(PTA$PROMPT[PT] - 1);
  191. #
  192. * IF THE PERSONAL IDENTIFIER IS NOT REQUIRED FOR THE USER, BUT IT
  193. * WAS ASSUMED TO HAVE BEEN ENTERED, THE ENTRY WAS ACTUALLY THE
  194. * APPLICATION ENTRY. THE ENTRY WILL BE MOVED TO THE APPLICATION
  195. * PORTION OF THE PTAC TABLE AND THE ZERO FILLED ENTRY WILL BE
  196. * CHANGED TO BE A BLANK FILLED ENTRY.
  197. #
  198. IF (PTA$COPI[PT] OR (PID$CHAR[0] EQ NULL$))
  199. AND PTA$VPIDF[PT]
  200. THEN
  201. BEGIN
  202. PTA$VLTAPP[PT] = XSFW(PTA$APPPID[PT]);
  203. PTA$PID[PT] = NULL$;
  204. PTA$VPIDF[PT] = FALSE; # NO VOLUNTEERED PERSONAL ID #
  205. PTA$VAF[PT] = TRUE; # A VOLUNTEERED APPL EXISTS #
  206. END
  207.  
  208. #
  209. * IF CONNECTION-BROKEN HAS OCCURRED, TERMINATE CONNECTION.
  210. * OTHERWISE, CHECK VALIDATION DATA AND ROUTE CONTROL TO THE
  211. * APPROPRIATE ROUTINES.
  212. #
  213. IF PTA$STATE[PT] EQ PTACST"CONBROK"
  214. THEN # CONNECTION BROKEN OCCURRED #
  215. BEGIN
  216. #
  217. * IF THIS IS A LOAN REQUEST, LOCATE THE PRIMARY APPL *AST*
  218. * ENTRY AND DECREMENT THE NUMBER OF RESERVED CONNECTIONS.
  219. * UPDATE THE *RAU* TABLE IF NECESSARY.
  220. #
  221. IF PTA$LRC[PT] GQ RCRC"LSA"
  222. THEN
  223. BEGIN
  224. PRIAPP = TRUE;
  225. NVFTURT(PTA$VCB[0],PT,PRIAPP);
  226.  
  227. ASENTRY = ASTLNGTH/ASTSIZ$;
  228. FOR AS = 0 STEP 1 WHILE
  229. ((AS LS ASENTRY) AND
  230. (AST$AN[AS] NQ PTA$PRIAN[PT]))
  231. DO
  232. BEGIN
  233. END
  234. IF AS LS ASENTRY
  235. THEN
  236. BEGIN
  237. AST$RACN[AS] = AST$RACN[AS] - 1;
  238. NVFSCAD(AS);
  239. END
  240. END
  241. NVFTETC(PT); # END TERMINAL CONNECTION #
  242. END
  243. ELSE # TERMINAL STILL CONNECTED #
  244. BEGIN
  245. #
  246. * IF DEVICE ERROR FLAG IN PTAC IS SET, SEND "FAMILY NOT AVAILABLE,
  247. * TRY AGAIN LATER" MESSAGE TO TERMINAL AND END THE CONNECTION.
  248. #
  249. IF PTA$DVERR[PT]
  250. THEN
  251. BEGIN
  252. NVFUMQE(P<CTQ>,FNABUF[0],APPTTX$,PTA$ACN[PT],LMSG50$);
  253. NVFTETC(PT); # END TERMINAL CONNECTION #
  254. RETURN;
  255. END
  256.  
  257. IF (PTA$SCINV[PT] EQ 0)
  258. AND ((PTA$AAVW[PT] LAN VAPMASK) NQ 0)
  259. THEN # VALID LOGIN #
  260. BEGIN
  261. IF (NOT PTA$WSV[PT])
  262. THEN
  263. BEGIN
  264.  
  265. #
  266. * THIS IS A ORIGINAL VALIDATION AND EVERYTHING IS VALID.
  267. * VALIDATE THE PERSONAL ID IF IT IS REQUIRED AND HAS BEEN ENTERED.
  268. * IF IT HAS NOT BEEN VOLUNTEERED PROMPT THE USER FOR IT.
  269. #
  270.  
  271. IF (NOT PTA$COPI[PT]) AND (PID$CHAR[0] NQ NULL$)
  272. THEN # PERSONAL IDENTIFIER REQUIRED #
  273. BEGIN
  274. IF PTA$VPIDF[PT]
  275. THEN # PERSONAL ID VOLUNTEERED #
  276. BEGIN
  277. IF (PID$CHAR[0] NQ PTA$PID[PT])
  278. THEN # PERSONAL ID ENTERED INVALID #
  279. BEGIN
  280. PTA$INVPID[PT] = TRUE;
  281. NVFTPUV(PT); # PROCESS UNSUCCESSFUL VALIDATN #
  282.  
  283. RETURN; # EXIT #
  284. END
  285. END
  286. ELSE # PERSONAL ID NOT VOLUNTEERED #
  287. BEGIN
  288. PTA$PID[PT] = PID$CHAR[0];
  289. PTA$PROMPT[PT] = AWTPID$;
  290. NVFTILP(PT); # ISSUE PERSONAL ID LOGIN PROMPT#
  291.  
  292. RETURN; # EXIT #
  293. END
  294. END
  295. IF PID$CHAR[0] NQ NULL$
  296. THEN # SAVE PID FOR ACCOUNT MESSAGE #
  297. PTA$PID[PT] = PID$CHAR[0];
  298. NVFTPSV(PT); # PROCESS SUCCESSFUL VALIDATION #
  299. IF PTA$STATE[PT] EQ PTACST"AWTVAA"
  300. THEN # NEED TO VALIDATE #
  301. BEGIN
  302. NVFTVAA(PT); # VALIDATE RIGHT TO ACCESS APPL #
  303. END
  304. END
  305. ELSE
  306.  
  307. #
  308. * THIS IS A REVALIDATION. FAMILY AND USER NAME ARE GOOD,
  309. * BUT PASSWORD IS INVALID.
  310. #
  311.  
  312. BEGIN
  313. PTA$INVLF[PT]=TRUE;
  314. PTA$UIDX[PT] = 0; # CLEAR USER INDEX FIELD #
  315. PTA$WSV[PT]=FALSE;
  316. IF ((NOT PTA$COPI[PT]) AND (PID$CHAR[0] NQ NULL$) AND
  317. (PTA$AAWC[PT] NQ NULL$) AND (NOT PTA$VPIDF[PT]))
  318. THEN # INVALID PASSWORD,PID REQUIRED #
  319. BEGIN
  320. PTA$PROMPT[PT] = AWTPID$;
  321. NVFTILP(PT); # ISSUE PERSONAL ID LOGIN PROMPT#
  322. END
  323. ELSE # PID NOT REQUIRED #
  324. BEGIN
  325. NVFTPUV(PT); # PROCESS UNSUCCESSFUL VALIDATIO#
  326. RETURN;
  327. END
  328. END
  329. END
  330. ELSE # INVALID LOGIN #
  331. BEGIN
  332. IF (NOT PTA$WSV[PT])
  333. THEN
  334. BEGIN
  335.  
  336. #
  337. * THIS IS A ORIGINAL VALIDATION, SINCE IT IS A INVALID LOGIN, WE NEED
  338. * TO ISSUE CPM56 REQUEST TO REVALIDATE FAMILY AND USER NAME AGAIN.
  339. #
  340.  
  341. P<CRQBUF>=LOC(MSGBUF[0])+((NMSGBUF$+1)/2);
  342. CRQ$FCWORD[0]=0;
  343. CRQ$FWORD[0]=0;
  344. CRQ$PWORD[0]=0;
  345. CRQ$UWORD[0]=0;
  346. CRQ$FC[0]=CPM56B$;
  347. CRQ$ACN[0]=PTA$VCB[PT];
  348. CRQ$FNAM[0]=PTA$FNAM[PT];
  349. CRQ$VPWF[0]=TRUE; # PASSWORD NOT TO BE VALIDATED #
  350. CRQ$IFCTF[0]=FALSE; # DO NOT INCREMENT FAMILY COUNT #
  351. CRQ$RETPID[0] = TRUE; # RETURN THE PERSONAL IDENTIFIER#
  352. CRQ$UNUM[0]=PTA$UNUM[PT];
  353. CRQ$QNUM[0]=LOC(P<VDATAQ>);
  354. LNGTH=CRQVSIZ$*10;
  355. NVFUMQE(P<CPMRQ>,CRQBUF[0],APPTTX$,0,LNGTH);
  356. PTA$STATE[PT]=PTACST"AWTVAL";
  357. PTA$PWEXPF[PT]=TRUE; # DO NOT REISSUE PW EXP MESSAGE #
  358. PTA$WSV[PT]=TRUE; # WAIT FOR SECOND VALIDATION #
  359. RETURN;
  360. END
  361. ELSE
  362.  
  363. #
  364. * THIS IS A REVALIDATAION. FAMILY AND USER NAME ARE NOT
  365. * VALID. SET UP THE FLAG IN ORDER NOT TO ISSUE FAMILY AND USER
  366. * NAME IN AN "ABER" ACCOUNTING MESSAGE, SINCE THE INVALID USER
  367. * NAME COULD PROBABLY BE A PASSWORD.
  368. #
  369.  
  370. BEGIN
  371. PTA$WSV[PT]=FALSE;
  372. PTA$IFU[PT]=TRUE; # BAD FAMILY/USER NAME PACK #
  373. NVFTPUV(PT); # PROCESS UNSUCCESSFUL VALIDATN #
  374. END
  375. END
  376. END
  377.  
  378. MATCH = TRUE;
  379. END
  380. END # END FOR PT LOOP #
  381.  
  382. #
  383. * IF NO PTAC ENTRY COULD BE FOUND, DECREMENT FAMILY COUNT AND EXIT.
  384. #
  385. IF NOT MATCH
  386. THEN # NO PTAC ENTRY FOUND #
  387. BEGIN
  388. $BEGIN
  389. MESSAGE(DAYMSG,0); # MSG TO SYSTEM AND USR DAYFILE #
  390. ABORT;
  391. $END
  392.  
  393. P<CRQBUF> = LOC(MSGBUF[0]) + ((NMSGBUF$ + 1) / 2);
  394. CRQ$FCWORD[0] = 0;
  395. CRQ$FWORD[0] = 0;
  396. CRQ$FC[0] = CPM73B$;
  397. CRQ$ACN[0] = 0;
  398. CRQ$FNAM[0] = MSG$CHAR[0];
  399.  
  400. LNGTH = CRQDSIZ$ * 10;
  401. NVFUMQE(P<CPMRQ>,CRQBUF[0],APPTTX$,0,LNGTH);
  402. END
  403.  
  404. CONTROL EJECT;
  405. PROC MASKINPUT((PROMPT));
  406. # TITLE MASKINPUT - OVERMASK INPUT LINE #
  407.  
  408. BEGIN # MASKINPUT #
  409. #
  410. ** MASKINPUT - OVERMASK INPUT LINE
  411. *
  412. * G. A. HUGHES 86/02/17
  413. *
  414. * THIS PROCEDURE IS INTERNAL TO PROCEDURE *NVFTVVD* AND IS CALLED
  415. * ONLY BY *NVFTVVD*. IT'S MAIN FUNCTION IS TO OVERMASK THE INPUT
  416. * LINE CONTAINING THE PASSWORD.
  417. *
  418. * PROC MASKINPUT
  419. *
  420. * ENTRY:
  421. * *PROMPT* CONTAINS THE A LABEL POINTER TO LAST PROMPT ISSUED.
  422. *
  423. * EXIT:
  424. * MASK BUILT AND ISSUED TO THE QUEUE.
  425. *
  426. * NOTES:
  427. * 1) IF THE PROMPT IS A PASSWORD PROMPT AND THE TERMINAL IS A M33,
  428. * A 2741, OR A T4014, THEN THE MASK IS BUILT WITHOUT A PROMPT.
  429. * 2) IN ALL OTHER CASES THE PROMPT WILL BEGIN EACH CHARACTER OF
  430. * THE MASK.
  431. * 3) THE FIRST TWO CHARACTERS IN THE SECOND WORD OF THE PROMPT
  432. * MUST REMAIN BLANKS TO RETAIN THE ORIGINAL SPACING.
  433. *
  434. * METHOD:
  435. * DETERMINE HOW MANY CM WORDS EACH MASK LINE WILL NEED. INSERT
  436. * THE PROMPT AND THE MASK CHARACTERS INTO THE BUFFER. BEFORE
  437. * EACH LINE OF THE MASK A FORMAT EFFECTOR IS INSERTED TO SET THE
  438. * CURSOR BACK TO THE BEGINNING OF THE LINE. A LINE FEED FORMAT
  439. * EFFECTOR IS ISSUED FOLLOWING THE MASK AND CURSOR POSITIONING
  440. * IS REINSTATED.
  441. #
  442.  
  443. DEF NUMBERMASK #4#; # NUMBER OF SEPARATE MASKS TO GENERATE #
  444. DEF BEGIN$LINE #"+"#; # POSITION TO START OF CURRENT LINE FE #
  445. DEF NEW$LINE #" "#; # SPACE ONE LINE FORMAT EFFECTOR #
  446.  
  447. ITEM IDX I; # INDEX FOR SECOND HALF OF *MSGBUF* #
  448. ITEM MASK$CHAR I; # NUMBER OF CHAR BEYOND WORD BOUNDARY #
  449. ITEM MASK$WORD I; # NUMBER OF WORDS TO MASK #
  450. ITEM MSK I; # MASK NUMBER LOOP COUNTER #
  451. ITEM PROMPT I; # LAST PROMPT ISSUED #
  452. ITEM WD I; # *MSGBUF* LOOP COUNTER #
  453. ITEM WORD$NUMBER I; # CURRENT WORD OF MASK BEING BUILT #
  454.  
  455. #
  456. * THE FOLLOWING BUFFER IS USED TO ISSUE A LINE FEED TO A TERMINAL
  457. * WHEN THE TERMINAL INPUT DOES NOT CONTAIN A PASSWORD.
  458. #
  459. ARRAY NEWLINE[00:00] S(1);
  460. BEGIN
  461. ITEM LINEFEED C(00,00,01) = [" "];
  462. END
  463.  
  464. #
  465. * THE FOLLOWING ARRAY DEFINES THE CHARACTERS TO BE USED IN BUILDING
  466. * THE OVERMASK.
  467. #
  468. ARRAY DEFMASK[00:03] S(6);
  469. BEGIN
  470. ITEM DEF$WORD C(00,00,60) = # FULL WORD REFERENCE #
  471. ["HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH",
  472. "IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
  473. "############################################################",
  474. " "];
  475. END
  476.  
  477. #
  478. * THE FOLLOWING BASED ARRAY POINTS TO THE MASK BEING BUILT.
  479. #
  480.  
  481. BASED ARRAY BLDMASK[00:00] S(1);
  482. BEGIN
  483. ITEM BLD$WRD1 C(00,00,10); # SINGLE WORD REFERENCE #
  484. END
  485.  
  486. #
  487. * THE FOLLOWING BASED ARRAY POINTS TO A TWO WORD FIELD FOR THE MASK
  488. #
  489.  
  490. BASED ARRAY BLDMASK2[00:00] S(2);
  491. BEGIN
  492. ITEM BLD$WRD2 C(00,00,20); # DOUBLE WORD REFERENCE #
  493. END
  494.  
  495. #
  496. * THE FOLLOWING BASED ARRAY POINTS TO A SEVEN WORD FIELD FOR THE
  497. * MASK.
  498. #
  499.  
  500. BASED ARRAY BLDMASK7[00:00] S(7);
  501. BEGIN
  502. ITEM BLD$WRD7 C(00,00,70); # SEVEN WORD REFERENCE #
  503. END
  504.  
  505. SWITCH MPRMTSWT
  506. MLLAPPL, # LABEL FOR APPLICATION PROMPT #
  507. MLLPRID, # LABEL FOR PERSONAL ID PROMPT #
  508. MLLPWRD, # LABEL FOR PASSWORD PROMPT #
  509. MLLUSER, # LABEL FOR USER PROMPT #
  510. MLLFAM; # LABEL FOR FAMILY PROMPT #
  511.  
  512. #
  513. * CLEAR OUT GOING SUPERVISORY MESSAGE BUF (SECOND HALF OF *MSGBUF*)
  514. #
  515.  
  516. IDX = (NMSGBUF$ + 1) / 2; # INDEX TO 2ND HALF OF *MSGBUF* #
  517. FOR WD = IDX STEP 1 UNTIL NMSGBUF$
  518. DO
  519. BEGIN
  520. MSG$WORD[WD] = 0;
  521. END
  522.  
  523. P<BLDMASK> = LOC(MSGBUF[0]) + ((NMSGBUF$ + 1) / 2);
  524. MASK$CHAR = 60;
  525.  
  526. MASK$WORD = (MASK$CHAR / 10) + 1; # NUMBER OF WORDS IN INPUT #
  527. WORD$NUMBER = 0;
  528. IF ((PTTC EQ TCM33$) OR (PTTC EQ TCT4014$))
  529. AND (PTA$PROMPT[PT] EQ AWTPWD$)
  530. THEN # PASSWORD NOT ON PROMPT LINE #
  531. BEGIN
  532. IF (MASK$CHAR - ((MASK$WORD - 1) * 10) GQ 8)
  533. THEN # INSURE ZERO BYTE, INCLUDE FE #
  534. MASK$WORD = MASK$WORD + 1;
  535.  
  536. FOR MSK = 0 STEP 1 UNTIL (NUMBERMASK - 1)
  537. DO
  538. BEGIN
  539. C<0,1>BLD$WRD1[WORD$NUMBER] = BEGIN$LINE;
  540. C<1,MASK$CHAR>BLD$WRD1[WORD$NUMBER] = DEF$WORD[MSK];
  541. WORD$NUMBER = WORD$NUMBER + MASK$WORD;
  542. END
  543. END
  544. ELSE # PASSWRD ENTERD ON PROMPT LINE #
  545. BEGIN
  546. IF (MASK$CHAR - ((MASK$WORD - 1) * 10) GQ 7)
  547. THEN # INCREMENT FOR ZERO BYTE #
  548. MASK$WORD = MASK$WORD + 1;
  549.  
  550. FOR MSK = 0 STEP 1 UNTIL (NUMBERMASK - 1)
  551. DO
  552. BEGIN
  553. P<BLDMASK2> = LOC(BLD$WRD1[WORD$NUMBER]);
  554. GOTO MPRMTSWT[PROMPT];
  555.  
  556. MLLFAM:
  557. C<0,12>BLD$WRD2[0] = FAM$PRMT;
  558. GOTO ENDMASK;
  559.  
  560. MLLUSER:
  561. C<0,12>BLD$WRD2[0] = USR$PRMT;
  562. GOTO ENDMASK;
  563.  
  564. MLLPWRD:
  565. C<0,12>BLD$WRD2[0] = PWD$PRMT;
  566. GOTO ENDMASK;
  567.  
  568. MLLPRID:
  569. MLLAPPL:
  570. ENDMASK: # END OF CASE #
  571. C<0,1>BLD$WRD2[0] = BEGIN$LINE;
  572. WORD$NUMBER = WORD$NUMBER + 1;
  573. C<2,MASK$CHAR>BLD$WRD1[WORD$NUMBER] = DEF$WORD[MSK];
  574. WORD$NUMBER = WORD$NUMBER + MASK$WORD;
  575. END
  576. END
  577.  
  578. #
  579. * ADD A LINE FEED TO THE GENERATED OVERMASK, QUEUE THE BUFFER,
  580. * AND TURN CURSOR POSITIONING BACK ON.
  581. #
  582. C<0,1>BLD$WRD1[WORD$NUMBER] = NEW$LINE;
  583. WORD$NUMBER = WORD$NUMBER + 1; # INCREMENT FOR ACTUAL COUNT #
  584. WCB$WC[1] = WORD$NUMBER + 2;
  585. ABHWORD[1] =0;
  586. ABHABT[1] = APPTTX$;
  587. ABHADR[1] = PTA$ACN[PT];
  588. ABHACT[1] = CT6DISPLAY;
  589. ABHTLC[1] = WORD$NUMBER * 10;
  590. SSTAQE(P<CTQ>,WCBUF[1],ABH[1],BLDMASK[0]);
  591. END # MASKINPUT #
  592.  
  593. END # END NVFTVVD #
  594.  
  595. TERM
1)
PROMPT
cdc/nos2.source/nam5871/nvftvvd.txt ยท Last modified: 2023/08/05 17:23 by Site Administrator