User Tools

Site Tools


cdc:nos2.source:opl871:ssalter

SSALTER

Table Of Contents

  • [00001] PRGM SSALTER
  • [00002] SSALTER - INITIALIZES *SSALTER* UTILITY.
  • [00007] INITIALIZES *SSALTER* UTILITY.
  • [00025] PROC ABORT
  • [00026] PROC ALTKINP
  • [00027] PROC ALTKINT
  • [00029] PROC BZFILL
  • [00030] PROC GETFAM
  • [00031] PROC GETPFP
  • [00032] PROC GETSPS
  • [00033] PROC MESSAGE
  • [00034] PROC RECALL
  • [00035] PROC RESTPFP
  • [00037] PROC SETPFP
  • [00038] PROC SETQP
  • [00039] PROC SETPR
  • [00040] PROC UCPREQ
  • [00041] PROC XARG
  • [00285] PROC ALTKINP( INDEX, ORDINAL, INITIALIZE )
  • [00287] ALTKINP - KEYBOARD INPUT.
  • [00292] ALTKINP - KEYBOARD INPUT.
  • [00329] FUNC XCDD
  • [00330] PROC CHKMODE
  • [00331] PROC CUCOMM
  • [00332] PROC DISPCU
  • [00333] PROC DISPSM
  • [00334] PROC KCLR
  • [00335] PROC MESSAGE
  • [00336] PROC POKEDIS
  • [00337] PROC RECALL
  • [00338] PROC UCPREQ
  • [00339] FUNC XDXB I
  • [01075] PROC ALTKINT ( INITIALIZE )
  • [01077] ALTKINT - *K* DISPLAY INITIALIZATION.
  • [01082] ALTKINT - *K* DISPLAY INTIALIZATION.
  • [01106] PROC CONSOLE
  • [01107] PROC MESSAGE
  • [01174] PROC CHKMODE ( WORD, FIELD, MODE, FLAG, BITNUM )
  • [01176] BITNUM - CHECK EXISTING MODE OF PATH/NODE IN M860
  • [01215] PROC MESSAGE
  • [01216] PROC RESTPFP
  • [01295] PROC DISPCU ( INDEX, ORDINAL )
  • [01297] DISPCU - DISPLAY *SM* DISPLAY
  • [01322] PROC KDISCIF
  • [01323] PROC MESSAGE
  • [01324] PROC POKEDIS
  • [01325] PROC RESTPFP
  • [01327] PROC UCPREQ
  • [01328] FUNC XCOD C(10)
  • [01330] FUNC XDXB
  • [01747] PROC DISPSM ( INDEX , INITIALIZE )
  • [01749] DISPSM - DISPLAY *SM* INFORMATION
  • [01773] PROC MESSAGE
  • [01774] PROC POKEDIS
  • [01775] PROC RESTPFP
  • [01777] PROC UCPREQ
  • [01778] FUNC XCDD C(10)
  • [01779] FUNC XCOD C(10)
  • [02219] PROC KDISCIF ( INDEX, CIFORD )
  • [02220] KDISCIF - DISPLAY CIF DATA FROM UDT.
  • [02225] KDIXCIF - DISPLAY CIF DATA FROM UDT.
  • [02245] PROC POKEDIS
  • [02247] PROC KDISDTX
  • [02376] PROC KDISDIF ( INDEX )
  • [02377] KDISDIF - DISPLAY DIF DATA FROM UDT.
  • [02382] KDISDIF - DISPLAY DTI/DTO DATA FROM UDT.
  • [02400] PROC KDISDRC
  • [02401] PROC POKEDIS
  • [02473] PROC KDISDRC ( INDEX )
  • [02474] KDISDRC - DISPLAY DRC DATA FROM UDT.
  • [02479] KDISDRC - DISPLAY DRC DATA FROM UDT.
  • [02497] PROC POKEDIS
  • [02499] FUNC XCDD C(10)
  • [02831] PROC KDISDTX ( INDEX )
  • [02832] KDISDTX - DISPLAY DTI/DTO DATA FROM UDT.
  • [02837] KDISDTX - DISPLAY DTI/DTO DATA FROM UDT.
  • [02855] PROC POKEDIS
  • [02857] PROC KDISDIF
  • [02992] PROC POKEDIS ( LINE, CHAR, COUNT, VALUE )
  • [02994] POKEDIS - SET VALUE IN DISPLAY.
  • [02999] POKEDIS - SET CHARACTER VALUE IN DISPLAY.
  • [03048] PROC UCPREQ((REQTYPE),(REQCODE),RESPCODE)
  • [03049] UCPREQ - ISSUES TYPE 1 OR 5 UCP REQUEST TO EXEC.
  • [03054] UCPREQ - ISSUES A TYPE 1 OR 5 UCP REQUEST TO EXEC.
  • [03084] PROC ABORT
  • [03085] PROC CALLSS
  • [03086] PROC MESSAGE
  • [03087] PROC RESTPFP
  • [03089] PROC ZFILL

Source Code

SSALTER.txt
  1. PRGM SSALTER;
  2. # TITLE SSALTER - INITIALIZES *SSALTER* UTILITY. #
  3.  
  4. BEGIN # SSALTER #
  5.  
  6. #
  7. *** SSALTER - INITIALIZES *SSALTER* UTILITY.
  8. *
  9. * THIS PROGRAM INITIALIZES *SSALTER* UTILITY BY
  10. * CALLING THE FIRST *SSALTER* *K* DISPLAY AND
  11. * PROVIDING THE INTERFACE BETWEEN THE CONSOLE
  12. * OPERATOR AND *SSEXEC* IN MAINTAINING THE
  13. * M860 HARDWARE CONFIGURATION.
  14. *
  15. *
  16. * COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
  17. #
  18.  
  19. #
  20. **** PRGM SSALTER - XREF LIST BEGIN.
  21. #
  22.  
  23. XREF
  24. BEGIN
  25. PROC ABORT; # CALLS *ABORT* MACRO #
  26. PROC ALTKINP; # DIGEST KEYBOARD INPUT #
  27. PROC ALTKINT; # *SSALTER* *K* DISPLAY
  28.   INITIALIZER #
  29. PROC BZFILL; # BLANK OR ZERO FILLS A BUFFER #
  30. PROC GETFAM; # GET DEFAULT FAMILY #
  31. PROC GETPFP; # GET USER INDEX AND FAMILY #
  32. PROC GETSPS; # GET SYSTEM ORIGIN STATUS #
  33. PROC MESSAGE; # DISPLAYS A MESSAGE #
  34. PROC RECALL; # PUT PROGRAM INTO RECALL #
  35. PROC RESTPFP; # RESTORE USER-S *PFP* AND ABORT
  36.   OR RETURN #
  37. PROC SETPFP; # SET FAMILY AND USER INDEX #
  38. PROC SETQP; # SET QUEUE PRIORITY #
  39. PROC SETPR; # SET CPU PRIORITY #
  40. PROC UCPREQ; # ISSUE TYPE 1 OR 5 UCP REQUEST #
  41. PROC XARG; # USED TO SATISFY SSJ= EXTERNAL #
  42. END
  43.  
  44. #
  45. **** PRGM SSALTER - XREF LIST END.
  46. #
  47.  
  48. #
  49. * DAYFILE MESSAGES.
  50. #
  51.  
  52. DEF MSG1 #" SSALTER - SYNTAX ERROR."#;
  53. DEF MSG2 #" SSALTER COMPLETE."#;
  54. DEF MSG3 #" SSALTER - MUST BE SYSTEM ORIGIN."#;
  55. DEF MSG4 #" SSALTER - CANNOT CONNECT TO SSEXEC."#;
  56. DEF MSG5 #" SSALTER - INCORRECT RESPONSE FROM SSEXEC."#;
  57.  
  58. #
  59. * MISCELLAEOUS DEFINITIONS
  60. #
  61.  
  62. DEF RSLEN #1#; # RETURN STATUS WORD LENGTH #
  63. DEF LISTCON #0#; # DO NOT LIST COMDECKS #
  64.  
  65. CONTROL PRESET;
  66. *CALL COMBFAS
  67. *CALL COMBBZF
  68. *CALL COMBCPR
  69. *CALL COMBPFP
  70. *CALL COMBTDM
  71. *CALL COMBUCR
  72. *CALL COMSPFM
  73. *CALL COMTALT
  74.  
  75. ITEM ARGLIST I; # ADDRESS OF ARGUMENT TABLE #
  76. ITEM DEFORD I; # DEFAULT FAMILY ORDINAL #
  77. ITEM FLAG I; # ERROR STATUS #
  78. ITEM I I; # LOOP COUNTER #
  79. ITEM INDX I; # INDEX VARIABLE #
  80. ITEM INITIALIZE B; # STATUS OF *SSEXEC* CALL #
  81. ITEM KBCUEST C(3); # EST ORDINAL OF REQUESTED CU #
  82. ITEM LINK I; # LINKED FAMILY ORDINAL #
  83. ITEM LOOPC B; # LOOP CONTROL #
  84. ITEM NUM I; # NUMBER OF FAMILIES #
  85. ITEM OPTION I; # OPTION TO SKIP PROGRAM NAME #
  86. ITEM RESPCODE I; # RESPONSE FROM EXEC #
  87.  
  88. ARRAY CALL$SS [0:0] P(CPRLEN);; # CALLSS PARAMETER BLOCK #
  89. ARRAY ALMSG[0:0] P(4);
  90. BEGIN
  91. ITEM ALMSG$LN C(00,00,39); # MESSAGE LINE #
  92. ITEM ALMSG$TERM U(03,48,12) = [0]; # ZERO TERMINATOR #
  93. END
  94.  
  95. ARRAY SPSSTAT [0:0] S(RSLEN);
  96. BEGIN
  97. ITEM SPS$STATUS U(00,48,12); # RETURN STATUS #
  98. END
  99.  
  100. CONTROL EJECT;
  101.  
  102. #
  103. * CALL *XARG* TO ALLOW SSJ= ENTRY POINT TO BE SATISFIED.
  104. #
  105.  
  106. XARG(ARGLIST,OPTION,FLAG);
  107.  
  108. #
  109. * GET SPECIAL SYSTEM PRIVELEDGES
  110. #
  111.  
  112. GETSPS ( SPSSTAT );
  113. IF SPS$STATUS NQ 0
  114. THEN
  115. BEGIN
  116. ALMSG$LN[0] = MSG3;
  117. MESSAGE(ALMSG[0],SYSUDF1);
  118. ABORT;
  119. END
  120.  
  121.  
  122. #
  123. * GET SUBSYSTEM QUEUE PRIORITY.
  124. #
  125.  
  126. SETQP( -1 );
  127.  
  128. #
  129. * GET THE SAME CPU PRIORITY AS *SSEXEC*.
  130. #
  131.  
  132. SETPR;
  133.  
  134. #
  135. * SAVE THE USER-S CURRENT FAMILY AND USER INDEX IN COMMON.
  136. #
  137.  
  138. GETPFP(PFP[0]);
  139. USER$FAM[0] = PFP$FAM[0];
  140. USER$UI[0] = PFP$UI[0];
  141.  
  142. #
  143. * SET UP DEFAULT FAMILY AND SUBSYSTEM ID
  144. #
  145.  
  146. SSID$AL = ATAS;
  147. GETFAM(FAMT,NUM,LINK,DEFORD,SSID$AL);
  148.  
  149. #
  150. * SET REQUESTOR ID TO *SSALTER*
  151. #
  152.  
  153. REQID$AL = REQNAME"RQIALTER";
  154.  
  155. #
  156. * ESTABLISH LONG-TERM CONNECT WITH *SSEXEC*
  157. #
  158.  
  159. P<CPR> = LOC(CALL$SS[0]);
  160. UCPREQ ( TYP"TYP1", REQTYP1"CONNECT", RESPCODE );
  161. IF RESPCODE NQ RESPTYP1"OK1"
  162. THEN # CONNECT NOT DONE #
  163. BEGIN
  164. ALTMSG$LN[0] = MSG4;
  165. MESSAGE(ALTMSG[0],SYSUDF1);
  166. RESTPFP(PFP$ABORT); # RESTORE USER-S *PFP* AND ABORT #
  167. END
  168.  
  169. UCPREQ(TYP"TYP5",REQTYP5"SSA$PUDT",RESPCODE);
  170. IF ( RESPCODE NQ RESPTYP5"OK5" ) ##
  171. AND ( RESPCODE NQ RESPTYP5"SSA$OK" )
  172. THEN
  173. BEGIN # PROCESS INCORRECT RESPONSE #
  174. UCPREQ ( TYP"TYP1", REQTYP1"DISCONNECT", RESPCODE );
  175. ALTMSG$LN[0] = MSG5;
  176. MESSAGE (ALTMSG[0],SYSUDF1);
  177. RESTPFP(PFP$ABORT);
  178. END # PROCESS INCORRECT RESPONSE #
  179.  
  180.  
  181. #
  182. * SET UP INITIALIZATION STATUS
  183. #
  184.  
  185. INITIALIZE = RESPCODE EQ RESPTYP5"SSA$OK";
  186.  
  187. #
  188. * INITIALIZE *K* DISPLAY
  189. #
  190.  
  191. ALTKINT ( INITIALIZE );
  192.  
  193. #
  194. * WAIT FOR OPERATOR INPUT
  195. #
  196.  
  197. COMMAND:
  198.  
  199. LOOPC = FALSE;
  200. SLOWFOR I = 0 WHILE ( NOT LOOPC )
  201. DO
  202. BEGIN # ISSUE RECALL REQUESTS #
  203.  
  204. RECALL(0);
  205.  
  206. IF KB$AL$CLEAR[0] NQ 0
  207. THEN
  208. BEGIN
  209. LOOPC = TRUE;
  210. KREQCLEARAL = TRUE;
  211. MESSAGE ( BZEROES$AL, LINE2 );
  212. KL$AL$SUBL1[LF$AL$KBREJ] = " ";
  213. TEST I;
  214. END
  215.  
  216. TEST I;
  217. END # ISSUE RECALL REQUESTS #
  218.  
  219. #
  220. * PROCESS KEYBOARD INPUTS.
  221. * CHECK FOR *STOP*, *END*, *CU*, OR *SM*.
  222. #
  223.  
  224. IF ( C<0,3>KB$AL$SCAN[0] EQ ALTK$END ) ##
  225. OR ( C<0,4>KB$AL$SCAN[0] EQ ALTK$STOP )
  226. THEN
  227. BEGIN
  228. GOTO FINISHED;
  229. END
  230.  
  231. IF ( C<0,2>KB$AL$SCAN[0] NQ ALTK$SM ) ##
  232. AND ( C<0,2>KB$AL$SCAN[0] NQ ALTK$CU )
  233. THEN
  234. BEGIN
  235. KL$AL$SUBL1[LF$AL$KBREJ] = "*** REJECT ***";
  236. KB$AL$CLEAR[0] = 0;
  237. GOTO COMMAND; # WAIT FOR NEW OPERATOR INPUT #
  238. END
  239.  
  240. KL$AL$SUBL1[LF$AL$KBREJ] = " "; # CLEAR REJECT LINE #
  241.  
  242. #
  243. * SET UP COMMAND INDEX
  244. #
  245.  
  246. IF C<0,2>KB$AL$SCAN[0] EQ ALTK$SM
  247. THEN
  248. BEGIN
  249. INDX = 1;
  250. END
  251.  
  252. IF C<0,2>KB$AL$SCAN[0] EQ ALTK$CU
  253. THEN
  254. BEGIN
  255. INDX = 2;
  256. KBCUEST = C<2,3>KB$AL$SCAN[0];
  257. END
  258.  
  259. KB$AL$CLEAR = 0;
  260.  
  261.  
  262. ALTKINP( INDX, KBCUEST, INITIALIZE );
  263.  
  264. KB$AL$CLEAR[0] = 0;
  265.  
  266. ALTKINT ( INITIALIZE );
  267.  
  268. GOTO COMMAND;
  269.  
  270. FINISHED:
  271.  
  272. #
  273. * DISCONNECT FROM *SSEXEC*
  274. #
  275.  
  276. UCPREQ ( TYP"TYP1", REQTYP1"DISCONNECT", RESPCODE );
  277.  
  278. ALTMSG$LN[0] = MSG2; # STOP WITH DAYFILE MESSAGE #
  279. MESSAGE(ALTMSG[0],UDFL1);
  280. RESTPFP(PFP$END); # RESTORE USER-S *PFP* #
  281.  
  282. END # SSALTER #
  283.  
  284. TERM
  285. PROC ALTKINP( INDEX, ORDINAL, INITIALIZE );
  286.  
  287. # TITLE ALTKINP - KEYBOARD INPUT. #
  288.  
  289. BEGIN # ALTKINP #
  290.  
  291. #
  292. ** ALTKINP - KEYBOARD INPUT.
  293. *
  294. * *ALTKINP* PROCESSES THE OPERATOR RESPONSES OR COMMANDS.
  295. *
  296. * PROC ALTKINP.
  297. *
  298. * ENTRY INITIALIZE - BOOLEAN ( TRUE IMPLIES INITIALIZE )
  299. * INDEX - AN INDEX DESCRIBING WHICH DISPLAY TO DISPLAY.
  300. * ORDINAL EST ORDINAL FOR REQUESTED M862.
  301. *
  302. * EXIT FOR A VALID OPERATOR RESPONSE -
  303. * THE *KWORD* REQUEST (IF IT IS STILL AVAILABLE)
  304. * IS COMPLETED AND DELINKED.
  305. * THE LEFT SCREEN AREA FOR THE RESPONSE IS CLEARED.
  306. *
  307. * FOR A VALID OPERATOR COMMAND -
  308. * THE DEFINED PROCESSING IS DONE.
  309. *
  310. * FOR AN INVALID OPERATOR TYPE-IN -
  311. * THE TYPE-IN IS DISPLAYED IN THE ECHO LINE OF THE
  312. * LEFT SCREEN.
  313. * THE *** REJECT *** IS DISPLAYED IN THE REJECT LINE.
  314. *
  315. * ARRAY KBINPUTAL - KEYBOARD BUFFER CLEARED.
  316. *
  317. #
  318.  
  319. ITEM INITIALIZE B; # INPUT VARIABLE #
  320. ITEM INDEX I; # INPUT VARIABLE #
  321. ITEM ORDINAL C(3); # INPUT VARIABLE #
  322.  
  323. #
  324. **** PROC ALTKINP - XREF LIST BEGIN.
  325. #
  326.  
  327. XREF
  328. BEGIN
  329. FUNC XCDD;
  330. PROC CHKMODE; # CHECK MODE OF PATH/NODE #
  331. PROC CUCOMM; # CRACK *CU* COMMAND PARAMETERS #
  332. PROC DISPCU; # GENERATE *CU* DISPLAY #
  333. PROC DISPSM; # GENERATE *SM* DISPLAY #
  334. PROC KCLR; # CLEAR CURRENT REQUEST #
  335. PROC MESSAGE; # DISPLAYS A MESSAGE #
  336. PROC POKEDIS; # WRITE TO *K* DISPLAY #
  337. PROC RECALL; # PUT PROGRAM INTO RECALL #
  338. PROC UCPREQ; # ISSUE UCP CALL TO *SSEXEC* #
  339. FUNC XDXB I; # CONVERT DISPLAY CODE TO INTEGER
  340.   #
  341. END
  342.  
  343. #
  344. **** PROC ALTKINP - XREF LIST END.
  345. #
  346.  
  347. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  348. *CALL COMBFAS
  349. *CALL COMBCPR
  350. *CALL COMBPFP
  351. *CALL COMBUCR
  352. *CALL COMBUDT
  353. *CALL COMTALT
  354.  
  355. ITEM BITNUM I; # BIT NUMBER FOR UCP CALL #
  356. ITEM CH I; # CHARACTER INDEX #
  357. ITEM CH1 C(1); # CHARACTER #
  358. ITEM CH2 C(2); # 2 CHARACTERS #
  359. ITEM CHAR C(1); # CHARACTER #
  360. ITEM CHAR2 C(2); # 2 CHARACTERS #
  361. ITEM CHAR3 C(3); # 3-CHARACTER SCRATCH VARIABLE #
  362. ITEM COLUMN I; # COLUMN NUMBER IN DISPLAY #
  363. ITEM COUNT I; # NUMBER OF CHARACTERS #
  364. ITEM CUINDEX I; # *CU* INDEX IN UDT #
  365. ITEM CU0 U; # SM/DRD STATUS TO CU 0 #
  366. ITEM CU1 U; # SM/DRD STATUS TO CU 1 #
  367. ITEM COMMAND C(10); # OPERATOR COMMAND #
  368. ITEM FLAG B; # OUTPUT FROM CHKMODE #
  369. ITEM INDX I; # LOOP INDEX #
  370. ITEM J I; # SCRATCH INTEGER #
  371. ITEM K I; # SCRATCH INTEGER #
  372. ITEM LINE I; # *K* DISPLAY LINE NUMBER #
  373. ITEM LOOPC B; # LOOP CONTROL VARIABLE #
  374. ITEM NCHAR I; # NEXT CHARACTER COUNTER #
  375. ITEM ORD I; # ORDINAL #
  376. ITEM ESTORD I; # EST ORDINAL #
  377. ITEM MSG C(80); # MESSAGE #
  378. ITEM REJECT B; # REJECT RESPONSE FLAG #
  379. ITEM RESPCODE I; # RESPONSE FROM SSEXEC #
  380. ITEM SMINDEX I; # *SM* INDEX IN UDT #
  381. ITEM STAT I; # INTEGER STATUS #
  382. ITEM STATE B; # PATH STATUS #
  383. ITEM TEMP I; # TEMPORARY INTEGER #
  384.  
  385. ARRAY CALL$SS[0:0]P(CPRLEN);; # CALLSS PARAMETER BLOCK #
  386.  
  387. CONTROL EJECT;
  388.  
  389. #
  390. * SET INITIAL CONDITIONS
  391. #
  392.  
  393. P<UDT$WORD> = LOC( UDT$HDR);
  394. P<CPR> = LOC( CALL$SS[0] );
  395. CUINDEX = 0;
  396. SMINDEX = 0;
  397.  
  398. KL$AL$LINE[LF$AL$KBREJ] = " "; # CLEAR REJECT LINE #
  399.  
  400. KL$AL$SUBL1[LF$AL$KBECHO] = KB$AL$SCAN[0]; # SET ECHO LINE #
  401.  
  402. #
  403. * CRACK THE KEYBOARD INPUT. DETERMINE IF INPUT IS -
  404. * . CU - INDICATING A REQUEST TO DISPLAY THE *CU* DISPLAY
  405. * . SM - INDICATING A REQUEST TO DISPLAY THE *SM* DISPLAY
  406. #
  407.  
  408. CU$DISP:
  409.  
  410. IF INDEX EQ 2
  411. THEN
  412. BEGIN # PROCESS *CU* COMMAND #
  413.  
  414. #
  415. * LOCATE CORRECT UDT ENTRY
  416. #
  417.  
  418. LOOPC = FALSE;
  419. SLOWFOR INDX = 0 STEP 1 WHILE NOT LOOPC
  420. DO
  421. BEGIN
  422. P< UDT$CN > = LOC ( UDT$M862[INDX] );
  423. STAT = XDXB(ORDINAL,0,ESTORD); # ASSUME 3 CHARACTERS #
  424. IF STAT NQ 0
  425. THEN
  426. BEGIN
  427. STAT = XDXB(C<0,2>ORDINAL,0,ORD); # ASSUME 2 CHARACTERS #
  428. IF STAT NQ 0
  429. THEN # BAD EST ORDINAL #
  430. BEGIN # EXIT #
  431. GOTO REJECTORD;
  432. END # EXIT #
  433.  
  434. END
  435.  
  436. IF ESTORD EQ 0
  437. THEN
  438. BEGIN
  439. GOTO REJECTORD; # BLANK IS ILLEGAL #
  440. END
  441.  
  442. IF ESTORD NQ UD$ESTO[1]
  443. THEN
  444. BEGIN
  445. IF INDX GQ UDT$LINE$CUN[0]
  446. THEN
  447. BEGIN
  448. GOTO REJECTORD; # REJECT IF BAD ORDINAL #
  449. END
  450.  
  451. TEST INDX;
  452. END
  453.  
  454. ELSE
  455. LOOPC = TRUE;
  456. TEST INDX;
  457. END
  458.  
  459.  
  460. CUINDEX = INDX;
  461.  
  462. DISPCU ( CUINDEX, ESTORD );
  463.  
  464. CU$DISP1:
  465.  
  466. #
  467. * WAIT FOR OPERATOR INPUT
  468. #
  469.  
  470. LOOPC = FALSE;
  471. SLOWFOR J = 0 STEP 1 WHILE ( NOT LOOPC )
  472. DO
  473. BEGIN # ISSUE RECALL UNTIL INPUT #
  474.  
  475. RECALL ( 0 );
  476.  
  477. IF KB$AL$CLEAR NQ 0
  478. THEN
  479. BEGIN
  480. LOOPC = TRUE;
  481. KL$AL$LINE[LF$AL$KBECHO] = KB$AL$SCAN[0]; # ECHO THE
  482.   REQUEST #
  483. CPR$CUORD[0] = CUINDEX;
  484.  
  485. #
  486. * SEND ALL OPERATOR COMMANDS TO THE SYSTEM DAYFILE.
  487. #
  488.  
  489. MESSAGE ( KB$AL$SCAN[0], SYSUDF1 );
  490.  
  491. TEST J;
  492. END
  493.  
  494. END # ISSUE RECALL REQUESTS UNTIL INPUT #
  495.  
  496. IF C<0,3>KB$AL$SCAN[0] EQ ALTK$END
  497. THEN
  498. BEGIN
  499. P<SM$SCREEN> = LOC(KLEFTSCRNAL);
  500. SLOWFOR J = 4 STEP 1 UNTIL LF$AL$KBECHO
  501. DO
  502. BEGIN
  503. CU$LN[J] = ALTK$BL;
  504. CU$EOL[J] = 0;
  505. END
  506.  
  507. RETURN; # RETURN IF *END* #
  508. END
  509. ELSE
  510. BEGIN
  511. GOTO REJECTCOM;
  512. END
  513.  
  514.  
  515. END # PROCESS *CU* COMMAND #
  516.  
  517. SM$DISP:
  518.  
  519. IF INDEX EQ 1
  520. THEN
  521. BEGIN # PROCESS *SM* COMMANDS #
  522.  
  523. DISPSM( SMINDEX , INITIALIZE );
  524.  
  525. SM$DISP1:
  526.  
  527. #
  528. * WAIT FOR OPERATOR INPUT
  529. #
  530.  
  531. LOOPC = FALSE;
  532. SLOWFOR J = 0 STEP 1 WHILE ( NOT LOOPC )
  533. DO
  534. BEGIN # ISSUE RECALL UNTIL INPUT #
  535.  
  536. RECALL ( 0 );
  537.  
  538. IF KB$AL$CLEAR NQ 0
  539. THEN
  540. BEGIN
  541. LOOPC = TRUE;
  542. KL$AL$LINE[LF$AL$KBECHO] = KB$AL$SCAN[0]; # ECHO THE
  543.   REQUEST #
  544.  
  545. #
  546. * SEND ALL OPERATOR COMMANDS TO THE SYSTEM DAYFILE.
  547. #
  548.  
  549. MESSAGE ( KB$AL$SCAN[0], SYSUDF1 );
  550.  
  551. TEST J;
  552. END
  553.  
  554. END # ISSUE RECALL REQUESTS UNTIL INPUT #
  555.  
  556. IF ( C<0,2>KB$AL$SCAN[0] NQ ALTK$SM ) ##
  557. AND ( C<0,3>KB$AL$SCAN[0] NQ ALTK$END ) ##
  558. AND ( C<0,1>KB$AL$SCAN[0] NQ ALTK$PLUS )
  559. THEN
  560. BEGIN # REJECT RESPONSE #
  561. GOTO REJECTCOM;
  562. END # REJECT RESPONSE #
  563.  
  564. KL$AL$SUBL1[LF$AL$KBREJ] = " "; # CLEAR REJECT LINE #
  565. IF C<0,1>KB$AL$SCAN[0] EQ ALTK$PLUS
  566. THEN
  567. BEGIN # PROCESS K.+ #
  568. SMINDEX = SMINDEX + 1;
  569. IF SMINDEX GQ UDT$LINE$SMN[0]
  570. THEN
  571. BEGIN # NO SUCH DISPLAY AVAILABLE #
  572. SMINDEX = SMINDEX - 1;
  573. GOTO REJECTCOM;
  574. END # NO SUCH DISPLAY AVAILABLE #
  575.  
  576. ELSE
  577. BEGIN # "+" IS OK, DISPLAY NEXT PAGE #
  578. KB$AL$CLEAR[0] = 0;
  579. KL$AL$LINE[LF$AL$KBECHO] = " ";
  580. GOTO SM$DISP;
  581. END # "+" IS OK, DISPLAY NEXT PAGE #
  582.  
  583. END # PROCESS PLUS #
  584.  
  585.  
  586. IF C<0,2>KB$AL$SCAN[0] NQ ALTK$SM
  587. THEN
  588. BEGIN
  589.  
  590. #
  591. * BLANK THE SCREEN
  592. #
  593.  
  594. P<SM$SCREEN> = LOC(KLEFTSCRNAL);
  595. SLOWFOR J = LF$AL$BODY STEP 1 UNTIL LF$AL$KBECHO
  596. DO
  597. BEGIN
  598. SM$LN[J] = ALTK$BL;
  599. SM$EOL[J] = 0;
  600. END
  601.  
  602. RETURN; # RETURN IF *END* OR *STOP* #
  603. END
  604.  
  605. P<UDT$SMA> = LOC(UDT$M861[SMINDEX]);
  606. IF C<2,1>KB$AL$SCAN[0] NQ SM$ID[1] # NOT THE SM ON CONSOLE #
  607. OR C<3,1>KB$AL$SCAN[0] NQ COMMA
  608. THEN
  609. BEGIN # REJECT RESPONSE #
  610. GOTO REJECTCOM;
  611. END # REJECT RESPONSE #
  612.  
  613. CHAR2 = C<4,2>KB$AL$SCAN[0];
  614. IF ( CHAR2 NQ NM$KEY2[2] ) ##
  615. AND C<4,3>KB$AL$SCAN[0] NQ NM$KEY3[8]
  616. THEN
  617. BEGIN # REJECT RESPONSE #
  618. GOTO REJECTCOM;
  619. END # REJECT RESPONSE #
  620.  
  621. IF C<4,3>KB$AL$SCAN[0] EQ NM$KEY3[8]
  622. THEN
  623. BEGIN # PRE-PROCESS DRD STATUS CHANGE #
  624. STAT = XDXB(C<7,2>KB$AL$SCAN[0],1,J); # ASSUME 2 CHARS #
  625. NCHAR = 9;
  626. IF STAT NQ 0
  627. THEN
  628. BEGIN # ONE #
  629. STAT = XDXB(C<7,1>KB$AL$SCAN[0],1,J); # ASSUME 1 CHAR #
  630. NCHAR = 8;
  631. IF STAT NQ 0
  632. THEN # BAD DRD ORDINAL #
  633. BEGIN # REJECT #
  634. GOTO REJECTCOM;
  635. END # REJECT #
  636.  
  637. END # ONE #
  638.  
  639. IF C<NCHAR,1>KB$AL$SCAN[0] NQ COMMA
  640. THEN # BAD SYNTAX #
  641. BEGIN # EXIT #
  642. GOTO REJECTCOM;
  643. END # EXIT #
  644.  
  645. NCHAR = NCHAR + 1;
  646. IF C<NCHAR,2>KB$AL$SCAN[0] NQ "CU"
  647. THEN # BAD SYNTAX #
  648. BEGIN # EXIT #
  649. GOTO REJECTCOM;
  650. END # EXIT #
  651.  
  652. NCHAR = NCHAR + 2;
  653.  
  654. IF (J LS 0) OR (J GR MAX$DRDDA)
  655. THEN
  656. BEGIN # REJECT BAD DEVICE ADDRESS #
  657. GOTO REJECTCOM;
  658. END # REJECT BAD DEVICE ADDRESS #
  659.  
  660. IF (J NQ D0$SUN[1]) AND (J NQ D1$SUN[1])
  661. THEN
  662. BEGIN # REJECT BAD DEVICE ADDRESS #
  663. GOTO REJECTCOM;
  664. END # REJECT BAD DEVICE ADDRESS #
  665.  
  666. CHAR3 = C<NCHAR,3>KB$AL$SCAN[0];
  667. STAT = XDXB(CHAR3,0,K); # ASSUME 3 CHARS #
  668. IF STAT NQ 0
  669. THEN
  670. BEGIN
  671. CHAR2 = C<NCHAR,2>KB$AL$SCAN[0];
  672. STAT = XDXB(CHAR2,0,K); # ASSUME 2 #
  673. NCHAR = NCHAR + 2;
  674. IF STAT NQ 0
  675. THEN # BAD CONTROLLER ORDINAL #
  676. BEGIN # EXIT #
  677. GOTO REJECTCOM;
  678. END # EXIT #
  679.  
  680. END
  681.  
  682. ELSE # BUMP POSITION COUNTER #
  683. BEGIN # BUMP #
  684. NCHAR = NCHAR + 3;
  685. END # BUMP #
  686.  
  687. IF ( K LS 0 ) OR ( K GR MAXEST )
  688. THEN
  689. BEGIN
  690. GOTO REJECTCOM;
  691. END
  692.  
  693. END # PREPROCESS DRD STATUS CHANGE #
  694.  
  695. CHAR2 = C<4,2>KB$AL$SCAN[0];
  696. IF CHAR2 EQ NM$KEY2[2]
  697. THEN
  698. BEGIN # PREPROCESS ACCESSOR CHANGE REQUEST #
  699. STAT = XDXB(C<6,3>KB$AL$SCAN[0],0,J); # ASSUME 3 CHARS #
  700. NCHAR = 9;
  701. IF STAT NQ 0
  702. THEN
  703. BEGIN
  704. STAT = XDXB(C<6,2>KB$AL$SCAN[0],0,J); # ASSUME 2 CHARS #
  705. NCHAR = 8;
  706. IF STAT NQ 0
  707. THEN # BAD CONTROLLER ORDINAL #
  708. BEGIN # EXIT #
  709. GOTO REJECTCOM;
  710. END # EXIT #
  711.  
  712. END
  713.  
  714. IF ( J LS 0 ) OR ( J GR MAXEST )
  715. THEN
  716. BEGIN
  717. GOTO REJECTCOM;
  718. END
  719.  
  720. END # PREPROCESS ACCESSOR CHANGE REQUEST #
  721.  
  722. #
  723. * ADVANCE TO STATUS CHARACTER.
  724. #
  725.  
  726. IF C<NCHAR,1>KB$AL$SCAN[0] NQ "="
  727. THEN # BAD SYNTAX #
  728. BEGIN # EXIT #
  729. GOTO REJECTCOM;
  730. END # EXIT #
  731.  
  732. NCHAR = NCHAR + 1;
  733.  
  734. #
  735. * ADJUST DRD DEVICE ADDRESS
  736. #
  737.  
  738. IF C<4,3>KB$AL$SCAN[0] EQ "DRD"
  739. THEN
  740. BEGIN
  741. J = J - ((J/2)*2);
  742. END
  743.  
  744.  
  745. #
  746. * J GQ 8 IMPLIES K.SM"ID",CUNN=X. COMMAND
  747. * J EQ 0 OR 1 IMPLIES K.SM"ID",DRDN,CUNN=X. COMMAND.
  748. #
  749.  
  750. CHAR = C<NCHAR,1>KB$AL$SCAN;
  751. IF ( CHAR NQ ALTK$MAINT ) ##
  752. AND ( CHAR NQ ALTK$ONLINE ) ##
  753. AND ( CHAR NQ ALTK$OFFLINE )
  754. THEN
  755. BEGIN # REJECT INVALID STATUS #
  756. GOTO REJECTCOM;
  757. END # REJECT INVALID STATUS #
  758.  
  759. IF ( CHAR EQ ALTK$MAINT ) AND INITIALIZE
  760. THEN
  761. BEGIN
  762. GOTO REJECTCOM; # INITIALIZE PROHIBITS MAINTENANCE
  763.   MODE #
  764. END
  765.  
  766. IF J GQ 8
  767. THEN
  768. BEGIN
  769. P<UDT$LOC> = LOC(SM$WD0[1]);
  770. CU0 = SMST0; # SAVE CU STATUS INDEXES #
  771. CU1 = SMST1;
  772. END
  773.  
  774. IF J EQ 0
  775. THEN
  776. BEGIN
  777. P<UDT$LOC> = LOC(D0$WD0[1]);
  778. TEMP = D0$WD0[1];
  779. CU0 = DRST0; # SAVE CU STATUS INDEXES #
  780. CU1 = DRST1;
  781. END
  782.  
  783. IF J EQ 1
  784. THEN
  785. BEGIN
  786. P<UDT$LOC> = LOC(D1$WD0[1]);
  787. TEMP = D1$WD0[1];
  788. CU0 = DRST0; # SAVE CU STATUS INDEXES #
  789. CU1 = DRST1;
  790. END
  791.  
  792. #
  793. * CHECK PATH/NODE CURRENT CONDITION
  794. #
  795.  
  796. IF J LQ 1
  797. THEN
  798. BEGIN
  799. P<UDT$CN> = LOC(UDT$M862[SM$CUO0[1]-1]);
  800. IF K EQ UD$ESTO[1]
  801. THEN
  802. BEGIN # CHECK FIRST CONTROLLER #
  803. IF B<12+PATH$DF"U$EXISTS",1>TEMP EQ 0
  804. THEN
  805. BEGIN
  806. GOTO REJECTCOM;
  807. END
  808.  
  809. CHKMODE ( UDT$LOC, 2, CHAR, FLAG, BITNUM );
  810. CPR$CUORD[0] = SM$CUO0[1]; # IDENTIFY CONTROLLER #
  811. END # CHECK FIRST CONTROLLER #
  812.  
  813. IF K NQ UD$ESTO[1]
  814. THEN
  815. BEGIN # CHECK SECOND CU TABLE #
  816. P<UDT$CN> = LOC(UDT$M862[SM$CUO1[1]-1]);
  817. IF K NQ UD$ESTO[1]
  818. THEN
  819. BEGIN # CU ORDINAL NOT FOUND #
  820. GOTO REJECTCOM;
  821. END # CU ORDINAL NOT FOUND #
  822.  
  823. IF B<18+PATH$DF"U$EXISTS",1>TEMP EQ 0
  824. THEN
  825. BEGIN
  826. GOTO REJECTCOM;
  827. END
  828.  
  829. CHKMODE ( UDT$LOC, 3, CHAR, FLAG, BITNUM );
  830. CPR$CUORD[0] = SM$CUO1[1]; # IDENTIFY CONTROLLER #
  831. END # CHECK SECOND CU TABLE #
  832.  
  833. END
  834.  
  835. ELSE
  836. BEGIN # CHECK ACCESSOR STATUS #
  837. P<UDT$CN> = LOC(UDT$M862[SM$CUO0[1]-1]);
  838. IF J NQ UD$ESTO[1]
  839. THEN
  840. BEGIN # CHECK SECOND CU TABLE #
  841. P<UDT$CN> = LOC(UDT$M862[SM$CUO1[1]-1]);
  842. IF J NQ UD$ESTO[1]
  843. THEN
  844. BEGIN # CU ORDINAL NOT FOUND #
  845. GOTO REJECTCOM;
  846. END # CU ORDINAL NOT FOUND #
  847.  
  848. P<UDT$CN> = LOC(UDT$M862[SM$CUO1[1]-1]);
  849. CPR$CUORD[0] = SM$CUO1[1];
  850. END # CHECK SECOND CU TABLE #
  851.  
  852. P<UDT$CN> = LOC(UDT$M862[SM$CUO0[1]-1]);
  853. IF J EQ UD$ESTO[1]
  854. THEN
  855. BEGIN
  856. CPR$CUORD[0] = SM$CUO0[1];
  857. CHKMODE ( UDT$LOC, 2, CHAR, FLAG, BITNUM );
  858. END
  859.  
  860. ELSE
  861. BEGIN
  862. CHKMODE ( UDT$LOC, 4, CHAR, FLAG, BITNUM );
  863. END
  864.  
  865. END # CHECK ACCESSOR STATUS #
  866.  
  867. #
  868. * FLAG EQ TRUE IMPLIES PATH/NODE ALREADY IN REQUESTED STATE
  869. #
  870.  
  871. IF FLAG
  872. THEN
  873. BEGIN
  874. GOTO GOODCOM; # COMMAND WAS ACCEPTED #
  875. END
  876.  
  877. IF ( J LQ 1 ) ##
  878. AND ( CHAR EQ ALTK$ONLINE ) ##
  879. AND ( NOT SM$ON[1] ) ##
  880. AND ( NOT INITIALIZE )
  881. THEN
  882. BEGIN
  883. GOTO REJECTSMCHG;
  884. END
  885.  
  886. IF J GQ 8
  887. THEN
  888. BEGIN
  889. CPR$UDTQ = LOC(UDT$M861[SMINDEX])+BIAS$EN0-LOC(UDT$HDR);
  890. END
  891.  
  892. IF J EQ 0
  893. THEN
  894. BEGIN
  895. CPR$UDTQ = LOC(UDT$M861[SMINDEX])+BIAS$EN3-LOC(UDT$HDR);
  896. END
  897.  
  898. IF J EQ 1
  899. THEN
  900. BEGIN
  901. CPR$UDTQ = LOC(UDT$M861[SMINDEX])+BIAS$EN20-LOC(UDT$HDR);
  902. END
  903.  
  904. CPR$BYNR = BITNUM;
  905. IF ( CHAR EQ ALTK$ONLINE ) ##
  906. OR ( CHAR EQ ALTK$MAINT )
  907. THEN
  908. BEGIN
  909. CPR$PMMR = TRUE;
  910. END
  911.  
  912. ELSE
  913. BEGIN
  914. CPR$PMMR = FALSE;
  915. END
  916.  
  917. #
  918. * UPDATE *K* DISPLAY REQUEST BITS WHILE WAITING ON *SSEXEC*.
  919. #
  920.  
  921. IF J LQ 1
  922. THEN
  923. BEGIN
  924. TEMP = 8 + J*2;
  925. END
  926.  
  927. IF J GQ 8
  928. THEN
  929. BEGIN
  930. TEMP = 6;
  931. END
  932.  
  933. COLUMN = 37;
  934. IF ( C<COLUMN,1>SM$LN[TEMP] EQ " " ) ##
  935. OR ( ( C<COLUMN,1>SM$LN[TEMP] EQ ALTK$ONLINE ) ##
  936. AND ( CHAR EQ ALTK$MAINT ) ) ##
  937. OR ( ( C<COLUMN,1>SM$LN[TEMP] EQ ALTK$MAINT ) ##
  938. AND ( CHAR EQ ALTK$ONLINE ) )
  939. THEN
  940. BEGIN
  941. GOTO REJECTCOM; # NON-EXISTENT ELEMENT OR ILLEGAL
  942.   SWITCH #
  943. END
  944.  
  945. TEMP = TEMP - 1; # POSITION LINE FOR ASTERISK
  946.   DISPLAY #
  947. CHAR = ALTK$AST;
  948. COUNT = 1;
  949.  
  950. POKEDIS ( TEMP, COLUMN, COUNT, CHAR );
  951.  
  952. UCPREQ ( TYP"TYP5", REQTYP5"SSA$UUDT", RESPCODE );
  953.  
  954. UCPREQ ( TYP"TYP5", REQTYP5"SSA$PUDT", RESPCODE );
  955.  
  956. #
  957. * SET GLOBAL FLAGS IF SSEXEC IS INITIALIZING.
  958. * SSEXEC WILL DO SO ONCE IT IS INITIALIZED.
  959. #
  960.  
  961. IF INITIALIZE
  962. THEN # SET GLOBAL FLAGS #
  963. BEGIN # DISPLAY CONSOLIDATED STATUS #
  964. P<PTHSTAT> = P<UDT$LOC>;
  965. IF PATHBIT(CU0,PATH$DF"U$ON") EQ 1 ##
  966. OR PATHBIT(CU1,PATH$DF"U$ON") EQ 1
  967. THEN
  968. BEGIN
  969. CPR$PMMR = TRUE;
  970. CPR$BYNR = PATH$DF"U$ON";
  971.  
  972. UCPREQ ( TYP"TYP5", REQTYP5"SSA$UUDT", RESPCODE );
  973.  
  974. UCPREQ ( TYP"TYP5", REQTYP5"SSA$PUDT", RESPCODE );
  975.  
  976. END
  977.  
  978. IF PATHBIT(CU0,PATH$DF"U$RQ$DIAG") EQ 1 ##
  979. OR PATHBIT(CU1,PATH$DF"U$RQ$DIAG") EQ 1
  980. THEN
  981. BEGIN
  982. CPR$PMMR = TRUE;
  983. CPR$BYNR = PATH$DF"U$RQ$DIAG";
  984.  
  985. UCPREQ ( TYP"TYP5", REQTYP5"SSA$UUDT", RESPCODE );
  986.  
  987. UCPREQ ( TYP"TYP5", REQTYP5"SSA$PUDT", RESPCODE );
  988.  
  989. END
  990.  
  991. IF PATHBIT(CU0,PATH$DF"U$ON") EQ 0 ##
  992. AND PATHBIT(CU1,PATH$DF"U$ON") EQ 0
  993. THEN
  994. BEGIN
  995. CPR$PMMR = FALSE;
  996. CPR$BYNR = PATH$DF"U$ON";
  997.  
  998. UCPREQ ( TYP"TYP5", REQTYP5"SSA$UUDT", RESPCODE );
  999.  
  1000. UCPREQ ( TYP"TYP5", REQTYP5"SSA$PUDT", RESPCODE );
  1001.  
  1002. END
  1003.  
  1004. END # DISPLAY CONSOLIDATED STATUS #
  1005.  
  1006. GOTO GOODCOM;
  1007.  
  1008. END # PROCESS *SM* COMMANDS #
  1009.  
  1010. #
  1011. * REJECT REQUEST
  1012. #
  1013.  
  1014. REJECTSMCHG:
  1015.  
  1016. KL$AL$SUBL1[LF$AL$KBREJ] = "*** SM STATUS PROHIBITS CHANGE ***";
  1017. KB$AL$CLEAR[0] = 0;
  1018. GOTO SM$DISP1;
  1019.  
  1020. REJECTCOM:
  1021.  
  1022. KL$AL$SUBL1[LF$AL$KBREJ] = "*** REJECT ***";
  1023. KB$AL$CLEAR[0] = 0;
  1024. IF INDEX EQ 1
  1025. THEN
  1026. BEGIN
  1027. GOTO SM$DISP1; # GET NEXT COMMAND #
  1028. END
  1029.  
  1030. ELSE
  1031. BEGIN
  1032. GOTO CU$DISP1; # GET NEXT COMMAND #
  1033. END
  1034.  
  1035. REJECTORD:
  1036.  
  1037. KL$AL$SUBL1[LF$AL$KBREJ] = " *** REJECT CU ORD *** ";
  1038. KB$AL$CLEAR[0] = 0;
  1039. P<SM$SCREEN> = LOC(KLEFTSCRNAL);
  1040. SLOWFOR J = LF$AL$BODY STEP 1 UNTIL LF$AL$KBREJ-1
  1041. DO
  1042. BEGIN
  1043. CU$EOL[J] = 0;
  1044. END
  1045.  
  1046. RETURN; # RETURN TO MAIN PROGRAM #
  1047.  
  1048.  
  1049.  
  1050. #
  1051. * RESPONSE WAS GOOD. CLEAR ECHO.
  1052. #
  1053.  
  1054. GOODCOM:
  1055.  
  1056. KL$AL$LINE[LF$AL$KBECHO] = " "; # CLEAR ECHO #
  1057. KB$AL$CLEAR[0] = 0;
  1058.  
  1059. IF INDEX EQ 1
  1060. THEN
  1061. BEGIN
  1062. GOTO SM$DISP; # GET NEXT COMMAND #
  1063. END
  1064.  
  1065. ELSE
  1066. BEGIN
  1067. GOTO CU$DISP1; # GET NEXT COMMAND #
  1068. END
  1069.  
  1070.  
  1071. END # ALTKINP #
  1072.  
  1073. TERM
  1074.  
  1075. PROC ALTKINT ( INITIALIZE );
  1076.  
  1077. # TITLE ALTKINT - *K* DISPLAY INITIALIZATION. #
  1078.  
  1079. BEGIN # ALTKINT #
  1080.  
  1081. #
  1082. ** ALTKINT - *K* DISPLAY INTIALIZATION.
  1083. *
  1084. * *ALTKINT* ISSUES THE *CONSOLE* MACRO TO ACTIVATE THE
  1085. * *K* DISPLAY AND INITIALIZES THE *K* DISPLAY BUFFERS.
  1086. *
  1087. * PROC ALTKINT.
  1088. *
  1089. * ENTRY INITIALIZE - BOOLEAN ( TRUE IMPLIES INITIALIZE )
  1090. *
  1091. * EXIT THE *CONSOLE* MACRO IS ISSUED.
  1092. * THE TITLE IS PLACED IN THE LEFT SCREEN BUFFER.
  1093. * THE *B* DISPLAY LINE 2 IS CLEARED.
  1094. *
  1095. * MESSAGES * REQUEST *K* DISPLAY * (FROM *CONSOLE* MACRO).
  1096. *
  1097. #
  1098.  
  1099. ITEM INITIALIZE B; # INPUT VARIABLE #
  1100. #
  1101. **** PROC ALTKINT - XREF LIST BEGIN.
  1102. #
  1103.  
  1104. XREF
  1105. BEGIN
  1106. PROC CONSOLE; # ISSUE *CONSOLE* MACRO #
  1107. PROC MESSAGE; # ISSUE *MESSAGE* MACRO #
  1108. END
  1109.  
  1110. #
  1111. **** PROC ALTKINT - XREF LIST END.
  1112. #
  1113.  
  1114. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  1115. *CALL COMBFAS
  1116. *CALL COMTALT
  1117.  
  1118. ITEM ALTHDR1 C(58) =
  1119. " VALID DISPLAYS ARE";
  1120. ITEM ALTHDR2 C(58) =
  1121. " K.SM";
  1122. ITEM ALTHDR3 C(58) =
  1123. " K.CUNN - NN = EST ORDINAL OF M862";
  1124. ITEM I I; # LOOP COUNTER #
  1125. CONTROL EJECT;
  1126.  
  1127. #
  1128. * SET UP AND ISSUE THE CONSOLE MACRO.
  1129. #
  1130.  
  1131. CP$KBADDR[0] = LOC(KBINPUTAL[0]);
  1132. CP$KLADDR[0] = LOC(KLEFTSCRNAL[0]);
  1133. CONSOLE(CPARAM[0]);
  1134.  
  1135. #
  1136. * REQUEST *K* DISPLAY ON *B* DISPLAY.
  1137. #
  1138.  
  1139. MESSAGE("$ REQUEST *K* DISPLAY ",LINE2);
  1140. KL$AL$COMP[0] = FALSE; # SET TOGGLE OFF #
  1141. KREQCLEARAL = FALSE;
  1142. KB$AL$CLEAR[0] = 0;
  1143.  
  1144. #
  1145. * SET UP TITLE LINE IN LEFT SCREEN BUFFER.
  1146. #
  1147.  
  1148. KL$AL$LINE[LF$AL$TITLE] = TITLELINE$AL;
  1149. KL$AL$LINE[LF$AL$TITLE+1] = TITLEBOX$AL;
  1150. IF INITIALIZE
  1151. THEN
  1152. BEGIN # DISPLAY INITIALIZATION MESSAGE #
  1153. KL$AL$LINE[LF$AL$TITLE+2] = TITLELINE$MD;
  1154. END # DISPLAY INITIALIZATION MESSAGE #
  1155.  
  1156.  
  1157. #
  1158. * DISPLAY VALID COMMANDS.
  1159. #
  1160.  
  1161. P<SM$SCREEN> = LOC(KLEFTSCRNAL);
  1162. SLOWFOR I = LF$AL$BODY STEP 1 UNTIL LF$AL$KBECHO + 1
  1163. DO
  1164. BEGIN
  1165. SM$EOL[0] = 0;
  1166. END
  1167.  
  1168. SM$LN[8] = ALTHDR1;
  1169. SM$LN[10] = ALTHDR2;
  1170. SM$LN[11] = ALTHDR3;
  1171. END # ALTKINT #
  1172.  
  1173. TERM
  1174. PROC CHKMODE ( WORD, FIELD, MODE, FLAG, BITNUM );
  1175.  
  1176. # TITLE BITNUM - CHECK EXISTING MODE OF PATH/NODE IN M860 #
  1177.  
  1178. BEGIN # CHKMODE #
  1179.  
  1180. #
  1181. **** CHKMODE - CHECK EXISTING MODE OF PATH/NODE IN M860
  1182. *
  1183. * *CHKMODE* EXAMINES THE EXISTING STATUS OF THE REQUESTED
  1184. * PATH/NODE. IF IT IS THE SAME AS THE STATUS BEING REQUESTED,
  1185. * *CHKMODE* RETURNS WITH FLAG = TRUE. IF NOT, FLAG IS RETURNED
  1186. * AS FALSE. ALSO, BITNUM IS RETURNED AS THE BIT NUMBER THAT
  1187. * WAS CHECKED SO A SUBSEQUENT UCPCALL CAN BE MADE TO *SSEXEC*
  1188. * IF DESIRED.
  1189. *
  1190. * ENTRY
  1191. * WORD = WORD IN UDT TO BE CHECKED.
  1192. * FIELD = ORDINAL OF 6 BIT FIELD TO CHECK IN WORD.
  1193. * MODE = MODE OF PATH/NODE TO CHECK FOR.
  1194. *
  1195. * EXIT
  1196. * FLAG = TRUE IF REQUESTED MODE IS THE SAME AS EXISTING MODE.
  1197. * BITNUM = BIT NUMBER IN WORD OF THE BIT THAT WAS CHECKED.
  1198. #
  1199.  
  1200. ITEM BITNUM I; # OUTPUT VARIABLE #
  1201. ITEM FIELD I; # INPUT VARIABLE #
  1202. ITEM FLAG B; # OUTPUT VARIABLE #
  1203. ITEM MODE C(1); # INPUT VARIABLE #
  1204. ARRAY WORD[0:0] S(1);
  1205. BEGIN
  1206. ITEM UDTWORD I (00,00,60); # INPUT WORD ADDRESS #
  1207. END
  1208.  
  1209. #
  1210. **** PROC CHKMODE - XREF LIST BEGIN.
  1211. #
  1212.  
  1213. XREF
  1214. BEGIN
  1215. PROC MESSAGE; # ISSUE DAYFILE MESSAGE #
  1216. PROC RESTPFP; # RESTORE USER-S PFP AND ABORT #
  1217. END
  1218.  
  1219. #
  1220. **** PROC CHKMODE - XREF LIST END.
  1221. #
  1222.  
  1223. CONTROL PRESET;
  1224. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  1225. *CALL,COMBFAS
  1226. *CALL,COMBUDT
  1227. *CALL,COMTALT
  1228.  
  1229. ITEM I I; # INTEGER VARIABLE #
  1230. ITEM MODEB B; # STATUS DESCRIPTOR #
  1231. CONTROL EJECT;
  1232.  
  1233. #
  1234. * DETERMINE MODE BEING SEARCHED FOR
  1235. #
  1236.  
  1237. MODEB = FALSE;
  1238. IF ( MODE EQ ALTK$MAINT ) ##
  1239. OR ( MODE EQ ALTK$ONLINE )
  1240. THEN
  1241. BEGIN
  1242. MODEB = TRUE;
  1243. END
  1244.  
  1245. I = 0;
  1246. IF ( MODE EQ ALTK$MAINT )
  1247. THEN
  1248. BEGIN
  1249. I = PATH$DF"U$RQ$DIAG";
  1250. END
  1251.  
  1252. IF ( MODE EQ ALTK$ONLINE ) ##
  1253. OR ( MODE EQ ALTK$OFFLINE )
  1254. THEN
  1255. BEGIN
  1256. I = PATH$DF"U$ON";
  1257. END
  1258.  
  1259. IF ( I NQ 1 ) AND ( I NQ 3 )
  1260. THEN
  1261. BEGIN
  1262. ALTMSG$LN[0] = " CHKMODE - ILLEGAL MODE REQUESTED.";
  1263. MESSAGE ( ALTMSG[0],SYSUDF1 );
  1264. RESTPFP ( PFP$ABORT );
  1265. END
  1266.  
  1267. #
  1268. * DETERMINE BIT NUMBER
  1269. #
  1270.  
  1271. BITNUM = FIELD*6 + I;
  1272. IF ( ( B<BITNUM,1>UDTWORD EQ 1) AND ( MODEB ) ) ##
  1273. OR ( ( B<BITNUM,1>UDTWORD EQ 0 ) ##
  1274. AND ( NOT MODEB ) ##
  1275. AND ( B<FIELD*6 + PATH$DF"U$RQ$DIAG",1>UDTWORD EQ 0 ) ) ##
  1276. THEN
  1277. BEGIN
  1278. FLAG = TRUE;
  1279. END
  1280.  
  1281. ELSE
  1282. BEGIN
  1283. FLAG = FALSE;
  1284. IF NOT MODEB AND B<FIELD*6 + PATH$DF"U$RQ$DIAG",1>UDTWORD EQ 1
  1285. THEN
  1286. BEGIN
  1287. BITNUM = BITNUM + PATH$DF"U$RQ$DIAG" - PATH$DF"U$ON";
  1288. END
  1289.  
  1290. END
  1291.  
  1292. END # CHKMODE #
  1293.  
  1294. TERM
  1295. PROC DISPCU ( INDEX, ORDINAL );
  1296.  
  1297. # TITLE DISPCU - DISPLAY *SM* DISPLAY #
  1298.  
  1299. BEGIN # DISPCU #
  1300.  
  1301. #
  1302. *** DISPCU - DISPLAY *CU* DISPLAY
  1303. *
  1304. * *DISPCU* GENERATES AND DISPLAYS THE *CU* DISPLAY
  1305. * FOR *SSALTER*
  1306. *
  1307. * ENTRY INDEX = CU TO BE DISPLAYED.
  1308. *
  1309. *
  1310. * EXIT DISPLAY SHOWN ON LEFT SCREEN.
  1311. #
  1312.  
  1313. ITEM INDEX I; # INPUT VARIABLE #
  1314. ITEM ORDINAL I; # INPUT VARIABLE #
  1315.  
  1316. #
  1317. **** PROC DISPCU - XREF LIST BEGIN.
  1318. #
  1319.  
  1320. XREF
  1321. BEGIN
  1322. PROC KDISCIF; # DISPLAY CIF CONFIGURATION #
  1323. PROC MESSAGE; # ISSUE A DAYFILE MESSAGE #
  1324. PROC POKEDIS; # UPDATE *K* DISPLAY #
  1325. PROC RESTPFP; # RESTORE USER-S PFP AND ABORT OR
  1326.   RETURN #
  1327. PROC UCPREQ; # ISSUE UCP REQUEST TO SSEXEC #
  1328. FUNC XCOD C(10); # CONVERT INTEGER TO OCTAL DISPLAY
  1329.   #
  1330. FUNC XDXB; # CONVERT DISPLAY CODE TO INTEGER
  1331.   #
  1332. END
  1333.  
  1334. #
  1335. **** PROC DISPCU - XREF LIST END.
  1336. #
  1337.  
  1338. #
  1339. * DAYFILE MESSAGES.
  1340. #
  1341.  
  1342. DEF MSG1 #" DISPCU - INCORRECT RESPONSE FROM SSEXEC."#;
  1343. DEF BLANK #" "#;
  1344.  
  1345.  
  1346. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  1347.  
  1348. *CALL,COMBFAS
  1349. *CALL,COMBCPR
  1350. *CALL,COMBUDT
  1351. *CALL,COMTALT
  1352.  
  1353. ARRAY CHAR10[0:0] S(1); # CHARACTER MANIPULATION #
  1354. BEGIN
  1355. ITEM CHAR$10 C(00,00,10);
  1356. ITEM CHAR$R1 C(00,54,01);
  1357. ITEM CHAR$R2 C(00,48,02);
  1358. ITEM CHAR$R3 C(00,42,03);
  1359. END
  1360.  
  1361. ITEM CH1 C(1); # ONE CHARACTER #
  1362. ITEM CH2 C(2); # TWO CHARACTERS #
  1363. ITEM COLUMN I; # *K* DISPLAY COLUMN NUMBER #
  1364. ITEM FIRSTAC I; # FIRST AC TO SCAN IN AIF GROUP #
  1365. ITEM I I; # LOOP INDEX #
  1366. ITEM J I; # LOOP INDEX #
  1367. ITEM JINDEX I; # PARAMETER FOR *KDISCIF* #
  1368. ITEM LINE I; # *K* DISPLAY LINE NUMBER #
  1369. ITEM LOOPC B; # LOOP CONTROL #
  1370. ITEM NCH I; # LOOP COUNTER #
  1371. ITEM ORD I; # TEMPORARY STORAGE #
  1372. ITEM RESPCODE I; # RESPONSE FROM *SSEXEC* #
  1373. ITEM STAT I; # STATUS FROM *XDXB* #
  1374. ITEM TEMP I; # TEMPORARY CELL #
  1375. CONTROL EJECT;
  1376. ITEM CUBLANK C(58) =
  1377. " ";
  1378. ITEM CUHDR1 C(58) =
  1379. " CU";
  1380. ITEM CUHDR2 C(58) =
  1381. " ORD ST";
  1382. ITEM CUHDR3 C(58) =
  1383. " CUNN ST";
  1384. ITEM CUHDR4 C(58) =
  1385. " CIFU CIFV DTI0 DTO0 DIF0 DRC0 DRC1 AIF0";
  1386. ITEM CUHDR5 C(58) =
  1387. " ---- ---- ---- ---- ---- ---- ---- ----";
  1388. ITEM CUHDR7 C(58) =
  1389. " DTI0X DTI0X DIF0X DIF0X DRC0X DRD0X DRD0X SMA0X";
  1390. ITEM CUHDR8 C(58) =
  1391. " DTI1X DTI1X DIF1X DIF1X DRC1X DRD1X DRD1X SMA1X";
  1392. ITEM CUHDR9 C(58) =
  1393. " DTO0X DTO0X DRC2X DRD2X DRD2X SMA2X";
  1394. ITEM CUHDR10 C(58) =
  1395. " DTO1X DTO1X DTI1 DTO1 DRC3X DRD3X DRD3X SMA3X";
  1396. ITEM CUHDR11 C(58) =
  1397. " ---- ---- DRD4X DRD4X";
  1398. ITEM CUHDR12 C(58) =
  1399. " DIF0X DIF0X DIF1 DRD5X DRD5X AIF1";
  1400. ITEM CUHDR13 C(58) =
  1401. " CH DIF1X DIF1X ---- DRD6X DRD6X ----";
  1402. ITEM CUHDR14 C(58) =
  1403. " CH ST CIF DRC0X DRD7X DRD7X SMA0X";
  1404. ITEM CUHDR15 C(58) =
  1405. " NN ST U DRC1X SMA1X";
  1406. ITEM CUHDR16 C(58) =
  1407. " MM ST V DRC2X SMA2X";
  1408. ITEM CUHDR17 C(58) =
  1409. " DRC3X SMA3X";
  1410. CONTROL EJECT;
  1411.  
  1412. #
  1413. * BLANK THE *K* DISPLAY
  1414. #
  1415.  
  1416. P<CU$SCREEN> = LOC(KLEFTSCRNAL);
  1417. P<SM$SCREEN> = LOC(KLEFTSCRNAL);
  1418. SLOWFOR I = LF$AL$BODY STEP 1 UNTIL LF$AL$KBECHO-1
  1419. DO
  1420. BEGIN
  1421. CU$LN[I] = CUBLANK;
  1422. CU$EOL[I] = 0;
  1423. END
  1424.  
  1425.  
  1426. #
  1427. * PAINT NON-CHANGING WORDS ON THE SCREEN
  1428. #
  1429.  
  1430. CU$LN[4] = CUHDR1;
  1431. CU$LN[5] = CUHDR2;
  1432. CU$LN[6] = CUHDR3;
  1433. CU$LN[8] = CUHDR4;
  1434. CU$LN[9] = CUHDR5;
  1435. CU$LN[10] = CUHDR7;
  1436. CU$LN[11] = CUHDR8;
  1437. CU$LN[12] = CUHDR9;
  1438. CU$LN[13] = CUHDR10;
  1439. CU$LN[14] = CUHDR11;
  1440. CU$LN[15] = CUHDR12;
  1441. CU$LN[16] = CUHDR13;
  1442. CU$LN[17] = CUHDR14;
  1443. CU$LN[18] = CUHDR15;
  1444. CU$LN[19] = CUHDR16;
  1445. CU$LN[20] = CUHDR17;
  1446.  
  1447. #
  1448. * GET UDT INFORMATION
  1449. #
  1450.  
  1451. UCPREQ ( TYP"TYP5", REQTYP5"SSA$PUDT", RESPCODE );
  1452.  
  1453. IF ( RESPCODE NQ RESPTYP5"OK5" ) ##
  1454. AND ( RESPCODE NQ RESPTYP5"SSA$OK" )
  1455. THEN
  1456. BEGIN # PROCESS INCORRECT RESPONSE #
  1457. UCPREQ ( TYP"TYP1", REQTYP1"DISCONNECT", RESPCODE );
  1458. ALTMSG$LN[0] = MSG1;
  1459. MESSAGE ( ALTMSG[0],SYSUDF1 );
  1460. RESTPFP ( PFP$ABORT );
  1461. END # PROCESS INCORRECT RESPONSE #
  1462.  
  1463. #
  1464. * DISPLAY STATIC INFORMATION
  1465. #
  1466.  
  1467. CHAR$10[0] = XCOD ( ORDINAL );
  1468. IF ORDINAL LQ O"77"
  1469. THEN # ORDINAL HAS 2 CHARACTERS #
  1470. BEGIN # TWO #
  1471. POKEDIS(6,22,2,CHAR$R2[0]);
  1472. END # TWO #
  1473.  
  1474. ELSE # ORDINAL HAS 3 CHARACTERS #
  1475. BEGIN # THREE #
  1476. POKEDIS(6,22,3,CHAR$R3[0]);
  1477. END # THREE #
  1478.  
  1479. #
  1480. * UPDATE STATUSES FROM UDT INFORMATION
  1481. #
  1482.  
  1483. IF UD$CUON[1]
  1484. THEN
  1485. BEGIN
  1486. CH2 = ALTK$CHON;
  1487. END
  1488.  
  1489. ELSE
  1490. BEGIN
  1491. CH2 = ALTK$CHOFF;
  1492. END
  1493.  
  1494. POKEDIS ( 6, 28, 2, CH2 );
  1495.  
  1496. LOOPC = FALSE;
  1497. SLOWFOR NCH = MAX$CH-2 STEP -1 UNTIL 0
  1498. DO
  1499. BEGIN # DISPLAY CHANNELS/CIFS #
  1500. IF LOOPC # TEST CHANNEL A EXAMINED #
  1501. THEN
  1502. BEGIN
  1503. TEST NCH;
  1504. END
  1505.  
  1506. IF NCH EQ 1
  1507. THEN
  1508. BEGIN
  1509. LINE = 18;
  1510. COLUMN = 7;
  1511. END
  1512.  
  1513. ELSE
  1514. BEGIN
  1515. LINE = 19;
  1516. COLUMN = 14;
  1517. END
  1518.  
  1519. IF ( UD$CHAND[1] NQ 0 ) AND ( NCH EQ MAX$CH-2 )
  1520. THEN
  1521. BEGIN
  1522. CHAR$10[0] = XCOD ( UD$CHAND$C[1] );
  1523.  
  1524. POKEDIS ( LINE, 4, 2, CHAR$R2[0] ); # DISPLAY CHANNEL #
  1525.  
  1526. IF UD$CHAND$O[1]
  1527. THEN
  1528. BEGIN
  1529. CH2 = ALTK$CHON;
  1530. END
  1531.  
  1532. ELSE
  1533. BEGIN
  1534. CH2 = ALTK$CHOFF;
  1535. END
  1536.  
  1537. POKEDIS ( LINE, 8, 2, CH2 ); # DISPLAY CHANNEL STATUS #
  1538.  
  1539. CH1 = ALTK$CIF3;
  1540.  
  1541. POKEDIS ( LINE, 13, 1, CH1 ); # DISPLAY CIF FOR CHANNEL #
  1542.  
  1543. POKEDIS ( 8, COLUMN, 1, CH1 ); # DISPLAY CIF #
  1544.  
  1545. STAT = XDXB ( ALTK$CIF3, 0, JINDEX );
  1546.  
  1547. KDISCIF ( JINDEX, NCH ); # DISPLAY CIF ON OUT #
  1548.  
  1549. TEST NCH;
  1550. END
  1551.  
  1552. IF ( ( UD$CHANC[1] NQ 0 ) ##
  1553. AND ( NCH EQ MAX$CH-2 ) ##
  1554. AND ( UD$CHAND[1] EQ 0 ) ) ##
  1555. OR ( ( UD$CHANC[1] NQ 0 ) ##
  1556. AND ( NCH EQ 0 ) ##
  1557. AND ( UD$CHAND[1] NQ 0 ) )
  1558. THEN
  1559. BEGIN
  1560. CHAR$10[0] = XCOD ( UD$CHANC$C[1] );
  1561. POKEDIS ( LINE, 4, 2, CHAR$R2[0] ); # DISPLAY CHANNEL #
  1562. IF UD$CHANC$O[1]
  1563. THEN
  1564. BEGIN
  1565. CH2 = ALTK$CHON;
  1566. END
  1567.  
  1568. ELSE
  1569. BEGIN
  1570. CH2 = ALTK$CHOFF;
  1571. END
  1572.  
  1573. POKEDIS ( LINE, 8, 2, CH2 ); # DISPLAY STATUS #
  1574.  
  1575. CH1 = ALTK$CIF2;
  1576.  
  1577. POKEDIS ( LINE, 13, 1, CH1 ); # DISPLAY CIF NUMBER #
  1578.  
  1579. POKEDIS ( 8, COLUMN, 1, CH1 ); # DISPLAY CIF #
  1580.  
  1581. STAT = XDXB ( ALTK$CIF2, 0, JINDEX );
  1582.  
  1583. KDISCIF ( JINDEX, NCH ); # DISPLAY CIF ON OUT #
  1584.  
  1585. TEST NCH;
  1586. END
  1587.  
  1588. IF ( ( UD$CHANB[1] NQ 0 ) ##
  1589. AND ( NCH EQ 1 ) ##
  1590. AND ( UD$CHAND[1] EQ 0 ) ##
  1591. AND ( UD$CHANC[1] EQ 0 ) ) ##
  1592. OR ( ( UD$CHANB[1] NQ 0 ) ##
  1593. AND ( NCH EQ 0 ) ##
  1594. AND ( ( UD$CHAND[1] NQ 0 ) ##
  1595. AND ( UD$CHANC[1] EQ 0) ##
  1596. OR ( UD$CHAND[1] EQ 0) ##
  1597. AND ( UD$CHANC[1] NQ 0 ) ) )
  1598. THEN
  1599. BEGIN
  1600. CHAR$10[0]= XCOD ( UD$CHANB$C[1] );
  1601.  
  1602. POKEDIS ( LINE, 4, 2, CHAR$R2[0]); # DISPLAY CHANNEL #
  1603.  
  1604. IF UD$CHANB$O[1]
  1605. THEN
  1606. BEGIN
  1607. CH2= ALTK$CHON;
  1608. END
  1609.  
  1610. ELSE
  1611. BEGIN
  1612. CH2= ALTK$CHOFF;
  1613. END
  1614.  
  1615. POKEDIS ( LINE, 8, 2, CH2 ); # DISPLAY CHANNEL STATUS #
  1616.  
  1617. CH1 = ALTK$CIF1;
  1618.  
  1619. POKEDIS ( LINE, 13, 1, CH1 ); # DISPLAY CIF NUMBER #
  1620.  
  1621. POKEDIS ( 8, COLUMN, 1, CH1 ); # DISPLAY CIF NUMBER #
  1622.  
  1623. STAT = XDXB ( ALTK$CIF1, 0, JINDEX );
  1624.  
  1625. KDISCIF ( JINDEX, NCH ); # DISPLAY CIF ON OUT #
  1626.  
  1627. TEST NCH;
  1628. END
  1629.  
  1630. IF ( UD$CHANA[1] NQ 0 ) ##
  1631. OR ( ( UD$CHANA[1] EQ 0 ) AND ( NCH GR 0 ) )
  1632. THEN
  1633. BEGIN
  1634. CHAR$10[0] = XCOD ( UD$CHANA$C[1] );
  1635.  
  1636. POKEDIS ( LINE, 4, 2, CHAR$R2[0] ); # DISPLAY CHANNEL #
  1637.  
  1638. IF UD$CHANA$O[1]
  1639. THEN
  1640. BEGIN
  1641. CH2 = ALTK$CHON;
  1642. END
  1643.  
  1644. ELSE
  1645. BEGIN
  1646. CH2 = ALTK$CHOFF;
  1647. END
  1648.  
  1649. POKEDIS ( LINE, 8, 2, CH2 ); # DISPLAY CHANNEL STATUS #
  1650.  
  1651. CH1 = ALTK$CIF0;
  1652.  
  1653. POKEDIS ( LINE, 13, 1, CH1 ); # DISPLAY CIF NUMBER #
  1654.  
  1655. POKEDIS ( 8, COLUMN, 1, CH1 ); # DISPLAY CIF NUMBER #
  1656.  
  1657. STAT = XDXB ( ALTK$CIF0, 0, JINDEX );
  1658.  
  1659. KDISCIF ( JINDEX, NCH ); # DISPLAY CIF ON OUT #
  1660.  
  1661. LOOPC = TRUE; # FORCE EXIT OF CHANNEL LOOP #
  1662. TEST NCH;
  1663. END
  1664.  
  1665. END
  1666.  
  1667. IF C<13,1>CU$LN[19] EQ "V"
  1668. THEN
  1669. BEGIN
  1670. C<13,1>CU$LN[19] = " ";
  1671. C<4,10>CU$LN[19] = " ";
  1672. SLOWFOR I = 0 STEP 1 UNTIL MAX$CIF + 2
  1673. DO
  1674. BEGIN
  1675. LINE = 8 + I;
  1676. C<11,5>CU$LN[LINE] = ALTK$B5; # CLEAR UNNECESSARY DATA #
  1677. END
  1678.  
  1679. END # DISPLAY CHANNELS/CIFS #
  1680.  
  1681.  
  1682. #
  1683. * UPDATE SM/AIF FIELDS OF *K* DISPLAY.
  1684. #
  1685.  
  1686. P<PTHSTAT> = LOC(UD$AIF0[1]); # PRESET TO AIF0 #
  1687. SLOWFOR ORD = 0 STEP 1 UNTIL MAX$AIF
  1688. DO
  1689. BEGIN
  1690. COLUMN = 57;
  1691. TEMP = 10;
  1692. IF ORD EQ 1
  1693. THEN
  1694. BEGIN
  1695. P<PTHSTAT> = LOC(UD$AIF1[1]); # RESET TO AIF1 #
  1696. TEMP = 17;
  1697. END
  1698.  
  1699. FIRSTAC = 0; # ASSUME AC-S ARE 0-3 #
  1700. IF B<24,24>PATH$WORD[0] NQ 0
  1701. THEN # 2ND SET OF SM-S USED #
  1702. BEGIN # 2ND #
  1703. FIRSTAC = MAX$AC + 1; # RESET TO AC-S 4-7 #
  1704. POKEDIS(TEMP,56,1,"4"); # CHANGE SM ORDINALS TO 2ND SET #
  1705. POKEDIS(TEMP+1,56,1,"5");
  1706. POKEDIS(TEMP+2,56,1,"6");
  1707. POKEDIS(TEMP+3,56,1,"7");
  1708. END # 2ND #
  1709.  
  1710. SLOWFOR J = FIRSTAC STEP 1 UNTIL (FIRSTAC + MAX$AC)
  1711. DO # LOOP THROUGH AC-S 0-3 OR 4-7 #
  1712. BEGIN
  1713. I = J*6;
  1714. LINE = TEMP + (J - FIRSTAC);
  1715. IF B<I+PATH$DF"U$EXISTS",1>PATH$WORD[0] EQ 0
  1716. THEN
  1717. BEGIN
  1718. POKEDIS ( LINE, 53, 5, ALTK$B5 ); # BLANK THE FIELD #
  1719. TEST J;
  1720. END
  1721.  
  1722. IF B<I+PATH$DF"U$ON",1>PATH$WORD[0] NQ 0
  1723. THEN
  1724. BEGIN
  1725. POKEDIS ( LINE, 57, 1, ALTK$ONLINE ); # ONLINE MODE #
  1726. TEST J;
  1727. END
  1728.  
  1729. ELSE
  1730. BEGIN
  1731. POKEDIS ( LINE, 57, 1, ALTK$OFFLINE ); # OFFLINE MODE #
  1732. TEST J;
  1733. END
  1734.  
  1735. END # TEST J #
  1736.  
  1737. END # TEST ORD #
  1738.  
  1739.  
  1740. #
  1741. * CLEAR OUT ALL REQUEST BITS
  1742. #
  1743.  
  1744. END # DISPCU #
  1745.  
  1746. TERM
  1747. PROC DISPSM ( INDEX , INITIALIZE );
  1748.  
  1749. # TITLE DISPSM - DISPLAY *SM* INFORMATION #
  1750.  
  1751. BEGIN # DISPSM #
  1752.  
  1753. #
  1754. *** DISPSM - DISPLAY *SM* DISPLAY
  1755. *
  1756. * *DISPSM* GENERATES AND DISPLAYS THE *SM* DISPLAY
  1757. * FOR *SSALTER*
  1758. *
  1759. * ENTRY INDEX = SM TO BE DISPLAYED.
  1760. * INITIALIZE = TRUE IF AND ONLY IF *SSEXEC* IS
  1761. * BEING INITIALIZED.
  1762. *
  1763. *
  1764. * EXIT DISPLAY SHOWN ON LEFT SCREEN.
  1765. #
  1766.  
  1767. #
  1768. **** PROC DISPSM - XREF LIST BEGIN.
  1769. #
  1770.  
  1771. XREF
  1772. BEGIN
  1773. PROC MESSAGE; # ISSUE A DAYFILE MESSAGE #
  1774. PROC POKEDIS; # UPDATE *K* DISPLAY #
  1775. PROC RESTPFP; # RESTORE USER-S PFP AND ABORT OR
  1776.   RETURN #
  1777. PROC UCPREQ; # ISSUE UCP REQUEST TO SSEXEC #
  1778. FUNC XCDD C(10); # CONV INT TO DECIMAL DISPLAY #
  1779. FUNC XCOD C(10); # CONVERT INTEGER TO OCTAL DISPLAY
  1780.   #
  1781. END
  1782.  
  1783. #
  1784. **** PROC DISPSM - XREF LIST END.
  1785. #
  1786.  
  1787. #
  1788. * DAYFILE MESSAGES.
  1789. #
  1790.  
  1791. DEF MSG1 #" DISPSM - INCORRECT RESPONSE FROM SSEXEC."#;
  1792. DEF BLANK #" "#;
  1793.  
  1794.  
  1795. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  1796.  
  1797. *CALL,COMBFAS
  1798. *CALL,COMBCPR
  1799. *CALL,COMBUDT
  1800. *CALL,COMTALT
  1801.  
  1802. ARRAY CHAR10[0:0] S(3); # CHARACTER MANIPULATION #
  1803. BEGIN
  1804. ITEM CHAR$10 C(00,00,10);
  1805. ITEM CHAR$R3 C(00,42,03);
  1806. ITEM CHAR$R2 C(00,48,02);
  1807. ITEM CHAR$DRD0 C(01,00,10);
  1808. ITEM CHAR$2D0 C(01,48,02);
  1809. ITEM CHAR$D0 C(01,54,01);
  1810. ITEM CHAR$DRD1 C(02,00,10);
  1811. ITEM CHAR$2D1 C(02,48,02);
  1812. ITEM CHAR$D1 C(02,54,01);
  1813. END
  1814.  
  1815. ITEM CH C(2); # TWO CHARACTERS #
  1816. ITEM I I; # LOOP INDEX #
  1817. ITEM EST$ORD I; # EST ORDINAL #
  1818. ITEM INDEX I; # INPUT PARAMETER #
  1819. ITEM INITIALIZE B; # INPUT PARAMETER #
  1820. ITEM ORD I; # TEMPORARY STORAGE #
  1821. ITEM RESPCODE I; # RESPONSE FROM *SSEXEC* #
  1822. ITEM SMID C(1); # STORAGE MODULE ID #
  1823. ITEM TEMP I; # SCRATCH #
  1824. CONTROL EJECT;
  1825.  
  1826. ITEM SMBLANK C(58) =
  1827. " ";
  1828. ITEM SMHDR1 C(58) =
  1829. " PCU SCU SM/DRD";
  1830. ITEM SMHDR2 C(58) =
  1831. " ST ST ST";
  1832. ITEM SM$LINE C(58) =
  1833. " SM X N N X";
  1834. ITEM DRD$LINE C(58) =
  1835. " DRD N X";
  1836. ITEM DASH$LINE C(58) =
  1837. " ------------------------------------";
  1838. ITEM VALID$COM C(58) =
  1839. " VALID COMMANDS ARE -";
  1840. ITEM VAL$COM1 C(58) =
  1841. " K.SMI,CUNN=S.";
  1842. ITEM VAL$COM2 C(58) =
  1843. " K.SMI,DRDN,CUNN=S.";
  1844. ITEM VAL$COM3 C(58) =
  1845. " K.+ = DISPLAY NEXT SM";
  1846. ITEM VAL$COM4 C(58) =
  1847. " I = SM IDENTIFIER";
  1848. ITEM VAL$COM5 C(58) =
  1849. " N = DRD DEVICE ADDRESS";
  1850. ITEM VAL$COM6 C(58) =
  1851. " NN = CU EST ORDINAL";
  1852. ITEM VAL$COM7 C(58) =
  1853. " S = STATUS - U(ON),F(OFF),M(MAINTENANCE)";
  1854. ITEM VAL$COM8 C(58) =
  1855. " S = STATUS - U(ON),F(OFF)";
  1856. ITEM VAL$COM9 C(59) =
  1857. " + = DISPLAY NEXT SM";
  1858. CONTROL EJECT;
  1859.  
  1860. #
  1861. * BLANK THE *K* DISPLAY
  1862. #
  1863.  
  1864. P<SM$SCREEN> = LOC(KLEFTSCRNAL);
  1865. SLOWFOR I = LF$AL$BODY STEP 1 UNTIL LF$AL$KBECHO-1
  1866. DO
  1867. BEGIN
  1868. SM$LN[I] = SMBLANK;
  1869. SM$EOL[I] = 0;
  1870. END
  1871.  
  1872. #
  1873. * PAINT NON-CHANGING WORDS ON THE SCREEN
  1874. #
  1875.  
  1876. SM$LN[3] = SMHDR1;
  1877. SM$LN[4] = SMHDR2;
  1878. SM$LN[6] = SM$LINE;
  1879. SM$LN[8] = DRD$LINE;
  1880. SM$LN[10] = DRD$LINE;
  1881. SM$LN[11] = DASH$LINE;
  1882. SM$LN[12] = VALID$COM;
  1883. SM$LN[13] = VAL$COM1;
  1884. SM$LN[14] = VAL$COM2;
  1885. SM$LN[15] = VAL$COM3;
  1886. SM$LN[16] = VAL$COM4;
  1887. SM$LN[17] = VAL$COM5;
  1888. SM$LN[18] = VAL$COM6;
  1889. SM$LN[19] = VAL$COM8;
  1890. IF NOT INITIALIZE
  1891. THEN
  1892. BEGIN
  1893. SM$LN[19] = VAL$COM7;
  1894. END
  1895.  
  1896. #
  1897. * DISPLAY STATIC INFORMATION
  1898. #
  1899.  
  1900. P<UDT$SMA> = LOC( UDT$M861[INDEX] );
  1901. CHAR$DRD0[0] = XCDD(D0$SUN[1]);
  1902. CHAR$DRD1[0] = XCDD(D1$SUN[1]);
  1903. TEMP = 6; # SM LINE #
  1904. POKEDIS ( TEMP , 11 , 1 , SM$ID[1] );
  1905. ORD = SM$CUO0[1] - 1;
  1906. IF ORD NQ -1
  1907. THEN
  1908. BEGIN
  1909. P<UDT$CN> = LOC( UDT$M862[ORD] );
  1910. EST$ORD = UD$ESTO[1];
  1911. CHAR$10[0] = XCOD(EST$ORD);
  1912. END
  1913.  
  1914. ELSE
  1915. BEGIN
  1916. CHAR$10[0] = BLANK;
  1917. END
  1918.  
  1919. IF EST$ORD LQ O"77"
  1920. THEN # ORDINAL HAS 2 CHARACTERS #
  1921. BEGIN # TWO #
  1922. POKEDIS(TEMP,19,2,CHAR$R2[0]);
  1923. END # TWO #
  1924.  
  1925. ELSE # ORDINAL HAS 3 CHARACTERS #
  1926. BEGIN # THREE #
  1927. POKEDIS(TEMP,18,3,CHAR$R3[0]);
  1928. END # THREE #
  1929.  
  1930. ORD = SM$CUO1[1] - 1;
  1931. IF ORD NQ -1
  1932. THEN
  1933. BEGIN
  1934. P<UDT$CN> = LOC( UDT$M862[ORD] );
  1935. EST$ORD = UD$ESTO[1];
  1936. CHAR$10[0] = XCOD ( EST$ORD );
  1937. END
  1938.  
  1939. ELSE
  1940. BEGIN
  1941. CHAR$10[0] = BLANK; # BLANK IF NONE PRESENT #
  1942. END
  1943.  
  1944. IF EST$ORD LQ O"77"
  1945. THEN # ORDINAL HAS 2 CHARACTERS #
  1946. BEGIN # TWO #
  1947. POKEDIS(TEMP,28,2,CHAR$R2[0]);
  1948. END # TWO #
  1949.  
  1950. ELSE # ORDINAL HAS 3 CHARACTERS #
  1951. BEGIN # THREE #
  1952. POKEDIS(TEMP,27,3,CHAR$R3[0]);
  1953. END # THREE #
  1954.  
  1955. #
  1956. * GET UDT INFORMATION
  1957. #
  1958.  
  1959. UCPREQ ( TYP"TYP5", REQTYP5"SSA$PUDT", RESPCODE );
  1960.  
  1961. IF ( RESPCODE NQ RESPTYP5"OK5" ) ##
  1962. AND ( RESPCODE NQ RESPTYP5"SSA$OK" )
  1963. THEN
  1964. BEGIN # PROCESS INCORRECT RESPONSE #
  1965. UCPREQ ( TYP"TYP1", REQTYP1"DISCONNECT", RESPCODE );
  1966. ALTMSG$LN[0] = MSG1;
  1967. MESSAGE ( ALTMSG[0],SYSUDF1 );
  1968. RESTPFP ( PFP$ABORT );
  1969. END # PROCESS INCORRECT RESPONSE #
  1970.  
  1971. #
  1972. * EXTRACT UDT DATA AND UPDATE THE DYNAMIC K-DISPLAY
  1973. #
  1974.  
  1975.  
  1976. IF SM$EXIST[1]
  1977. THEN
  1978. BEGIN
  1979. IF SM$ON[1]
  1980. THEN
  1981. BEGIN
  1982. POKEDIS ( TEMP , 37 , 1 , ALTK$ONLINE );
  1983. END
  1984.  
  1985. ELSE
  1986. BEGIN
  1987. POKEDIS ( TEMP , 37 , 1 , ALTK$OFFLINE );
  1988. END
  1989.  
  1990. IF SM$DIAG[1]
  1991. THEN
  1992. BEGIN
  1993. POKEDIS ( TEMP , 37 , 1 , ALTK$MAINT );
  1994. END
  1995.  
  1996. IF SM$STS0[1] NQ 0
  1997. THEN
  1998. BEGIN # DISPLAY ACCESSOR STATUS FROM 1ST CU #
  1999. IF B<PATH$DF"U$ON",1>SM$STS0[1] EQ 1
  2000. THEN
  2001. BEGIN
  2002. POKEDIS ( TEMP , 21 , 1 , ALTK$ONLINE );
  2003. END
  2004.  
  2005. ELSE
  2006. BEGIN
  2007. POKEDIS ( TEMP , 21 , 1 , ALTK$OFFLINE );
  2008. END
  2009.  
  2010. IF B<PATH$DF"U$RQ$DIAG",1>SM$STS0[1] EQ 1
  2011. THEN
  2012. BEGIN
  2013. POKEDIS ( TEMP , 21 , 1 , ALTK$MAINT );
  2014. END
  2015.  
  2016. END # DISPLAY ACCESSOR STATUS FROM 1ST CU #
  2017.  
  2018. IF SM$STS1[1] NQ 0
  2019. THEN
  2020. BEGIN # DISPLAY ACCESSOR STATUS FROM 2ND CU #
  2021. IF B<PATH$DF"U$ON",1>SM$STS1[1] EQ 1
  2022. THEN
  2023. BEGIN
  2024. POKEDIS ( TEMP ,30 , 1 , ALTK$ONLINE );
  2025. END
  2026.  
  2027. ELSE
  2028. BEGIN
  2029. POKEDIS ( TEMP , 30 , 1 , ALTK$OFFLINE );
  2030. END
  2031.  
  2032. IF B<PATH$DF"U$RQ$DIAG",1>SM$STS1[1] EQ 1
  2033. THEN
  2034. BEGIN
  2035. POKEDIS ( TEMP , 30 , 1 , ALTK$MAINT );
  2036. END
  2037.  
  2038. END # DISPLAY ACCESSOR STATUS FROM 2ND CU #
  2039.  
  2040. IF NOT (SM$ON$ACK[1] OR SM$DAG$ACK[1])
  2041. THEN
  2042. BEGIN
  2043. POKEDIS ( TEMP , 48 , 1 , BLANK );
  2044. END
  2045.  
  2046. END
  2047.  
  2048. TEMP = 8 ; # SET FIRST DRD LINE #
  2049. IF D0$EXIST[1]
  2050. THEN
  2051. BEGIN
  2052. POKEDIS ( TEMP , 11 , 1 , CHAR$D0[0] );
  2053. IF D0$SUN[1] GQ 10
  2054. THEN # DRD ORDINAL HAS 2 CHARACTERS #
  2055. BEGIN # TWO #
  2056. POKEDIS(TEMP,10,2,CHAR$2D0[0]);
  2057. END # TWO #
  2058.  
  2059. IF D0$ON[1]
  2060. THEN
  2061. BEGIN
  2062. POKEDIS ( TEMP , 37 , 1 , ALTK$ONLINE );
  2063. END
  2064.  
  2065. ELSE
  2066. BEGIN
  2067. POKEDIS ( TEMP , 37 , 1 , ALTK$OFFLINE );
  2068. END
  2069.  
  2070. IF D0$DIAG[1]
  2071. THEN
  2072. BEGIN
  2073. POKEDIS ( TEMP , 37 , 1 , ALTK$MAINT );
  2074. END
  2075.  
  2076. END
  2077.  
  2078. IF D0$STSP[1] NQ 0
  2079. THEN
  2080. BEGIN # DISPLAY DRD STATUS FROM 1ST CU #
  2081. IF B<PATH$DF"U$ON",1>D0$STSP[1] EQ 1
  2082. THEN
  2083. BEGIN
  2084. POKEDIS ( TEMP , 20 , 1 , ALTK$ONLINE );
  2085. END
  2086.  
  2087. ELSE
  2088. BEGIN
  2089. POKEDIS ( TEMP , 20 , 1 , ALTK$OFFLINE );
  2090. END
  2091.  
  2092. IF B<PATH$DF"U$RQ$DIAG",1>D0$STSP[1] EQ 1
  2093. THEN
  2094. BEGIN
  2095. POKEDIS ( TEMP , 20 , 1 , ALTK$MAINT );
  2096. END
  2097.  
  2098. END # DISPLAY DRD STATUS FROM 1ST CU #
  2099.  
  2100. IF D0$STSS[1] NQ 0
  2101. THEN
  2102. BEGIN # DISPLAY DRD STATUS FROM 2ND CU #
  2103. IF B<PATH$DF"U$ON",1>D0$STSS[1] EQ 1
  2104. THEN
  2105. BEGIN
  2106. POKEDIS ( TEMP , 29 , 1 , ALTK$ONLINE );
  2107. END
  2108.  
  2109. ELSE
  2110. BEGIN
  2111. POKEDIS ( TEMP , 29 , 1 , ALTK$OFFLINE );
  2112. END
  2113.  
  2114. IF B<PATH$DF"U$RQ$DIAG",1>D0$STSS[1] EQ 1
  2115. THEN
  2116. BEGIN
  2117. POKEDIS ( TEMP , 29 , 1 , ALTK$MAINT );
  2118. END
  2119.  
  2120. END # DISPLAY DRD STATUS FROM 2ND CU #
  2121.  
  2122. IF NOT D0$EXIST[1]
  2123. THEN
  2124. BEGIN
  2125. POKEDIS ( TEMP , 2 , 5 , ALTK$B5 ); # BLANK NON-EXISTENT DRD #
  2126. POKEDIS(TEMP,10,2," ");
  2127. POKEDIS ( TEMP , 37 , 1 , BLANK );
  2128. POKEDIS ( TEMP , 48 , 1 , BLANK );
  2129. END
  2130.  
  2131. TEMP = 10; # SET SECOND DRD LINE #
  2132. IF D1$EXIST[1]
  2133. THEN
  2134. BEGIN
  2135. POKEDIS ( TEMP , 11 , 1 , CHAR$D1[0] );
  2136. IF D1$SUN[1] GQ 10
  2137. THEN # DRD ORDINAL HAS 2 CHARACTERS #
  2138. BEGIN # TWO #
  2139. POKEDIS(TEMP,10,2,CHAR$2D1[0]);
  2140. END # TWO #
  2141.  
  2142. IF D1$ON[1]
  2143. THEN
  2144. BEGIN
  2145. POKEDIS ( TEMP , 37 , 1 , ALTK$ONLINE );
  2146. END
  2147.  
  2148. ELSE
  2149. BEGIN
  2150. POKEDIS ( TEMP , 37 , 1 , ALTK$OFFLINE );
  2151. END
  2152.  
  2153. IF D1$DIAG[1]
  2154. THEN
  2155. BEGIN
  2156. POKEDIS ( TEMP , 37 , 1 , ALTK$MAINT );
  2157. END
  2158.  
  2159.  
  2160. END
  2161.  
  2162. IF D1$STSP[1] NQ 0
  2163. THEN
  2164. BEGIN # DISPLAY DRD STATUS FROM 1ST CU #
  2165. IF B<PATH$DF"U$ON",1>D1$STSP[1] EQ 1
  2166. THEN
  2167. BEGIN
  2168. POKEDIS ( TEMP , 20 , 1 , ALTK$ONLINE );
  2169. END
  2170.  
  2171. ELSE
  2172. BEGIN
  2173. POKEDIS ( TEMP , 20 , 1 , ALTK$OFFLINE );
  2174. END
  2175.  
  2176. IF B<PATH$DF"U$RQ$DIAG",1>D1$STSP[1] EQ 1
  2177. THEN
  2178. BEGIN
  2179. POKEDIS ( TEMP , 20 , 1 , ALTK$MAINT );
  2180. END
  2181.  
  2182. END # DISPLAY DRD STATUS FROM 1ST CU #
  2183.  
  2184. IF D1$STSS[1] NQ 0
  2185. THEN
  2186. BEGIN # DISPLAY DRD STATUS FROM 2ND CU #
  2187. IF B<PATH$DF"U$ON",1>D1$STSS[1] EQ 1
  2188. THEN
  2189. BEGIN
  2190. POKEDIS ( TEMP , 29 , 1 , ALTK$ONLINE );
  2191. END
  2192.  
  2193. ELSE
  2194. BEGIN
  2195. POKEDIS ( TEMP , 29 , 1 , ALTK$OFFLINE );
  2196. END
  2197.  
  2198. IF B<PATH$DF"U$RQ$DIAG",1>D1$STSS[1] EQ 1
  2199. THEN
  2200. BEGIN
  2201. POKEDIS ( TEMP , 29 , 1 , ALTK$MAINT );
  2202. END
  2203.  
  2204. END # DISPLAY DRD STATUS FROM 2ND CU #
  2205.  
  2206. IF NOT D1$EXIST[1]
  2207. THEN
  2208. BEGIN
  2209. POKEDIS ( TEMP , 2 , 5 , ALTK$B5 ); # BLANK NON-EXISTENT DRDS #
  2210. POKEDIS(TEMP,10,2," ");
  2211. POKEDIS ( TEMP , 37 , 1 , BLANK );
  2212. POKEDIS ( TEMP , 48 , 1 , BLANK );
  2213. END
  2214.  
  2215.  
  2216. END # DISPSM #
  2217.  
  2218. TERM
  2219. PROC KDISCIF ( INDEX, CIFORD );
  2220. # TITLE KDISCIF - DISPLAY CIF DATA FROM UDT. #
  2221.  
  2222. BEGIN # KDISCIF #
  2223.  
  2224. #
  2225. ** KDIXCIF - DISPLAY CIF DATA FROM UDT.
  2226. *
  2227. * PROC KDISCIF ( INDEX, CIFORD )
  2228. *
  2229. * ENTRY - INDEX = DEVICE ADDRESS OF CIF TO DISPLAY.
  2230. * CIFORD = INDICATOR DESCRIBING COLUMN TO UPDATE.
  2231. *
  2232. * EXIT - *CU* DISPLAY UPDATED FOR CIF COLUMNS.
  2233. *
  2234. #
  2235.  
  2236. ITEM INDEX I; # INPUT VARIABLE #
  2237. ITEM CIFORD I; # INPUT VARIABLE #
  2238.  
  2239. #
  2240. **** PROC KDISCIF - XREF LIST BEGIN.
  2241. #
  2242.  
  2243. XREF
  2244. BEGIN
  2245. PROC POKEDIS; # POKE DATA INTO *K* DISPLAY
  2246.   BUFFER #
  2247. PROC KDISDTX; # UPDATE DTI/DTO DISPLAY #
  2248. END
  2249.  
  2250. #
  2251. * KDISCIF - XREF LIST END.
  2252. #
  2253.  
  2254. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  2255.  
  2256. *CALL,COMBFAS
  2257. *CALL,COMBUDT
  2258. *CALL,COMTALT
  2259. CONTROL EJECT;
  2260.  
  2261. ITEM COLUMN I; # COLUMN NUMBER #
  2262. ITEM COLUMNM4 I; # COLUMN NUMBER MINUS 4 #
  2263. ITEM I I; # INTEGER SCRATCH #
  2264. ITEM J I; # LOOP VARIABLE #
  2265. ITEM LINE I; # LINE IN *K* DISPLAY #
  2266. CONTROL EJECT;
  2267. IF CIFORD EQ 0
  2268. THEN
  2269. BEGIN
  2270. COLUMN = 15;
  2271. COLUMNM4 = 11;
  2272. END
  2273.  
  2274. ELSE
  2275. BEGIN
  2276. COLUMN = 8;
  2277. COLUMNM4 = 4;
  2278. END
  2279.  
  2280.  
  2281. IF INDEX GQ 2
  2282. THEN
  2283. BEGIN
  2284. GOTO CIF23; # JUMP IF CIF2 OR CIF3 #
  2285. END
  2286.  
  2287. #
  2288. * LOOP FOR EACH DTI/DTO
  2289. #
  2290.  
  2291. SLOWFOR J = 0 STEP 1 UNTIL MAX$CIF
  2292. DO
  2293. BEGIN # CIF01 TESTING #
  2294. LINE = J + 10;
  2295. I = J*6;
  2296. IF B< I+(INDEX*24)+PATH$DF"U$EXISTS", 1>UD$CIF01[1] EQ 0
  2297. THEN
  2298. BEGIN
  2299. POKEDIS ( LINE, COLUMNM4, 5, ALTK$B5 ); # BLANK DISPLAY #
  2300. KDISDTX(J);
  2301. TEST J;
  2302. END
  2303.  
  2304. KDISDTX ( J ); # DISPLAY DTI/DTO ON OUT #
  2305.  
  2306. IF B< I+(INDEX*24)+PATH$DF"U$RQ$DIAG", 1 >UD$CIF01[1] NQ 0
  2307. THEN
  2308. BEGIN
  2309. POKEDIS ( LINE, COLUMN, 1, ALTK$MAINT ); # DIAG MODE #
  2310. TEST J;
  2311. END
  2312.  
  2313. IF B< I+(INDEX*24)+PATH$DF"U$ON", 1 >UD$CIF01[1] NQ 0
  2314. THEN
  2315. BEGIN
  2316. POKEDIS ( LINE, COLUMN, 1, ALTK$ONLINE ); # ONLINE MODE #
  2317. TEST J;
  2318. END
  2319.  
  2320. ELSE
  2321. BEGIN
  2322. POKEDIS ( LINE, COLUMN, 1, ALTK$OFFLINE ); # OFFLINE MD #
  2323. END
  2324.  
  2325. END # CIF01 TESTING #
  2326.  
  2327. RETURN;
  2328.  
  2329. CIF23:
  2330.  
  2331. #
  2332. * LOOP FOR EACH DTI/DTO ON CIF2/CIF3
  2333. #
  2334.  
  2335. INDEX = INDEX - 2;
  2336. SLOWFOR J = 0 STEP 1 UNTIL MAX$CIF
  2337. DO
  2338. BEGIN # CIF23 TESTING #
  2339. LINE = J + 10;
  2340. I = J*6;
  2341. IF B< I+(INDEX*24)+PATH$DF"U$EXISTS", 1>UD$CIF23[1] EQ 0
  2342. THEN
  2343. BEGIN
  2344. POKEDIS ( LINE, COLUMNM4, 5, ALTK$B5 ); # BLANK DISPLAY #
  2345. TEST J;
  2346. END
  2347.  
  2348. KDISDTX ( J ); # DISPLAY DTI/DTO ON OUT #
  2349.  
  2350. IF B< I+(INDEX*24)+PATH$DF"U$RQ$DIAG", 1 >UD$CIF23[1] NQ 0
  2351. THEN
  2352. BEGIN
  2353. POKEDIS ( LINE, COLUMN, 1, ALTK$MAINT ); # DIAG MODE #
  2354. TEST J;
  2355. END
  2356.  
  2357. IF B< I+(INDEX*24)+PATH$DF"U$ON", 1 >UD$CIF23[1] NQ 0
  2358. THEN
  2359. BEGIN
  2360. POKEDIS ( LINE, COLUMN, 1, ALTK$ONLINE ); # ONLINE MODE #
  2361. TEST J;
  2362. END
  2363.  
  2364. ELSE
  2365. BEGIN
  2366. POKEDIS ( LINE, COLUMN, 1, ALTK$OFFLINE ); # OFFLINE MD #
  2367. END
  2368.  
  2369. END # CIF23 TESTING #
  2370.  
  2371. RETURN;
  2372.  
  2373. END # KDISCIF #
  2374.  
  2375. TERM
  2376. PROC KDISDIF ( INDEX );
  2377. # TITLE KDISDIF - DISPLAY DIF DATA FROM UDT. #
  2378.  
  2379. BEGIN # KDISDIF #
  2380.  
  2381. #
  2382. ** KDISDIF - DISPLAY DTI/DTO DATA FROM UDT.
  2383. *
  2384. * PROC KDISDIF ( INDEX )
  2385. *
  2386. * ENTRY - INDEX = DEVICE ADDRESS OF DIF TO DISPLAY.
  2387. *
  2388. * EXIT - *CU* DISPLAY UPDATED FOR DIF COLUMNS.
  2389. *
  2390. #
  2391.  
  2392. ITEM INDEX I; # INPUT VARIABLE #
  2393.  
  2394. #
  2395. **** PROC KDISDIF - XREF LIST BEGIN.
  2396. #
  2397.  
  2398. XREF
  2399. BEGIN
  2400. PROC KDISDRC; # DISPLAY DRC ON OUT #
  2401. PROC POKEDIS; # POKE DATA INTO *K* DISPLAY
  2402.   BUFFER #
  2403. END
  2404.  
  2405. #
  2406. * KDISDIF - XREF LIST END.
  2407. #
  2408.  
  2409. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  2410. *CALL,COMBFAS
  2411. *CALL,COMBUDT
  2412. *CALL,COMTALT
  2413. CONTROL EJECT;
  2414.  
  2415. ITEM COLUMN I; # *K* DISPLAY COLUMN #
  2416. ITEM COLUMNM4 I; # *K* DISPLAY COLUMN #
  2417. ITEM I I; # INTEGER SCRATCH #
  2418. ITEM J I; # LOOP VARIABLE #
  2419. ITEM LINE I; # LINE IN *K* DISPLAY #
  2420. CONTROL EJECT;
  2421.  
  2422. COLUMN = 36; # POSITION COLUMN #
  2423. COLUMNM4 = 32; # POSITION 5 BLANKS #
  2424. I = INDEX*24; # POSITION TO CORRECT FIELD #
  2425.  
  2426. #
  2427. * LOOP FOR EACH DIF
  2428. #
  2429.  
  2430. SLOWFOR J = 0 STEP 1 UNTIL MAX$DRC
  2431. DO
  2432. BEGIN # DIF TESTING #
  2433. LINE = J + 10;
  2434. IF INDEX EQ 1
  2435. THEN
  2436. BEGIN # ADJUST FOR THE DISPLAY #
  2437. LINE = LINE + 7;
  2438. END # ADJUST FOR THE DISPLAY #
  2439.  
  2440.  
  2441. KDISDRC ( J ); # DISPLAY DRC ON OUT #
  2442. IF B< (J*6)+I+PATH$DF"U$EXISTS", 1>UD$DIF[1] EQ 0
  2443. THEN
  2444. BEGIN
  2445. POKEDIS ( LINE, COLUMNM4, 5, ALTK$B5 ); # BLANK FIELD #
  2446. TEST J;
  2447. END
  2448.  
  2449. IF B< (J*6)+I+PATH$DF"U$RQ$DIAG", 1>UD$DIF[1] NQ 0
  2450. THEN
  2451. BEGIN
  2452. POKEDIS ( LINE, COLUMN, 1, ALTK$MAINT ); # SET DIAG MODE #
  2453. TEST J;
  2454. END
  2455.  
  2456. IF B< (J*6)+I+PATH$DF"U$ON", 1>UD$DIF[1] NQ 0
  2457. THEN
  2458. BEGIN
  2459. POKEDIS ( LINE, COLUMN, 1, ALTK$ONLINE ); # ONLINE MODE #
  2460. TEST J;
  2461. END
  2462.  
  2463. ELSE
  2464. BEGIN
  2465. POKEDIS ( LINE, COLUMN, 1, ALTK$OFFLINE ); # OFFLINE MD #
  2466. END
  2467.  
  2468. END # DIF TESTING #
  2469.  
  2470. END # KDISDIF #
  2471.  
  2472. TERM
  2473. PROC KDISDRC ( INDEX );
  2474. # TITLE KDISDRC - DISPLAY DRC DATA FROM UDT. #
  2475.  
  2476. BEGIN # KDISDRC #
  2477.  
  2478. #
  2479. ** KDISDRC - DISPLAY DRC DATA FROM UDT.
  2480. *
  2481. * PROC KDISDRC ( INDEX )
  2482. *
  2483. * ENTRY - INDEX = DEVICE ADDRESS OF DRC TO DISPLAY.
  2484. *
  2485. * EXIT - *CU* DISPLAY UPDATED FOR *DRC* COLUMNS.
  2486. *
  2487. #
  2488.  
  2489. ITEM INDEX I; # INPUT VARIABLE #
  2490.  
  2491. #
  2492. **** PROC KDISDRC - XREF LIST BEGIN.
  2493. #
  2494.  
  2495. XREF
  2496. BEGIN
  2497. PROC POKEDIS; # POKE DATA INTO *K* DISPLAY
  2498.   BUFFER #
  2499. FUNC XCDD C(10); # CONVERT DECIMAL TO DISP CODE #
  2500. END
  2501.  
  2502. #
  2503. * KDISDRC - XREF LIST END.
  2504. #
  2505.  
  2506. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  2507. *CALL,COMBFAS
  2508. *CALL,COMBUDT
  2509. *CALL,COMTALT
  2510.  
  2511. #
  2512. * SWITCH STATEMENT
  2513. #
  2514.  
  2515. SWITCH DRCCOLUMN
  2516. DRC0,
  2517. DRC1,
  2518. DRC2,
  2519. DRC3;
  2520. CONTROL EJECT;
  2521.  
  2522. ITEM COLUMN I; # *K* DISPLAY COLUMN #
  2523. ITEM COLUMNM4 I; # *K* DISPLAY COLUMN #
  2524. ITEM I I; # INTEGER SCRATCH #
  2525. ITEM J I; # LOOP VARIABLE #
  2526. ITEM LINE I; # LINE IN *K* DISPLAY #
  2527.  
  2528. #
  2529. * CHARACTER MANIPULATION.
  2530. #
  2531.  
  2532. ARRAY DRDSCR[0:0] S(1); # FOR DRD ORDINALS > 7 #
  2533. BEGIN
  2534. ITEM CHAR10 C(00,00,10);
  2535. ITEM CHAR2 C(00,48,02);
  2536. ITEM CHAR C(00,54,01);
  2537. END
  2538.  
  2539. CONTROL EJECT;
  2540.  
  2541. #
  2542. * INITIALIZE *K* DISPLAY COORDINATES.
  2543. #
  2544.  
  2545. IF (INDEX EQ 0 AND UD$DRCP0[1] EQ 0) ##
  2546. OR (INDEX EQ 1 AND UD$DRCP1[1] EQ 0) ##
  2547. OR (INDEX EQ 2 AND UD$DRCP2[1] EQ 0) ##
  2548. OR (INDEX EQ 3 AND UD$DRCP3[1] EQ 0)
  2549. THEN # DRC DOES NOT EXIST ON THIS CU #
  2550. BEGIN # SKIP #
  2551. RETURN;
  2552. END # SKIP #
  2553.  
  2554. IF INDEX GR 1
  2555. THEN
  2556. BEGIN # ADJUST - EXPANDED CONFIGURATION #
  2557. LINE = 8;
  2558. COLUMN = 42 + (INDEX-2)*7;
  2559. IF INDEX EQ 2
  2560. THEN
  2561. BEGIN
  2562. POKEDIS( LINE , COLUMN , 1 , ALTK$DRC2 ); # SET DRC2 #
  2563. END
  2564.  
  2565. ELSE
  2566. BEGIN
  2567. POKEDIS ( LINE , COLUMN , 1 , ALTK$DRC3 ); # SET DRC3 #
  2568. END
  2569.  
  2570. LINE = 10; # FIRST LINE OF DRD-S #
  2571. SLOWFOR J = (MAX$DRD + 1) STEP 1 UNTIL MAX$DRDDA
  2572. DO # RESET TO SECOND DRD GROUP #
  2573. BEGIN # RESET #
  2574. IF J LS 10
  2575. THEN # DRD IS ONE DIGIT #
  2576. BEGIN # ONE #
  2577. CHAR10 = XCDD(J);
  2578. POKEDIS(LINE,COLUMN,1,CHAR);
  2579. END # ONE #
  2580.  
  2581. ELSE # DRD IS TWO DIGITS #
  2582. BEGIN # TWO #
  2583. CHAR10 = XCDD(J);
  2584. POKEDIS(LINE,COLUMN,2,CHAR2);
  2585. END # TWO #
  2586.  
  2587. LINE = LINE + 1;
  2588. END # RESET #
  2589.  
  2590. END # ADJUST - EXPANDED CONFIGURATION #
  2591.  
  2592. IF INDEX EQ 0 ##
  2593. OR INDEX EQ 2
  2594.  
  2595. THEN
  2596. BEGIN
  2597. COLUMN = 43; # COLUMN FOR DRC0/DRC2 DATA #
  2598. COLUMNM4 = 39;
  2599. END
  2600.  
  2601. ELSE
  2602. BEGIN
  2603. COLUMN = 50; # COLUMN FOR DRC1/DRC3 DATA #
  2604. COLUMNM4 = 46;
  2605. END
  2606.  
  2607. GOTO DRCCOLUMN[INDEX];
  2608.  
  2609. DRC0:
  2610. #
  2611. * LOOP FOR EACH DRD ON DRC0
  2612. #
  2613.  
  2614. SLOWFOR J = 0 STEP 1 UNTIL MAX$DRD
  2615. DO
  2616. BEGIN # DRD TESTING #
  2617. LINE = J + 10;
  2618. IF B< (J*6)+I+PATH$DF"U$EXISTS", 1>UD$DRCP0[1] EQ 0
  2619. THEN
  2620. BEGIN
  2621. POKEDIS ( LINE, COLUMNM4, 5, ALTK$B5 ); # BLANK FIELD #
  2622. TEST J;
  2623. END
  2624.  
  2625. IF B< (J*6)+I+PATH$DF"U$RQ$DIAG", 1>UD$DRCP0[1] NQ 0
  2626. THEN
  2627. BEGIN
  2628. POKEDIS ( LINE, COLUMN, 1, ALTK$MAINT ); # SET DIAG MODE #
  2629. TEST J;
  2630. END
  2631.  
  2632. IF B< (J*6)+I+PATH$DF"U$ON", 1>UD$DRCP0[1] NQ 0
  2633. THEN
  2634. BEGIN
  2635. POKEDIS ( LINE, COLUMN, 1, ALTK$ONLINE ); # ONLINE MODE #
  2636. TEST J;
  2637. END
  2638.  
  2639. ELSE
  2640. BEGIN
  2641. POKEDIS ( LINE, COLUMN, 1, ALTK$OFFLINE ); # OFFLINE MODE #
  2642. END
  2643.  
  2644. END # DRD TESTING #
  2645.  
  2646. RETURN;
  2647.  
  2648. DRC1:
  2649.  
  2650. #
  2651. * LOOP FOR EACH DRD ON DRC1
  2652. #
  2653.  
  2654. SLOWFOR J = 0 STEP 1 UNTIL MAX$DRD
  2655. DO
  2656. BEGIN # DRD TESTING FOR DRC1 #
  2657. LINE = J + 10;
  2658. IF B< (J*6)+I+PATH$DF"U$EXISTS", 1 >UD$DRCP1[1] EQ 0
  2659. THEN
  2660. BEGIN
  2661. POKEDIS ( LINE, COLUMNM4, 5, ALTK$B5 ); # BLANK FIELD #
  2662. TEST J;
  2663. END
  2664.  
  2665. IF B< (J*6)+I+PATH$DF"U$RQ$DIAG", 1 >UD$DRCP1[1] NQ 0
  2666. THEN
  2667. BEGIN
  2668. POKEDIS ( LINE, COLUMN, 1, ALTK$MAINT ); # SET DIAG MODE #
  2669. TEST J;
  2670. END
  2671.  
  2672. IF B< (J*6)+I+PATH$DF"U$ON", 1 >UD$DRCP1[1] NQ 0
  2673. THEN
  2674. BEGIN
  2675. POKEDIS ( LINE, COLUMN, 1, ALTK$ONLINE ); # ONLINE MODE #
  2676. TEST J;
  2677. END
  2678.  
  2679. ELSE
  2680. BEGIN
  2681. POKEDIS ( LINE, COLUMN, 1, ALTK$OFFLINE ); # OFFLINE MODE #
  2682. END
  2683.  
  2684. END # DRD TESTING FOR DRC1 #
  2685.  
  2686. RETURN;
  2687. DRC2:
  2688. #
  2689. * LOOP FOR EACH DRD ON DRC2
  2690. #
  2691.  
  2692. SLOWFOR J = 0 STEP 1 UNTIL 1
  2693. DO
  2694. BEGIN #DRD TESTING FOR DRC 2 #
  2695. LINE = J + 10;
  2696. IF B< (J*6)+I+PATH$DF"U$EXISTS", 1 >UD$DRCP2[1] EQ 0
  2697. THEN
  2698. BEGIN
  2699. POKEDIS ( LINE, COLUMNM4, 5, ALTK$B5 ); # BLANK FIELD #
  2700. TEST J;
  2701. END
  2702.  
  2703. IF B< (J*6)+I+PATH$DF"U$RQ$DIAG", 1 >UD$DRCP2[1] NQ 0
  2704. THEN
  2705. BEGIN
  2706. POKEDIS ( LINE, COLUMN, 1, ALTK$MAINT ); # SET DIAG MODE #
  2707. TEST J;
  2708. END
  2709.  
  2710. IF B< (J*6)+I+PATH$DF"U$ON", 1 >UD$DRCP2[1] NQ 0
  2711. THEN
  2712. BEGIN
  2713. POKEDIS ( LINE, COLUMN, 1, ALTK$ONLINE ); # ONLINE MODE #
  2714. TEST J;
  2715. END
  2716.  
  2717. ELSE
  2718. BEGIN
  2719. POKEDIS ( LINE, COLUMN, 1, ALTK$OFFLINE ); # OFFLINE MODE #
  2720. END
  2721.  
  2722. END # DRD TESTING FOR DRC2 #
  2723. COLUMN = COLUMN + 1;
  2724. SLOWFOR J = 2 STEP 1 UNTIL MAX$DRD
  2725. DO
  2726. BEGIN # DRD TESTING #
  2727. LINE = J + 10;
  2728. IF B< (J*6)+I+PATH$DF"U$EXISTS", 1 >UD$DRCP2[1] EQ 0
  2729. THEN
  2730. BEGIN
  2731. POKEDIS ( LINE, COLUMNM4, 6, ALTK$B6 ); # BLANK FIELD #
  2732. TEST J;
  2733. END
  2734.  
  2735. IF B< (J*6)+I+PATH$DF"U$RQ$DIAG", 1 >UD$DRCP2[1] NQ 0
  2736. THEN
  2737. BEGIN
  2738. POKEDIS ( LINE, COLUMN, 1, ALTK$MAINT ); # SET DIAG MODE #
  2739. TEST J;
  2740. END
  2741.  
  2742. IF B< (J*6)+I+PATH$DF"U$ON", 1 >UD$DRCP2[1] NQ 0
  2743. THEN
  2744. BEGIN
  2745. POKEDIS ( LINE, COLUMN, 1, ALTK$ONLINE ); # ONLINE MODE #
  2746. TEST J;
  2747. END
  2748.  
  2749. ELSE
  2750. BEGIN
  2751. POKEDIS ( LINE, COLUMN, 1, ALTK$OFFLINE ); # OFFLINE MODE #
  2752. END
  2753.  
  2754. END # DRD TESTING FOR DRC2 #
  2755.  
  2756. RETURN;
  2757. DRC3:
  2758.  
  2759. #
  2760. * LOOP FOR EACH DRD ON DRC 3
  2761. #
  2762.  
  2763. SLOWFOR J = 0 STEP 1 UNTIL 1
  2764. DO
  2765. BEGIN # DRD TESTING #
  2766. LINE = J + 10;
  2767. IF B< (J*6)+I+PATH$DF"U$EXISTS", 1 >UD$DRCP3[1] EQ 0
  2768. THEN
  2769. BEGIN
  2770. POKEDIS ( LINE, COLUMNM4, 5, ALTK$B5 ); # BLANK FIELD #
  2771. TEST J;
  2772. END
  2773.  
  2774. IF B< (J*6)+I+PATH$DF"U$RQ$DIAG", 1 >UD$DRCP3[1] NQ 0
  2775. THEN
  2776. BEGIN
  2777. POKEDIS ( LINE, COLUMN, 1, ALTK$MAINT ); # SET DIAG MODE #
  2778. TEST J;
  2779. END
  2780.  
  2781. IF B< (J*6)+I+PATH$DF"U$ON", 1 >UD$DRCP3[1] NQ 0
  2782. THEN
  2783. BEGIN
  2784. POKEDIS ( LINE, COLUMN, 1, ALTK$ONLINE ); # ONLINE MODE #
  2785. TEST J;
  2786. END
  2787.  
  2788. ELSE
  2789. BEGIN
  2790. POKEDIS ( LINE, COLUMN, 1, ALTK$OFFLINE ); # OFFLINE MODE #
  2791. END
  2792.  
  2793. END # DRD TESTING FOR DRC3 #
  2794.  
  2795. COLUMN = COLUMN + 1; # PRESET FOR 2-DIGIT DRD-S #
  2796. SLOWFOR J = 2 STEP 1 UNTIL MAX$DRD
  2797. DO
  2798. BEGIN # DRD TESTING #
  2799. LINE = J + 10;
  2800. IF B< (J*6)+I+PATH$DF"U$EXISTS", 1 >UD$DRCP3[1] EQ 0
  2801. THEN
  2802. BEGIN
  2803. POKEDIS ( LINE, COLUMNM4, 6, ALTK$B6 ); # BLANK FIELD #
  2804. TEST J;
  2805. END
  2806.  
  2807. IF B< (J*6)+I+PATH$DF"U$RQ$DIAG", 1 >UD$DRCP3[1] NQ 0
  2808. THEN
  2809. BEGIN
  2810. POKEDIS ( LINE, COLUMN, 1, ALTK$MAINT ); # SET DIAG MODE #
  2811. TEST J;
  2812. END
  2813.  
  2814. IF B< (J*6)+I+PATH$DF"U$ON", 1 >UD$DRCP3[1] NQ 0
  2815. THEN
  2816. BEGIN
  2817. POKEDIS ( LINE, COLUMN, 1, ALTK$ONLINE ); # ONLINE MODE #
  2818. TEST J;
  2819. END
  2820.  
  2821. ELSE
  2822. BEGIN
  2823. POKEDIS ( LINE, COLUMN, 1, ALTK$OFFLINE ); # OFFLINE MODE #
  2824. END
  2825.  
  2826. END # DRD TESTING FOR DRC3 #
  2827. END # KDSIDRC #
  2828.  
  2829. TERM
  2830.  
  2831. PROC KDISDTX ( INDEX );
  2832. # TITLE KDISDTX - DISPLAY DTI/DTO DATA FROM UDT. #
  2833.  
  2834. BEGIN # KDISDTX #
  2835.  
  2836. #
  2837. ** KDISDTX - DISPLAY DTI/DTO DATA FROM UDT.
  2838. *
  2839. * PROC KDISDTX ( INDEX )
  2840. *
  2841. * ENTRY - INDEX = DEVICE ADDRESS OF DTI/DTO TO DISPLAY.
  2842. *
  2843. * EXIT - *CU* DISPLAY UPDATED FOR DTI/DTO COLUMNS.
  2844. *
  2845. #
  2846.  
  2847. ITEM INDEX I; # INPUT VARIABLE #
  2848.  
  2849. #
  2850. **** PROC KDISDTX - XREF LIST BEGIN.
  2851. #
  2852.  
  2853. XREF
  2854. BEGIN
  2855. PROC POKEDIS; # POKE DATA INTO *K* DISPLAY
  2856.   BUFFER #
  2857. PROC KDISDIF; # DISPLAY DIF STATUS #
  2858. END
  2859.  
  2860. #
  2861. * KDISDTX - XREF LIST END.
  2862. #
  2863.  
  2864. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  2865. *CALL,COMBFAS
  2866. *CALL,COMBUDT
  2867. *CALL,COMTALT
  2868. CONTROL EJECT;
  2869.  
  2870. ITEM COLUMN I; # *K* DISPLAY COLUMN #
  2871. ITEM COLUMNM4 I; # *K* DISPLAY COLUMN #
  2872. ITEM I I; # INTEGER SCRATCH #
  2873. ITEM J I; # LOOP VARIABLE #
  2874. ITEM LINE I; # LINE IN *K* DISPLAY #
  2875. CONTROL EJECT;
  2876.  
  2877. #
  2878. * INITIALIZE *K* DISPLAY COORDINATES.
  2879. #
  2880.  
  2881. IF INDEX LQ MAX$DTI
  2882. THEN
  2883. BEGIN
  2884. COLUMN = 22; # COLUMN FOR *DTI* DATA #
  2885. COLUMNM4 = 18;
  2886. END
  2887.  
  2888. ELSE
  2889. BEGIN
  2890. COLUMN = 29; # COLUMN FO *DTO* DATA #
  2891. COLUMNM4 = 25;
  2892. GOTO DTO; # PROCESS *DTO* REQUEST #
  2893. END
  2894.  
  2895. I = INDEX*12; # POSITION TO CORRECT FIELD #
  2896.  
  2897. #
  2898. * LOOP FOR EACH DTI
  2899. #
  2900.  
  2901. SLOWFOR J = 0 STEP 1 UNTIL MAX$DIF
  2902. DO
  2903. BEGIN # DTI TESTING #
  2904. LINE = J + 10;
  2905. IF INDEX EQ 1
  2906. THEN
  2907. BEGIN # ADJUST FOR THE DISPLAY #
  2908. LINE = LINE + 5;
  2909. END # ADJUST FOR THE DISPLAY #
  2910.  
  2911.  
  2912. KDISDIF ( J ); # DISPLAY DIF ON OUT #
  2913. IF B< (J*6)+I+PATH$DF"U$EXISTS", 1>UD$DTI[1] EQ 0
  2914. THEN
  2915. BEGIN
  2916. POKEDIS ( LINE, COLUMNM4, 5, ALTK$B5 ); # BLANK FIELD #
  2917. TEST J;
  2918. END
  2919.  
  2920. IF B< (J*6)+I+PATH$DF"U$RQ$DIAG", 1>UD$DTI[1] NQ 0
  2921. THEN
  2922. BEGIN
  2923. POKEDIS ( LINE, COLUMN, 1, ALTK$MAINT ); # SET DIAG MODE #
  2924. TEST J;
  2925. END
  2926.  
  2927. IF B< (J*6)+I+PATH$DF"U$ON", 1>UD$DTI[1] NQ 0
  2928. THEN
  2929. BEGIN
  2930. POKEDIS ( LINE, COLUMN, 1, ALTK$ONLINE ); # ONLINE MODE #
  2931. TEST J;
  2932. END
  2933.  
  2934. ELSE
  2935. BEGIN
  2936. POKEDIS ( LINE, COLUMN, 1, ALTK$OFFLINE ); # OFFLINE MD #
  2937. END
  2938.  
  2939. END # DTI TESTING #
  2940.  
  2941. RETURN;
  2942.  
  2943. DTO:
  2944.  
  2945. INDEX = INDEX - 2;
  2946. I = INDEX*12;
  2947. SLOWFOR J = 0 STEP 1 UNTIL MAX$DIF
  2948. DO
  2949. BEGIN # DTO TESTING #
  2950. LINE = J + 10;
  2951. IF INDEX EQ 1
  2952. THEN
  2953. BEGIN # ADJUST FOR THE DISPLAY #
  2954. LINE = LINE + 5;
  2955. END # ADJUST FOR THE DISPLAY #
  2956.  
  2957. KDISDIF ( J ); # DISPLAY DIF ON OUT #
  2958.  
  2959. IF B< (J*6)+I+PATH$DF"U$EXISTS", 1>UD$DTO[1] EQ 0
  2960. THEN
  2961. BEGIN
  2962. POKEDIS ( LINE, COLUMNM4, 5, ALTK$B5 ); # BLANK FIELD #
  2963. TEST J;
  2964. END
  2965.  
  2966. IF B< (J*6)+I+PATH$DF"U$RQ$DIAG", 1>UD$DTO[1] NQ 0
  2967. THEN
  2968. BEGIN
  2969. POKEDIS ( LINE, COLUMN, 1, ALTK$MAINT ); # SET DIAG MODE #
  2970. TEST J;
  2971. END
  2972.  
  2973. IF B< (J*6)+I+PATH$DF"U$ON", 1>UD$DTO[1] NQ 0
  2974. THEN
  2975. BEGIN
  2976. POKEDIS ( LINE, COLUMN, 1, ALTK$ONLINE ); # ONLINE MODE #
  2977. TEST J;
  2978. END
  2979.  
  2980. ELSE
  2981. BEGIN
  2982. POKEDIS ( LINE, COLUMN, 1, ALTK$OFFLINE ); # OFFLINE MD #
  2983. END
  2984.  
  2985. END # DTO TESTING #
  2986.  
  2987. INDEX = INDEX +2;
  2988.  
  2989. END # KDISDTX #
  2990.  
  2991. TERM
  2992. PROC POKEDIS ( LINE, CHAR, COUNT, VALUE );
  2993.  
  2994. # TITLE POKEDIS - SET VALUE IN DISPLAY. #
  2995.  
  2996. BEGIN # POKEDIS #
  2997.  
  2998. #
  2999. ** POKEDIS - SET CHARACTER VALUE IN DISPLAY.
  3000. *
  3001. * *POKEDIS* POKES A CHARACTER INTO AN EXISTING
  3002. * *SM* OR *CU* DIPLAY. THE CHARACTER INIDICATES THE
  3003. * CURRENT OR REQUESTED STATE OF ONE OF PATHS/NODES
  3004. * IN THE M860 CURRENTLY UNDER INSPECTION BY *SSALTER*.
  3005. *
  3006. * ENTRY
  3007. * LINE - ONE OF THE (LF$AL$NLIN) LINES IN THE *K* DISPLAY.
  3008. * CHAR - THE STARTING COLUMN NUMBER TO BE USED.
  3009. * COUNT - THE NUMBER OF CHARACTERS IN THE STRING.
  3010. * VALUE - THE CHARACTER STRING TO BE INSERTED.
  3011. *
  3012. *
  3013. * EXIT
  3014. *
  3015. * CHARACTER(S) POKED INTO THE DISPLAY.
  3016. #
  3017.  
  3018. #
  3019. **** PROC POKEDIS - XREF LIST BEGIN.
  3020. #
  3021.  
  3022. XREF
  3023. BEGIN
  3024. END
  3025.  
  3026. #
  3027. **** PROC POKEDIS - XREF LIST END.
  3028. #
  3029.  
  3030. DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
  3031. *CALL,COMBFAS
  3032. *CALL,COMTALT
  3033.  
  3034. ITEM LINE I; # INPUT PARAMETER #
  3035. ITEM CHAR I; # INPUT PARAMETER #
  3036. ITEM COUNT I; # INPUT PARAMETER #
  3037. ITEM VALUE C(10); # INPUT PARAMETER #
  3038. CONTROL EJECT;
  3039.  
  3040. #
  3041. * SET CHARACTER(S) INTO DISPLAY
  3042. #
  3043.  
  3044. C<CHAR,COUNT>SM$LN[LINE] = VALUE;
  3045. END # POKEDIS #
  3046.  
  3047. TERM
  3048. PROC UCPREQ((REQTYPE),(REQCODE),RESPCODE);
  3049. # TITLE UCPREQ - ISSUES TYPE 1 OR 5 UCP REQUEST TO EXEC. #
  3050.  
  3051. BEGIN # UCPREQ #
  3052.  
  3053. #
  3054. ** UCPREQ - ISSUES A TYPE 1 OR 5 UCP REQUEST TO EXEC.
  3055. *
  3056. * PROC UCPREQ((REQTYPE),(REQCODE),RESPCODE)
  3057. *
  3058. * ENTRY (REQTYPE) = REQUEST TYPE.
  3059. * (REQCODE) = REQUEST CODE.
  3060. * (USER$FAM) = FAMILY NAME.
  3061. * (REQID$AL) = REQUESTOR ID.
  3062. * (SSID$AL) = SUBSYSTEM ID.
  3063. * P<CPR> = FWA OF CALLSS PARAMETER BLOCK.
  3064. *
  3065. * EXIT (RESPCODE) = RESPONSE FROM EXEC.
  3066. *
  3067. * MESSAGES SSALTER ABNORMAL, UCPREQ.
  3068. *
  3069. * NOTES THE CALLSS PARAMETER REQUEST BLOCK IS SET
  3070. * UP FOR A TYPE 1 OR TYPE 5 UCP REQUEST AND
  3071. * THE REQUEST IS ISSUED TO EXEC.
  3072. #
  3073.  
  3074. ITEM REQTYPE I; # REQUEST TYPE #
  3075. ITEM REQCODE I; # REQUEST CODE #
  3076. ITEM RESPCODE I; # RESPONSE FROM EXEC #
  3077.  
  3078. #
  3079. **** PROC UCPREQ - XREF LIST BEGIN.
  3080. #
  3081.  
  3082. XREF
  3083. BEGIN
  3084. PROC ABORT; # STOPS PROCESSING #
  3085. PROC CALLSS; # ISSUES A UCP/SCP REQUEST #
  3086. PROC MESSAGE; # DISPLAYS MESSAGES #
  3087. PROC RESTPFP; # RESTORE USER-S *PFP* AND ABORT
  3088.   OR RETURN #
  3089. PROC ZFILL; # ZERO FILL A BUFFER #
  3090. END
  3091.  
  3092. #
  3093. **** PROC UCPREQ - XREF LIST END.
  3094. #
  3095.  
  3096. DEF PROCNAME #"UCPREQ."#; # PROC NAME #
  3097.  
  3098. DEF LISTCON #0#; # DO NOT LIST COMDECKS #
  3099. *CALL COMBFAS
  3100. *CALL COMBCPR
  3101. *CALL COMBPFP
  3102. *CALL,COMBUDT
  3103. *CALL COMSPFM
  3104. *CALL COMTALT
  3105.  
  3106. ITEM I I; # LOOP INDUCTION VARIABLE #
  3107. ITEM LOOPC B; # LOOP CONTROL #
  3108. ITEM WORDCOUNT I; # WORD COUNT OF UDT #
  3109.  
  3110. CONTROL EJECT;
  3111.  
  3112. #
  3113. * ZERO FILL CALLSS PARAMETER BLOCK.
  3114. #
  3115.  
  3116. ZFILL ( CPR[0], 1 ); # ZERO FIRST WORD #
  3117. ZFILL ( CPR[3], CPRLEN - 3 ); # ZERO WORDS 4 - CPRLEN #
  3118.  
  3119. CPR$RQT[0] = REQTYPE; # SET UP PARAMETER BLOCK #
  3120. CPR$RQC[0] = REQCODE;
  3121. CPR$RQI[0] = REQID$AL;
  3122. CPR$RT[0] = 2; # HAVE SYSTEM CONTROL REQUEST #
  3123. CPR$ADDR2 = LOC(UDT$HDR);
  3124. WORDCOUNT = 0;
  3125.  
  3126. IF REQTYPE EQ TYP"TYP1"
  3127. THEN # TYPE 1 REQUEST #
  3128. BEGIN
  3129. CPR$WC[0] = TYP1$WC;
  3130. END
  3131.  
  3132. ELSE
  3133. BEGIN # TYPE 5 OR ILLEGAL REQUEST #
  3134. IF REQTYPE EQ TYP"TYP5"
  3135. THEN # TYPE 5 REQUEST #
  3136. BEGIN
  3137. IF REQCODE EQ REQTYP5"SSA$PUDT"
  3138. THEN
  3139. BEGIN
  3140. CPR$ADDR4 = PRULEN; # SET COUNT AT *CPUMTR* MAX #
  3141. CPR$ADDR3 = 0;
  3142. END
  3143.  
  3144. CPR$WC[0] = TYP5$WC;
  3145. END
  3146.  
  3147. ELSE # ILLEGAL REQUEST TYPE #
  3148. BEGIN
  3149. ALTMSG$PROC[0] = PROCNAME;
  3150. MESSAGE(ALTMSG[0],SYSUDF1);
  3151. RESTPFP(PFP$ABORT); # RESTORE USER-S *PFP* AND ABORT #
  3152. END
  3153.  
  3154. END # TYPE 5 OR ILLEGAL REQUEST #
  3155.  
  3156. CALLSS(SSID$AL,CPR[0],RCL);
  3157.  
  3158. IF CPR$ES[0] EQ 0
  3159. THEN
  3160. BEGIN
  3161. RESPCODE = CPR$RQR[0]; # RETURN RESPONSE FROM EXEC #
  3162. END
  3163.  
  3164. ELSE
  3165. BEGIN
  3166. RESPCODE = CPR$ES[0]; # RETURN RESPONSE FROM SYSTEM #
  3167. RETURN;
  3168. END
  3169.  
  3170. IF REQTYPE NQ TYP"TYP5"
  3171. THEN
  3172. BEGIN
  3173. RETURN; # RETURN IF NOT *SSA$PUDT* REQ #
  3174. END
  3175.  
  3176.  
  3177. IF REQCODE NQ REQTYP5"SSA$PUDT"
  3178. THEN
  3179. BEGIN
  3180. RETURN; # RETURN IF NOT PASS UDT REQUEST #
  3181. END
  3182.  
  3183. ELSE
  3184. BEGIN
  3185. P<UDT$WORD> = LOC(UDT$HDR);
  3186. WORDCOUNT = UDT$WORDCNT - PRULEN;
  3187. LOOPC = FALSE;
  3188. SLOWFOR I = 0 STEP PRULEN WHILE ( NOT LOOPC )
  3189. DO
  3190. BEGIN
  3191. CPR$ADDR2 = CPR$ADDR2 + PRULEN;
  3192. CPR$ADDR3 = CPR$ADDR3 + PRULEN;
  3193. IF WORDCOUNT GR PRULEN
  3194. THEN
  3195. BEGIN
  3196. CPR$ADDR4[0] = PRULEN;
  3197. WORDCOUNT = WORDCOUNT - PRULEN;
  3198. END
  3199.  
  3200. ELSE
  3201. BEGIN
  3202. CPR$ADDR4[0] = WORDCOUNT;
  3203. LOOPC = TRUE;
  3204. END
  3205.  
  3206. CPR$C[0] = FALSE;
  3207. CPR$ES[0] = 0;
  3208. CALLSS ( SSID$AL, CPR[0], RCL );
  3209.  
  3210. TEST I;
  3211. END
  3212.  
  3213. IF CPR$ES[0] NQ 0
  3214. THEN
  3215. BEGIN
  3216. RESPCODE = CPR$ES[0];
  3217. RETURN;
  3218. END
  3219.  
  3220. ELSE
  3221. BEGIN
  3222. RESPCODE = CPR$RQR[0];
  3223. END
  3224.  
  3225. END
  3226.  
  3227.  
  3228. END # UCPREQ #
  3229.  
  3230. TERM
cdc/nos2.source/opl871/ssalter.txt ยท Last modified: 2023/08/05 17:24 by Site Administrator