Google
 

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

   1	!<SAUTER.TKB20>PCOR2.BLI.67, 12-Mar-79 07:47:20, Edit by SROBINSON
   2	!<SAUTER.TKB20>PCOR2.BLI.61,  5-Feb-79 09:59:32, Edit by SROBINSON
   3	!<SAUTER.TKB20>PCOR2.BLI.60, 30-Jan-79 13:12:50, Edit by SROBINSON
   4	!<SAUTER.TKB20>PCOR2.BLI.49, 17-Jan-79 17:35:15, Edit by SROBINSON
   5	!<SAUTER.TKB20>PCOR2.BLI.44, 17-Jan-79 15:35:07, Edit by SROBINSON
   6	!<SAUTER.TKB20>PCOR2.BLI.32, 17-Jan-79 11:22:10, Edit by SROBINSON
   7	!<SAUTER.TKB20>PCOR2.BLI.29,  3-Jan-79 06:35:25, Edit by SROBINSON
   8	!<SAUTER.TKB20>PCOR2.BLI.27,  2-Jan-79 09:47:47, Edit by SROBINSON
   9	!<SAUTER.TKB20>PCOR2.BLI.26,  2-Jan-79 06:44:31, Edit by SROBINSON
  10	!<SAUTER.TKB20>PCOR2.BLI.20, 16-Dec-78 13:03:23, Edit by SROBINSON
  11	!<SAUTER.TKB20>PCOR2.BLI.19, 16-Dec-78 09:32:59, Edit by SROBINSON
  12	!<SAUTER.TKB20>PCOR2.BLI.17, 28-Nov-78 07:58:13, Edit by SROBINSON
  13	!<SAUTER.TKB20>PCOR2.BLI.14, 24-Nov-78 11:15:00, Edit by SROBINSON
  14	!<SAUTER.TKB20>PCOR2.BLI.9, 15-Nov-78 09:51:17, Edit by SROBINSON
  15	!<SAUTER.TKB20>PCOR2.BLI.3,  9-Oct-78 11:09:16, Edit by SROBINSON
  16	!<SAUTER.VNP20>PCOR2.BLI.2, 23-Sep-78 08:48:18, Edit by SROBINSON
  17	!<SROBINSON>PCOR2.BLI.2, 23-Sep-78 08:38:02, Edit by SROBINSON
  18	MODULE PCOR2 (					!PROCESS CORE IMAGE
  19			IDENT = 'X0.2-4'
  20			) =
  21	BEGIN
  22	!
  23	!
  24	!
  25	! COPYRIGHT (C) 1978, 1979 BY
  26	! DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
  27	!
  28	!
  29	! THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
  30	! ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH LICENSE AND WITH THE
  31	! INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR ANY  OTHER
  32	! COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
  33	! OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF THE  SOFTWARE  IS  HEREBY
  34	! TRANSFERRED.
  35	!
  36	!
  37	! THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT  NOTICE
  38	! AND  SHOULD  NOT  BE  CONSTRUED  AS A COMMITMENT BY DIGITAL EQUIPMENT
  39	! CORPORATION.
  40	!
  41	! DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY  OF  ITS
  42	! SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
  43	!
  44	
  45	!++
  46	! FACILITY: VNP-20
  47	!
  48	! ABSTRACT:
  49	!
  50	!
  51	! THIS MODULE PROCESSES CORE IMAGES (KERNEL AND TASK) FOR VNP20
  52	!
  53	!
  54	! ENVIRONMENT: TOPS-20 USER MODE
  55	!
  56	! AUTHOR: J. SAUTER, CREATION DATE: 30-MAY-78
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

  57	!
  58	! MODIFIED BY:
  59	!
  60	!	Scott G. Robinson, 16-SEP-78 : VERSION X0.1-2A
  61	!	- Finish Development of D_DCP
  62	!	- Finish Development of D_DUP
  63	!	- Develop support for NSP, DLX, AUX LLCs
  64	!	- Correct minor bugs in various routines
  65	!
  66	!	Scott G. Robinson, 23-SEP-78 : VERSION X0.1-3A
  67	!	- Split PCOR into 3 modules (PCOR0, PCOR1, PCOR2)
  68	!	- Add support for password data base manipulation
  69	!
  70	!	Scott G. Robinson, 15-NOV-78 : VERSION X0.2
  71	!	- Fix ENA_LINES to use the LLC reverse mapping table
  72	!	   so that multipoint lines work correctly
  73	!	- Change method of getting storage from POOL.. partition
  74	!
  75	!	Scott G. Robinson, 28-NOV-78 : VERSION X0.2-1, X0.2-2, X0.2-3, X0.2-4
  76	!	- Add new routine to process .BIN directives (GET_BIN)
  77	!	- Add routine FIX_LLC to hack around a MACY11 problem with
  78	!	   complex relocatable expressions
  79	!	- Fix ENA_LINES to current thoughts on enabling NSP and
  80	!	   NRM lines
  81	!	- Fix ENA_LINES to handle CR and LP NRM entries
  82	!	- Fix bug in TELLP which didn't tell device driver name correctly
  83	!
  84	!	, : VERSION
  85	! 01	-
  86	!--
  87	
  88	!<BLF/PAGE>
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

  89	!
  90	! TABLE OF CONTENTS:
  91	!
  92	
  93	FORWARD ROUTINE
  94	    RDLIBR,					!READ A LIBRARY FILE
  95	    SEL_LIBR,					!SELECT A LIBRARY BLOCK
  96	    GET_LIBR,					!PROCESS A LIBR DIRECTIVE
  97	    GET_BIN,					!PROCESS A BIN DIRECTIVE
  98	    SET_PASWRDS : NOVALUE,			!SETUP THE PASSWORD DATA BASE
  99	    ENA_LINES : NOVALUE,			!ENABLE LINES AND BUILD PLD
 100	    FIX_LLC : NOVALUE,				!FIX REVERSE MAPPING TABLE
 101	    MOUACP : NOVALUE,				!"MOUNT" THE ACP
 102	    FCLEAN : NOVALUE,				!DO FINAL CLEANUP OF THE KERNEL
 103	    TELLK : NOVALUE,				!TELL ABOUT THE CORE IMAGE
 104	    TELLP : NOVALUE;				!TELL ABOUT A PARTITION
 105	
 106	!
 107	! INCLUDE FILES:
 108	!
 109	
 110	LIBRARY 'VNP-LIB.L36';
 111	
 112	!REQUIRE 'BLOCKH.REQ';				!PREPARE TO DEFINE STORAGE BLOCKS
 113	!REQUIRE 'FILE.REQ';				!DEFINE FILE BLOCK
 114	!REQUIRE 'VNPVAL.REQ';				!VALUE BLOCK FOR VNP20
 115	!REQUIRE 'LIBR.REQ';				!DEFINE LIBRARY BLOCK
 116	!REQUIRE 'BLOCKT.REQ';				!END OF DEFINING STORAGE BLOCKS
 117	!REQUIRE 'TSKDEF.REQ';				!DEFINE TASK OFFSETS
 118	!
 119	! MACROS:
 120	!
 121	!	NONE
 122	!
 123	! EQUATED SYMBOLS:
 124	!
 125	
 126	LITERAL
 127	    DEBUG = 0;
 128	
 129	!
 130	! OWN STORAGE:
 131	!
 132	!	NONE
 133	!
 134	! EXTERNAL REFERENCES:
 135	!
 136	
 137	EXTERNAL ROUTINE
 138	    ATOR50 : NOVALUE,				!CONVERT ASCII TO RADIX50_11
 139	    R50TOA : NOVALUE,				!CONVERT RADIX50_11 TO ASCII
 140	    OUTPUT : NOVALUE,				!WRITE ON A FILE
 141	    RSTB : NOVALUE,				!READ SYMBOL TABLE
 142	    RCOR : NOVALUE,				!READ CORE IMAGE
 143	    FCOR : NOVALUE,				!FREE CORE IMAGE
 144	    FRESTG : NOVALUE,				!FREE SOME MEMORY
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

 145	    PCRLF : NOVALUE,				!PRINT CR THEN LF
 146	    OUTSTR : NOVALUE,				!PRINT A STRING
 147	    OUTNUM : NOVALUE,				!PRINT A NUMBER
 148	    ERROR : NOVALUE,				!SIGNAL PROGRAMMING ERROR
 149	    ERRMSG : NOVALUE,				!ERROR MESSAGE
 150	    GETBLK,					!GET A BLOCK OF STORAGE
 151	    BLD_CHAIN,					!ADD AN ITEM TO A CHAIN
 152	    FND_CHAIN,					!"FIND" AN ITEM IN A CHAIN
 153	    GETBYT,					!GET A PDP-11 BYTE
 154	    GETWRD,					!GET A PDP-11 WORD
 155	    PUTBYT : NOVALUE,				!PUT A PDP-11 BYTE
 156	    PUTWRD : NOVALUE,				!PUT A PDP-11 WORD
 157	    ALOCB,					!ALLOCATE SOME PDP-11 STORAGE
 158	    ALOC_POOL;					!ALLOCATE STORAGE FROM POOL..
 159	
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

 160	ROUTINE RDLIBR (KERNEL_FILE, FILE_CHAN, LIB_NAME, VALUES) = 	!READ A LIBRARY FILE
 161	
 162	!++
 163	! FUNCTIONAL DESCRIPTION:
 164	!
 165	!	READ IN A LIBRARY FILE, PUTTING IT IN THE POOL SPACE.
 166	!	 THIS IS USED FOR SATISFYING REQUESTS IN .DAT FILES.
 167	!
 168	! FORMAL PARAMETERS:
 169	!
 170	!	KERNEL_FILE - POINTER TO THE FILE WHICH HOLDS THE KERNEL
 171	!	FILE_CHAN - CHANNEL ON WHICH TO READ THE LIBRARY
 172	!	LIB_NAME - NAME OF THE LIBRARY, IN ASCII, 7 CHARACTERS
 173	!	VALUES - BLOCK OF LOTS OF GOOD THINGS FOR VNP20
 174	!
 175	! IMPLICIT INPUTS:
 176	!
 177	!	NONE
 178	!
 179	! IMPLICIT OUTPUTS:
 180	!
 181	!	CHAINS A LIBRARY POINTER ONTO THE LIST OF LIBARIES
 182	!
 183	! ROUTINE VALUE:
 184	!
 185	!	THE LIBRARY BLOCK CREATED, OR 0 IF ERROR.
 186	!
 187	! SIDE EFFECTS
 188	!
 189	!	ALLOCATES SPACE FROM THE NETWORK POOL
 190	!
 191	!--
 192	
 193	    BEGIN
 194	
 195	    BIND
 196		ROUTINE_NAME = UPLIT (%ASCIZ'RDLIBR');
 197	
 198	    MAP
 199		KERNEL_FILE : REF FILE_BLOCK,
 200		VALUES : REF VNPVAL_BLOCK;
 201	
 202	    LOCAL
 203		LIBR_PTR : REF LIBR_BLOCK,
 204		FILE_PTR : REF FILE_BLOCK,
 205		LABEL_PTR : REF VECTOR [1024],
 206		LIBRARY_LENGTH,
 207		LIBRARY_BASE;
 208	
 209	!
 210	! BUILD A FILE POINTER
 211	!
 212	    FILE_PTR = GETBLK (FILE_TYP, FILE_LEN);
 213	    CH$COPY (LEN_LIBR_NAME, CH$PTR (.LIB_NAME), 0, LEN_FILE_STRING, CH$PTR (FILE_PTR [FILE_NAME]));
 214	!
 215	! READ IN THE LIBRARY'S CORE IMAGE AND SYMBOL TABLE
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

 216	!
 217	    RSTB (.FILE_CHAN, .FILE_PTR);
 218	    RCOR (.FILE_PTR, .FILE_CHAN, 4*2048);
 219	!
 220	! COMPUTE THE LENGTH OF THE LIBRARY
 221	!
 222	    LABEL_PTR = .FILE_PTR [FILE_LABEL];
 223	    LIBRARY_BASE = .LABEL_PTR [L$BSA] + (.LABEL_PTR [L$BSA + 1]*256);
 224	    LIBRARY_LENGTH = (.LABEL_PTR [L$BHGV] + (.LABEL_PTR [L$BHGV + 1]*256)) - .LIBRARY_BASE + 1;
 225	!
 226	! BUILD A LIBRARY BLOCK
 227	!
 228	    LIBR_PTR = GETBLK (LIBR_TYP, LIBR_LEN);
 229	    LIBR_PTR [LIBR_FILE] = 0;			!WE DON'T NEED THE FILE AFTER COPYING
 230	    CH$MOVE (LEN_LIBR_NAME, CH$PTR (.LIB_NAME), CH$PTR (LIBR_PTR [LIBR_NAME]));
 231	    LIBR_PTR [LIBR_BASE] = .LIBRARY_BASE;
 232	!
 233	! ALLOCATE POOL SPACE TO HOLD THE LIBRARY
 234	!
 235	    LIBR_PTR [LIBR_ADDR] = ALOC_POOL (.LIB_NAME, .LIBRARY_LENGTH, 1, .VALUES);
 236	!
 237	! COPY THE LIBRARY INTO THE ALLOCATED POOL SPACE
 238	!
 239	
 240	    INCR COUNTER FROM 0 TO .LIBRARY_LENGTH - 1 DO
 241		PUTBYT (.KERNEL_FILE, .LIBR_PTR [LIBR_ADDR] + .COUNTER, GETBYT (.FILE_PTR, .LIBRARY_BASE + .COUNTER));
 242	
 243	!
 244	! FREE THE FILE ETC.
 245	!
 246	    FCOR (.FILE_PTR);
 247	    .LIBR_PTR
 248	    END;					!OF RDLIBR
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

 249	ROUTINE SEL_LIBR (LIBR_PTR, ASCVAL) = 		!SELECT A LIBRARY BLOCK
 250	
 251	!++
 252	! FUNCTIONAL DESCRIPTION:
 253	!
 254	!	SELECT THE LIBRARY BLOCK WHOSE NAME IS PROVIDED
 255	!
 256	! FORMAL PARAMETERS:
 257	!
 258	!	LIBR_PTR - POINTER TO THE LIBRARY BLOCK TO BE TESTED
 259	!	ASCVAL - NAME TO BE TESTED FOR
 260	!
 261	! IMPLICIT INPUTS:
 262	!
 263	!	NONE
 264	!
 265	! IMPLICIT OUTPUTS:
 266	!
 267	!	NONE
 268	!
 269	! ROUTINE VALUE:
 270	!
 271	!	0 = NOT SUITABLE, OTHERWISE A POINTER TO THE LIBR BLOCK
 272	!
 273	! SIDE EFFECTS
 274	!
 275	!	NONE
 276	!
 277	!--
 278	
 279	    BEGIN
 280	
 281	    BIND
 282		ROUTINE_NAME = UPLIT (%ASCIZ'SEL_LIBR');
 283	
 284	    MAP
 285		LIBR_PTR : REF LIBR_BLOCK,
 286		ASCVAL : REF VECTOR [CH$ALLOCATION (LEN_LIBR_NAME)];
 287	
 288	    IF (CH$EQL (LEN_LIBR_NAME, CH$PTR (LIBR_PTR [LIBR_NAME]), LEN_LIBR_NAME, CH$PTR (.ASCVAL)))
 289	    THEN
 290		.LIBR_PTR
 291	    ELSE
 292		0
 293	
 294	    END;					!OF SEL_LIBR
 295	
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

 296	GLOBAL ROUTINE GET_LIBR (KERNEL_FILE, FILE_CHAN, LIB_NAME, VALUES) = 	!GET A NAMED LIBRARY BLOCK
 297	
 298	!++
 299	! FUNCTIONAL DESCRIPTION:
 300	!
 301	!	GET THE LIBRARY BLOCK WHOSE NAME IS PROVIDED, OR CREATE
 302	!	 IT IF NECESSARY.
 303	!
 304	! FORMAL PARAMETERS:
 305	!
 306	!	KERNEL_FILE - POINTER TO THE FILE WHICH HOLDS THE KERNEL
 307	!	FILE_CHAN - CHANNEL ON WHICH TO READ THE LIBRARY, IF NEEDED.
 308	!	LIB_NAME - NAME OF THE LIBRARY, IN ASCII, 7 CHARACTERS
 309	!	VALUES - BLOCK OF LOTS OF GOOD THINGS FOR VNP20
 310	!
 311	! IMPLICIT INPUTS:
 312	!
 313	!	NONE
 314	!
 315	! IMPLICIT OUTPUTS:
 316	!
 317	!	NONE
 318	!
 319	! ROUTINE VALUE:
 320	!
 321	!	POINTER TO THE LIBRARY BLOCK
 322	!
 323	! SIDE EFFECTS
 324	!
 325	!	MAY READ FROM THE LIBRARY FILE
 326	!
 327	!--
 328	
 329	    BEGIN
 330	
 331	    BIND
 332		ROUTINE_NAME = UPLIT (%ASCIZ'GET_LIBR');
 333	
 334	    MAP
 335		KERNEL_FILE : REF FILE_BLOCK,
 336		VALUES : REF VNPVAL_BLOCK;
 337	
 338	    LOCAL
 339		LIBR_PTR : REF LIBR_BLOCK;
 340	
 341	    IF ((LIBR_PTR = FND_CHAIN (.VALUES [LIBR_CHAIN], SEL_LIBR, .LIB_NAME)) EQL 0)
 342	    THEN
 343		BEGIN
 344		LIBR_PTR = RDLIBR (.KERNEL_FILE, .FILE_CHAN, .LIB_NAME, .VALUES);
 345	
 346		IF ((VALUES [LIBR_CHAIN] = BLD_CHAIN (.VALUES, .VALUES [LIBR_CHAIN], .LIBR_PTR)) EQL 0)
 347		THEN
 348		    ERRMSG (0, 1, ROUTINE_NAME, 0, 0, 0, 0);
 349	
 350		END;
 351	
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

 352	    .LIBR_PTR
 353	    END;					!OF GET_LIBR
 354	
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

 355	GLOBAL ROUTINE GET_BIN (KERNEL_FILE, FILE_CHAN, BIN_NAME, VALUES) = 	!PROCESS A BIN DIRECTIVE
 356	
 357	!++
 358	! FUNCTIONAL DESCRIPTION:
 359	!
 360	!	GET A FILE DESCRIBED BY BIN_NAME AND INSERT IT INTO POOL..
 361	!
 362	! FORMAL PARAMETERS:
 363	!
 364	!	KERNEL_FILE - POINTER TO THE FILE WHICH HOLDS THE KERNEL
 365	!	FILE_CHAN - CHANNEL ON WHICH TO READ THE LIBRARY, IF NEEDED.
 366	!	BIN_NAME - NAME OF THE BIN FILE, IN ASCII, 7 CHARACTERS
 367	!	VALUES - BLOCK OF LOTS OF GOOD THINGS FOR VNP20
 368	!
 369	! IMPLICIT INPUTS:
 370	!
 371	!	NONE
 372	!
 373	! IMPLICIT OUTPUTS:
 374	!
 375	!	NONE
 376	!
 377	! ROUTINE VALUE:
 378	!
 379	!	POINTER TO THE LIBRARY BLOCK
 380	!
 381	! SIDE EFFECTS
 382	!
 383	!	NONE
 384	!
 385	!--
 386	
 387	    BEGIN
 388	
 389	    BIND
 390		ROUTINE_NAME = UPLIT (%ASCIZ'GET_BIN');
 391	
 392	    MAP
 393		KERNEL_FILE : REF FILE_BLOCK,
 394		VALUES : REF VNPVAL_BLOCK;
 395	
 396	    RDLIBR (.KERNEL_FILE, .FILE_CHAN, .BIN_NAME, .VALUES)
 397	    END;					!OF GET_BIN
 398	
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

 399	GLOBAL ROUTINE SET_PASWRDS (KERNEL_FILE, PD_NSP, VALUES) : NOVALUE = 	!SET PASSWORDS INTO THE NSP DATA BASE
 400	
 401	!++
 402	! FUNCTIONAL DESCRIPTION:
 403	!
 404	!	INSTALL THE PASSWORDS INTO THE PASSWORD DATA BASE IF ANY EXIST
 405	!
 406	! FORMAL PARAMETERS:
 407	!
 408	!	KERNEL_FILE - POINTER TO THE FILE BLOCK WHICH DESCRIBES
 409	!	 THE RSX11S KERNEL
 410	!	PD_NSP - THE $PDVTB OFFSET FOR NSP
 411	!	VALUES - THE VALUES BLOCK, WHICH CONTAINS A LOT OF THINGS
 412	!	 FOR VNP20
 413	!
 414	! IMPLICIT INPUTS:
 415	!
 416	!	NONE
 417	!
 418	! IMPLICIT OUTPUTS:
 419	!
 420	!	NONE
 421	!
 422	! ROUTINE VALUE:
 423	!
 424	!	NONE
 425	!
 426	! SIDE EFFECTS
 427	!
 428	!	MODIFIES THE KERNEL'S DATA BASE
 429	!
 430	!--
 431	
 432	    BEGIN
 433	
 434	    BIND
 435		ROUTINE_NAME = UPLIT (%ASCIZ'SET_PASWRDS');
 436	
 437	    MAP
 438		KERNEL_FILE : REF FILE_BLOCK,
 439		VALUES : REF VNPVAL_BLOCK;
 440	
 441	    LOCAL
 442		LOC,
 443		PSW_POINTER,
 444		NSP_PDV,
 445		STR_PTR,
 446		CHAR;
 447	
 448	!
 449	! GET WHERE PASSWORD DATA BASE IS
 450	!
 451	    NSP_PDV = GETWRD (.KERNEL_FILE, GETWRD (.KERNEL_FILE, .VALUES [PDVTA]) + .PD_NSP);
 452	    PSW_POINTER = GETWRD (.KERNEL_FILE,
 453		GETWRD (.KERNEL_FILE, .NSP_PDV + .VALUES [Z_DAT]) + .VALUES [PSW_OFFSET]);
 454	!
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

 455	! INSTALL THE RECEIVE PASSWORD
 456	!
 457	
 458	    IF ((CHAR = CH$RCHAR (CH$PTR (VALUES [RCV_PASWRD], 0))) NEQ 0)
 459	    THEN
 460		BEGIN
 461		STR_PTR = 0;
 462	
 463		DO
 464		    BEGIN
 465		    PUTBYT (.KERNEL_FILE, .PSW_POINTER + .VALUES [PSW_RCV_OFFSET] + .STR_PTR, .CHAR);
 466		    STR_PTR = .STR_PTR + 1;
 467		    CHAR = CH$RCHAR (CH$PTR (VALUES [RCV_PASWRD], .STR_PTR));
 468		    END
 469		UNTIL ((.CHAR EQL 0) OR (.STR_PTR EQL 8));
 470	
 471		PUTWRD (.KERNEL_FILE, .PSW_POINTER + .VALUES [PSW_FLG_OFFSET],
 472		    GETWRD (.KERNEL_FILE,
 473			.PSW_POINTER + .VALUES [PSW_FLG_OFFSET]) OR .VALUES [PSW_RCV_FLAG]);
 474		END;
 475	
 476	!
 477	! INSTALL THE TRANSMIT PASSWORD IF ANY
 478	!
 479	
 480	    IF ((CHAR = CH$RCHAR (CH$PTR (VALUES [XMT_PASWRD], 0))) NEQ 0)
 481	    THEN
 482		BEGIN
 483		STR_PTR = 0;
 484	
 485		DO
 486		    BEGIN
 487		    PUTBYT (.KERNEL_FILE, .PSW_POINTER + .VALUES [PSW_XMT_OFFSET] + .STR_PTR, .CHAR);
 488		    STR_PTR = .STR_PTR + 1;
 489		    CHAR = CH$RCHAR (CH$PTR (VALUES [XMT_PASWRD], .STR_PTR));
 490		    END
 491		UNTIL ((.CHAR EQL 0) OR (.STR_PTR EQL 8));
 492	
 493		PUTWRD (.KERNEL_FILE, .PSW_POINTER + .VALUES [PSW_FLG_OFFSET],
 494		    GETWRD (.KERNEL_FILE,
 495			.PSW_POINTER + .VALUES [PSW_FLG_OFFSET]) OR .VALUES [PSW_XMT_FLAG]);
 496		END;
 497	
 498	!
 499	    END;					!OF SET_PASWRDS
 500	
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

 501	GLOBAL ROUTINE ENA_LINES (KERNEL_FILE, PD_NSP, PD_NRM, VALUES) : NOVALUE =
 502							!ENABLE ALL LOADED LINES AND SETUP PHYSICAL LINK DATA BASE
 503	
 504	!++
 505	! FUNCTIONAL DESCRIPTION:
 506	!
 507	!	LOOK THROUGH THE SLT AND SETUP THE PLD REFLECTING ENABLED LINES
 508	!
 509	! FORMAL PARAMETERS:
 510	!
 511	!	KERNEL_FILE - POINTER TO THE FILE BLOCK WHICH DESCRIBES
 512	!	 THE RSX11S KERNEL
 513	!	PD_NSP - THE PDVTB OFFSET FOR NSP
 514	!	PD_NRM - THE PDVTB OFFSET FOR NRM
 515	!	VALUES - THE VALUES BLOCK, WHICH CONTAINS A LOT OF THINGS
 516	!	 FOR VNP20
 517	!
 518	! IMPLICIT INPUTS:
 519	!
 520	!	NONE
 521	!
 522	! IMPLICIT OUTPUTS:
 523	!
 524	!	NONE
 525	!
 526	! ROUTINE VALUE:
 527	!
 528	!	NONE
 529	!
 530	! SIDE EFFECTS
 531	!
 532	!	MODIFIES THE KERNEL'S DATA BASE
 533	!
 534	!--
 535	
 536	    BEGIN
 537	
 538	    BIND
 539		ROUTINE_NAME = UPLIT (%ASCIZ'ENA_LINES');
 540	
 541	    MAP
 542		KERNEL_FILE : REF FILE_BLOCK,
 543		VALUES : REF VNPVAL_BLOCK;
 544	
 545	    LOCAL
 546		LOC,
 547		PDV_ADDR,
 548		SLT_POINTER,
 549		SLT_ADDR,
 550		SLT_COUNT,
 551		PLD_POINTER,
 552		PLD_ADDR,
 553		LLC_TABLE,
 554		LLC_ADDR,
 555		LLC_ENTRY,
 556		NSP_PDV,
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

 557		NRM_PDV,
 558		MPT_NUMBER,
 559		TCB_ADDR,
 560		TCB_LAST,
 561		TCB_TABLE,
 562		NRM_DAT;
 563	
 564	    ROUTINE ENA_NSP (KERNEL_FILE, PLD_POINTER, LLC_ENTRY, VALUES) : NOVALUE =
 565	
 566	!++
 567	! FUNCTIONAL SPECIFICATION:
 568	!	ENA_NSP is an embedded subroutine that processes enabling NSP lines
 569	!	in the NSP Physical Link Database.
 570	!--
 571	
 572		BEGIN
 573	
 574		MAP
 575		    KERNEL_FILE : REF FILE_BLOCK,
 576		    VALUES : REF VNPVAL_BLOCK;
 577	
 578		LOCAL
 579		    PLD_ADDR;
 580	
 581		PLD_ADDR = .PLD_POINTER + (.VALUES [PLD_LEN]*.LLC_ENTRY<0, 8>);
 582		PUTWRD (.KERNEL_FILE, .PLD_ADDR + .VALUES [PLD_LST], .VALUES [PLD_UP]*%O'400' + .VALUES [PLD_WT]);
 583		PUTBYT (.KERNEL_FILE, .PLD_ADDR + .VALUES [PLD_TIM], 1);
 584		PUTBYT (.KERNEL_FILE, .PLD_ADDR + .VALUES [PLD_CHN], .LLC_ENTRY<0, 8>);
 585	!
 586		END;					!OF ENA_NSP
 587	    ROUTINE ENA_NRM (KERNEL_FILE, NRM_DAT, TCB_TABLE, LLC_ENTRY, VALUES) : NOVALUE =
 588	
 589	!++
 590	! FUNCTIONAL DESCRIPTION
 591	!	ENA_NRM is an embedded subroutine which enables NRM lines in
 592	!	the NRM database.
 593	!--
 594	
 595		BEGIN
 596	
 597		MAP
 598		    KERNEL_FILE : REF FILE_BLOCK,
 599		    VALUES : REF VNPVAL_BLOCK;
 600	
 601		LOCAL
 602		    TCB_ADDR,
 603		    TCB_LAST;
 604	
 605		TCB_ADDR = (.TCB_TABLE + (.VALUES [TCB_LEN]*(.LLC_ENTRY<0, 8> - 1)));
 606		TCB_LAST = GETWRD (.KERNEL_FILE, .NRM_DAT + .VALUES [TCB_Q]);
 607		PUTWRD (.KERNEL_FILE, .NRM_DAT + .VALUES [TCB_Q], .TCB_ADDR);
 608		PUTWRD (.KERNEL_FILE, .TCB_ADDR + .VALUES [TCB_LINK], .TCB_LAST);
 609		PUTWRD (.KERNEL_FILE, .TCB_ADDR + .VALUES [TCB_OLINK], 0);
 610		PUTWRD (.KERNEL_FILE, .TCB_ADDR + .VALUES [TCB_FLAGS],
 611		    (GETWRD (.KERNEL_FILE,
 612			.TCB_ADDR + .VALUES [TCB_FLAGS]) AND NOT (.VALUES [TF_DEA])));
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

 613	!
 614		END;					!OF ENA_NRM
 615	!
 616	! GET INFORMATION ABOUT THE SLT SO THAT WE CAN LOOP THROUGH IT
 617	!
 618	    SLT_POINTER = GETWRD (.KERNEL_FILE, .VALUES [SLTTA]);
 619	    SLT_COUNT = GETWRD (.KERNEL_FILE, .VALUES [SLTNM]);
 620	!
 621	! GET REVERSE MAPPING TABLE
 622	!
 623	    LLC_TABLE = GETWRD (.KERNEL_FILE, .VALUES [LLCTA]);
 624	!
 625	! GET POINTERS TO NSP RELATED AREAS
 626	!
 627	
 628	    IF (.PD_NSP NEQ 0)
 629	    THEN
 630		BEGIN
 631	!
 632	! GET INFORMATION ON WHERE THE PLD IS LOCATED
 633	!
 634		NSP_PDV = GETWRD (.KERNEL_FILE, GETWRD (.KERNEL_FILE, .VALUES [PDVTA]) + .PD_NSP);
 635		PLD_POINTER = GETWRD (.KERNEL_FILE,
 636		    GETWRD (.KERNEL_FILE, .NSP_PDV + .VALUES [Z_DAT]) + .VALUES [PLD_OFFSET]);
 637	!
 638		END;
 639	
 640	!
 641	! GET NRM RELATED POINTERS
 642	!
 643	
 644	    IF (.PD_NRM NEQ 0)
 645	    THEN
 646		BEGIN
 647	!
 648	! FORM ADDRESS OF THE NRM DATA BASE AND THE TCB LIST
 649	!
 650		NRM_PDV = GETWRD (.KERNEL_FILE, GETWRD (.KERNEL_FILE, .VALUES [PDVTA]) + .PD_NRM);
 651		NRM_DAT = GETWRD (.KERNEL_FILE, .NRM_PDV + .VALUES [Z_DAT]);
 652		TCB_TABLE = .NRM_DAT + .VALUES [TCB_START];
 653	!
 654		END;
 655	
 656	!
 657	! LOOK THROUGH THE SLT FILLING IN THE PHYSICAL LINE DATA BASE
 658	!
 659	
 660	    INCR SLT_NUMBER FROM 0 TO .SLT_COUNT - 1 DO
 661		BEGIN
 662		SLT_ADDR = .SLT_POINTER + (.VALUES [L_LEN]*.SLT_NUMBER);
 663		LLC_ADDR = .LLC_TABLE + (.SLT_NUMBER*2);
 664	
 665		IF ((GETWRD (.KERNEL_FILE, .SLT_ADDR + .VALUES [L_FLG]) AND .VALUES [LF_RDY]) NEQ 0)
 666		THEN
 667		    BEGIN
 668	
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

 669		    IF (((LLC_ENTRY = GETWRD (.KERNEL_FILE, .LLC_ADDR)) AND %O'100000') EQL 0)
 670		    THEN
 671			BEGIN
 672	!
 673	! HERE TO PROCESS POINT-TO-POINT LINKS
 674	!
 675	
 676			IF ((.PD_NSP NEQ 0) AND (.LLC_ENTRY<8, 8> EQL .PD_NSP))
 677			THEN
 678			    BEGIN
 679	!
 680	! WE HAVE ENSURED PROCESS IS NSP (PD$NSP), ENABLE THE NSP LINE
 681	!
 682			    ENA_NSP (.KERNEL_FILE, .PLD_POINTER, .LLC_ENTRY, .VALUES);
 683			    END
 684			ELSE
 685	
 686			    IF ((.PD_NRM NEQ 0) AND (.LLC_ENTRY<8, 8> EQL .PD_NRM))
 687			    THEN
 688				BEGIN
 689	!
 690	! WE HAVE ENSURED PROCESS IS NRM (PD$NRM), ENABLE THE NRM LINE
 691	!
 692				ENA_NRM (.KERNEL_FILE, .NRM_DAT, .TCB_TABLE, .LLC_ENTRY, .VALUES);
 693				END
 694			    ELSE
 695				ERRMSG (0, 38, ROUTINE_NAME, UPLIT (%ASCIZ'NSP or NRM'), 0, 0, 0)
 696	
 697			END
 698		    ELSE
 699			BEGIN
 700	!
 701	! HERE TO PROCESS MULTIPOINT LINES
 702	!
 703	
 704			IF ((LLC_ADDR = .LLC_ENTRY<0, 15>^1) NEQ 0)
 705			THEN
 706			    BEGIN
 707			    MPT_NUMBER = 0;
 708	
 709			    WHILE ((LLC_ENTRY = GETWRD (.KERNEL_FILE, .LLC_ADDR + .MPT_NUMBER)) NEQ %O'177777') DO
 710				BEGIN
 711	
 712				IF ((.PD_NRM NEQ 0) AND (.LLC_ENTRY<8, 8> EQL .PD_NRM))
 713				THEN
 714	!
 715	! WE HAVE ENSURED THAT WE HAVE AN NRM PROCESS, ENABLE THE LINE
 716	!
 717				    ENA_NRM (.KERNEL_FILE, .NRM_DAT, .TCB_TABLE, .LLC_ENTRY, .VALUES)
 718				ELSE
 719	
 720				    IF ((.PD_NSP NEQ 0) AND (.LLC_ENTRY<8, 8> EQL .PD_NSP))
 721				    THEN
 722	!
 723	! WE HAVE ENSURED THAT WE HAVE AN NSP PROCESS, ENABLE THE LINE
 724	!
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

 725					ENA_NSP (.KERNEL_FILE, .PLD_POINTER, .LLC_ENTRY, .VALUES)
 726				    ELSE
 727					ERRMSG (0, 38, ROUTINE_NAME, UPLIT (%ASCIZ'NRM'));
 728	
 729				MPT_NUMBER = .MPT_NUMBER + 2;
 730				END;
 731	
 732			    END;
 733	
 734			END;
 735	
 736		    END;
 737	
 738		END;
 739	
 740	!
 741	    END;					!OF ENA_LINES
 742	
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

 743	GLOBAL ROUTINE FIX_LLC (KERNEL_FILE, VALUES) : NOVALUE = 	!FIX LLC REVERSE MAPPING TABLE
 744	
 745	!++
 746	! FUNCTIONAL DESCRIPTION:
 747	!
 748	!	LOOK THROUGH THE LLC REVERVE MAPPING TABLE AND FIXUP MULTIPOINT
 749	!	LINES.
 750	!
 751	! FORMAL PARAMETERS:
 752	!
 753	!	KERNEL_FILE - THE SYSTEM IMAGE FILE POINTER
 754	!	VALUES - VARIOUS USEFUL THINGS FOR VNP20
 755	!
 756	! IMPLICIT INPUTS:
 757	!
 758	!	NONE
 759	!
 760	! IMPLICIT OUTPUTS:
 761	!
 762	!	NONE
 763	!
 764	! ROUTINE VALUE:
 765	!
 766	!	NONE
 767	!
 768	! SIDE EFFECTS
 769	!
 770	!	MODIFIES THE KERNEL'S DATA BASE
 771	!
 772	!--
 773	
 774	    BEGIN
 775	
 776	    BIND
 777		ROUTINE_NAME = UPLIT (%ASCIZ'FIX_LLC');
 778	
 779	    MAP
 780		KERNEL_FILE : REF FILE_BLOCK,
 781		VALUES : REF VNPVAL_BLOCK;
 782	
 783	    LOCAL
 784		SLT_COUNT,
 785		LLC_TABLE,
 786		LLC_ADDR,
 787		LLC_ENTRY;
 788	
 789	!
 790	! GET INFORMATION ABOUT THE SLT
 791	!
 792	    SLT_COUNT = GETWRD (.KERNEL_FILE, .VALUES [SLTNM]);
 793	!
 794	! GET REVERSE MAPPING TABLE
 795	!
 796	    LLC_TABLE = GETWRD (.KERNEL_FILE, .VALUES [LLCTA]);
 797	!
 798	! LOOK THROUGH THE LLC REVERSE MAPPING TABLE FIXING AS APPROPRIATE
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

 799	!
 800	
 801	    INCR SLT_NUMBER FROM 0 TO .SLT_COUNT - 1 DO
 802		BEGIN
 803		LLC_ADDR = .LLC_TABLE + (.SLT_NUMBER*2);
 804	
 805		IF (((LLC_ENTRY = GETWRD (.KERNEL_FILE, .LLC_ADDR)) AND %O'100000') NEQ 0)
 806		THEN
 807		    PUTWRD (.KERNEL_FILE,
 808			.LLC_ADDR, .LLC_ENTRY + (.LLC_ADDR/2));
 809	
 810		END;
 811	
 812	    END;					!OF FIX_LLC
 813	
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

 814	GLOBAL ROUTINE MOUACP (KERNEL_FILE, NTINIT_PCB, VALUES) : NOVALUE = 	!MOUNT THE ACP
 815	
 816	!++
 817	! FUNCTIONAL DESCRIPTION:
 818	!
 819	!	"MOUNT" THE NETWORK ACP BY ISSUEING A MESSAGE TO NTINIT AND
 820	!	 THEN ARRANGING FOR IT TO RUN.
 821	!
 822	! FORMAL PARAMETERS:
 823	!
 824	!	KERNEL_FILE - POINTER TO THE FILE BLOCK WHICH DESCRIBES
 825	!	 THE RSX11S KERNEL
 826	!	NTINIT_PCB - PDP-11 ADDRESS OF THE NTINIT PCB
 827	!	VALUES - THE VALUES BLOCK, WHICH CONTAINS A LOT OF THINGS
 828	!	 FOR VNP20
 829	!
 830	! IMPLICIT INPUTS:
 831	!
 832	!	NONE
 833	!
 834	! IMPLICIT OUTPUTS:
 835	!
 836	!	NONE
 837	!
 838	! ROUTINE VALUE:
 839	!
 840	!	NONE
 841	!
 842	! SIDE EFFECTS
 843	!
 844	!	MODIFIES THE KERNEL'S DATA BASE
 845	!
 846	!--
 847	
 848	    BEGIN
 849	
 850	    BIND
 851		ROUTINE_NAME = UPLIT (%ASCIZ'MOUACP');
 852	
 853	    MAP
 854		KERNEL_FILE : REF FILE_BLOCK,
 855		VALUES : REF VNPVAL_BLOCK;
 856	
 857	    LOCAL
 858		MSG_ADDR,
 859		DCB_ADDR,
 860		CLK_ADDR,
 861		NTINIT_TCB,
 862		SEARCH_DONE,
 863		R50VAL : VECTOR [4];
 864	
 865	!
 866	! FETCH A POINTER TO THE NTINIT TCB FROM THE PCB
 867	!
 868	    NTINIT_TCB = GETWRD (.KERNEL_FILE, .NTINIT_PCB + .VALUES [P_TCB]);
 869	!
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

 870	! SEND AN INITIALIZATION MESSAGE TO NTINIT
 871	!
 872	    MSG_ADDR = ALOCB (.KERNEL_FILE, 36, 0, .VALUES);
 873	    PUTWRD (.KERNEL_FILE, .MSG_ADDR, 0);
 874	!
 875	! MARK THE MESSAGE AS COMING FROM 'VNP20'
 876	!
 877	    ATOR50 (UPLIT (%ASCII'VNP20 '), R50VAL);
 878	
 879	    INCR COUNTER FROM 0 TO 3 DO
 880		PUTBYT (.KERNEL_FILE, .MSG_ADDR + 2 + .COUNTER, .R50VAL [.COUNTER]);
 881	
 882	    PUTWRD (.KERNEL_FILE, .MSG_ADDR + 6 + .VALUES [LR_STS], .VALUES [LS_CEX] OR .VALUES [LS_CXO]);
 883	!
 884	! POINT WORD 32 TO DEVICE CO0:
 885	!
 886	    DCB_ADDR = GETWRD (.KERNEL_FILE, .VALUES [DEVHD]);
 887	    SEARCH_DONE = 0;
 888	
 889	    WHILE (.SEARCH_DONE EQL 0) DO
 890	
 891		IF (.DCB_ADDR EQL 0)
 892		THEN
 893		    SEARCH_DONE = -1
 894		ELSE
 895	
 896		    IF (GETWRD (.KERNEL_FILE, .DCB_ADDR + .VALUES [D_NAM]) EQL (%C'C' + (256*%C'O')))
 897		    THEN
 898			SEARCH_DONE = 1
 899		    ELSE
 900			DCB_ADDR = GETWRD (.KERNEL_FILE, .DCB_ADDR + .VALUES [D_LNK]);
 901	
 902	    IF (.SEARCH_DONE LEQ 0)
 903	    THEN
 904		ERROR (UPLIT (%ASCIZ'NO DEVICE CO0: - MOUACP'))
 905	    ELSE
 906		PUTWRD (.KERNEL_FILE,
 907		    .MSG_ADDR + 32, GETWRD (.KERNEL_FILE, .DCB_ADDR + .VALUES [D_UCB]));
 908	
 909	!
 910	! SET THE UIC TO [1,1]
 911	!
 912	    PUTWRD (.KERNEL_FILE, .MSG_ADDR + 34, (1 + (256*1)));
 913	!
 914	! PUT THE MESSAGE ON NTINIT'S RECEIVE QUEUE.  THIS CODE ASSUMES
 915	!  THAT THE RECEIVE QUEUE IS EMPTY.
 916	!
 917	    PUTWRD (.KERNEL_FILE, .NTINIT_TCB + .VALUES [T_RCVL], .MSG_ADDR);
 918	    PUTWRD (.KERNEL_FILE, .NTINIT_TCB + .VALUES [T_RCVL] + 2, .MSG_ADDR);
 919	!
 920	! NOW ARRANGE TO RUN NTINIT IN ONE CLOCK TICK
 921	!
 922	    CLK_ADDR = ALOCB (.KERNEL_FILE, .VALUES [CLK_LGTH], 0, .VALUES);
 923	    PUTWRD (.KERNEL_FILE, .CLK_ADDR + .VALUES [CLK_TIM], GETWRD (.KERNEL_FILE, .VALUES [ABTIM]) + 1);
 924	    PUTWRD (.KERNEL_FILE, .CLK_ADDR + .VALUES [CLK_RQT], .VALUES [CLK_SSHT]);
 925	    PUTWRD (.KERNEL_FILE, .CLK_ADDR + .VALUES [CLK_TCB], .NTINIT_TCB);
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

 926	!
 927	! NOW LINK THIS TO KERNEL'S CLOCK QUEUE.  WE ASSUME THAT NO TASK
 928	!  WANTS TO RUN SOONER THAN NTINIT.
 929	!
 930	    PUTWRD (.KERNEL_FILE, .CLK_ADDR + .VALUES [CLK_LNK], GETWRD (.KERNEL_FILE, .VALUES [CLKHD]));
 931	    PUTWRD (.KERNEL_FILE, .VALUES [CLKHD], .CLK_ADDR);
 932	!
 933	    END;					!OF MOUACP
 934	
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

 935	GLOBAL ROUTINE FCLEAN (KERNEL_FILE, GEN_PCB, VALUES) : NOVALUE = 	!FINAL CLEANUP OF KERNEL
 936	
 937	!++
 938	! FUNCTIONAL DESCRIPTION:
 939	!
 940	!	DO FINAL CLEANUP OF THE KERNEL.  THIS ROUTINE IS CALLED
 941	!	 AFTER THE LAST TASK HAS BEEN INSTALLED BUT BEFORE THE
 942	!	 CORE IMAGE IS WRITTEN OUT.
 943	!
 944	! FORMAL PARAMETERS:
 945	!
 946	!	KERNEL_FILE - FILE BLOCK FOR THE KERNEL
 947	!	GEN_PCB - PCB FOR THE SYSTEM-CONTROLLED PARTITION
 948	!	VALUES - BLOCK WHICH HOLDS VARIOUS USEFUL VALUES
 949	!
 950	! IMPLICIT INPUTS:
 951	!
 952	!	NONE
 953	!
 954	! IMPLICIT OUTPUTS:
 955	!
 956	!	NONE
 957	!
 958	! ROUTINE VALUE:
 959	!
 960	!	NONE
 961	!
 962	! SIDE EFFECTS
 963	!
 964	!	MODIFIES THE KERNEL CORE IMAGE AND LABEL
 965	!
 966	!--
 967	
 968	    BEGIN
 969	
 970	    BIND
 971		ROUTINE_NAME = UPLIT (%ASCIZ'FCLEAN');
 972	
 973	    MAP
 974		KERNEL_FILE : REF FILE_BLOCK,
 975		VALUES : REF VNPVAL_BLOCK;
 976	
 977	    LOCAL
 978		KERNEL_LABEL : REF VECTOR [1024],
 979		KERNEL_SIZE,
 980		ROUNDED_SIZE,
 981		GEN_PAR_BASE;
 982	
 983	!
 984	! FETCH POINTERS AND COMPUTE THE SIZE OF THE KERNEL
 985	!
 986	    GEN_PAR_BASE = GETWRD (.KERNEL_FILE, .GEN_PCB + .VALUES [P_REL])*64;
 987	    KERNEL_LABEL = .KERNEL_FILE [FILE_LABEL];
 988	    KERNEL_SIZE = (.KERNEL_FILE [FILE_HWM] + 64) AND ( NOT 63);
 989	!
 990	! ROUND THE KERNEL SIZE UP TO JUST BELOW 32K, 64K, 96K, OR 124K.
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

 991	!
 992	
 993	    IF (.KERNEL_SIZE GTR %O'754000')
 994	    THEN
 995		ERRMSG (0, 34, ROUTINE_NAME, KERNEL_FILE [FILE_NAME], .KERNEL_SIZE,
 996		    %O'754000', 0)
 997	    ELSE
 998	
 999		IF (.KERNEL_SIZE GTR %O'574000')
1000		THEN
1001		    ROUNDED_SIZE = %O'754000'
1002		ELSE
1003	
1004		    IF (.KERNEL_SIZE GTR %O'374000')
1005		    THEN
1006			ROUNDED_SIZE = %O'574000'
1007		    ELSE
1008	
1009			IF (.KERNEL_SIZE GTR %O'174000') THEN ROUNDED_SIZE = %O'374000' ELSE ROUNDED_SIZE = %O'174000'
1010	
1011	    ;
1012	!
1013	! RETURN TO FREE POOL AMOUNT OF MEMORY UNUSED BY THIS SYSTEM
1014	!
1015	    FRESTG (.KERNEL_FILE [FILE_CORE] + (.ROUNDED_SIZE/4), (.KERNEL_FILE [FILE_CORE_LEN] - .ROUNDED_SIZE)/4);
1016	    KERNEL_FILE [FILE_CORE_LEN] = .ROUNDED_SIZE;
1017	!
1018	! SET THE SIZE OF THE GEN PARTITION TO COVER ALL OF CORE BEYOND WHAT
1019	!  IS NEEDED BY THE KERNEL AND THE OTHER PARTITIONS.
1020	!
1021	    PUTWRD (.KERNEL_FILE, .GEN_PCB + .VALUES [P_SIZE], (.ROUNDED_SIZE - .GEN_PAR_BASE)/64);
1022	!
1023	! SET SYSTEM SIZE AND THE LABEL TO INDICATE THE NUMBER OF BYTES
1024	!  IN THIS CORE IMAGE.
1025	!
1026	    PUTWRD (.KERNEL_FILE, .VALUES [SYSIZ], .ROUNDED_SIZE/64);
1027	    KERNEL_LABEL [L$BLDZ] = (.ROUNDED_SIZE/64) MOD 256;
1028	    KERNEL_LABEL [L$BLDZ + 1] = (.ROUNDED_SIZE/64)/256;
1029	    KERNEL_LABEL [L$BMXZ] = (.ROUNDED_SIZE/64) MOD 256;
1030	    KERNEL_LABEL [L$BMXZ + 1] = (.ROUNDED_SIZE/64)/256;
1031	!
1032	! POINT AT UNUSED PORTION OF POOL.. PARTITION
1033	!
1034	    PUTWRD (.KERNEL_FILE, .VALUES [QBIAS], (.VALUES [POOL_BOTTOM] + 63)/64);
1035	    PUTWRD (.KERNEL_FILE, .VALUES [POOL_BOTTOM] + 2, (.VALUES [POOL_ALLOC] - .VALUES [POOL_BOTTOM])/64);
1036	    END;					!OF FCLEAN
1037	
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

1038	GLOBAL ROUTINE TELLK (KERNEL_FILE, TELL_CHAN, VALUES) : NOVALUE = 	!TELL ABOUT CORE IMAGE
1039	
1040	!++
1041	! FUNCTIONAL DESCRIPTION:
1042	!
1043	!	TELL ABOUT THIS CORE IMAGE, AND CHANGE THE NAME OF THE KERNEL
1044	!	 FILE TO BE THE NAME OF THE NODE BEING BUILT.  THE TYPEOUTS
1045	!	 ARE FOR THE SAKE OF SOFTWARE SUPPORT ANALYZING A DUMP.
1046	!
1047	! FORMAL PARAMETERS:
1048	!
1049	!	KERNEL_FILE - POINTER TO THE FILE BLOCK WHICH DESCRIBES
1050	!	 THE KERNEL.
1051	!	TELL_CHAN - THE CHANNEL NUMBER ON WHICH TO WRITE THE INFO.
1052	!	VALUES - A VECTOR OF LOTS OF GOOD THINGS FOR VNP20
1053	!
1054	! IMPLICIT INPUTS:
1055	!
1056	!	NONE
1057	!
1058	! IMPLICIT OUTPUTS:
1059	!
1060	!	NONE
1061	!
1062	! ROUTINE VALUE:
1063	!
1064	!	NONE
1065	!
1066	! SIDE EFFECTS
1067	!
1068	!	WRITES ON THE SPECIFIED CHANNEL
1069	!
1070	!--
1071	
1072	    BEGIN
1073	
1074	    BIND
1075		ROUTINE_NAME = UPLIT (%ASCIZ'TELLK');
1076	
1077	    MAP
1078		KERNEL_FILE : REF FILE_BLOCK,
1079		VALUES : REF VNPVAL_BLOCK;
1080	
1081	    LOCAL
1082		MAIN_PCB_ADDR,
1083		MAIN_SCAN_DONE,
1084		SUB_PCB_ADDR,
1085		SUB_SCAN_DONE,
1086		PCB_ADDR,
1087		KERNEL_SIZE,
1088		ROUNDED_SIZE,
1089		CHAR;
1090	
1091	!
1092	! FETCH THE NODE NAME AND STORE IT IN THE FILE NAME OF THE KERNEL
1093	!
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

1094	
1095	    INCR COUNTER FROM 0 TO 5 DO
1096		BEGIN
1097		CHAR = GETBYT (.KERNEL_FILE, .VALUES [NTNAM] + .COUNTER);
1098	
1099		IF (.CHAR EQL %C' ') THEN CHAR = 0;
1100	
1101		CH$WCHAR (.CHAR, CH$PTR (KERNEL_FILE [FILE_NAME], .COUNTER));
1102		END;
1103	
1104	    CH$WCHAR (0, CH$PTR (KERNEL_FILE [FILE_NAME], 6));
1105	!
1106	    KERNEL_SIZE = .KERNEL_FILE [FILE_HWM] + 1;
1107	    ROUNDED_SIZE = GETWRD (.KERNEL_FILE, .VALUES [SYSIZ])*64;
1108	    PCRLF (.TELL_CHAN);
1109	    OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ' Node name: '));
1110	    OUTSTR (.TELL_CHAN, KERNEL_FILE [FILE_NAME]);
1111	    OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ', number: '));
1112	    OUTNUM (.TELL_CHAN, GETWRD (.KERNEL_FILE, .VALUES [NSPNM]), 10, 0);
1113	    OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ'.'));
1114	    PCRLF (.TELL_CHAN);
1115	    OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ' There are '));
1116	    OUTNUM (.TELL_CHAN, .ROUNDED_SIZE - .KERNEL_SIZE, 10, 0);
1117	    OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ' bytes free in the '));
1118	    OUTNUM (.TELL_CHAN, ((.ROUNDED_SIZE/64) + 32)/32, 10, 0);
1119	    OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ'K core image,'));
1120	    PCRLF (.TELL_CHAN);
1121	    OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ'  '));
1122	    OUTNUM (.TELL_CHAN, GETWRD (.KERNEL_FILE, GETWRD (.KERNEL_FILE, .VALUES [CRAVL]) + 2), 10, 0);
1123	    OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ' bytes free in the kernel pool,'));
1124	    PCRLF (.TELL_CHAN);
1125	    OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ'  '));
1126	    OUTNUM (.TELL_CHAN, .VALUES [POOL_ALLOC] - .VALUES [POOL_BOTTOM], 10, 0);
1127	    OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ' bytes free in the network pool.'));
1128	    PCRLF (.TELL_CHAN);
1129	    PCRLF (.TELL_CHAN);
1130	    OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ' Partition   Base   Size   Task Name'));
1131	    PCRLF (.TELL_CHAN);
1132	    MAIN_PCB_ADDR = GETWRD (.KERNEL_FILE, .VALUES [PARHD]);
1133	    MAIN_SCAN_DONE = 0;
1134	
1135	    WHILE (.MAIN_SCAN_DONE EQL 0) DO
1136	
1137		IF (.MAIN_PCB_ADDR EQL 0)
1138		THEN
1139		    MAIN_SCAN_DONE = 1
1140		ELSE
1141		    BEGIN
1142	
1143		    IF (GETWRD (.KERNEL_FILE, .MAIN_PCB_ADDR + .VALUES [P_MAIN]) EQL .MAIN_PCB_ADDR)
1144		    THEN
1145			BEGIN
1146			TELLP (.KERNEL_FILE, .TELL_CHAN, .MAIN_PCB_ADDR, .VALUES);
1147			SUB_PCB_ADDR = GETWRD (.KERNEL_FILE, .MAIN_PCB_ADDR + .VALUES [P_SUB]);
1148			SUB_SCAN_DONE = 0;
1149	
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

1150			WHILE (.SUB_SCAN_DONE EQL 0) DO
1151			    BEGIN
1152	
1153			    IF (.SUB_PCB_ADDR EQL 0)
1154			    THEN
1155				SUB_SCAN_DONE = 1
1156			    ELSE
1157				BEGIN
1158				TELLP (.KERNEL_FILE, .TELL_CHAN, .SUB_PCB_ADDR, .VALUES);
1159				END;
1160	
1161			    SUB_PCB_ADDR = GETWRD (.KERNEL_FILE, .SUB_PCB_ADDR + .VALUES [P_SUB]);
1162			    END;
1163	
1164			END;
1165	
1166		    MAIN_PCB_ADDR = GETWRD (.KERNEL_FILE, .MAIN_PCB_ADDR + .VALUES [P_LNK]);
1167		    END;
1168	
1169	    PCRLF (.TELL_CHAN);
1170	    END;					!OF TELLK
1171	
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

1172	ROUTINE TELLP (KERNEL_FILE, TELL_CHAN, PCB_ADDR, VALUES) : NOVALUE = 	!TELL ABOUT A PARTITION
1173	
1174	!++
1175	! FUNCTIONAL DESCRIPTION:
1176	!
1177	!	TELL ABOUT A PARTITION
1178	!
1179	! FORMAL PARAMETERS:
1180	!
1181	!	KERNEL_FILE - POINTER TO THE FILE BLOCK WHICH DESCRIBES
1182	!	 THE KERNEL.
1183	!	TELL_CHAN - THE CHANNEL NUMBER ON WHICH TO WRITE THE INFO.
1184	!	PCB_ADDR - PDP-11 ADDRESS OF THE PARTITION CONTROL BLOCK
1185	!	VALUES - A VECTOR OF LOTS OF GOOD THINGS FOR VNP20
1186	!
1187	! IMPLICIT INPUTS:
1188	!
1189	!	NONE
1190	!
1191	! IMPLICIT OUTPUTS:
1192	!
1193	!	NONE
1194	!
1195	! ROUTINE VALUE:
1196	!
1197	!	NONE
1198	!
1199	! SIDE EFFECTS
1200	!
1201	!	WRITES ON THE SPECIFIED CHANNEL
1202	!
1203	!--
1204	
1205	    BEGIN
1206	
1207	    BIND
1208		ROUTINE_NAME = UPLIT (%ASCIZ'TELLP');
1209	
1210	    MAP
1211		KERNEL_FILE : REF FILE_BLOCK,
1212		VALUES : REF VNPVAL_BLOCK;
1213	
1214	    LOCAL
1215		R50VAL,
1216		ASCVAL : VECTOR [CH$ALLOCATION (7)],
1217		TCB_ADDR;
1218	
1219	!
1220	! FIRST TELL THE PARTITION NAME, THEN THE BASE ADDRESS AND SIZE,
1221	!  LAST THE NAME OF THE TASK RESIDENT IN THE PARTITION.
1222	!
1223	    R50VAL = 0;
1224	    R50VAL<16, 16> = GETWRD (.KERNEL_FILE, .PCB_ADDR + .VALUES [P_NAM]);
1225	    R50VAL<0, 16> = GETWRD (.KERNEL_FILE, .PCB_ADDR + .VALUES [P_NAM] + 2);
1226	    R50TOA (.R50VAL, ASCVAL);
1227	    PCRLF (.TELL_CHAN);
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

1228	    OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ' '));
1229	    OUTSTR (.TELL_CHAN, ASCVAL);
1230	    OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ'     '));
1231	    OUTNUM (.TELL_CHAN, GETWRD (.KERNEL_FILE, .PCB_ADDR + .VALUES [P_REL])*64, 8, 6);
1232	    OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ' '));
1233	    OUTNUM (.TELL_CHAN, GETWRD (.KERNEL_FILE, .PCB_ADDR + .VALUES [P_SIZE])*64, 8, 6);
1234	    TCB_ADDR = GETWRD (.KERNEL_FILE, .PCB_ADDR + .VALUES [P_TCB]);
1235	
1236	    IF (.TCB_ADDR NEQ 0)
1237	    THEN
1238		BEGIN
1239	
1240		IF ((GETWRD (.KERNEL_FILE, .PCB_ADDR + .VALUES [P_STAT]) AND .VALUES [PS_DRV]) EQL 0)
1241		THEN
1242		    BEGIN
1243		    R50VAL = 0;
1244		    R50VAL<16, 16> = GETWRD (.KERNEL_FILE, .TCB_ADDR + .VALUES [T_NAM]);
1245		    R50VAL<0, 16> = GETWRD (.KERNEL_FILE, .TCB_ADDR + .VALUES [T_NAM] + 2);
1246		    R50TOA (.R50VAL, ASCVAL);
1247		    END
1248		ELSE
1249		    BEGIN
1250		    ASCVAL = 0;
1251		    CH$WCHAR (GETBYT (.KERNEL_FILE, .TCB_ADDR + .VALUES [D_NAM]), CH$PTR (ASCVAL, 0));
1252		    CH$WCHAR (GETBYT (.KERNEL_FILE, .TCB_ADDR + .VALUES [D_NAM] + 1), CH$PTR (ASCVAL, 1));
1253		    CH$WCHAR (%C':', CH$PTR (ASCVAL, 2));
1254		    END;
1255	
1256		OUTSTR (.TELL_CHAN, UPLIT (%ASCIZ'  '));
1257		OUTSTR (.TELL_CHAN, ASCVAL);
1258		END;
1259	
1260	    END;					!OF TELLP
1261	END
1262	
1263	ELUDOM
1264	! Local Modes:
1265	! Comment Column:36
1266	! Comment Start:!
1267	! Mode:Fundamental
1268	! Auto Save Mode:2
1269	! End:
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

ABTIM		 923
ALOCB		 157	 872	 922
ALOC_POOL	 158	 235
ASCVAL		 249	 286	 288	1216	1226	1229	1246
		1250#	1251	1252	1253	1257
ATOR50		 138*	 877
BIN_NAME	 355	 396
BLD_CHAIN	 151	 346
CH$WCHAR	1101	1104	1251	1252	1253
CHAR		 446	 458#	 465	 467#	 469	 480#	 487
		 489#	 491	1089	1097#	1099#	1101
CLKHD		 930	 931
CLK_ADDR	 860	 922#	 923	 924	 925	 930	 931
CLK_LGTH	 922
CLK_LNK		 930
CLK_RQT		 924
CLK_SSHT	 924
CLK_TCB		 925
CLK_TIM		 923
COUNTER		 240	 241	 879	 880	1095	1097	1101
CRAVL		1122
DCB_ADDR	 859	 886#	 891	 896	 900#	 907
DEVHD		 886
D_LNK		 900
D_NAM		 896	1251	1252
D_UCB		 907
ENA_LINES	  99	 501*
ENA_NRM		 587*	 692	 717
ENA_NSP		 564*	 682	 725
ERRMSG		 149	 348	 695	 727	 995
ERROR		 148	 904
FCLEAN		 102	 935*
FCOR		 143	 246
FILE_BLOCK	 199	 204	 335	 393	 438	 542	 575
		 598	 780	 854	 974	1078	1211
FILE_CHAN	 160	 217	 218	 296	 344	 355	 396
FILE_CORE	1015
FILE_CORE_LEN	1015	1016
FILE_HWM	 988	1106
FILE_LABEL	 222	 987
FILE_LEN	 212
FILE_NAME	 213	 995	1101	1104	1110
FILE_PTR	 204	 212#	 213	 217	 218	 222	 241
		 246
FILE_TYP	 212
FIX_LLC		 100	 743*
FND_CHAIN	 152	 341
FRESTG		 144	1015
GEN_PAR_BASE	 981	 986#	1021
GEN_PCB		 935	 986	1021
GETBLK		 150	 212	 228
GETBYT		 153	 241	1097	1251	1252
GETWRD		 154	 451	 452	 453	 472	 494	 606
		 611	 618	 619	 623	 634	 635	 636
		 650	 651	 665	 669	 709	 792	 796
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

		 805	 868	 886	 896	 900	 907	 923
		 930	 986	1107	1112	1122	1132	1143
		1147	1161	1166	1224	1225	1231	1233
		1234	1240	1244	1245
GET_BIN		  97	 355*
GET_LIBR	  96	 296*
KERNEL_FILE	 160	 199	 241	 296	 335	 344	 355
		 393	 396	 399	 438	 451	 452	 453
		 465	 471	 472	 487	 493	 494	 501
		 542	 564	 575	 582	 583	 584	 587
		 598	 606	 607	 608	 609	 610	 611
		 618	 619	 623	 634	 635	 636	 650
		 651	 665	 669	 682	 692	 709	 717
		 725	 743	 780	 792	 796	 805	 807
		 814	 854	 868	 872	 873	 880	 882
		 886	 896	 900	 906	 907	 912	 917
		 918	 922	 923	 924	 925	 930	 931
		 935	 974	 986	 987	 988	 995	1015
		1016#	1021	1026	1034	1035	1038	1078
		1097	1101	1104	1106	1107	1110	1112
		1122	1132	1143	1146	1147	1158	1161
		1166	1172	1211	1224	1225	1231	1233
		1234	1240	1244	1245	1251	1252
KERNEL_LABEL	 978	 987#	1027#	1028#	1029#	1030#
KERNEL_SIZE	 979	 988#	 993	 995	 999	1004	1009
		1087	1106#	1116
L$BHGV		 224
L$BLDZ		1027	1028
L$BMXZ		1029	1030
L$BSA		 223
LABEL_PTR	 205	 222#	 223	 224
LEN_FILE_STRING	 213
LEN_LIBR_NAME	 213	 230	 286	 288
LF_RDY		 665
LIBRARY_BASE	 207	 223#	 224	 231	 241
LIBRARY_LENGTH	 206	 224#	 235	 240
LIBR_ADDR	 235	 241
LIBR_BASE	 231
LIBR_BLOCK	 203	 285	 339
LIBR_CHAIN	 341	 346
LIBR_FILE	 229
LIBR_LEN	 228
LIBR_NAME	 230	 288
LIBR_PTR	 203	 228#	 229#	 230	 231#	 235#	 241
		 247	 249	 285	 288	 290	 339	 341#
		 344#	 346	 352
LIBR_TYP	 228
LIB_NAME	 160	 213	 230	 235	 296	 341	 344
LLCTA		 623	 796
LLC_ADDR	 554	 663#	 669	 704#	 709	 786	 803#
		 805	 808
LLC_ENTRY	 555	 564	 581	 584	 587	 605	 669#
		 676	 682	 686	 692	 704	 709#	 712
		 717	 720	 725	 787	 805#	 808
LLC_TABLE	 553	 623#	 663	 785	 796#	 803
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

LOC		 442	 546
LR_STS		 882
LS_CEX		 882
LS_CXO		 882
L_FLG		 665
L_LEN		 662
MAIN_PCB_ADDR	1082	1132#	1137	1143	1146	1147	1166#
MAIN_SCAN_DONE	1083	1133#	1135	1139#
MOUACP		 101	 814*
MPT_NUMBER	 558	 707#	 709	 729#
MSG_ADDR	 858	 872#	 873	 880	 882	 907	 912
		 917	 918
NRM_DAT		 562	 587	 606	 607	 651#	 652	 692
		 717
NRM_PDV		 557	 650#	 651
NSPNM		1112
NSP_PDV		 444	 451#	 453	 556	 634#	 636
NTINIT_PCB	 814	 868
NTINIT_TCB	 861	 868#	 917	 918	 925
NTNAM		1097
OUTNUM		 147	1112	1116	1118	1122	1126	1231
		1233
OUTPUT		 140
OUTSTR		 146	1109	1110	1111	1113	1115	1117
		1119	1121	1123	1125	1127	1130	1228
		1229	1230	1232	1256	1257
PARHD		1132
PCB_ADDR	1086	1172	1224	1225	1231	1233	1234
		1240
PCOR2		  18#
PCRLF		 145	1108	1114	1120	1124	1128	1129
		1131	1169	1227
PDVTA		 451	 634	 650
PDV_ADDR	 547
PD_NRM		 501	 644	 650	 686	 712
PD_NSP		 399	 451	 501	 628	 634	 676	 720
PLD_ADDR	 552	 579	 581#	 582	 583	 584
PLD_CHN		 584
PLD_LEN		 581
PLD_LST		 582
PLD_OFFSET	 636
PLD_POINTER	 551	 564	 581	 635#	 682	 725
PLD_TIM		 583
PLD_UP		 582
PLD_WT		 582
POOL_ALLOC	1035	1126
POOL_BOTTOM	1034	1035	1126
PSW_FLG_OFFSET	 471	 473	 493	 495
PSW_OFFSET	 453
PSW_POINTER	 443	 452#	 465	 471	 473	 487	 493
		 495
PSW_RCV_FLAG	 473
PSW_RCV_OFFSET	 465
PSW_XMT_FLAG	 495
PSW_XMT_OFFSET	 487
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

PS_DRV		1240
PUTBYT		 155	 241	 465	 487	 583	 584	 880
PUTWRD		 156	 471	 493	 582	 607	 608	 609
		 610	 807	 873	 882	 906	 912	 917
		 918	 923	 924	 925	 930	 931	1021
		1026	1034	1035
P_LNK		1166
P_MAIN		1143
P_NAM		1224	1225
P_REL		 986	1231
P_SIZE		1021	1233
P_STAT		1240
P_SUB		1147	1161
P_TCB		 868	1234
QBIAS		1034
R50TOA		 139	1226	1246
R50VAL		 863	 877	 880	1215	1223#	1224#	1225#
		1226	1243#	1244#	1245#	1246
RCOR		 142	 218
RCV_PASWRD	 458	 467
RDLIBR		  94	 160*	 344	 396
ROUNDED_SIZE	 980	1001#	1006#	1009#	1015	1016	1021
		1026	1027	1028	1029	1030	1088	1107#
		1116	1118
ROUTINE_NAME	 196#	 282#	 332#	 348	 390#	 435#	 539#
		 695	 727	 777#	 851#	 971#	 995	1075#
		1208#
RSTB		 141	 217
SEARCH_DONE	 862	 887#	 889	 893#	 898#	 902
SEL_LIBR	  95	 249*	 341
SET_PASWRDS	  98	 399*
SLTNM		 619	 792
SLTTA		 618
SLT_ADDR	 549	 662#	 665
SLT_COUNT	 550	 619#	 660	 784	 792#	 801
SLT_NUMBER	 660	 662	 663	 801	 803
SLT_POINTER	 548	 618#	 662
STR_PTR		 445	 461#	 465	 466#	 467	 469	 483#
		 487	 488#	 489	 491
SUB_PCB_ADDR	1084	1147#	1153	1158	1161#
SUB_SCAN_DONE	1085	1148#	1150	1155#
SYSIZ		1026	1107
TCB_ADDR	 559	 602	 605#	 607	 608	 609	 610
		 612	1217	1234#	1236	1244	1245	1251
		1252
TCB_FLAGS	 610	 612
TCB_LAST	 560	 603	 606#	 608
TCB_LEN		 605
TCB_LINK	 608
TCB_OLINK	 609
TCB_Q		 606	 607
TCB_START	 652
TCB_TABLE	 561	 587	 605	 652#	 692	 717
TELLK		 103	1038*
TELLP		 104#	1146	1158	1172*
		DSK:PCOR2.XRF[4,31]              31-Aug-79 14:56

TELL_CHAN	1038	1108	1109	1110	1111	1112	1113
		1114	1115	1116	1117	1118	1119	1120
		1121	1122	1123	1124	1125	1126	1127
		1128	1129	1130	1131	1146	1158	1169
		1172	1227	1228	1229	1230	1231	1232
		1233	1256	1257
TF_DEA		 612
T_NAM		1244	1245
T_RCVL		 917	 918
VALUES		 160	 200	 235	 296	 336	 341	 344
		 346#	 355	 394	 396	 399	 439	 451
		 453	 458	 465	 467	 471	 473	 480
		 487	 489	 493	 495	 501	 543	 564
		 576	 581	 582	 583	 584	 587	 599
		 605	 606	 607	 608	 609	 610	 612
		 618	 619	 623	 634	 636	 650	 651
		 652	 662	 665	 682	 692	 717	 725
		 743	 781	 792	 796	 814	 855	 868
		 872	 882	 886	 896	 900	 907	 917
		 918	 922	 923	 924	 925	 930	 931
		 935	 975	 986	1021	1026	1034	1035
		1038	1079	1097	1107	1112	1122	1126
		1132	1143	1146	1147	1158	1161	1166
		1172	1212	1224	1225	1231	1233	1234
		1240	1244	1245	1251	1252
VNPVAL_BLOCK	 200	 336	 394	 439	 543	 576	 599
		 781	 855	 975	1079	1212
XMT_PASWRD	 480	 489
Z_DAT		 453	 636	 651