mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-01-25 19:25:53 +00:00
2777 lines
244 KiB
Plaintext
2777 lines
244 KiB
Plaintext
%B 5 7 0 0 M C P M A R K XVI.0.178 05/09/77%179-00001000
|
|
% 00002000
|
|
COMMENT: * TITLE: B5500/B5700 MARK XVI SYSTEM RELEASE * 00002010
|
|
* FILE ID: SYMBOL/MCP TAPE ID: SYMBOL1/FILE000 * 00002011
|
|
* THIS MATERIAL IS PROPRIETARY TO BURROUGHS CORPORATION * 00002012
|
|
* AND IS NOT TO BE REPRODUCED, USED, OR DISCLOSED * 00002013
|
|
* EXCEPT IN ACCORDANCE WITH PROGRAM LICENSE OR UPON * 00002014
|
|
* WRITTEN AUTHORIZATION OF THE PATENT DIVISION OF * 00002015
|
|
* BURROUGHS CORPORATION, DETROIT, MICHIGAN 48232 * 00002016
|
|
* * 00002017
|
|
* COPYRIGHT (C) 1965, 1971, 1972, 1973, 1974 * 00002018
|
|
* BURROUGHS CORPORATION * 00002019
|
|
* AA759915 AA320206 AA393180 AA332366 AA465080 * 00002020
|
|
* AA495655 AA496565 *; 00002021
|
|
$ SET OMIT = NOT(DEBUGGING) 00002100
|
|
BEGIN 00003000
|
|
DEFINE MIXMAX= 9#; COMMENT: MIXMAX MAY NOT BE LARGER THAN 29;00004000
|
|
DEFINE JOBNUMAX=40#; COMMENT: JOBNUMAX SHOULD BE ABOUT 00005000
|
|
2|MIXMAX+30; 00005001
|
|
DEFINE MARKLEVEL= % MARK LEVEL IN ALPHA 00005010
|
|
"XVI.0" 00005020
|
|
#, PATCHLEVEL= % PATCH RELEASE LEVEL IN ALPHA 00005030
|
|
"178" %179-00005040
|
|
#, LOCALEVEL= % LOCAL LEVEL IN ALPHA 00005050
|
|
" " 00005060
|
|
#; 00005070
|
|
DEFINE MCPTYPE = 63 #, 00005100
|
|
DCINTYPE = 63 #, 00005120
|
|
TSSINTYPE = 61 #; 00005140
|
|
COMMENT THE ESPOL COMPILER APPROPRIATELY TYPES THE MCP & 00005160
|
|
INTRINSICS FILE HEADERS SO THAT A VALIDITY CHECK MAY BE MADE 00005180
|
|
DURING INITIALIZATION AND AT CI AND CM TIME. HEADER[4].[36:6] 00005185
|
|
IS THE FIELD USED TO CONTAIN THE TYPE; 00005190
|
|
DEFINE ESAD = [1:15]#, 00005200
|
|
UNUM = [16:5]#, 00005210
|
|
BYBY(BYBY1,BYBY2)= 00005220
|
|
BEGIN STREAM(A:=TYPEDSPACE(10,SPOUTMSGAREAV) : );% %167-00005230
|
|
BEGIN DI:= A; DS:=BYBY2 LIT BYBY1; END; 00005240
|
|
PUNT(0); 00005250
|
|
END#; 00005260
|
|
DEFINE RESERVEDISKSIZE=2000#; 00005300
|
|
COMMENT TRACESIZE IS THE SIZE OF THE CORE AREA USED TO STORE TRACE 00005500
|
|
INFORMATION BEFORE IT IS WRITTEN ON DISK. 00005600
|
|
TRACAREASTART IS THE ABSOLUTE DISK ADDRESS OF THE TRACE 00005700
|
|
AREA ON DISK. 00005800
|
|
TRACAREASIZE IS THE SIZE (IN DISK SEGMENTS) OF THE TRACE 00005900
|
|
AREA ON DISK; 00005950
|
|
DEFINE TRACESIZE=30#,TRACAREASTART=10000#,TRACAREASIZE=480#; 00006000
|
|
DEFINE HANG=DO UNTIL FALSE#; 00006100
|
|
DEFINE LEFTARROW = "~"#; 00006150
|
|
$ SET OMIT = NOT(SAVERESULTS) 00006200
|
|
REAL JUNK=5;% 00007000
|
|
DEFINE PSEUDOMAX = 31 #, % MAX NO OF PSEUD-RDRS 0-ORIGIN 00007050
|
|
PSEUDOMAX1 = 32 #, % MAX NO OF PSEUD-RDRS 1-ORIGIN 00007055
|
|
PSEUDOMAXT = 63 #; % # ENTRIES IN TINU TABLE -2 00007060
|
|
COMMENT TO REDEFINE MAX NO. OF PSEUDO RDRS,SIZE AND INITIALIZATION 00007061
|
|
OF TINU[*] AT 00241900 MUST ALSO BE MODIFIED ACCORDINGLY; 00007062
|
|
COMMENT : PSEUDOMAX MUST BE }0 AND { 31 00007065
|
|
PSEUDOMAX1 MUST BE } 0 AND { 32 00007070
|
|
PSEUDOMAXT MUST BE } 31 AND { 63;% 00007075
|
|
COMMENT TO ADJUST THE PRIORITY, CORE ESTIMATE, AND STACK SIZE 00007200
|
|
OF LIBMAIN/DISK, SEE SEQUENCE NUMBER 45075470; 00007210
|
|
LABEL GOGOGO,NORMALERROR,P2BUSY,TIMER,EXTERNAL,INQUEST, 00008000
|
|
PROCSWIT,P2FAKE,KEYBOARDREQUEST,RETURN,COMINIT,MEMORYPARITY %WE 00009000
|
|
; 00010000
|
|
DEFINE GETUSERDISK(GETUSERDISK1)=PETUSERDISK(GETUSERDISK1,0)#;% 00012001
|
|
$ SET OMIT = NOT(DUMP OR DEBUGGING) 00012159
|
|
DEFINE DUMPNOW(DUMPNOW1) = 00012160
|
|
DUMPCORE(DUMPNOW1&(GETSPACE(22,0,0) + 3)[15:33:15])#;% 00012165
|
|
$ POP OMIT 00012166
|
|
INTEGER RRRMECH=@201;% 00013000
|
|
DEFINE SPACE(SPACE1) =(GETSPACE(SPACE1,0,0) + 2)#; 00013500
|
|
DEFINE MCP=M[1]#; %PRIVILEDGED USERCODE STORED IN M[1] 00013600
|
|
DEFINE % KEYIN TABLE DEFINE VALUES FOR "REPLY" 00013700
|
|
VAX = 01#, 00013710
|
|
VIL = 02#, 00013720
|
|
VUL = 03#, 00013730
|
|
VQT = 04#, 00013740
|
|
VOU = 05#, 00013750
|
|
VWY = 06#, 00013760
|
|
VRM = 12#, 00013770
|
|
VOK = 22#, 00013780
|
|
VFM = 23#, 00013790
|
|
VFR = 24#, 00013800
|
|
VOF = 25#, 00013810
|
|
VCC = 21#, 00013820
|
|
VIF = 32#; 00013830
|
|
DEFINE 00013850
|
|
$ SET OMIT = AUXMEM 00013860
|
|
SPACESTACKSIZE = 80#; 00013880
|
|
$ SET OMIT = NOT(AUXMEM) 00013900
|
|
SAVE INTEGER PROCEDURE GETSPACE(SIZE,TYPE,SAVEF);% 00014000
|
|
VALUE SIZE,TYPE,SAVEF;% 00015000
|
|
INTEGER SIZE,TYPE;% 00016000
|
|
BOOLEAN SAVEF; FORWARD;% 00017000
|
|
DEFINE %167-00017005
|
|
TYPEDSPACE(TYPEDSPACE1,TYPEDSPACE2) = 00017010
|
|
(GETSPACE(TYPEDSPACE1,TYPEDSPACE2,0)+2)# % 00017015
|
|
,ARRAYDESC(ARRAYDESC1,ARRAYDESC2) = 00017020
|
|
([M[GETSPACE(ARRAYDESC1,ARRAYDESC2,0)+2]] & ARRAYDESC1 [SIZE])# %00017025
|
|
,SAVEARRAYDESC(SAVEARRAYDESC1,SAVEARRAYDESC2) = 00017030
|
|
([M[GETSPACE(SAVEARRAYDESC1,SAVEARRAYDESC2,1)+2]] 00017035
|
|
& SAVEARRAYDESC1 [SIZE])# %00017040
|
|
; 00017045
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00017100
|
|
%**********************************************************************%00017110
|
|
%* *%00017120
|
|
%* MEMORY AREA TYPES STORED IN 3:6 FIELD OF FIRST MEMORY *%00017130
|
|
%* LINK OF ALL MEMORY AREAS *%00017140
|
|
%* *%00017150
|
|
%**********************************************************************%00017160
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00017170
|
|
DEFINE %167-00017180
|
|
UNKNOWNAREAV = 0# % %167-00017190
|
|
,CODEAREAV = 1# % %167-00017200
|
|
,DATAAREAV = 2# % %167-00017210
|
|
,IOBUFFERAREAV = 3# % %167-00017220
|
|
,ALGOLFIBAREAV = 4# % %167-00017230
|
|
,INQUIRYBUFFAREAV = 5# % %167-00017240
|
|
,COBOLFIBAREAV = 6# % %167-00017250
|
|
,TYPE7INTAREAV = 7# % %167-00017260
|
|
,DISKHEADERAREAV = 8# % %167-00017270
|
|
,MAINTBUFFAREAV = 9# % %167-00017280
|
|
,LBLEQNAREAV = 10# % %167-00017290
|
|
,SEGZEROAREAV = 11# % %167-00017300
|
|
,STACKAREAV = 12# % %167-00017310
|
|
,TYPE13INTAREAV = 13# % %167-00017320
|
|
,SCRATCHDIRAREAV = 14# % %167-00017330
|
|
,OPSETAREAV = 15# % %167-00017340
|
|
,DIRTOPAREAV = 16# % %167-00017350
|
|
,SPOUTMSGAREAV = 17# % %167-00017360
|
|
,UVROWAREAV = 18# % %167-00017370
|
|
,JARROWAREAV = 19# % %167-00017380
|
|
,CIDROWAREAV = 20# % %167-00017390
|
|
,INQINPUTAREAV = 21# % %167-00017400
|
|
,INTARRAYAREAV = 22# % %167-00017410
|
|
,RJEINPUTAREAV = 23# % %167-00017420
|
|
,DCQUEUEAREAV = 24# % %167-00017430
|
|
,DALOCROWAREAV = 25# % %167-00017440
|
|
,SHEETAREAV = 26# % %167-00017450
|
|
,STAWORDAREAV = 27# % %167-00017460
|
|
,KEYINBUFAREAV = 28# % %167-00017470
|
|
,FSAREAV = 29# % %167-00017480
|
|
,DC19QUEUEAREAV = 30# % %167-00017490
|
|
,AVTABLEAREAV = 31# % %167-00017500
|
|
,TRACETABLEAREAV = 32# % %167-00017510
|
|
,SEGDICTAREAV = 33# % %167-00017520
|
|
,STACKPRTAREAV = 34# % %167-00017530
|
|
,MCPTABLEAREAV = 35# % %167-00017540
|
|
,IRSTACKAREAV = 36# % %167-00017550
|
|
,FPBAREAV = 37# % %167-00017560
|
|
,CONTROLCARDAREAV = 38# % %167-00017562
|
|
,LABELAREAV = 39# % %167-00017564
|
|
,MDUMPAREAV = 40# % %167-00017566
|
|
,ESPDISKAREAV = 41# % %167-00017568
|
|
,LOGAREAV = 42# % %167-00017570
|
|
,CANDEINPUTAREAV = 43# % TSS MCP ONLY %167-00017572
|
|
,OBJOBINPUTAREAV = 44# % TSS MCP ONLY %167-00017574
|
|
,TYPE45 = 45# % %167-00017576
|
|
,TYPE46 = 46# % %167-00017578
|
|
,TYPE47 = 47# % %167-00017580
|
|
,TYPE48 = 48# % %167-00017582
|
|
; %167-00017600
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00017700
|
|
%**********************************************************************%00017710
|
|
%* *%00017720
|
|
%* M E M O R Y L I N K S *%00017730
|
|
%* *%00017740
|
|
%**********************************************************************%00017750
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00017760
|
|
% %167-00017762
|
|
% FIELDS OF MEMORY LINK 0 OF ALL AREAS %167-00017764
|
|
% %167-00017766
|
|
FIELD %167-00017770
|
|
AREAAVAILF = 01:01 % = 0 FOR IN-USE AREA, = 1 FOR AVAIL. AREA 00017780
|
|
,AREASAVEF = 02:01 % = 1 FOR IN-USE SAVE AREA, = 0 FOR OLAY AREA00017790
|
|
,AREATYPEF = 03:06 % TYPE OF AREA (SEE ABOVE) %167-00017800
|
|
,AREAMIXF = 09:06 % MIX INDEX OF OWNER OF AREA %167-00017810
|
|
,AREABACKLINKF = 18:15 % ADDRESS OF PREVIOUS AREA %167-00017820
|
|
,AREAFWDLINKF = 33:15 % ADDRESS OF NEXT AREA %167-00017830
|
|
; %167-00017840
|
|
SAVE REAL PROCEDURE WAITIO(IOD,MASK,U);% 00018000
|
|
VALUE IOD,MASK,U; REAL IOD,MASK,U; FORWARD;% 00019000
|
|
SAVE PROCEDURE DISKWAIT(CORE,SIZE,DISK); 00019100
|
|
VALUE CORE,SIZE,DISK; 00019200
|
|
REAL CORE,SIZE,DISK; 00019300
|
|
FORWARD; 00019400
|
|
PROCEDURE ERRORFIXER(TYPE); VALUE TYPE; REAL TYPE; FORWARD; 00019500
|
|
SAVE PROCEDURE SNOOZE(PRYR,ADDRESS,MASK); VALUE PRYR,ADDRESS,MASK; 00020000
|
|
REAL PRYR; NAME ADDRESS; ARRAY MASK[*]; FORWARD; 00021000
|
|
DEFINE SLEEP(SLEEP1,SLEEP2)=SNOOZE(PRYOR[P1MIX],SLEEP1,SLEEP2)#; 00021500
|
|
ARRAY PRYOR[*]; 00021600
|
|
REAL P1MIX,P2MIX; % SEE 00105000 00021700
|
|
ARRAY SLATE[*];% 00022000
|
|
REAL NSLATE,LSLATE;% 00023000
|
|
DEFINE SLATESIZE=16#,SLATEND=SLATESIZE-1#;%SIZE MUST BE TWO POWER 00023100
|
|
REAL NT1=@160,NT2=@161,NT3=@162,NT4=@163,NT5=@164,NT6=@165,NT7=@166; 00024000
|
|
REAL CLOCK = @170; % CLOCK.[9:33] CONTAINS THE NUMBER OF TIME INTERVAL 00024005
|
|
% INTERRUPTS PROCESSED SINCE HALT LOAD. CLOCK.[42:6] 00024006
|
|
% ALWAYS EQUALS ZERO. %156-00024007
|
|
COMMENT NT1 THRU NT7 ARE USED BY THE MCP FOR TEMPORARY STORAGE. 00024010
|
|
ALL PROCESSES THAT USE THESE VARIABLES ASSUME THAT IF CONTROL 00024020
|
|
IS LOST. THERI CONTENT MAY HAVE BEEN CHANGED BY THE TIME 00024030
|
|
THAT CONTROL IS REGAINED. 00024040
|
|
END COMMENT; 00024050
|
|
ARRAY TSKA = NT3[*]; 00024060
|
|
REAL MCPBASE; 00024100
|
|
COMMENT MCPBASE CONTAINS THE DISK ADDRESS (OCTAL) OF THE BEGINNING 00024200
|
|
OF THE MCP THAT IS CURRENTLY IN USE. THIS ADDRESS IS PASSED TO 00024210
|
|
THE MCP BY THE LOADER ROUTINE AT EACH HALT/LOAD IN M[0].[18:30].00024220
|
|
WHEN THE ESPBIT ROUTINE IS CALCULATING THE DISK ADDRESS 00024230
|
|
OF AN MCP SEGMENT, IT ADDS MCPBASE TO THE ADDRESS THAT 00024240
|
|
IS CONTAINED IN THE PRT CELL FOR THAT SEGMENT. 00024250
|
|
END COMMENT; 00024260
|
|
LABEL NOTHINGTODO,INITIATE,START,STACKOVERFLOW,IOBUSY; 00024270
|
|
$ SET OMIT = NOT(AUXMEM OR MONITOR) 00024299
|
|
$ SET OMIT = NOT MONITOR 00024590
|
|
DEFINE MCPNAMESEG = (DIRECTORYTOP-7)#; 00024610
|
|
COMMENT MCPNAMESEG CURRENTLY CONTAINS THE FOLLOWING: 00024620
|
|
WORD[ 0]-WORD[15] - FILE IDS OF THE AUXDATA FILES FOR MCP & INTRINCS. 00024630
|
|
WORD[16]-WORD[19] - CONTAIN THE WORD "AUXMEM " AS A MARKER. 00024640
|
|
WORD[20]-WORD[27] - FILE IDS OF THE MCP"S AT HALT/LOAD. 00024650
|
|
WORD[28] - USED BY DISKSQUASH FOR COMM. BETWEEN SHAREDISK SYSTEMS. 00024660
|
|
; 00024670
|
|
$ SET OMIT = NOT(NEWLOGGING) 00024999
|
|
$ SET OMIT = NEWLOGGING 00025299
|
|
DEFINE STARTLOG(STARTLOG1)= 00025300
|
|
PROCTIME[STARTLOG1]~(*P(DUP))-CLOCK-P(RTR)#, 00025400
|
|
STOPLOG(STOPLOG1,STOPLOG2)= 00025500
|
|
PROCTIME[STOPLOG1] !(*P(DUP))+CLOCK+P(RTR)#; 00025600
|
|
$ POP OMIT 00025601
|
|
SAVE PROCEDURE ESPBIT; COMMENT PRESENCE BIT ROUTNE FOR ESP SEGMENTS ;% 00025900
|
|
BEGIN INTEGER PRTLOC,SYLLABLE,LOC,SIZE;% 00026000
|
|
FIELD MAYBEWORKEDON = [7:1]; % %156-00027000
|
|
ARRAY MYSELF=ESPBIT[*];% 00028000
|
|
REAL RCW=+0,DISKREAD;% 00029000
|
|
LABEL MAKEPRESENT, TRYAGAIN; %156-00030000
|
|
$ SET OMIT = NOT(NEWLOGGING) 00030099
|
|
PRTLOC~(RCW INX 0)&RCW[30:10:2];% 00031000
|
|
STREAM(RLST~[SYLLABLE],CL~PRTLOC);% 00032000
|
|
BEGIN SI~CL; SI~SI-2; DI~RSLT; DI~DI+6; DS~2 CHR END;00033000
|
|
PRTLOC ~ IF SYLLABLE THEN NT4% 00034000
|
|
ELSE SYLLABLE.[36:10];% 00035000
|
|
SYLLABLE := @104; % THIS IS THE CODE WE WILL PASS TO 00035500
|
|
% GETSPACE THE FIRST TIME. IT REQUESTS00035510
|
|
% OVERLAY MEMORY FOR THE MCP AND THAT 00035520
|
|
% WE WANT TO BE RETURNED TO ON A NO 00035530
|
|
% MEM. %156-00035540
|
|
IF MEMORY[PRTLOC].MAYBEWORKEDON THEN% 00036000
|
|
MAKEPRESENT: BEGIN MEMORY[PRTLOC].MAYBEWORKEDON~FALSE;% 00037000
|
|
SIZE~MEMORY[PRTLOC].[8:10];% 00038000
|
|
% %156-00039000
|
|
% NOW WE WILL ATTEMPT TO GET SPACE FOR THIS MCP PROC. 00039005
|
|
% IF WE FAIL WE WILL WAIT FOR A SECOND AND THEN TRY 00039010
|
|
% AGAIN. THIS ENSURES THAT IF WE GET DS-ED WHILE %156-00039015
|
|
% SLEEPING WAITING FOR MEMORY WE WILL NOT LEAVE THE 00039020
|
|
% TOGGLE LOCKED UP FOR THIS PROCEDURE. %156-00039025
|
|
% %156-00039030
|
|
IF (LOC:=GETSPACE(SIZE,1,SYLLABLE))=0 THEN % NO MEM 00039035
|
|
BEGIN %156-00039040
|
|
MEMORY[PRTLOC].MAYBEWORKEDON := TRUE; % UNLOCK I00039045
|
|
SYLLABLE.[46:1] := TRUE; % DONT PRINT NO MEM 00039050
|
|
SLEEP([CLOCK],NOT CLOCK); % WAIT FOR ONE SECOND.00039055
|
|
GO TO TRYAGAIN; %156-00039060
|
|
END; %156-00039065
|
|
$ SET OMIT = NOT(AUXMEM) 00039099
|
|
DISKREAD~(LOC+1)&SIZE[8:38:10]&@14[21:42:6] %E00040000
|
|
&((SIZE+29) DIV 30)[27:42:6];% 00041000
|
|
STREAM(L:=LOC+1.N:=M[PRTLOC].[18:15]+MCPBASE,D:=0); 00042000
|
|
BEGIN SI~LOC N; DI~L; DS~8 DEC END;% 00043000
|
|
SYLLABLE~WAITIO(DISKREAD,0,18);% 00044000
|
|
$ SET OMIT = NOT(AUXMEM) 00044099
|
|
MEMORY[LOC]~MEMORY[LOC]&0[2:47:1]&0[9:42:6];% 00045000
|
|
MEMORY[LOC+1]~PRTLOC&SIZE[18:33:15];% 00046000
|
|
M[PRTLOC] := M[PRTLOC] & TRUE [MAYBEWORKEDON] %%156-00047000
|
|
&(LOC+2)[33:33:15];% 00048000
|
|
$ SET OMIT = NOT MONITOR 00048099
|
|
END ELSE% 00049000
|
|
TRYAGAIN: BEGIN SLEEP([M[PRTLOC]],0&TRUE [MAYBEWORKEDON]);% %156-00050000
|
|
IF (MEMORY[PRTLOC] INX 0)=(MYSELF INX 0) THEN% 00051000
|
|
GO TO MAKEPRESENT;% 00052000
|
|
END;% 00053000
|
|
$ SET OMIT = NOT(NEWLOGGING) 00053099
|
|
POLISH(0,RDF,0,XCH,FCX,STS);% 00054000
|
|
GO TO POLISH(MEMORY[PRTLOC]);% 00055000
|
|
GO TO START; % PLACE DESC.IN PRT FOR MCP TO AUXMEM TRANSFER 00055100
|
|
END ESPBIT;% 00056000
|
|
LABEL FINDIT; 00057100
|
|
REAL RESULT=12 ,RESULT2=13 ,RESULT3=14 ,RESULT4=15 ;% 00058000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00060000
|
|
%**********************************************************************%00060010
|
|
%* *%00060020
|
|
%* M I S C E L L A N E O U S F I E L D D E F I N I T I O N S *%00060030
|
|
%* *%00060040
|
|
%**********************************************************************%00060050
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00060060
|
|
%167-00060070
|
|
FIELD %167-00060080
|
|
FF = 18:15 % %167-00060090
|
|
,CF = 33:15 % %167-00060100
|
|
,CTF = FF % %167-00060110
|
|
,CTC = CF % %167-00060120
|
|
,MSFF = 16:01 % %167-00060130
|
|
; % %167-00060999
|
|
% % %167-00061000
|
|
% FIELDS OF AIT ENTRY %167-00061010
|
|
% %167-00061020
|
|
FIELD %167-00061030
|
|
FILEBIT = 01:01 % %167-00061040
|
|
,OWNBIT = 02:01 % %167-00061045
|
|
,DIMENSIONS = 03:05 % %167-00061050
|
|
,BLKCNTR = 08:10 % %167-00061060
|
|
,MOM = 18:15 % %167-00061070
|
|
; %167-00061999
|
|
% %167-00062000
|
|
% FIELDS OF DATA DESCRIPTOR %167-00062010
|
|
% %167-00062020
|
|
FIELD %167-00062030
|
|
% FLAGBITF = 00:00 % %167-00062040
|
|
% DATABITF = 01:01 % ALWAYS OFF FOR A DATA DESCRIPTOR %167-00062050
|
|
PBITF = 02:01 % ON IF DESCRIPTOR POINTS TO AREA OF CORE %167-00062060
|
|
,SIZE = 08:10 % SIZE OF ARRAY ROW IF ARRAY DESC. %167-00062070
|
|
% 0 FOR INDEXED DATA DESC, OR NAME DESC. %167-00062080
|
|
% ,MOMADDRESSF = 18:15 % ADDRESS OF MOTHER DESCRIPTOR. %167-00062090
|
|
% ,ADDRESSF =33:15 % IF PBIT IS ON THEN THIS FIELD CONTAINS AN%167-00062100
|
|
% ACTUAL CORE ADDRESS. IF THE PBIT IS OFF THEN 00062110
|
|
% IF THE VALUE OF THIS FIELD IS GREATER THAN 00062120
|
|
% OR EQUAL TO 512 THEN THE FIELD CONTAINS A%167-00062130
|
|
% DALOC ADDRESS WHICH CAN BE USED TO LOCATE THE 00062140
|
|
% DATA IN THE OVERLAY DISK AREA ASSIGNED TO THE 00062150
|
|
% THE PROGRAM. IF THE VALUE OF THE FIELD IS LESS00062160
|
|
% THAN 512 THEN THIS FIELD CONTAINS A CODE %167-00062170
|
|
% INDICATING THE STATUS OF THE AREA. %167-00062180
|
|
% 0 NEVER ACCESSED OVERLAY AREA. %167-00062190
|
|
% 1 NEVER ACCESSED SAVE AREA. %167-00062200
|
|
% 2 NEVER ACCESSED OVERALY AREA WHICH 00062210
|
|
% WHICH IS ASSIGNED TO AUXMEM. 00062220
|
|
% 5 INDICATES OVERLAY IS CURRENTLY IN 00062230
|
|
% PROCESS FOR THIS AREA. %167-00062240
|
|
% 6 INDICATES OLAY HAD IRRECOVERABLE 00062250
|
|
% ERROR WHEN OVERLAYING THIS AREA.00062260
|
|
% THE NEXT ACCESS TO THE AREA WILL00062270
|
|
% CAUSE THE PROGRAM TO BE TERMI- 00062280
|
|
% NATED. %167-00062290
|
|
; %167-00062999
|
|
% %167-00067000
|
|
% MISCELLANEOUS DEFINES %167-00067010
|
|
% %167-00067020
|
|
DEFINE %167-00067030
|
|
CURBLKCNTR = 16 # % %167-00067040
|
|
,AITINDEX = 6 # % %167-00067050
|
|
,FTF = 18:18:15 # % %167-00067060
|
|
,FTC = 33:18:15 # % %167-00067070
|
|
,DELTA = 11 # % %167-00067080
|
|
,TSX = 22 # % %167-00067090
|
|
,SFINTX = 27 # % %167-00067100
|
|
,INTRPTX = 28 # % %167-00067110
|
|
; %167-00067999
|
|
INTEGER AVAIL;% 00069000
|
|
COMMENT AVAIL CONTAINS THE ADDRESS OF THE STOPPER% 00070000
|
|
FOR AVAILABLE STORAGE LINKS ITS VALUE IS% 00071000
|
|
THE HIGHEST AVAILABLE ADDRESS-1;% 00072000
|
|
DEFINE MSTART = M[0].[CF]#; 00073000
|
|
COMMENT MSTART CONTAINS THE ADDRESS OF THE% 00074000
|
|
FIRST AREA OF STORAGE AFTER END OF% 00075000
|
|
ESP PROGRAM;% 00076000
|
|
DEFINE MEND = M[0].[FF]#; 00077000
|
|
COMMENT THIS POINTS TO LAST STORAGE LINK IN% 00078000
|
|
MEMORY;% 00079000
|
|
ARRAY TAR[*]; %CONTAINS TOGLE BITS SET BY EACH JOB 00079100
|
|
DEFINE LOCKTOG(LOCKTOG1)= BEGIN TOGLE:=TOGLE AND NOT LOCKTOG1; 00079200
|
|
TAR[P1MIX]:=TAR[P1MIX] OR LOCKTOG1; END#; 00079300
|
|
DEFINE UNLOCKTOG(UNLOCKTOG1)= BEGIN TOGLE:=TOGLE OR UNLOCKTOG1; 00079400
|
|
TAR[P1MIX]:=TAR[P1MIX] AND NOT UNLOCKTOG1; END#; 00079500
|
|
REAL TOGLE; 00080000
|
|
DEFINE HP2TOG = TOGLE.[47:1]#, HP2MASK = @1# 00080100
|
|
,STATUSBIT = TOGLE.[46:1]#, STATUSMASK = @2# 00080200
|
|
,SHEETFREE = TOGLE.[45:1]#, SHEETMASK = @4# 00080300
|
|
,STACKUSE = TOGLE.[44:1]#, STACKMASK = @10# 00080400
|
|
,STOREDY = TOGLE.[43:1]#, STOREMASK = @20# 00080500
|
|
,USERDISKREADY= TOGLE.[42:1]#, USERDISKMASK= @40# 00080600
|
|
,HOLDFREE = TOGLE.[41:1]#, HOLDMASK = @100# 00080700
|
|
,NSECONDREADY = TOGLE.[40:1]#, NSECONDMASK = @200# 00080800
|
|
,ABORTABLE = TOGLE.[39;1]#, ABORTMASK = @400# 00080900
|
|
,BUMPTUTIME = TOGLE.[38:1]#, BUMPTUMASK =@1000# 00080950
|
|
,KEYBOARDREADY = TOGLE.[37:1]#, KEYBOARDMASK =@2000# 00081000
|
|
,NOBACKTALK = TOGLE.[36:1]#, NOBACKTALKMASK=@4000# 00081100
|
|
,QTRDY = TOGLE.[35:1]#, QTRDYMASK =@10000# 00081200
|
|
,INTFREE = TOGLE.[34:1]#, FREEMASK =@20000# 00081300
|
|
,SPOEDNULLOG = TOGLE.[33:1]# 00081400
|
|
,REMOTELOGFREE = TOGLE.[32:1]#, REMOTELOGMASK = @100000# 00081500
|
|
,EGGSELECTSTOPPED = TOGLE.[31:1]# 00081600
|
|
,STARTOG = TOGLE.[30:1]# 00081610
|
|
,NINETEENNOTREADING=TOGLE.[29:1]#, NINETEENMASK=@1000000# 00081620
|
|
,SMWSTOPPED=TOGLE.[28:1]#, SMWSTOPPEDMASK=@2000000# 00081630
|
|
,DCWAITING=TOGLE.[27:1]# 00081640
|
|
,DCQPTSTOPPED=TOGLE.[26:1]# 00081650
|
|
,INQUPTSTOPPED=TOGLE.[25:1]# 00081660
|
|
,MCPFREE=TOGLE.[24:1]#, MCPMASK=@40000000# 00081670
|
|
% USED TO PROTECT DISK SEGMENT ZERO 00081675
|
|
,SCRATCHDIRECTORYREADY = TOGLE.[23:1]#, 00081680
|
|
SCRATCHDIRECTORYMASK = @100000000 00081690
|
|
% USED TO PROTECT THE SCRATCHDIRECTORY 00081695
|
|
,FINDINGADDRESS=TOGLE.[22:1]# 00081700
|
|
% SET TRUE WHENEVER THE INDEPENDENT RUNNING ROUTINE 00081705
|
|
% "FINDFREEADDRESS" IS STARTED SO THAT ONLY ONE COPY 00081706
|
|
% WILL BE RUN AT ONE TIME. 00081707
|
|
,CDFREE=TOGLE.[21:1]#,CDMASK=@400000000# 00081710
|
|
% SET TRUE WHEN CONTROL DECK QUEUE IS FREE 00081711
|
|
,NOMEM=TOGLE.[15:6]# %GETSPACES HANGING 00081950
|
|
,BREAKTOG=TOGLE.[14:1]# %BREAKOUT TOG 00081960
|
|
,BREAKMASK=@100000000000# 00081970
|
|
,SEPTICTANKING = TOGLE.[13:1]# 00081972
|
|
,DIRECTORYTOG = TOGLE.[12:1]# 00081974
|
|
,DIRECTORYMASK = @400000000000# 00081976
|
|
,NOMEMTOG = TOGLE.[11:1]# % ON IF NOMEM SINCE LAST NSECOND 00081980
|
|
,MEMNO = [9:3]# % 9:2 = COUNTER FOR NSECOND 00081982
|
|
00081999
|
|
STREAM PROCEDURE MOVE(N)"WORDS FROM"(HERE)"TO"(THERE);% 00082000
|
|
VALUE N,HERE,THERE;% 00083000
|
|
COMMENT WILL MOVE 0 TO 4095 WORDS;% 00084000
|
|
BEGIN LOCAL NDIV64;% 00085000
|
|
SI~LOC N; DI~LOC NDIV64; SI~SI+6; DI~DI+7; DS~1 CHR;00086000
|
|
SI~HERE; DI~THERE;% 00087000
|
|
NDIV64(DS~32 WDS; DS~32 WDS); DS~N WDS;% 00088000
|
|
END MOVE;% 00089000
|
|
$ PAGE 00089050
|
|
PROCEDURE STOPM(B); VALUE B; BOOLEAN B; FORWARD; 00089100
|
|
LABEL DIFFCOM; 00089200
|
|
SAVE PROCEDURE FORGETSPACE(LOC);% 00090000
|
|
VALUE LOC;% 00091000
|
|
REAL LOC;% 00092000
|
|
FORWARD;% 00093000
|
|
ARRAY BED[*]; % 4MIXMAX+4 00094000
|
|
COMMENT ENTRIES IN THE BED HAVE TWO WORDS.% 00095000
|
|
THE FIRST WORD HAS THE FOLLOWING FORMAT;% 00096000
|
|
0- 2 = 5% 00097000
|
|
3- 7 = MIXINDEX% 00098000
|
|
8-17 = 0% 00099000
|
|
18-32 = F REGISTER SETTING% 00100000
|
|
33-47 = ADDRESS OF WORD TO BE TESTED.% 00101000
|
|
THE SECOND WORD IS A MASK IF BIT 0 IF OFF.% 00102000
|
|
THE SECOND WORD IS AN ACCIDENTAL ENTRY DESCRIPTOR IF BIT 000103000
|
|
IS ON;% 00104000
|
|
COMMENT P1MIX,P2MIX NOW DECLARED AT 00021700; 00105000
|
|
COMMENT P1MIX IS THE MIX INDEX FOR THE JOB BEING CURRENTLY% 00106000
|
|
PROCESSED. P1MIX = 0 MEANS NO JOB IS CURRENTLY BEING% 00107000
|
|
PROCESSED. P2MIX IS THE MIX INDEX FOR THE JOB BEING% 00108000
|
|
CURRENTLY PROCESSED ON PROCESSOR 2. IF PROCESSOR IS IDLE 00109000
|
|
THEN P2MIX = 0. IF THERE IS NO PROCESSOR 2 THEN P2MIX=-1;00110000
|
|
REAL DATE=@167; 00111000
|
|
COMMENT DATE CONTAINS TODAYS DATE;% 00112000
|
|
REAL XCLOCK=@171; 00114000
|
|
REAL READY=@172; 00121000
|
|
COMMENT READY CONTAINS THE CONTENTS OF THE READY REGISTER ON% 00122000
|
|
THE LAST READ;% 00123000
|
|
COMMENT STATUSBIT IS FALSE IF THE STATUS ROUTINE IS RUNNING AND00125000
|
|
TRUE OTHERWISE. THIS PREVENTS TWO COPIES OF STATUS FROM% 00126000
|
|
RUNNING TOGETHER;% 00127000
|
|
ARRAY PRT[*,*];% 00128000
|
|
COMMENT PRT[1,*] CONTAINS A DATA DESCRIPTOR WITH PROPER SIZE% 00129000
|
|
FIELD POINTING AT PRT FOR JOB WITH MIX INDEX = 1;% 00130000
|
|
ARRAY PRTROW=PRT[*]; % MIXMAX+1% 00131000
|
|
COMMENT PRTROW IS DOPE VECTORS FOR PRT;% 00132000
|
|
ARRAY JAR[*,*];% 00133000
|
|
% JAR HOLDS INFO OF JOBS IN PROCESS (SEE DEFINES AT 20544000) 00134000
|
|
DEFINE 00134010
|
|
LIBMAINCODE=1#, LDCNTRLCODE=3#, PRNPBTCODE=5#, 00134020
|
|
SYSJOBF=[6:3]#, SSYSJOBF=[5:3]#; 00134030
|
|
% SEE 20556700 RE SYSJOBF (SYSTEM JOB FIELD) 00134040
|
|
% SEE 20515000 RE SSYSJOBF (SHEET SYSTEM JOB FIELD) 00134050
|
|
$ SET OMIT = NOT(WORKSET) 00134100
|
|
ARRAY STQUE[*]; % QUEUE FOR "STOPPED" JOBS, 16 LONG 00134110
|
|
DEFINE STQUEUEMAX = 15#; 00134115
|
|
ARRAY OLAYTIME[*]; % USED FOR STORAGE OF OLAY OVERHEAD TIME 00134120
|
|
PROCEDURE WORKSET(N); VALUE N; RAEL N; FORWARD; 00134125
|
|
ARRAY WKSETDATA[*]; 00134130
|
|
% ARRAY USED FOR STORAGE OF WORKSET INFORMATON 00134140
|
|
DEFINE WKSETCLOCK = WKSETDATA[0]#, 00134150
|
|
% TIME AT WHICH WORKSET ROUTINE HAS STARTED 00134160
|
|
% TO RUN 00134170
|
|
WKSETRUNNING = WKSETDATA[1].[47:1]#, 00134180
|
|
% TOGGLE TO INDICATE THAT WORKSET IS RUNNING 00134190
|
|
WKSETNOSELECT = WKSETDATA[1].[46:1]#, 00134200
|
|
% TOGGLE TO PREVENT SELECTRUN FROM PLACING 00134210
|
|
% ADDITIONAL JOBS IN THE MIX 00134220
|
|
WKSETMONITOR = WKSETDATA[1].[45:1]#, 00134230
|
|
% TOGGLE USED TO "MONITOR" WORKSETDATA 00134240
|
|
WKSETMAXOLAY = WKSETDATA[2]#, 00134250
|
|
% MAX. FRACTION OF PROCESS TIME TO COMPUTE 00134260
|
|
% MAXIMUM ALLOWABLE OLAY TIME 00134270
|
|
WKSETOLERANCE = WKSETDATA[3]#, 00134280
|
|
% FRACTION USED TO CMOPARE JOB STATISTICS 00134290
|
|
% (ALLOWABLE VARIANCE TO COMPUTE MAX.VALUES) 00134300
|
|
WKSETINSTRUCT = WKSETDATA[4]#, 00134310
|
|
% INSTRUCTIONS FOR COMPARING JOB STATISTICS 00134320
|
|
% FRACTION OF TOTAL SYSTEM CORE WHICH MUST 00134330
|
|
% BE KEPT AVAILABLE 00134340
|
|
WKSETCYCLETIME = WKSETDATA[5]#, 00134350
|
|
% CYCLE TIME (64THS OF A SECOND) FOR WHICH 00134360
|
|
% THE WORKSET ROUTINE IS RUN, QUEUED AT 00134370
|
|
% "TIME" IN THE OUTER BLOCK 00134380
|
|
WKSETSTOPJOBS = WKSETDATA[6]#, 00134390
|
|
% BIT INDEX (TWO(MIX)) FOR JOBS WHICH HAVE 00134400
|
|
% BEEN "ST-ED" BY THE WORKSET ROUTINE 00134410
|
|
STFIRST = WKSETDATA[7].[CF]#, 00134420
|
|
% INDEX TO FIRST ENTRY IN THE "STQUE" 00134430
|
|
STNEXT = WKSETDATA[7].[FF]#, 00134440
|
|
% INDEX T NEXT AVAILABLE SLOT IN "STQUE" 00134450
|
|
WKSETSWITCHTIME= WKSETDATA[8]#, 00134460
|
|
% TIME OF LAST "JOB" OR "EOJ" EVENT 00134470
|
|
WKSETDATASIZE = 9#; % SIZE OF THE WKSETDATA ARRAY 00134480
|
|
$ POP OMIT % WORKSET 00134490
|
|
ARRAY INTRNSC[*]; REAL INTSIZE;% RE-ENTRANT INTRINSICS ON USER DISK 00135000
|
|
ARRAY INTABLE[*,*], INTABLEROW=INTABLE[*];% 00135100
|
|
$ SET OMIT = NOT(AUXMEM) 00135199
|
|
ARRAY SHEET[*]; % 5% 00136000
|
|
ARRAY JARROW=JAR[*]; % MIXMAX+1% 00138000
|
|
DEFINE TABCNT[TABCNT1] = JARROW[TABCNT1].[FF]#; 00138100
|
|
COMMENT TABCNT IS THE NUMBER OF PROCESSES WHICH HAVE CHECKED 00138110
|
|
JARROW AND ARE CURRENTLY ACCESSING MIX TABLES. IT ASSURES 00138120
|
|
THAT THE TABLES DONT VANISH BENEATH THOSE PROCESSES; 00138130
|
|
COMMENT ENTRIES IN THE SLATE HAVE TWO WORDS. EACH ENTRY% 00140000
|
|
DESCRIBES AN INDEPENDENT ROUTINE WHICH NEEDS TO BE STARTED00141000
|
|
RUNNING. NOTHING TO DO STARTS THESE ROUTINES.% 00142000
|
|
THE FIRST WORD OF AN ENTRY IS A PARAMETER TO THE ROUTINE. 00143000
|
|
THE SECOND WORD OF AN ENTRY IS THE PRT ADDRESS OF THE% 00144000
|
|
ROUTINE.% 00145000
|
|
NSLATE AND LSLATE ARE POINTERS T THE SLATE.% 00146000
|
|
NSLATE POINTS AT LAST ENTRY WHICH WAS STARTED.% 00147000
|
|
LSLATE POINTS AT LAST ENTRY PLACED IN THE SLATE;% 00148000
|
|
REAL JOBNUM;% 00149000
|
|
COMMENT JOBNUM POINTS AT LAST ENTRY IN BED;% 00150000
|
|
COMMENT STACKUSE IS TRUE IF THE INDEPEDENT STACK IS NOT IN USE.00152000
|
|
OTHERWISE FALSE;% 00153000
|
|
BOOLEAN NOPROCESSOTOG;% 00154000
|
|
COMMENT NOPROCESSTOG IS TRUE IF NORMAL STATE PROCESSING IS% 00155000
|
|
ALLOWED, OTHERWISE IT IS FALSE. IT IS USED BY OVERLAY AND00156000
|
|
OTHERS TO PREVENT CONFUSION;% 00157000
|
|
REAL SOFTI; % NUMBER OF JOBS IN MIX HAVING SOFTWARE INTERRUPTS DECLARED 00157100
|
|
REAL WITCHINGHOUR,WORDOFEASE; 00157500
|
|
COMMENT THESE USED TO BE CONSTANTS IN THE OUTER BLOCK BUT WERE 00157600
|
|
MOVED HERE SO EVERYONE COULD USE THEM. THEY CONTAIN: 00157700
|
|
WITCHINGHOUR 5184000 00157800
|
|
WORDOFEASE @2525252525252525 00157900
|
|
; 00158000
|
|
DEFINE NDX=3#; % NUMBER OF ENTRIES PER JOB IN NFO ARRAY 00158100
|
|
ARRAY NFO[*]; %MIXMAX|NDX 00158200
|
|
COMMENT NFO CONTAINS THE FOLLOWING FOR EACH ACTIVE MIX INDEX; 00158300
|
|
% NFO[(MIX-1)|NDX] = FILE PARAMETER BLOCK DATA DESCRIPTOR 00158400
|
|
% NFO[(MIX-1)|NDX+1] = SEGMENT DICTIONARY NAME DESCRIPTOR 00158500
|
|
% NFO[(MIX-1)|NDX+2].[CF] = LOCATION OF BOTTOM OF STACK (B-WORD) 00158600
|
|
% NFO[(MIX-1)|NDX+2].[FF] = ESTIMATED CORE REQUIREMENTS 00158700
|
|
% NFO[(MIX-1)|NDX+2].[1:17] = CLOCK TIME AT BOJ 00158800
|
|
ARRAY ESTACK[*]; % 128% 00159000
|
|
ARRAY PROCTIME[*]; % MIXMAX+1% 00161000
|
|
COMMENT PROCTIME[I] CONTAINS PROCESSOR TIME FOR JOB WITH% 00162000
|
|
MIX INDEX = I;% 00163000
|
|
ARRAY IOTIME[*]; % MIXMAX+1% 00164000
|
|
COMMENT IOTIME[I] CONTAINS I-O TIME FOR JOB WITH MIX INDEX =1; 00165000
|
|
$ SET OMIT = NOT(NEWLOGGING) 00165009
|
|
DEFINE EUIOHOLDER=DIRECTORYTOP-5#, 00165800
|
|
EUTAPER=.98#, 00165810
|
|
DISKAVAILTABLEMAX=130#; 00165820
|
|
INTEGER NEUP; ARRAY EUIO[*]; ARRAY PEUIO[*]; 00166000
|
|
$ SET OMIT = NOT(SHAREDISK ) 00166002
|
|
$ SET OMIT = SHAREDISK 00166005
|
|
ARRAY AVTABLE[*] ; 00166006
|
|
$ POP OMIT 00166007
|
|
COMMENT NEUP.[CF] CONTAINS THE NUMBER OF EUS ON DKA. 00166010
|
|
NEUP.NEUF CONTAINS THE TOTAL NUMBER OF EUS ON THE SYSTEM. 00166025
|
|
EUIO AND PEUIO CONTAIN THE I-O TIME USED BY A GIVEN EU. 00166030
|
|
THIS INFORMATION IS USED BY GETUSERDISK IN AN ATTEMPT TO 00166040
|
|
MINIMIZE EU CONFLICT; 00166050
|
|
DEFINE MIXF = [3:5]#;% 00168000
|
|
ARRAY CHANIO[*]; 00169000
|
|
ARRAY CHANNEL[*]; % 5% 00170000
|
|
COMMENT CHANNEL[I] CONTAINS LOGICAL UNIT OF LAST DESCRIPTOR% 00171000
|
|
SENT OUT ON CHANNEL I;% 00172000
|
|
ARRAY FINALQUE[*]; % 32% 00173000
|
|
ARRAY LOCATQUE[*]; % 32% 00174000
|
|
COMMENT IOQUE,FINALQUE, AND LOCATQUE TOGETHER WITH UNIT FORM% 00175000
|
|
THE I-O QUEUE. AN I-O REQUEST FOR LOGICAL UNIT U REQUIRES00176000
|
|
THREE WORDS OF SPACE IN THE I-O QUEUE. IF THE REQUEST% 00177000
|
|
OCCUPIES POSITION S IN THE I-O QUEUE, THEN IOQUE[S] )% 00178000
|
|
I-O DESCRIPTOR FOR THIS REQUEST, FINAL[S] = I-O DESCRIPTOR00179000
|
|
SKELETON TO BE USED AT I-O COMPLETE TIME TO REBUILD% 00180000
|
|
I-O DESCRIPTOR, LOCATQUE[S] = LOCATION OF I-O DESCRIPTOR% 00181000
|
|
AT TIME OF REQUEST. LOCATQUE[S] CONTAINS SOME ADDITIONAL 00182000
|
|
INFORMATION. IN PARTICULAR:% 00183000
|
|
0- 2 = 5% 00184000
|
|
3- 7 = MIX INDEX OF REQUESTER% 00185000
|
|
8 = I/O IS READ LOCK WHICH HAD ERROR (SHAREDISK).00185100
|
|
9 = OLAY I/O (IOFINISH PLACES RESULT ON ERROR). 00185500
|
|
10 = NO MEM MESSAGE. 00186000
|
|
11 = ERROR RECOVERY IN PROCESS ON THIS I-O 00186100
|
|
12-17 = LOGICAL UNIT NUMBER% 00187000
|
|
18-32 = INDEX OF NEXT REQUEST TO BE DONE ON THIS UNIT00188000
|
|
OR @77777 IF NO NEXT REQUEST% 00189000
|
|
33-47 = ORIGINAL LOCATION OF I-O DESCRIPTOR.% 00190000
|
|
UNIT[U] CONTAINS INFORMATION ABOUT LOGICAL UNIT U.% 00191000
|
|
1- 4 = TYPE OF I/O DEVICE% 00192000
|
|
5-12 = ERROR FIELD OF LAST I/O DONE ON THIS UNIT% 00193000
|
|
13 = UNIT NOT READY BIT% 00194000
|
|
14 = ERROR BIT (ON IF ERROR)% 00195000
|
|
15 = WAIT BIT (ON IF UNIT IS WAITING FOR A CHANNEL00196000
|
|
16-17 = PROCESS BITS (USUALLY BOTH ON IF UNIT IS IN% 00197000
|
|
PROCESS OR BOTH OFF. WITH PRINTERS THE% 00198000
|
|
I-O FINISH SETS OFF 16 AND THE PRINTER% 00199000
|
|
FINISH SETS OFF 17)% 00200000
|
|
18-32 = INDEX OF FIRST I-O REQUEST FOR WHICH SERVICE 00201000
|
|
IS NOT COMPLETE% 00202000
|
|
33-47 = INDEX OF LAST UNSERVICED I-O REQUEST.% 00203000
|
|
THE SPACES NOT USED IN THE I-O QUEUE ARE LINKED TOGETHER% 00204000
|
|
THROUGH IOQUE. THE FIRST AVAILABLE IS IN IOQUEAVAIL;% 00205000
|
|
REAL IOQUESLOTS,IOQUEAVAIL; 00205500
|
|
ARRAY IOQUE[*]; 00206000
|
|
DEFINE RETURNIOSPACE(RETURNIOSPACE1) = 00206500
|
|
BEGIN IOQUESLOTS:=IOQUESLOTS+1; 00207000
|
|
IOQUE[RETURNIOSPACE1]:=IOQUEAVAIL; 00207500
|
|
IOQUEAVAIL:=RETURNIOSPACE1; 00208000
|
|
END#; 00208500
|
|
ARRAY UNIT[*]; 00209000
|
|
COMMENT UNIT NOW FILLED IN INITIALIZE; 00210000
|
|
ARRAY TINU[*]; 00241700
|
|
COMMENT TINU NOW FILLED IN INITIALIZE; 00241800
|
|
ARRAY WAITQUE[*]; % 8% 00278000
|
|
REAL NEXTWAIT,FIRSTWAIT;% 00279000
|
|
COMMENT WAITQUE IS A QUEUE OF UNITS FOR WHICH THERE ARE% 00280000
|
|
REQUESTS BUT NO CHANNEL IS AVAILABLE. NEXTWAIT AND% 00281000
|
|
FIRSTWAIT ARE POINTERS AT THE WAITQUE. NEXTWAIT IS THE% 00282000
|
|
NEXT AVAILABLE SLOT IN WAITQUE AND FIRSTWAIT POINTS AT% 00283000
|
|
NEXT UNIT TO BE USED WHEN A CHANNEL IS AVAILABLE;% 00284000
|
|
ARRAY LABELTABLE[*]; % 32% 00285000
|
|
ARRAY MULTITABLE[*]; % 32% 00286000
|
|
ARRAY RDCTABLE[*]; % 32% 00287000
|
|
ARRAY PRNTABLE[*];% 00288000
|
|
ARRAY REPLY[*];% 00289000
|
|
COMMENT LABELTABLE, MULTITABLE, AND RDCTABLE CONTAIN LABEL INFORMATION% 00290000
|
|
BY LOGICAL UNIT NUMBER AS FOLLOWS:% 00291000
|
|
LABELTABLE[I] CONTAINS THE FILE ID FOR LOGICAL UNIT I.% 00292000
|
|
MULTITABLE[I] CONTAINS THE CORRESPONDING MULTI-FILE ID.% 00293000
|
|
RDCTABLE[I] CONTAINS THE CORRESPONDING REEL NUMBER (IN [14:10]),00294000
|
|
CREATION DATE (IN [24:17]), AND CYCLE (IN [41:7]);% 00295000
|
|
$ SET OMIT = NOT(SHAREDISK) 00295999
|
|
REAL OPTION;% 00297000
|
|
REAL ILL,INQCT; 00299000
|
|
REAL PINGO; 00301000
|
|
REAL READQ,RRNCOUNT; DEFINE PUT=SET#; 00301100
|
|
$ SET OMIT = NOT(DATACOM ) 00301200
|
|
ARRAY TRANSACTION[*]; % 32% 00304000
|
|
DEFINE ETRLNG = 5#; % LENGTH OF ENTRY IN FILE BLOCK% 00305000
|
|
SAVE REAL PROCEDURE TWO(N); VALUE N; INTEGER N; 00306000
|
|
BEGIN REAL T=+1; 00307000
|
|
STREAM(N:=N:=47-N,T:=[T]); 00308000
|
|
BEGIN SKIP N DB; DS:=SET; END; 00308500
|
|
END TWO; 00309000
|
|
REAL SYLLABLE;% 00310000
|
|
$ SET OMIT = NOT(SHAREDISK) 00310099
|
|
$ SET OMIT = SHAREDISK 00310199
|
|
DEFINE SYSNO=0#, SYSMAX=1#; 00310200
|
|
$ POP OMIT 00310201
|
|
COMMENT ANALYSIS PLACES THE SYLLABLE THAT CAUSED THE INTERRUPT 00311000
|
|
IN SYLLABLE. THIS IS USED BY PRESENCE BIT, FLAG BIT, AND 00312000
|
|
VARIOIUS ERRORS;% 00313000
|
|
PROCEDURE FORGETUSERDISK(A,L);VALUE A,L;REAL A,L;FORWARD;% 00316000
|
|
REAL PROCEDURE PETUSERDISK(N,T);VALUE N,T;REAL N,T;FORWARD ; 00316100
|
|
$ SET OMIT = NOT DEBUGGING 00316999
|
|
$ SET OMIT = NOT DEBUGGING 00330999
|
|
ARRAY DALOC[*,*], DALOCROW[*]; 00333000
|
|
$ SET OMIT = NOT(BREAKOUT) 00333099
|
|
REAL OLAYMASK;% FOR LOCKING OUT GETMOREOLAYDISK BY MIX INDEX 00336000
|
|
PROCEDURE USERDISKSPECIALCASE(Q,R,U,J);VALUE Q,J;REAL Q,R,J; 00336100
|
|
ARRAY U[*]; FORWARD ; 00336110
|
|
DEFINE BASE=30268#,% 00338000
|
|
CHUNKSIZE=500#;% 00339000
|
|
REAL LEFTOFF; COMMENT POINTER TO CYCLE FOR OLAY;% 00341000
|
|
SAVE PROCEDURE DISKRTN(SEGNO, SIZE); 00363000
|
|
VALUE SEGNO, SIZE; 00363100
|
|
INTEGER SEGNO, SIZE; 00363200
|
|
FORWARD; 00363300
|
|
PROCEDURE FORGETSPDISK(SEG);VALUE SEG;REAL SEG;FORWARD; 00364000
|
|
SAVE INTEGER PROCEDURE DISKSPACE(NWORDS,P1MIX,AUX);% 00365000
|
|
VALUE NWORDS,P1MIX,AUX; 00366000
|
|
INTEGER NWORDS,P1MIX;REAL AUX; 00367000
|
|
FORWARD; 00368000
|
|
PROCEDURE STATUS;% 00369000
|
|
FORWARD;% 00370000
|
|
PROCEDURE INTERRUPT(TYPE);VALUE TYPE;REAL TYPE; FORWARD; 00370500
|
|
REAL PROCEDURE FINDOUTPUT(MID,FID,TYPE,FORMS,REEL,CDATE,CYCLE,KIND);% 00371000
|
|
VALUE MID,FID,TYPE,FORMS,REEL,CDATE,CYCLE,KIND;% 00372000
|
|
REAL MID,FID,TYPE,FORMS,REEL,CDATE,CYCLE,KIND; FORWARD;% 00373000
|
|
REAL PROCEDURE FINDINPUT(MID,FID,REEL,CDATE,CYCLE,COBOL,UL,OF,MODE,FN); 00374000
|
|
VALUE MID,FID,REEL,CDATE,CYCLE,COBOL,UL,OF,MODE,FN);% 00375000
|
|
REAL MID,FID,FEEL,CDATE,CYCLE,COBOL,UL,OF,MODE,FN; FORWARD;00376000
|
|
PROCEDURE STARTIMING(FN,U); VALUE FN,U; REAL FN,U; FORWARD;% 00377000
|
|
PROCEDURE FILEOPEN(X,A); VALUE X,A; INTEGER X,A; FORWARD; 00379000
|
|
SAVE PROCEDURE SAVEOPEN(A); VALUE A; REAL A; 00379100
|
|
BEGIN FILEOPEN(2,A) END; 00379200
|
|
PROCEDURE MIXPRINT(Q); VALUE Q REAL Q; FORWARD; 00379400
|
|
% TYPES <JOB SPECIFIERS> FOR EACH ACTIVE MIX INDEX 00379500
|
|
PROCEDURE JOBMESS(MIX,Q,A,B,C,D); VALUE MIX,Q,A,B,C,D; 00379600
|
|
REAL MIX,Q,A,B,C,D; FORWARD; 00379700
|
|
PROCEDURE SETNOTINUSE(U,RWL); VALUE U,RWL; REAL U,RWL; FORWARD; 00380000
|
|
DEFINE STOPTIMING=STARTTIMING#; 00382000
|
|
PROCEDURE FILLBUFFERS(CURRENT,FINAL,COBOL,NR); 00385000
|
|
VALUE CURRENT,FINAL,COBOL,NR; REAL CURRENT,FINAL,COBOL,NR; 00385500
|
|
FORWARD; 00386000
|
|
DEFINE GETBUFFERS=FILLBUFFERS#; 00387000
|
|
PROCEDURE REALFILECLOSE(A); VALUE A; REAL A; FORWARD; 00389000
|
|
SAVE PROCEDURE FILECLOSE(A); VALUE A; REAL A; 00389100
|
|
BEGN REALFILECLOSE(A) END; 00389200
|
|
REAL PROCEDURE DISKADDRESS(MID,FID,FPB3,A,H,IO); % (SHM)00390000
|
|
VALUE MID,FID,FPB3,A,H,IO; % (SHM)00390100
|
|
REAL MID,FID,FPB3,A,IO; ARRAY H[*]; % (SHM)00390200
|
|
FORWARD;% 00391000
|
|
PROCEDURE BLASTQ(U); VALUE U; REAL U; FORWARD;% 00392000
|
|
REAL PROCEDURE FILEHEADER(MID,FID,NROWS,SIZE,BLEN,RLEN,S);% 00393000
|
|
VALUE MID,FID,NROWS,SIZE,BLEN,RLEN,S;% 00394000
|
|
REAL MID,FID;% 00395000
|
|
INTEGER NROWS,SIZE,BLEN,RLEN,S; FORWARD;% 00396000
|
|
PROCEDURE PURGEIT(U); VALUE U; INTEGER U; FORWARD;% 00397000
|
|
REAL ESPTAB,ESPCOUNT; 00399000
|
|
REAL DIRDSK=@177; 00400500
|
|
REAL ESPDISKBOTTOM; % LOWEST ADDRESS OF ESPDISK 00401000
|
|
REAL ESPDISKTOP; % HIGHEST ADDRESS OF ESPDISK 00401100
|
|
REAL MESSAGEHOLDER;% 00402000
|
|
DEFINE USEDRA = OPTION.[47:1]#,% 00403000
|
|
USEDRB = OPTION.[46:1]#,% 00404000
|
|
BOJMESS =OPTION.[45:1]#,% 00405000
|
|
EOJMESS =OPTION.[44:1]#,% 00406000
|
|
OPNMESS =OPTION.[43:1]#,% 00407000
|
|
TERMGO =OPTION.[42:1]#,% 00408000
|
|
GIVEDATE = OPTION.[41:1]#,% 00409000
|
|
GIVETIME = OPTION.[40:1]#,% 00410000
|
|
SAMEBREAKTAPE=OPTION.[39:1]#, % NOT CURRENTLY USED, 3/73 00411000
|
|
AUTOPRINT=OPTION.[38:1]#, 00412000
|
|
CLEARWRS=OPTION.[37:1]#, 00413000
|
|
NOTIFYOP=OPTION.[36:1]#,% 00414000
|
|
DISCONDC = OPTION.[36:1]#, 00414100
|
|
COPNMESS=OPTION.[35:1]#,% 00415000
|
|
CLOSEMESS=OPTION.[34:1]#,% 00416000
|
|
ERRORMSG=OPTION.[33:1]#, 00416050
|
|
RETMSG=OPTION.[32:1]#, 00416100
|
|
LIBMSG=OPTION.[31:1]#, 00416200
|
|
SCHEDMSG=OPTION.[30:1]#, 00416300
|
|
SECMSG=OPTION.[29:1]#, 00416400
|
|
DSKTOG=OPTION.[28:1]#, 00416500
|
|
RELTOG=OPTION.[27:1]#, 00416520
|
|
PBDREL=OPTION.[26:1]#, 00416550
|
|
CHECKLINK = OPTION.[25:1]#, 00416560
|
|
DISKMSG=OPTION.[24:1]#, 00416570
|
|
LIBERR =(OPTION.[22:1] OR (SPOUTUNIT.[CF]=0))#, % FROM SPO%589-00416590
|
|
USEPRD=OPTION.[21:1]#,% %DS00416600
|
|
SVPBT =OPTION.[20:1]#,% 00416610
|
|
RSTOG=OPTION.[19:1]#, 00416620
|
|
AUTOUNLD=OPTION.[18:1]#, 00416630
|
|
AUTORN = OPTION.[17:1]#, %902-00416710
|
|
CODEOLAY=OPTION.[16:1]#, 00416730
|
|
COREST=OPTION.[15:1]#, 00416740
|
|
DATAOLAY=OPTION.[14:1]#, 00416750
|
|
HALTSET=OPTION.[13:1]#, 00416751
|
|
STOPTEST= OPTION.[8:1]#, 00416760
|
|
PUNCHLCK=OPTION.[7:1]#, 00416770
|
|
CDONLY=OPTION.[6:1]#, 00416780
|
|
PRTONLY=OPTION.[5:1]#, 00416790
|
|
SEPARATE=OPTION.[4:1]#, 00416800
|
|
MOD3IOS=OPTION.[2:1]#, 00416990
|
|
AUTOMESS = OPTION.[1:1]#, 00416992
|
|
AUTODS = OPTION.[1:1]#, % ACTS FOR OPERATOR %747-00416995
|
|
XXXXXX= OPTION.[0:1]#;% 00417000
|
|
DEFINE BOJBIT = 45[18:42:6]#, 00417010
|
|
EOJBIT = 44[18:42:6]#, 00417020
|
|
OPNBIT = 43[18:42:6]#, 00417030
|
|
COPNBIT = 35[18:42:6]#, 00417040
|
|
CLOSEBIT=34[18:42:6]#, 00417050
|
|
ERRRBIT = 33[18:42:6]#, 00417052
|
|
LIBBIT = 31[18:42:6]#, 00417060
|
|
SCHEDBIT=30[18:42:6]#, 00417070
|
|
SECBIT = 29[18:42:6]#, 00417075
|
|
RSBIT = 19[18:42:6]#, 00417080
|
|
NEVERBIT=62[18:42:6]#, 00417090
|
|
ALWAYSBIT=63[18:42:6]#; 00417100
|
|
REAL USERDISKBOTTOM; 00418000
|
|
% DISK ADDRESS OF USER DISK AVAILABLE TABLE 00418010
|
|
REAL DIRECTORYTOP; 00418050
|
|
% DISK ADDRESS OF DIRECTORYTOP SEGMENT--STORED IN M[1] 00418060
|
|
%BY MCP LOADER AND STORED IN MCP PRT(DIRECTORYTOP) 00418070
|
|
REAL DISKBOTTOM; 00418100
|
|
% DISK ADDRESS OF TOP FO BYPASS DIRECTORY, USED IN SCRAMBLE. 00418200
|
|
$ SET OMIT = NOT(SHAREDISK) 00418799
|
|
$ SET OMIT = SHAREDISK 00418849
|
|
REAL HOLDER,NEXTSLOT,BYPASS; 00418850
|
|
$ SET OMIT = NOT STATISTICS OR OMIT 00418859
|
|
DEFINE HOLDMAX = 30#; % MAXIMUM NUMBER OF ENTRIES IN HOLDLIST 00418900
|
|
COMMENT THE HOLDLIST CONTAINS A ONE WORD ENTRY FOR EACH PROCESS 00418910
|
|
THAT IS WAITING TO USE A FILE THAT IS ALREADY IN USE. 00418915
|
|
HOLDLIST[I].[FF]=THE CORE ADDRESS OF THE WORD THAT THE 00418920
|
|
WAITING PROCESS IS SLEEPING ON. 00418925
|
|
HOLDLIST[I].[CF]=THE DISK ADDRESS OF THE FILE HEADER 00418930
|
|
THAT IS BEING WAITED FOR. 00418935
|
|
HOLDLIST[I].[10:8]=MIX INDEX OF THE PROCESS THAT MADE THE 00418937
|
|
ENTRY. (TSSMCP ONLY) 00418938
|
|
HOLDLIST[I].[2:2]=THE SYSTEM NUMBER (SYSNO) OF THE SYSTEM 00418940
|
|
THAT MADE THE ENTRY (SHAREDISK ONLY). 00418945
|
|
HOLDLIST[I].[1:1] IS SET BY A SYSTEM TO NOTIFY ANOTHER 00418950
|
|
SYSTEM TO AWAKEN THE PROCESS THAT MADE THE ENTRY. 00418955
|
|
THE NSECOND ROUTINE EXAMINES THE HOLDLIST IN 00418960
|
|
ORDER TO CHECK FOR THIS CONDITION (SHAREDISK ONLY). 00418965
|
|
DIRECTORYSEARCH, NSECOND, AND CLEANOUT ARE THE PROCEDURES 00418970
|
|
THAT MANIPULATE THE HOLDLIST. 00418975
|
|
00418980
|
|
THE WORDS ASSOCIATED WITH DIRECTORY HANDLING ARE: 00418985
|
|
HOLDER.[CF] = DISK ADDRESS OF HOLDLIST. 00418990
|
|
.[FF] = NUMBER OF ENTRIES IN HOLDLIST. 00418995
|
|
NEXTSLOT = DISK ADDRESS OF FIRST HEADER IN QUEUE OF 00419000
|
|
EMPTY SLOTS IN DIRECTORY (NEXTSLOT QUEUE). 00419005
|
|
BYPASS.[CF] = LOWEST ADDRESS OF THE BYPASS DIRECTORY. 00419010
|
|
.[FF] = HIGHEST ADDRESS OF THE MAIN DIRECTORY. 00419015
|
|
ON SHAREDISK, HOLDER, NEXTSLOT AND BYPASS ARE KEPT IN THE FIRST 00419020
|
|
THREE WORDS OF THE DISK SEGMENT LOCATED AT DIRECTORYTOP+2. A 00419025
|
|
READ LOCK MUST BE DONE BEFORE ACCESSING THE HOLDLIST OR NEXTSLOT00419030
|
|
QUEUE OR EXPANDING EITHER THE MAIN OR BYPASS DIRECTORIES. 00419035
|
|
END COMMENT; 00419040
|
|
INTEGER RESTARTING; %PASSLEVEL CONTROL (RS) 00419100
|
|
$ SET OMIT = NOT(BREAKOUT) 00419104
|
|
DEFINE SCRAMBLE(SCRAMBLE1,SCRAMBLE2)=(-2| 00419110
|
|
((SCRAMBLE1.[6:18]+SCRAMBLE1.[24:24]) MOD MODULUS|MODULUS+ 00419120
|
|
(SCRAMBLE2.[6:18]+SCRAMBLE2.[24:24]) MOD MODULUS) + 00419130
|
|
DISKBOTTOM)#, 00419140
|
|
MODULUS=13#, DIRMOD=169#; 00419150
|
|
COMMENT 00419210
|
|
THE RELATIONSHIP BETWEEN MODULUS AND DIRMOD IS: 00419220
|
|
DIRMOD := MODULUS | MODULUS, WHERE MODULUS IS A LOW 00419230
|
|
ODD PRIME. (THE RECOMMENDED VALUE OF MODULUS IS 13). 00419240
|
|
FOR SYSTEMS WITH ONLY 4 MEMORY MODS, MODULUS MUST BE 00419250
|
|
SET TO A SMALLER VALUE SO THAT DIRECTORYBUILDER WILL 00419260
|
|
NOT GET A NO-MEM, MAKING IT IMPOSSIBLE TO HALT/LOAD. 00419270
|
|
IT IS SUGGESTED THAT MODULUS BE SET TO 11, DIRMOD TO 121 00419280
|
|
FOR A SYSTEM WITH 4 MODS. IT MAY BE NECESSARY TO SET IT 00419290
|
|
SMALLER, DEPENDING UPON DISK CONFIGURATION; 00419300
|
|
ARRAY FS[*,*]; ARRAY FSROW=FS[*]; 00419400
|
|
ARRAY USERDISK[*]; 00419900
|
|
$ SET OMIT = NOT DEBUGGING %763-00419999
|
|
$ SET OMIT = SHAREDISK 00421099
|
|
DEFINE LOCKDIRECTORY = 00421100
|
|
BEGIN IF NOT DIRECTORYTOG THEN SLEEP([TOGLE].DIRECTORYMASK);00421200
|
|
LOCKTOG(DIRECTORYMASK); 00421300
|
|
END#, 00421400
|
|
UNLOCKDIRECTORY = 00421500
|
|
BEGIN 00421600
|
|
UNLOCKTOG(DIRECTORYMASK); 00421700
|
|
END#; 00421800
|
|
$ POP OMIT 00421801
|
|
BOOLEAN OKSEGZEROWRITE; %20A-00422100
|
|
$ SET OMIT = NOT SHAREDISK 00422490
|
|
REAL LOGFREE,IOMASK,SAVEWORD; 00425000
|
|
REAL CORE; 00426000
|
|
COMMENT 00426100
|
|
CORE.[4:14] = MULTIPROCESSING FACTOR (|100) 00426200
|
|
CORE.[18:15] = SUM OF CORE ESTIMATES FOR ALL JOBS 00426300
|
|
NOW ACTIVE IN THE MIX (DIV 64) 00426400
|
|
CORE.[33:15] = ACMOUNT OF CORE MEMORY INITIALLY AVAILABLE FOR 00426500
|
|
PROCESSING NORMAL STATE JOBS (DIV 64) 00426600
|
|
PROCEDURE SELECTRUN(F); VALUE F; REAL F; FORWARD; 00426700
|
|
DEFINE SELECTION = INDEPENDENTRUNNER(P(.SELECTRUN),0,160)#; 00426800
|
|
PROCEDURE CONTROLCARD(A);VALUE A;REAL A; FORWARD;% 00427000
|
|
REAL PROCEDURE DIRECTORYSEARCH(A,B,C);VALUE A,B,C;% 00428000
|
|
REAL A,B,C; FORWARD;% 00429000
|
|
DEFINE HEADERUNLOCK=HU#, 00430000
|
|
HU(HU1,HU2,HU3)= 00430100
|
|
P(MKS,HU3,HU1,HU2,9,DIRECTORYSEARC,DEL)#; 00430200
|
|
REAL DIRECTORYSEARC=DIRECTORYSEARCH; 00430225
|
|
%%HEADERUNLOCK CAN BE USED TO WRITE IN THE DIRECTORY A CHANGED 00430250
|
|
%% HEADER, TURN OFF THE INTERLOCK BIT AND DO THE FORGETSPACE 00430275
|
|
%% IT MAY BE CALLED ONLY AFTER A DIRECTORYSEARCH(A,B,4) 00430300
|
|
%% THE PARAMETERS PASSED MUST BE (A,B,DS): 00430400
|
|
%% WHERE A,B ARE THE SAME AS PASSED TO THE DIRECTORYSEARCH 00430500
|
|
%% AND DS IS THE RESULT OF THAT DIRECTORYSEARCH 00430600
|
|
REAL OLDIDLETIME; 00430900
|
|
PROCEDURE ARTN(A,N); VALUE A,N; ARRAY A[*]; INTEGER N; FORWARD;% 00431000
|
|
SAVE PROCEDURE DISKIO(L,C,S,D); VALUE C,S,D; REAL L; INTEGER C,S,D;% 00432000
|
|
FORWARD;% 00433000
|
|
ARRAY MESSAGETABLE[*]; 00435000
|
|
DEFINE MESSAGETABLESIZE = 5#; % NUMBER OF MESSAGETABLE ENTRIES 00436000
|
|
DEFINE 00437000
|
|
OPTIONSZ = (MESSAGETABLE[0].[8:10])#, 00438000
|
|
TERMSGSZ = (MESSAGETABLE[1].[8:10])#, 00439000
|
|
KEYMSGSZ = (MESSAGETABLE[2].[8:10])#, 00440000
|
|
CCTABLSZ = (MESSAGETABLE[3].[8:10])#, 00441000
|
|
$ SET OMIT = PACKETS 00449999
|
|
$ SET OMIT = NOT(PACKETS) 00451499
|
|
DEFINE 00451500
|
|
SPOUT(SPOUT1)=SPOUTER(SPOUT1,0,1)#, 00451600
|
|
SPOUTIT(SPOUTIT1.SPOUTIT2)=SPOUTER(SPOUTIT1,0,SPOUTIT2)#; 00451700
|
|
PROCEDURE SPOUTER(MESSAGE,UNITNO,TYPE); 00451800
|
|
VALUE MESSAGE,UNITNO,TYPE; 00451900
|
|
REAL MESSAGE,UNITNO,TYP; 00452000
|
|
FORWARD; 00452100
|
|
DEFINE 00452200
|
|
FILEMESS=FMS#, 00452300
|
|
FMS(FMS1,FMS2,FMS3,FMS4,FMS5,FMS6,FMS7)= 00452400
|
|
FILEMESSAGE(FMS1,FMS2,FMS3,FMS4,FMS5,FMS6,FMS7,1)#; 00452500
|
|
PROCEDURE FILEMESSAGE(1,K,M,F,R,D,C,TYPE); 00452600
|
|
VALUE I,K,M,F,R,D,C,TYPE; 00452700
|
|
REAL I,K,M,F,R,D,C,TYPE; 00452800
|
|
FORWARD; 00452900
|
|
$ POP OMIT 00452901
|
|
PROCEDURE LBMESS(FN,SN,I1,I2,F,UNITNO,X); 00454000
|
|
VALUE FN,SN,I1,I2,F,UNITNO,X; 00454100
|
|
REAL FN,SN,I1,I2,E,UNITNO,X; 00454200
|
|
FORWARD; 00454300
|
|
PROCEDURE TERMINATE(MIX); VALUE MIX; REAL MIX; FORWARD; 00463100
|
|
SAVE PROCEDURE TERMNALMESSAGE(N); VALUE N; REAL N; FORWARD; 00463200
|
|
BOOLEAN PROCEDURE SYSTEMFILE(A,B);VALUE A,B; REAL A,B; FORWARD; 00463300
|
|
PROCEDURE ENTERSYSFILE(N); VALUE N; REAL N; FORWARD; 00464000
|
|
PROCEDURE COM5; FORWARD;% 00469000
|
|
$ SET OMIT = NOT(STATISTICS) 00469099
|
|
PROCEDURE ASR; FORWARD;% 00474000
|
|
PROCEDURE COM11; FORWARD;% 00475000
|
|
PROCEDURE COM13; FORWARD;% 00476000
|
|
PROCEDURE COMMUNICATE0; FORWARD; 00478000
|
|
PROCEDURE COMMUNICATE1; FORWARD; 00478500
|
|
PROCEDURE LIBRARYZERO; FORWARD; 00479500
|
|
PROCEDURE LIBRARYCOPY; FORWARD; 00480000
|
|
PROCEDURE FORMTIME(W,T); VALUE W,T; REAL W,T; FORWARD; 00480010
|
|
$ SET OMIT = NOT(DUMP OR DEBUGGING) 00480099
|
|
PROCEDURE DUMPCORE(B); VALUE B; REAL B; FORWARD; 00480199
|
|
$ POP OMIT 00480200
|
|
PROCEDURE COM19; FORWARD;% 00483000
|
|
PROCEDURE COM23; FORWARD;% 00487000
|
|
PROCEDURE INTRINSICTAABLEBUILDER(FH); 00489000
|
|
VALUE FH; REAL FH; FORWARD; 00490000
|
|
PROCEDURE MESSAGETABLEBUILDER; FORWARD; 00491000
|
|
$ SET OMIT = AUXMEM 00492000
|
|
DEFINE INVLDAUXIO = 11#, 00492100
|
|
LQOVFLOW = 13#, 00492200
|
|
$ SET OMIT = NOT (AUXMEM AND SHAREDISK) 00492300
|
|
ARRAY PUNTER[*]; 00493000
|
|
DEFINE PUNTSIZE = 11 00493100
|
|
$ SET OMIT = NOT SHAREDISK 00493200
|
|
+ 2 % INVLD AUXMEM IO 00493320
|
|
$ SET OMIT = NOT AUTODUMP 00493400
|
|
+ 19 % DUMP CARD 00493500
|
|
$ POP OMIT OMIT OMIT 00493600
|
|
#; 00493700
|
|
$ SET OMIT = NOT AUTODUMP 00644000
|
|
$ SET OMIT = NOT (SHAREDISK EQV AUXMEM) OR OMIT 00644100
|
|
DEFINE DUMPCRD = 13#, 00644200
|
|
DUMPADR = 26#; 00644300
|
|
$ POP OMIT 00644350
|
|
$ SET OMIT = (SHAREDISK OR NOT AUXMEM) OR OMIT 00644400
|
|
$ SET OMIT = NOT SHAREDISK OR AUXMEM OR OMIT 00644750
|
|
COMMENT THIS IS THE CODE ON THE DUMP CARD (ALL NUMBERS ARE OCTAL):00645000
|
|
:20: 20,20,NOP,NOP TELLS ANALYZER ALL I/O RES ARE OK00645010
|
|
:21: STD,5,BFW BRANCH TO 23 00645020
|
|
:22: INI,0,LFU TIMER - LOOP UNTIL INTERRUPTED 00645030
|
|
:23: 10,LOD,21,STD SAVE M[8], RESTORED BY 2ND CARD 00645040
|
|
:24: 25,IIO,2,LBU START I/O THEN WAIT AT TIMER 00645050
|
|
:25: 0140000007700035 I/O DESC FOR 77 SEG WRITE FROM 3500645060
|
|
:26: 0140000047400157 I/O DESC FOR 74 SEG READ OF CODE 00645070
|
|
:27: OPDC 14,DIA 26,10,BFW I/O 1 - PICK UP RES DESC. 00645080
|
|
:30: OPDC 15,DIA 26,6,BFW I/O 2 - DIAL TO ERR FIELD. 00645090
|
|
:31: OPDC 16,DIA 26,2,BFW I/O 3 - BRANCH INTO I/O 4 00645100
|
|
:32: OPDC 17,DIA 26, I/O 4 00645110
|
|
DESC 24,CBD 7 BRANCH TO 24 FOR RETRY IF ERRORS 00645120
|
|
:33: DESC 37,BFW GO TO 37 1ST TIME, SEE 41 FOR 2ND00645130
|
|
:34: INI,0,LFU DATACOM - LOOP UNTIL INTERRUPTED 00645140
|
|
:35: 0000000000000501 DISK ADDRESS FOR WRITE 00645150
|
|
:36: INI,0,LFU FREEADDRESS - LOOP ON INTERRUPT 00645160
|
|
:37: 200,157,SND,240 STORE DISK ADDR FOR READ. SET 24000645170
|
|
TO OPERAND FOR DESC AT 41 00645180
|
|
:40: STD,OPDC 26,25,STD PUT I/O DESC INTO 25 00645190
|
|
:41: DESC 240,37,STD,NOP SET 37 FOR BRANCH TO 240 FROM 33 00645200
|
|
:42: 16,LBU BRANCH TO 24 TO START THE READ; 00645210
|
|
$ POP OMIT 00645900
|
|
SAVE PROCEDURE RESULT; 00646900
|
|
BEGIN 00647000
|
|
GO TO P([18]); % TIMER IS A LOOP ON INTERRUPTS 00648000
|
|
END; 00649000
|
|
00649999
|
|
SAVE PROCEDURE PUNT(I); VALUE I; REAL I; 00650000
|
|
BEGIN REAL T=-3; 00650250
|
|
REAL TMB, RSLT=RESULT; 00650500
|
|
LABEL HA,HB; 00650750
|
|
I:=IF I=0 THEN T ELSE PUNTER INX I; 00651000
|
|
STREAM(Q:=P(0,RDF): I, 00651800
|
|
A:=18, D:=I:=PUNTER INX 0); 00652000
|
|
BEGIN DS:= 16 LIT"-SYSTEM HANG, F="); %104-00652400
|
|
SI:=LOC Q; SI:=SI+3; 00652600
|
|
5(DS:=3 RESET; 00652800
|
|
3(IF SB THEN DS:=SET ELSE DS:=RESET; SKIP SB)); 00653000
|
|
DSD:=2 LIT": "; SI:=1; 00653200
|
|
63(IF SC!"~" THEN DS:=CHR); DS:=LIT"~"; 00653400
|
|
DI:=A; DS:=8 LIT"29290+JI"; % INI,INI,4,BBW 00653600
|
|
SI:=A; DS:=44 WDS; 00653800
|
|
DI:=A; DI:=DI+8; % IOBUSY- 00654000
|
|
DS:=4 LIT"002("; % 0,RTN 00654200
|
|
DI:=DI+28; % IOCOMPLETE-LOD R,RTN 00654400
|
|
DS:=32 LIT"0 +A+:2(OU+A+:2(0Y+A+:2(0!+A+:2("; 00654600
|
|
END; 00654800
|
|
P(HP2); 00655000
|
|
HA: TMB:=I&60[3:42:6]; 00655200
|
|
P([TMB],IIO); 00655400
|
|
HB: DO IF (TMB:=P(MKS,RSLT)) = 0 THEN % IO BUSY 00655600
|
|
BEGIN P(MKS,RSLT,DEL); GO HA END 00655800
|
|
UNTIL TMB.[3:6]=60; 00656000
|
|
IF TMB.[CF]<I THEN GO TO HB; 00656200
|
|
IF TMB.[FF]!0 THEN GO TO HA; 00656400
|
|
$ SET OMIT = NOT AUTODUMP 00656500
|
|
IF NOT HALTSET AND PUNTER[DUMPADR]=@501 THEN 00656600
|
|
BEGIN 00656800
|
|
STREAM(S:=[PUNTER[DUMPCRD]], D:=@20); 00657000
|
|
BEGIN SI:=S; DS:=19 WDS; END; 00657200
|
|
GO TO P(0,STS,0,STF,[M[@20]]); 00657400
|
|
END; 00657600
|
|
$ POP OMIT 00657700
|
|
DO UNTIL FALSE; 00657800
|
|
END; 00662000
|
|
$ SET OMIT = DATACOM 00689990
|
|
$ RESET SEPTICTANK 00690000
|
|
$ POP OMIT 00699990
|
|
$ SET OMIT = NOT DATACOM 00699999
|
|
$ SET OMIT = NOT(DFX) 00999999
|
|
SAVE PROCEDURE STARTIO(U); VALUE U; REAL U; FORWARD; 01165000
|
|
SAVE PROCEDURE COMPLEXSNOOZE(PRI,CODE); VALUE PRI; REAL PRI,CODE; 01240000
|
|
BEGIN SNOOZE(PRI,1,P(.CODF,LOD)); END; 01240100
|
|
DEFINE COMPLEXSLEEP(COMPLEXSLEEP1)=COMPLEXSNOOZE(PRYOR[P1MIX], 01240200
|
|
COMPLEXSLEEP1)#; 01240300
|
|
PROCEDURE USASITAPE(AREA,TYPE,FROM,U,DIR); %RHR 01250100
|
|
VALUE AREA,FROM,U,DIR; REAL AREA,TYPE,FROM,U,DIR; 01250200
|
|
BEGIN REAL PIN,Y; 01250300
|
|
ARRAY ULAB[*]; 01250400
|
|
LABEL EXIT,ERROR,VOL,BAD,WAIT,TIP,ETIP; 01250500
|
|
SUBROUTINE LABELSPACE; 01250600
|
|
BEGIN ULAB:=[M[SPACE(11)]]&10[8:38:10]; 01250700
|
|
MOVE(10,ULAB.[CF]-1,ULAB,[CF]); 01250800
|
|
END LABELSPACE; 01250900
|
|
SUBROUTINE VOL1FILL; 01251000
|
|
BEGIN STREAM(AREA,ULAB); 01251100
|
|
BEGIN DS:=8 LIT " LABEL "; DI:=DI+1; SI:=AREA; 01251200
|
|
SI~SI+11;IF SC=" " THEN DS~7LIT"0" ELSE DS~7CHR; 01251300
|
|
DI~DI+37; %MID 01251310
|
|
SI:=AREA; SI:=SI+5; DS:=5 CHR; %PHYSICAL TAPE NO. 01251400
|
|
END; 01251500
|
|
END VOL1FILL; 01251600
|
|
SUBROUTINE HDR1CHK; 01251700
|
|
BEGIN STREAM(Y:=0:AREA,X:=0); 01251800
|
|
BEGIN DI:=LOC X; DS:=4 LIT "HDR1"; 01251900
|
|
SI:=AREA; DI:=LOC X; 01252000
|
|
IF 4 SC=DC THEN TALLY:=1; 01252100
|
|
Y:=TALLY; 01252200
|
|
END; 01252300
|
|
Y:=P; 01252350
|
|
END HDR1CHK; 01252400
|
|
SUBROUTINE HDR1FILL; 01252500
|
|
BEGIN STREAM(AREA,ULAB); 01252600
|
|
BEGIN SI:=AREA; SI:=SI+4; 01252700
|
|
DI:=DI+17; DS:=7 CHR; %FID 01252800
|
|
SI:=SI+17; DS:=3 CHR; %REEL 01252900
|
|
SI:=SI+11; DS:=5 CHR; %C-DATE 01253000
|
|
SI:=SI-8; DS:=2 CHR; %CYCLE 01253100
|
|
SI:=SI+7; DS:=5 CHR; %P-DATE 01253200
|
|
DI:=DI+1; SI:=SI+2; 01253300
|
|
DS:=5 CHR; %BLOCK COUNT 01253400
|
|
DS:=7 CHR; %RECORD COUNT 01253500
|
|
END; 01253600
|
|
END HDR1FILL; 01253700
|
|
SUBROUTINE HARDFILL; 01253800
|
|
BEGIN RTN:=PRNTABLE[U].[30:18]; 01253900
|
|
STREAM(PTN,AREA,ULAB); 01254000
|
|
BEGIN SI:=LOC PIN; DI:=DI+53; 01254100
|
|
DS:=5 DEC; DI:=ULAB; %PHYSICAL TAPE NO. 01254200
|
|
DS:=8 LIT " LABEL "; 01254300
|
|
END; 01254600
|
|
ULAB[1]:=MULTITABLE[U]; 01254650
|
|
END HARDFILL; 01254700
|
|
LABELSPACE; 01254800
|
|
IF FROM=1 THEN 01254900
|
|
BEGIN VOL1FILL; 01255000
|
|
P(WAITIO(@140000005,@377,U);DEL); 01255100
|
|
P(WAITIO(AREA INX @120540000000,@377,U),DEL); 01255200
|
|
HDR1CHK; 01255300
|
|
IF Y THEN HDR1FILL ELSE GO TO ERROR; 01255400
|
|
P(WAITIO(@340000005,@55,U),DEL); 01255450
|
|
P(WAITIO(@340000005,@55,U),DEL); 01255500
|
|
GO TO WAIT; 01255600
|
|
END; 01255700
|
|
IF FROM =2 THEN 01255800
|
|
BEGIN IF TYPE=1 THEN 01255900
|
|
BEGIN VOL1FILL; 01256000
|
|
VOL: P(WAITIO(AREA INX @120540000000,@377,U),DEL); 01256100
|
|
HDR1CHK; 01256200
|
|
IF Y THEN HDR1FILL ELSE GO TO ERROR; 01256300
|
|
P(WAITIO(@340000005,@377,U),DEL); 01256400
|
|
GO TO WAIT; 01256500
|
|
END; 01256600
|
|
IF TYPE=2 THEN 01256700
|
|
BEGIN HDR1FILL; 01256800
|
|
HARDFILL; 01256900
|
|
GO TO EXIT; 01257000
|
|
END; 01257100
|
|
END; 01257200
|
|
IF FROM=3 OR FROM=4 THEN 01257300
|
|
BEGIN IF TYPE=1 THEN 01257400
|
|
BEGIN VOL1FILL; 01257500
|
|
GO TO VOL; 01257600
|
|
END; 01257700
|
|
IF TYPE=2 OR TYPE=4 THEN 01257800
|
|
BEGIN HDR1FILL; 01257900
|
|
HARDFILL; 01258000
|
|
GO TO EXIT; 01258100
|
|
END; 01258200
|
|
IF TYPE=3 OR TYPE=5 THEN 01258300
|
|
BEGIN IF DIR=0 THEN 01258400
|
|
BEGIN P(WAITIO(@340000005,@377,U),DEL); 01258500
|
|
P(WAITIO(@340000005,@377,U),DEL); 01258600
|
|
P(WAITIO(AREA INX @120540000000,@377,U),DEL); 01258700
|
|
END ELSE 01258800
|
|
P(WAITIO(AREA INX @120740000000,@377,U),DEL); 01258900
|
|
HDR1CHK; 01259000
|
|
IF Y THEN HDR1FILL ELSE GO TO ERROR; 01259100
|
|
HARDFILL; 01259200
|
|
GO TO WAIT; 01259300
|
|
END; 01259400
|
|
IF TYPE=6 THEN 01259500
|
|
BEGIN HDR1FILL; 01259600
|
|
HARDFILL; 01259700
|
|
STREAM(ULAB); 01259800
|
|
BEGIN DI:=ULAB; DI:=DI+39; 01259900
|
|
DS:=1 LIT "1"; 01260000
|
|
END; 01260100
|
|
GO TO EXIT; 01260200
|
|
END; 01260300
|
|
END; 01260400
|
|
WAIT: PTN:=0; 01260425
|
|
TIP: IF((TWO(U) AND P(RRR)) !0) THEN 01260450
|
|
GO TO EXIT ELSE SLEEP([CLOCK], NOT CLOCK); 01260455
|
|
PTN:=PTN+1; 01260460
|
|
IF(PTN>120)THEN GO TO EXIT ELSE GO TO TIP; 01260465
|
|
ERROR: P(WAITIO(@4200000000,@377,U),DEL); 01260500
|
|
STREAM(T:=TINU[U],ULAB); 01260600
|
|
BEGIN SI:=LOC T; SI:=SI+5; 01260700
|
|
DS:=LIT "#"; DS:=3 CHR; 01260800
|
|
DS:=22 LIT " INVALID USASI. RW/L~"; 01260900
|
|
END; 01261000
|
|
SPOUT(ULAB.[CF]); LABELTABLE[U]:=@314;; 01261100
|
|
TYPE~0; PTN~0; 01261150
|
|
ETIP: IF((TWO(U) AND P(RRR)) !0) THEN 01261160
|
|
GO TO BAD ELSE SLEEP([CLOCK], NOT CLOCK); 01261170
|
|
PTN:=PTN+1; 01261180
|
|
IF(PTN>120) THEN GO TO BAD ELSE GO TO ETIP; 01261200
|
|
EXIT: MOVE(10,ULAB.[CF],AREA.[CF]); 01261300
|
|
FORGETSPACE(ULAB.[CF]); 01261400
|
|
BAD: 01261450
|
|
END USASITAPE; %RHR 01261500
|
|
SAVE PROCEDURE SNOOZE(NEWPRI,ADDRESS,MASK); 02000000
|
|
VALUE NEWPRI, ADDRESS, MASK; 02001000
|
|
REAL NEWPRI; 02002000
|
|
NAME ADDRESS; 02002500
|
|
ARRAY MASK[*]; 02003000
|
|
BEGIN 02004000
|
|
REAL TRYHERE=NT1; 02004500
|
|
$ SET OMIT = NOT(NEWLOGGING) 02004599
|
|
LABEL BEDENTER; 02004900
|
|
IF (JOBNUM:=JOBNUM+2) GEQ JOBNUMAX THEN PUNT(9); 02005000
|
|
PRYOR[P1MIX].[FF]~ NEWPRI~ NEWPRI+1; 02006000
|
|
FOR TRYHERE~JOBNUM STEP -2 UNTIL 2 DO 02007100
|
|
BEGIN 02007200
|
|
IF PRYOR[(BED[TRYHERE]~BED[TRYHERE-2]).[3:5]].[FF] 02007300
|
|
< NEWPRI THEN GO TO BEDENTER; 02007400
|
|
BED[TRYHERE+1] ~ BED[TRYHERE-1]; 02007500
|
|
END; 02007600
|
|
BEDENTER: 02008000
|
|
BED[TRYHERE] ~ P(ADDRESS & P1MIX[3:43:5], RDF); 02008100
|
|
BED[TRYHERE+1] ~ MASK; 02008200
|
|
STOPLOG(P1MIX,1); 02008300
|
|
GO TO NOTHINGTODO; 02008400
|
|
END SLEEP; 02009000
|
|
SAVE PROCEDURE INDEPENDENTRUNNER(ROUTINE,PARAMETER,SSZ); 02012000
|
|
VALUE ROUTNE,PARAMETER,SSZ; 02013000
|
|
ARRAY PARAMETER[*]; 02014000
|
|
REAL ROUTINE,SSZ; 02015000
|
|
BEGIN LSLATE:= LSLATE+2 AND SLATEEND;% 02016000
|
|
IF NSLATE=LSLATE THEN PUNT(7); 02017000
|
|
SLATE[LSLATE] ~ PARAMETER;% 02018000
|
|
SLATE[LSLATE+1]:=ROUTINE&SSZ[CTF]; 02019000
|
|
END; 02020000
|
|
REAL KEYBOARDCOUNTER; 02020500
|
|
REAL PROCEDURE KEYIN(B); VALUE B; BOOLEAN B; FORWARD;% 02021000
|
|
$ SET OMIT = NOT(DCSPO AND DATACOM ) 02021099
|
|
BOOLEAN PROCEDURE WHYSLEEP(MASK); VALUE MASK; REAL MASK; FORWARD;% 02022000
|
|
LABEL P1PROCESS,P2PROCESS;% 02023000
|
|
REAL ONEOHONE = @101,ONEOHTWO = @102;% 02024000
|
|
SAVE PROCEDURE RUN(MIX); VALUE MIX; REAL MIX; 02025000
|
|
BEGIN P1MIX ~ MIX;% 02026000
|
|
$ SET OMIT = NEWLOGGING 02026999
|
|
STARTLOG(MIX); 02027000
|
|
$ POP OMIT 02027001
|
|
STACKUSE ~ TRUE;% 02028000
|
|
GO TO EXTERNAL;% 02029000
|
|
END;% 02030000
|
|
REAL NUMESS;% 02031000
|
|
SAVE PROCEDURE SAVEMIX(MIX); VALUE MIX; REAL MIX;% 02032000
|
|
BEGIN INDEPENDENTRUNNER(P(.RUN),MIX,0); 02033000
|
|
$ SET OMIT = NEWLOGGING 02033999
|
|
STOPLOG(MIX,0); 02034000
|
|
$ POP OMIT 02034001
|
|
END;% 02035000
|
|
SAVE PROCEDURE HALT;% 02036000
|
|
BEGIN NOPROCESSTOG ~ NOPROCESSTOG+1;% 02037000
|
|
IF P2MIX > 0 THEN% 02038000
|
|
BEGIN P(HP2);% 02039000
|
|
$ SET OMIT = NOT(NEWLOGGING) 02039099
|
|
SNOOZE(-1,1,1); 02040000
|
|
IF P2MIX > 0 THEN% 02041000
|
|
BEGIN SAVEMIX(P2MIX);% 02042000
|
|
P2MIX~0; TOGLE~TOGLE AND NOT HP2MASK; 02043000
|
|
END;% 02044000
|
|
END;% 02045000
|
|
END;% 02046000
|
|
SAVE PROCEDURE KILL(A); VALUE A; ARRAY A[*];% 02047000
|
|
BEGIN P(64,STS);% 02048000
|
|
FORGETSPACE(A);% 02049000
|
|
GO TO NOTHINGTODO;% 02050000
|
|
END;% 02051000
|
|
REAL PBCOUNT; 02052200
|
|
BOOLEAN PROCEDURE OLAY(LOC); VALUE LOC; REAL LOC; FORWARD; 02052500
|
|
PROCEDURE SEEKNAME(A,B,C,D,E,N,XLST); VALUE A,B; 02052700
|
|
REAL A,B,C,D,E,N; ARRAY XLST[*]; FORWARD; 02052800
|
|
PROCEDURE UNHOOQUE(MIX);% 02053000
|
|
VALUE MMIX;% 02054000
|
|
INTEGER MIX;% 02055000
|
|
BEGIN% 02056000
|
|
REAL U,S,SN,T,X,I,PROCE;% 02057000
|
|
NAME OLDQ=X; 02057500
|
|
LABEL DOLP,DELINKIT; 02058000
|
|
FOR U~0 STEP 1 UNTIL 31 DO% 02059000
|
|
BEGIN% 02060000
|
|
IF(S~UNIT[U].[FF])!@77777 THEN 02061000
|
|
BEGIN% 02062000
|
|
WHILE (SN~LOCATQUE[S].[FF])!@77777 DO% 02063000
|
|
BEGIN IF (T~NFLAG(LOCATQUE[SN])).[3:5] =% 02064000
|
|
MIX THEN% 02065000
|
|
IF LOCATQUE[SN].[11:1] THEN S~SN ELSE 02065100
|
|
BEGIN% 02066000
|
|
LOCATQUE[S]~LOCATQUE[S]&T[FTF];% 02067000
|
|
RETURNIOSPACE(SN); 02068000
|
|
END ELSE% 02070000
|
|
S~SN;% 02071000
|
|
END% 02072000
|
|
END 02072100
|
|
END; 02072200
|
|
$ SET OMIT = NOT DFX; 02072490
|
|
DOLP: FOR U~0 STEP 1 UNTIL 31 DO% 02075000
|
|
BEGIN% 02076000
|
|
IF (S~(T~UNIT[U]).[FF])!@77777 THEN 02077000
|
|
BEGIN% 02078000
|
|
IF LOCATQUE[S].[3:5]=MIX THEN% 02079000
|
|
BEGIN% 02080000
|
|
IF (X~T.[13:5])=0 OR X=16 THEN 02081000
|
|
GO DELINKIT; 02082000
|
|
IF X=4 THEN% 02087000
|
|
BEGIN% 02088000
|
|
IF LOCATQUE[S].[FF]=@77777 THEN% 02089000
|
|
BEGIN% 02090000
|
|
I~FIRSTWAIT;% 02091000
|
|
WHILE WAITQUE[I]!U% 02092000
|
|
DO I ~ I+1 AND 32;% 02093000
|
|
WAITQUE[I]~% 02094000
|
|
WAITQUE[NEXTWAIT~NEXTWAIT% 02095000
|
|
+31 AND 31];% 02096000
|
|
UNIT[U]~T&@77777[13:28:20]; 02097000
|
|
END ELSE 02097200
|
|
DELINKIT: UNIT[U]:=T&LOCATQUE[S][FTF]; 02097400
|
|
$ SET OMIT = NOT DFX 02097590
|
|
RETURNIOSPACE(S); 02100000
|
|
END ELSE 02100400
|
|
PROCE~((U!23 AND U!24) OR X=3) 02101000
|
|
AND X!25 OR PROCE; 02101100
|
|
END% 02102000
|
|
END$ 02103000
|
|
END ;% 02104000
|
|
IF PROCE THEN% 02105000
|
|
BEGIN% 02106000
|
|
SLEEP([CLOCK],NOT CLOCK); PROCE~0; GO TO DOLP; 02107000
|
|
END;% 02108000
|
|
END UNHOOQUE;% 02109000
|
|
DEFINE PSF-3:4#, 02110050
|
|
TERMSET(TERMSET1)=(PRTROW[TERMSET1].[6:1]=1)#, 02110100
|
|
NOTERMSET(NOTERMSET1)=(PRTROW[NOTERMSET1].[6:1] NEQ 1)#, 02110200
|
|
TERMGOING(TERMGOING1)=(PRTROW[TERMGOING1].[PSF]=3)#, 02110250
|
|
BREAKSET(BREAKSET1)=(PRTROW[BREAKSET1].[PSF]=4)#, %139-02110260
|
|
STOPSET(STOPSET1)=(PRTROW[STOPSET1].[PSF]=2)#; 02110300
|
|
REAL PROCEDURE GETESPDISK;FORWARD;% 02111000
|
|
PROCEDURE CHANGEMCP(KTR); VALUE KTR; REAL KTR; FORWARD; 02111100
|
|
PROCEDURE CHANGEINTRINSICFILE(KTR); VALUE KTR; REAL KTR; FORWARD; 02111200
|
|
$ SET OMIT = NOT(DEBUGGING) 02111299
|
|
REAL PROCEDURE ANALYSIS; FORWARD; 02111400
|
|
PROCEDURE SHORTCOMMUNICATE; FORWARD; 02111500
|
|
PROCEDURE CONTINUITYBIT; FORWARD; 02111600
|
|
REAL CCTBLWORD; 02112000
|
|
DEFINE CCCOUNT = CCTBLWORD.[FF]#, 02112100
|
|
CCTBLADDR = CCTBLWORD.[CF]#; 02112200
|
|
REAL READERA,READERB; 02112500
|
|
$ SET OMIT = NOT(PACKETS) 02113079
|
|
ARRAY PSEUDO[*]; %PSEUDOMAX; 02113080
|
|
ARRAY PSEUDOMIX[*], NYLONZIPPER[*]; %MIXMAX 02113085
|
|
DEFINE PACKETPAGE[PACKETPAGE1]=PSEUDO[PACKETPAGE1].[22:26]#; 02113086
|
|
DEFINE PACKETREC[PACKETREC1]=PSEUDO[PACKETREC1].[18:3]#; 02113087
|
|
DEFINE PACKETPBD[PACKETPBD1]=PSEUDO[PACKETPBD1].[8:10]#; 02113088
|
|
DEFINE PACKETACT[PACKETACT1]=PSEUDO[PACKETACT1].[2:6]#; 02113089
|
|
DEFINE PACKETERR[PACKETERR1]=PSEUDO[PACKETERR1].[1:1]#; 02113090
|
|
DEFINE PAGESIZE=300#; % SAME AS PBDROWSZ AT 08699100 %732-02113091
|
|
DEFINE PAGEFULL=(PAGESIZE DIV 3)|5-40#; % ALLOW FOR 8 INFO RECORDS 02113092
|
|
$ POP OMIT 02113099
|
|
PROCEDURE MESSAGEWRITER;% 02114000
|
|
BEGIN REAL RWC=+0, MSCW=-2; 02115000
|
|
REAL T=+1;% 02116000
|
|
LABEL L;% 02117000
|
|
P(0); 02118000
|
|
$ SET OMIT = NOT(DCSPO AND DATACOM ) 02119009
|
|
$ SET OMIT = DCSPO 02119019
|
|
L: 02119020
|
|
$ POP OMIT 02119021
|
|
P(WAITIO(MESSAGEHOLDER INX 1,0,0,25)); 02120000
|
|
P(DEL);% 02121000
|
|
NUMESS ~ NUMESS-1;% 02122000
|
|
T ~ M[MESSAGEHOLDER].[18:15]; 02123000
|
|
FORGETSPACE(MESSAGEHOLDER INX 1); 02124500
|
|
IF T ! 0 THEN% 02125000
|
|
BEGIN MESSAGEHOLDER.[33:15] ~ T;% 02126000
|
|
GO TO L% 02127000
|
|
END;% 02128000
|
|
MESSAGEHOLDER ~ 0;% 02129000
|
|
KILL([MSCW]); 02130000
|
|
END;% 02131000
|
|
$ SET OMIT = NOT(DCSPO AND DATACOM ) 02131005
|
|
$ SET OMIT = PACKETS 02131999
|
|
$ SET OMIT = NOT(PACKETS) 02132299
|
|
PROCEDURE SPOUTER(MESSAGE,UNITNO,TYPE); 02132300
|
|
VALUE MESSAGE,UNITNO,TYPE; 02132400
|
|
REAL MESSAGE,UNITNO,TYPE; 02132500
|
|
$ POP OMIT 02132501
|
|
BEGIN REAL MKSCW=MESSAGE-1; 02133000
|
|
INTEGER MIX; 02133010
|
|
$ SET OMIT = NOT(DATACOM AND DCSPO ) 02133011
|
|
$ SET OMIT = (DATACOM AND DCSPO) %950-02133122
|
|
INTEGER LFT; %950-02133123
|
|
$ POP OMIT %950-02133124
|
|
$ SET OMIT = NOT(PACKETS) 02133129
|
|
DEFINE PACKETFREE=PSEUDO[UNITNO].[21:1]#, 02133130
|
|
PACKETMASK=#400000000#; 02133140
|
|
REAL PSD,PWS,X,Z,BB; 02133150
|
|
INTEGER NT1,R,S,T; ARRAY BUF[*]; 02133200
|
|
$ SET OMIT = NOT(DATACOM AND DCSPO) OR OMIT %203-02133279
|
|
R:=UNITNO.[CF]; UNITNO:=0; 02133300
|
|
IF R=0 THEN IF P1MIX!0 THEN R:=PSEUDOMIX[P1MIX]; 02133350
|
|
IF R>31 AND R<64 THEN UNITNO:=R; 02133380
|
|
$ POP OMIT 02133381
|
|
$ SET OMIT = NOT(DATACOM AND DCSPO) 02133499
|
|
MESSAGE ~ P(.MESSAGE,LOD).[33:15]-1;% 02134000
|
|
MIX ~ M[MESSAGE-1].[9:6]; 02134005
|
|
$ SET OMIT = NOT(DATACOM AND DCSPO ) 02134008
|
|
$ SET OMIT = NOT(PACKETS) 02134889
|
|
IF TYPE THEN 02134890
|
|
$ POP OMIT 02134891
|
|
$ SET OMIT = NOT(DATACOM AND DCSPO ) 02134899
|
|
BEGIN 02134906
|
|
IF MESSGEHOLDER = 0 THEN% 02135000
|
|
BEGIN MESSAGEHOLDER ~ MESSAGE;% 02136000
|
|
INDEPENDENTRUNNER(P(.MESSAGEWRITER),0,64); 02137000
|
|
END% 02138000
|
|
ELSE M[MESSAGEHOLDER.[18:15]].[18:15] ~ MESSAGE; 02139000
|
|
M[MESSAGE]~0&MIX[4:43:5]; 02140000
|
|
MESSAGEHOLDER.[18:15] ~ MESSAGE;% 02141000
|
|
END; 02141020
|
|
M[MESSAGE-1].[9:6] ~ 0;% 02142000
|
|
M[MESSAGE-1].[AREATYPEF] := SPOUTMSGAREAV;% %167-02142100
|
|
IF P(MKSCW.[33:15],DUP) = 0 THEN% 02143000
|
|
BEGIN ; 02143050
|
|
STREAM(N~9:X~MESSAGE+1); 02144500
|
|
BEGIN SI ~ X;% 02145000
|
|
L: IF SC ! "~" THEN% 02146000
|
|
BEGIN IF SC= " " THEN% 02147000
|
|
BB: BEGIN SI~ SI+1; 02148000
|
|
IF SC=" " THEN GO BB; 02149000
|
|
IF SC = ALPHA THEN% 02150000
|
|
BEGIN SI ~ SI-1;% 02151000
|
|
DS ~ CHR;% 02152000
|
|
END ELSE GO TO L;% 02154000
|
|
END;% 02155000
|
|
IF SC = @14 THEN% 02156000
|
|
BEGIN DS ~ CHR;% 02157000
|
|
Q: IF SC = @14 THEN% 02158000
|
|
BEGIN SI ~ SI+1;% 02159000
|
|
GO TO Q; 02160000
|
|
END;% 02162000
|
|
GO TO L;% 02163000
|
|
END;% 02164000
|
|
DS ~ CHR;% 02165000
|
|
GO TO L;% 02167000
|
|
END;% 02168000
|
|
DS ~ CHR;% 02169000
|
|
N ~ DI; 02171000
|
|
END;% 02172000
|
|
NT1~P;NT1~((NT1.[33:15]-(MESSAGE+1))|8+NT1.[30:3])|6; 02173000
|
|
END ELSE NT1 ~ P | 6; 02173050
|
|
$ SET OMIT = NOT(PACKETS) 02173069
|
|
IF UNITNO!0 THEN IF PACKETPAGE[UNITNO-32]>1 THEN 02173075
|
|
BEGIN UNITNO:=UNITNO-32; 02173080
|
|
IF NOT PACKETFREE THEN SLEEP([PSEUDO[UNITNO]],PACKETMASK);02173085
|
|
IF (PSD:=PACKETPAGE[UNITNO])>1 THEN 02173087
|
|
BEGIN % JUST TO BE SURE 02173088
|
|
PACKETFREE:=FALSE; 02173090
|
|
Z:=IF (PSW:=PACKETREC[UNITNO]) THEN 60 ELSE 30; 02173095
|
|
S:=((Y:=IF NT1>725 THEN 120 ELSE NT1 DIV 6)+7) DIV 8; 02173100
|
|
BUG:=[M[T:=SPACE(Z+S)]]&Z[8:38:10]; 02173110
|
|
M[BUF-2].[9:6]:=0; 02173120
|
|
STREAM(N:=S,AA:=MESSAGE+1,BUF:=BUF INX Z); 02173150
|
|
BEGIN SI:=AA; DS:=N WDS END; 02173160
|
|
DISKWAIT(-T,Z,PSD+PSW DIV 2); 02173210
|
|
R:=(PSW|18) MOD 30; 02173220
|
|
IF (BB:=BUF[R+17].[CF]) GEQ PAGEFULL THEN 02173230
|
|
BEGIN STREAM(BUF:=[BUF[R]]); 02173240
|
|
BEGIN DS:=12LIT" "; 02173245
|
|
DS:=28LIT"ALL FURTHER MESSAGES LOST "; 02173250
|
|
2(DI:=DI+48); DS:=6LIT":|5908"; 02173255
|
|
END; 02173260
|
|
PACKETPAGE[UNITNO]:=1; % TO MARK OVERFLOW 02173265
|
|
END 02173270
|
|
ELSE BEGIN P(@1540005000100000&(RB+1)[CTC]); % PBDSTOPPER 02173275
|
|
IF PSW=0 THEN 02173280
|
|
BEGIN P(BUF[29],XCH); 02173282
|
|
P([BUF[29]],STD); 02173284
|
|
DISKWAIT(T,30,PSD+5); 02173286
|
|
P([BUF[29]],STD); 02173288
|
|
END ELSE 02173290
|
|
P([BUF[R-1]],STD); 02173292
|
|
BUF[R+17]:=@1540000104000000&BB[CTC]& 02173294
|
|
(S+2+(M[BUF INX Z].[1:5]!">"))[8:38:10]; 02173296
|
|
FORMTIME([LFT],XCLOCK~P(RTR)); %154-02173297
|
|
STREAM(N:=S-1,CL:=S|8-Y,AA:=BUF INX Z,BB := LFT,%154-02173300
|
|
BUF:=[BUF[R]]); 02173301
|
|
BEGIN DS := 7 LIT " "; SI := LOC BB; DS := 8 CHR; 02173305
|
|
DS := 9 LIT " "; SI := AA; %154-02173306
|
|
IF SC!">" THEN DS:=8 CHR ELSE 02173310
|
|
BEGIN DI:=DI-8; 8(IF SC!">" THEN DS:=CHR ELSE 02173315
|
|
BEGIN DI:=DI+1; SI:=SI+1; END); 02173320
|
|
END; N(DS:= 8 CHR); DI:=DI-CL; AA:=DI; 02173325
|
|
SI:=AA; SI:=SI-1; 02173330
|
|
IF SC="~" THEN BEGIN DI:=DI-1; DS:=LIT" "; END; 02173335
|
|
CL(DS:=LIT" "); 02173340
|
|
END;END; 02173345
|
|
DISKWAIT(T,Z,PSD+PSW DIV 2); 02173350
|
|
IF PACKETPAGE[UNITNO]>1 THEN 02173360
|
|
IF PSW=0 THEN 02173362
|
|
BEGIN PACKETPAGE[UNITNO]:=PSD+3; 02173364
|
|
PACKETREC[UNITNO]:=4; 02173366
|
|
END ELSE 02173368
|
|
PACKETREC[UNITNO]:=PSW-1; 02173370
|
|
PACKETFREE:=TRUE; 02173375
|
|
FORGETSPACE(BUF); 02173380
|
|
END; % JUST TO BE SURE 02173383
|
|
END; 02173385
|
|
IF NOT TYPE THEN BEGIN FORGETSPACE(MESSAGE+1); P(XIT); 02173389
|
|
END; 02173390
|
|
$ POP OMIT 02173391
|
|
IOTIME[P1MIX] ~ *P(DUP)+NT1;% 02174000
|
|
$ SET OMIT = NOT(DCSPO AND DATACOM ) 02174005
|
|
$ SET OMIT = DCSPO 02175002
|
|
IF (NUMESS~ NUMESS+1)>0 THEN 02175003
|
|
$ POP OMIT 02175004
|
|
BEGIN 02175010
|
|
$ SET OMIT = NOT(DATACOM AND DCSPO ) 02175020
|
|
SLEEP([NUMESS],-0);% 02176000
|
|
END; 02176100
|
|
END;% 02177000
|
|
PROCEDURE ENDOFDECK(R,TUSTA);VALUE R,TUSTA; REAL R,TUSTA; FORWARD; 02177100
|
|
PROCEDURE PBIO(A,B); VALUE A; REAL A,B; FORWARD; 02178500
|
|
REAL TERMINALCLOCK; 02179000
|
|
PROCEDURE TERMINATE(MIX); VALUE MIX; REAL MIX;% 02180000
|
|
BEGIN IF MIX LEQ 0 THEN BYBY("MCP DS-ED~",10); 02181000
|
|
IF JARROW[MIX] NEQ 0 THEN 02182000
|
|
BEGIN 02183000
|
|
IF NOTERMSET(MIX) THEN 02184000
|
|
BEGIN 02185000
|
|
TERMINALCLOCK:=CLOCK+P(RTR); 02185900
|
|
PRTROW[MIX].[FF]:=MIX.[FF]; 02186000
|
|
PRTROW[MIX].[PSF]:=1; 02186050
|
|
END; 02186100
|
|
END; 02186300
|
|
END;% 02187000
|
|
REAL PROCEDURE PLACEFINDER(S, A, L); 02187100
|
|
VALUE S, A; 02187200
|
|
REAL S, A, L; 02187300
|
|
FORWARD; 02187400
|
|
ARRAY CIDROW[*],CIDTABLE=CIDROW[*,*]; 02187500
|
|
PROCEDURE TERMINALMESSAGA(N); VALUE N; REAL N; 02188000
|
|
BEGIN LABEL FOUND,DOIT,OWT,TOIT; 02189000
|
|
REAL A,T,S,ADR;% 02190000
|
|
NAME B;% 02191000
|
|
ARRAY FIB[*]; 02191500
|
|
REAL BLEN,NBUF; 02191600
|
|
REAL MIXER,TOPIO,LUN,L;% 02192000
|
|
INTEGER I=S; LABEL QZ;% 02193000
|
|
LABEL STT;% 02194000
|
|
SUBROUTINE SLAPITOFF;% 02195000
|
|
IF LUN GEQ 32 THEN 02195100
|
|
$ SET OMIT = PACKETS 02195199
|
|
ELSE 02195300
|
|
BEGIN SLEEP([TOGGLE],STATUSMASK); 02196000
|
|
READY ~ NOT (I ~ TWO(LUN)) AND READY;% 02197000
|
|
RRRMECH ~ NOT I AND RRRMECH OR I AND SAVEWORD;% 02198000
|
|
LABELTABLE[LUN] ~ @114;% 02199000
|
|
MULTITABLE[LUN] ~ RDCTABLE[LUN] ~ 0;% 02200000
|
|
END;% 02201000
|
|
LABEL LB,LBI;% 02202000
|
|
$ SET OMIT = NOT(NEWLOGGING) 02202049
|
|
NOMEM:=NOMEM-TAR[P1MIX].[20:1]; %IF THIS JOB HAD A NOMEM 02202100
|
|
TAR[P1MIX].[20:1]:=0; %CONDITION - CLEAR IT 02202200
|
|
UNLOCKTOG(TAR[P1MIX]); 02202500
|
|
REPLY[P1MIX]~0;% 02203000
|
|
PRTROW[P1MIX].[PSF]:=3; % IN PROCESS OF DSING 02205000
|
|
PRYOR[P1MIX]~-1; 02205100
|
|
A ~ IF N < 0 THEN ABS(N) ELSE SPACE(10);% 02206000
|
|
IF N=32 THEN JAR[P1MIX,6].[1;1]~1; % MEM PAR %949-02206100
|
|
B ~ PRT[P1MIX,4];% 02207000
|
|
IF P(M[L~PRT[P1MIX,8].[CF]],TOP,XCH,DEL)THEN %TR02208000
|
|
S~ADR~0 ELSE %TR02209000
|
|
DO BEGIN IF P(M[L],TOP,XCH,0,INX,.ADR,~) THEN% OVERLAID RCWTR02210000
|
|
BEGIN IF NOT M[L].[33:1] THEN%NOT TYPE 13 INT 02211000
|
|
BEGIN S~ADR; %SEGNO IN RCW 02211010
|
|
T~0;ADR~M[M[L].MOM].[CF]; % AND THE MSCW %TR02212000
|
|
END ELSE S~-1; 02212100
|
|
END ELSE % ITS PRESENT: WDVE GOT TO WORK %TR02213000
|
|
BEGIN T~0; 02214000
|
|
WHILE (S:=M[T].[CF]) LSS ADR DO 02215000
|
|
IF S>T THEN T:=S ELSE PUNT(3); 02215500
|
|
S~IF M[T].[AREATYPEF]=CODEAREV THEN% %167-02216000
|
|
M[T+1].[CF] ELSE 0;% %167-02216010
|
|
T~T+2; END; %TR02216100
|
|
IF PRT[P1MIX,8].[CF]!L OR M[L-1].MSFF%STACK IS MARKED02216200
|
|
THEN DO L~M[L].MOM UNTIL NOT M[L].MSFF;%GET LAST MSCW02216300
|
|
L~M[L].MOM;%POINT L TO NEXT RCW,JUST IN CASE. %TR02216400
|
|
END UNTIL (IF S!0 THEN IF S=(-1) THEN 0 ELSE 02216500
|
|
(B[0]<S OR NOT B[S].PBIT) 02216510
|
|
ELSE (P(M[T-2].[3:12],DUP)!@700 AND P(XCH)!@1500)); 02216600
|
|
FOUND: ADR ~ ADR-T;% 02217000
|
|
T:=PLACEFINDER(S,ADR,S); 02217100
|
|
IF N GTR 0 THEN 02217200
|
|
BEGIN 02217300
|
|
B ~ [M[SPACE(TERMMSGSZ)]]; 02218000
|
|
DISKWAIT(-(B INX 0),TERMSGSZ,MESSAGETABLE[1].[22:26]); 02219000
|
|
END ELSE N:=0; 02220000
|
|
STREAM(Z:=N!0,X:=T,T:=6,J:=JAR[P1MIX,0]], 02221000
|
|
P1MIX,INDX~PRT[P1MIX,8] INX NOT 2 INX 0, 02222000
|
|
DSZE~IF P(M[P(DUP)+1],TOP) THEN P ELSE P.[8:10], 02222200
|
|
TOG~(N=7), Q~[B[N]], A); 02223000
|
|
BEGIN CI ~ CI+Z; GO TO L1;% 02224000
|
|
DS:=LIT "-"; SI:=Q; 02225000
|
|
L: SI:=SI+1; 02226000
|
|
IF SC = "8" THEN SI:=SI+1 ELSE 02227000
|
|
BEGIN A:=DI; DI:=LOC T; 02228000
|
|
DS:=OCT; DI:=A; 02229000
|
|
END; 02230000
|
|
DS:=T CHR; 02231000
|
|
IF TOGGLE THEN GO TO L; 02232000
|
|
DS ~ LIT " "; GO TO L2;% 02234000
|
|
L1: SI ~ A;% 02235000
|
|
IF SC ! "~" THEN% 02236000
|
|
BEGIN SI ~ SI+1; A ~ SI;% 02237000
|
|
GO TO L1;% 02238000
|
|
END;% 02239000
|
|
DI ~ A;% 02240000
|
|
L2:% 02241000
|
|
SI ~ J; SI ~ SI+1; DS ~ 7 CHR; DS ~ LIT "/";% 02242000
|
|
SI ~ SI+1; DS ~ 7 CHR; DS ~ LIT "=";% 02243000
|
|
SI~LOC P1MIX; DS~2DEC; A~DI; 02244000
|
|
DI~DI-2; DS~FILL; DS~A; 02244500
|
|
SI:=X; DS:=20 CHR; A:=DI; 02245000
|
|
TOG(DI~A; DS~2 LIT ". "; A~DI; SI~INDX; 02251010
|
|
SKIP SB; IF SB THEN BEGIN DI~INDX; 02251020
|
|
SKIP DB; DS~RESET; DI~A; TOG~TALLY; 02251030
|
|
DS~12 LIT "EFF INX IS -"; END; 02251040
|
|
A~DI; DI~INDX; DI~LOC Q; DS~8 DEC; 02251050
|
|
SI~LOC Q; 7(IF SC>"0" THEN JUMP OUT; 02251060
|
|
TALY~TALY+1; SI~SI+1); DI~A; 02251070
|
|
T~TALLY; DS~8 CHR; DI~DI-T; 02251080
|
|
T(DS~LIT " "); DI~DI-T; A~DI); 02251090
|
|
TOG(SI~LOC DSZE; DI~LOC Q; DS~4 DEC; 02251100
|
|
DI~A; DS~5 LIT " GEQ "; SI~LOC Q; 02251110
|
|
TALLY~0; 3(IF SC>"0" THEN JUMP OUT); 02251120
|
|
TALLY~TALLY+1; SI~SI+1); 02251130
|
|
T~TALLY; DS~4 CHR; DI~DI-T; 02251140
|
|
T(DS~LIT " "); DI~DI-T; A~DI); 02251150
|
|
DI ~ A; DS ~ LIT "~";% 02252000
|
|
END;% 02253000
|
|
IF N!0 THEN FORGETSPACE(B); 02253050
|
|
S~A; 02254000
|
|
STREAM(B~S,A~A~SPACE(17));% 02255000
|
|
BEGIN 17(DS~8 LIT"#"); SI~B;DI~A;DI~DI+8;DS~2 LIT" ";% 02255100
|
|
17(8(IF SC!"~" THEN DS~CHR ELSE JUMP OUT 2 TO L1)) ; 02255200
|
|
L1: DS~2 LIT" ";% 02255500
|
|
END;% 02256000
|
|
SPOUT(S); 02256500
|
|
IF NOT TERMGO THEN BEGIN HALT;% 02257000
|
|
COMPLEXSLEEP(-100=NUMESS);% 02258000
|
|
DO UNTIL KEYIN(0)=1; 02258100
|
|
NOPROCESSTOG ~ NOPROCESSTOG-1; END;% 02258200
|
|
JAR[P1MIX,1] ~-JAR[P1MIX,1];% 02259000
|
|
UNHOOQUE(P1MIX);% 02260000
|
|
MIXER~ @300+P1MIX;% 02261000
|
|
IF N=35 THEN % ES-ED 02261050
|
|
IF JAR[P1MIX,9].SYSJOBF = PRNPBTCODE THEN 02261100
|
|
IF (L:=PRT[P1MIX,@25]) !0 THEN 02261200
|
|
BEGIN %675-02261250
|
|
IF (LUN~L.[41:5])<16 THEN SLAPITOFF; %675-02261300
|
|
LUN~L.[46:2]+19; % LPA, LPB, OR CPA %675-02261350
|
|
SLAPITOFF; %675-02261400
|
|
END; % PRNPBT/DISK ES-ED: TO CLEAR UNITS. 02261750
|
|
STT: T~MSTART;% 02262000
|
|
WHILE(L~T.[CF])!0 DO% 02263000
|
|
IF (T~M[L]).[3:12]=MIXER AND T>0% 02264000
|
|
THEN% 02265000
|
|
BEGIN LUN ~ (TOPIO ~ NFLAG(M[L+2])).[12:6]; 02266000
|
|
IF LUN }32 THEN 02266100
|
|
BEGIN 02266200
|
|
FILECLOSE(TOP10 INX 0); 02266300
|
|
GO TO STT; 02266400
|
|
END; 02266500
|
|
IF UNIT[LUN].[13:5] = @20 02267000
|
|
THEN BEGIN% 02268000
|
|
QZ:% 02269000
|
|
SLAPITOFF; 02270000
|
|
UNIT[LUN].[13:5]:=@20;% MARK IT NOT READY ANYWAYS 02270500
|
|
FORGETSPACE(L INX 2);% 02271000
|
|
GO TO STT;% 02272000
|
|
END ELSE 02273000
|
|
BEGIN T ~ 0; 02274000
|
|
FIB ~ M[TOPIO INX NOT 2]; 02275000
|
|
ADR ~ NBUF ~ FIB[13].[1:9]-1; 02275100
|
|
IF P(M[TOPIO].[3:5],DUP)=22 OR P(XCH)=26 THEN 02275150
|
|
BEGIN FOR S ~ 1 STEP 1 UNTIL ADR DO 02275200
|
|
TOIT: IF NOT M[TOPIO INX S].[19:1] THEN 02275250
|
|
DOIT: IF LUN{18 THEN 02275300
|
|
BEGIN M[TOPIO INX S].[20:1] ~ 0; 02275350
|
|
M[M[TOPIO INX S] INX 17] ~ M[TOPIO INX S]02275400
|
|
& FIB[5] [FTC]; 02275450
|
|
FIB[5] ~ P(DUP,LOD,0,1,CFX,+); 02275500
|
|
IF NOT PRTROW[P1MIX].[17:1] THEN 02275550
|
|
IF FIB[14].[CF]=FIB[14].[FF] THEN 02275600
|
|
BEGIN PBIO(TOPIO INX S,FIB[14]); 02275650
|
|
SLEEP([M[TOPIO INX S]],IOMASK);02275700
|
|
END ELSE 02275750
|
|
BEGIN STREAM(C~M[TOPIO INX S], 02275800
|
|
Z~FIB[14].[FF]); 02275850
|
|
BEGIN SI ~ C; DS ~ 18 WDS; END;02275900
|
|
FIB[14].[FF] ~ P(DUP).[FF]-18; 02275950
|
|
END; 02276000
|
|
END ELSE 02276050
|
|
BEGIN IF WAITIO(M[TOPIO INX S],@357,LUN).[45:1]02276100
|
|
THEN GO OWT; 02276150
|
|
FIB[6] ~ *P(DUP)+1; 02276200
|
|
END; 02276250
|
|
IF ADR<0 THEN 02276260
|
|
BEGIN IF ADR THEN F[17] ~ BLEN; GO OWT; 02276270
|
|
END; 02276280
|
|
S ~ 0; 02276290
|
|
IF FIB[17] < (BLEN~FIB[18].[3:15]) THEN 02276300
|
|
BEGIN IF NOT FIB[13] THEN 02276350
|
|
FIB[17] ~ *P(DUP)-(FIB[5].[46:2]=3); 02276360
|
|
M[TOPIO] ~ FLAG(FIB[16]); 02276370
|
|
STREAM(N~FIB[17],D~M[TOPIO].[CF]); 02276400
|
|
BEGIN N(DS ~ 8 LIT " "); END; 02276450
|
|
ADR ~ -1; GO DOIT; 02276500
|
|
END ELSE ADR ~ -2; 02276550
|
|
GO TOIT; 02276600
|
|
END ELSE 02276700
|
|
OWT: FOR NT1 ~ 0 STEP 1 UNTIL NBUF DO 02276750
|
|
M[TOPIO INX N[1] ! *P(DUP) OR IOMASK;% 02277000
|
|
IF LUN{22 AND LUN}20 OR (LUN{18 AND % LP OR CP BK-UP 02278000
|
|
(P(M[TOPIO].[3:5],DUP)=22 OR P(XCH)=10)) 02278100
|
|
THEN 02278500
|
|
BEGIN IF LUN { 18 THEN % UNIT IS BACKUP 02279000
|
|
BEGIN S~17;% 02280000
|
|
STREAM(A,D~L+4); 02281000
|
|
BEGIN SI~A; DS~17 WDS END;% 02282000
|
|
NT4~M[TOPIO INX NOT 2] INX 0;% 02283000
|
|
NT1~M[NT4+14];% 02284000
|
|
NT2~NT1.[FF]; NT1~NT1.[CF];% 02285000
|
|
IF M[TOPIO].[3:5]=22 THEN % NOT CP BK-UP 02285100
|
|
IF NT1=NT2-72 THEN% 02286000
|
|
BEGIN NT1~M[NT4+5].[FF];% 02287000
|
|
M[NT4+5].[FF]~NT1+1;% 02287100
|
|
M[NT2+17]~ @154000400200000 &NT1[CTC];% 02287110
|
|
M[NT4+14].[FF]~NT2-18;% 02287120
|
|
END ELSE% 02287130
|
|
IF M[NT2+35].[27:6]=0 THEN M[NT2+35].[28:1]~1; 02287140
|
|
FIB[17] ~ -1; 02287200
|
|
M[TOPIO] ~ FLAG(FIB[16]&0[20:47:1]&S[8:38:10]); 02287210
|
|
END ELSE % 02287230
|
|
BEGIN T~(A INX @540000000000000)&17[8:38:10]; %150-02287240
|
|
IF SEPARATE THEN T~T&(LUN!22)[32:47:1] %150-02287245
|
|
ELSE T~T&(LUN!22)[28:47:1]; 02287250
|
|
IF LUN!22 THEN %IF PUNCH FILE, IGNORE 02287254
|
|
IF WAITIO(@4002000000,@357,LUN).[45:1] THEN TO QZ; 02287255
|
|
T~WAITIO(T,@357,LUN);% 02287260
|
|
IF T.[45:1] THEN TO GO QZ;% 02287270
|
|
END; 02287280
|
|
END ELSE% 02290000
|
|
IF LUN=23 OR LUN=24 THEN% 02291000
|
|
BEGIN ADR~L+4;% 02292000
|
|
LB: IF(T~UNIT[LUN]).[13:5]=25 THEN% 02293000
|
|
BEGIN ADR ~ IOQUE[S~T.[FF]].[33:15];% 02294000
|
|
STREAM (A~"END":ADR); BEGIN SI ~ ADR;% 02295000
|
|
L:SI ~ SI +1; IF SC = " " THEN TO TO L;% 02296000
|
|
$ SET OMIT = PACKETS 02296999
|
|
$ SET OMIT = NOT(PACKETS) 02297009
|
|
DI:=LOC A;DI:=DI+5; IF 3SC=DC THEN TALLY:=0 ELSE 02297010
|
|
BEGIN DI~LOC A; DS~4 LIT "PACK"; DI~LOC A; 02297100
|
|
SI~SI-3; IF 4SC=DC THEN TALLY~0 ELSE 02297200
|
|
TALLY:=1 END; A:= 02297300
|
|
$ POP OMIT 02297301
|
|
TALLY END; IF P THEN BEGIN% 02298000
|
|
RETURNIOSPACE(S); 02300000
|
|
UNIT[LUN]~@7777777777% 02301000
|
|
END 02302000
|
|
ELSE BEGIN M[TOPIO]~M[TOPIO]OR@2004000000; T~0;% 02303000
|
|
M[M[TOPIO]]~"END. "&@14[1:43:5]; END;% 02304000
|
|
END; 02305000
|
|
IF T!0 THEN% 02306000
|
|
BEGIN% 02307000
|
|
LBI:T~WAITIO(@40000000+ADR,@367,LUN);% 02308000
|
|
IF T.[45:1] THEN GO TO QZ;% 02309000
|
|
IF T.[42:1] THEN GO TO LB ELSE% 02310000
|
|
GO TO LBI% 02311000
|
|
END END;% 02312000
|
|
IF T=0 THEN 02313000
|
|
IF FIB[5].[42:1] 02313500
|
|
THEN FORGETSPACE(L INX 2) 02313600
|
|
ELSE FILECLOSE(TOPIO INX 0); 02314000
|
|
GO TO SIT 02315000
|
|
END; END; 02316000
|
|
FORGETSPACE(A);% 02317000
|
|
T~MSTART;MIXER~@400+P1MIX;% 02318000
|
|
WHILE(L~T.[CF])!0 DO% 02319000
|
|
IF(T~M[L]).[3:12]=MIXER AND T>0 THEN% 02320000
|
|
IF M[M[L+4].[CF]+5].[41:1] THEN FILECLOSE(L+7); 02321000
|
|
T~MSART;MIXER~@600+P1MIX;% 02322000
|
|
WHILE(L~T.[CF])!0 DO% 02323000
|
|
IF(T~M[L]).[3:12]=MIXER AND T>0 THEN% 02324000
|
|
IF M[L+7].[41:1] THEN FILECLOSE(M[L+1] INX 3);% 02325000
|
|
FOR LUN ~ 0 STEP 1 UNTIL 31 DO% 02326000
|
|
IF RDCTABLE[LUN].[6:6] = P1MIX THEN% 02327000
|
|
SLAPITOFF;% 02328000
|
|
PRT[P1MIX,8]:=T:=NFO[(P1MIX-1)|NDX+2]INX 2; 02328100
|
|
M[T]:=-FLAG(0);M[T-1]:=-FLAG(0&(PRT)[6:33:9]); 02328200
|
|
P(.COM5); GO TO DIFFCOM; 02329000
|
|
END;% 02330000
|
|
SAVE PROCEDURE TERMINALMESSAGE(N); VALUE N; REAL N; 02330100
|
|
BEGIN NT1 ~ N; 02330200
|
|
P(0,STF); 02330300
|
|
TERMINALMESSAGE(NT1); 02330400
|
|
END; 02330500
|
|
$ SET OMIT = NOT(DEBUGGING OR CHECKLINK) 02330599
|
|
ARRAY UNITCODE[*]; 02347100
|
|
INTEGER PSEUDOCOPY;% USED BY STARTADECK TO EXERCISE SOME CONTROL %541-02347110
|
|
% OVER THE NO. OF "COPIES" OF CONTROLCARD %541-02347120
|
|
% SERVICING PSEUDO-READERS. %541-02347130
|
|
BOOLEAN PROCEDURE READEMFROMDISK(H,IB); 02347150
|
|
VALUE H,IB; ARRAY H[*],IB[*]; FORWARD; 02347160
|
|
$ SET OMIT = NOT(PACKETS) 02347199
|
|
PROCEDURE DRAINO(UNIT,BUMP,ERROR); 02347200
|
|
VALUE UNIT,BUMP,ERROR; REAL UNIT; BOOLEAN BUMP,ERROR; 02347210
|
|
BEGIN REAL T; 02347220
|
|
LABEL NEXT; 02347222
|
|
UNIT~UNIT-32; 02347230
|
|
IF BUMP THEN 02347240
|
|
PACKETACK[UNIT]:=PACKETACT[UNIT]-1; 02347250
|
|
IF ERROR THEN PACKETERR[UNIT]:=TRUE; 02347260
|
|
IF PACKETACT[UNIT]=0 THEN 02347280
|
|
IF LABELTABLE[UNIT+32]}0 THEN 02347290
|
|
IF CIDTAABLE[UNIT,3]<CIDTABLE[UNIT,7] THEN 02347300
|
|
BEGIN 02347310
|
|
LABELTABLE[UNIT+32]~-@14; 02347315
|
|
T~SPACE(13)+2; M[T-4].[9:6]~0; 02347320
|
|
M[T INX 10]~UNITCODE[UNIT+9]; 02347325
|
|
NEXT: DO UNTIL READEMFROMDISK(CIDROW[UNIT], 02347330
|
|
[M[T]]&10[8:38:10]); 02347335
|
|
IF PACKETERR[UNIT] THEN BEGIN; 02347340
|
|
STREAM(E~"END": Q~@14,D~T); 02347350
|
|
BEGIN SI~LOC Q; SI~SI+7; IF SC!DC THEN DI~DI+1; 02347360
|
|
Q~DI; S1~Q; 02347370
|
|
L: IF SC=" " THEN BEGIN SI~SI+1; GO TO L END; 02347380
|
|
DI~LOC E; DI~DI+5; IF 3 SC!DC THEN TALLY+1; 02347390
|
|
E~TALLY; END; 02347400
|
|
IF P THEN GO TO NEXT; END; 02347410
|
|
INDEPENDENTRUNNER(P(.CONTROLCARD),T&(UNIT+32)[2:42:6] 02347430
|
|
&ERROR[1:1:1],192); 02347435
|
|
PSEUDOCOPY~PSEUDOCOPY+1;% %541-02347437
|
|
END ELSE 02347440
|
|
ENDOFDECK(UNIT,(UNIT+32)&ERROR[1:1:1]); 02347450
|
|
END DRAINO; 02347460
|
|
$ POP OMIT 02347461
|
|
REAL PROCEDURE UNITIN(TINU,WHAT); VALUE WHAT; REAL WHAT; 02348000
|
|
ARRAY TINU[*]; 02348500
|
|
BEGIN REAL HOLD; INTEGER T;% 02349000
|
|
STREAM(A~0:WHAT);% 02350000
|
|
BEGIN SI ~ WHAT;% 02351000
|
|
L: IF SC = " " THEN 02352000
|
|
BEGIN SI ~ SI + 1; GO TO L; END;% 02353000
|
|
DI ~ LOC A; DI ~ DI + 5; DS ~ 3 CHR;% 02353500
|
|
END STREAM;% 02354000
|
|
HOLD ~ POLISH;% 02355000
|
|
$ SET OMIT = NOT(SHAREDISK) 02355999
|
|
$ SET OMIT = SHAREDISK 02356499
|
|
FOR I~0 STEP 1 UNTIL 64 DO 02356500
|
|
$ POP OMIT 02356501
|
|
IF TINU[I].[30:18]=HOLD.[30:18] THEN 02357000
|
|
BEGIN 02357500
|
|
HOLD~I; 02357600
|
|
I~70; 02357700
|
|
END; 02357800
|
|
UNIT~IF I<70 THEN 69 ELSE HOLD; 02358000
|
|
END UNITIN; 02359000
|
|
PROCEDURE IDLETIME;% 02360000
|
|
BEGIN REAL C,N;% 02361000
|
|
INTEGER T;% 02362000
|
|
HALT;% 02363000
|
|
C ~ ((P2MIX}0)+1)|(CLOCK+P(RTR));% 02364000
|
|
FOR T ~ 1 STEP 1 UNTIL MIXMAX DO% 02365000
|
|
IF JAR[T,*] ! 0 THEN% 02366000
|
|
BEGIN N ~ N+1;% 02367000
|
|
C ~ -JAR[T,3]-PROCTIME[T]+C; 02368000
|
|
END;% 02369000
|
|
IF N ! 0 THEN% 02370000
|
|
T ~ (C-OLDIDLETIME)/N);% 02371000
|
|
OLDIDLETIME ~ C;% 02372000
|
|
FOR N ~ 1 STEP 1 UNTIL MIXMAX DO% 02373000
|
|
IF JAR[N,*] ! 0 THEN% 02374000
|
|
JAR[N,7] ~ *P(DUP)+T;% 02375000
|
|
NOPROCESSTOG ~ NOPROCESSTOG-1;% 02376000
|
|
END;% 02377000
|
|
DEFINE ENTERUSERFILE(ENTERUSEFILE1,ENTERUSERFILE2,ENTERUSERFILE3)= 02378000
|
|
P(EUF(ENTERUSERFILE1,ENTERUSERFILE2,ENTERUSERFILE3),DEL);% 02378500
|
|
REAL PROCEDURE FUF(A,B,L); VALUE A,B,L; REAL A,B,L; FORWARD; 02379000
|
|
INTEGER PROCEDURE CALCULATEPURGE(PURGE);% 02380000
|
|
VALUE PURGE; REAL PURGE;% 02381000
|
|
BEGIN REAL Y,D;% 02382000
|
|
REAL J;% 02383000
|
|
REAL C=+1;;% 02384000
|
|
STREAM(A~[DATE],B~[Y]);% 02385000
|
|
BEGIN S1~A; SI~SI+3; DS ~ 2 OCT; DS ~ 3 OCT END;% 02386000
|
|
J ~ (D ~ ( Y+3) DIV 4|1461+(Y+3) MOD 4 | 365 +D+PURGE-% 02387000
|
|
1) DIV 1461;% 02388000
|
|
IF (Y ~ (D ~ D MOD 1461) DIV 365) = 4 THEN% 02389000
|
|
BEGIN Y ~ 3; D ~ 365 END ELSE D ~ D MOD 365;% 02390000
|
|
CALCULATEPURGE ~ (4|J+Y-3)|1000+D+1;% 02391000
|
|
STREAM(C~[C]); BEGIN SI~C; DS ~ 8 DEC END;% 02392000
|
|
END;% 02393000
|
|
PROCEDURE CHANGEDATE(BUFF); VALUE BUFF; REAL BUFF; FORWARD; 02393100
|
|
DEFINE MIDNIGHT = BEGIN XCLCK:=XCLOCK-WITCHINGHOUR; 02393200
|
|
DATE:=CALCULATEPURGE(1); 02393225
|
|
CHANGEDATE(SPACE(10)); 02393250
|
|
END#; 02393300
|
|
REAL PROCEDURE TAPELABEL(M,F,R,C,P); VALUE M,F,R,C,P; %AI02393400
|
|
REAL M,F,R,C,P; FORWARD; %AI02393500
|
|
$ SET OMIT = NOT (DUMP OR DEBUGGING OR BREAKOUT) 02393790
|
|
REAL MFMASK; 02393800
|
|
$ POP OMIT 02393810
|
|
$ SET OMIT = NOT DEBUGGING %763-02393999
|
|
$ SET OMIT = NOT (DEUBGGING OR DUMP) %763-02434051
|
|
PROCEDURE DUMPCODE(BUFF); %AI02434100
|
|
VALUE BUFF; REAL BUFF; %AI02434110
|
|
BEGIN REAL B,S,N,TM,TA,U,D; %AI02434120
|
|
INTEGER I; REAL MASK,PARITY; 02434125
|
|
ARRAY TP[*]; ARRAY TL[*]; %AI02434130
|
|
LABEL X,L1,ERR; 02434135
|
|
SUBROUTINE CHECK; 02434162
|
|
BEGIN 02434164
|
|
IF P(XCH)=@20 THEN 02434166
|
|
BEGIN 02434168
|
|
STREAM(B~BUFF~BUFF.[15:15]-1); 02434170
|
|
DS~32LIT"-DPMT ABORTED, TRY ANOTHER TAPE~"; 02434172
|
|
P(WAITIO(@4740000020,@377,U),DEL); % SPACEBACK 02434174
|
|
PARITY~1; 02434176
|
|
GO ERR; 02434178
|
|
END; 02434180
|
|
END; 02434182
|
|
FOR U~0 STEP 1 UNTIL 15 DO 02434185
|
|
IF (MULTITABLE[U] EQV "MEMORY ")=NOT 0 THEN 02434190
|
|
IF (LABELTABLE[U].[5:25]="1DUMP") THEN GO L1; 02434195
|
|
FOR U~0 STEP 1 UNTIL 15 DO IF LABELTABLE[U]=0 %AI02434200
|
|
AND PRNTABLE[U].[1:1] THEN TO GO TO L1; %AI02434210
|
|
BUFF:=BUFF.[15:15]-1; %AI02434215
|
|
STREAM(BUFF); %AI02434220
|
|
DS:=17LIT"#NO MEMDUMP TAPE~"; 02434230
|
|
GO TO X; %AI02434240
|
|
L1: MULTITABLE[U]:="MEMORY "; %AI02434250
|
|
LABELTABLE[U].[1:29]:=@1024644447; %AI02434260
|
|
STREAM(A:="001",B:=[LABELTABLE[U]]); %AI02434270
|
|
BEGIN SI := LOC A; SI := SI + 5; %AI02434280
|
|
DI:=DI+5; DS:=3ADD; %AI02434290
|
|
END; %AI02434300
|
|
RRRMECH := TWO(U) OR RRRMECH; %AI02434310
|
|
B~(SPACE(20))&20[8:38:10]&5[21:45:3]; 02434320
|
|
STREAM(LTT~BUFF.[33:15]<100,BUFF~BUFF.[33:15],B); 02434330
|
|
BEGIN %AI02434340
|
|
DS:=8LIT" "; SI:=B; DS:=19WDS; %AI02434350
|
|
DI ~ B; 02434360
|
|
LTT(SI ~ LOC BUFF; DS ~ 2 DEC; JUMP OUT 1 TO L);02434365
|
|
SI ~ BUFF; 02434367
|
|
20(8(IF SC!"~" THEN DS~CHR ELSE JUMP OUT 2 %AI02434370
|
|
TO L)); L: %AI02434380
|
|
END; 02434390
|
|
LABELTABLE[U].[1:5]:=@20; %AI02434400
|
|
TL:=[M[TAPELABEL("MEMORY ",LABELTABLE[U].[6:42], %AI02434410
|
|
1,1,100]]710[8:28:10]&5[21:45:3]; 02434420
|
|
STREAM(A~PRNTABLE[U],[30:18],TL); 02434424
|
|
BEGIN SI~LOC A; DI~DI+53; DS~5 DEC END; %AI02434426
|
|
TP:=[M[TA:=TYPEDSPACE(513,MDUMPAREAV)]]&513[8:38:10]&02434430
|
|
5[21:45:3];% %167-02434435
|
|
TM:=0&@1737[1:37:11]; %AI02434440
|
|
MASK~@40 & @20[CTF]; %AI02434445
|
|
S:=0; %AI02434470
|
|
HALT; SLEEP([TOGLE],STOREMASK); %AI02434480
|
|
LOCKTOG(STOREMASK); 02434490
|
|
WHILE (S:=M[S]).[33:15] NEQ 0 DO %AI02434500
|
|
IF M[S].[1:17]=@1000 THEN %AI02434510
|
|
D:=OLAY(S.[33:15]); %AI02434520
|
|
UNLOCKTOG(STOREMASK); 02434530
|
|
P(WAITIO(TL,MASK,U),DEL); 02434532
|
|
P(WAITIO([TM],MASK,U),DEL); 02434534
|
|
S:=0; %AI02434540
|
|
DO BEGIN %AI02434550
|
|
N:=S.[33:3]; %AI02434560
|
|
IF(MEMASK AND TWO(N))NEQ 0 THEN S:=-S 02434570
|
|
ELSE MOVE(512,S,TA+1); %AI02434580
|
|
TP[0] := S; %AI02434590
|
|
P(WAITIO(TP,MASK,U)); CHECK; 02434600
|
|
IF S LSS 0 THEN S := 3584 - S; %AI02434610
|
|
END UNTIL (S:=S+512).[18:15]; %AI02434620
|
|
P(WAITIO(B,MASK,U)); CHECK; 02434630
|
|
LABELTABLE[U].[1:5]~@01; %AI02434690
|
|
BUFF:=BUFF.[15:15-1; %AI02434695
|
|
STREAM(U~TINU[U],L~LABELTABLE[U],BUFF); %AI02434700
|
|
BEGIN %AI02434710
|
|
SI:=LOC U; SI := SI + 5; %AI02434720
|
|
DS:=1LIT" "; DS:=3CHR; %AI02434730
|
|
SI~LOC L; SI~SI+1; DS~ 1 LIT " "; DS~7 CHR; %AI02434735
|
|
DS:=7LIT" DP-ED~"; %AI02434740
|
|
END; %AI02434750
|
|
ERR: P(WAITIO([TM],MASK,U),DEL); 02434760
|
|
P(WAITIO(TL,MASK,U),DEL); 02434770
|
|
IF PARITY HEN SETNOTINUSE(U,1) ELSE 02434780
|
|
BEGIN 02434790
|
|
P(WAITIO([TM],MASK,U),DEL); 02434800
|
|
P(WAITIO(@4740000020,@377,U),DEL); 02434810
|
|
END; 02434820
|
|
FORGETSPACE(TP); 02434830
|
|
FORGETSPACE(TL); 02434840
|
|
FORGETSPACE(B); 02434850
|
|
NOPROCESSTOG!NOPROCESSTOG-1; 02434860
|
|
X: SPOUT(BUFF); 02434870
|
|
END DUMPCORE; 02434880
|
|
$ POP OMIT 02434890
|
|
$ SET OMIT = NOT(DEBUGGING) 02434999
|
|
$ SET OMIT = NOT(DATACOM AND DCSPO ) 02522099
|
|
PROCEDURE NAMEIO(A,KTR);% 02603000
|
|
REAL A,KTR;% 02604000
|
|
BEGIN;% 02605000
|
|
STREAM(A~[A]:KTR);% 02606000
|
|
BEGIN DI ~ A; DS ~ 8 LIT "0 ";% 02607000
|
|
DI ~ DI-7; SI ~ KTR;% 02608000
|
|
L: IF SC = " " THEN% 02609000
|
|
BEGIN SI ~ SI+1; GO TO L END;% 02610000
|
|
IF SC = """ THEN% 02611000
|
|
BEGIN SI ~ SI+1;% 02612000
|
|
7(IF SC = "~" THEN JUMP OUT TO EXIT;% 02613000
|
|
DS ~ CHR;% 02614000
|
|
IF SC = """ THEN JUMP OUT TO LQ;);% 02615000
|
|
LS: IF SC ! """ THEN IF SC ! LEFTARROW THEN %152-02615100
|
|
BEGIN SI := SI + 1; GO TO LS; END; %152-02615200
|
|
IF SC = LEFTARROW THEN GO TO EXIT; %152-02615300
|
|
LQ: SI ~ SI+1;% 02616000
|
|
GO TO EXIT;% 02617000
|
|
END;% 02618000
|
|
IF SC = ALPHA THEN% 02619000
|
|
BEGIN 7(DS ~ CHR;% 02620000
|
|
IF SC = ALPHA THEN GO TO LA;% 02621000
|
|
JUMP OUT TO EXIT;% 02622000
|
|
LA: );% 02623000
|
|
LE: IF SC = ALPHA THEN % 02623500
|
|
BEGIN SI~SI+1; GO TO LE; END; % 02623501
|
|
GO TO FIXIT;% 02624000
|
|
END;% 02625000
|
|
IF SC = "~" THEN% 02626000
|
|
BEGIN DS ~ CHR; SI ~ SI-1; GO TO EXIT END;% 02627000
|
|
IF SC = "=" THEN% 02628000
|
|
BEGIN DS~2 LIT"~~"; SI~SI+1; GO TO EXIT END; 02629000
|
|
DS ~ CHR;% 02630000
|
|
EXIT:A ! SI;% 02631000
|
|
END;% 02632000
|
|
KTR ~ P(XCH);% 02633000
|
|
END;% 02634000
|
|
REAL PROCEDURE TAPELABEL(MULFID,FID,REELNO,CYCLE,PURGE);% 02635000
|
|
VALUE MULFID,FID,REELNO,CYCLE,PURGE;% 02636000
|
|
REAL MULFID,FID,REELNO,CYCLE,PURGE;% 02637000
|
|
BEGIN REAL LBL;% 02638000
|
|
LBL:=TYPEDSPACE(10,LABELAREAV);% %167-02639000
|
|
STREAM(% 02640000
|
|
DATE, MULFID,FID,REELNO,CYCLE,PU~CALCULATEPURGE(PURGE),% 02641000
|
|
LBL);% 02642000
|
|
BEGIN% 02643000
|
|
DS~8 LIT" LABEL ";% 02644000
|
|
SI~LOC MULFID;% 02645000
|
|
DS~WDS;% 02646000
|
|
DS~WDS;% 02647000
|
|
DS~3 DEC;% 02648000
|
|
SI ~ LOC DATE; SI ~ SI+3;% 02649000
|
|
DS ~ 5 CHR;% 02650000
|
|
SI~LOC CYCLE;% 02651000
|
|
DS~ 2 DEC; 02652000
|
|
SI~LOC PU; SI~SI+3;% 02653000
|
|
DS~5 CHR; DS~1 LIT"0";% 02654000
|
|
5(DS~8 LIT"00000000")% 02655000
|
|
END;% 02656000
|
|
TAPELABEL~LBL;% 02657000
|
|
END;% 02658000
|
|
REAL PROCEDURE LABELASCRATCH(LBL); VALUE LBL; REAL LB;% 02659000
|
|
BEGIN% 02660000
|
|
REAL LUN,TM,REEL,T; 02661000
|
|
LBL ~ P(.LBL,LOD).]CF] & 10[8:38:1]; & 02662000
|
|
(IF P(.LBL,LOC).[7:1] THEN 1 ELSE 5)[21:45:3]; 02662050
|
|
STREAM(L~LBL+3,R~[REEL]); 02662100
|
|
BEGIN SI~L; DSD~3 OCT END; 02662200
|
|
LUN~FINDOUTPUT(M[LBL+1],M[LBL+2],REEL,0,0,2,0,TM); 02663000
|
|
IF LUN}0 THEN 02663100
|
|
BEGIN; 02663200
|
|
STREAM(A~PRNTABLE[LUN].[30:18]],T~[T],L~LBL+6); 02664000
|
|
BEGIN DI~DI+5; SI~LOC A; DS~5DEC; SI~SI-8; DI~T; 02664100
|
|
DS~8DEC; DI~DI-7; DS~6FILL; END; 02665000
|
|
RDCTABLE[LUN].[8:6]~P1MIX; 02665100
|
|
M[LBL+1].[1:5]:=0; %148-02665110
|
|
MULTITABLE[LUN]~M[LBL+1]; 02665150
|
|
RRRMECH~TWO(LUN) OR RRRMECH; 02665200
|
|
P(WAITIO(LBL,0,LUN),DEL); 02666000
|
|
TM~0&"}~"[1:37:11];% 02667000
|
|
P(WAITIO([TM],0,LUN),DEL);% 02668000
|
|
$ SET OMIT = PACKETS 02668099
|
|
FILEMESSAGE(" OUT"&TINU[LUN][6:30:18],T, 02668500
|
|
M[LBL+1],M[LBL+2],REEL,0,0,OPNMESS); 02668600
|
|
END; 02668800
|
|
LABELASCRATCH~LUN% 02669000
|
|
END LABELASCRATCH;% 02670000
|
|
PROCEDURE NSECOND;FORWARD;% 02692000
|
|
DEFINE CHECKSTACKSPACE = IF P(PRT[P1MIX,*] INX 0)-P(0,RDS)<128 %WF 02693000
|
|
THEN BEGIN P(64,STS); GO TO STACKOVERFLOW; END#; %WF 02694000
|
|
ARRAY USERCODE[*]; 02695000
|
|
REAL PROCEDURE SECURITYCHECK(M,F,U,H); 02696000
|
|
VALUE M,F,U; REAL M,F,U,H; FORWARD; 02696100
|
|
PROCEDURE MAKEPRESENT(C); VALUE C; REAL C; FORWARD; 02696200
|
|
PROCEDURE SIGNOFF(V,F,W);VALUE V,F,W;ARRAY V[*],F[*];REAL W;FORWARD; 02696300
|
|
SAVE PROCEDURE IOREQUEST(F,I,L); VALUE F,I,L; ARRAY F,L[*]; REAL I; 02696500
|
|
FORWARD; 02696600
|
|
BOOLEAN PROCEDURE MTXIN(I,UMB); REAL U,B; INTEGER I; FORWARD; 02696700
|
|
$ SET OMIT = NOT(BREAKOUT AND AUXMEM) 02697299
|
|
DEFINE CODEADDRESS(CODEADDRESS1,CODEADDRESS2)= 02697710
|
|
ACTUALOVERLAYADDRESS(1,CODEADDRESS1,CODEADDRESS2)#, 02697720
|
|
DATAADDRESS(DATAADDRESS1,DATAADDRESS2)= 02697730
|
|
ACTUALOVERLAYADDRESS(0,DATAADDRESS1,DATAADDRESS2)#; 02697740
|
|
SAVE INTEGER PROCEDURE ACTUALOVERLAYADDRESS(TYPE,MIX,LOC); 02697750
|
|
VALUE TYPE,MIX,LOC); INTEGER TYPE,MIX,LOC; FORWARD; 02697770
|
|
$ SET OMIT = NOT(BREAKOUT) 02700000
|
|
$ SET OMIT = NOT(DATACOM AND DCSPO ) 03500099
|
|
SAVE PROCEDURE INITIATEIO(IODESC,MIX,U);% 04000000
|
|
VALUE IODESC,MIX,U;% 04001000
|
|
REAL MIX,U;% 04002000
|
|
REAL IODESC;% 04003000
|
|
BEGIN REAL C=+1;LABEL EXIT; 04004000
|
|
$ SET OMIT = NOT(STATISTICS) 04004099
|
|
IF (P(IODESC.[3:5] %204-04004110
|
|
$SET OMIT = DKBNODFX %204-04004119
|
|
,DUP)= @14 OR P(XCH %204-04004120
|
|
$ POP OMIT %204-04004121
|
|
) = @6) AND %204-04004130
|
|
NOT IODESC.[24:1] AND %204-04004140
|
|
(((P(M[IODESC.[CF]],DUP) EQV 0)=NOT 0) OR %204-04004150
|
|
((P(XCH) EQV 32)=NOT 0)) AND %204-04004155
|
|
NOT OKSEGZEROWRITE THEN %204-04004160
|
|
BYBY("SEGMENT ZERO OVERWRITE~",23); %204-04004170
|
|
P(TIO); 04004200
|
|
CHANNEL[P(DUP)]*U; 04005000
|
|
P([IODESC],TIO); 04006000
|
|
CNANIO[C]~CLOCK+P(RTR); 04007000
|
|
$ SET OMIT = NOT(STATISTICS AND AUXMEM) 04007099
|
|
IF U < 16 THEN 04008000
|
|
BEGIN 04008100
|
|
IF IODESC.[22:1] THEN% 04009000
|
|
BEGIN TRANSACTION[U] ! IF IODESC.[18:1] THEN 0% 04010000
|
|
ELSE TRANSACTION[U]-1;% 04011000
|
|
GO TO EXIT;% 04012000
|
|
END; 04013000
|
|
$ SET OMIT = NOT(STATISTICS) 04013009
|
|
END 04013100
|
|
ELSE 04013200
|
|
IF (U OR 1)=19 THEN 04013300
|
|
BEGIN 04014000
|
|
FUIO[C]~CLOCK+P(RTR); 04014002
|
|
$ SET OMIT = NOT(STATISTICS) 04014009
|
|
END; 04014100
|
|
$ RESET OMIT 04014105
|
|
TRANSACTION[U] := P(DUP,LOD)+1; 04014500
|
|
EXIT:END;% 04015000
|
|
SAVE PROCEDURE QUEUEUP(U); VALUE U; REAL U;% 04016000
|
|
BEGIN IF U=30 THEN 04016100
|
|
WAITQUE[FIRSTWAIT:=(FIRSTWAIT+31) AND 31]:=U ELSE 04016200
|
|
BEGIN WAITQUE[NEXTWAIT] ~ U;% 04017000
|
|
NEXTWAIT ~ NEXTWAIT+1 AND 31;% 04018000
|
|
END;% 04019000
|
|
END; 04019100
|
|
$ SET OMIT = NOT(DFX) 04019499
|
|
SAVE PROCEDURE STARTIO(U); VALUE U; REAL U; 04020000
|
|
BEGIN REAL T=NT1,R=NT2, S=NT3;% 04021000
|
|
$ SET OMIT = NOT(DFX) 04021099
|
|
IF (T ~ UNIT[U]).[13:5] = 0 THEN% 04022000
|
|
IF (S ~ T.[18:15]) < @1777 THEN% 04023000
|
|
$ SET OMIT = NOT(DFX) 04023099
|
|
BEGIN IF P(TIO) ! 0 THEN% 04024000
|
|
BEGIN INITIATEIO(IOQUE[S],LOCATQUE[X].[3:5]04025000
|
|
,U);% 04026000
|
|
P(3);% 04027000
|
|
END% 04028000
|
|
ELSE BEGIN QUEUEUP(U);% 04029000
|
|
P(4);% 04030000
|
|
END;% 04031000
|
|
P(T&P(XCH)[15:45:3],UNIT[U],~);% 04032000
|
|
$ SET OMIT = DFX 04032999
|
|
END;% 04033000
|
|
$ POP OMIT 04033001
|
|
$ SET OMIT = NOT(DFX) 04033049
|
|
END;% 04034000
|
|
SAVE PROCEDURE PRINTERFINISHED(U); VALUE U; REAL U;% 04035000
|
|
BEGIN 04036000
|
|
$ SET OMIT = NOT(NEWLOGGING) 04036099
|
|
IF NOT UNIT[U].[16:1] THEN UNIT[U].[17:1] ~ 0; 04036200
|
|
STARTIO(U);% 04037000
|
|
GO TO EXTERNAL;% 04038000
|
|
END;% 04039000
|
|
SAVE PROCEDURE IOREQUEST(FINAL,IODESC,LOCATION);% 04040000
|
|
VALUE FINAL,IODESC,LOCATION;% 04041000
|
|
ARRAY FINAL,LOCATION[*];% 04042000
|
|
REAL IODESC;% 04043000
|
|
BEGIN REAL U=NT1,T=NT2,S=NT3,R=+1;% 04044000
|
|
$ SET OMIT = NOT(DFX) 04044099
|
|
IF IOQUESLOTS LEQ 04045000
|
|
(U:=IF LOCATION.[9:1] OR P1MIX=0 THEN 0 ELSE 7) THEN 04045100
|
|
SLEEP([IOQUESLOTS],@77-U); 04045200
|
|
IOQUEAVAIL ~ IOQUE[S:=IOQUEAVAIL]; 04046000
|
|
$ SET OMIT = NOT(STATISTICS) 04047009
|
|
$ SET OMIT = NOT(DFX) 04047099
|
|
$ SET OMIT = NOT(DKBNODFX AND NOT DFX) 04048701
|
|
$ SET OMIT = DFX 04048799
|
|
IF (T ~ UNIT[U ~ LOCATION.[12:6]]).[13:5] = 0 THEN 04048800
|
|
$ POP OMIT 04048801
|
|
BEGIN IF P(TIO) ! 0 THEN% 04049000
|
|
BEGIN INITIATEIO(IODESC,P1MIX,U);% 04050000
|
|
P(3);% 04051000
|
|
END ELSE BEGIN QUEUEUP(U);% 04052000
|
|
P(4);% 04053000
|
|
END;% 04054000
|
|
T ~ T&P(XCH)[15:45:3]&S[18:33:15];% 04055000
|
|
END ELSE% 04056000
|
|
IF T.[18:6] = @77 THEN% 04057000
|
|
T.[18:15] ~ S ELSE% 04058000
|
|
LOCATQUE[P(T.[33:15],DUP)]~LOCATQUE[R]&% 04059000
|
|
S[18:33:15];% 04060000
|
|
$ SET OMIT = NOT(DFX) 04060099
|
|
IOQUESLOTS:=IOQUESLOTS-1; 04060500
|
|
LOCATQUE[S] ~ LOCATION&P1MIX[3:43:5] OR @7777700000;% 04061000
|
|
$ SET OMIT = DFX 04061999
|
|
UNIT[U] ~ T&S[33:33:15];% 04062000
|
|
$ POP OMIT 04062001
|
|
IOQUE[S] ~ IODESC;% 04063000
|
|
FINALQUE[S] ~ FINAL;% 04064000
|
|
END;% 04065000
|
|
SAVE PROCEDURE FINISHOFFIO(U); VALUE U; REAL U;% 04067000
|
|
BEGIN REAL T=NT1, FIN=NT3, V=NT4, IOD=NT6; 04068000
|
|
LABEL ON,OFF,C0,C1,C2,C3,C4,C5,C6,C7;% 04069000
|
|
SWITCH CSW ~ C0,C1,C2,C3,C4,C5,C6,C7;% 04070000
|
|
IF FIN > 0 THEN% 04071000
|
|
IF FIN.[25:1] THEN% 04072000
|
|
BEGIN T ~ FIN.[3:5];% 04073000
|
|
FIN ~ FIN&IOD[3:3:5]&0[25:25:1];% 04074000
|
|
GO TO CSW[T];% 04075000
|
|
END ELSE GO ON ELSE GO ON;% 04076000
|
|
C0: GO TO C0;% 04077000
|
|
C1: FIN.[8:10] ~ V;% 04078000
|
|
GO TO C2;% 04079000
|
|
C3: FIN.[8:10] ~ V;% 04080000
|
|
C4: FIN ~ NOT V INX 1 INX FIN;% 04081000
|
|
GO TO C5;% 04082000
|
|
C6: STREAM(A~0:IOD);% 04083000
|
|
BEGIN DI ~ LOC A; SI ~ IOD; SI ~ SI+4; DS~4 OCT END; 04084000
|
|
T ~ P DIV 8-1;% 04085000
|
|
OFF: FIN.[8:10] ~ T;% 04086000
|
|
GO TO C2;% 04087000
|
|
C7: STREAM(A~0:IOD);% 04088000
|
|
BEGIN DI ~ LOC A; SI ~ IOD; DS ~ 4 OCT END;% 04089000
|
|
T ~ P DIV 8-1;% 04090000
|
|
FIN ~ (NOT T INX 1 INX FIN)&T[8:38:10];% 04091000
|
|
GO TO C5;% 04092000
|
|
ON: IF U < 16 THEN% 04093000
|
|
IF IOD.[22:1] THEN% 04094000
|
|
C5: M[IOD INX 1] ~ M[NOT V INX IOD INX 1] ~ V% 04095000
|
|
ELSE% 04096000
|
|
C2: M[IOD INX NOT 0] ~ V;% 04097000
|
|
END;% 04098000
|
|
PROCEDURE PROGRAMRELEASE;% 04099000
|
|
BEGIN NAME T; REAL FSX=JUNK; 04100000
|
|
ARRAY R=-4[*];% 04101000
|
|
REAL IOD=NT1;% 04102000
|
|
ARRAY LOCN[*];% 04103000
|
|
REAL S; 04103050
|
|
CHECKSTACKSPACE;% %WF 04103100
|
|
LOCN~M[S~(IF(IOD~NFLAG(M[P(T~[M[PRT[P1MIX,9]]],DUP,PRL)])) 04104000
|
|
.[22:1] THEN 2 ELSE NOT 1) INX IOD); 04105000
|
|
IF IOD.[3:5]= 6 THEN 04105100
|
|
BEGIN; STREAM(S:=M[PRT[P1MIX,8]] INX P(DUP,0,XCH,DIA 10, 04105200
|
|
DIB 30,TRB 2),D~@600005); 04105300
|
|
BEGIN SI~S; DS~2 CHR END; 04105400
|
|
$ SET OMIT = NOT(STATISTICS) 04105409
|
|
IF JUNK.[36:12]!45 AND RELTOG 04105500
|
|
OR M[IOD].[3:6] = 0 AND M[IOD] LSS (DIRDSK | DSKTOG) THEN 04105510
|
|
IF (USERCODE[P1MIX] EQV MCP) ! NOT 0 THEN % 04105550
|
|
BEGIN TERMINATE(P1MIX); TERMINALMESSAGE(30) END; 04105600
|
|
IF(FS[P1MIX,(FSX~P(*(NOT 2 INX LOCN),4,COC).[13:11] 04105650
|
|
DIV 5).[40:4]] 04105700
|
|
AND TWO(IOD.[24:1]&FSX[43:44:4]))!0 THEN 04105750
|
|
BEGIN T[0]:=T[0]&1[19:47:1]&0[26:40:7]; 04105800
|
|
M[(*((NOT 2)INX LOCN))INX 5 ]:= NABS(*P(DUP)); 04105850
|
|
GO TO RETURN; 04105890
|
|
END; 04105900
|
|
IF NOT IOD.[24:1] THEN M[S].[11:1]~1; 04105950
|
|
END DISK BUSINESS; 04105990
|
|
IF IOD.[3:5]=30 THEN GO RETURN; % SPO %846-04105998
|
|
IOREQUEST(R,IOD,LOCN);% 04106000
|
|
T[0].[19:1] ~ 0; 04107000
|
|
IF (NT1~P(*(NOT 2 INX LOCN),13,COC).[10:9]-1)!0 THEN% 04108000
|
|
STREAM(NT1,C~T[0],T); 04109000
|
|
BEGIN SI ~ T; SI ~ SI+8; DS ~ NT1 WDS;% 04110000
|
|
SI ~ LOC C; DS ~ WDS;% 04111000
|
|
END;% 04112000
|
|
GO TO RETURN;% 04113000
|
|
END;% 04114000
|
|
SAVE PROCEDURE NEWIO;% 04115000
|
|
BEGIN REAL S=NT3,U=NT4;% 04116000
|
|
S ~ UNIT[U~WAITQUE[FIRSTWAIT]].[18:15];% 04117000
|
|
INITIATEIO(IOQUE[S],LOCATQUE[S].[3:5],U);% 04118000
|
|
FIRSTWAIT ~ FIRSTWAIT+1 AND 31;% 04119000
|
|
UNIT[U].[13:5] ~ 3;% 04120000
|
|
END;% 04121000
|
|
REAL MDELTA = @11;% 04121050
|
|
REAL MLOG = @12;% 04121100
|
|
REAL MROW = @13;% 04121150
|
|
REAL LOGSIZE = @43;% 04121170
|
|
REAL LOGHOLDER = @56;% 04121200
|
|
REAL NUMAINTMESS = @57;% 04121250
|
|
REAL LOGENTRY = @63;% 04121300
|
|
REAL NXDISK = @76;% 04121350
|
|
ARRAY MAINTLOGARRAY = @77[*];% 04121400
|
|
PROCEDURE DISKORAUXERROR(R); VALUE R; REAL R; FORWARD; 04121410
|
|
PROCEDURE ACTUALIOERR(R); VALUE R; REAL R; FORWARD; 04121425
|
|
PROCEDURE LINKUP(TYPE,KEY); VALUE TYPE,KEY; REAL TYPE,KEY; FORWARD;% 04121450
|
|
PROCEDURE CHECKJOBORFILEMESS(MIX,FIB,U);% 04121500
|
|
VALUE MIX,FIB,U; REAL MIX,FIB,U; FORWARD;% 04121550
|
|
PROCEDURE LOGOUTMAINT(B); VALUE B; REAL B; FORWARD;% 04121600
|
|
PROCEDURE MAINTLOGGER(B); VALUE B; REAL B; FORWARD;% 04121650
|
|
DEFINE 04121700
|
|
LOGVERSION=( % VERSION NUMBER ON NEXT CARD 04121710
|
|
2 04121720
|
|
& % CURRENT ENTRIES ON NEXT CARD 04121730
|
|
21 04121740
|
|
[30:42:6])#, 04121750
|
|
TAPEBUFFERSIZE = 200#; 04121850
|
|
ARRAY MAINTBUFFER[*]; 04121950
|
|
SAVE PROCEDURE IOFINISH(C,R); VALUE R,C; REAL R,C; 04122000
|
|
BEGIN BOOLEAN STOP; 04123000
|
|
COMMENT 04123010
|
|
WHEN E!0, STOP TAKES THE FOLLOWING VALUES: 04123020
|
|
0 DISK ERROR (OTHER THAN NOT READY ON A DFX SYSTEM). 04123030
|
|
1 ANY ERROR OTHER THAN THOSE LISTED FOR 0, 2 OR 3. 04123040
|
|
2 LOCKED ADDRESS (SHAREDISK). 04123050
|
|
3 ANY ERROR OCCURRING WHEN UNIT[U].[5:8]!0 (A RETRY). 04123060
|
|
WHEN E=0, STOP TAKES THESE VALUES: 04123070
|
|
-2 IO FOR WHICH COMPLETE SHOULD NOT BE SET (DATACOM OR 04123080
|
|
DISK WRITE BEFORE READ WITH UNIT OR EU SWITCH). 04123090
|
|
1 PRINTER IO. 04123100
|
|
0 NORMAL IO. 04123110
|
|
END COMMENT; 04123120
|
|
REAL TIM=STOP+1, U=TIM+1; 04123500
|
|
LABEL TEST,NOWAIT,PROC,NEW,QUP,INCR; 04124000
|
|
LABEL ERRORS,DISKERR,DS,X,SW,LP,DK,DX,DX1,DC,OK,L1; %111-04125000
|
|
REAL T=NT1,S=NT2,S1=NT3,V=NT4,E=NT5,I=NT7;% 04126000
|
|
NAME LOCN=E; REAL IOD=NT6, FIN=S1; 04127000
|
|
SWITCH TYPE := OK,LP,OK,OK,DK,OK,OK,OK,OK,OK,DC; %111-04128000
|
|
04128010
|
|
$ SET OMIT = NOT(DFX) 04128099
|
|
$ SET OMIT = NOT(NEWLOGGING) 04128799
|
|
P(CHANIO[C]); % INITIALIZES TIM04128900
|
|
S:=(T:=UNIT[P(CHANNEL[C],DUP)]).[18:15]; % INITIALIZES U 04129000
|
|
$ SET OMIT = NOT SEPTICTANK 04129490
|
|
% %111-04129520
|
|
% CHECK FOR A PARTIAL WORD BINARY READ WITH NO PARITY ERRORS. THIS IS 04129530
|
|
% ILLEGAL AND IS MARKED AS BEING A PARITY ERROR. %111-04129540
|
|
% %111-04129550
|
|
IF U LEQ 15 THEN % TAPE I/O %111-04129560
|
|
IF (R.[18:12] AND @4462) = @0440 THEN % BIN READ-NO PAR %111-04129570
|
|
IF R.[15:3] ! ((8-R.[22:1]) AND 7) THEN % PART WD XFER%111-04129580
|
|
R.[28:1] := MOD3IOS; % MARK AS PARITY ERROR IF MOD III I/04129590
|
|
ERRORS: 04129900
|
|
IF (E ~ R.[26:7])+(V ~ T.[5:8] ) ! 0 THEN% 04130000
|
|
BEGIN IF(S1 ~ FINALQUE[S]) < 0 THEN% 04131000
|
|
IF (E ~ S1.[25:8] AND E) = 0 THEN% 04132000
|
|
IF V = 0 THEN 04133000
|
|
GO TO SW; 04133100
|
|
IF (U AND @774) ! 16 THEN 04134000
|
|
BEGIN 04134050
|
|
RDCTABLE[U]:=(*P(DUP))& (C-1)[1:46:2]& R[3:3:5];04134060
|
|
IF U=30 THEN 04134300
|
|
BEGIN 04134400
|
|
IF (R.[28:5] AND @25 ! 0 THEN 04134500
|
|
BEGIN 04134600
|
|
IF ( NOT R.[32:1] AND R.[28:1]) THEN 04134700
|
|
GO TO DC; 04134800
|
|
GO TO X; 04134900
|
|
END 04134950
|
|
ELSE GO TO DC; 04134955
|
|
END ELSE GO TO X; 04134960
|
|
END; 04134990
|
|
IF E = 0 THEN 04135000
|
|
BEGIN % RECOVERED MASS STORAGE % 04137000
|
|
MAINTBUFFER[NXDISK:=NXDISK+4 AND 15] 04137100
|
|
:= -0 & U[2:46:2] & LOCATQUE[S][4:3:5] & 04137110
|
|
(LOIGENTRY:=LOGENTRY+1)[CTF] & 04137120
|
|
RDCTABLE[U]{18:1:2]; 04137130
|
|
IF FINALQUE[S] GTR 0 THEN 04137140
|
|
BEGIN 04137150
|
|
MAINTBUFFER[XNDISK]:=(*P(DUP)) & 04137160
|
|
((M[M[S1:=LOCATQUE[S] INX NOT 2] INX 4]04137170
|
|
.[13:11] DIV ETRLNG)+1)[9:39:9]; 04137180
|
|
M[S1].[7:1] := 1; 04137190
|
|
END; 04137200
|
|
P(MAINTBUFFER[NXDISK+2]:=IOQUE[S]); 04137202
|
|
$ SET OMIT = NOT(AUXMEM) 04137203
|
|
P(NFLAG(M[P])); 04137212
|
|
P(P&V[1:44:4],[MAINTBUFFER[NXDISK+1]],STD); 04137215
|
|
MAINTBUFFER[NXDISK+3]:=MAINTBUFFER[U]; 04137220
|
|
IF (LOGHOLDER INX 0) = 0 THEN 04137230
|
|
BEGIN 04137240
|
|
LOGHOLDER.[CF]:=[MAINTBUFFER[NXDISK]]; 04137250
|
|
INDEPENDENTRUNNER(P(.MAINTLOGGER),0,100); 04137260
|
|
END ELSE M[LOGHOLDER.[FF]].[CF]:= 04137270
|
|
[MAINTBUFFER[NXDISK]]; 04137275
|
|
LOGHOLDER.[FF]:=[MAINTBUFFER[NXDISK]]; 04137280
|
|
NUMAINTMESS:= NUMAINTMESS+1; 04137290
|
|
T.[5:8] ~ 0; 04142000
|
|
GO TO SW; 04142500
|
|
END;% 04143000
|
|
IF V = 0 THEN% 04144000
|
|
$ SET OMIT = NOT(SHAREDISK) 04144099
|
|
BEGIN % ORIGINAL ERROR ON MASS STORAGE% 04145000
|
|
TINU[U].[18:2] ~ P(DUP).[18:12]+1;% 04146000
|
|
MAINTBUFFER[U]:=R&TWO(C)[18:43:4]; 04146100
|
|
RDCTABLE[U]:=(*P(DUP))&(C-1)[1:46:2]; 04146200
|
|
V:=129; 04147000
|
|
$ SET OMIT = NOT(SHAREDISK) 04147399
|
|
END% 04148000
|
|
ELSE BEGIN % RECURRENT ERROR ON MASS STORAGE% 04149000
|
|
P(MAINTBUFFER[U]:=P(DUP,LOD) OR 04150100
|
|
R&TWO(C)[18:43:4]); 04150200
|
|
IF (V ~ V+1) > 137 THEN% 04151000
|
|
BEGIN R:=P; 04151200
|
|
IF LOCATQUE[S].[9:1] THEN % OLAY I/O 04151220
|
|
M[LOCATQUE[S]:=R OR IOMASK; 04151230
|
|
$ SET OMIT = NOT(AUXMEM) 04151235
|
|
DISKERR: 04151300
|
|
$ SET OMIT = NOT(DFX) 04151399
|
|
T.[5:10]:=0; 04151400
|
|
GO TO DX; 04152600
|
|
END; 04152800
|
|
P(DEL); 04152900
|
|
END;% 04153000
|
|
UNIT[U] ~ T&V[5:40:8];% 04154000
|
|
DS:% 04155000
|
|
CHANNEL[P(TIO)] ~ U;% 04156000
|
|
P([IOQUE[S]],IIO);% 04157000
|
|
GO TO EXTERNAL ;% 04158000
|
|
X: STOP ~ (V!0)|2+1;% 04159000
|
|
T.[5:13] ~ 32|E+8;% 04160000
|
|
GO TO TEST; 04161000
|
|
END; 04161500
|
|
SW:: GO TO TYPE[T.[1:4]];% 04162000
|
|
LP: 04163000
|
|
IF STOP := (T := T&0[16:16:1]).[17:1] THEN 04164000
|
|
TEST: IF FIRSTWAIT = NEXTWAIT THEN GO TO INCR ELSE% 04165000
|
|
GO TO NEW ELSE GO TO NOWAIT;% 04166000
|
|
DK: 04167900
|
|
IF NOT (I:=IOQUE[S]).[24:1] THEN 04168000
|
|
IF FINALQUE[S].[24:1] THEN% 04169000
|
|
$ SET OMIT = DFX 04169090
|
|
BEGIN 04169100
|
|
$ SET OMIT = NOT DKBNODFX OR OMIT 04169190
|
|
$ SET OMIT = DKBNODFX OR OMIT 04170750
|
|
M[IOQUE[S]:=I&1[24:47:1]]:=*(P(DUP) INX P(0,LNG,XCH)); 04170800
|
|
$ POP OMIT 04170900
|
|
GO TO DS; 04171000
|
|
END ELSE GO TO OK ELSE GO TO OK; 04171200
|
|
$ POP OMIT 04171250
|
|
$ SET OMIT = NOT DFX 04171350
|
|
DC: 04174000
|
|
$ SET OMIT = NOT(DATACOM ) 04174999
|
|
04176000
|
|
$ SET OMIT = DFX 04176899
|
|
DX: DX1: 04176900
|
|
$ POP OMIT 04176901
|
|
OK: IF FIRSTWAIT = NEXTWAIT THEN 04177000
|
|
NOWAIT: IF (S1 := LOCATQUE[S].[18:15]) LSS @1777 THEN 04178000
|
|
INITIATEIO(IOQUE[S1],LOCATQUE[S1].[3:5],U)% 04180000
|
|
ELSE 04181000
|
|
PROC: T := T&0[16:16:2] 04182000
|
|
ELSE 04183000
|
|
BEGIN% 04187000
|
|
NEW: NEWIO;% 04188000
|
|
IF STOP THEN GO TO INCR;% 04189000
|
|
QUP: IF LOCATQUE[S].[FF] GTR @1777 THEN GO TO PROC; 04190000
|
|
QUEUEUP(U);% 04191000
|
|
T ~ T&4[13:43:5];% 04192000
|
|
END;% 04193000
|
|
INCR: 04194000
|
|
IF (TIM~CLOCK+P(RTR)-TIM) LSS THEN THEN TIM~0; 04194050
|
|
IOD:=IOQUE[S]; 04194100
|
|
IF (U OR 1 )=19 THEN 04194200
|
|
BEGIN 04194300
|
|
IF (JUNK:=M[IOD].[5:7])>9 THEN 04194400
|
|
JUNK:=NEUP.[CF]+(JUNK AND @17); 04194500
|
|
IF JUNK<NEUP.[FF] THEN 04194550
|
|
PEUIO[JUNK]:=P(DUP,LOD)+CLOCK+P(RTR)-EUIO[C]; 04194600
|
|
END; 04194650
|
|
I~(S1~LOCATQUE[S]).[3:5]; % FIND MIX INDEX 04194700
|
|
$ SET OMIT = NOT(NEWLOGGING) 04194799
|
|
IOTIME[I]~(*P(DUP))+TIM; 04195000
|
|
IF P(.S1,LOD).[10:1] THEN FORGETSPACE(IOD); % NO MEM MESSAGE 04195100
|
|
IF F!0 THEN 04196200
|
|
IF STOP THEN 04196400
|
|
P(T) 04196600
|
|
ELSE GO TO L1 04196800
|
|
ELSE BEGIN 04197000
|
|
RETURNIOSPACE(S); 04199000
|
|
L1: P(T&P(.L1,LOD)[FTF]); 04201000
|
|
END; 04202000
|
|
P([UNIT[U]],STD); 04203000
|
|
FIN ~ FINALQUE[S] AND NOT MEMORY;% 04205000
|
|
IF (U OR 1) NEQ 17 THEN 04205012
|
|
IF IOD.[24:1] THEN% 04206000
|
|
BEGIN V ~ ABS(IOD.[33:15]-R.[33:15]);% 04207000
|
|
IF IOD.[8:10] < V THEN% 04208000
|
|
IF IOD.[23:1] THEN% 04209000
|
|
V ~ IOD.[8:10];% 04210000
|
|
IF U < 16 THEN% 04211000
|
|
IF IOD.[21:2] = 0 THEN% 04212000
|
|
BEGIN; STREAM(A!0:B~M[S1.[33:15]+V-1]);% 04213000
|
|
BEGIN SI ~ LOC B;% 04214000
|
|
IF SC = "~" THEN TALLY ~ 1;% 04215000
|
|
A ~ TALLTY;% 04216000
|
|
END;% 04217000
|
|
V ~ -P+V;% 04218000
|
|
END;% 04219000
|
|
IF U ! 30 THEN % NOT DCA 04219100
|
|
FINISHOFFIO(U);% 04220000
|
|
END;% 04221000
|
|
IF E ! 0 THEN% 04222000
|
|
$ SET OMIT = NOT(SHAREDISK) 04222499
|
|
BEGIN IF STOP LEQ 1 THEN 04223000
|
|
BEGIN 04223500
|
|
INDEPENDENTRUNNER( 04224000
|
|
P(.DISKORAUXERROR)+((U AND @774) NEQ 16), 04224010
|
|
R&S[3:43:5],240); 04224100
|
|
LOCATQUE[S].[11:1]:=1; 04224500
|
|
END 04224750
|
|
ELSE IF FIN < 0 THEN P(LOCATQUE[S],R,XCH,~);% 04225000
|
|
END% 04226000
|
|
$ SET OMIT = NOT(SHAREDISK) 04226499
|
|
ELSE BEGIN% 04227000
|
|
IF FIN < 0 THEN P(R OR IOMASK,LOCATQUE[S],~)% 04228000
|
|
ELSE 04229000
|
|
$ SET OMIT = NOT (DATACOM OR DFX OR DKBNODFX) 04229099
|
|
BEGIN 04229200
|
|
LOCN ~ [M[LOCATQUE[S]]];% 04230000
|
|
IOD ~ IOD.[33:15];% 04231000
|
|
WHILE LOCN[0].[33:15] ! IOD DO% 04232000
|
|
LOCN ~ 1 INX LOCN;% 04233000
|
|
LOCN[0] ~ M OR FIN;% 04234000
|
|
END END;% 04235000
|
|
IF P1MIX = 0 THEN GO TO NOTHINGTODO;% 04236000
|
|
IF I = P1MIX THEN GO TO RETURN;% 04237000
|
|
GO TO INITIATE;% 04238000
|
|
END IOCOMPLETE;% 04239000
|
|
SAVE REAL PROCEDURE WAITIO(IOD,MASK,U);% 04240000
|
|
VALUE MASK,U,IOD;% 04241000
|
|
REAL MASK,U,IOD;% 04242000
|
|
BEGIN% 04243000
|
|
REAL T; 04243100
|
|
DEFINE OCTADE= DS~3 RESET;3(IF SB THEN DS!SET ELSE 04243200
|
|
DS~RESET;SKIP SB)#; 04243300
|
|
IOD ~ NFLAG(P(.IOD,LOC))&TINU[U][3:3:5];% 04244000
|
|
MASK ~ NOT MASK;% 04245000
|
|
IOREQUEST(NABS(IOD)&MASK[25:40:8],IOD, 04246000
|
|
[IOD]&U[12:42:6]);% 04247000
|
|
IOD ~ IOD&0[25:25:8]&0[19:19:1];% 04248000
|
|
SLEEP([IOD],IOMASK);% 04249000
|
|
IF ((WAITIO~IOD.[26:7]) AND MASK AND MAKS.[18:15])!0 THEN 04250000
|
|
BEGIN 04251000
|
|
T~SPACE(12); 04251100
|
|
STREAM(IOD~IOD.[26:7],MASK~(NOT MASK).[41:7], 04251200
|
|
Z~[TINU[U]],T~T); 04251300
|
|
BEGIN DS~20 LIT" UNEXP I-O ERROR ON ";SI~Z; 04251400
|
|
SI~SI+5;DS~3 CHR;DS~8 LIT":RESULT="; 04251500
|
|
SI~LOC IOD;SI~SI+6;SKIP 3 SB;3(OCTADE); 04251600
|
|
DS~6 LIT",MASK=" ;SI~SI+6;SKIP 3 SB; 04251700
|
|
3(OCTADE);DS~2 LIT".~"; 04251800
|
|
END; 04251900
|
|
IF P1MIX = 0 THEN BEGIN P(T); PUNT(0) END; 04252000
|
|
IF NOTERMSET(P1MIX) THEN 04252100
|
|
BEGIN 04252200
|
|
TERMINATE(P1MIX&19[18:33:15]); 04252300
|
|
IF JAR[P1MIX,9].SYSJOBF THEN %SYSTEM JOB 04252500
|
|
BEGIN 04252600
|
|
SPOUT(T); 04252700
|
|
BLASTQ(U); 04252800
|
|
END ELSE 04252900
|
|
TERMINALMESSAGE(-T); 04253000
|
|
END; 04253100
|
|
END; 04253200
|
|
END; 04253300
|
|
REAL PROCEDURE TAPEPARITYRETRY(R,U,KEY);% 04254000
|
|
VALUE R,U,KEY; REAL R,U,KEY; FORWARD; 04255000
|
|
REAL PROCEDURE WRITEPARITYREELSWITCH(OIOD,RC); 04255100
|
|
VALUE OIOD,REC; REAL OIOD,RC; FORWARD; 04255200
|
|
PROCEDURE DISKORAUXERROR(R); VALUE R; REAL R; 04256000
|
|
04256200
|
|
BEGIN 04256400
|
|
REAL MSCW = -2, 04256600
|
|
U = +1, 04256800
|
|
S = +2, 04257000
|
|
E = +3, 04257200
|
|
T = +4, 04257400
|
|
MK = +5, CELL = MK, 04257600
|
|
IOD = +6, 04257800
|
|
MIX = +7, 04258000
|
|
FIN = +8, PARITY= FIN, 04258200
|
|
KEY1 = +9, 04258400
|
|
KEY2 = +10, 04258600
|
|
DISC = +11, 04258800
|
|
MASK = +12, 04259000
|
|
AREA = +13, U1 = AREA, 04259200
|
|
RLST = +14, MSG = RSLT, 04259400
|
|
PRTMAX = +15, T1 = PRTMAX, 04259600
|
|
DISKCELL= +16, T2 = DISKCELL, 04259800
|
|
TERMNATE = +17, 04260000
|
|
OLAYIO = +18, 04260200
|
|
DSKADRS = +19; 04260400
|
|
04260600
|
|
NAME LOCN = +16; 04260800
|
|
04261000
|
|
LABEL DSIT, START, QUIT, RETRY, KILLL, KILLER; 04261200
|
|
$ SET OMIT = NOT(PACKETS) 04261299
|
|
DEFINE UNITNO = PSEUDOMIX[MIX]#; 04261300
|
|
$ POP OMIT 04261301
|
|
04261400
|
|
$ SET OMIT = NOT(AUXMEM) 04261600
|
|
04271200
|
|
SUBROUTINE DISKMESSAGE; 04271400
|
|
BEGIN 04271600
|
|
STREAM(MSG, MK, A:=TINU[U], MIX, B:=DSKADRS, 04271800
|
|
S:=IOQUE[S].[27:6], R, KEY1:=KEY1:=SPACE(10)); 04272000
|
|
BEGIN 04272200
|
|
SI:= LOC MK; SI:=SI+7; DS:= CHR; 04272400
|
|
SI:=SI+5; DS:=3CHR; DS:=LIT" "; 04272600
|
|
CI:=CI+MSG; 04272800
|
|
GO L0; GO L1; GO L2; GO L3; GO L4; GO L5; GO L6; GO L7; 04273000
|
|
L0: DS:= 9LIT"NOT READY"; GO TO MX; 04273200
|
|
L1: DS:= 4LIT"BUSY"; GO TO MX; 04273400
|
|
L2: DS:= 8LIT"I/O MEM "; 04273600
|
|
L3: DS:= 6LIT"PARITY"; GO TO MX; 04273800
|
|
L4: DS:=12LIT"I/O INV ADDR"; GO TO MX; 04274000
|
|
L5: DS:= 3LIT"EU "; GO TO L0; 04274200
|
|
L6: DS:=13LIT"INV DISK ADDR";GO TO MX; 04274400
|
|
L7: DS:=10LIT"WRITE LOCK"; 04274600
|
|
MX: DS:= 6LIT", MIX="; DS:=2DEC; 04274800
|
|
MSG:=DI; DI:=DI-2; DS:=FILL; DI:=MSG; 04275000
|
|
DS:=5LIT", DA="; DS:=8CHR; 04275200
|
|
DS:=7LIT", SEGS="; DS:=2DEC; 04275400
|
|
DS:=4LIT", R="; 04275600
|
|
16(DS:=3RESET; 3(IF SB THEN DS:=SET ELSE DS:=RESET; SKIP SB)); 04275800
|
|
SI:=SI-5; DS:=5LIT", IO="; 04276000
|
|
IF SB THEN DS:=2LIT"4,"; SKIP SB; 04276200
|
|
IF SB THEN DS:=2LIT"3,"; SKIP SB; 04276400
|
|
IF SB THEN DS:=2LIT"2,"; SKIP SB; 04276600
|
|
IF SB THEN DS:=2LIT"1,"; 04276800
|
|
DI:=DI-1; DS:=LIT"~"; 04277000
|
|
END STREAM STATEMENT; 04277200
|
|
END SUBROUTINE DISKMESSAGE; 04277400
|
|
04277600
|
|
SUBROUTINE DETAILRECORDENTRY; 04277800
|
|
BEGIN 04278000
|
|
KEY2 := TYPEDSPACE(6,MAINTBUFFAREAV);% %167-04278200
|
|
M[KEY2] := 0 & RDCTABLE[U][18:1:2]; 04278400
|
|
IF MIX NEQ 0 THEN 04278600
|
|
BEGIN 04278800
|
|
M[KEY2] := (*P(DUP)) & MIX[20:43:5] & 04279000
|
|
(IF FINALQUE[S] LSS 0 THEN 0 ELSE 04279200
|
|
(M[M[LOCATQUE[S] INX NOT 2] INX 4].[13:11] DIV ETRLNG)+1)[9:39:9];04279400
|
|
END; 04279600
|
|
M[KEY2+1] := TRANSACTION[U]; 04279800
|
|
IF NOT DISC THEN 04280000
|
|
BEGIN 04280200
|
|
STREAM(S:=IOD.[FF], D:=KEY2+2); 04280400
|
|
BEGIN 04280600
|
|
SI:=LOC S; DS:=8DEC; 04280800
|
|
END; 04281000
|
|
END 04281200
|
|
ELSE M[KEY2+2] := DSKADRS; 04281400
|
|
M[KEY2+3] := IOQUE[S]; 04281600
|
|
M[KEY2+4] := R & RDCTABLE[U][3:5:5]; 04281800
|
|
M[KEY2+5] := IF FINALQUE[S] LSS 0 THEN 0 ELSE LOCATQUE[S] INX NOT 2; 04282000
|
|
END DETAILRECORDENTRY; 04282200
|
|
04282400
|
|
SUBROUTINE FINISHDETAIL; 04282600
|
|
BEGIN 04282800
|
|
IF MIX NEQ 0 THEN CHECKJOBORFILEMESS(MIX,M[KEY2+5],U); 04283000
|
|
LINKUP(4+DISK,KEY2); 04283200
|
|
END; 04283400
|
|
04283600
|
|
P(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); 04283800
|
|
04284000
|
|
DISC:=(U:=LOCATQUE[S:=R.[3:5]].[12:6]).[46:1]; 04284200
|
|
MIX:=LOCATQUE[S].[3:5]; 04284400
|
|
IF (OLAYIO := ((FINALQUE[S] LSS 0) AND (LOCATQUE[S].[9:1]))) THEN 04284600
|
|
BEGIN 04284800
|
|
STREAM(S:=0&FINALQUE[S][CTC]&FINALQUE[S][21:8:12], D:=[DSKADRS]); 04285000
|
|
BEGIN 04285200
|
|
SI:=LOC S; DS:=8DEC; % DISK ADDRESS IN FINALQUE FOR OLAY I/O 04285400
|
|
END; 04285600
|
|
END ELSE DSKADRS := M[IOQUE[S]]; 04285800
|
|
MK:="*"; MSG:=(-1); 04286000
|
|
R:=R&IOQUE[S][3:3:5]; % RESTORE HARDWARE UNIT TYPE 04286200
|
|
IOD := IOQUE[S]; 04286400
|
|
IF DISC THEN 04286600
|
|
BEGIN 04286800
|
|
IF R.[30:1] THEN % DISK NOT READY 04287000
|
|
BEGIN 04287200
|
|
$ SET OMIT = NOT(DFX) 04287400
|
|
UNIT[U]:=(*P(DUP))&@77777[5:20:28]; 04295400
|
|
MSG:=0; MK:="#"; % NOT READY 04295600
|
|
DISKMESSAGE; 04295800
|
|
DETAILRECORDENTRY; 04296000
|
|
READY := NOT TWO(U) AND READY; 04296200
|
|
RRRMECH := NOT TWO(U) AND RRRMECH; 04296400
|
|
UNIT[U].[5:10] := 2; 04296600
|
|
GO TO KILLL; 04298800
|
|
END; % IF NOT READY 04299000
|
|
LOCATQUE[S].[FF] := NOT 0; 04299200
|
|
IF R.[26:7] NEQ 1 AND NOT OLAYIO THEN % NOT BUSY OR SPECIAL I/O 04299600
|
|
BEGIN 04299800
|
|
PARITY := (IOD.[24:1] AND (R.[26.7]=16)); % PARITY CONDITION 04300000
|
|
IF FINALQUE[S] GTR 0 THEN % OBJECT JOB ERROR 04300200
|
|
BEGIN 04300400
|
|
IF PARITY THEN GO TO START; % RECOVERABLE ERROR 04300500
|
|
DSIT: TERMINATE(MIX&20[CTF]); 04300600
|
|
END % OBJECT ERROR 04301000
|
|
ELSE 04301200
|
|
BEGIN % MCP I/O 04301400
|
|
IF MIX NEQ 0 THEN 04301600
|
|
BEGIN 04302000
|
|
IF JAR[MIX,9].SYSJOBF THEN % "SYSTEM" JOB 04302200
|
|
IF PARITY THEN GO TO START; 04302600
|
|
% DONT DS LIBMAIN/DISK ON PARITY ERROR 04302800
|
|
GO TO DSIT; 04303000
|
|
END; % NON-ZERO MIX 04303200
|
|
END; % MCP I/O 04303400
|
|
END; % NOT BUSY OR SPECIAL I/O 04303600
|
|
04303800
|
|
START: 04304000
|
|
04304200
|
|
TRANSACTION[U] := TRANSACTION[U]-1; 04304400
|
|
MASK := IF (FIN := FINALQUE[S]) LSS 0 THEN FIN.[25:8] ELSE @377; 04304600
|
|
IF (E := R.[25:8] AND MASK) = 0 THEN % ERRORS ARE ACCEPTABLE 04304800
|
|
BEGIN % FIX UP IOQUE 04305000
|
|
QUIT: 04305200
|
|
IF MSG NEQ (-1) AND DISC THEN DISKMESSAGE; 04305400
|
|
DETAILRECORDENTRY; 04305600
|
|
$ SET OMIT = NOT(AUXMEM); 04305800
|
|
RETURNIOSPACE(S); 04309200
|
|
04309400
|
|
FIN:=FINALQUE[S] AND NOT MEMORY; 04309600
|
|
IF (T1:=FIN) LSS 0 THEN % MCP I/O 04309800
|
|
BEGIN 04310000
|
|
IF NOT OLAYIO THEN % I/O FINISH PLACES RESULT DESC. FOR OLAY04310200
|
|
M[LOCATQUE[S]]:=R&E[25:40:8]&IOD[3:3:5] OR IOMASK; 04310400
|
|
END % IF MCP I/O 04310600
|
|
ELSE 04310800
|
|
BEGIN 04311000
|
|
IF E NEQ 0 THEN % ERRORS 04311200
|
|
BEGIN 04311400
|
|
P(.T1,PRL); 04311600
|
|
T1 := T1&E[25:40:8]; 04311800
|
|
END 04312000
|
|
ELSE P(.T1,IOR); 04312200
|
|
LOCN := [M[LOCATQUE[S]]]; 04312400
|
|
IOD := IOD.[33:15]; 04312600
|
|
WHILE LOCN[0].[33:15] NEQ IOD DO LOCN := 1 INX LOCN; 04312800
|
|
LOCN[0] := P(.T1,LOD); 04313000
|
|
END; 04313200
|
|
GO TO KILLL; 04313600
|
|
END; 04313800
|
|
IF E THEN % BUSY 04314000
|
|
BEGIN 04314200
|
|
MSG:=1; % BUSY 04314400
|
|
RETRY: 04314600
|
|
$ SET OMIT = NOT(AUXMEM) 04314790
|
|
DISKMESSAGE; 04314820
|
|
DETAILRECORDENTRY; 04315000
|
|
$ SET OMIT = NOT(AUXMEM) 04315190
|
|
T1:=(IF DISC THEN IOQUE[S]&6[3:43:5] ELSE IOQUE[S]; 04315400
|
|
RETURNIOSPACE(S); 04315600
|
|
04315800
|
|
P1MIX:=MIX; 04316000
|
|
IF NOT OLAYIO THEN % RETRIES ARE OK 04316400
|
|
IOREQUEST(FINALQUE[S], T1, 04316600
|
|
(IF DISC THEN LOCATQUE[S]&@22[12:42:6] ELSE 04316800
|
|
LOCATQUE[S])); 04317000
|
|
P1MIX:=0; 04317200
|
|
GO TO KILLER; 04317400
|
|
END; % IF BUSY 04317600
|
|
IF E.[46:1] THEN % I/O MEMORY PARITY 04317800
|
|
BEGIN 04318000
|
|
MSG:=2; 04318200
|
|
E:=@1537; 04318400
|
|
GO TO QUIT; 04318600
|
|
END; 04318800
|
|
IF E.[41:1] THEN % INVALID ADDRESS 04319000
|
|
BEGIN 04319200
|
|
MSG:=4; 04319400
|
|
E:=@1537; 04319600
|
|
GO TO QUIT; 04319800
|
|
END; 04320000
|
|
$ SET OMIT = NOT(SHAREDISK) 04320200
|
|
IF NOT E.[43:1] THEN % NOT PARITY,CHECK DISK ADDRESS 04325400
|
|
BEGIN 04325600
|
|
STREAM(DA:=MASK:=DSKADRS : EU:=MASK.[6:6], A:=0, 04325800
|
|
EUA:=[MULTITABLE[16+2|MAXK.[5:1]]]); 04326000
|
|
BEGIN 04326200
|
|
SI:=LOC DA; 04326400
|
|
IF SC GTR "1" THEN GO TO BAD; 04326600
|
|
IF SC LSS "0" THEN GO TO BAD; 04326800
|
|
$ SET OMIT = SHAREDISK 04327000
|
|
7( 04327200
|
|
$ POP OMIT 04327400
|
|
$ SET OMIT = NOT(SHAREDISK) 04327600
|
|
IF SC LSS "0" THEN JUMP OUT TO BAD; SI:=SI+1; 04328200
|
|
IF SC GTR "9" THEN JUMP OUT TO BAD); 04328400
|
|
$ SET OMIT = SHAREDISK 04328600
|
|
SI:=SI-5; 04328800
|
|
$ POP OMIT 04329000
|