Google
 

Trailing-Edge - PDP-10 Archives - BB-H348C-RM_1982 - swskit-v21/listings/tkb-vnp/rtxt.bpt
There are no other files named rtxt.bpt in the archive.
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

   1	!<SAUTER.TKB20>RTXT.BLI.72, 19-Dec-78 07:38:06, Edit by SROBINSON
   2	!<SAUTER.TKB20>RTXT.BLI.68,  3-Nov-78 15:07:40, Edit by SROBINSON
   3	!<SAUTER.TKB20>RTXT.BLI.67, 10-Oct-78 13:37:02, Edit by SROBINSON
   4	MODULE RTXT (					!READ TEXT FILES
   5			IDENT = 'X0.2-1'
   6			) =
   7	BEGIN
   8	!
   9	!
  10	!
  11	! COPYRIGHT (C) 1978 BY
  12	! DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
  13	!
  14	!
  15	! THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
  16	! ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH LICENSE AND WITH THE
  17	! INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR ANY  OTHER
  18	! COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
  19	! OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF THE  SOFTWARE  IS  HEREBY
  20	! TRANSFERRED.
  21	!
  22	!
  23	! THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT  NOTICE
  24	! AND  SHOULD  NOT  BE  CONSTRUED  AS A COMMITMENT BY DIGITAL EQUIPMENT
  25	! CORPORATION.
  26	!
  27	! DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY  OF  ITS
  28	! SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
  29	!
  30	
  31	!++
  32	! FACILITY: VNP-20
  33	!
  34	! ABSTRACT:
  35	!
  36	!
  37	! THIS MODULE READS THE TEXT FILES, CETAB.MAC AND THE .DAT FILES,
  38	!  STORING THE INFORMATION FOR THE REST OF VNP20 TO PROCESS.
  39	!
  40	!
  41	! ENVIRONMENT: TOPS-20 USER MODE
  42	!
  43	! AUTHOR: J. SAUTER, CREATION DATE: 05-JUN-78
  44	!
  45	! MODIFIED BY:
  46	!
  47	!	Scott G. Robinson, 6-OCT-78 : VERSION X0.1-2A
  48	!	- Add support for passwords
  49	!
  50	!	Scott G. Robinson, 10-OCT-78 : VERSION X0.2
  51	!	- TOPS-20 Release 4 modifications
  52	!		Make STA$DF processor really do it correctly
  53	!		Make UNT$DF processor account for itself
  54	!
  55	!	Scott G. Robinson, 19-DEC-78 : VERSION X0.2-1
  56	!	- Add support for TSK$DF
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

  57	!
  58	!	, : VERSION
  59	! 01	-
  60	!--
  61	
  62	!<BLF/PAGE>
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

  63	!
  64	! TABLE OF CONTENTS:
  65	!
  66	
  67	FORWARD ROUTINE
  68	    RCET : NOVALUE,				!READ CETAB.MAC
  69	    CLASS,					!CLASSIFY A CHARACTER
  70	    SCAN : NOVALUE,				!SCAN NEXT ATOM
  71	    R_BUF : NOVALUE,				!READ BUF$DF LINE
  72	    R_PDV : NOVALUE,				!READ PDV$DF LINE
  73	    R_SLT : NOVALUE,				!READ SLT$DF LINE
  74	    R_STA : NOVALUE,				!READ STA$DF LINE
  75	    R_LLC : NOVALUE,				!READ LLC$DF LINE
  76	    R_DLC : NOVALUE,				!READ DLC$DF LINE
  77	    R_DDM : NOVALUE,				!READ DDM$DF LINE
  78	    R_CNT : NOVALUE,				!READ CNT$DF LINE
  79	    R_UNT : NOVALUE,				!READ UNT$DF LINE
  80	    R_NOD : NOVALUE,				!READ NOD$DF LINE
  81	    R_PSW : NOVALUE,				!READ PSW$DF LINE
  82	    R_TSK : NOVALUE,				!READ TSK$DF LINE
  83	    R_PAR : NOVALUE,				!READ PAR$DF LINE
  84	    R_END : NOVALUE;				!READ END$DF LINE
  85	
  86	!
  87	! INCLUDE FILES:
  88	!
  89	
  90	LIBRARY 'VNP-LIB.L36';
  91	
  92	!REQUIRE 'BLOCKH.REQ';				!PREPARE TO DEFINE STORAGE BLOCKS
  93	!REQUIRE 'FILE.REQ';				!DEFINE FILE BLOCK
  94	!REQUIRE 'FILSW.REQ';				!DEFINE FILE SWITCHES
  95	!REQUIRE 'VNPVAL.REQ';				!VALUES BLOCK
  96	!REQUIRE 'LLC.REQ';				!DEFINE LLC BLOCK
  97	!REQUIRE 'DLC.REQ';				!DEFINE DLC BLOCK
  98	!REQUIRE 'DDM.REQ';				!DEFINE DDM BLOCK
  99	!REQUIRE 'BLOCKT.REQ';				!END OF DEFINING STORAGE BLOCKS
 100	!
 101	! MACROS:
 102	!
 103	!	NONE
 104	!
 105	! EQUATED SYMBOLS:
 106	!
 107	
 108	LITERAL
 109	    DEBUG = 0;
 110	
 111	!
 112	!  OFFSETS INTO 'RESULT', THE ARRAY RETURNED BY SCAN.
 113	!
 114	
 115	LITERAL
 116	    RESULT_TYPE = 0,				!TYPE FIELD
 117	    RESULT_VALUE = 1;				!VALUE FIELD
 118	
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

 119	!
 120	! VALUES OF THE TYPE FIELD
 121	!
 122	
 123	LITERAL
 124	    RT_NAME = 1,				!VALUE IS TEXT OF NAME
 125	    RT_NUMBER = 2,				!VALUE IS NUMBER (UNSIGNED)
 126	    RT_SPECIAL = 3;				!VALUE IS SPECIAL CHAR (-1 IS EOL)
 127	
 128	!
 129	!
 130	! OWN STORAGE:
 131	!
 132	!	NONE
 133	!
 134	! EXTERNAL REFERENCES:
 135	!
 136	
 137	EXTERNAL ROUTINE
 138	    OPEN,					!OPEN A FILE
 139	    CLOSE : NOVALUE,				!CLOSE A FILE
 140	    INPUT,					!READ FROM A FILE
 141	    OUTPUT : NOVALUE,				!OUTPUT TO A FILE
 142	    BLD_CHAIN,					!ADD AN ITEM TO A CHAIN
 143	    GETBLK,					!GET A BLOCK OF STORAGE
 144	    ERROR : NOVALUE,				!SIGNAL PROGRAMMING ERROR
 145	    ERRMSG : NOVALUE,				!ERROR MESSAGE
 146	    PCRLF : NOVALUE,				!PRINT CRLF
 147	    OUTNUM : NOVALUE,				!PRINT NUMBER
 148	    OUTSTR : NOVALUE;				!PRINT A STRING
 149	
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

 150	GLOBAL ROUTINE RCET (FILE_CHAN, FILE_PTR, VALUES) : NOVALUE = 	!READ CETAB.MAC
 151	
 152	!++
 153	! FUNCTIONAL DESCRIPTION:
 154	!
 155	!	READ CETAB.MAC FOR VNP20, AND STORE ITS VALUES.
 156	!
 157	! FORMAL PARAMETERS:
 158	!
 159	!	FILE_CHAN - CHANNEL NUMBER ON WHICH TO READ CETAB.MAC
 160	!	FILE_PTR - FILE BLOCK WITH CETAB.MAC FILLED IN.
 161	!	VALUES - BLOCK IN WHICH TO STORE RESULTS
 162	!
 163	! IMPLICIT INPUTS:
 164	!
 165	!	NONE
 166	!
 167	! IMPLICIT OUTPUTS:
 168	!
 169	!	FILLS THE 'VALUES' BLOCK WITH STUFF READ FROM CETAB.MAC
 170	!
 171	! ROUTINE VALUE:
 172	!
 173	!	NONE
 174	!
 175	! SIDE EFFECTS
 176	!
 177	!	READS CETAB.MAC
 178	!
 179	!--
 180	
 181	    BEGIN
 182	
 183	    BIND
 184		ROUTINE_NAME = UPLIT (%ASCIZ'RCET');
 185	
 186	    MAP
 187		FILE_PTR : REF FILE_BLOCK,
 188		VALUES : REF VNPVAL_BLOCK;
 189	
 190	    LOCAL
 191		LOOK_DONE,
 192		NAME,
 193		RESULT : VECTOR [20],
 194		SAVE_CHAR,
 195		SUBR,
 196		VAL_POINTER;
 197	
 198	    IF (OPEN (.FILE_CHAN, FILE_PTR [FILE_NAME], 1, 0, UPLIT (%ASCIZ'TXT')) NEQ 0)
 199	    THEN
 200		BEGIN					!SUCCESSFUL INPUT OPEN
 201	
 202		IF (DEBUG GEQ 1)
 203		THEN
 204		    BEGIN				!DEBUG
 205		    PCRLF (1);
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

 206		    OUTSTR (1, UPLIT (%ASCIZ'----- OPEN CETAB.MAC'));
 207		    END;				!DEBUG
 208	
 209	!
 210	! INITIALIZE THE CHAIN TO THE LLCS
 211	!
 212		VALUES [LLC_CHAIN] = 0;
 213	!
 214	! LOOK FOR BUF$DF MACRO
 215	!
 216		SAVE_CHAR = -1;
 217		LOOK_DONE = 0;
 218	
 219		WHILE (.LOOK_DONE EQL 0) DO
 220		    BEGIN
 221		    SCAN (.FILE_CHAN, .FILE_PTR, SAVE_CHAR, RESULT);
 222	
 223		    IF ((.RESULT [RESULT_TYPE] EQL RT_SPECIAL) AND (.RESULT [RESULT_VALUE] EQL %C';')) THEN
 224							!SKIP A COMMENT
 225	
 226			DO
 227			    SCAN (.FILE_CHAN, .FILE_PTR, SAVE_CHAR, RESULT)
 228			UNTIL ((.RESULT [RESULT_TYPE] EQL RT_SPECIAL) AND (.RESULT [RESULT_VALUE] LSS 0));
 229	
 230		    IF ((.RESULT [RESULT_TYPE] EQL RT_NAME) AND 	!
 231			(CH$EQL (7, CH$PTR (RESULT [RESULT_VALUE]), 7, CH$PTR (UPLIT (%ASCIZ'BUF$DF')))))
 232		    THEN
 233			LOOK_DONE = 1
 234		    ELSE 				!NOT BUF$DF, SKIP TO NEXT LINE
 235	
 236			DO
 237			    SCAN (.FILE_CHAN, .FILE_PTR, SAVE_CHAR, RESULT)
 238			UNTIL ((.RESULT [RESULT_TYPE] EQL RT_SPECIAL) AND (.RESULT [RESULT_VALUE] LSS 0));
 239	
 240		    IF ((.RESULT [RESULT_TYPE] EQL RT_SPECIAL) AND (.RESULT [RESULT_VALUE] EQL -2))
 241		    THEN
 242			LOOK_DONE = -1;
 243	
 244		    END;
 245	
 246		IF (.LOOK_DONE LEQ 0)
 247		THEN
 248		    ERRMSG (0, 24, ROUTINE_NAME, FILE_PTR [FILE_NAME], 0, 0, 0)
 249		ELSE
 250		    BEGIN
 251		    R_BUF (.FILE_CHAN, .FILE_PTR, SAVE_CHAR, .VALUES);
 252	!
 253	! EACH LINE OF CETAB.MAC, UP TO THE END$DF LINE, IS TO BE
 254	!  PROCESSED.
 255	!
 256		    LOOK_DONE = 0;
 257	
 258		    WHILE (.LOOK_DONE EQL 0) DO
 259			BEGIN
 260			SCAN (.FILE_CHAN, .FILE_PTR, SAVE_CHAR, RESULT);
 261	
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

 262			IF ((.RESULT [RESULT_TYPE] EQL RT_SPECIAL) AND (.RESULT [RESULT_VALUE] EQL %C';')) THEN
 263							!SKIP A COMMENT LINE
 264	
 265			    DO
 266				SCAN (.FILE_CHAN, .FILE_PTR, SAVE_CHAR, RESULT)
 267			    UNTIL ((.RESULT [RESULT_TYPE] EQL RT_SPECIAL) AND (.RESULT [RESULT_VALUE] LSS 0));
 268	
 269	!
 270	! THE RESULT VECTOR CONTAINS THE MACRO NAME
 271	!
 272	
 273			IF (.RESULT [RESULT_TYPE] NEQ RT_NAME)
 274			THEN
 275			    BEGIN
 276			    ERRMSG (0, 24, ROUTINE_NAME, FILE_PTR [FILE_NAME], 0, 0, 0);
 277			    LOOK_DONE = -1;
 278			    END
 279			ELSE
 280			    BEGIN
 281	!
 282	! COMPUTE A NUMBER BASED ON THE NAME, SO WE CAN DISPATCH ON IT.
 283	!
 284			    NAME = CH$RCHAR (CH$PTR (RESULT [RESULT_VALUE], 0)) + 	!
 285			    (256*CH$RCHAR (CH$PTR (RESULT [RESULT_VALUE], 1))) + 	!
 286			    (65536*CH$RCHAR (CH$PTR (RESULT [RESULT_VALUE], 2)));
 287	
 288			    IF (CH$NEQ (4, CH$PTR (RESULT [RESULT_VALUE], 3), 	!
 289				    4, CH$PTR (UPLIT (%ASCIZ'$DF'))))
 290			    THEN
 291				BEGIN
 292				ERRMSG (0, 24, ROUTINE_NAME, FILE_PTR [FILE_NAME], 0, 0, 0);
 293				LOOK_DONE = -1;
 294				END
 295			    ELSE
 296				BEGIN
 297	!
 298	! DISPATCH ON THE NAME
 299	!
 300				SUBR = (SELECTONE .NAME OF
 301				    SET
 302				    [%C'C' + (256*%C'N') + (65536*%C'T')] : R_CNT;
 303				    [%C'U' + (256*%C'N') + (65536*%C'T')] : R_UNT;
 304				    [%C'P' + (256*%C'D') + (65536*%C'V')] : R_PDV;
 305				    [%C'S' + (256*%C'L') + (65536*%C'T')] : R_SLT;
 306				    [%C'S' + (256*%C'T') + (65536*%C'A')] : R_STA;
 307				    [%C'L' + (256*%C'L') + (65536*%C'C')] : R_LLC;
 308				    [%C'D' + (256*%C'L') + (65536*%C'C')] : R_DLC;
 309				    [%C'D' + (256*%C'D') + (65536*%C'M')] : R_DDM;
 310				    [%C'N' + (256*%C'O') + (65536*%C'D')] : R_NOD;
 311				    [%C'P' + (256*%C'S') + (65536*%C'W')] : R_PSW;
 312				    [%C'T' + (256*%C'S') + (65536*%C'K')] : R_TSK;
 313				    [%C'P' + (256*%C'A') + (65536*%C'R')] : R_PAR;
 314				    [%C'E' + (256*%C'N') + (65536*%C'D')] : R_END;
 315				    [OTHERWISE] : 0;
 316				    TES);
 317	
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

 318				IF (.SUBR EQL 0)
 319				THEN
 320				    BEGIN
 321				    ERRMSG (0, 24, ROUTINE_NAME, FILE_PTR [FILE_NAME], 0, 0, 0);
 322				    LOOK_DONE = -1;
 323				    END
 324				ELSE
 325				    BEGIN
 326				    (.SUBR) (.FILE_CHAN, .FILE_PTR, SAVE_CHAR, .VALUES);
 327	
 328				    IF (.SUBR EQL R_END) THEN LOOK_DONE = 1;
 329	
 330				    END;
 331	
 332				END;
 333	
 334			    END;
 335	
 336			END;
 337	
 338		    END;
 339	
 340		CLOSE (.FILE_CHAN);
 341	
 342		IF (DEBUG GEQ 1)
 343		THEN
 344		    BEGIN				!DEBUG
 345		    PCRLF (1);
 346		    OUTSTR (1, UPLIT (%ASCIZ'----- CLOSE CETAB.MAC'));
 347		    END;				!DEBUG
 348	
 349		END;
 350	
 351	    END;					!OF RCET
 352	
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

 353	ROUTINE CLASS (CHAR) = 				!CLASSIFY A CHARACTER
 354	
 355	!++
 356	! FUNCTIONAL DESCRIPTION:
 357	!
 358	!	CLASSIFY A CHARACTER AS TO ALPHABETIC, NUMERIC, SPECIAL OR CONTROL/DEL.
 359	!
 360	! FORMAL PARAMETERS:
 361	!
 362	!	CHAR - THE CHARACTER TO CLASSIFY
 363	!
 364	! IMPLICIT INPUTS:
 365	!
 366	!	NONE
 367	!
 368	! IMPLICIT OUTPUTS:
 369	!
 370	!	NONE
 371	!
 372	! ROUTINE VALUE:
 373	!
 374	!	1 = ALPHABETIC, 2 = NUMERIC, 3 = SPECIAL, 4 = CONTROL OR DEL
 375	!
 376	! SIDE EFFECTS
 377	!
 378	!	NONE
 379	!
 380	!--
 381	
 382	    BEGIN
 383	
 384	    BIND
 385		ROUTINE_NAME = UPLIT (%ASCIZ'CLASS');
 386	
 387	    SELECTONE .CHAR OF
 388		SET
 389	
 390		[%C'A' TO %C'Z', %C'a' TO %C'z', %C'$', %C'.'] :
 391		    1;					!ALPHABETIC (INCLUDING $ AND .)
 392	
 393		[%C'0' TO %C'9'] :
 394		    2;					!NUMERIC
 395	
 396		[%C'!', 				!
 397		    %C'"', 				!
 398		    %C'#', 				!
 399		    %C'%', 				!
 400		    %C'&', 				!
 401		    %O'47', 				!SINGLE QUOTE
 402		    %C'(', 				!
 403		    %C')', 				!
 404		    %C'*', 				!
 405		    %C'+', 				!
 406		    %C',', 				!
 407		    %C'-', 				!
 408		    %C'/', 				!
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

 409		    %C':', 				!
 410		    %C';', 				!
 411		    %C'<', 				!
 412		    %C'=', 				!
 413		    %C'>', 				!
 414		    %C'?', 				!
 415		    %C'@', 				!
 416		    %C'[', 				!
 417		    %C'\', 				!
 418		    %C']', 				!
 419		    %C'^', 				!
 420		    %C'_', 				!
 421		    %C'`', 				!
 422		    %C'{', 				!
 423		    %C'|', 				!
 424		    %C'}', 				!
 425		    %C'~'] :
 426		    3;					!SPECIAL (BUT NEITHER $ NOR .)
 427	
 428		[OTHERWISE] :
 429		    4;					!CONTROL AND DEL
 430		TES
 431	
 432	    END;
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

 433	ROUTINE SCAN (FILE_CHAN, FILE_PTR, SAVE_CHAR, RESULT) : NOVALUE = 	!SCAN NEXT ATOM
 434	
 435	!++
 436	! FUNCTIONAL DESCRIPTION:
 437	!
 438	!	SCAN NEXT ATOM (NAME, NUMBER, SPECIAL CHAR) FROM THE FILE
 439	!
 440	! FORMAL PARAMETERS:
 441	!
 442	!	FILE_CHAN - CHANNEL NUMBER ON WHICH TO READ
 443	!	FILE_PTR - FILE BLOCK WITH FILE NAME FILLED IN
 444	!	SAVE_CHAR - ADDRESS OF CHARACTER SAVED FROM LAST CALL.
 445	!	 SET TO -1 ON FIRST CALL.
 446	!	RESULT - VECTOR INTO WHICH TO STORE RESULTS
 447	!
 448	! IMPLICIT INPUTS:
 449	!
 450	!	NONE
 451	!
 452	! IMPLICIT OUTPUTS:
 453	!
 454	!	FILLS THE 'RESULT' ARRAY WITH THE NEXT ATOM SCANNED
 455	!
 456	! ROUTINE VALUE:
 457	!
 458	!	NONE
 459	!
 460	! SIDE EFFECTS
 461	!
 462	!	READS THE SPECIFIED FILE
 463	!
 464	!--
 465	
 466	    BEGIN
 467	
 468	    BIND
 469		ROUTINE_NAME = UPLIT (%ASCIZ'SCAN-TEXT-FILE');
 470	
 471	    MAP
 472		FILE_PTR : REF FILE_BLOCK,
 473		RESULT : REF VECTOR;
 474	
 475	    LOCAL
 476		CHAR,
 477		SCAN_DONE,
 478		DECIMAL_NUM,
 479		OCTAL_NUM,
 480		SCAN_POINTER;
 481	
 482	!
 483	! CLASSIFY ATOM BASED ON FIRST CHARACTER.  LEADING BLANKS,
 484	!  TABS, CARRIAGE RETURNS AND FORM FEEDS ARE SKIPPED.
 485	!
 486	    CHAR = ..SAVE_CHAR;
 487	
 488	    IF (.CHAR EQL -2)
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

 489	    THEN
 490		ERROR (UPLIT (%ASCIZ'EOF IGNORED IN SCAN'))
 491	    ELSE
 492		BEGIN
 493	
 494		IF (.CHAR LSS 0) THEN CHAR = INPUT (.FILE_CHAN);
 495	
 496		WHILE ((.CHAR EQL %O'40') OR (.CHAR EQL %O'11') OR (.CHAR EQL %O'15') OR (.CHAR EQL %O'14')) DO
 497		    CHAR = INPUT (.FILE_CHAN);
 498	
 499		IF (.CHAR LSS 0)
 500		THEN
 501		    BEGIN				!END OF FILE
 502		    RESULT [RESULT_TYPE] = 3;
 503		    RESULT [RESULT_VALUE] = -2;
 504		    .SAVE_CHAR = -2;
 505		    END
 506		ELSE
 507		    BEGIN				!NOT END OF FILE
 508	
 509		    CASE CLASS (.CHAR) FROM 1 TO 4 OF
 510			SET
 511	
 512			[1] : 				!ALPHABETIC (INCLUDES $ AND .)
 513			    BEGIN
 514			    RESULT [RESULT_TYPE] = 1;
 515			    SCAN_POINTER = CH$PTR (RESULT [RESULT_VALUE], -1);
 516	
 517			    DO
 518				BEGIN
 519				CH$A_WCHAR (.CHAR, SCAN_POINTER);
 520				CHAR = INPUT (.FILE_CHAN);
 521				END
 522			    UNTIL (CLASS (.CHAR) GTR 2);
 523	
 524			    CH$A_WCHAR (0, SCAN_POINTER);	!TERMINATE WITH NULL
 525			    .SAVE_CHAR = .CHAR;
 526			    END;
 527	
 528			[2] : 				!NUMERIC
 529			    BEGIN
 530			    RESULT [RESULT_TYPE] = 2;
 531			    OCTAL_NUM = 0;
 532			    DECIMAL_NUM = 0;
 533	
 534			    DO
 535				BEGIN
 536				OCTAL_NUM = (.OCTAL_NUM*8) + (.CHAR - %C'0');
 537				DECIMAL_NUM = (.DECIMAL_NUM*10) + (.CHAR - %C'0');
 538				CHAR = INPUT (.FILE_CHAN);
 539				END
 540			    UNTIL (CLASS (.CHAR) NEQ 2);
 541	
 542			    IF (.CHAR EQL %C'.')
 543			    THEN
 544				BEGIN			!NUMBER SPECIFIED AS DECIMAL
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

 545				RESULT [RESULT_VALUE] = .DECIMAL_NUM;
 546				.SAVE_CHAR = -1;
 547				END
 548			    ELSE
 549				BEGIN
 550				RESULT [RESULT_VALUE] = .OCTAL_NUM;
 551				.SAVE_CHAR = .CHAR;
 552				END;
 553	
 554			    END;
 555	
 556			[3] : 				!SPECIAL CHARACTER
 557			    BEGIN
 558			    RESULT [RESULT_TYPE] = 3;
 559			    RESULT [RESULT_VALUE] = .CHAR;
 560			    .SAVE_CHAR = -1;
 561			    END;
 562	
 563			[4] : 				!CONTROL CHARACTER
 564			    BEGIN
 565			    RESULT [RESULT_TYPE] = 3;
 566			    RESULT [RESULT_VALUE] = -1;
 567			    .SAVE_CHAR = -1;
 568			    END;
 569			TES;
 570	
 571		    END;
 572	
 573		IF (DEBUG GEQ 1)
 574		THEN
 575		    BEGIN				!DEBUG
 576		    PCRLF (1);
 577		    OUTSTR (1, UPLIT (%ASCIZ' SCAN: TYPE ='));
 578		    OUTNUM (1, .RESULT [RESULT_TYPE], 8, 0);
 579		    OUTSTR (1, UPLIT (%ASCIZ', VALUE ='));
 580	
 581		    CASE .RESULT [RESULT_TYPE] FROM 1 TO 3 OF
 582			SET
 583	
 584			[1] : 				!NAME
 585			    OUTSTR (1, RESULT [RESULT_VALUE]);
 586	
 587			[2] : 				!NUMBER, PRINT IN DECIMAL
 588			    OUTNUM (1, .RESULT [RESULT_VALUE], 10, 0);
 589	
 590			[3] : 				!SPECIAL CHARACTER
 591			    BEGIN
 592	
 593			    IF (.RESULT [RESULT_VALUE] LSS 0)
 594			    THEN
 595				OUTNUM (1, .RESULT [RESULT_VALUE], 10, 0)
 596			    ELSE
 597				OUTPUT (1, .RESULT [RESULT_VALUE]);
 598	
 599			    END;
 600			TES;
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

 601	
 602		    END;				!DEBUG
 603	
 604		END;
 605	
 606	    END;					!OF SCAN
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

 607	ROUTINE R_BUF (FILE_CHAN, FILE_PTR, SAVE_CHAR, VALUES) : NOVALUE = 	!READ BUF$DF LINE
 608	
 609	!++
 610	! FUNCTIONAL DESCRIPTION:
 611	!
 612	!	READ AND PROCESS THE BUF$DF LINE OF CETAB.MAC
 613	!
 614	! FORMAL PARAMETERS:
 615	!
 616	!	FILE_CHAN - CHANNEL NUMBER ON WHICH TO READ
 617	!	FILE_PTR - FILE BLOCK WITH FILE NAME FILLED IN
 618	!	SAVE_CHAR - ADDRESS OF CHARACTER SAVED FROM LAST CALL TO SCAN
 619	!	VALUES - BLOCK INTO WHICH TO STORE RESULTS
 620	!
 621	! IMPLICIT INPUTS:
 622	!
 623	!	NONE
 624	!
 625	! IMPLICIT OUTPUTS:
 626	!
 627	!	NONE
 628	!
 629	! ROUTINE VALUE:
 630	!
 631	!	NONE
 632	!
 633	! SIDE EFFECTS
 634	!
 635	!	READS THE REMAINDER OF THE LINE FROM CETAB.MAC
 636	!
 637	!--
 638	
 639	    BEGIN
 640	
 641	    BIND
 642		ROUTINE_NAME = UPLIT (%ASCIZ'READ-BUF$DF');
 643	
 644	    MAP
 645		FILE_PTR : REF FILE_BLOCK,
 646		VALUES : REF VNPVAL_BLOCK;
 647	
 648	    LOCAL
 649		RESULT : VECTOR [20],
 650		VAL_POINTER;
 651	
 652	!
 653	! SCAN EACH ARGUMENT OF BUF$DF, PUTTING IT INTO THE 'VALUES' BLOCK.
 654	!
 655	    VAL_POINTER = 1;
 656	
 657	    WHILE (.VAL_POINTER LEQ 8) DO
 658		BEGIN
 659		SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
 660	
 661		IF (.RESULT [RESULT_TYPE] NEQ RT_NUMBER)
 662		THEN
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

 663		    ERRMSG (0, 24, ROUTINE_NAME, FILE_PTR [FILE_NAME], 0,
 664			0, 0)
 665		ELSE
 666		    BEGIN
 667	
 668		    CASE .VAL_POINTER FROM 1 TO 8 OF
 669			SET
 670	
 671			[1] :
 672			    VALUES [CCBNM] = .RESULT [RESULT_VALUE];
 673	
 674			[2] :
 675			    VALUES [CCBSZ] = .RESULT [RESULT_VALUE];
 676	
 677			[3] :
 678			    VALUES [RDBNM] = .RESULT [RESULT_VALUE];
 679	
 680			[4] :
 681			    VALUES [RDBSZ] = .RESULT [RESULT_VALUE];
 682	
 683			[5] :
 684			    VALUES [SDBNM] = .RESULT [RESULT_VALUE];
 685	
 686			[6] :
 687			    VALUES [SDBSZ] = .RESULT [RESULT_VALUE];
 688	
 689			[7] :
 690			    VALUES [RDBTH] = .RESULT [RESULT_VALUE];
 691	
 692			[8] :
 693			    VALUES [XMTBF] = .RESULT [RESULT_VALUE];
 694			TES;
 695	
 696		    VAL_POINTER = .VAL_POINTER + 1;
 697	
 698		    IF (.VAL_POINTER LEQ 8)
 699		    THEN
 700			BEGIN
 701			SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
 702	
 703			IF ((.RESULT [RESULT_TYPE] NEQ RT_SPECIAL) OR (.RESULT [RESULT_VALUE] NEQ %C','))
 704			THEN
 705			    ERRMSG (0, 24, ROUTINE_NAME, FILE_PTR [FILE_NAME], 0, 0, 0);
 706	
 707			END;
 708	
 709		    END;
 710	
 711		END;
 712	
 713	!
 714	! FINISHED WITH BUF$DF, SKIP TO END OF LINE
 715	!
 716	
 717	    DO
 718		SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT)
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

 719	    UNTIL ((.RESULT [RESULT_TYPE] EQL RT_SPECIAL) AND (.RESULT [RESULT_VALUE] LSS 0));
 720	
 721	    END;					!OF R_BUF
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

 722	ROUTINE R_PDV (FILE_CHAN, FILE_PTR, SAVE_CHAR, VALUES) : NOVALUE = 	!READ PDV$DF LINE
 723	
 724	!++
 725	! FUNCTIONAL DESCRIPTION:
 726	!
 727	!	READ AND PROCESS THE PDV$DF LINE OF CETAB.MAC
 728	!
 729	! FORMAL PARAMETERS:
 730	!
 731	!	FILE_CHAN - CHANNEL NUMBER ON WHICH TO READ
 732	!	FILE_PTR - FILE BLOCK WITH FILE NAME FILLED IN
 733	!	SAVE_CHAR - ADDRESS OF CHARACTER SAVED FROM LAST CALL TO SCAN
 734	!	VALUES - BLOCK INTO WHICH TO STORE RESULTS
 735	!
 736	! IMPLICIT INPUTS:
 737	!
 738	!	NONE
 739	!
 740	! IMPLICIT OUTPUTS:
 741	!
 742	!	NONE
 743	!
 744	! ROUTINE VALUE:
 745	!
 746	!	NONE
 747	!
 748	! SIDE EFFECTS
 749	!
 750	!	READS THE REMAINDER OF THE LINE FROM CETAB.MAC
 751	!
 752	!--
 753	
 754	    BEGIN
 755	
 756	    BIND
 757		ROUTINE_NAME = UPLIT (%ASCIZ'READ-PDV$DF');
 758	
 759	    MAP
 760		FILE_PTR : REF FILE_BLOCK,
 761		VALUES : REF VNPVAL_BLOCK;
 762	
 763	    LOCAL
 764		RESULT : VECTOR [20],
 765		VAL_POINTER;
 766	
 767	!
 768	! THIS MACRO IS NOT USED BY VNP20
 769	!
 770	!
 771	! FINISHED WITH PDV$DF, SKIP TO END OF LINE
 772	!
 773	
 774	    DO
 775		SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT)
 776	    UNTIL ((.RESULT [RESULT_TYPE] EQL RT_SPECIAL) AND (.RESULT [RESULT_VALUE] LSS 0));
 777	
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

 778	    END;					!OF R_PDV
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

 779	ROUTINE R_SLT (FILE_CHAN, FILE_PTR, SAVE_CHAR, VALUES) : NOVALUE = 	!READ SLT$DF LINE
 780	
 781	!++
 782	! FUNCTIONAL DESCRIPTION:
 783	!
 784	!	READ AND PROCESS THE SLT$DF LINE OF CETAB.MAC
 785	!
 786	! FORMAL PARAMETERS:
 787	!
 788	!	FILE_CHAN - CHANNEL NUMBER ON WHICH TO READ
 789	!	FILE_PTR - FILE BLOCK WITH FILE NAME FILLED IN
 790	!	SAVE_CHAR - ADDRESS OF CHARACTER SAVED FROM LAST CALL TO SCAN
 791	!	VALUES - BLOCK INTO WHICH TO STORE RESULTS
 792	!
 793	! IMPLICIT INPUTS:
 794	!
 795	!	NONE
 796	!
 797	! IMPLICIT OUTPUTS:
 798	!
 799	!	NONE
 800	!
 801	! ROUTINE VALUE:
 802	!
 803	!	NONE
 804	!
 805	! SIDE EFFECTS
 806	!
 807	!	READS THE REMAINDER OF THE LINE FROM CETAB.MAC
 808	!	 AND GETS STORAGE FROM THE FREE LIST
 809	!
 810	!--
 811	
 812	    BEGIN
 813	
 814	    BIND
 815		ROUTINE_NAME = UPLIT (%ASCIZ'READ-SLT$DF');
 816	
 817	    MAP
 818		FILE_PTR : REF FILE_BLOCK,
 819		VALUES : REF VNPVAL_BLOCK;
 820	
 821	    LOCAL
 822		SLT_PTR : REF SLT_BLOCK,
 823		RESULT : VECTOR [20],
 824		VAL_POINTER,
 825		SCAN_DONE,
 826		SEARCH_DONE;
 827	
 828	!
 829	! ALLOCATE AN SLT BLOCK AND LINK IT IN WITH THE OTHERS, IF ANY.
 830	!
 831	
 832	    IF ((SLT_PTR = GETBLK (SLT_TYP, SLT_LEN)) EQL 0)
 833	    THEN
 834		ERRMSG (0, 1, ROUTINE_NAME, 0, 0, 0, 0)
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

 835	    ELSE
 836	
 837		IF ((VALUES [SLT_CHAIN] = BLD_CHAIN (.VALUES, .VALUES [SLT_CHAIN], .SLT_PTR)) EQL 0)
 838		THEN
 839		    ERRMSG (0,
 840			1, ROUTINE_NAME, 0, 0, 0, 0)
 841		ELSE
 842		    BEGIN
 843		    VAL_POINTER = 1;
 844		    SCAN_DONE = 0;
 845	
 846		    WHILE (.SCAN_DONE EQL 0) DO
 847			BEGIN
 848			SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
 849	
 850			IF ((.RESULT [RESULT_TYPE] NEQ RT_SPECIAL) OR (.RESULT [RESULT_VALUE] NEQ %C','))
 851			THEN
 852			    BEGIN
 853	
 854			    CASE .VAL_POINTER FROM 1 TO 7 OF
 855				SET
 856	
 857				[1] : 			!DDM NAME
 858				    BEGIN
 859	
 860				    IF (.RESULT [RESULT_TYPE] NEQ RT_NAME)
 861				    THEN
 862					ERRMSG (0, 24, ROUTINE_NAME,
 863					    FILE_PTR [FILE_NAME], 0, 0, 0)
 864				    ELSE
 865					CH$MOVE (4, CH$PTR (RESULT [RESULT_VALUE]), CH$PTR (SLT_PTR [SLT_DDM]));
 866	
 867				    END;
 868	
 869				[2] : 			!DLC NAME
 870				    BEGIN
 871	
 872				    IF (.RESULT [RESULT_TYPE] NEQ RT_NAME)
 873				    THEN
 874					ERRMSG (0, 24, ROUTINE_NAME,
 875					    FILE_PTR [FILE_NAME], 0, 0, 0)
 876				    ELSE
 877					CH$MOVE (4, CH$PTR (RESULT [RESULT_VALUE]), CH$PTR (SLT_PTR [SLT_DLC]));
 878	
 879				    END;
 880	
 881				[3] : 			!LLC NAME
 882				    BEGIN
 883	
 884				    IF (.RESULT [RESULT_TYPE] NEQ RT_NAME)
 885				    THEN
 886					ERRMSG (0, 24, ROUTINE_NAME,
 887					    FILE_PTR [FILE_NAME], 0, 0, 0)
 888				    ELSE
 889					CH$MOVE (4, CH$PTR (RESULT [RESULT_VALUE]), CH$PTR (SLT_PTR [SLT_LLC]));
 890	
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

 891				    END;
 892	
 893				[4] : 			!FLAGS, IGNORE.
 894				    BEGIN
 895				    END;
 896	
 897				[5] : 			!CONTROLLER NUMBER
 898				    BEGIN
 899	
 900				    IF (.RESULT [RESULT_TYPE] NEQ RT_NUMBER)
 901				    THEN
 902					ERRMSG (0, 24, ROUTINE_NAME,
 903					    FILE_PTR [FILE_NAME], 0, 0, 0)
 904				    ELSE
 905					SLT_PTR [SLT_CONT] = .RESULT [RESULT_VALUE];
 906	
 907				    END;
 908	
 909				[6] : 			!UNIT NUMBER
 910				    BEGIN
 911	
 912				    IF (.RESULT [RESULT_TYPE] NEQ RT_NUMBER)
 913				    THEN
 914					ERRMSG (0, 24, ROUTINE_NAME,
 915					    FILE_PTR [FILE_NAME], 0, 0, 0)
 916				    ELSE
 917					SLT_PTR [SLT_UNIT] = .RESULT [RESULT_VALUE];
 918	
 919				    END;
 920	
 921				[7] : 			!"ENABLE", IGNORE.
 922				    BEGIN
 923				    END;
 924	
 925				[OUTRANGE] :
 926				    BEGIN
 927				    ERRMSG (0, 24, ROUTINE_NAME, FILE_PTR [FILE_NAME], 0, 0, 0);
 928				    SCAN_DONE = 1;
 929				    END;
 930				TES;
 931	
 932	!
 933	! SCAN FOR THE NEXT COMMA
 934	!
 935			    SEARCH_DONE = 0;
 936	
 937			    WHILE (.SEARCH_DONE EQL 0) DO
 938				BEGIN
 939				SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
 940	
 941				IF (.RESULT [RESULT_TYPE] EQL RT_SPECIAL)
 942				THEN
 943	
 944				    IF (.RESULT [RESULT_VALUE] LSS 0)
 945				    THEN
 946					SEARCH_DONE = -1
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

 947				    ELSE
 948	
 949					IF (.RESULT [RESULT_VALUE] EQL %C',') THEN SEARCH_DONE = 1;
 950	
 951				END;
 952	
 953			    IF (.SEARCH_DONE LSS 0) THEN SCAN_DONE = .SEARCH_DONE;
 954	
 955			    END;
 956	
 957			VAL_POINTER = .VAL_POINTER + 1;
 958			END;
 959	
 960		    END;
 961	
 962	!
 963	! SAVE POINTER TO THE SLT BLOCK FOR THE STA$DF SCANNER
 964	!
 965	    VALUES [CURRENT_SLT] = .SLT_PTR;
 966	!
 967	! FINISHED WITH SLT$DF, SKIP TO END OF LINE
 968	!
 969	
 970	    IF (.SCAN_DONE GTR 0)
 971	    THEN
 972	
 973		DO
 974		    SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT)
 975		UNTIL ((.RESULT [RESULT_TYPE] EQL RT_SPECIAL) AND (.RESULT [RESULT_VALUE] LSS 0));
 976	
 977	    END;					!OF R_SLT
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

 978	ROUTINE R_STA (FILE_CHAN, FILE_PTR, SAVE_CHAR, VALUES) : NOVALUE = 	!READ STA$DF LINE
 979	
 980	!++
 981	! FUNCTIONAL DESCRIPTION:
 982	!
 983	!	READ AND PROCESS THE STA$DF LINE OF CETAB.MAC
 984	!
 985	! FORMAL PARAMETERS:
 986	!
 987	!	FILE_CHAN - CHANNEL NUMBER ON WHICH TO READ
 988	!	FILE_PTR - FILE BLOCK WITH FILE NAME FILLED IN
 989	!	SAVE_CHAR - ADDRESS OF CHARACTER SAVED FROM LAST CALL TO SCAN
 990	!	VALUES - BLOCK INTO WHICH TO STORE RESULTS
 991	!
 992	! IMPLICIT INPUTS:
 993	!
 994	!	NONE
 995	!
 996	! IMPLICIT OUTPUTS:
 997	!
 998	!	NONE
 999	!
1000	! ROUTINE VALUE:
1001	!
1002	!	NONE
1003	!
1004	! SIDE EFFECTS
1005	!
1006	!	READS THE REMAINDER OF THE LINE FROM CETAB.MAC
1007	!	 AND GETS STORAGE FROM THE FREE LIST
1008	!
1009	!--
1010	
1011	    BEGIN
1012	
1013	    BIND
1014		ROUTINE_NAME = UPLIT (%ASCIZ'READ-STA$DF');
1015	
1016	    MAP
1017		FILE_PTR : REF FILE_BLOCK,
1018		VALUES : REF VNPVAL_BLOCK;
1019	
1020	    LOCAL
1021		STA_PTR : REF STA_BLOCK,
1022		SLT_PTR : REF SLT_BLOCK,
1023		RESULT : VECTOR [20],
1024		VAL_POINTER,
1025		SCAN_DONE,
1026		SEARCH_DONE;
1027	
1028	!
1029	! GET THE POINTER TO THE CURRENT SLT BLOCK, WHICH REPRESENTS THE
1030	!  SYSTEM LINE THAT THIS STATION BELONGS ON.
1031	!
1032	    SLT_PTR = .VALUES [CURRENT_SLT];
1033	!
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

1034	! ALLOCATE A STA BLOCK AND LINK IT WITH THE OTHERS FOR THIS SLT,
1035	!  IF ANY.
1036	!
1037	
1038	    IF ((STA_PTR = GETBLK (STA_TYP, STA_LEN)) EQL 0)
1039	    THEN
1040		ERRMSG (0, 1, ROUTINE_NAME, 0, 0, 0, 0)
1041	    ELSE
1042	
1043		IF ((SLT_PTR [SLT_STA] = BLD_CHAIN (.SLT_PTR, .SLT_PTR [SLT_STA], .STA_PTR)) EQL 0)
1044		THEN
1045		    ERRMSG (0,
1046			1, ROUTINE_NAME, 0, 0, 0, 0)
1047		ELSE
1048		    BEGIN
1049		    VAL_POINTER = 1;
1050		    SCAN_DONE = 0;
1051		    SLT_PTR [SLT_NUM_OF_STA] = .SLT_PTR [SLT_NUM_OF_STA] + 1;
1052	
1053		    WHILE (.SCAN_DONE EQL 0) DO
1054			BEGIN
1055			SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
1056	
1057			IF ((.RESULT [RESULT_TYPE] NEQ RT_SPECIAL) OR (.RESULT [RESULT_VALUE] NEQ %C','))
1058			THEN
1059			    BEGIN
1060	
1061			    CASE .VAL_POINTER FROM 1 TO 2 OF
1062				SET
1063	
1064				[1] : 			!STATION NUMBER
1065				    BEGIN
1066	
1067				    IF (.RESULT [RESULT_TYPE] NEQ RT_NUMBER)
1068				    THEN
1069					ERRMSG (0, 24, ROUTINE_NAME,
1070					    FILE_PTR [FILE_NAME], 0, 0, 0)
1071				    ELSE
1072					STA_PTR [STA_NUM] = .RESULT [RESULT_VALUE];
1073	
1074				    END;
1075	
1076				[2] : 			!LLC NAME
1077				    BEGIN
1078	
1079				    IF (.RESULT [RESULT_TYPE] NEQ RT_NAME)
1080				    THEN
1081					ERRMSG (0, 24, ROUTINE_NAME,
1082					    FILE_PTR [FILE_NAME], 0, 0, 0)
1083				    ELSE
1084					CH$MOVE (4, CH$PTR (RESULT [RESULT_VALUE]), CH$PTR (STA_PTR [STA_LLC]));
1085	
1086				    END;
1087	
1088				[OUTRANGE] :
1089				    BEGIN
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

1090				    ERRMSG (0, 24, ROUTINE_NAME, FILE_PTR [FILE_NAME], 0, 0, 0);
1091				    SCAN_DONE = 1;
1092				    END;
1093				TES;
1094	
1095	!
1096	! SCAN FOR THE NEXT COMMA
1097	!
1098			    SEARCH_DONE = 0;
1099	
1100			    WHILE (.SEARCH_DONE EQL 0) DO
1101				BEGIN
1102				SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
1103	
1104				IF (.RESULT [RESULT_TYPE] EQL RT_SPECIAL)
1105				THEN
1106	
1107				    IF (.RESULT [RESULT_VALUE] LSS 0)
1108				    THEN
1109					SEARCH_DONE = -1
1110				    ELSE
1111	
1112					IF (.RESULT [RESULT_VALUE] EQL %C',') THEN SEARCH_DONE = 1;
1113	
1114				END;
1115	
1116			    IF (.SEARCH_DONE LSS 0) THEN SCAN_DONE = .SEARCH_DONE;
1117	
1118			    END;
1119	
1120			VAL_POINTER = .VAL_POINTER + 1;
1121			END;
1122	
1123		    END;
1124	
1125	!
1126	! FINISHED WITH STA$DF, SKIP TO END OF LINE
1127	!
1128	
1129	    IF (.SCAN_DONE GTR 0)
1130	    THEN
1131	
1132		DO
1133		    SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT)
1134		UNTIL ((.RESULT [RESULT_TYPE] EQL RT_SPECIAL) AND (.RESULT [RESULT_VALUE] LSS 0));
1135	
1136	    END;					!OF R_STA
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

1137	ROUTINE R_LLC (FILE_CHAN, FILE_PTR, SAVE_CHAR, VALUES) : NOVALUE = 	!READ LLC$DF LINE
1138	
1139	!++
1140	! FUNCTIONAL DESCRIPTION:
1141	!
1142	!	READ AND PROCESS THE LLC$DF LINE OF CETAB.MAC
1143	!
1144	! FORMAL PARAMETERS:
1145	!
1146	!	FILE_CHAN - CHANNEL NUMBER ON WHICH TO READ
1147	!	FILE_PTR - FILE BLOCK WITH FILE NAME FILLED IN
1148	!	SAVE_CHAR - ADDRESS OF CHARACTER SAVED FROM LAST CALL TO SCAN
1149	!	VALUES - BLOCK INTO WHICH TO STORE RESULTS
1150	!
1151	! IMPLICIT INPUTS:
1152	!
1153	!	NONE
1154	!
1155	! IMPLICIT OUTPUTS:
1156	!
1157	!	NONE
1158	!
1159	! ROUTINE VALUE:
1160	!
1161	!	NONE
1162	!
1163	! SIDE EFFECTS
1164	!
1165	!	READS THE REMAINDER OF THE LINE FROM CETAB.MAC
1166	!	 AND GETS STORAGE FROM THE FREE LIST
1167	!
1168	!--
1169	
1170	    BEGIN
1171	
1172	    BIND
1173		ROUTINE_NAME = UPLIT (%ASCIZ'READ-LLC$DF');
1174	
1175	    MAP
1176		FILE_PTR : REF FILE_BLOCK,
1177		VALUES : REF VNPVAL_BLOCK;
1178	
1179	    LOCAL
1180		LLC_PTR : REF LLC_BLOCK,
1181		RESULT : VECTOR [20],
1182		VAL_POINTER,
1183		SCAN_DONE,
1184		SEARCH_DONE;
1185	
1186	!
1187	! ALLOCATE AN LLC BLOCK AND LINK IT IN WITH THE OTHERS, IF ANY.
1188	!
1189	
1190	    IF ((LLC_PTR = GETBLK (LLC_TYP, LLC_LEN)) EQL 0)
1191	    THEN
1192		ERRMSG (0, 1, ROUTINE_NAME, 0, 0, 0, 0)
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

1193	    ELSE
1194	
1195		IF ((VALUES [LLC_CHAIN] = BLD_CHAIN (.VALUES, .VALUES [LLC_CHAIN], .LLC_PTR)) EQL 0)
1196		THEN
1197		    ERRMSG (0,
1198			1, ROUTINE_NAME, 0, 0, 0, 0)
1199		ELSE
1200		    BEGIN
1201		    VAL_POINTER = 1;
1202		    SCAN_DONE = 0;
1203		    LLC_PTR [LLC_PLKNUM] = 0;
1204		    LLC_PTR [LLC_LLKNUM] = 0;
1205	
1206		    WHILE (.SCAN_DONE EQL 0) DO
1207			BEGIN
1208			SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
1209	
1210			IF ((.RESULT [RESULT_TYPE] NEQ RT_SPECIAL) OR (.RESULT [RESULT_VALUE] NEQ %C','))
1211			THEN
1212			    BEGIN
1213	
1214			    CASE .VAL_POINTER FROM 1 TO 6 OF
1215				SET
1216	
1217				[1] : 			!NAME
1218				    BEGIN
1219	
1220				    IF (.RESULT [RESULT_TYPE] NEQ RT_NAME)
1221				    THEN
1222					ERRMSG (0, 24, ROUTINE_NAME,
1223					    FILE_PTR [FILE_NAME], 0, 0, 0)
1224				    ELSE
1225					CH$MOVE (4, CH$PTR (RESULT [RESULT_VALUE]), CH$PTR (LLC_PTR [LLC_NAME]));
1226	
1227				    END;
1228	
1229				[2] : 			!FLAGS, IGNORE THEM.
1230				    BEGIN
1231				    END;
1232	
1233				[3] : 			!PRIORITY, IGNORE IT.
1234				    BEGIN
1235				    END;
1236	
1237				[4] : 			!NUMBER OF PHYSICAL LINKS
1238				    BEGIN
1239	
1240				    IF (.RESULT [RESULT_TYPE] NEQ RT_NUMBER)
1241				    THEN
1242					ERRMSG (0, 24, ROUTINE_NAME,
1243					    FILE_PTR [FILE_NAME], 0, 0, 0)
1244				    ELSE
1245					LLC_PTR [LLC_PLKNUM] = .RESULT [RESULT_VALUE];
1246	
1247				    END;
1248	
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

1249				[5] : 			!NUMBER OF LOGICAL LINKS
1250				    BEGIN
1251	
1252				    IF (.RESULT [RESULT_TYPE] NEQ RT_NUMBER)
1253				    THEN
1254					ERRMSG (0, 24, ROUTINE_NAME,
1255					    FILE_PTR [FILE_NAME], 0, 0, 0)
1256				    ELSE
1257					LLC_PTR [LLC_LLKNUM] = .RESULT [RESULT_VALUE];
1258	
1259				    END;
1260	
1261				[6] : 			!DEVICE NAME
1262				    BEGIN
1263	
1264				    IF (.RESULT [RESULT_TYPE] NEQ RT_NAME)
1265				    THEN
1266					ERRMSG (0, 24, ROUTINE_NAME,
1267					    FILE_PTR [FILE_NAME], 0, 0, 0)
1268				    ELSE
1269					CH$MOVE (4, CH$PTR (RESULT [RESULT_VALUE]), CH$PTR (LLC_PTR [LLC_DEV]));
1270	
1271				    END;
1272	
1273				[OUTRANGE] :
1274				    BEGIN
1275				    ERRMSG (0, 24, ROUTINE_NAME, FILE_PTR [FILE_NAME], 0, 0, 0);
1276				    SCAN_DONE = 1;
1277				    END;
1278				TES;
1279	
1280	!
1281	! SCAN FOR THE NEXT COMMA
1282	!
1283			    SEARCH_DONE = 0;
1284	
1285			    WHILE (.SEARCH_DONE EQL 0) DO
1286				BEGIN
1287				SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
1288	
1289				IF (.RESULT [RESULT_TYPE] EQL RT_SPECIAL)
1290				THEN
1291	
1292				    IF (.RESULT [RESULT_VALUE] LSS 0)
1293				    THEN
1294					SEARCH_DONE = -1
1295				    ELSE
1296	
1297					IF (.RESULT [RESULT_VALUE] EQL %C',') THEN SEARCH_DONE = 1;
1298	
1299				END;
1300	
1301			    IF (.SEARCH_DONE LSS 0) THEN SCAN_DONE = .SEARCH_DONE;
1302	
1303			    END;
1304	
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

1305			VAL_POINTER = .VAL_POINTER + 1;
1306			END;
1307	
1308		    END;
1309	
1310	!
1311	! FINISHED WITH LLC$DF, SKIP TO END OF LINE
1312	!
1313	
1314	    IF (.SCAN_DONE GTR 0)
1315	    THEN
1316	
1317		DO
1318		    SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT)
1319		UNTIL ((.RESULT [RESULT_TYPE] EQL RT_SPECIAL) AND (.RESULT [RESULT_VALUE] LSS 0));
1320	
1321	    END;					!OF R_LLC
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

1322	ROUTINE R_DLC (FILE_CHAN, FILE_PTR, SAVE_CHAR, VALUES) : NOVALUE = 	!READ DLC$DF LINE
1323	
1324	!++
1325	! FUNCTIONAL DESCRIPTION:
1326	!
1327	!	READ AND PROCESS THE DLC$DF LINE OF CETAB.MAC
1328	!
1329	! FORMAL PARAMETERS:
1330	!
1331	!	FILE_CHAN - CHANNEL NUMBER ON WHICH TO READ
1332	!	FILE_PTR - FILE BLOCK WITH FILE NAME FILLED IN
1333	!	SAVE_CHAR - ADDRESS OF CHARACTER SAVED FROM LAST CALL TO SCAN
1334	!	VALUES - BLOCK INTO WHICH TO STORE RESULTS
1335	!
1336	! IMPLICIT INPUTS:
1337	!
1338	!	NONE
1339	!
1340	! IMPLICIT OUTPUTS:
1341	!
1342	!	NONE
1343	!
1344	! ROUTINE VALUE:
1345	!
1346	!	NONE
1347	!
1348	! SIDE EFFECTS
1349	!
1350	!	READS THE REMAINDER OF THE LINE FROM CETAB.MAC
1351	!	 AND GETS STORAGE FROM THE FREE LIST
1352	!
1353	!--
1354	
1355	    BEGIN
1356	
1357	    BIND
1358		ROUTINE_NAME = UPLIT (%ASCIZ'READ-DLC$DF');
1359	
1360	    MAP
1361		FILE_PTR : REF FILE_BLOCK,
1362		VALUES : REF VNPVAL_BLOCK;
1363	
1364	    LOCAL
1365		DLC_PTR : REF DLC_BLOCK,
1366		RESULT : VECTOR [20],
1367		VAL_POINTER,
1368		SCAN_DONE,
1369		SEARCH_DONE;
1370	
1371	!
1372	! ALLOCATE AN DLC BLOCK AND LINK IT IN WITH THE OTHERS, IF ANY.
1373	!
1374	
1375	    IF ((DLC_PTR = GETBLK (DLC_TYP, DLC_LEN)) EQL 0)
1376	    THEN
1377		ERRMSG (0, 1, ROUTINE_NAME, 0, 0, 0, 0)
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

1378	    ELSE
1379	
1380		IF ((VALUES [DLC_CHAIN] = BLD_CHAIN (.VALUES, .VALUES [DLC_CHAIN], .DLC_PTR)) EQL 0)
1381		THEN
1382		    ERRMSG (0,
1383			1, ROUTINE_NAME, 0, 0, 0, 0)
1384		ELSE
1385		    BEGIN
1386		    VAL_POINTER = 1;
1387		    SCAN_DONE = 0;
1388	
1389		    WHILE (.SCAN_DONE EQL 0) DO
1390			BEGIN
1391			SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
1392	
1393			CASE .VAL_POINTER FROM 1 TO 3 OF
1394			    SET
1395	
1396			    [1] : 			!NAME
1397				BEGIN
1398	
1399				IF (.RESULT [RESULT_TYPE] NEQ RT_NAME)
1400				THEN
1401				    ERRMSG (0, 24, ROUTINE_NAME,
1402					FILE_PTR [FILE_NAME], 0, 0, 0)
1403				ELSE
1404				    CH$MOVE (4, CH$PTR (RESULT [RESULT_VALUE]), CH$PTR (DLC_PTR [DLC_NAME]));
1405	
1406				END;
1407	
1408			    [2] : 			!FLAGS, IGNORE THEM.
1409				BEGIN
1410				END;
1411	
1412			    [3] : 			!PRIORITY, IGNORE IT.
1413				BEGIN
1414				END;
1415	
1416			    [OUTRANGE] :
1417				BEGIN
1418				ERRMSG (0, 24, ROUTINE_NAME, FILE_PTR [FILE_NAME], 0, 0, 0);
1419				SCAN_DONE = 1;
1420				END;
1421			    TES;
1422	
1423	!
1424	! SCAN FOR THE NEXT COMMA
1425	!
1426			SEARCH_DONE = 0;
1427	
1428			WHILE (.SEARCH_DONE EQL 0) DO
1429			    BEGIN
1430			    SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
1431	
1432			    IF (.RESULT [RESULT_TYPE] EQL RT_SPECIAL)
1433			    THEN
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

1434	
1435				IF (.RESULT [RESULT_VALUE] LSS 0)
1436				THEN
1437				    SEARCH_DONE = -1
1438				ELSE
1439	
1440				    IF (.RESULT [RESULT_VALUE] EQL %C',') THEN SEARCH_DONE = 1;
1441	
1442			    END;
1443	
1444			IF (.SEARCH_DONE LSS 0) THEN SCAN_DONE = .SEARCH_DONE;
1445	
1446			VAL_POINTER = .VAL_POINTER + 1;
1447			END;
1448	
1449		    END;
1450	
1451	!
1452	! FINISHED WITH DLC$DF, SKIP TO END OF LINE
1453	!
1454	
1455	    IF (.SCAN_DONE GTR 0)
1456	    THEN
1457	
1458		DO
1459		    SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT)
1460		UNTIL ((.RESULT [RESULT_TYPE] EQL RT_SPECIAL) AND (.RESULT [RESULT_VALUE] LSS 0));
1461	
1462	    END;					!OF R_DLC
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

1463	ROUTINE R_DDM (FILE_CHAN, FILE_PTR, SAVE_CHAR, VALUES) : NOVALUE = 	!READ DDM$DF LINE
1464	
1465	!++
1466	! FUNCTIONAL DESCRIPTION:
1467	!
1468	!	READ AND PROCESS THE DDM$DF LINE OF CETAB.MAC
1469	!
1470	! FORMAL PARAMETERS:
1471	!
1472	!	FILE_CHAN - CHANNEL NUMBER ON WHICH TO READ
1473	!	FILE_PTR - FILE BLOCK WITH FILE NAME FILLED IN
1474	!	SAVE_CHAR - ADDRESS OF CHARACTER SAVED FROM LAST CALL TO SCAN
1475	!	VALUES - BLOCK INTO WHICH TO STORE RESULTS
1476	!
1477	! IMPLICIT INPUTS:
1478	!
1479	!	NONE
1480	!
1481	! IMPLICIT OUTPUTS:
1482	!
1483	!	NONE
1484	!
1485	! ROUTINE VALUE:
1486	!
1487	!	NONE
1488	!
1489	! SIDE EFFECTS
1490	!
1491	!	READS THE REMAINDER OF THE LINE FROM CETAB.MAC
1492	!	 AND GETS STORAGE FROM THE FREE LIST
1493	!
1494	!--
1495	
1496	    BEGIN
1497	
1498	    BIND
1499		ROUTINE_NAME = UPLIT (%ASCIZ'READ-DDM$DF');
1500	
1501	    MAP
1502		FILE_PTR : REF FILE_BLOCK,
1503		VALUES : REF VNPVAL_BLOCK;
1504	
1505	    LOCAL
1506		DDM_PTR : REF DDM_BLOCK,
1507		RESULT : VECTOR [20],
1508		VAL_POINTER,
1509		SCAN_DONE,
1510		SEARCH_DONE;
1511	
1512	!
1513	! ALLOCATE A DDM BLOCK AND LINK IT IN WITH THE OTHERS, IF ANY.
1514	!
1515	
1516	    IF ((DDM_PTR = GETBLK (DDM_TYP, DDM_LEN)) EQL 0)
1517	    THEN
1518		ERRMSG (0, 1, ROUTINE_NAME, 0, 0, 0, 0)
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

1519	    ELSE
1520	
1521		IF ((VALUES [DDM_CHAIN] = BLD_CHAIN (.VALUES, .VALUES [DDM_CHAIN], .DDM_PTR)) EQL 0)
1522		THEN
1523		    ERRMSG (0,
1524			1, ROUTINE_NAME, 0, 0, 0, 0)
1525		ELSE
1526		    BEGIN
1527		    VAL_POINTER = 1;
1528		    SCAN_DONE = 0;
1529	
1530		    WHILE (.SCAN_DONE EQL 0) DO
1531			BEGIN
1532			SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
1533	
1534			CASE .VAL_POINTER FROM 1 TO 3 OF
1535			    SET
1536	
1537			    [1] : 			!NAME
1538				BEGIN
1539	
1540				IF (.RESULT [RESULT_TYPE] NEQ RT_NAME)
1541				THEN
1542				    ERRMSG (0, 24, ROUTINE_NAME,
1543					FILE_PTR [FILE_NAME], 0, 0, 0)
1544				ELSE
1545				    CH$MOVE (4, CH$PTR (RESULT [RESULT_VALUE]), CH$PTR (DDM_PTR [DDM_NAME]));
1546	
1547				END;
1548	
1549			    [2] : 			!FLAGS, IGNORE THEM.
1550				BEGIN
1551				END;
1552	
1553			    [3] : 			!PRIORITY, IGNORE IT.
1554				BEGIN
1555				END;
1556	
1557			    [OUTRANGE] :
1558				BEGIN
1559				ERRMSG (0, 24, ROUTINE_NAME, FILE_PTR [FILE_NAME], 0, 0, 0);
1560				SCAN_DONE = 1;
1561				END;
1562			    TES;
1563	
1564	!
1565	! SCAN FOR THE NEXT COMMA
1566	!
1567			SEARCH_DONE = 0;
1568	
1569			WHILE (.SEARCH_DONE EQL 0) DO
1570			    BEGIN
1571			    SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
1572	
1573			    IF (.RESULT [RESULT_TYPE] EQL RT_SPECIAL)
1574			    THEN
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

1575	
1576				IF (.RESULT [RESULT_VALUE] LSS 0)
1577				THEN
1578				    SEARCH_DONE = -1
1579				ELSE
1580	
1581				    IF (.RESULT [RESULT_VALUE] EQL %C',') THEN SEARCH_DONE = 1;
1582	
1583			    END;
1584	
1585			IF (.SEARCH_DONE LSS 0) THEN SCAN_DONE = .SEARCH_DONE;
1586	
1587			VAL_POINTER = .VAL_POINTER + 1;
1588			END;
1589	
1590		    END;
1591	
1592	!
1593	! SAVE POINTER TO DDM FOR UNT$DF AND CNT$DF SCANNERS
1594	!
1595	    VALUES [CURRENT_DDM] = .DDM_PTR;
1596	!
1597	! FINISHED WITH DDM$DF, SKIP TO END OF LINE
1598	!
1599	
1600	    IF (.SCAN_DONE GTR 0)
1601	    THEN
1602	
1603		DO
1604		    SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT)
1605		UNTIL ((.RESULT [RESULT_TYPE] EQL RT_SPECIAL) AND (.RESULT [RESULT_VALUE] LSS 0));
1606	
1607	    END;					!OF R_DDM
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

1608	ROUTINE R_CNT (FILE_CHAN, FILE_PTR, SAVE_CHAR, VALUES) : NOVALUE = 	!READ CNT$DF LINE
1609	
1610	!++
1611	! FUNCTIONAL DESCRIPTION:
1612	!
1613	!	READ AND PROCESS THE CNT$DF LINE OF CETAB.MAC
1614	!
1615	! FORMAL PARAMETERS:
1616	!
1617	!	FILE_CHAN - CHANNEL NUMBER ON WHICH TO READ
1618	!	FILE_PTR - FILE BLOCK WITH FILE NAME FILLED IN
1619	!	SAVE_CHAR - ADDRESS OF CHARACTER SAVED FROM LAST CALL TO SCAN
1620	!	VALUES - BLOCK INTO WHICH TO STORE RESULTS
1621	!
1622	! IMPLICIT INPUTS:
1623	!
1624	!	NONE
1625	!
1626	! IMPLICIT OUTPUTS:
1627	!
1628	!	NONE
1629	!
1630	! ROUTINE VALUE:
1631	!
1632	!	NONE
1633	!
1634	! SIDE EFFECTS
1635	!
1636	!	READS THE REMAINDER OF THE LINE FROM CETAB.MAC
1637	!	 AND GETS STORAGE FROM THE FREE LIST
1638	!
1639	!--
1640	
1641	    BEGIN
1642	
1643	    BIND
1644		ROUTINE_NAME = UPLIT (%ASCIZ'READ-CNT$DF');
1645	
1646	    MAP
1647		FILE_PTR : REF FILE_BLOCK,
1648		VALUES : REF VNPVAL_BLOCK;
1649	
1650	    LOCAL
1651		CNT_PTR : REF CNT_BLOCK,
1652		DDM_PTR : REF DDM_BLOCK,
1653		RESULT : VECTOR [20],
1654		VAL_POINTER,
1655		SCAN_DONE,
1656		SEARCH_DONE;
1657	
1658	!
1659	! FETCH A POINTER TO THE LAST DDM BLOCK
1660	!
1661	    DDM_PTR = .VALUES [CURRENT_DDM];
1662	!
1663	! ALLOCATE A CNT BLOCK AND LINK IT IN WITH THE OTHERS, IF ANY.
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

1664	!
1665	
1666	    IF ((CNT_PTR = GETBLK (CNT_TYP, CNT_LEN)) EQL 0)
1667	    THEN
1668		ERRMSG (0, 1, ROUTINE_NAME, 0, 0, 0, 0)
1669	    ELSE
1670	
1671		IF ((DDM_PTR [DDM_CNT] = BLD_CHAIN (.DDM_PTR, .DDM_PTR [DDM_CNT], .CNT_PTR)) EQL 0)
1672		THEN
1673		    ERRMSG (0,
1674			1, ROUTINE_NAME, 0, 0, 0, 0)
1675		ELSE
1676		    BEGIN
1677		    VAL_POINTER = 1;
1678		    SCAN_DONE = 0;
1679	
1680		    WHILE (.SCAN_DONE EQL 0) DO
1681			BEGIN
1682			SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
1683	
1684			CASE .VAL_POINTER FROM 1 TO 4 OF
1685			    SET
1686	
1687			    [1] : 			!CONTROLLER NUMBER
1688				BEGIN
1689	
1690				IF (.RESULT [RESULT_TYPE] NEQ RT_NUMBER)
1691				THEN
1692				    ERRMSG (0, 24, ROUTINE_NAME,
1693					FILE_PTR [FILE_NAME], 0, 0, 0)
1694				ELSE
1695				    CNT_PTR [CNT_CONT] = .RESULT [RESULT_VALUE];
1696	
1697				END;
1698	
1699			    [2] : 			!VECTOR
1700				BEGIN
1701	
1702				IF (.RESULT [RESULT_TYPE] NEQ RT_NUMBER)
1703				THEN
1704				    ERRMSG (0, 24, ROUTINE_NAME,
1705					FILE_PTR [FILE_NAME], 0, 0, 0)
1706				ELSE
1707				    CNT_PTR [CNT_VECTOR] = .RESULT [RESULT_VALUE];
1708	
1709				END;
1710	
1711			    [3] : 			!CSR
1712				BEGIN
1713	
1714				IF (.RESULT [RESULT_TYPE] NEQ RT_NUMBER)
1715				THEN
1716				    ERRMSG (0, 24, ROUTINE_NAME,
1717					FILE_PTR [FILE_NAME], 0, 0, 0)
1718				ELSE
1719				    CNT_PTR [CNT_CSR] = .RESULT [RESULT_VALUE];
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

1720	
1721				END;
1722	
1723			    [4] : 			!PRIORITY
1724				BEGIN
1725	
1726				IF (.RESULT [RESULT_TYPE] NEQ RT_NUMBER)
1727				THEN
1728				    ERRMSG (0, 24, ROUTINE_NAME,
1729					FILE_PTR [FILE_NAME], 0, 0, 0)
1730				ELSE
1731				    CNT_PTR [CNT_PRIORITY] = .RESULT [RESULT_VALUE];
1732	
1733				END;
1734	
1735			    [OUTRANGE] :
1736				BEGIN
1737				ERRMSG (0, 24, ROUTINE_NAME, FILE_PTR [FILE_NAME], 0, 0, 0);
1738				SCAN_DONE = 1;
1739				END;
1740			    TES;
1741	
1742	!
1743	! SCAN FOR THE NEXT COMMA
1744	!
1745			SEARCH_DONE = 0;
1746	
1747			WHILE (.SEARCH_DONE EQL 0) DO
1748			    BEGIN
1749			    SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
1750	
1751			    IF (.RESULT [RESULT_TYPE] EQL RT_SPECIAL)
1752			    THEN
1753	
1754				IF (.RESULT [RESULT_VALUE] LSS 0)
1755				THEN
1756				    SEARCH_DONE = -1
1757				ELSE
1758	
1759				    IF (.RESULT [RESULT_VALUE] EQL %C',') THEN SEARCH_DONE = 1;
1760	
1761			    END;
1762	
1763			IF (.SEARCH_DONE LSS 0) THEN SCAN_DONE = .SEARCH_DONE;
1764	
1765			VAL_POINTER = .VAL_POINTER + 1;
1766			END;
1767	
1768		    END;
1769	
1770	!
1771	! STORE POINTER TO DDM BLOCK, FOR REDUNDENCY
1772	!
1773	    CNT_PTR [CNT_DDM] = .DDM_PTR;
1774	!
1775	! SAVE POINTER TO CNT FOR UNT$DF SCANNER
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

1776	!
1777	    VALUES [CURRENT_CNT] = .CNT_PTR;
1778	!
1779	! FINISHED WITH CNT$DF, SKIP TO END OF LINE
1780	!
1781	
1782	    IF (.SCAN_DONE GTR 0)
1783	    THEN
1784	
1785		DO
1786		    SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT)
1787		UNTIL ((.RESULT [RESULT_TYPE] EQL RT_SPECIAL) AND (.RESULT [RESULT_VALUE] LSS 0));
1788	
1789	    END;					!OF R_CNT
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

1790	ROUTINE R_UNT (FILE_CHAN, FILE_PTR, SAVE_CHAR, VALUES) : NOVALUE = 	!READ UNT$DF LINE
1791	
1792	!++
1793	! FUNCTIONAL DESCRIPTION:
1794	!
1795	!	READ AND PROCESS THE UNT$DF LINE OF CETAB.MAC
1796	!
1797	! FORMAL PARAMETERS:
1798	!
1799	!	FILE_CHAN - CHANNEL NUMBER ON WHICH TO READ
1800	!	FILE_PTR - FILE BLOCK WITH FILE NAME FILLED IN
1801	!	SAVE_CHAR - ADDRESS OF CHARACTER SAVED FROM LAST CALL TO SCAN
1802	!	VALUES - BLOCK INTO WHICH TO STORE RESULTS
1803	!
1804	! IMPLICIT INPUTS:
1805	!
1806	!	NONE
1807	!
1808	! IMPLICIT OUTPUTS:
1809	!
1810	!	NONE
1811	!
1812	! ROUTINE VALUE:
1813	!
1814	!	NONE
1815	!
1816	! SIDE EFFECTS
1817	!
1818	!	READS THE REMAINDER OF THE LINE FROM CETAB.MAC
1819	!	 AND GETS STORAGE FROM THE FREE LIST
1820	!
1821	!--
1822	
1823	    BEGIN
1824	
1825	    BIND
1826		ROUTINE_NAME = UPLIT (%ASCIZ'READ-UNT$DF');
1827	
1828	    MAP
1829		FILE_PTR : REF FILE_BLOCK,
1830		VALUES : REF VNPVAL_BLOCK;
1831	
1832	    LOCAL
1833		UNT_PTR : REF UNT_BLOCK,
1834		CNT_PTR : REF CNT_BLOCK,
1835		DDM_PTR : REF DDM_BLOCK,
1836		RESULT : VECTOR [20],
1837		VAL_POINTER,
1838		SCAN_DONE,
1839		SEARCH_DONE;
1840	
1841	!
1842	! FETCH POINTERS TO THE LAST DDM AND CNT BLOCKS
1843	!
1844	    DDM_PTR = .VALUES [CURRENT_DDM];
1845	    CNT_PTR = .VALUES [CURRENT_CNT];
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

1846	!
1847	! ALLOCATE A UNT BLOCK AND LINK IT IN WITH THE OTHERS, IF ANY.
1848	!
1849	
1850	    IF ((UNT_PTR = GETBLK (UNT_TYP, UNT_LEN)) EQL 0)
1851	    THEN
1852		ERRMSG (0, 1, ROUTINE_NAME, 0, 0, 0, 0)
1853	    ELSE
1854	
1855		IF ((CNT_PTR [CNT_UNT] = BLD_CHAIN (.CNT_PTR, .CNT_PTR [CNT_UNT], .UNT_PTR)) EQL 0)
1856		THEN
1857		    ERRMSG (0,
1858			1, ROUTINE_NAME, 0, 0, 0, 0)
1859		ELSE
1860		    BEGIN
1861		    CNT_PTR [CNT_NUM_OF_UNTS] = .CNT_PTR [CNT_NUM_OF_UNTS] + 1;
1862		    VAL_POINTER = 1;
1863		    SCAN_DONE = 0;
1864	
1865		    WHILE (.SCAN_DONE EQL 0) DO
1866			BEGIN
1867			SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
1868	
1869			CASE .VAL_POINTER FROM 1 TO 4 OF
1870			    SET
1871	
1872			    [1] : 			!UNIT NUMBER
1873				BEGIN
1874	
1875				IF (.RESULT [RESULT_TYPE] NEQ RT_NUMBER)
1876				THEN
1877				    ERRMSG (0, 24, ROUTINE_NAME,
1878					FILE_PTR [FILE_NAME], 0, 0, 0)
1879				ELSE
1880				    UNT_PTR [UNT_UNIT] = .RESULT [RESULT_VALUE];
1881	
1882				END;
1883	
1884			    [2] : 			!PARM MASK
1885				BEGIN
1886	
1887				IF (.RESULT [RESULT_TYPE] NEQ RT_NUMBER)
1888				THEN
1889				    ERRMSG (0, 24, ROUTINE_NAME,
1890					FILE_PTR [FILE_NAME], 0, 0, 0)
1891				ELSE
1892				    UNT_PTR [UNT_PARMSK] = .RESULT [RESULT_VALUE];
1893	
1894				END;
1895	
1896			    [3] : 			!PARM
1897				BEGIN
1898	
1899				IF (.RESULT [RESULT_TYPE] NEQ RT_NUMBER)
1900				THEN
1901				    ERRMSG (0, 24, ROUTINE_NAME,
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

1902					FILE_PTR [FILE_NAME], 0, 0, 0)
1903				ELSE
1904				    UNT_PTR [UNT_PARM] = .RESULT [RESULT_VALUE];
1905	
1906				END;
1907	
1908			    [4] : 			!SECONDARY CSR
1909				BEGIN
1910	
1911				IF (.RESULT [RESULT_TYPE] NEQ RT_NUMBER)
1912				THEN
1913				    ERRMSG (0, 24, ROUTINE_NAME,
1914					FILE_PTR [FILE_NAME], 0, 0, 0)
1915				ELSE
1916				    UNT_PTR [UNT_SECCSR] = .RESULT [RESULT_VALUE];
1917	
1918				END;
1919	
1920			    [OUTRANGE] :
1921				BEGIN
1922				ERRMSG (0, 24, ROUTINE_NAME, FILE_PTR [FILE_NAME], 0, 0, 0);
1923				SCAN_DONE = 1;
1924				END;
1925			    TES;
1926	
1927	!
1928	! SCAN FOR THE NEXT COMMA
1929	!
1930			SEARCH_DONE = 0;
1931	
1932			WHILE (.SEARCH_DONE EQL 0) DO
1933			    BEGIN
1934			    SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
1935	
1936			    IF (.RESULT [RESULT_TYPE] EQL RT_SPECIAL)
1937			    THEN
1938	
1939				IF (.RESULT [RESULT_VALUE] LSS 0)
1940				THEN
1941				    SEARCH_DONE = -1
1942				ELSE
1943	
1944				    IF (.RESULT [RESULT_VALUE] EQL %C',') THEN SEARCH_DONE = 1;
1945	
1946			    END;
1947	
1948			IF (.SEARCH_DONE LSS 0) THEN SCAN_DONE = .SEARCH_DONE;
1949	
1950			VAL_POINTER = .VAL_POINTER + 1;
1951			END;
1952	
1953		    END;
1954	
1955	!
1956	! STORE POINTERS TO DDM AND CNT BLOCKS, FOR REDUNDENCY
1957	!
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

1958	    UNT_PTR [UNT_DDM] = .DDM_PTR;
1959	    UNT_PTR [UNT_CNT] = .CNT_PTR;
1960	!
1961	! FINISHED WITH UNT$DF, SKIP TO END OF LINE
1962	!
1963	
1964	    IF (.SCAN_DONE GTR 0)
1965	    THEN
1966	
1967		DO
1968		    SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT)
1969		UNTIL ((.RESULT [RESULT_TYPE] EQL RT_SPECIAL) AND (.RESULT [RESULT_VALUE] LSS 0));
1970	
1971	    END;					!OF R_UNT
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

1972	ROUTINE R_NOD (FILE_CHAN, FILE_PTR, SAVE_CHAR, VALUES) : NOVALUE = 	!READ NOD$DF LINE
1973	
1974	!++
1975	! FUNCTIONAL DESCRIPTION:
1976	!
1977	!	READ AND PROCESS THE NOD$DF LINE OF CETAB.MAC
1978	!
1979	! FORMAL PARAMETERS:
1980	!
1981	!	FILE_CHAN - CHANNEL NUMBER ON WHICH TO READ
1982	!	FILE_PTR - FILE BLOCK WITH FILE NAME FILLED IN
1983	!	SAVE_CHAR - ADDRESS OF CHARACTER SAVED FROM LAST CALL TO SCAN
1984	!	VALUES - BLOCK INTO WHICH TO STORE RESULTS
1985	!
1986	! IMPLICIT INPUTS:
1987	!
1988	!	NONE
1989	!
1990	! IMPLICIT OUTPUTS:
1991	!
1992	!	NONE
1993	!
1994	! ROUTINE VALUE:
1995	!
1996	!	NONE
1997	!
1998	! SIDE EFFECTS
1999	!
2000	!	READS THE REMAINDER OF THE LINE FROM CETAB.MAC
2001	!
2002	!--
2003	
2004	    BEGIN
2005	
2006	    BIND
2007		ROUTINE_NAME = UPLIT (%ASCIZ'READ-NOD$DF');
2008	
2009	    MAP
2010		FILE_PTR : REF FILE_BLOCK,
2011		VALUES : REF VNPVAL_BLOCK;
2012	
2013	    LOCAL
2014		RESULT : VECTOR [20],
2015		VAL_POINTER;
2016	
2017	!
2018	! THIS LINE IS NOT USED BY VNP20
2019	!
2020	!
2021	! FINISHED WITH NOD$DF, SKIP TO END OF LINE
2022	!
2023	
2024	    DO
2025		SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT)
2026	    UNTIL ((.RESULT [RESULT_TYPE] EQL RT_SPECIAL) AND (.RESULT [RESULT_VALUE] LSS 0));
2027	
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

2028	    END;					!OF R_NOD
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

2029	ROUTINE R_PSW (FILE_CHAN, FILE_PTR, SAVE_CHAR, VALUES) : NOVALUE = 	!READ PSW$DF LINE
2030	
2031	!++
2032	! FUNCTIONAL DESCRIPTION:
2033	!
2034	!	READ AND PROCESS THE PSW$DF LINE OF CETAB.MAC
2035	!
2036	! FORMAL PARAMETERS:
2037	!
2038	!	FILE_CHAN - CHANNEL NUMBER ON WHICH TO READ
2039	!	FILE_PTR - FILE BLOCK WITH FILE NAME FILLED IN
2040	!	SAVE_CHAR - ADDRESS OF CHARACTER SAVED FROM LAST CALL TO SCAN
2041	!	VALUES - BLOCK INTO WHICH TO STORE RESULTS
2042	!
2043	! IMPLICIT INPUTS:
2044	!
2045	!	NONE
2046	!
2047	! IMPLICIT OUTPUTS:
2048	!
2049	!	NONE
2050	!
2051	! ROUTINE VALUE:
2052	!
2053	!	NONE
2054	!
2055	! SIDE EFFECTS
2056	!
2057	!	READS THE REMAINDER OF THE LINE FROM CETAB.MAC
2058	!
2059	!--
2060	
2061	    BEGIN
2062	
2063	    BIND
2064		ROUTINE_NAME = UPLIT (%ASCIZ'READ-PSW$DF');
2065	
2066	    MAP
2067		FILE_PTR : REF FILE_BLOCK,
2068		VALUES : REF VNPVAL_BLOCK;
2069	
2070	    LOCAL
2071		SCAN_DONE,
2072		SEARCH_DONE,
2073		RESULT : VECTOR [20],
2074		VAL_POINTER,
2075		CHAR,
2076		STR_PTR;
2077	
2078	!
2079	! SCAN EACH ARGUMENT OF PSW$DF AND PUT INTO VALUES ARRAY
2080	!
2081	    VAL_POINTER = 1;
2082	    SCAN_DONE = 0;
2083	
2084	    WHILE (.SCAN_DONE EQL 0) DO
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

2085		BEGIN
2086	
2087		CASE .VAL_POINTER FROM 1 TO 2 OF
2088		    SET
2089	
2090		    [1] : 				!RECEIVE PASSWORD
2091			BEGIN
2092			SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
2093	
2094			IF (.RESULT [RESULT_TYPE] NEQ RT_SPECIAL)
2095			THEN
2096			    ERRMSG (0, 24, ROUTINE_NAME,
2097				FILE_PTR [FILE_NAME], 0, 0, 0)
2098			ELSE
2099			    BEGIN
2100			    STR_PTR = 0;
2101	
2102			    WHILE (.STR_PTR LSS LEN_PASWRD) DO
2103				BEGIN
2104				CHAR = INPUT (.FILE_CHAN);
2105	
2106				IF (CLASS (.CHAR) EQL RT_SPECIAL) THEN EXITLOOP;
2107	
2108				CH$WCHAR (.CHAR, CH$PTR (VALUES [RCV_PASWRD], .STR_PTR));
2109				STR_PTR = .STR_PTR + 1;
2110				END;
2111	
2112			    IF (.STR_PTR EQL 0) THEN CH$WCHAR (0, CH$PTR (VALUES [RCV_PASWRD], 0));
2113	
2114			    END;
2115	
2116			END;
2117	
2118		    [2] : 				!TRANSMIT PASSWORD
2119			BEGIN
2120			SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
2121	
2122			IF (.RESULT [RESULT_TYPE] NEQ RT_SPECIAL)
2123			THEN
2124			    ERRMSG (0, 24, ROUTINE_NAME,
2125				FILE_PTR [FILE_NAME], 0, 0, 0)
2126			ELSE
2127			    BEGIN
2128			    STR_PTR = 0;
2129	
2130			    WHILE (.STR_PTR LSS LEN_PASWRD) DO
2131				BEGIN
2132				CHAR = INPUT (.FILE_CHAN);
2133	
2134				IF (CLASS (.CHAR) EQL RT_SPECIAL) THEN EXITLOOP;
2135	
2136				CH$WCHAR (.CHAR, CH$PTR (VALUES [XMT_PASWRD], .STR_PTR));
2137				STR_PTR = .STR_PTR + 1;
2138				END;
2139	
2140			    IF (.STR_PTR EQL 0) THEN CH$WCHAR (0, CH$PTR (VALUES [XMT_PASWRD], 0));
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

2141	
2142			    END;
2143	
2144			END;
2145		    TES;
2146	
2147	!
2148	! SCAN FOR THE NEXT COMMA
2149	!
2150		SEARCH_DONE = 0;
2151	
2152		WHILE (.SEARCH_DONE EQL 0) DO
2153		    BEGIN
2154		    SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
2155	
2156		    IF (.RESULT [RESULT_TYPE] EQL RT_SPECIAL)
2157		    THEN
2158	
2159			IF (.RESULT [RESULT_VALUE] LSS 0)
2160			THEN
2161			    SEARCH_DONE = -1
2162			ELSE
2163	
2164			    IF (.RESULT [RESULT_VALUE] EQL %C',') THEN SEARCH_DONE = 1;
2165	
2166		    END;
2167	
2168		IF (.SEARCH_DONE LSS 0) THEN SCAN_DONE = .SEARCH_DONE;
2169	
2170		VAL_POINTER = .VAL_POINTER + 1;
2171		END;
2172	
2173	!
2174	! FINISHED WITH PSW$DF, SKIP TO END OF LINE
2175	!
2176	
2177	    IF (.SCAN_DONE GTR 0)
2178	    THEN
2179	
2180		DO
2181		    SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT)
2182		UNTIL ((.RESULT [RESULT_TYPE] EQL RT_SPECIAL) AND (.RESULT [RESULT_VALUE] LSS 0));
2183	
2184	    END;					!OF R_PSW
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

2185	ROUTINE R_TSK (FILE_CHAN, FILE_PTR, SAVE_CHAR, VALUES) : NOVALUE = 	!READ TSK$DF LINE
2186	
2187	!++
2188	! FUNCTIONAL DESCRIPTION:
2189	!
2190	!	READ AND PROCESS THE TSK$DF LINE OF CETAB.MAC
2191	!
2192	! FORMAL PARAMETERS:
2193	!
2194	!	FILE_CHAN - CHANNEL NUMBER ON WHICH TO READ
2195	!	FILE_PTR - FILE BLOCK WITH FILE NAME FILLED IN
2196	!	SAVE_CHAR - ADDRESS OF CHARACTER SAVED FROM LAST CALL TO SCAN
2197	!	VALUES - BLOCK INTO WHICH TO STORE RESULTS
2198	!
2199	! IMPLICIT INPUTS:
2200	!
2201	!	NONE
2202	!
2203	! IMPLICIT OUTPUTS:
2204	!
2205	!	NONE
2206	!
2207	! ROUTINE VALUE:
2208	!
2209	!	NONE
2210	!
2211	! SIDE EFFECTS
2212	!
2213	!	READS THE REMAINDER OF THE LINE FROM CETAB.MAC
2214	!
2215	!--
2216	
2217	    BEGIN
2218	
2219	    BIND
2220		ROUTINE_NAME = UPLIT (%ASCIZ'READ-TSK$DF');
2221	
2222	    MAP
2223		FILE_PTR : REF FILE_BLOCK,
2224		VALUES : REF VNPVAL_BLOCK;
2225	
2226	    LOCAL
2227		SCAN_DONE,
2228		SEARCH_DONE,
2229		RESULT : VECTOR [20],
2230		VAL_POINTER,
2231		CHAR,
2232		STR_PTR,
2233		TSKB_PTR : REF VNPTSK_BLOCK;
2234	
2235	!
2236	! ALLOCATE AN VNPTSK BLOCK AND LINK IT IN WITH OTHERS
2237	!
2238	
2239	    IF ((TSKB_PTR = GETBLK (VNPTSK_TYP, VNPTSK_LEN)) EQL 0)
2240	    THEN
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

2241		ERRMSG (0, 1, ROUTINE_NAME, 0, 0, 0, 0)
2242	    ELSE
2243	
2244		IF ((VALUES [TSK_CHAIN] = BLD_CHAIN (.VALUES, .VALUES [TSK_CHAIN], .TSKB_PTR)) EQL 0)
2245		THEN
2246		    ERRMSG (0,
2247			1, ROUTINE_NAME, 0, 0, 0, 0)
2248		ELSE
2249		    BEGIN
2250	!
2251	! SCAN EACH ARGUMENT OF PSW$DF AND PUT INTO VALUES ARRAY
2252	!
2253		    VAL_POINTER = 1;
2254		    SCAN_DONE = 0;
2255	
2256		    WHILE (.SCAN_DONE EQL 0) DO
2257			BEGIN
2258	
2259			CASE .VAL_POINTER FROM 1 TO 2 OF
2260			    SET
2261	
2262			    [1] : 			!MAIN TASK NAME
2263				BEGIN
2264				SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
2265	
2266				IF (.RESULT [RESULT_TYPE] NEQ RT_SPECIAL)
2267				THEN
2268				    ERRMSG (0, 24, ROUTINE_NAME,
2269					FILE_PTR [FILE_NAME], 0, 0, 0)
2270				ELSE
2271				    BEGIN
2272				    STR_PTR = 0;
2273	
2274				    WHILE (.STR_PTR LSS LEN_TSK_NAME) DO
2275					BEGIN
2276					CHAR = INPUT (.FILE_CHAN);
2277	
2278					IF (CLASS (.CHAR) EQL RT_SPECIAL) THEN EXITLOOP;
2279	
2280					CH$WCHAR (.CHAR, CH$PTR (TSKB_PTR [TSK_NAME], .STR_PTR));
2281					STR_PTR = .STR_PTR + 1;
2282					END;
2283	
2284				    IF (.STR_PTR EQL 0) THEN CH$WCHAR (0, CH$PTR (TSKB_PTR [TSK_NAME], 0));
2285	
2286				    END;
2287	
2288				END;
2289	
2290			    [2] : 			!LOADABLE DRIVER NAME
2291				BEGIN
2292				SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
2293	
2294				IF (.RESULT [RESULT_TYPE] NEQ RT_SPECIAL)
2295				THEN
2296				    ERRMSG (0, 24, ROUTINE_NAME,
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

2297					FILE_PTR [FILE_NAME], 0, 0, 0)
2298				ELSE
2299				    BEGIN
2300				    STR_PTR = 0;
2301	
2302				    WHILE (.STR_PTR LSS LEN_TSK_NAME) DO
2303					BEGIN
2304					CHAR = INPUT (.FILE_CHAN);
2305	
2306					IF (CLASS (.CHAR) EQL RT_SPECIAL) THEN EXITLOOP;
2307	
2308					CH$WCHAR (.CHAR, CH$PTR (TSKB_PTR [DRIVER_NAME], .STR_PTR));
2309					STR_PTR = .STR_PTR + 1;
2310					END;
2311	
2312				    IF (.STR_PTR EQL 0) THEN CH$WCHAR (0, CH$PTR (TSKB_PTR [DRIVER_NAME], 0));
2313	
2314				    END;
2315	
2316				END;
2317			    TES;
2318	
2319	!
2320	! SCAN FOR THE NEXT COMMA
2321	!
2322			SEARCH_DONE = 0;
2323	
2324			WHILE (.SEARCH_DONE EQL 0) DO
2325			    BEGIN
2326			    SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
2327	
2328			    IF (.RESULT [RESULT_TYPE] EQL RT_SPECIAL)
2329			    THEN
2330	
2331				IF (.RESULT [RESULT_VALUE] LSS 0)
2332				THEN
2333				    SEARCH_DONE = -1
2334				ELSE
2335	
2336				    IF (.RESULT [RESULT_VALUE] EQL %C',') THEN SEARCH_DONE = 1;
2337	
2338			    END;
2339	
2340			IF (.SEARCH_DONE LSS 0) THEN SCAN_DONE = .SEARCH_DONE;
2341	
2342			VAL_POINTER = .VAL_POINTER + 1;
2343			END;
2344	
2345		    END;
2346	
2347	!
2348	! FINISHED WITH TSK$DF, SKIP TO END OF LINE
2349	!
2350	
2351	    IF (.SCAN_DONE GTR 0)
2352	    THEN
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

2353	
2354		DO
2355		    SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT)
2356		UNTIL ((.RESULT [RESULT_TYPE] EQL RT_SPECIAL) AND (.RESULT [RESULT_VALUE] LSS 0));
2357	
2358	    END;					!OF R_TSK
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

2359	ROUTINE R_PAR (FILE_CHAN, FILE_PTR, SAVE_CHAR, VALUES) : NOVALUE = 	!READ PAR$DF LINE
2360	
2361	!++
2362	! FUNCTIONAL DESCRIPTION:
2363	!
2364	!	READ AND PROCESS THE PAR$DF LINE OF CETAB.MAC
2365	!
2366	! FORMAL PARAMETERS:
2367	!
2368	!	FILE_CHAN - CHANNEL NUMBER ON WHICH TO READ
2369	!	FILE_PTR - FILE BLOCK WITH FILE NAME FILLED IN
2370	!	SAVE_CHAR - ADDRESS OF CHARACTER SAVED FROM LAST CALL TO SCAN
2371	!	VALUES - BLOCK INTO WHICH TO STORE RESULTS
2372	!
2373	! IMPLICIT INPUTS:
2374	!
2375	!	NONE
2376	!
2377	! IMPLICIT OUTPUTS:
2378	!
2379	!	NONE
2380	!
2381	! ROUTINE VALUE:
2382	!
2383	!	NONE
2384	!
2385	! SIDE EFFECTS
2386	!
2387	!	READS THE REMAINDER OF THE LINE FROM CETAB.MAC
2388	!
2389	!--
2390	
2391	    BEGIN
2392	
2393	    BIND
2394		ROUTINE_NAME = UPLIT (%ASCIZ'READ-PAR$DF');
2395	
2396	    MAP
2397		FILE_PTR : REF FILE_BLOCK,
2398		VALUES : REF VNPVAL_BLOCK;
2399	
2400	    LOCAL
2401		RESULT : VECTOR [20],
2402		COMMA_COUNT,
2403		SCAN_DONE;
2404	
2405	!
2406	! WE ONLY WANT THE FUDGE FACTOR FROM THIS LINE; IT WILL FOLLOW
2407	!  THE SECOND COMMA.
2408	!
2409	    COMMA_COUNT = 0;
2410	    SCAN_DONE = 0;
2411	
2412	    DO
2413		BEGIN
2414		SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

2415	
2416		IF (.RESULT [RESULT_TYPE] EQL RT_SPECIAL)
2417		THEN
2418		    BEGIN
2419	
2420		    IF (.RESULT [RESULT_VALUE] EQL %C',')
2421		    THEN
2422			BEGIN
2423			COMMA_COUNT = .COMMA_COUNT + 1;
2424	
2425			IF (.COMMA_COUNT EQL 2)
2426			THEN
2427			    BEGIN
2428			    SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT);
2429	
2430			    IF (.RESULT [RESULT_TYPE] NEQ RT_NUMBER)
2431			    THEN
2432				ERRMSG (0, 24, ROUTINE_NAME,
2433				    FILE_PTR [FILE_NAME], 0, 0, 0)
2434			    ELSE
2435				VALUES [FUDGE] = .RESULT [RESULT_VALUE];
2436	
2437			    SCAN_DONE = 1;
2438			    END
2439	
2440			END
2441		    ELSE
2442	
2443			IF (.RESULT [RESULT_VALUE] LSS 0)
2444			THEN
2445			    BEGIN
2446			    ERRMSG (0, 24, ROUTINE_NAME, FILE_PTR [FILE_NAME], 0, 0, 0);
2447			    SCAN_DONE = -1;
2448			    END;
2449	
2450		    END
2451	
2452		END
2453	    UNTIL (.SCAN_DONE NEQ 0);
2454	
2455	!
2456	! FINISHED WITH PAR$DF, SKIP TO END OF LINE
2457	!
2458	
2459	    IF (.SCAN_DONE GTR 0)
2460	    THEN
2461	
2462		DO
2463		    SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT)
2464		UNTIL ((.RESULT [RESULT_TYPE] EQL RT_SPECIAL) AND (.RESULT [RESULT_VALUE] LSS 0));
2465	
2466	    END;					!OF R_PAR
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

2467	ROUTINE R_END (FILE_CHAN, FILE_PTR, SAVE_CHAR, VALUES) : NOVALUE = 	!READ END$DF LINE
2468	
2469	!++
2470	! FUNCTIONAL DESCRIPTION:
2471	!
2472	!	READ AND PROCESS THE END$DF LINE OF CETAB.MAC
2473	!
2474	! FORMAL PARAMETERS:
2475	!
2476	!	FILE_CHAN - CHANNEL NUMBER ON WHICH TO READ
2477	!	FILE_PTR - FILE BLOCK WITH FILE NAME FILLED IN
2478	!	SAVE_CHAR - ADDRESS OF CHARACTER SAVED FROM LAST CALL TO SCAN
2479	!	VALUES - BLOCK INTO WHICH TO STORE RESULTS
2480	!
2481	! IMPLICIT INPUTS:
2482	!
2483	!	NONE
2484	!
2485	! IMPLICIT OUTPUTS:
2486	!
2487	!	NONE
2488	!
2489	! ROUTINE VALUE:
2490	!
2491	!	NONE
2492	!
2493	! SIDE EFFECTS
2494	!
2495	!	READS THE REMAINDER OF THE LINE FROM CETAB.MAC
2496	!
2497	!--
2498	
2499	    BEGIN
2500	
2501	    BIND
2502		ROUTINE_NAME = UPLIT (%ASCIZ'READ-END$DF');
2503	
2504	    MAP
2505		FILE_PTR : REF FILE_BLOCK,
2506		VALUES : REF VNPVAL_BLOCK;
2507	
2508	    LOCAL
2509		RESULT : VECTOR [20],
2510		VAL_POINTER;
2511	
2512	!
2513	! THERE ARE NO PARAMETERS ON THIS LINE
2514	!
2515	!
2516	! FINISHED WITH END$DF, SKIP TO END OF LINE
2517	!
2518	
2519	    DO
2520		SCAN (.FILE_CHAN, .FILE_PTR, .SAVE_CHAR, RESULT)
2521	    UNTIL ((.RESULT [RESULT_TYPE] EQL RT_SPECIAL) AND (.RESULT [RESULT_VALUE] LSS 0));
2522	
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

2523	    END;					!OF R_END
2524	END
2525	
2526	ELUDOM
2527	! Local Modes:
2528	! Comment Column:36
2529	! Comment Start:!
2530	! Mode:Fundamental
2531	! Auto Save Mode:2
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

BLD_CHAIN	 142	 837	1043	1195	1380	1521	1671
		1855	2244
CCBNM		 672
CCBSZ		 675
CH$WCHAR	2108	2112	2136	2140	2280	2284	2308
		2312
CHAR		 353	 387	 476	 486#	 488	 494#	 496
		 497#	 499	 509	 519	 520#	 522	 525
		 536	 537	 538#	 540	 542	 551	 559
		2075	2104#	2106	2108	2132#	2134	2136
		2231	2276#	2278	2280	2304#	2306	2308
CLASS		  69	 353*	 509	 522	 540	2106	2134
		2278	2306
CLOSE		 139	 340
CNT_BLOCK	1651	1834
CNT_CONT	1695
CNT_CSR		1719
CNT_DDM		1773
CNT_LEN		1666
CNT_NUM_OF_UNTS	1861
CNT_PRIORITY	1731
CNT_PTR		1651	1666#	1671	1695#	1707#	1719#	1731#
		1773#	1777	1834	1845#	1855#	1861#	1959
CNT_TYP		1666
CNT_UNT		1855
CNT_VECTOR	1707
COMMA_COUNT	2402	2409#	2423#	2425
CURRENT_CNT	1777	1845
CURRENT_DDM	1595	1661	1844
CURRENT_SLT	 965	1032
DDM_BLOCK	1506	1652	1835
DDM_CHAIN	1521
DDM_CNT		1671
DDM_LEN		1516
DDM_NAME	1545
DDM_PTR		1506	1516#	1521	1545	1595	1652	1661#
		1671#	1773	1835	1844#	1958
DDM_TYP		1516
DECIMAL_NUM	 478	 532#	 537#	 545
DLC_BLOCK	1365
DLC_CHAIN	1380
DLC_LEN		1375
DLC_NAME	1404
DLC_PTR		1365	1375#	1380	1404
DLC_TYP		1375
DRIVER_NAME	2308	2312
ERRMSG		 145	 248	 276	 292	 321	 663	 705
		 834	 839	 862	 874	 886	 902	 914
		 927	1040	1045	1069	1081	1090	1192
		1197	1222	1242	1254	1266	1275	1377
		1382	1401	1418	1518	1523	1542	1559
		1668	1673	1692	1704	1716	1728	1737
		1852	1857	1877	1889	1901	1913	1922
		2096	2124	2241	2246	2268	2296	2432
		2446
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

ERROR		 144	 490
FILE_BLOCK	 187	 472	 645	 760	 818	1017	1176
		1361	1502	1647	1829	2010	2067	2223
		2397	2505
FILE_CHAN	 150	 198	 221	 227	 237	 251	 260
		 266	 326	 340	 433	 494	 497	 520
		 538	 607	 659	 701	 718	 722	 775
		 779	 848	 939	 974	 978	1055	1102
		1133	1137	1208	1287	1318	1322	1391
		1430	1459	1463	1532	1571	1604	1608
		1682	1749	1786	1790	1867	1934	1968
		1972	2025	2029	2092	2104	2120	2132
		2154	2181	2185	2264	2276	2292	2304
		2326	2355	2359	2414	2428	2463	2467
		2520
FILE_NAME	 198	 248	 276	 292	 321	 663	 705
		 863	 875	 887	 903	 915	 927	1070
		1082	1090	1223	1243	1255	1267	1275
		1402	1418	1543	1559	1693	1705	1717
		1729	1737	1878	1890	1902	1914	1922
		2097	2125	2269	2297	2433	2446
FILE_PTR	 150	 187	 198	 221	 227	 237	 248
		 251	 260	 266	 276	 292	 321	 326
		 433	 472	 607	 645	 659	 663	 701
		 705	 718	 722	 760	 775	 779	 818
		 848	 863	 875	 887	 903	 915	 927
		 939	 974	 978	1017	1055	1070	1082
		1090	1102	1133	1137	1176	1208	1223
		1243	1255	1267	1275	1287	1318	1322
		1361	1391	1402	1418	1430	1459	1463
		1502	1532	1543	1559	1571	1604	1608
		1647	1682	1693	1705	1717	1729	1737
		1749	1786	1790	1829	1867	1878	1890
		1902	1914	1922	1934	1968	1972	2010
		2025	2029	2067	2092	2097	2120	2125
		2154	2181	2185	2223	2264	2269	2292
		2297	2326	2355	2359	2397	2414	2428
		2433	2446	2463	2467	2505	2520
FUDGE		2435
GETBLK		 143	 832	1038	1190	1375	1516	1666
		1850	2239
INPUT		 140	 494	 497	 520	 538	2104	2132
		2276	2304
LEN_PASWRD	2102	2130
LEN_TSK_NAME	2274	2302
LLC_BLOCK	1180
LLC_CHAIN	 212	1195
LLC_DEV		1269
LLC_LEN		1190
LLC_LLKNUM	1204	1257
LLC_NAME	1225
LLC_PLKNUM	1203	1245
LLC_PTR		1180	1190#	1195	1203#	1204#	1225	1245#
		1257#	1269
LLC_TYP		1190
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

LOOK_DONE	 191	 217#	 219	 233#	 242#	 246	 256#
		 258	 277#	 293#	 322#	 328#
NAME		 192	 284#	 300
OCTAL_NUM	 479	 531#	 536#	 550
OPEN		 138*	 198
OUTNUM		 147	 578	 588	 595
OUTPUT		 141	 597
OUTSTR		 148	 206	 346	 577	 579	 585
PCRLF		 146	 205	 345	 576
RCET		  68	 150*
RCV_PASWRD	2108	2112
RDBNM		 678
RDBSZ		 681
RDBTH		 690
RESULT		 193	 221	 223	 227	 228	 230	 231
		 237	 238	 240	 260	 262	 266	 267
		 273	 284	 285	 286	 288	 433	 473
		 502#	 503#	 514#	 515	 530#	 545#	 550#
		 558#	 559#	 565#	 566#	 578	 581	 585
		 588	 593	 595	 597	 649	 659	 661
		 672	 675	 678	 681	 684	 687	 690
		 693	 701	 703	 718	 719	 764	 775
		 776	 823	 848	 850	 860	 865	 872
		 877	 884	 889	 900	 905	 912	 917
		 939	 941	 944	 949	 974	 975	1023
		1055	1057	1067	1072	1079	1084	1102
		1104	1107	1112	1133	1134	1181	1208
		1210	1220	1225	1240	1245	1252	1257
		1264	1269	1287	1289	1292	1297	1318
		1319	1366	1391	1399	1404	1430	1432
		1435	1440	1459	1460	1507	1532	1540
		1545	1571	1573	1576	1581	1604	1605
		1653	1682	1690	1695	1702	1707	1714
		1719	1726	1731	1749	1751	1754	1759
		1786	1787	1836	1867	1875	1880	1887
		1892	1899	1904	1911	1916	1934	1936
		1939	1944	1968	1969	2014	2025	2026
		2073	2092	2094	2120	2122	2154	2156
		2159	2164	2181	2182	2229	2264	2266
		2292	2294	2326	2328	2331	2336	2355
		2356	2401	2414	2416	2420	2428	2430
		2435	2443	2463	2464	2509	2520	2521
RESULT_TYPE	 116#	 223	 228	 230	 238	 240	 262
		 267	 273	 502	 514	 530	 558	 565
		 578	 581	 661	 703	 719	 776	 850
		 860	 872	 884	 900	 912	 941	 975
		1057	1067	1079	1104	1134	1210	1220
		1240	1252	1264	1289	1319	1399	1432
		1460	1540	1573	1605	1690	1702	1714
		1726	1751	1787	1875	1887	1899	1911
		1936	1969	2026	2094	2122	2156	2182
		2266	2294	2328	2356	2416	2430	2464
		2521
RESULT_VALUE	 117#	 223	 228	 231	 238	 240	 262
		 267	 284	 285	 286	 288	 503	 515
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

		 545	 550	 559	 566	 585	 588	 593
		 595	 597	 672	 675	 678	 681	 684
		 687	 690	 693	 703	 719	 776	 850
		 865	 877	 889	 905	 917	 944	 949
		 975	1057	1072	1084	1107	1112	1134
		1210	1225	1245	1257	1269	1292	1297
		1319	1404	1435	1440	1460	1545	1576
		1581	1605	1695	1707	1719	1731	1754
		1759	1787	1880	1892	1904	1916	1939
		1944	1969	2026	2159	2164	2182	2331
		2336	2356	2420	2435	2443	2464	2521
ROUTINE_NAME	 184#	 248	 276	 292	 321	 385#	 469#
		 642#	 663	 705	 757#	 815#	 834	 840
		 862	 874	 886	 902	 914	 927	1014#
		1040	1046	1069	1081	1090	1173#	1192
		1198	1222	1242	1254	1266	1275	1358#
		1377	1383	1401	1418	1499#	1518	1524
		1542	1559	1644#	1668	1674	1692	1704
		1716	1728	1737	1826#	1852	1858	1877
		1889	1901	1913	1922	2007#	2064#	2096
		2124	2220#	2241	2247	2268	2296	2394#
		2432	2446	2502#
RTXT		   4#
RT_NAME		 124#	 230	 273	 860	 872	 884	1079
		1220	1264	1399	1540
RT_NUMBER	 125#	 661	 900	 912	1067	1240	1252
		1690	1702	1714	1726	1875	1887	1899
		1911	2430
RT_SPECIAL	 126#	 223	 228	 238	 240	 262	 267
		 703	 719	 776	 850	 941	 975	1057
		1104	1134	1210	1289	1319	1432	1460
		1573	1605	1751	1787	1936	1969	2026
		2094	2106	2122	2134	2156	2182	2266
		2278	2294	2306	2328	2356	2416	2464
		2521
R_BUF		  71	 251	 607*
R_CNT		  78	 302	1608*
R_DDM		  77	 309	1463*
R_DLC		  76	 308	1322*
R_END		  84#	 314	 328	2467*
R_LLC		  75	 307	1137*
R_NOD		  80	 310	1972*
R_PAR		  83	 313	2359*
R_PDV		  72	 304	 722*
R_PSW		  81	 311	2029*
R_SLT		  73	 305	 779*
R_STA		  74	 306	 978*
R_TSK		  82	 312	2185*
R_UNT		  79	 303	1790*
SAVE_CHAR	 194	 216#	 221	 227	 237	 251	 260
		 266	 326	 433	 486	 504#	 525#	 546#
		 551#	 560#	 567#	 607	 659	 701	 718
		 722	 775	 779	 848	 939	 974	 978
		1055	1102	1133	1137	1208	1287	1318
		1322	1391	1430	1459	1463	1532	1571
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

		1604	1608	1682	1749	1786	1790	1867
		1934	1968	1972	2025	2029	2092	2120
		2154	2181	2185	2264	2292	2326	2355
		2359	2414	2428	2463	2467	2520
SCAN		  70	 221	 227	 237	 260	 266	 433*
		 659	 701	 718	 775	 848	 939	 974
		1055	1102	1133	1208	1287	1318	1391
		1430	1459	1532	1571	1604	1682	1749
		1786	1867	1934	1968	2025	2092	2120
		2154	2181	2264	2292	2326	2355	2414
		2428	2463	2520
SCAN_DONE	 477	 825	 844#	 846	 928#	 953#	 970
		1025	1050#	1053	1091#	1116#	1129	1183
		1202#	1206	1276#	1301#	1314	1368	1387#
		1389	1419#	1444#	1455	1509	1528#	1530
		1560#	1585#	1600	1655	1678#	1680	1738#
		1763#	1782	1838	1863#	1865	1923#	1948#
		1964	2071	2082#	2084	2168#	2177	2227
		2254#	2256	2340#	2351	2403	2410#	2437#
		2447#	2453	2459
SCAN_POINTER	 480	 515#	 519	 524
SDBNM		 684
SDBSZ		 687
SEARCH_DONE	 826	 935#	 937	 946#	 949#	 953	1026
		1098#	1100	1109#	1112#	1116	1184	1283#
		1285	1294#	1297#	1301	1369	1426#	1428
		1437#	1440#	1444	1510	1567#	1569	1578#
		1581#	1585	1656	1745#	1747	1756#	1759#
		1763	1839	1930#	1932	1941#	1944#	1948
		2072	2150#	2152	2161#	2164#	2168	2228
		2322#	2324	2333#	2336#	2340
SLT_BLOCK	 822	1022
SLT_CHAIN	 837
SLT_CONT	 905
SLT_DDM		 865
SLT_DLC		 877
SLT_LEN		 832
SLT_LLC		 889
SLT_NUM_OF_STA	1051
SLT_PTR		 822	 832#	 837	 865	 877	 889	 905#
		 917#	 965	1022	1032#	1043#	1051#
SLT_STA		1043
SLT_TYP		 832
SLT_UNIT	 917
STA_BLOCK	1021
STA_LEN		1038
STA_LLC		1084
STA_NUM		1072
STA_PTR		1021	1038#	1043	1072#	1084
STA_TYP		1038
STR_PTR		2076	2100#	2102	2108	2109#	2112	2128#
		2130	2136	2137#	2140	2232	2272#	2274
		2280	2281#	2284	2300#	2302	2308	2309#
		2312
SUBR		 195	 300#	 318	 326	 328
		DSK:RTXT.XRF[4,31]               31-Aug-79 15:00

TSKB_PTR	2233	2239#	2244	2280	2284	2308	2312
TSK_CHAIN	2244
TSK_NAME	2280	2284
UNT_BLOCK	1833
UNT_CNT		1959
UNT_DDM		1958
UNT_LEN		1850
UNT_PARM	1904
UNT_PARMSK	1892
UNT_PTR		1833	1850#	1855	1880#	1892#	1904#	1916#
		1958#	1959#
UNT_SECCSR	1916
UNT_TYP		1850
UNT_UNIT	1880
VALUES		 150	 188	 212#	 251	 326	 607	 646
		 672#	 675#	 678#	 681#	 684#	 687#	 690#
		 693#	 722	 761	 779	 819	 837#	 965#
		 978	1018	1032	1137	1177	1195#	1322
		1362	1380#	1463	1503	1521#	1595#	1608
		1648	1661	1777#	1790	1830	1844	1845
		1972	2011	2029	2068	2108	2112	2136
		2140	2185	2224	2244#	2359	2398	2435#
		2467	2506
VAL_POINTER	 196	 650	 655#	 657	 668	 696#	 698
		 765	 824	 843#	 854	 957#	1024	1049#
		1061	1120#	1182	1201#	1214	1305#	1367
		1386#	1393	1446#	1508	1527#	1534	1587#
		1654	1677#	1684	1765#	1837	1862#	1869
		1950#	2015	2074	2081#	2087	2170#	2230
		2253#	2259	2342#	2510
VNPTSK_BLOCK	2233
VNPTSK_LEN	2239
VNPTSK_TYP	2239
VNPVAL_BLOCK	 188	 646	 761	 819	1018	1177	1362
		1503	1648	1830	2011	2068	2224	2398
		2506
XMTBF		 693
XMT_PASWRD	2136	2140