mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-01-13 15:17:03 +00:00
7841 lines
689 KiB
Plaintext
7841 lines
689 KiB
Plaintext
BEGIN 00000100
|
|
COMMENT MCP LISTING DIRECTORY 00001000
|
|
010000000 INDEPENDENT RUNNER FORWARD DECLARATION 00002000
|
|
020000000 FORWARD PROCEDURE DECLARATION 00003000
|
|
08000000 INITIAL VALUE TABLES 00004000
|
|
08000000 BCL TO EBCEDIC 00005000
|
|
08018000 EBCEDIC TO BCL 00006000
|
|
08084000 TRUTH SETS 00007000
|
|
08106000 POWER OF TEN TABLES 00007100
|
|
08247000 CONTROL CARD 00007200
|
|
09000000 STANDARD QUEUE DECLARATION 00008000
|
|
10000000 GLOBALS 00009000
|
|
10017000 INTERRUPT - EVENT HANDLING GLOBALS 00010000
|
|
10055000 TAG DEFINITION 00011000
|
|
10075000 CONTROL WORD LAYOUTS 00012000
|
|
10252000 REGISTERS DEFINITIONS 00013000
|
|
11000000 STORAGE ALLOCATION GLOBALS 00014000
|
|
12000000 INITIALIZE GLOBALS 00015000
|
|
13000000 INPUT - OUTPUT GLOBALS 00016000
|
|
13056500 VALUE ARRAYS - MCPID,KEYIN GLOSSARIES,ETC. 00016100
|
|
13276000 KEYIN - SPOUT GLOBALS 00017000
|
|
13318000 IOQUE QUEUE DECLARATION 00018000
|
|
13375000 WAITCHANNELQUE QUEUE DECLARATION 00019000
|
|
14000000 DISK MANAGEMENT 00020000
|
|
15000000 GETAREA - FORGET AREA GLOBALS 00021000
|
|
16000000 STANDARD INSERT 00022000
|
|
16016000 STANDARD DELINK 00023000
|
|
17000000 NAMEQUE QUEUE DECLARATION 00024000
|
|
17021000 BLOCKSOFAREAQUE QUEUE DECLARATION 00025000
|
|
17035000 KEYING QUEUE DECLARATION 00026000
|
|
18007000 FILE MANAGEMENT 00027000
|
|
19000000 REPLY MESSAGE 00028000
|
|
20000000 INDEPENDENT RUNNER GLOBALS 00029000
|
|
21140000 READYQ QUEUE DECLARATION 00030000
|
|
21263000 SHEETQ QUEUE DECLARATION 00031000
|
|
21357000 TERMINATEQ QUEUE DECLARATION 00032000
|
|
23000000 DIRECTORY MANAGEMENT 00034000
|
|
24000000 I/0 INTRINSIC DECLARATIONS 00034100
|
|
30000000 GETSPACE / FORGETSPACE 00035000
|
|
31000000 GETAREA / FORGETAREA 00036000
|
|
32000000 INITIALIZE 00037000
|
|
33000000 HARDWAREINTERRUPT 00038000
|
|
33167000 PRESENCEBIT 00039000
|
|
33538000 WHATDOIDO 00040000
|
|
33567000 EVENTHANDLER 00041000
|
|
33763000 SOFTWAREINTERRUPTDEC 00042000
|
|
33855000 HOLD 00043000
|
|
33890000 HOLDINITIALIZE 00044000
|
|
33961000 GETINDEPENDENTRUNNERSTACK 00045000
|
|
33960000 INDEPENDENTRUNNER 00046000
|
|
34051000 RUN 00047000
|
|
34086000 LOADFIXDIRSTACK 00048000
|
|
38000000 CONTROL CARD 00048600
|
|
40000000 INPUT - OUTPUT ROUNTINES 00049000
|
|
40005000 STARTIO 00050000
|
|
40037000 INITIATEIO 00051000
|
|
40075000 IOREQUEST 00052000
|
|
40089000 WAITIO 00053000
|
|
40131000 NEWIO 00054000
|
|
40154000 IOFINISH 00055000
|
|
40316000 STATUS 00056000
|
|
40565000 DISKIO 00057000
|
|
40597000 DISKWAIT 00058000
|
|
44022000 DISPLAY ROUTINES 00059000
|
|
44097000 KEYIN 00060000
|
|
44176000 SPOUT 00061000
|
|
50000000 ERROR ROUTINES 00062000
|
|
50000000 IOERROR 00063000
|
|
55000000 DISK MANAGEMENT 00064000
|
|
55018000 FORGETESPDISK 00066000
|
|
55039000 GETUSERDISK 00067000
|
|
55123000 FORGETUSERDISK 00068000
|
|
58000000 LIBRARY MAINTENANCE 00068900
|
|
59000000 PERIPHERALINITIALIZE 00069000
|
|
60000000 PROGRAM INTRINSICS 00070000
|
|
65000000 ARRAYDEC 00071000
|
|
65174000 BLOCKEXIT 00072000
|
|
65228000 GOTOSOLVER 00073000
|
|
70000000 PROGRAM INPUT- OUTPUT INTRINSICS 00074000
|
|
80000000 SELECTION - PROCESS HANDLING 00075000
|
|
80361000 INITIATE 00076000
|
|
80519000 SELECTION 00077000
|
|
80600000 TERMINATE 00077200
|
|
99000000 MONITOR 00078000
|
|
99970000 MCP OUTER BLOCK 00079000
|
|
; 00999999
|
|
COMMENT FOLLOWING ARE FORWARD DECLARATIONS FOR PROCEDURES CAPABLE OF 01000000
|
|
RUNNING AS INDEPENDENT RUNNERS. THE FORWARD DECLARATION FOR 01001000
|
|
A NEW INDEPENDENT RUNNER MUST APPEAR BEFORE THAT FOR STATUS IF 01001500
|
|
IT IS CAPAPABLE OF MULTIPLE REPRESENTATION. AN INDICATOR MAY. 01002000
|
|
BE ASSOCIATED WITH AN INDEPENDENT RUNNER (SEE CROSS FEFERENCE 01002500
|
|
FOR "TERMINATE" AND "TERMINATEINDICATOR" FOR HOW THIS IS 01003000
|
|
EFFECTED). THIS INDICATOR ISNOT NECESSARY TO THE 01003500
|
|
IMPLEMENTATION, HOWEVER IT IS NECESSARY IF INDEPENDENTRUNNER IS01004000
|
|
01004300
|
|
TO RECOGNISE THE NEW RUNNER AS A SPECIAL CASE 01004500
|
|
01004600
|
|
; 01005000
|
|
PROCEDURE CONTROLCARD (PARAMETER); 01006000
|
|
WORD PARAMETER; FORWARD; 01007100
|
|
PROCEDURE READALABEL(LINFO);VALUE LINFO;REAL LINFO;FORWARD; 01007105
|
|
PROCEDURE PURGIT(U);VALUE U;REAL U;FORWARD; 01007107
|
|
PROCEDURE DIRECTORYCOMPLEMENT(ROW); ARRAY ROW[*]; FORWARD; 01007200
|
|
PROCEDURE IRTEST(IND); INTEGER IND; FORWARD; 01008000
|
|
PROCEDURE INITIATE (DUMMY); REAL DUMMY; FORWARD; 01008200
|
|
PROCEDURE IOERROR(RD); REAL RD; FORWARD; 01008500
|
|
01009000
|
|
PROCEDURE STATUS (COUNT); INTEGER COUNT; FORWARD; 01009100
|
|
PROCEDURE KEYIN(COUNT); REAL COUNT; FORWARD; 01009110
|
|
PROCEDURE CONNSOUL(COUNT); REAL COUNT; FORWARD;% 01010000
|
|
PROCEDURE TERMINATE (PARAMETER); REAL PARAMETER ; FORWARD; 01011000
|
|
COMMENT: FOR THOSE OF YOU WHO DON"T KNOW SO, TERMINATE MUST BE THE 01011100
|
|
LAST INDEPENDENTRUNNER DECLARED IN THIS FORWARD LIST. 01011200
|
|
ONE WRITES "FORK(<PROCEDURE ID>, <PARAMETER>)" TO START ONE OF 01011300
|
|
THESE GUYS UP; 01011400
|
|
PROCEDURE WHATDOIDO; FORWARD; 02000000
|
|
PROCEDURE INDEPENDENTRUNNER(INDEX,PAR);VALUE INDEX,PAR;REAL INDEX; 02001000
|
|
WORD PAR; FORWARD; 02002000
|
|
PROCEDURE LOADFIXEDIRSTACK(STACKNO);VALUE STACKNO;INTEGER STACKNO; 02003000
|
|
FORWARD; 02004000
|
|
SAVE INTEGER PROCEDURE TRACE = (0,19) ( TRACTER ) ; 02005000
|
|
VALUE TRACTER; INTEGER TRACTER; FORWARD; 02006000
|
|
SAVE REAL PROCEDURE GETSPACE (SIZE, WHOFOR, TYPE, ADDRESS); 02007000
|
|
VALUE SIZE, WHOFOR, TYPE, ADDRESS; 02008000
|
|
INTEGER SIZE, WHOFOR, TYPE; 02009000
|
|
REAL ADDRESS; FORWARD; 02010000
|
|
SAVE INTEGER PROCEDURE FORGETSPACE (ADDRESS); 02011000
|
|
VALUE ADDRESS; INTEGER ADDRESS; FORWARD; 02012000
|
|
SAVE PROCEDURE OVERLAY (ADDRESS); VALUE ADDRESS;INTEGER ADDRESS;FORWARD;02013000
|
|
REAL PROCEDURE DIRECTORYSEARCH(POINT, CODE, LLOCK); 02016100
|
|
VALUE POINT, CODE, LLOCK; 02016200
|
|
POINTER POINT; 02016300
|
|
REAL CODE; 02016400
|
|
BOOLEAN LLOCK; FORWARD; 02016500
|
|
SAVE PROCEDURE IOFINISH(MPXINDEX); VALUE MPXINDEX; 02017000
|
|
INTEGER MPXINDEX; FORWARD; 02018000
|
|
PROCEDURE FINISHOFFIO(IOCB); VALUE IOCB; REFERENCE IOCB; FORWARD;02019000
|
|
PROCEDURE FINISHOFFIO(IOCB); VALUE IOCB; REFERENCE IOCB; ; COMMENT * * ;02020000
|
|
SAVE 02020998
|
|
PROCEDURE SPOUT(IOCB,U);VALUE IOCB,U;REAL U;REFERENCE IOCB;FORWARD; 02021000
|
|
PROCEDURE MESSER(W,INFO);VALUE W,INFO;REAL W;WORD INFO;FORWARD;% 02021100
|
|
PROCEDURE MIXPRINT(BUF);ARRAY BUF[*]; FORWARD;% 02022000
|
|
BOOLEAN PROCEDURE JULIT(P);POINTER P; FORWARD; 02022300
|
|
PROCEDURE DATIT(P); POINTER P; FORWARD;% 02022400
|
|
REAL PROCEDURE CURRENTTIME; FORWARD; 02022500
|
|
PROCEDURE CHANLOUT(I,BUFF);VALUE I;REAL I;ARRAY BUFF[*];FORWARD; 02022600
|
|
SAVE PROCEDURE CONNQUEST(UNIT); VALUE UNIT; REAL UNIT; FORWARD; 02023000
|
|
SAVE PROCEDURE UNEXPIOERROR(IOCB,IOERRORMASK); 02024000
|
|
VALUE IOCB,IOERRORMASK; 02025000
|
|
REFERENCE IOCB; 02026000
|
|
REAL IOERRORMASK; ; COMMENT * * * * * * * * ** ; 02027000
|
|
SAVE REAL PROCEDURE WAITIO(AREA, USER, IOMASK); 02030000
|
|
VALUE USER, IOMASK; 02031000
|
|
ARRAY AREA[*]; 02032000
|
|
REAL USER, IOMASK; 02033000
|
|
FORWARD; 02034000
|
|
SAVE PROCEDURE IOREQUEST(IOCB);VALUE IOCB;REFERENCE IOCB;FORWARD; 02034100
|
|
SAVE REFERENCE PROCEDURE DISKIO(CORE,INDEX,SIZE,DISK,MASK,DISKIOEVNT); 02035000
|
|
VALUE INDEX,SIZE,DISK,MASK; 02036000
|
|
INTEGER INDEX,SIZE,DISK,MASK; 02037000
|
|
ARRAY CORE [*]; 02038000
|
|
EVENT DISKIOEVNT ; FORWARD; 02039000
|
|
SAVE PROCEDURE DISKWAIT(CORE,INDEX,SIZE,DISK,MASK); 02040000
|
|
VALUE INDEX,SIZE,DISK,MASK; 02041000
|
|
INTEGER INDEX,SIZE,DISK,MASK; 02042000
|
|
ARRAY CORE[*]; 02043000
|
|
FORWARD; 02044000
|
|
PROCEDURE HARDWAREINTERRUPT(P1,P2); VALUE P1,P2; 02045000
|
|
INTEGER P1; WORD P2; FORWARD; 02046000
|
|
WORD HARDWAREINTERRUPTPCW = HARDWAREINTERRUPT; 02046100
|
|
WORD D03 = (0, 3); 02046200
|
|
SAVE PROCEDURE HOLDINITIALISE; FORWARD; 02047000
|
|
SAVE PROCEDURE PERIPHERALINITIALIZE; FORWARD; 02048000
|
|
REAL MCPDISKBASE = PERIPHERALINITIALIZE; COMMENT ADDRESS OF MCP DISK; 02049000
|
|
SAVE PROCEDURE INITIALIZE(P1, P2); 02050000
|
|
VALUE P1; 02051000
|
|
INTEGER P1; 02052000
|
|
WORD P2; FORWARD; 02053000
|
|
REAL MAXCHANNELS = INITIALIZE; COMMENT THE NUMBER OF MULTIPLEXORS; 02054000
|
|
BOOLEAN MAXMPX = MAXCHANNELS; 02055000
|
|
WORD INITIALIZEPCW = INITIALIZE; 02055100
|
|
SAVE INTEGER PROCEDURE GETAREA(SIZE); VALUE SIZE; INTEGER SIZE; FORWARD;02057000
|
|
SAVE PROCEDURE FORGETAREA(SIZE,ADDRESS); VALUE SIZE,ADDRESS; 02058000
|
|
INTEGER SIZE,ADDRESS; FORWARD; 02059000
|
|
PROCEDURE UPDATEUNITBITSTABLE(TABLENAME,U); VALUE U; 02060000
|
|
INTEGER U; 02061000
|
|
BOOLEAN ARRAY TABLENAME[*]; FORWARD; 02062000
|
|
PROCEDURE EVENTHANDLER = (0,15) (THEEVENT,EVENTWORD1,WAITFLAG); 02063000
|
|
VALUE EVENTWORD1,WAITFLAG; 02064000
|
|
WORD THEEVENT,EVENTWORD1; 02065000
|
|
BOOLEAN WAITFLAG; FORWARD; 02066000
|
|
WORD PROCEDURE SOFTWAREINTERRUPTDEC = (0,14) (THEEVENT,EVENTWORD1, 02067000
|
|
EVENTWORD2,KLUDGE,PCWPOINTER); 02068000
|
|
VALUE EVENTWORD1,EVENTWORD2,PCWPOINTER,KLUDGE; 02069000
|
|
WORD THEEVENT,EVENTWORD1,EVENTWORD2,PCWPOINTER,KLUDGE; 02070000
|
|
FORWARD; 02071000
|
|
DEFINE INTERLOCK = EVENT # 02071100
|
|
, PROCURE(LOCK) = GAOLER(LOCK, FALSE) # 02071200
|
|
, LIBERATE(LOCK) = GAOLER(LOCK, TRUE) # 02071300
|
|
; 02071400
|
|
PROCEDURE GAOLER = (0,18) (E,U); VALUE U; EVENT E; BOOLEAN U; FORWARD; 02071500
|
|
SAVE WORD PROCEDURE DOPEVECTOR(MOM); 02072000
|
|
VALUE MOM; 02073000
|
|
WORD MOM; FORWARD; 02074000
|
|
SAVE PROCEDURE ARRAYDEC =(0,7) (NOOFDIMS,NOOFARRAYS,TYPE); 02075000
|
|
VALUE NOOFDIMS,NOOFARRAYS,TYPE; 02076000
|
|
INTEGER NOOFDIMS,NOOFARRAYS,TYPE; FORWARD; 02077000
|
|
SAVE PROCEDURE DUMMYFORCUTTINGSTACK; ; 02077100
|
|
WORD DUMMYFORCUTTINGSTACKPCW=DUMMYFORCUTTINGSTACK; 02077200
|
|
SAVE WORD PROCEDURE SIM1TOR(A,V); VALUE A, V; REAL A; WORD V; 02078000
|
|
BEGIN 02079000
|
|
INTEGER T; 02080000
|
|
T ~REGISTERS [63]; 02081000
|
|
SIM1TOR ~ V; 02082000
|
|
END; 02083000
|
|
SAVE PROCEDURE MEMDUMP = (0,20) (I,J);VALUE I,J;REAL I,J;FORWARD; 02083100
|
|
WORD PROCEDURE JACKMONITOR (A, V); VALUE A, V; REAL A; WORD V; 02084000
|
|
FORWARD; 02085000
|
|
WORD PROCEDURE RAJMONITOR (A, V); VALUE A, V; REAL A; WORD V; 02086000
|
|
FORWARD; 02087000
|
|
WORD PROCEDURE BOBMONITOR (A, V); VALUE A, V; REAL A; WORD V; 02088000
|
|
FORWARD; 02089000
|
|
WORD PROCEDURE DONMONITOR (A, V); VALUE A, V; REAL A; WORD V; FORWARD; 02090000
|
|
WORD PROCEDURE STEVEMONITOR(A,V);VALUE A,V;REAL A;WORD V; FORWARD; 02090100
|
|
WORD PROCEDURE MIKEMONITOR(A,V); VALUE A,V; REAL A; WORD V; FORWARD; 02090200
|
|
REAL PROCEDURE GETUSERDISK(SEGMENTS, SPEED); 02091000
|
|
VALUE SEGMENTS, SPEED; 02092000
|
|
REAL SEGMENTS, SPEED; FORWARD; 02093000
|
|
PROCEDURE FORGETUSERDISK(DKADDR, SEGMENTS); 02094000
|
|
VALUE DKADDR, SEGMENTS; 02095000
|
|
REAL DKADDR, SEGMENTS; FORWARD; 02095500
|
|
REAL PROCEDURE NOUSERDISK(SEGMENTS, SPEED); 02095600
|
|
VALUE SEGMENTS, SPEED; 02095700
|
|
REAL SEGMENTS, SPEED; FORWARD; 02095800
|
|
SAVE PROCEDURE BLOCKEXIT = (0,10); FORWARD; 02096000
|
|
PROCEDURE FORGETDOPEVECTORS(DD); WORD ARRAY DD[*]; FORWARD; 02097000
|
|
SAVE PROCEDURE MOMTOVECTOR (MOM, VECTOR, INDEX); 02098000
|
|
VALUE COMMENT A COPY OR MOM DESCRIPTOR THAT IS AC- 02098100
|
|
CEPTABLE TO PRESENCE BIT; 02098200
|
|
COMMENT AN-UNINDEXED DESCRIPTOR THAT IS AC- 02099000
|
|
CEPTABLE TO AN NXLN OPERATOR; 02099100
|
|
INDEX; COMMENT THE INDEX FOR VECTOR WHERE MOM IS TO 02100000
|
|
BE PLACED; 02100100
|
|
WORD ARRAY MOM[*], 02100200
|
|
VECTOR[*]; 02100300
|
|
INTEGER INDEX; FORWARD; 02100400
|
|
SAVE REFERENCE PROCEDURE ALLOCATEMAMEQ; FORWARD; 02101000
|
|
SAVE BOOLEAN PROCEDURE TURNOVERLAYKEY (ADDRESSOFMOM); 02102000
|
|
VALUE ADDRESSOFMOM; 02103000
|
|
INTEGER ADDRESSOFMOM; FORWARD; 02104000
|
|
SAVE PROCEDURE MAKEPRESENTANDSAVE (DATA); 02104100
|
|
WORD ARRAY DATA [*]; FORWARD; 02104200
|
|
PROCEDURE LIBMAIN(MFID);VALUE MFID;POINTER MFID;FORWARD; 02105000
|
|
SAVE INTEGER PROCEDURE CONSOLIDATEANDORDER(ADDRESS); 02109000
|
|
VALUE ADDRESS; 02110000
|
|
INTEGER ADDRESS; FORWARD; 02111000
|
|
PROCEDURE OPEN=(0,31)(FIB,TYPEV);VALUE TYPEV;ARRAY FIB[*];REAL TYPEV; 02111100
|
|
FORWARD; 02111200
|
|
PROCEDURE GOTOSOLVER = (0,11) (SIRW); VALUE SIRW; REAL SIRW; FORWARD; 02112000
|
|
REAL PROCEDURE FINDINPUT(LEB,CODE);VALUE CODE;INTEGER CODE;ARRAY LEB[*];02112010
|
|
FORWARD; 02112020
|
|
SAVE 02113000
|
|
WORD PROCEDURE MON1TOR (A, V); VALUE A, V; REAL A; WORD V; FORWARD; 02114000
|
|
INTEGER PROCEDURE VECTORINSERT(READYINDICATOR,NEWENTRY); 02115000
|
|
VALUE READYINDICATOR 02116000
|
|
, NEWENTRY 02117000
|
|
; 02118000
|
|
REAL READYINDICATOR 02119000
|
|
; 02120000
|
|
WORD NEWENTRY 02121000
|
|
; FORWARD; 02122000
|
|
PROCEDURE STACKQREARRANGE(READYINDICATOR) ; 02123000
|
|
VALUE READYINDICATOR 02124000
|
|
; 02125000
|
|
BOOLEAN READYINDICATOR 02126000
|
|
; FORWARD; 02127000
|
|
PROCEDURE STACKQREMOVE (PATH,STACKINDICATOR); 02128000
|
|
VALUE PATH 02129000
|
|
, STACKINDICATOR 02130000
|
|
; 02131000
|
|
REAL PATH 02132000
|
|
; 02133000
|
|
INTEGER STACKINDICATOR 02134000
|
|
; FORWARD; 02135000
|
|
PROCEDURE INSERTINQUEUE (PATH,STACKINDICATOR); 02136000
|
|
VALUE PATH 02137000
|
|
, STACKINDICATOR 02138000
|
|
; 02139000
|
|
REAL PATH 02140000
|
|
, STACKINDICATOR 02141000
|
|
; FORWARD; 02142000
|
|
INTEGER PROCEDURE GETINDEPENDENTRUNNERSTACK(STAKADRES);REAL STAKADRES; 02143000
|
|
FORWARD; 02144000
|
|
02145000
|
|
02146000
|
|
PROCEDURE NEXTPROCESS; FORWARD; 02147000
|
|
INTEGER PROCEDURE NEXTINSCHEDULE; FORWARD; 02148000
|
|
02149000
|
|
02150000
|
|
02151000
|
|
PROCEDURE SELECTION; FORWARD; 02152000
|
|
PROCEDURE RUN (PARAMETER,PROCEEDURE); 02153000
|
|
VALUE PARAMETER 02154000
|
|
; 02155000
|
|
WORD PARAMETER 02156000
|
|
; 02157000
|
|
PROCEDURE PROCEEDURE 02158000
|
|
; FORWARD; 02159000
|
|
WORD RUNPCW = RUN; COMMENT USED BY INDEPENDENTRUNNER MECHANISM; 02160000
|
|
PROCEDURE STANDARDINSERT(FIRSTENTRY,LASTENTRY,ENTRY); 02161000
|
|
VALUE ENTRY; 02162000
|
|
REFERENCE FIRSTENTRY,LASTENTRY,ENTRY; FORWARD; 02163000
|
|
PROCEDURE STANDARDDELINK(FIRSTENTRY,LASTENTRY,ENTRY); 02164000
|
|
VALUE ENTRY; 02165000
|
|
REFERENCE FIRSTENTRY,LASTENTRY,ENTRY; FORWARD; 02166000
|
|
SAVE PROCEDURE QUEUEMYSTACK (AUTHORITY, REQUIRED, COUNT, MYEVENT, HEAD);02167000
|
|
VALUE AUTHORITY, COMMENT THE SORTKEY FOR THIS QUEUE; 02168000
|
|
REQUIRED, COMMENT AN ADDITIONAL INFORMATION WORD FOR THE 02169000
|
|
QUEUE ENTRY; 02170000
|
|
COUNT; COMMENT A 10 BIT COUNTER IN THE STACK LINK 02171000
|
|
WORD FOR THIS QUEUE; 02172000
|
|
EVENT MYEVENT; COMMENT THE LOCAL EVENT MY STACK IS TO WAIT ON;02172500
|
|
INTEGER COUNT; 02172550
|
|
REAL AUTHORITY, 02172600
|
|
REQUIRED, 02172700
|
|
HEAD ; COMMENT A GLOBAL REAL THAT CONTAINS THE BACK- 02173000
|
|
WARD AND FORWARD LINKS FOR THE QUEUE. THE BACK 02174000
|
|
WARD LINK POINTS TO THE ENTRY WITH THE HIGHEST 02175000
|
|
AUTHORITY; FORWARD; 02176000
|
|
PROCEDURE DELINKASTACK (WHOSE, HEAD); 02177000
|
|
VALUE WHOSE; 02178000
|
|
INTEGER WHOSE; COMMENT THE AUTHORITY TYPE STACK TO DELINK; 02179000
|
|
REAL HEAD ; COMMENT THE HEAD OF THE AUTHORITY TYPE STACK; 02180000
|
|
FORWARD; 02181000
|
|
PROCEDURE PARAMETERINSERT (FIRSTPARAM, LASTPARAM, ENTRY); 02182000
|
|
VALUE ENTRY; 02183000
|
|
REFERENCE FIRSTPARAM, LASTPARAM, ENTRY; FORWARD; 02184000
|
|
BOOLEAN SIMULATING = (0,12); % TRUE FOR SIMULATOR RUN 02560000
|
|
VALUE ARRAY BCLTOEBC = (0,33) ~ ( 08000000
|
|
4"F0F1F2F3" 08001000
|
|
, 4"F4F5F6F7" 08002000
|
|
, 4"F8F97B7C" 08003000
|
|
, 4"6F7A6E69" 08004000
|
|
, 4"4EC1C2C3" 08005000
|
|
, 4"C4C5C6C7" 08006000
|
|
, 4"C8C94B70" 08007000
|
|
, 4"504D4C48" 08008000
|
|
, 4"00D1D2D3" 08009000
|
|
, 4"D4D5D6D7" 08010000
|
|
, 4"D8D95B5C" 08011000
|
|
, 4"605D5E49" 08012000
|
|
, 4"4061E2E3" 08013000
|
|
, 4"E4E5E6E7" 08014000
|
|
, 4"E8E96B6C" 08015000
|
|
, 4"597E6A7F" 08016000
|
|
); 08017000
|
|
VALUE ARRAY EBCTOBCL = (0,34) ~ ( 08018000
|
|
4"0C0C0C0C" 08019000
|
|
, 4"0C0C0C0C" 08020000
|
|
, 4"0C0C0C0C" 08021000
|
|
, 4"0C0C0C0C" 08022000
|
|
, 4"0C0C0C0C" 08023000
|
|
, 4"0C0C0C0C" 08024000
|
|
, 4"0C0C0C0C" 08025000
|
|
, 4"0C0C0C0C" 08026000
|
|
, 4"0C0C0C0C" 08027000
|
|
, 4"0C0C0C0C" 08028000
|
|
, 4"0C0C0C0C" 08029000
|
|
, 4"0C0C0C0C" 08030000
|
|
, 4"0C0C0C0C" 08031000
|
|
, 4"0C0C0C0C" 08032000
|
|
, 4"0C0C0C0C" 08033000
|
|
, 4"0C0C0C0C" 08034000
|
|
, 4"300C0C0C" 08035000
|
|
, 4"0C0C0C0C" 08036000
|
|
, 4"1F2F0C1A" 08037000
|
|
, 4"1E1D100C" 08038000
|
|
, 4"1C0C0C0C" 08039000
|
|
, 4"0C0C0C0C" 08040000
|
|
, 4"0C3C0C2A" 08041000
|
|
, 4"2B202E0C" 08042000
|
|
, 4"2C310C0C" 08043000
|
|
, 4"0C0C0C0C" 08044000
|
|
, 4"0C0F3E3A" 08045000
|
|
, 4"3B0C0E0C" 08046000
|
|
, 4"1B0C0C0C" 08047000
|
|
, 4"0C0C0C0C" 08048000
|
|
, 4"0C0C0D0A" 08049000
|
|
, 4"0B0C3D3F" 08050000
|
|
, 4"0C0C0C0C" 08051000
|
|
, 4"0C0C0C0C" 08052000
|
|
, 4"0C0C0C0C" 08053000
|
|
, 4"0C0C0C0C" 08054000
|
|
, 4"0C0C0C0C" 08055000
|
|
, 4"0C0C0C0C" 08056000
|
|
, 4"0C0C0C0C" 08057000
|
|
, 4"0C0C0C0C" 08058000
|
|
, 4"0C0C0C0C" 08059000
|
|
, 4"0C0C0C0C" 08060000
|
|
, 4"0C0C0C0C" 08061000
|
|
, 4"0C0C0C0C" 08062000
|
|
, 4"0C0C0C0C" 08063000
|
|
, 4"0C0C0C0C" 08064000
|
|
, 4"0C0C0C0C" 08065000
|
|
, 4"0C0C0C0C" 08066000
|
|
, 4"0C111213" 08067000
|
|
, 4"14151617" 08068000
|
|
, 4"18190C0C" 08069000
|
|
, 4"0C0C0C0C" 08070000
|
|
, 4"0C212223" 08071000
|
|
, 4"24252627" 08072000
|
|
, 4"28290C0C" 08073000
|
|
, 4"0C0C0C0C" 08074000
|
|
, 4"0C0C3233" 08075000
|
|
, 4"34353637" 08076000
|
|
, 4"38390C0C" 08077000
|
|
, 4"0C0C0C0C" 08078000
|
|
, 4"00010203" 08079000
|
|
, 4"04050607" 08080000
|
|
, 4"08090C0C" 08081000
|
|
, 4"0C0C0C0C" 08082000
|
|
); 08083000
|
|
SAVE VALUE ARRAY FOURBITSTUFF = (0,39) ~ ( 08083100
|
|
4"00010203", 4"04050607", 4"08091112", 4"13141516", 08083200
|
|
8"0123", 8"4567", 8"89AB", 8"CDEF" ); 08083300
|
|
DEFINE HEXTOBCL = FOURBITSTUFF[0]#, 08083400
|
|
HEXTOEBC = FOURBITSTUFF[4]#; 08083500
|
|
VALUE ARRAY TRUTHSETS = (0,38) ~ ( 08084000
|
|
6(0) % EBCDIC ALPHA-NUMERIC 08085000
|
|
, 4"7FC07FC0" % EBCDIC ALPHA-NUMERIC 08086000
|
|
, 4"3FC0FFC0" % EBCDIC ALPHA-NUMERIC 08087000
|
|
, 6(0) % EBCDIC ALPHABETIC 08088000
|
|
, 4"7FC07FC0" % EBCDIC ALPHABETIC 08089000
|
|
, 4"3FC00000" % EBCDIC ALPHABETIC 08090000
|
|
, 7(0) % EBCDIC NUMERIC 08091000
|
|
, 4"0000FFC0" % EBCDIC NUMERIC 08092000
|
|
, 4"FFC07FC0" % BCL ALPHA NUMERIC 08093000
|
|
, 4"7FC03FC0" % BCL ALPHA NUMERIC 08094000
|
|
, 4"00007FC0" % BCL ALPHABETIC 08095000
|
|
, 4"7FC03FC0" % BCL ALPHABETIC 08096000
|
|
, 4"FFC00000" % BCL NUMERIC 08097000
|
|
, 0 % BCL NUMERIC 08098000
|
|
, 2(0) % EBCDIC SPECIAL CHARACTERS 08098100
|
|
, 4"803F803F" % EBCDIC SPECIAL CHARACTERS 08098200
|
|
, 4"C03F007F" % EBCDIC SPECIAL CHARACTERS 08098300
|
|
, 0 % EBCDIC SPECIAL CHARACTERS 08098400
|
|
, 4"40000000" % EBCDIC SPECIAL CHARACTERS 08098500
|
|
, 4"80008000" % EBCDIC SPECIAL CHARACTERS 08098600
|
|
, 4"C0000000" % EBCDIC SPECIAL CHARACTERS 08098700
|
|
); 08099000
|
|
DEFINE EBCDICALPHANUMERIC = TRUTHSETS[00] #, 08100000
|
|
EBCDICALPHABETIC = TRUTHSETS[08] #, 08101000
|
|
EBCDICNUMERIC = TRUTHSETS[16] #, 08102000
|
|
BCLALPHANUMERIC = TRUTHSETS[24] #, 08103000
|
|
BCLALPHABETIC = TRUTHSETS[26] #, 08104000
|
|
BCLNUMERIC = TRUTHSETS[28]#, 08105000
|
|
EBCDICSPECIALS = TRUTHSETS[30]#, 08105100
|
|
ENDTRUTHSETS=0#;% 08105990
|
|
COMMENT THESE ARE THE 6500 POWERS OF TEN TABLES. 08106000
|
|
10*I=POTL[I.[05:06]]|POTM[I.[11:06])|POTH[I.[14:03]]. 08106500
|
|
THE VALUES ARE ALL DOUBLE PRECISION AND ARE ALL --TRUNCATED--. THE 08107000
|
|
FLAG-BIT OF THE MOST-SIGNIFICANT WORD IS THE FIRST BIT DROPPED 08107500
|
|
(FIRST BIT AFTER THE PERCENT). ALL VALUES WERE CALCULATED TO FULL 08108000
|
|
SIGNIFICANCE (I.E., AS INTEGERS), THEN CHOPPED TO 78 BITS.; 08108500
|
|
08109000
|
|
DOUBLE VALUE ARRAY POTL 08109500
|
|
08110000
|
|
~(3"1141000000000000",3"0000000000000000", % =@0000008110500
|
|
3"1131200000000000",3"0000000000000000", % =@0000108111000
|
|
3"1121440000000000",3"0000000000000000", % =@0000208111500
|
|
3"1111750000000000",3"0000000000000000", % =@0000308112000
|
|
3"1102342000000000",3"0000000000000000", % =@0000408112500
|
|
3"1073032400000000",3"0000000000000000", % =@0000508113000
|
|
3"1063641100000000",3"0000000000000000", % =@0000608113500
|
|
3"1054611320000000",3"0000000000000000", % =@0000708114000
|
|
3"1045753604000000",3"0000000000000000", % =@0000808114500
|
|
3"1037346545000000",3"0000000000000000", % =@0000908115000
|
|
3"1011124027620000",3"0000000000000000", % =@0001008115500
|
|
3"0001351035564000",3"0000000000000000", % =@0001108116000
|
|
3"0011643245121000",3"0000000000000000", % =@0001208116500
|
|
3"0022214116345200",3"0000000000000000", % =@0001308117000
|
|
3"0032657142036440",3"0000000000000000", % =@0001408117500
|
|
3"0043432772446150",3"0000000000000000", % =@0001308118000
|
|
3"0054341571157602",3"0000000000000000", % =@0001608118500
|
|
3"0065432127413542",3"0004000000000000", % =@0001708119000
|
|
3"0076740555316473",3"0001000000000000", % =@0001808119500
|
|
3"0111053071060221",3"0001720000000000", % =@0001908120000
|
|
3"0121265707274265",3"0004304000000000", % =@0002008120500
|
|
3"0131543271153342",3"0007365000000000", % =@0002108121000
|
|
3"0142074147406233",3"0005262200000000", % =@0002208121500
|
|
3"0152513201307702",3"0004536640000000", % =@0002308122000
|
|
3"0163236041571663",3"0001666410000000", %0 =@0002408122500
|
|
3"0174105452130240",3"0000244112000000", %00 =@0002508123000
|
|
3"0205126764556310",3"0000315134400000", %000 =@0002608123500
|
|
3"0216354561711772",3"0000400363500000", %0000 =@0002708124000
|
|
3"0231004771627437",3"0000450046042000", %000000 =@0002808124500
|
|
3"0241206170175346",3"0006562057453400", %0000000 =@0002908125000
|
|
3"0251447626234640",3"0004316473365100", %00000000 =@0003008125500
|
|
3"0261761573704010",3"0005402212262320", %000000000 =@0003108126000
|
|
3"0272356132665012",3"0006702654737004", %0000000000 =@0003208126500
|
|
3"0303051561442215",3"0004463430126605", %00000000000 =@0003308127000
|
|
3"0313664115752660",3"0007600336154346", %200000000000 =@0003408127500
|
|
3"4324641141345435",3"0001540425607437", %6400000000000 =@0003508128000
|
|
3"4336011371636744",3"0004070533151347", %6100000000000 =@0003608128500
|
|
3"4347413670206535",3"0005106662003641", %5520000000000 =@0003708129000
|
|
3"0361131664625026",3"0005033043640461", %2104400000000 =@0003808129500
|
|
3"4371360241772234",3"0002241654610575", %4525500000000 =@0003908130000
|
|
3"4401654312370703",3"0002712227752734", %7653020000000 =@0004008130500
|
|
3"0412227375067064",3"0001474675745524", %1625624000000 =@0004108131000
|
|
3"0422675274304701",3"0002014055337051", %2173171000000 =@0004208131500
|
|
3"4433454553366061",3"0004417070626663", %4632027200000 =@0004308132000
|
|
3"4444367706263475",3"0007522706774440", %4000435040000 =@0004408132500
|
|
3"4455465667740415",3"0003347470573550", %5000544250000 =@0004508133000
|
|
3"4467003245730520",3"0006361406732502", %6200675322000 =@0004608133500
|
|
3"0501060411731664",3"0005005571052122", %3364105460640 =@0004708134000
|
|
3"0511274514320241",3"0006207127264547", %0261126775010 =@0004808134500
|
|
3"4521553637404312",3"0001650755141700", %6335354574212 =@0004908135000
|
|
3"0532106607305374",3"0006223150372261", %0024647733254 =@0005008135500
|
|
3"0542530351166673",3"0007670002470735", %2032021722127 =@0005108136000
|
|
3"4553256443424452",3"0007646003207124", %4440426306555 =@0005208136500
|
|
3"4564132154331565",3"0005617404050751", %5550533770310 =@0005308137000
|
|
3"0575160607420123",3"0001163305063144", %1102662766373 =@0005408137500
|
|
3"0606414751324147",3"0007420166277775", %1323437564071 =@0005508138000
|
|
3"4621012014361120",3"0001732422375777", %4361034752111 =@0005608138500
|
|
3"0631214417455344",3"0002321127075377", %3455244144533 =@0005708139000
|
|
3"0641457523370635",3"0003005354714677", %2370515175662 =@0005808139500
|
|
3"0651773450267004",3"0005606650100057", %1066640435236 =@0005908140000
|
|
3"4662372362344605",3"0007150422120072", %7304410544506 =@0006008140500
|
|
3"4673071057035747",3"0003002526544111", %5165512675627 =@0006108141000
|
|
3"0703707272645341",3"0001603254275134", %0423035455175 =@0006208141500
|
|
3"0714671151416631",3"0004144127354363");%0527644770435 =@0006308142000
|
|
DOUBLE VALUE ARRAY POTM 08142500
|
|
08143000
|
|
~(3"1141000000000000",3"0000000000000000", % =@0000008143500
|
|
3"4726047403722377",3"0007175154247457", %6655616166544 =@0006408144000
|
|
3"4014473510762300",3"0023514315770633", %6315541553040 =@0012808144500
|
|
3"0103403417361516",3"0032235253250267", %3704517643661 =@0019208145000
|
|
3"0172523756577347",3"0043747364335667", %3440156307756 =@0025608145500
|
|
3"0262014102745174",3"0055463433536324", %1053014006506 =@0032008146000
|
|
3"0351423057061025",3"0066761250270402", %3777752636047 =@0038408146500
|
|
3"4441125722256075",3"0073757717235176", %5234420343164 =@0044808147000
|
|
3"0527061464053523",3"0100164434331431", %2561245705013 =@0051208147500
|
|
3"4615310177342265",3"0115474537630672", %7473770141554 =@0057608148000
|
|
3"0704060636744362",3"0125124721622671", %1262127057024 =@0064008148500
|
|
3"4773070652155207",3"0137074016271665", %5207710607022 =@0070408149000
|
|
3"4062271771625063",3"0152002464306621", %5177450026246 =@0076808149500
|
|
3"0151627122640561",3"0165346774161061", %0506313263060 =@0083208150000
|
|
3"4241272171262634",3"0173653557514160", %5215416216354 =@0089608150500
|
|
3"0331022323162501",3"0205135477216203", %1245320571711 =@0096008151000
|
|
3"0416227316541500",3"0215650301354503", %2364507430552 =@0102408151500
|
|
3"0504620511515514",3"0225724603203653", %0555750424133 =@0108808152000
|
|
3"0573504063603007",3"0230356777015603", %0655471421103 =@0115208152500
|
|
3"0662605010657142",3"0245363441540115", %3421137501315 =@0121608153000
|
|
3"0752061310601672",3"0257025566260413", %3631527002756 =@0128008153500
|
|
3"0041457313355310",3"0276331702015753", %3773670162764 =@0134408154000
|
|
3"4131153323315222",3"0306736070051361", %5040437573377 =@0140808154500
|
|
3"4217264213744524",3"0311675660467444", %4154541753113 =@0147208155000
|
|
3"4305453406516634",3"0326235176210225", %7260732301656 =@0153608155500
|
|
3"0374174156441746",3"0333645413752311", %0303470002531 =@0160008156000
|
|
3"4463162072241271",3"0341737734347416", %7422224407341 =@0166408156500
|
|
3"0552345400577533",3"0356011231622714", %1525032050036 =@0172808157000
|
|
3"0641670156730222",3"0362225342141324", %0160746354415 =@0179208157500
|
|
3"4731323261527331",3"0372522515457463", %6343655705733 =@0185608158000
|
|
3"4021045371360351",3"0413414001145703", %5702156731116 =@0192008158500
|
|
3"4106413245605716",3"0426047563137443", %5242020310123 =@0198408159000
|
|
3"0174750547327342",3"0434752736224723", %2243161451531 =@0204808159500
|
|
3"4263606774750311",3"0446764211226705", %4547637466166 =@0211208160000
|
|
3"4352667652055261",3"0454023267541401", %7377467717610 =@0217608160500
|
|
3"4442127774503364",3"0463742052221706", %4122154367526 =@0224008161000
|
|
3"0531514561003110",3"0471751001571765", %0310004020172 =@0230408161500
|
|
3"4621201540275231",3"0506473330776521", %5366506221123 =@0236808162000
|
|
3"0707473511634104",3"0517004116002775", %1152751023607 =@0243208162500
|
|
3"4775622261444010",3"0521205705141406", %7655434075660 =@0249608163000
|
|
3"4064312252460020",3"0542417412313577", %5502311046401 =@0256008163500
|
|
3"0153255351072377",3"0556751574341722", %1215026472552 =@0262408164000
|
|
3"4242422450716472",3"0565704017717023", %6360057144043 =@0268808164500
|
|
3"4331732353517622",3"0577535625522740", %5134162537656 =@0275208165000
|
|
3"0421355270251523",3"0603662737142310", %0207247354427 =@0281608165500
|
|
3"0511071176733572",3"0613704412666424", %2133176163115 =@0288008166000
|
|
3"0576603323156425",3"0623433740626150", %0550153112134 =@0294408166500
|
|
3"0665103732441040",3"0630015131727227", %3211033421651 =@0300808167000
|
|
3"0753714225644566",3"0641055324257642", %0430466411545 =@0307208167500
|
|
3"4042754362757206",3"0667221753325314", %7312430336457 =@0313608168000
|
|
3"4132177767210373",3"0670275217323337", %7025527435203 =@0320008168500
|
|
3"0221553062356341",3"0707214653450062", %3447603463570 =@0326408169000
|
|
3"0311230607367652",3"0716463771052416", %1546004325010 =@0332808169500
|
|
3"0377707704136465",3"0723164760756106", %3250540305734 =@0339208170000
|
|
3"4465774701726534",3"0732463541673204", %4732427535727 =@0345608170500
|
|
3"0554433204752653",3"0746747152676716", %3707123370534 =@0352008171000
|
|
3"0643352734424257",3"0756237637571265", %2043073016410 =@0358408171500
|
|
3"0732501217041756",3"0762617070716002", %2726527630323 =@0364808172000
|
|
3"0021775736715436",3"1005415273205562", %1025012750314 =@0371208172500
|
|
3"4111410235752271",3"1011076017302041", %6734200515373 =@0377608173000
|
|
3"0201115560167157",3"1025614475554304", %3513554047640 =@0384008173500
|
|
3"4266777643636764",3"1030310431025755", %4146654653371 =@0390408174000
|
|
3"0355242335310112",3"1046512350074012", %0066765167472 =@0396808174500
|
|
3"4444024052516417",3"1051111675276213");%4500576335227 =@0403208175000
|
|
DOUBLE VALUE ARRAY POTH 08175500
|
|
08176000
|
|
~(3"1141000000000000",3"0000000000000000", % =@0000008176500
|
|
3"4533043005100212",3"1064202274654451", %4052376002244 =@0409608177000
|
|
3"4431132435035057",3"2157536204320307", %6050444301372 =@0819208177500
|
|
3"0323470676540576",3"3242655607106551", %3574104722476 =@1228808178000
|
|
3"0221305102507076",3"4331314016653042", %3341046467066 =@1638408178500
|
|
3"4114177702444352",3"5423212615565017", %4553563624050 =@2048008179000
|
|
3"4011502433123006",3"6513114751647704", %4507464541024 =@2457608179500
|
|
3"4705000563145240",3"7575774067453713");%5601112567747 =@2867208180000
|
|
08180500
|
|
COMMENT SKELETON PARAMETER QUEUE ENTRIES FOR COMPILER 08247000
|
|
FILES.; 08248000
|
|
SAVE ARRAY COMPILERCODEFILE ~ ( 08249000
|
|
4"000003000008", 4"010104C3D6C4C500"), 08250000
|
|
COMPILERCARDFILE ~ ( 08251000
|
|
4"000003000008", 4"010104C3C1D9C400"), 08252000
|
|
COMPILERCARDEXTERNAL ~ ( 08253000
|
|
4"000005000015", 4"010112000000", 0, 0, 0); 08254000
|
|
QUEUE STANDARDQUEUE (PREVIOUSSTANDARD, NEXTSTANDARD); 09000000
|
|
VALUE PREVIOUSSTANDARD, NEXTSTANDARD; 09001000
|
|
REFERENCE PREVIOUSSTANDARD, NEXTSTANDARD; 09002000
|
|
COMMENT STANDARDQUEUE EXISTS ONLY TO ESTABLISH THE LOCATION OF ITS09003000
|
|
ITEMS FOR USE BY QUEUEING ALGORITHMS THAT DEAL WITH QUEUES09004000
|
|
THAT ARE ORDERED ON A FIRST IN - FIRST OUT BASIS.; 09005000
|
|
USING LOCKED; 09006000
|
|
INTEGER PBLOK %PRESENCE BIT LOCK 10000000
|
|
, GROSSLOK % LOCK ON INTERRUPTS 10001000
|
|
, PROCESSCHANGELOCK 10002000
|
|
; 10003000
|
|
DEFINE SETOVERFLOWFF = ; # 10004000
|
|
; 10005000
|
|
REAL MULTIPLEREFERENCELOK %FOR PRESENCE BIT 10006000
|
|
; 10007000
|
|
REAL MONITORLOCK; % MONITOR 10008000
|
|
REAL MONITORVALUE = (0,8), 10009000
|
|
MONITORMASK = (0,9); 10010000
|
|
FIELD MONMASKF = 19:10, MONVALF =9:10; 10011000
|
|
DEFINE JACKBIT =2# 10012000
|
|
,RAJBIT =4# 10013000
|
|
,DONBIT = 8# 10014000
|
|
,BOBBIT =16# 10015000
|
|
,STEVEBIT = 32# 10015100
|
|
,MIKEBIT = 64# 10015200
|
|
,GLOBALSTOP = STOP (PDR, PIR)# 10015990
|
|
; 10016000
|
|
COMMENT THE FOLLOWING DEFINES SPECIFY VALUES OF 10017000
|
|
PARAMETERS TO PROCEDURES SUCH AS KILLME, 10018000
|
|
NOTYETCODED AND ARITHMETICFAULT 10019000
|
|
; 10020000
|
|
DEFINE DZ = 1# )"DIVIDE BY ZERO "(10021000
|
|
EO = 2# )"EXPONENT OVERFLOW "(10022000
|
|
EU = 3# )"EXPONENT UNDERFLOW "(10023000
|
|
II = 4# )"INVALID INDEX "(10024000
|
|
IO = 5# )"INTEGER OVERFLOW "(10025000
|
|
GCAINTERRUPT = 6# )"FIRST UNASSIGNED MPX INT"(10026000
|
|
STACKOVER = 7# )"STACK OVERFLOW "(10027000
|
|
SYLLABLEDEPENDENT2 = 8# )"COMPROMISED SYLLABLE DEP"(10028000
|
|
BLOWUP = 9# )"BASE FOR ALARM INTERRUPT"(10029000
|
|
LOOP = 10# )" "(10030000
|
|
MEMPARITY = 11# )" "(10031000
|
|
MPXPARITY = 12# )" "(10032000
|
|
INVALIDADDRESS = 13# )" "(10033000
|
|
STACKUNDER = 14# )"STACK UNDERFLOW "(10034000
|
|
INVALIDOPCODE = 15# )"CODE NOT VALID OPERATOR "(10035000
|
|
MEMPROTECT = 16# )" "(10036000
|
|
INVALIDOP = 17# )"OPERATION ILLEGAL "(10037000
|
|
SEQERROR = 18# )"SEQUENCE ERROR "(10038000
|
|
ML1 = 19# )"INTERUPT ON MULTI-LINE 1"(10039000
|
|
ML2 = 20# )"INTERUPT ON MULTI-LINE 2"(10040000
|
|
ML3 = 21# )" "(10041000
|
|
ML4 = 22# )" "(10042000
|
|
EXTMPX = 23# )"EXTERNAL MPX "(10043000
|
|
UA2 = 24# )"SECND UNASSIGNED MPX INT"(10044000
|
|
UA3 = 25# )"THIRD UNASSIGNED MPX INT"(10045000
|
|
UA4 = 26# )"FORTH UNASSIGNED MPX INT"(10046000
|
|
MACHINEERROR = 27# )"HOPEFULLY "(10047000
|
|
PRTOPR = 28# )"PROCESSOR TO PROCESSOR "(10048000
|
|
STACKBOTTOM = 29# )"BOTTOM OF STACK INT "(10049000
|
|
EVENTLISTERR = 30 # %ERROR IN EVENTIST 10050000
|
|
, INTERRUPTDEC = 31 # %ERROR IN INTERRUPT DEC 10051000
|
|
10052000
|
|
, GROSSLOCK = 64 # % TEMPORARY GROSSLOK STOP 10053000
|
|
; 10054000
|
|
COMMENT FOLLOWING ARE THE VARIOUS VALUES OF THE TAG FIELD; 10055000
|
|
DEFINE SINGL = 0 #, 10056000
|
|
IRW = 1 #, 10057000
|
|
DOUBL = 2 #, 10058000
|
|
MEMLINK = 3 #, 10059000
|
|
CODE = 3 #, 10060000
|
|
SEGDESC = 3 #, 10061000
|
|
MSCW = 3 #, 10062000
|
|
TOS = 3 #, 10063000
|
|
RCW = 3 #, 10064000
|
|
DATADESC = 5 #, 10065000
|
|
STRINGDESC = 5#, 10066000
|
|
UNITAL = 6 #, 10067000
|
|
PCW = 7 # 10068000
|
|
; 10069000
|
|
10070000
|
|
DEFINE SINGLE = SINGL# 10071000
|
|
; 10072000
|
|
FIELD FULLWORD = 47:48 10073000
|
|
; 10074000
|
|
LAYOUT DATADESCRIPTOR ( TAG ~ DATADESC 10075000
|
|
, PBITF = 47:1 %PRESENCE BIT 10076000
|
|
, CBITF = 46:1 %COPY BIT 10077000
|
|
, IBITF = 45:1 %INDEXED BIT 10078000
|
|
, SBITF = 44:1 %SEGMENT BIT 10079000
|
|
, RBITF = 43:1 %READ ONLY BIT 10080000
|
|
, NUF =42:2:=0 %MUST BE ZERO 10081000
|
|
, DBITF = 40:1 %DOUBLE PREC. BIT 10082000
|
|
, LENTHINDEXF=39:20 %LENGTH/INDEX FLD 10083000
|
|
, ADDRESSF = 19:20 %ADDRESS FIELD 10084000
|
|
) 10085000
|
|
, REFERENCED ( PBITF 10086000
|
|
, IBITF 10086100
|
|
, LENTHINDEXF 10087000
|
|
, ADDRESSF 10088000
|
|
) 10089000
|
|
, DESCADDRESS ( ADDRESSF 10090000
|
|
) 10091000
|
|
, STRINGDESCRIPTOR ( TAG ~ STRINGDESC 10092000
|
|
, PBITF 10093000
|
|
, CBITF 10094000
|
|
, IBITF ~ 0 10095000
|
|
, SBITF 10096000
|
|
, RBITF 10097000
|
|
, SZF = 42:3 %CHARACTER SIZE 10098000
|
|
, LENGTHSTF = 39:20 %LENGTH FIELD 10099000
|
|
, ADDRESSF 10100000
|
|
) 10101000
|
|
, INDEXEDSTRINGDESCRIPTOR(TAG ~ STRINGDESC 10102000
|
|
, PBITF 10103000
|
|
, CBITF 10104000
|
|
, IBITF ~ 1 10105000
|
|
, SBITF 10106000
|
|
, RBITF 10107000
|
|
, SZF 10108000
|
|
, BYTEF = 39:4 %BYTE FILED 10109000
|
|
, INDEXSTF = 35:16 %INDEX FILED 10110000
|
|
, ADDRESSF 10111000
|
|
) 10112000
|
|
, SEGMENTDESCRIPTOR( TAG ~ SEGDESC 10113000
|
|
, PBITF 10114000
|
|
, CBITF 10115000
|
|
, DICTIONARYF = 45:1 10116000
|
|
, LOCKBITF = 44:1 10117000
|
|
, LENGTHSEGF 10118000
|
|
, ADDRESSF 10119000
|
|
, SVBITF =19:1 %SAVE BIT FIELD 10120000
|
|
) 10121000
|
|
, SETTAG ( TAG 10122000
|
|
) 10123000
|
|
; 10124000
|
|
DEFINE LENGTHF = LENTHINDEXF #%)CONVENIENT 10125000
|
|
, INDEXF = LENTHINDEXF #%)NOMENCLATUR10126000
|
|
, EBCDIC = 4 # %CHARACTER SIZE AS 10127000
|
|
, BCL = 3 # %PER SZF FIELD IN 10128000
|
|
, DIGIT = 2 # %STRING DESCRIPTOR 10129000
|
|
, TAGZOT(X) = (X) & SETTAG(SINGL) # 10130000
|
|
, DESCRIPTORLOCK =(MOM.DESCRIPTORLOCKF 10130100
|
|
=7 AND KIND = DATADESC) # 10130200
|
|
; 10131000
|
|
FIELD OLAYTYPEF = 18:1 10132000
|
|
10133000
|
|
, FILETYPEF = 18:1 10134000
|
|
, MCPF = 19:1 10135000
|
|
, AITINDICATORF = 17:1 10136000
|
|
, ADDRESF = 16:17 10137000
|
|
, DESCRIPTORLOCKF = 19:3 10137100
|
|
, MCPCODEF =19:2 10138000
|
|
; 10139000
|
|
LAYOUT NOTPRESENTARRAYDESCL( 10139050
|
|
PCBITSF = 47:2 ~0 10139100
|
|
, LENGTHF 10139150
|
|
, MCPCODEF 10139200
|
|
, AITINDICATORF 10139300
|
|
, ADDRESF 10139350
|
|
), 10139400
|
|
ARRAYDESCL ( 10139430
|
|
PCBITSF ~ 2 10139450
|
|
, LENGTHF 10139500
|
|
, ADDRESSF 10139550
|
|
); 10139600
|
|
COMMENT FOLLOWING IS THE FORMAT OF THE NORMAL AND STUFFED IRWS; 10140000
|
|
LAYOUT NORMALIRW ( TAG ~ IRW 10141000
|
|
, EBITF = 46:1 ~ 0 % E BIT 10142000
|
|
, ADRCPLF = 13:14 10143000
|
|
) 10144000
|
|
, STUFFEDIRW ( TAG ~ IRW 10145000
|
|
, EBITF ~ 1 10146000
|
|
, STKNRF = 45:10 10147000
|
|
, DISPF = 35:16 %OF MKST10148000
|
|
, SIRWDELTAF = 12:13 %DELTA 10149000
|
|
) 10150000
|
|
, MARKSTACKCW( TAG ~ MSCW 10151000
|
|
, DSBITF =47:1 10152000
|
|
, EBITF 10153000
|
|
, STKNRF 10154000
|
|
, VBITF = 19:1 10155000
|
|
, LLF = 18:5 10156000
|
|
, DFF = 13:14 10157000
|
|
) 10158000
|
|
, MARKSTACKWD( TAG ~ MSCW 10159000
|
|
, DSBITF 10160000
|
|
, EBITF 10161000
|
|
,STKNRF 10162000
|
|
, DISPFMS = 35:16 10163000
|
|
, VBITF 10164000
|
|
, LLF 10165000
|
|
, DFF 10166000
|
|
) 10167000
|
|
, RETURNCONTROLWORD (TAG ~ RCW 10168000
|
|
, STKNRF 10169000
|
|
, PSRF =35:3 10170000
|
|
, PIRF = 32:13 10171000
|
|
, NCSFF= 19:1 10172000
|
|
, LLF 10173000
|
|
, SDIF = 13:14 10174000
|
|
) 10175000
|
|
, POINTTOIOCB ( LOCKBITF 10176000
|
|
, ADDRESSF 10177000
|
|
) 10178000
|
|
; 10179000
|
|
COMMENT FOLLOWING IS FORMAT OF TOS CONTROL WORD; 10180000
|
|
LAYOUT TOSCW ( TAG ~ TOS 10181000
|
|
, SGNFFF = 47:1 10182000
|
|
, OFFFF = 46:1 10183000
|
|
, TFFFF = 45:1 10184000
|
|
, FLTFF = 44:1 10185000
|
|
, DSF = 39:20 10186000
|
|
, NCSFF 10187000
|
|
, LLF 10188000
|
|
, DF = 13:14 10189000
|
|
) 10190000
|
|
; 10191000
|
|
COMMENT FOLLOWING IS THE FORMAT OF THE FIRST WORD OF AN EVENT; 10192000
|
|
LAYOUT FIRSTEVENTWORD(TAG~DOUBL 10193000
|
|
,COUNTF = 47:27 10194000
|
|
, WAITQHEADF= 18:10 % HEAD WAITQ 10195000
|
|
, WAITQTAILF= 22:10 % TAIL WAITQ 10196000
|
|
, AVAILABLEBITF= 2:1 10197000
|
|
, HAPPENEDBITF = 1:1 10198000
|
|
, EVENTLOCKBITF= 0:1 10199000
|
|
) 10200000
|
|
; 10201000
|
|
FIELD EVENTLINKSF = 22:20 10202000
|
|
; 10203000
|
|
LAYOUT LOKMOM(LOCKBITF,DESCRIPTORLOCKF) 10204000
|
|
, FIXDESC(PBITF,LOCKBITF,ADDRESSF) 10205000
|
|
, SETCOPYBIT(CBITF) 10206000
|
|
; 10207000
|
|
SAVE 10208000
|
|
REAL ARRAY SOFTWAREINTERRUPTMASK[32]%EACH BIT INDICATES WHETHER 10209000
|
|
%THERE ARE ANY SOFTWARE 10210000
|
|
%INTERRUPTS FOR THE CORRES- 10211000
|
|
%PONDING STACK 10212000
|
|
; 10213000
|
|
10214000
|
|
FIELD ENABLEBITF = 46:1 10215000
|
|
, MOD32F = 4:5 10216000
|
|
, DIV32F = 9:5 10217000
|
|
, MOD64F = 5:6 10217010
|
|
, DIV64F = 9:4 10217020
|
|
, D0DISPF = 12:13 10217100
|
|
, D2DISPF = 11:12 10217200
|
|
, D4DISPF = 10:11 10217300
|
|
, D8DISPF = 9:10 10217400
|
|
, D16DISPF = 8:9 10217500
|
|
, D0D1SEGBIT= 13:1 10217600
|
|
, REALSDIF = 12:13 10217700
|
|
; 10218000
|
|
DEFINE MYCOURSEWORD = 20 # 10219000
|
|
, CODEFILEDESC=1# 10220000
|
|
, OLAYFILEDESC=2# 10221000
|
|
; 10222000
|
|
10223000
|
|
10224000
|
|
REAL COUNTFORTIMERINTERRUPTEVENT 10225000
|
|
, NUMBEROFPROCESSORS 10226000
|
|
; 10227000
|
|
BOOLEAN MORETHANONEPROCESSOR 10228000
|
|
; 10229000
|
|
DEFINE IFTHEREISASOFTWAREINTERRUPT = 10230000
|
|
IF BOOLEAN (SOFTWAREINTERRUPTMASK 10231000
|
|
[MYSNR.DIV32F].MOD32F)# 10232000
|
|
, MYCOURSE = STACK[MYSNR,MYCOURSEWORD] # 10233000
|
|
, MYDIVIDEBYZERO(X) = KILLME(WHICH) # 10234000
|
|
, MYEXPONENTUNDERFLOW(X) = KILLME(WHICH) # 10235000
|
|
, MYEXPONENTOVERFLOW(X) = KILLME(WHICH) # 10236000
|
|
, MYINVALIDINDEX(X) = KILLME(WHICH) # 10237000
|
|
, MYINTEGEROVERFLOW(X) = KILLME(WHICH) # 10238000
|
|
; 10239000
|
|
REAL CORESIZE = (0,6) 10240000
|
|
, SOFTWAREINTERRUPTLOCK= (0,17) 10241000
|
|
, INDEPENDENTRUNNERSTACKS 10242000
|
|
; 10243000
|
|
SAVE REFERENCE ARRAY 10244000
|
|
SHEETVECTOR = (0,16) [* ] 10245000
|
|
; 10246000
|
|
SAVE WORD ARRAY 10247000
|
|
SHEETARRAY = SHEETVECTOR[*,*] 10248000
|
|
; 10249000
|
|
SAVE REAL ARRAY 10250000
|
|
SHEETREALS = SHEETVECTOR[*,*] 10250200
|
|
; 10251000
|
|
COMMENT THE FOLLOWING ILLUSTRATE THE METHOD OF ACCESSIN REGISTERS; 10252000
|
|
DEFINE D = REGISTERS # , 10253000
|
|
D0 = D[0] #, 10254000
|
|
D1 = D[1] #, 10255000
|
|
D2 = D[2] #, 10256000
|
|
D3 = D[3] #, 10257000
|
|
D4 = D[4] #, 10258000
|
|
D5 = D[5] #, 10259000
|
|
D6 = D[6] #, 10260000
|
|
D7 = D[7] #, 10261000
|
|
D8 = D[8] #, 10262000
|
|
D9 = D[9] #, 10263000
|
|
D10 = D[10]#, 10264000
|
|
D11 = D[11]#, 10265000
|
|
D12 = D[12]#, 10266000
|
|
D13 = D[13]#, 10267000
|
|
D14 = D[14]#, 10268000
|
|
D15 = D[15]#, 10269000
|
|
D16 = D[16]#, 10270000
|
|
D17 = D[17]#, 10271000
|
|
D18 = D[18]#, 10272000
|
|
D19 = D[19]#, 10273000
|
|
D20 = D[20]#, 10274000
|
|
D21 = D[21]#, 10275000
|
|
D22 = D[22]#, 10276000
|
|
D23 = D[23]#, 10277000
|
|
D24 = D[24]#, 10278000
|
|
D25 = D[25]#, 10279000
|
|
D26 = D[26]#, 10280000
|
|
D27 = D[27]#, 10281000
|
|
D28 = D[28]#, 10282000
|
|
D29 = D[29]#, 10283000
|
|
D30 = D[30]#, 10284000
|
|
D31 = D[31]#, 10285000
|
|
IRSR(X) = REGISTERS[X+32]#, 10286000
|
|
PIR = REGISTERS[32]#, 10287000
|
|
SIR = REGISTERS[33]#, 10288000
|
|
DIR = REGISTERS[34]#, 10289000
|
|
TIR = REGISTERS[35]#, 10290000
|
|
LOSR = REGISTERS[36]#, 10291000
|
|
BOSR = REGISTERS[37]#, 10292000
|
|
F = REGISTERS[38]#, 10293000
|
|
BRSR(X) = REGISTERS[X+48] #, 10294000
|
|
PBR = REGISTERS[48]#, 10295000
|
|
SBR = REGISTERS[49]#, 10296000
|
|
DBR = REGISTERS[50]#, 10297000
|
|
TBR = REGISTERS[51]#, 10298000
|
|
S = REGISTERS[52]#, 10299000
|
|
SNR = REGISTERS[53]#, 10300000
|
|
PDR = REGISTERS[54]# 10301000
|
|
; 10302000
|
|
DEFINE OLAYROWLENTH = 180 # 10303000
|
|
, CODEROWLENTH = 180 # 10304000
|
|
; 10305000
|
|
DEFINE UPTOYOU =0# )"THE MCP DOES AS IT PLEASES "(10306000
|
|
FINISH =1# )"THE MCP MUST D-ES ME "(10307000
|
|
CARRYON =3# )"THE MCP MUST IGNORE INTERRUPT "(10308000
|
|
TELLME =4# )"THE MCP MUST SET SOME FLAGS "(10309000
|
|
SELECT =5# )"ACCESS PCW APPROPRIATE TO INTERUPT"(10310000
|
|
FAULTROUTINE =6# 10311000
|
|
; 10312000
|
|
DEFINE DISABLEOVERLAY = ;# % DUMMY DECLARATION 10313000
|
|
, ENABLEOVERLAY = ;# % DUMMY DECLARATION 10314000
|
|
; 10315000
|
|
PROCEDURE HANDLETHESOFTWAREINTERRUPT;; 10316000
|
|
COMMENT THIS IS A DUMMY PROCEDURE; 10317000
|
|
QUEUE SOFTWAREINTERRUPTQ(Y);REAL Y; 10318000
|
|
COMMENT THIS IS A DUMMY DECLARATION; 10319000
|
|
USING 10320000
|
|
TO INSERT,ENTRY ~ENTRY 10321000
|
|
; 10322000
|
|
DEFINE SETINTERVALTIMER = TIMER(100)#; 10323000
|
|
SAVE PROCEDURE KILLME(KILLVALUE); VALUE KILLVALUE; REAL KILLVALUE; 10324000
|
|
BEGIN 10325000
|
|
MONITOR JACKMONITOR(KILLVALUE); 10326000
|
|
LAYOUT KILLLAYOUT (39:16, 19:20); 10326100
|
|
KILLVALUE~KILLVALUE; 10327000
|
|
STOP (0&KILLLAYOUT (KILLVALUE, PDR), PIR); 10328000
|
|
IF NOT SIMULATING THEN MEMDUMP(0,0); 10328100
|
|
STOP(4"93C838E049E4",4"038038E491C0"); 10328200
|
|
END KILLME; 10329000
|
|
PROCEDURE MYFAULT(W); WORD W;; %DUMMY DEC 10330000
|
|
LAYOUT FIRSTPOINTERWORDL 10982000
|
|
(TOTALINFOWORDSF= 47:16 10983000
|
|
,INFOINDEXF = 31: 8 10984000
|
|
,INFOLENGTHF = 23: 8 10985000
|
|
,INFOTYPEF = 15: 9 10986000
|
|
,ALFALENGTHF = 6: 7 10987000
|
|
,KEYFIELDF = 15:16 10988000
|
|
); 10989000
|
|
COMMENT DEFINES FOR INFOTYPEF AS USED IN PARAMETER QUEUE10990000
|
|
ALGORITHMS. VALUES SHOULD BE GREATER THAN 128 10991000
|
|
AND LESS THAN 511.; 10992000
|
|
DEFINE FILETYPEP = 129#, 10993000
|
|
ENDOFPTYPE= 511#; 10994000
|
|
DEFINE UPDATEWORDCOUNT(NEWWORDS, ENTRY) = 10995000
|
|
REPLACE POINTERTOID@(ENTRY) 10996000
|
|
BY (REAL(POINTERTOID@(ENTRY) , 6) & 10997000
|
|
FIRSTPOINTERWORDL(NEWWORDS)) 10998000
|
|
FOR 6 #, 10999000
|
|
UPDATEINFOINDEX (INFOI, ENTRY) = 10999900
|
|
REPLACE POINTERTOID@(ENTRY) 10999930
|
|
BY (REAL(POINTERTOID@(ENTRY), 6) & 10999960
|
|
FIRSTPOINTERWORDL(*,*,INFOI))FOR 6 ;#;10999990
|
|
COMMENT STORAGE ALLOCATION VARIABLES ***********; 11000000
|
|
INTEGER PREVADDR, COMMENT THE ABSOLUTE ADDRESS FOR AVAILA OF THE 11001000
|
|
LARGEST AVAILABLE AREA NOT FOLLOWING AN OVER- 11002000
|
|
LAYABLE AREA OF MEMORY; 11003000
|
|
AVAILI, COMMENT THE ABSOLUTE ADDRESS OF THE FIRST 11004000
|
|
AVAILABLE LINK.; 11005000
|
|
MINDEX, COMMENT A UTILITY MEMORY INDEX; 11006000
|
|
MLENGTH, COMMENT A UTILITY MEMORY LENGTH; 11007000
|
|
AVAILABLECORE, COMMENT THE AMOUNT OF PRIMARY MEMORY(FRAGMENTED 11007100
|
|
OR OTHERWISE) THAT IS AVAILABLE AT ANY MOMENT; 11007200
|
|
SPACEQHEAD, COMMENT THE STACK THAT CONTAINS THE SUPER 11007300
|
|
SPACE AUTHORITY AND THE LINK TO THE STACK THAT 11007400
|
|
HAS THE SPACE REQUEST WITH THE HIGHEST PRIORITY;11007500
|
|
BACKALLOCATED, COMMENT ABSOLUTE ADDRESS LINKA FOR MOST 11008000
|
|
RECENTLY ALLOCATED AREA.; 11009000
|
|
LEFTOFF, COMMENT ABSOLUTE ADDRESS OF LINKA FOR HEAD OF 11010000
|
|
LEFTOFF LIST.; 11011000
|
|
STOPPER; COMMENT ABSOLUTE ADDRESS OF AVAILA FOR END OF 11012000
|
|
AVAILABLE LIST. BIT 42:1 = 1, I.E. SIZE IS 11013000
|
|
LARGER THAN LARGEST MEMORY POSSIBLE AND THE LINK11014000
|
|
IS ZERO. AVAILB OF STOPPER IS ADDRESS OF LARG- 11015000
|
|
EST AVAILABLE AREA.; 11016000
|
|
REAL SPACELOCK; COMMENT SPACELOCK INSURES THAT ONLY ONE PROC- 11017000
|
|
CESS AT A TIME HAS ACCESS TO MEMORY LINKS. IT 11018000
|
|
IS THEREFORE BUZZED UPON ENTRY TO GETSPACE AND 11019000
|
|
FORGETSPACE AND UNLOCKED BEFORE THESE PROCEDURES11020000
|
|
ARE EXITED.; 11021000
|
|
DEFINE FASTPLACE = BACKWARDLINKF#, 11021100
|
|
SLOWPLACE = FORWARDLINKF #, 11021200
|
|
RETRYCOUNT = SELFIDENTF #, 11021300
|
|
SPACERETRY = 10#; COMMENT THE MAXIMUM NUMBER OF TIMES A 11021400
|
|
SPACE "QUEUE" ENTRY CAN BE IGNORED BECAUSE AN 11021500
|
|
ORDERED SIZE IS NOT ADEQUATE. THE ENTRY MUST BE11021600
|
|
AT THE HEAD OF THE QUEUE BEFORE THE COUNTER IS 11021700
|
|
DECREMENTED.; 11021800
|
|
LAYOUT LINKA COMMENT THE FIRST LINK WORD OF AN IN-USE AREA; 11022000
|
|
(TAG ~ 3, 11023000
|
|
INUSEID = 47:10, COMMENT THE USERS ID FOR THIS AREA ; 11024000
|
|
INUSELENGTH = 37:17, COMMENT A SELF-RELATIVE INDEX FOR 11025000
|
|
FINDING LINKZ FOR THIS AREA. I.E. LENGTH OF 11026000
|
|
AREA + NUMBER OF LINK WORDS; 11027000
|
|
AVAILABLE = 20:1 ~ 0, 11028000
|
|
BACKLINK = 19:20), COMMENT THE LINK TO THE LAST PREVIOUSLY11029000
|
|
ALLOCATED AREA FOR THIS USER; 11030000
|
|
LINKB COMMENT THE SECOND LINK WORD OF AN IN-USE AREA;11031000
|
|
(TAG ~ 3, 11032000
|
|
USAGE = 47:7, COMMENT THE USAGE OF THE AREA; 11033000
|
|
ADDRTYPE = 40:1, COMMENT IS THE ADDRESS OF MOM ABSOLUTE OR11034000
|
|
BOS RELATIVE. 1 IS BOS RELATIVE.; 11035000
|
|
ADDRMOM = 39:20, COMMENT THE ADDRESS OF THE MOM DESCRIPT;11036000
|
|
DISKADDR = 19:20), COMMENT THE DISK ADDRESS OF THE AREA 11037000
|
|
DESCRIBED BY MOM. 19:1 = 1 INDICATES OVERLAY 11038000
|
|
DISK.; 11039000
|
|
LINKC COMMENT THE THIRD LINK WORD OF AN IN-USE AREA; 11040000
|
|
(TAG ~ 3 11041000
|
|
), COMMENT THIS WORD IS RESERVED FOR EXPANSION; 11042000
|
|
LINKZ COMMENT THE FINAL LINK WORD OF AN IN-USE AREA; 11043000
|
|
(TAG ~ 3, 11044000
|
|
OLAY = 47:1, COMMENT THE PERMANENT OVERLAYABLE STATE OF 11045000
|
|
AN AREA. GETSPACE PLACES THE RESULT OF A 11046000
|
|
LOGICAL AND OF THE OERLAY BIT OF ITS TYPE 11047000
|
|
AND ADDRESS (OF MOM)! 0 IN THIS BIT; 11048000
|
|
DELTAWDS = 46:5, 11049000
|
|
FRONTLINK =43:20, COMMENT - CHECK-OUT * * * * * * * 11050000
|
|
FRONTLINK = 41:20, COMMENT THE LINK TO THE NEXT ALLOCATED11051000
|
|
AREA FOR THIS IN-USE ID.; 11052000
|
|
SPACEOLAYLOCK = 21:1, COMMENT IF BIT IS ON AREA IS OVER-11053000
|
|
LAYABLE. GETSPACE TURNS THE BIT OFF AND THE 11054000
|
|
CALLER HAS THE RESPONSIBILITY OF EXCHANGING THE 11055000
|
|
OLAY BIT AND THIS BIT.; 11056000
|
|
AVAILABLE ~ 0, 11057000
|
|
INUSELENGTHZ = 19:20), COMMENT A SELF-RELATIVE INDEX FOR 11058000
|
|
FINDING LINKA OF THIS AREA.; 11059000
|
|
AVAILA COMMENT THE FIRST LINK WORD OF AN AVAILABLE AREA.; 11060000
|
|
(TAG ~ 3, 11061000
|
|
PREOLAY = 41:1, COMMENT THE OLAY BIT OF THE PREVIOUS 11062000
|
|
AREA; 11063000
|
|
LENGTH = 40:20, COMMENT A SELF-RELATIVE INDEX TO AVAILZ 11064000
|
|
OF THIS AREA. LENGTH = WORDS IN AREA + LINKSIZ;11065000
|
|
AVAILABLE ~ 1, 11066000
|
|
LINK = 19:20), COMMENT THE ABSOLUTE ADDRESS OF THE NEXT 11067000
|
|
AVAILABLE AREA; 11068000
|
|
AVAILB COMMENT THE SECOND LINK WORD OF AN AVAILABLE AREA.; 11069000
|
|
(TAG ~ 0, 11070000
|
|
LINKTOPREVIOUSAVAILABLEAREA = 47:48), 11071000
|
|
AVAILZ COMMENT THE FINAL LINK WORD OF AN AVAILABLE AREA.; 11072000
|
|
(TAG ~ 3, 11073000
|
|
AVAILABLE ~ 1, 11074000
|
|
LENGTHZ = 19:20), COMMENT A SELF-RELATIVE INDEX TO FIND 11075000
|
|
AVAILA FOR THIS AREA.; 11076000
|
|
SPACETYPE 11077000
|
|
( 11078000
|
|
PRINTNOMEM = 4:1, COMMENT 1 = PRINT NO MEM MESSAGE; 11079000
|
|
MAKEROOM = 3:1, COMMENT 1 = OVERLAY IF REQUIRED; 11080000
|
|
SLEEPY = 2:1, COMMENT 1 = SLEEP IF MEMORY N/A; 11081000
|
|
11082000
|
|
OERLAY = 0:1), COMMENT 1 = SPACE FOR OVERLAYABLE; 11083000
|
|
LLLUARG 11084000
|
|
(21:1, COMMENT PREVIOUS OVERLAYABILITY; 11085000
|
|
20:20); COMMENT SIZE; 11086000
|
|
DEFINE INITIALIZETOZERO (ADDRESS, LENGTH) = 11087000
|
|
REPLACE POINTER(M[ADDRESS]) BY 0 FOR LENGTH OVERWRITE#; 11088000
|
|
FIELD AVAILKEY = 47:28; COMMENT AVAILA SORT KEY FIELD.; 11089000
|
|
DEFINE LINKSIZE = COMMENT NUMBER OF WORDS IN MEMORY LINKS -1; 11090000
|
|
3#, 11091000
|
|
LINKSIZETIMES2PLUS1 = COMMENT SIZE OF TEMPLINKS ARRAY.; 11092000
|
|
8#; 11093000
|
|
DEFINE PROCSTACKSIZE = 12000000
|
|
512#, 12001000
|
|
COMMENT ARBITRARY - F AND S ARE SET TO 12002000
|
|
SOME ADDRESS IN THE SECOND HALF OF MOD 0 12003000
|
|
UNTIL MORE PERMANENT STACKS CAN BE GOTTEN.;12004000
|
|
12005000
|
|
12006000
|
|
COMMENT THEN NUMBER OF WORDS IN A SHEET ENTRY 12007000
|
|
AND THE NUMBER OF WORDS THAT ARE RESERVED AT THE12008000
|
|
BOTTOM OF A PROCESSES LOWEST LEVEL STACK. ;12009000
|
|
STACKOFLOWSIZE = 12010000
|
|
64 #, 12011000
|
|
COMMENT THE NUMBER OF WORDS THAT ARE RESERVED 12012000
|
|
ABOVE LOSR TO HANDLE STACK OVERFLOWS. ;12013000
|
|
STACKSPERMODULE = 12014000
|
|
32#; 12015000
|
|
COMMENT THE NUMBER OF STACK VECTOR WORDS THAT 12016000
|
|
ARE ALLOCATED FOR EACH PRESENT MEMORY MODULE UP 12017000
|
|
TO THE MAXIMUM OF 1024 STACKS.; 12018000
|
|
INTEGER MAXSTACKS; COMMENT THE MAXIMUM INDEX FOR THE 12019000
|
|
STACK VECTOR.; 12020000
|
|
SAVE WORD ARRAY TEMPLINKS [LINKSIZETIMES2PLUS1]; 12021000
|
|
COMMENT RESERVES SPACE IN LEVEL 0 12022000
|
|
STACK FOR FIRST AVAILABLE 12023000
|
|
AND STOPPER LINKS; 12024000
|
|
ARRAY MEMMODS [64]; COMMENT DURING MEMORY INITIALIZATION EACH12025000
|
|
WORD CONTAINS A ONE IF THE CORRESPONDING 12026000
|
|
MODULE IS PRESENT. AFTER MISSING MODS ARE 12027000
|
|
ACCOUNTED FOR THE ELEMENTS ARE AVAILABLE TO12028000
|
|
BE DEFINED AS VARIOUS LOCAL INITIALIZE 12029000
|
|
VARIABLES. AFTER INITIALIZE THE AREA IS 12030000
|
|
FORGOTTEN AND THE STACK CELL IS AVAILABLE 12031000
|
|
FOR A PERMANENT GLOBAL.; 12032000
|
|
INTEGER PROCSTACKSTART = MEMMODS; 12033000
|
|
WORD PROCSTACKSTARTW= MEMMODS;COMMENT ONLY WAY TO OVERWRITE DESC.;12034000
|
|
REAL SLAVEQUARTERS, COMMENT USED TO LOCK ALL PROCESSORS EX- 12035000
|
|
CEPT THE ONE THAT LOCKS IT UNTIL INITIAL- 12036000
|
|
IZATION HAS THE SITUATION SOMEWHAT UNDER 12037000
|
|
CONTROL; 12038000
|
|
TIMEOUT, COMMENT CONTAINS SOME VALUE OF THE TIME- 12039000
|
|
OF-DAY CLOCK + AN INCREMENT OF TIME THAT IS12040000
|
|
SUFFICIENT TO ALLOW ALL EXPECTED PROCESSORS12041000
|
|
TO GET THEIR STACKS IN TEMPORARY ORDER.; 12042000
|
|
MEMMAX, COMMENT THE MAXIMUM AMOUNT OF AVAILABLE 12043000
|
|
MEMORY.; 12044000
|
|
SAVE1ADDRESS, COMMENT THE ADDRESS OF MEMORY AREA THAT 12045000
|
|
CONTAINS INITIALIZATION CODE AND IS TO BE 12046000
|
|
FORGOTTEN AFTER INITIALIZATION. STACK CELL12047000
|
|
IS AVAILABLE AFTER INITIALIZATION.; 12048000
|
|
PROCMASK = NUMBEROFPROCESSORS; 12049000
|
|
COMMENT A ONE BIT IN THIS WORD IDENTIFIES12050000
|
|
AN AVAILABLE PROCESSOR, THE BITS POSITION 12051000
|
|
IS THE PROCESSOR ID.; 12052000
|
|
BOOLEAN INITSWITCH; COMMENT USED TO CHANGE MPX INTERRUPT TO 12053000
|
|
PTPI INTERRUPT IN INITIALIZE AND 12054000
|
|
TO TELL STORAGE ALLOCATION WHEN A 12054500
|
|
PERMANENT LEFTOFF HEAD IS READY.; 12055000
|
|
LAYOUT SEGTRACEL (STKNRF~1, PIRF, ADDRESSF); 12055500
|
|
SAVE REAL PROCEDURE SEGTRACE(SEGTRACTER);% 12055600
|
|
VALUE SEGTRACTER; REAL SEGTRACTER;% 12055610
|
|
BEGIN 12055620
|
|
IF NOT SIMULATING THEN RETURN(0);% 12055625
|
|
SEGTRACE~REGISTERS[60]; 12055630
|
|
REGISTERS[60]~SEGTRACTER; 12055640
|
|
END SEGTRACE; 12055650
|
|
SAVE INTEGER PROCEDURE TRACE (TRACTER); 12056000
|
|
VALUE TRACTER; 12057000
|
|
INTEGER TRACTER; 12058000
|
|
BEGIN 12059000
|
|
IF NOT SIMULATING THEN RETURN(0);% 12059100
|
|
TRACE ~ REGISTERS [64]; 12060000
|
|
REGISTERS [64] ~ TRACTER; 12061000
|
|
END TRACE; 12062000
|
|
COMMENT THE ARRAYS BETWEEN "UNIT" AND 13000000
|
|
"TRANSACTION" ARE INITIALIZED TO MAXI-13001000
|
|
MUM NUMBER OF UNITS ON A GIVEN SYSTEM 13002000
|
|
BY THE CALL: 13003000
|
|
INITIALIZEARRAY(UNIT,TRANSACTION,MAXU)13004000
|
|
IN THE INITIALIZE PROCEDURE. THIS 13005000
|
|
SERIES OF ARRAY DECLARATIONS SERVES TO13006000
|
|
ILLUSTRATE THE METHOD FOR THE DECLAR- 13007000
|
|
ATION AND INITIALIZATION OF A NUMBER 13008000
|
|
(ONE OR MORE) ARRAYS TO THE SAME SIZE.13009000
|
|
ALL ARRAYS INITIALIZED THIS MANNER 13010000
|
|
ARE PLACED IN HIGH CONTIGUOUS MEMORY 13011000
|
|
AND MARKED AS NON-OVERLAYABLE. TO ADD13012000
|
|
ANOTHER ARRAY THAT IS TO HAVE A LENGTH13013000
|
|
OF MAXU, IT IS ONLY NECESSARY TO DE- 13014000
|
|
CLARE THE ARRAY BETWEEN "UNIT" AND 13015000
|
|
"TRANSACTION". (ALSO SEE DECLARATION &13016000
|
|
PROCEDURE CALL FOR "OLDSTATUSWORD"). 13017000
|
|
13018000
|
|
FROM THE FOREGOING IT SHOULD BE 13019000
|
|
APPARENT THAT: 13020000
|
|
1. ARRAYS THAT ARE TO BE INITIALIZED13021000
|
|
TO THE SAME LENGTH SHOULD BE DE- 13022000
|
|
CLARED CONTIGUOUSLY. 13023000
|
|
2. AT LEAST ONE PROCEDURE CALL IS 13024000
|
|
REQUIRED FOR EACH SERIES (ONE OR 13025000
|
|
MORE) OF ARRAYS THAT ARE TO BE 13026000
|
|
INITIALIZED TO THE SAME LENGTH. 13027000
|
|
3. ALL STACKCELLS BETWEEN THE FIRST 13028000
|
|
AND LAST ARRAY DECLARATIONS WILL 13029000
|
|
BE INITIALIZED TO ARRAY DESCRIP- 13030000
|
|
TORS. 13031000
|
|
;13032000
|
|
INTEGER DIAGNOSTICUNIT;COMMENT THE LOGICAL UNIT NO. OF THE 13033000
|
|
DIAGNOSTIC FILE; 13034000
|
|
DEFINE DIAGNOSTICIOCW = 40"04004" #, % IOCW FOR PRINTER-BCL SNG SPACE 13037100
|
|
DIAGNOSTICUNITTYPE = BUFFPRINTER#; %UNIT TYPE FOR MONITOR UNIT 13037200
|
|
SAVE WORD ARRAY DIAGNOSTICARRAY[22]; %BUFFER AND IOCW FOR MONITOR 13037300
|
|
ARRAY MONITER[*]; %DESCRIPTOR TO I/O AREA OF ABOVE 13037400
|
|
EVENT MONITORFINISH; %MONITOR I/O FINISH EVENT 13037500
|
|
REAL DCPSANDGCAS; 13037600
|
|
BOOLEAN MULTIPLEXORMASK; % A ONE BIT "N" MEANS THERE IS AN MPX-N 13037700
|
|
ARRAY UNIT[ * ]; COMMENT CONTAINS INFORMATION OF EACH UNITS CURRENT 13038000
|
|
STATE; 13039000
|
|
REFERENCE ARRAY LASTIO [*]; 13040000
|
|
ARRAY UINFO[*], % DESCRIPTORS FOR NON-DISK UNITS WHICH ARE 13041000
|
|
% READY. THE DESCRIPTORS POINT TO A "LABEL 13042000
|
|
% BLOCK" WHICH HAS THE SAME FORM AS A "LABEL- 13043000
|
|
% EQUATION BLOCK" (LEB) (SEE 24000000 FOR THE 13044000
|
|
% FORMAT OF THE LEB). 13045000
|
|
13046000
|
|
IOTIME [*], COMMENT ARRAY FOR RECORDING USERS IO TIME; 13047000
|
|
TRANSACTION[*], COMMENT FOR RECORDING RECORD TRANSACTIONS; 13048000
|
|
DUMMYAREA[1]; % FOR MAKING I/O REQUEST 13050000
|
|
WORD ARRAY UINFOW = UINFO[*]; 13050100
|
|
ARRAY UINFOP = UINFO[*,*]; 13050200
|
|
WORD ARRAY UINFOPW=UINFOW[*,*]; 13050210
|
|
BOOLEAN OPTIONS;% OPTIONS BIT WORD 13051000
|
|
DEFINE% OPTIONS 13051100
|
|
RETTOG = OPTIONS.BIT47#,% 13051200
|
|
13052000
|
|
ENDOPTDEF=0#;% 13054000
|
|
COMMENT 13054990
|
|
SCREEN IS INITIALIZED BY PERIPHERALINITIALIZE--SHOULD BE DYNAMIC;13055000
|
|
ARRAY SCREEN[*];% 13055010
|
|
% GLOBALS FOR OUTPUTMESS AND MESSER 13056000
|
|
LAYOUT WHOCALLSL (WHOF=47:24,WHICHF=11:12,WHATF=23:12);% 13056100
|
|
DEFINE% FOR OUTPUTMESS AMD MESSER 13057000
|
|
BEGFINMSG = 0#,% 13057100
|
|
BEGFOUTMSG = BEGFINMSG + FINSZ#,% 13057200
|
|
BEGMATHERR = BEGFOUTMSG + FOUTSZ#,% 13057300
|
|
BEGSTATMSG = BEGMATHERR + MATHERRSZ#,% 13057400
|
|
BEGMCPID = BEGSTATMSG + STATSZ#,% 13057500
|
|
BEGIOERR = BEGMCPID + MCPIDSZ#, 13057510
|
|
BEGSTDIOERR =BEGIOERR + IOERRSZ#,% 13057520
|
|
BEGMISCMSG= BEGSTDIOERR + STDIOERRSZ#,% 13057530
|
|
FINSZ = 6#,% 13057600
|
|
FOUTSZ = 4#,% 13057700
|
|
MATHERRSZ = 30#,% 13057800
|
|
STATSZ = 11#,% 13057900
|
|
MCPIDSZ = 4#,% 13058000
|
|
IOERRSZ = 5#,% 13058010
|
|
STDIOERRSZ = 18#,% 13058020
|
|
MISCSZ= 2#,% 13058030
|
|
FINMSGSEC= 0#,% 13058100
|
|
FOUTMSGSEC= 1#,% 13058200
|
|
MATHERRMSGSEC= 2#,% 13058300
|
|
STATMSGSEC= 3#,% 13058400
|
|
MCPIDSEC= 4#,% 13058500
|
|
IOERRSEC=5#,% 13058600
|
|
STDIOERRSEC=6#,% 13058700
|
|
MISCMSGSEC= 7#,% 13058710
|
|
OPMINDXR(N) = CASE N OF (% 13059000
|
|
BEGFINMSG,BEGFOUTMSG,BEGMATHERR,% 13059010
|
|
BEGSTATMSG,% 13059020
|
|
BEGMCPID,% 13059030
|
|
BEGIOERR,% 13059040
|
|
BEGSTDIOERR,% 13059050
|
|
13059055
|
|
BEGMISCMSG,% 13059060
|
|
0)#,% 13059090
|
|
IOERRMESSL(A,B,C)=MESSER(0&WHOCALLSL(5,A,B),C)#, 13059800
|
|
BOJMESSER(SNR)= MESSER(0&WHOCALLSL(MISCMSGSEC),SNR)#,% 13059810
|
|
EOJMESSER(SNR)= MESSER(1&WHOCALLSL(MISCMSGSEC),SNR)#,% 13059820
|
|
ENDOPMDEF=0#; % 13059990
|
|
ARRAY% **** "SCAN" DOES NOT LIKE READ ONLY ARRAYS 13060000
|
|
OUTPUTMESS~(% ALL MESSAGES USED BY MESSER 13065000
|
|
8"NO FILE"4"00"% **** FINDINPUT MSG**13066000
|
|
8"UNMATCHED GENEALOGY"4"00"% * 13066100
|
|
8"DUP FIL"4"00"% * 13067000
|
|
,% END FIND-INPUT MSG** 13068000
|
|
8"REQUIRED"4"00" 8"NEW PBT ON"4"00"% FIND-OUTPUT MSG### 13069000
|
|
,% END FIND-OUTPUT MSG### 13070000
|
|
8"ALGAMA"4"00" 8"ALOG"4"00" 8"ALOG10"4"00"%MATH ERRORS*** 13071000
|
|
8"ARCOS"4"00" 8"ARSIN"4"00" 8"ATAN"4"00" % * 13072000
|
|
8"ATAN2"4"00" 8"COS"4"00" 8"COSH"4"00" 8"COTAN"4"00"% * 13073000
|
|
8"ERF"4"00" 8"EXP"4"00" 8"GAMMA"4"00" 8"SIN"4"00"% * 13074000
|
|
8"SINH"4"00" 8"SQRT"4"00" 8"TAN"4"00" 8"TANH"4"00"% * 13075000
|
|
8"XTOI"4"00"% * 13076000
|
|
8"DATAN"4"00" 8"DATAN2"4"00" 8"DCOS"4"00" 8"DEXP"4"00"% * 13077000
|
|
8"DLOG"4"00" 8"DLOG10"4"00" 8"DSIN"4"00" 8"DSQRT"4"00"% * 13078000
|
|
8"CABS"4"00" 8"CCOS"4"00" 8"CEXP"4"00" 8"CLOG"4"00"% * 13079000
|
|
8"CSIN"4"00" 8"CSQRT"4"00",% END MATH ERRORS*** 13080000
|
|
8"NOT READY"4"00"% STATUS MESSAGES SSSS 13081000
|
|
8"UNIDENTIFIED FLYING UNIT"4"00"% S 13081200
|
|
8"PARITY RW/L"4"00"% S 13081300
|
|
8"RET"4"00"% S 13081500
|
|
8"MCP PBT ON"4"00"% S 13081700
|
|
,% END STATUS MESSAGES SSSS 13081990
|
|
8"B6500 MCP"% **** BEGINNING MCP ID ******* 13082000
|
|
8" LEVEL "% * 13082100
|
|
8"0"% LEVEL NUMBER * 13082200
|
|
8"."% * 13082300
|
|
8"0"% PATCH NUMBER WITHIN LEVEL * 13082400
|
|
4"00",% **** END MCPID ******* 13082500
|
|
8"FILE OPEN"4"00" % I/O ERRORS 13082600
|
|
8"FILE ATTRIBUTE"4"00" 13082700
|
|
, % END I/O ERRORS 13082800
|
|
8"DESCRIPTOR ERROR"4"00" % STD I/O ERRORS 13082900
|
|
8"INVALID MEM ADDRESS"4"00"% 13083000
|
|
8"I/O MEMORY PARITY"4"00"% 13083100
|
|
8"MEMORY PROTECT ERROR"4"00"% 13083200
|
|
8"UNIT READ CHECK"4"00"% 13083300
|
|
8"WRITE LOCK-OUT"4"00"% 13083400
|
|
, % END STD I/O ERRORS 13084000
|
|
8"BOJ"4"00"% BEGIN MISCELLANEOUS MESSAGES MMM 13085000
|
|
8"EOJ"4"00"% M 13085100
|
|
,% END MISCELLANEOUS MESSAGES MMM 13085900
|
|
0),% END MESSAGES USED BY MESSER 13099900
|
|
MONTHS ~( 8"JANUARY"4"00",8"FEBRUARY"4"00",8"MARCH"4"0000", 13120000
|
|
8"APRIL"4"0000",8"MAY"4"00000000",8"JUNE"4"000000", 13120010
|
|
8"JULY"4"000000",8"AUGUST","00",8"SEPTEMBER"4"00", 13120020
|
|
8"OCTOBER"4"00",8"NOVEMBER"4"00",8"DECEMBER"4"00"), 13120030
|
|
PIE~( 8"3.1415926535897932384626433832795028841971693993751058" 13120100
|
|
8"209749445923078164062862089986280348253421170679821480" 13120110
|
|
8"865132823066470938446095505822317253594081284811174502" 13120120
|
|
8"841027019385211055596446229489549303819644288109756659" 13120130
|
|
8"334461284756482337867831652712019091456485669234603486" 13120140
|
|
8"104543266482133936072602491412737245870066063155881748" 13120150
|
|
8"815209209628292540917153643678925903600113305305488204" 13120160
|
|
8"665213841469519415116094330572703657595919530921861173" 13120170
|
|
8"819326117931051185480744623799627495673518857527248912" 13120180
|
|
8"279381830119491298336733624406566430860213949463952247" 13120190
|
|
8"371907021798609437027705392171762931767523846748148676" 13120200
|
|
8"694051320005681271452635608277857713427577896091736371" 13120210
|
|
8"787214684409012249534301465495853710507922796892589235" 13120220
|
|
8"420199561121209219608640344181598136297747713099605187" 13120230
|
|
8"072113499999983729780499510597317328160963185950244594" 13120240
|
|
8"553469083026425223082533446850352619311881710100031378" 13120250
|
|
8"387528865875332083814206171776691473035982534904287554" 13120260
|
|
8"6873115956286388235378759375195778185778 5321712268066"), 13120270
|
|
DICA~(8"MIXSCHJOB PERPCD DIREXP "),% 13124000
|
|
DICB~(% 13125000
|
|
8"TISTXSES"% PREFIX, NO SUFFIX 13125100
|
|
8"DSRMOKILFMULOUFROFUSAXPR"% PREFIX, NO SUFFIX--VALID REPLIES 13125200
|
|
8"OLRYPGPBSVRWCL"% SUFFIX, NO PREFIX 13125300
|
|
8"TRDRRDSFSOROTC"% SUFFIX, NO PREFIX 13125400
|
|
8"LORNTO"% NO PREFIX, SUFFIX OPTIONAL 13125500
|
|
8"TFWTWDWMPIEILE"% NO PREFIX, NO SUFFIX 13125600
|
|
),% 13125900
|
|
MNEMONIC~(8" DKSCODPRPPLPLP CRCPCP MTMTMT ",% BE SURE THESE13131000
|
|
8" MT");% ARE CONTIGUOUS 13132000
|
|
ARRAY 13133000
|
|
MNEMTOUNIT [*],% USED TO OBTAIN PHYS. UNIT NO. FROM UNIT MNEM. 13134000
|
|
TYPEINDX[*];% USED TO OBTAIN INDEX INTO MNEMTOUNIT OF LOWEST 13135000
|
|
% NUMBERED UNIT OF TYPE I. 13136000
|
|
COMMENT THE ARRAYS DICA THROUGH TYPEINDX WILL BE CONVERTED TO 13137000
|
|
EBCDIC STRING DESCRIPTORS IN PERIPHERALINITIALIZE. CARE SHOULD BE 13138000
|
|
USED WHEN ADDING DECLARATIONS INBETWEEN AND WHEN USING THE 13139000
|
|
DESCRIPTORS, SINCE ALL INDEXING WILL BE BY CHARACTERS; 13140000
|
|
ARRAY DATE ~(8"1969182TUESDAY, JULY 1, 1969"4"00",0);% 13140100
|
|
REAL TODAYSDATE~69182; 13140110
|
|
DEFINE FORMATTEDDATEPOINTER = POINTER(DATE,8) + 7 #; 13140150
|
|
ARRAY TIME[1];% 13140200
|
|
LAYOUT TIMEL ( 47:16,31:16,15:16);% 13140210
|
|
BOOLEAN ARRAY OLDSTATUSWORD[*]; % OLD STATUS 13141000
|
|
REAL RDLBLP; % READALABEL PROCESS CONTROL WORD 13142000
|
|
DEFINE% FOR STATUS, READALABEL 13143000
|
|
MAXRDLBLP = 6#,% MAXIMUM # READALABELS 13143010
|
|
STATOPM(N)= N&WHOCALLSL(STATMSGSEC)#,% 13143020
|
|
NOTREADYMSG(U)= MESSER(STATOPM(0),U)#,% 13143030
|
|
UFUMSG(U)= MESSER(STATOPM(1),U)#,% 13143040
|
|
PARITYRWLMSG(U)=MESSER(STATOPM(2),U)#,% 13143050
|
|
RETMSG(U)= MESSER(STATOPM(3),U)#,% 13143060
|
|
PBTONMSG(U)= MESSER(STATOPM(4),U)#,% 13143070
|
|
ENDSTATDEF=0#;% 13143990
|
|
FIELD RF = 6:6; % READALABEL CONTROL FIELD (0:1-LOCK)13144000
|
|
REAL PRGT; % PURGIT PROCESS CONTROL WORD 13145000
|
|
FIELD 13146000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%13147000
|
|
% UNIT TABLE %13148000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%13149000
|
|
UNITTYPE = 47:5, 13150000
|
|
UNITTYPECNTRF =42:8,% ORDINAL # OF UNIT WITHIN TYPE 13150100
|
|
UERRORSTATUSBITS = 34:14,COMMENT COMBINED FIELD FOR ERROR 13151000
|
|
AND STATUS BITS; 13152000
|
|
UNITERRORFIELD = 30:5, % UNIT ERROR COUNT (USED BY IOFINISH) 13154000
|
|
UNITSTATUS =25:5 , COMMENT FIELD INDICATING UNIT STATE-AS13155000
|
|
UNITREADY,UNITERROR,UNITBUSY ETC; 13156000
|
|
UNITNOTREADY=25:1, COMMENT 1- NOT READY 13157000
|
|
0- READY; 13158000
|
|
UNITERROR=24:1 , COMMENT IF SET(=1),ERROR ON UNIT; 13159000
|
|
UCHANWAITORBUSY=23:3, COMMENT UNIT BUSY OR WAITING FOR A 13160000
|
|
CHANNEL; 13161000
|
|
UCHANWAIT=23:1, COMMENT UNIT WAITING FOR A CHANNEL; 13162000
|
|
UNITIOBUSY=22:2, COMMENT I/O IN PROCESS & UNITBUSY; 13163000
|
|
% 01 - AWAITING PRINTER FINISH 13164000
|
|
IOINPROCESS=22:1, COMMENT I/O IN PROCESS; 13165000
|
|
UNITINPROCESS=22:1, COMMENT UNIT IN PROCESS; 13166000
|
|
UNITSTATE = 20:15, % STATE OF UNIT 13167000
|
|
UNITRETRY =20:1, COMMENT UNIT BEING RETRIED; 13168000
|
|
ULOCKED = 19:1, % UNIT LOCKED 13169000
|
|
USAVED = 18:1, % UNIT SAVED 13170000
|
|
DENSITYF = 17:3, % DISK TYPE 13171000
|
|
USCRATCH = 14:1, % UNIT IS SCRATCH 13172000
|
|
UNITASSIGNED = 13:1, % UNIT ASSIGNED TO A USER 13173000
|
|
ULABELLED = 12:1, % UNIT LABELLED 13174000
|
|
UINREWIND = 11:1, % UNIT REWINDING 13175000
|
|
UCLOSEDNOREWIND= 10:1, % UNIT CLOSED WITH NO REWIND 13176000
|
|
UTOBEPURGED = 9:1, % UNIT CLOSED WITH PURGE 13177000
|
|
UWRITERING = 8:1, % WRITE RING 13178000
|
|
UNITMPXD =5:4, COMMENT MPXDESIGNATOR FOR THE UNIT; 13179000
|
|
UNITMPXI =1:1; COMMENT MPXINDICATOR FOR THE UNIT; 13180000
|
|
COMMENT =0:1 RESERVED FOR UNITNOLOCK; 13181000
|
|
LAYOUT UNITL(UNITNOTREADY,19:2,14:3,UINREWIND); 13182000
|
|
REAL 13183000
|
|
MAXUNIT, COMMENT MAXIMUM UNIT NO ON THE SYSTEM. UNIT13187000
|
|
NO ASSIGNED TO PSEUDO CARD READER IS 13188000
|
|
MAXUNIT + 1; 13189000
|
|
MINUNIT ~ - 1; COMMENT MINIMUM UNIT ON SYSTEM; 13190000
|
|
INTEGER MAXPSEUDOUNIT, COMMENT MAXIMUM UNIT FOR PSEUDO 13191000
|
|
CARD READERS - IT IS EQUAL TO 13192000
|
|
MAXUNIT + NO. OF PSEUDO CARD 13193000
|
|
READERS; 13194000
|
|
UBITSTABLESIZE; COMMENT SIZE = HIGHEST WHOLE NO. 13195000
|
|
OF MAXPSEUDOUNITS/48; 13196000
|
|
FIELD RDMEMADDR=47:20, COMMENT MEMORY ADDRESS FIELD OR RESULT DESC;13198000
|
|
RDCHRCNT =27:3 , COMMENT CHARACTER COUNT FIELD OF R.D.; 13199000
|
|
RDUNUMERR=24:25,% BOTH UNIT NUMBER AND ERROR FIELD. 13200000
|
|
RDUNITNO =24:8 , COMMENT UNIT NO. FIELD IN RESULT DESC.; 13201000
|
|
RDERROR =16:17, COMMENT RESULT DESCRIPTOR ERROR FIELD; 13202000
|
|
RDSTNDERROR=6:7, COMMENT STANDARD ERROR FIELD OF R.D.; 13203000
|
|
RDATTNEXCP=1:2, % ATTENTION EXCEPTION BITS 13204000
|
|
RDEXCEPTION=0:1, % HARDWARE EXCEPTN13205000
|
|
RDATTENTION=1:1, % SOFTWARE ATTNTN 13206000
|
|
RDBIT432 =4:3, COMMENT UNITUSABLE BITS; 13207000
|
|
RDBUSY =2:1, COMMENT BUSY; 13208000
|
|
RDNOTREADY =3:1, COMMENT NOT READY; 13209000
|
|
RDERRORBIT =4:1, COMMENT DESCRIPTOR ERROR; 13210000
|
|
RDMEMADDRBIT =5:1, COMMENT MEMORY ADDRESS ERROR; 13211000
|
|
RDMEMPARITY =6:1, COMMENT MEMORY PARITY ERROR; 13212000
|
|
RDUNITERROR=15:9, COMMENT UNIT ERROR FIELD OF R. D. ; 13213000
|
|
RDMEMACCESS =7:1, COMMENT MEMORY ACCESS ERROR; 13214000
|
|
RDENDOFTAPE =8:1, COMMENT END OR BEGINNING OF TAPE; 13215000
|
|
RDLOWPAPER= 8:1, % LOW PAPER 13216000
|
|
RDWLOOREOF =9:1, COMMENT WRITE LOCK-OUT OR END OF FILE;13217000
|
|
RDCNTRLCARD =10:1,COMMENT CONTROL CARD; 13218000
|
|
RDINCREC = 10:1, % INCOMPLETE RECORD 13219000
|
|
RDDENSITY = 11:2, % DENSITY IN RD AFTER TEST 13220000
|
|
RDOVERFLOW =11:1,COMMENT EXCEED WORD COUNT; 13221000
|
|
RDCRCCORRECT =12:1,COMMENT CRC CORRECTION; 13222000
|
|
RDNONPRESENT =13:1,COMMENT NON-PRESENT; 13223000
|
|
RDREWINDING =14:1,COMMENT REWINDING; 13224000
|
|
RDBLANKTAPE =15:1,COMMENT BLANK TAPE; 13225000
|
|
RDMEMPROTECT =16:1;COMMENT MEMORY PROTECT ERROR; 13225500
|
|
FIELD RDDISKFILETYPEF= 11:2; 13226000
|
|
COMMENT 1C-5 = 0 13227000
|
|
1A-X = 1 13228000
|
|
1C-3 = 2 13229000
|
|
1C-4 = 3; 13230000
|
|
COMMENT 1A-X = 0 ALSO, BUT ONLY ON 101, I HOPE; 13231000
|
|
FIELD SLCNTRDY = 15:1; COMMENT SINGLE LINE CONTROL TIMEOUT; 13232000
|
|
FIELD CONSOLEIDF = 14:3; 13232100
|
|
FIELD COMMENT I/O CONTROL WORD FIELDS; 13233000
|
|
IOSTANDARDFIELD =45:10, 13234000
|
|
IOATTENTION =45:1, 13235000
|
|
IOREADBIT =44:1, 13236000
|
|
IOMEMINHIBIT =43:1, 13237000
|
|
IOMODE =42:2, 13238000
|
|
IOTRANSLATE =42:1, 13239000
|
|
IOFRAMESIZE =41:1, 13240000
|
|
IOMEMPROTECT =40:1, 13241000
|
|
IOBACKWARD =39:1, 13242000
|
|
IOTESTBIT =38:1, 13243000
|
|
IOTRANSFERTAG =37:1, 13244000
|
|
IOFORCETAG =36:1, 13245000
|
|
IOUNITFIELD =35:36; 13246000
|
|
FIELD ADDRESS =19:20, 13247000
|
|
USTATUSVECTORNO=11:3, COMMENT EACH VECTOR NO REPRESENTS 13248000
|
|
READY STATUS OF 32 UNITS; 13249000
|
|
MPXDESIGNATOR = 4:4, COMMENT MPXA(=1), MPXB(=2), ETC; 13250000
|
|
MPXINDICATOR = 0:1, COMMENT 0 MEANS INTERROGATE ALL MPXS 13251000
|
|
1 MEANS INTERROGATE THE ONE 13252000
|
|
SPECIFIED BY MPXDESIGNATOR; 13253000
|
|
UNITNO =16:8, COMMENT NOTE-UNITNO WITH UNIT STATUS 13254000
|
|
VECTOR NO PRECEEDING MAKES UNITNOS 13255000
|
|
FROM 0 TO 255; 13256000
|
|
BUFFERLENGTH =39:20, COMMENT BUFFER LENGTH IN AREA DESC.; 13257000
|
|
SIGNBITF=46:1, 13260000
|
|
DIV4E = 47:46,% 13260100
|
|
MOD4F = 1:2,% 13260200
|
|
DIV2F = 47:47,% 13260300
|
|
MOD2F = 0:1,% 13260400
|
|
FIRSTCHRF =47:6, COMMENT FIELD FOR FIRST CHARACTER; 13261000
|
|
CONTROLFIELD =8:4; COMMENT CONTROL FIELD FOR VARIOUS 13262000
|
|
SCAN IN FUNCTIONS; 13263000
|
|
DEFINE IOCBSIZE =6#, % SIZE OF IOCB 13263100
|
|
% INDICES OF ITEMS IN IOCB 13263200
|
|
USERINDEX =0#, 13263300
|
|
MISCINDEX =1#, 13263400
|
|
AREADESCINDEX =2#, 13263500
|
|
EVENTINDEX =3#; 13263600
|
|
COMMENT FIELDS FOR USER WORD OF IOCB; 13264000
|
|
FIELD IDNO =47:10, COMMENT USER IDENTIFICATION NO.; 13265000
|
|
PRIORITYF =37:5 , COMMENT CONTAINS PRIORITY; 13266000
|
|
UNITNOF =32:9 , COMMENT CONTAINS LOGICAL UNIT NO.; 13267000
|
|
IOERRORRECOVERY= 23:1, % I/O RECOVEIQ09N PROCESS FOR THIS I/O13268000
|
|
USERIOFIELD =22:10, % FIELD FOR USER I/O ACTION 13269000
|
|
USERPARITYBIT =22:1, % PARITY ACTION TO BE TAKEN BY USER 13269200
|
|
USEREOFORTBIT =21:1, % END OF FILE OR END OF TAPE ACTION 13269400
|
|
USERIOFINISH =20:1, % USER I/O FINISHED 13269600
|
|
USERSPECIALID =19:1 , % SPECIAL ACTION TO BE TAKEN 13269800
|
|
USERIOBIT =18:1; % USER I/O 13270000
|
|
COMMENT FIELDS FOR MISC WORD OF IOCB; 13270100
|
|
FIELD 13270200
|
|
WORDCOUNTF =47:20, % WORD COUNT FIELD 13270300
|
|
COMMENT RDCHRCNT =27:3, CHARACTER COUNT FIELD; 13270400
|
|
COMMENT RDUNITNO =24:8, UNIT NUMBER; 13270500
|
|
IOERRORMASKFIELD =16:17; % FOR MASKING I/O ERRORS IN 13270600
|
|
% IOFINISH 13270700
|
|
COMMENT AFTER SUCCESSFUL IOFIMISH , IOERRORMASKFIELD CONTAINS 13270800
|
|
ERROR FIELD (AFTER MASKING) OF RESULT DESCRIPTOR; 13270850
|
|
COMMENT ADDITIONAL FIELDS HAVE BEEN ADDED TO USERL. PRESENT REFERENCES13270880
|
|
TO USERL WILL NOT BE AFFECTED,FOR USING ADDITIONAL FIELDS 13270900
|
|
NEW LAYOUT MAY BE NECESSARY; 13270950
|
|
LAYOUT IOPATHWORD(UNITNO,MPXDESIGNATOR,MPXINDICATOR), 13271000
|
|
COMMENT WORD USED FOR INTERROGATING I/O PATH; 13272000
|
|
USTATUSWORD(USTATUSVECTORNO, 8:4~1,MPXDESIGNATOR,MPXINDICATOR),13273000
|
|
COMMENT WORD USED FOR INTERROGATING PERIPHERAL 13274000
|
|
STATUS; 13275000
|
|
UNITINITIALIZE (UNITTYPE, UNITMPXD, UNITMPXI), 13276000
|
|
COMMENT TO INITIALIZE UNIT TABLE; 13277000
|
|
BINEL (47:8), 13278000
|
|
TYPEINTERROGATE(UNITNO, 13279000
|
|
CONTROLFIELD ~6, 13280000
|
|
MPXDESIGNATOR, 13281000
|
|
MPXINDICATOR), 13282000
|
|
COMMENT TO INTERROGATE TYPE (AND PATH) AT 13283000
|
|
INITIALIZE TIME.; 13284000
|
|
BITL( BIT47=47:1, BIT46=46:1, BIT45=45:1, BIT44=44:1, 13285000
|
|
BIT43=43:1, BIT42=42:1, BIT41=41:1, BIT40=40:1, 13286000
|
|
BIT39=39:1, BIT38=38:1, BIT37=37:1, BIT36=36:1, 13287000
|
|
BIT35=35:1, BIT34=34:1, BIT33=33:1, BIT32=32:1, 13288000
|
|
BIT31=31:1, BIT30=30:1, BIT29=29:1, BIT28=28:1, 13289000
|
|
BIT27=27:1, BIT26=26:1, BIT25=25:1, BIT24=24:1, 13290000
|
|
BIT23=23:1, BIT22=22:1, BIT21=21:1, BIT20=20:1, 13291000
|
|
BIT19=19:1, BIT18=18:1, BIT17=17:1, BIT16=16:1, 13292000
|
|
BIT15=15:1, BIT14=14:1, BIT13=13:1, BIT12=12:1, 13293000
|
|
BIT11=11:1, BIT10=10:1, BIT9 = 9:1, BIT8 = 8:1, 13294000
|
|
BIT7 = 7:1, BIT6 = 6:1, BIT5 = 5:1, BIT4 = 4:1, 13295000
|
|
BIT3 = 3:1, BIT2 = 2:1, BIT1 = 1:1, BIT0 = 0:1), 13296000
|
|
DIVMOML(PCBITSF~0,ADDRESSF~0), 13297010
|
|
IOL(BL=39:20,FL=19:20), 13297020
|
|
IOLINKL(NUMRECSLNK=47:16,BCKWRDLNK=31:16,FRWRDLNK=15:16), 13297030
|
|
SCANINWORD(CONTROLFIELD,MPXDESIGNATOR,MPXINDICATOR), 13298000
|
|
COMMENT CONTROL WORD USED FOR VARIOUS SCAN IN FUNCTIONS; 13299000
|
|
SCANOUTWORD(CONTROLFIELD,MPXDESIGNATOR,MPXINDICATOR), 13299100
|
|
COMMENT SCAN OUT CONTROL WORD; 13299200
|
|
RDLBL(PNO=19:8,PTP=11:4,UNO=7:8), % READALABL LAYOUT13300000
|
|
IOCWDISKL(REPORTF=35:4,DECADDRF=27:28), 13301000
|
|
COMMENT UNIT FIELD OF IOCW FOR DISK; 13302000
|
|
IOCWPRINTERL(SKIPF=35:4,SPACEF=31:2), COMMENT FOR MAKING 13303000
|
|
UNIT FIELD OF IOCW FOR PRINTER; 13304000
|
|
IOCWTAPEL(FUNCTIONF=35:2,BPISPECF=33:1,BPIF=32:2, 13305000
|
|
PARITYF=30:1,CRCSPECF=29:1,CRCTRACK=28:3), 13306000
|
|
COMMENT FOR MAKING UNIT FIELD OF IOCW FOR TAPE; 13307000
|
|
COMMENT TO MAKE UP A DESCRIPTOR; 13308000
|
|
IOCWL(IOSTANDARDFIELD,IOUNITFIELD), COMMENT TO FORM IOCW; 13309000
|
|
IOCWDETAILL(IOATTENTION,IOREADBIT,IOMODE,IOUNITFIELD), 13310000
|
|
COMMENT FOR SETTING UP IOCW FOR DIFF. RECORDING MODE;13311000
|
|
IOCWSPACEL(IOSTANDARDFIELD~@600,39:1,23:16) 13312000
|
|
, COMMENT TO MAKE UP TAPE SPACE ; 13313000
|
|
TAPEIOCWL(IOREADBIT,IOTRANSLATE,IOFRAMESIZE,33:3,PARITYF), 13313010
|
|
PRINTIOCWL(IOREADBIT~0,IOTRANSLATE,IOFRAMESIZE,SKIPF,SPACEF), 13313020
|
|
PPRTIOCWL(IOREADBIT,IOTRANSLATE,IOFRAMESIZE,IOMEMPROTECT, 13313030
|
|
FUNCTIONF), 13313040
|
|
MISCL (SIGNBITF~1,IOERRORMASKFIELD), 13314000
|
|
IOERRORMASKL(BUFFERLENGTH,ADDRESS), 13315000
|
|
COMMENT TO MAKE UP IOERRORMASK FOR WAITIO; 13316000
|
|
USERL(IDNO,PRIORITYF,UNITNOF,IOERRORRECOVERY); 13317000
|
|
COMMENT TO FORM USER WORD FOR IOCB; 13318000
|
|
REAL 13319000
|
|
MAXVECTORNO; COMMENT MAXIMUM VECTOR NO; 13321000
|
|
DEFINE TIMEOFDAYWORD=96 #; COMMENT CONTROL WORD FOR SETTING & 13324000
|
|
READING TIME OF DAY; 13325000
|
|
DEFINE BASICCLOCKUNIT = 2.4 # % BASIC UNIT TOD CLOCK 13326000
|
|
, ONESECOND = 416667 # % NUMBER OF BASIC UNITS13327000
|
|
% IN ONESECOND(ACTUALLY13328000
|
|
% IN 1.0000008 SECONDS)13329000
|
|
13330000
|
|
, REARRANGETIME = 416667 # % NUMBER OF BASIC UNITS13331000
|
|
% BETWEEN RE-ARRANGING 13332000
|
|
% READYQ 13333000
|
|
; 13334000
|
|
DEFINE COMMENT DEFINES FOR UNIT TYPES-(REF FIELD UNITTYPE); 13335000
|
|
NOUNIT =0#, 13336000
|
|
DISKFILE =1#, 13337000
|
|
CONN = 2#, 13338000
|
|
SPO = CONN#,% SPO IS HOLD-OVER FROM B5500. 13339000
|
|
PAPERTAPERDR =4#, COMMENT PAPER TAPE READER; 13340000
|
|
PAPERTAPEPNCH =5#, COMMENT PAPER TAPE PUNCH; 13341000
|
|
BUFFPRINTER =6#, COMMENT LINE PRINTER I BUFFERED; 13342000
|
|
UNBUFFPRINTER =7#, COMMENT LINE PRINTER IIUNBUFFERED; 13343000
|
|
CARDREADER =9#, 13344000
|
|
CARDPUNCH1 =10#, COMMENT CARD PUNCH I; 13345000
|
|
CARDPUNCH2 =11#, COMMENT CARD PUNCH II ; 13346000
|
|
MAGTAPE1 =13#, COMMENT MAGNETIC TAPE I(7 TRACK); 13347000
|
|
MAGTAPE2 =14#, COMMENT MAGNETIC TAPE II (9 TRACK); 13348000
|
|
MAGTAPE3 = 15#, COMMENT MAGNETIC TAPE III (9 TRACK); 13349000
|
|
MAGTAPCLUSTER1= 29#,% MAGNETIC TAPE CLUSTER I (7 TRACK) 13350000
|
|
MAGTAPCLUSTER2= 30#,% MAGNETIC TAPE CLUSTER II (9 TRACK) 13351000
|
|
MAGTAPCLUSTER3= 31#,% MAGNETIC TAPE CLUSTER III (9 TRACK) 13352000
|
|
MAGTAPE(TYPE) = (TYPE } 13 AND TYPE { 15 OR TYPE } 29) #; 13353000
|
|
DEFINE MAXUNITTYPE = 31 #; 13353100
|
|
13354000
|
|
DEFINE% FOR KEYIN AND ASSOCIATED PROCEDURES 13355000
|
|
POINTTOMSGAREA= POINTER(MSGAREA[1],BYTESZ)#, 13356000
|
|
MCP = 0#, 13357000
|
|
KEYINQSZ = 2#, 13358000
|
|
INVKBDSZ = 2#, 13359000
|
|
JFACTOR = INVKBDSZ+3#, 13360000
|
|
TI(X) = REAL(POINTER(TYPEINDX[X], *), 1) #, 13361000
|
|
UNITBL(U1,U2) = REAL(POINTER(MNEMTOUNIT[U1+U2-1],*),1)#, 13362000
|
|
CLEAR(P,B) = REPLACE P BY B" " FOR B WORDS#,% 13363000
|
|
ETX = 48"03"#,% 13364000
|
|
BLANK = 8" "#,% 13366000
|
|
CLEARSCREEN = 48"0C0000" #, 13367000
|
|
LINEERASE = 48"00110000"#,% 13368000
|
|
REVERSELF = 48"00130000"#,% 13369000
|
|
HOME = 48"3C00"#,% 13370000
|
|
CARRETURN = 48"0D0000"#,% 13371000
|
|
LINEFEED = 48"2500"#,% 13372000
|
|
COLON = 8":"#,% 13373000
|
|
EQUAAL = 8"="#,% 13374000
|
|
AT = 8"@"#,% 13375000
|
|
SLASH = 8"/"#,% 13376000
|
|
PERIOD = 8"."#,% 13377000
|
|
COMMA = 8","#,% 13377100
|
|
QUESTION = 48"6F"#,% 13378000
|
|
BACKSPACE = 48"1600"#,% 13379000
|
|
NUL = 48"00"#,% 13379900
|
|
ZERO = 8"0"#,% 13380100
|
|
DISPLAYONMIX = DISPLAYONKEYER#, 13381000
|
|
DISPLAYONPER = DISPLAYONKEYER#, 13382000
|
|
DISPLAYONKEYER= SCREEN[2]#, 13383000
|
|
DISPLAYONCON = DISPLAYONKEYER#, 13384000
|
|
NOOFSCREENSRQD= 4#, 13385000
|
|
MNEMLIM = 14#, 13386000
|
|
MNEMSZ = 2#, 13387000
|
|
BUFFS = 6#, 13388000
|
|
CHRS = 6#, 13389000
|
|
BYTESZ = 8#, 13390000
|
|
RUSER(U) = 0&USERL(,,U,)#, 13391000
|
|
RIOCW = 0&IOCWL(@440)#,% 13392000
|
|
RERRMSK = @116001#, 13393000
|
|
WIOCW = 0%IOCWL(#40)#,% 13394000
|
|
WUSER(U) = 0%USERL(*,*,U,*)#, 13395000
|
|
WERRMSK = @110001#, 13396000
|
|
RDTIMEOUT = RDBLANKTAPE#, 13397000
|
|
DATEIS = 8"DATE IS "#,% 13398100
|
|
TIMEIS = 8"TIME IS "#,% 13398200
|
|
MAXMSGSZ = 1000#, 13399000
|
|
LINESZ = 40#,% 13400000
|
|
SCREENSZ = 960#,% 13400100
|
|
MAXPGS = 2#,% 13400200
|
|
MAXLNS = 20#,% 13401000
|
|
DICASZ = 3#, 13402000
|
|
MAXDICA = 24#, 13403000
|
|
DICBSZ = 2#, 13404000
|
|
MAXDICB = 102#, 13405000
|
|
MIN(A,B) = (IF A{B THEN A ELSE B)#, 13406000
|
|
INPUT(IOCW) = BOOLEAN(IOCW.IOREADBIT)#, 13407000
|
|
TIMEDOUT = BOOLEAN(RSDS.RDTIMEOUT)#,% 13407100
|
|
INTEVNTARY(S,D,L) = 13408000
|
|
REPLACE POINTER(D) BY POINTER(S) FOR 2|(L-1) OVERWRITE#, 13409000
|
|
USINGSTACK(S) = NOT STACKVECTOR[S] IS 0&DATADESCRIPTOR()#,% 13410000
|
|
MCPNOTUSINGSTACK(S)=STACK[S,FIRSTMSCWPLACE].STKMRF!0#,% 13410100
|
|
D2STACKIS(S) = STACK[S,PROCESSNATUREPLACE].PROCESSHISTORYF!0#,13410200
|
|
HAVENTSUSPENDED(S)=WORDSTACK[S,REPLYEVENTPLACE].TAG=0 OR% 13410300
|
|
BOOLEAN(M[STACK[S,REPLYEVENTPLACE]])#, 13410302
|
|
JOBREF(S) = WORDSTACK[S,JOBIDPLACE]#,% 13410400
|
|
KFPSCRATCHWORDSZ= 1#,% 13428000
|
|
LEAP(Y) = Y.MOD4F=0 AND(Y MOD 100!0 OR(Y MOD 400=0 AND 13428100
|
|
Y MOD 4000!0))#, 13428102
|
|
DAY = 8"DAY, "#,% 13428200
|
|
JULDATESZ = 7#,% 13428300
|
|
13428400
|
|
STARTYEARPLACE= 0#,% 13428500
|
|
STARTDAYPLACE = 4#,% 13428600
|
|
YEARSZ = 4#,% 13428700
|
|
DAYSZ = 3#,% 13428800
|
|
BASEYEAR = 1700#,% 13428900
|
|
PERCENTAGE(X) = X DIV 10 FOR 2 DIGITS,PERIOD,% 13431000
|
|
X MOD 10 FOR 1 DIGITS#,% 13432000
|
|
TIMECORRFACT = 2400#,% ::= (2.4|10@6)/10@3 GIVING SECONDS 13433000
|
|
DIV2(X) = REAL(BOOLEAN(X)AND NOT BOOLEAN(3))#,% 13433100
|
|
DEFINEND=0#; 13434000
|
|
DEFINE 13435000
|
|
% FOR READALABEL AND PURGIT 13436000
|
|
USAH = 0&USERL(,,U,)#, 13437000
|
|
SCHANNEL = UNT.UNITTYPE=13#, 13438000
|
|
NCHANNEL = NOT SCHANNEL#, 13439000
|
|
ERAH(M,S) = 0&IOERRORMASKL(M,S)#, 13440000
|
|
UNEXP = 3"377635"#, 13441000
|
|
TAPETEST = 4#, 13442000
|
|
TAPEPARITY=BOOLEAN(RSLT.RDMEMACCESS)AND RSLT.RDDENSITY=3#,13444000
|
|
GETUNT = WHILE BOOLEAN(UNT~READLOCK(1,UNIT[U])) DO#, 13445000
|
|
PUTUNT(A,B,C,D)=GETUNT;UNIT[U]~UNT&UNITL(A,B,C,D)#, 13446000
|
|
GETOLDS = OLDSTATUS~OLDSTATUSWORD[VECTORNO]; 13447000
|
|
% KLUDGE 13448000
|
|
OLDSTATUSWORD[VECTORNO]~OLDSTATUS AND NOT 13449000
|
|
BOOLEAN(BITWORD)#, 13450000
|
|
RD432 = RDBIT432#, 13451000
|
|
PHDR1 = PVOL1#, 13452000
|
|
PHDR2 = PVOL1#, 13453000
|
|
RCRDFRMT = IF TAPETYPE=1 THEN 13454000
|
|
IF URF=6"F"THEN 0 ELSE IF URF=6"D"THEN 1 13455000
|
|
ELSE IF URF=6"V"THEN 2 ELSE 13456000
|
|
IF URF=6"I"THEN 4 ELSE IF URF=6"L"THEN 5 13457000
|
|
ELSE IF URF=6"Z"THEN 6 ELSE 3 13457050
|
|
ELSE 13458000
|
|
IF URF=8"F"THEN 0 ELSE IF URF=8"D"THEN 1 13459000
|
|
ELSE IF URF=8"V"THEN 2 ELSE 13460000
|
|
IF URF=8"I"THEN 4 ELSE IF URF=8"L"THEN 5 13461000
|
|
ELSE IF URF=8"Z"THEN 6 ELSE 3#, 13461050
|
|
WERRORS = BOOLEAN(@260201)#; 13462000
|
|
COMMENT DECLARATIONS FOR QUEUES OF I/O REQUESTS WAITING FOR UNIT 13463000
|
|
ONE QUEUE FOR EACH UNIT; 13464000
|
|
ARRAY DUMMYIOQUE[*]; COMMENT FOR MAKING ENTRY IN IOQUE; 13465000
|
|
DEFINE FIRSTIOU=FIRSTIO[INDEX]#, COMMENT INDEX IS QUEUE HEAD INDEX; 13466000
|
|
LASTIOU=LASTIO[INDEX]#; 13467000
|
|
QUEUE ARRAY IOQUE:FIRSTIO[*](USER,MISC,AREADESC,EVNT: 13468000
|
|
PRVSIO,NEXTIO); 13469000
|
|
VALUE USER,MISC,AREADESC, 13470000
|
|
PRVSIO,NEXTIO; 13471000
|
|
REAL USER,MISC; 13472000
|
|
EVENT EVNT; 13473000
|
|
REFERENCE PRVSIO,NEXTIO,AREADESC; 13474000
|
|
USING 13475000
|
|
ALLOCATE IS REFERENCE(DUMMYIOQUE & 13476000
|
|
ARRAYDESCL(3, 6, GETAREA(6))): 13477000
|
|
NEXT IS NEXTIO @ FIRSTIO[INDEX]: 13478000
|
|
TO INSERT, COMMENT QUEUE IS ARRANGED ON A FIRST COME FIRST 13479000
|
|
BASIS; 13480000
|
|
BEGIN 13481000
|
|
IF LASTIOU=NULL THEN COMMENT QUEUE IS EMPTY; 13482000
|
|
BEGIN 13483000
|
|
LASTIOU~FIRSTIOU~ENTRY; COMMENT ENTRY IS THE ADDRESS OF 13484000
|
|
DESC. POINTING TO DATA OF NEW 13485000
|
|
ENTRY; 13486000
|
|
NEXTIO@(FIRSTIOU)~PRVSIO @(FIRSTIOU)~ NULL; 13487000
|
|
END ELSE 13488000
|
|
BEGIN COMMENT PUT ENTRY AT TAIL OF QUEUE; 13489000
|
|
PRVSIO @(ENTRY)~ LASTIOU; 13490000
|
|
NEXTIO @(LASTIOU)~ENTRY; 13491000
|
|
LASTIOU ~ENTRY; 13492000
|
|
NEXTIO @(ENTRY)~NULL; 13493000
|
|
END; 13494000
|
|
END INSERTION OF ENTRY IN QUEUE: 13495000
|
|
TO DELINK, 13496000
|
|
BEGIN 13497000
|
|
IF ENTRY=FIRSTIOU THEN COMMENT ENTRY IS THE TOP OF QUEUE; 13498000
|
|
IF FIRSTIOU=LASTIOU THEN COMMENT ONLY ONE ENTRY IN QUEUE; 13499000
|
|
FIRSTIOU ~ LASTIOU ~NULL ELSE 13500000
|
|
BEGIN COMMENT REMOVES ENTRY FROM TOP; 13501000
|
|
FIRSTIOU ~NEXTIO @ FIRSTIOU; 13502000
|
|
PRVSIO @(FIRSTIOU) ~ NULL; 13503000
|
|
END ELSE 13504000
|
|
IF ENTRY=LASTIOU THEN COMMENT REMOVES LAST ENTRY OF QUEUE; 13505000
|
|
BEGIN 13506000
|
|
LASTIOU~PRVSIO @ ENTRY; 13507000
|
|
NEXTIO @(LASTIOU)~ NULL; 13508000
|
|
END ELSE COMMENT REMOVES ANY OTHER ENTRY; 13509000
|
|
BEGIN 13510000
|
|
COMMENT FIX NEXTIO POINTER IN THE UPPER LINK OF ENTRY; 13511000
|
|
NEXTIO @(PRVSIO @ ENTRY)~ NEXTIO @ ENTRY; 13512000
|
|
COMMENT FIX PRVSIO POINTER IN THE LOWER LINK OF ENTRY; 13513000
|
|
PRVSIO @(NEXTIO @ ENTRY)~ PRVSIO @ ENTRY; 13514000
|
|
END; 13515000
|
|
END DELINKING OF ENTRY FROM QUEUE; 13516000
|
|
COMMENT DECLARATIONS FOR QUEUES OF UNITS WAITING FOR CHANNEL. 13517000
|
|
ONE QUEUE FOR EACH MPX; 13518000
|
|
ARRAY DUMMYWAITCHANNELQUE[*]; COMMENT FOR MAKING ENTRY IN 13519000
|
|
WAITCHANNELQUE; 13520000
|
|
REFERENCE ARRAY LASTUNIT[*]; COMMENT POINTS TO LAST ENTRY IN 13521000
|
|
WAITCHANNELQUE; 13522000
|
|
DEFINE FIRSTUNITI=FIRSTUNIT[INDEX]#, COMMENT INDEX-QUEUE HEAD INDEX; 13523000
|
|
LASTUNITI=LASTUNIT[INDEX]#; 13524000
|
|
QUEUE ARRAY WAITCHANNELQUE:FIRSTUNIT[1](UNTWORD:PRVSUNIT,NEXTUNIT); 13525000
|
|
VALUE UNTWORD,PRVSUNIT,NEXTUNIT; 13526000
|
|
REAL UNTWORD; 13527000
|
|
REFERENCE PRVSUNIT,NEXTUNIT; 13528000
|
|
USING 13529000
|
|
ALLOCATE IS REFERENCE(DUMMYWAITCHANNELQUE & 13530000
|
|
ARRAYDESCL(,3,GETAREA(3))): 13531000
|
|
NEXT IS NEXTUNIT @ FIRSTUNIT[INDEX]: 13532000
|
|
TO INSERT, COMMENT QUEUE IS ARRANGED ON A FIRST COME FIRST 13533000
|
|
BASIS; 13534000
|
|
BEGIN 13535000
|
|
IF LASTUNITI=NULL THEN COMMENT QUEUE IS EMPTY; 13536000
|
|
BEGIN 13537000
|
|
LASTUNITI~FIRSTUNITI~ENTRY; COMMENT ENTRY IS THE ADDRESS 13538000
|
|
OF DESC. POINTING TO DATA OF 13539000
|
|
NEW ENTRY; 13540000
|
|
NEXTUNIT @(FIRSTUNITI)~PRVSUNIT @(FIRSTUNITI) ~NULL; 13541000
|
|
END ELSE 13542000
|
|
BEGIN COMMENT PUT ENTRY AT TAIL OF QUEUE; 13543000
|
|
PRVSUNIT @(ENTRY)~ LASTUNITI; 13544000
|
|
NEXTUNIT @(LASTUNITI) ~ ENTRY; 13545000
|
|
LASTUNITI ~ ENTRY; 13546000
|
|
NEXTUNIT @ (ENTRY) ~NULL; 13547000
|
|
END; 13548000
|
|
END INSERTION OF ENTRY IN WAITCHANNELQUE: 13549000
|
|
TO DELINK, 13550000
|
|
BEGIN 13551000
|
|
IF ENTRY=FIRSTUNITI THEN COMMENT ENTRY IS THE TOP OF QUEUE; 13552000
|
|
IF FIRSTUNITI=LASTUNITI THEN COMMENT ONLY ONE ENTRY IN QUEUE;13553000
|
|
FIRSTUNITI~LASTUNITI~NULL ELSE 13554000
|
|
BEGIN COMMENT REMOVE ENTRY FROM TOP; 13555000
|
|
FIRSTUNITI ~ NEXTUNIT @ FIRSTUNITI; 13556000
|
|
PRVSUNIT @ (FIRSTUNITI) ~ NULL; 13557000
|
|
END ELSE 13558000
|
|
IF ENTRY=LASTUNITI THEN COMMENT REMOVE LAST ENTRY OF QUEUE; 13559000
|
|
BEGIN 13560000
|
|
LASTUNITI ~ PRVSUNIT @ ENTRY; 13561000
|
|
NEXTUNIT @(LASTUNITI)~NULL; 13562000
|
|
END ELSE COMMENT REMOVES ANY OTHER ENTRY; 13563000
|
|
BEGIN 13564000
|
|
COMMENT FIX NEXTUNIT POINTER IN THE UPPER LINK OF ENTRY; 13565000
|
|
NEXTUNIT @(PRVSUNIT @ ENTRY) ~ NEXTUNIT @ ENTRY; 13566000
|
|
COMMENT FIX PRVSUNIT POINTER IN THE LOWER LINK OF ENTRY; 13567000
|
|
PRVSUNIT @(NEXTUNIT @ ENTRY) ~ PRVSUNIT @ ENTRY; 13568000
|
|
END; 13569000
|
|
FORGETAREA(3,WORD(ENTRY).ADDRESS); 13570000
|
|
END DELINKING OF ENTRY FROM QUEUE; 13571000
|
|
13572000
|
|
EVENT TIMERINTERRUPTEVENT, 13573000
|
|
STATUSEVENT, COMMENT EVENT CAUSED AFTER EACH STATUS RUN; 13574000
|
|
ERRORFLAGEVENT; 13575000
|
|
COMMENT GLOBALS FOR DISK MANAGEMENT; 14000000
|
|
REAL MCPTOP; COMMENT THE HIGHEST DISKADDRESS OF THE MCP CODE FILE; 14000100
|
|
DEFINE MCPINFOSIZE = 60 #; COMMENT SIZE IN WORDS OF DISK INFO; 14001000
|
|
ARRAY MCPINFO[MCPINFOSIZE]; COMMENT WE WILL STUFF THE DISK ADDRESS OF 14002000
|
|
THE INFO SEGMETNS IN THE DESCRIPTOR SO THAT14002010
|
|
PRESENCEBIT WILL READ IT IN FOR US IF 14002020
|
|
IT IS NOT PRESENT; 14002030
|
|
REAL NEXTADDR, LASTADDR, NEXTROW, FIRSTADDR, MAXADDR, 14002040
|
|
DIRECTORYCOMPLEMENTREPORTBACK; 14002050
|
|
BOOLEAN PERIPHERALINVALIDADDRESS = DIRECTORYCOMPLEMENTREPORTBACK; 14002060
|
|
COMMENT THE ABOVE ARE USED IN BUILDING THE DISK TABLES AND CAN BE 14003000
|
|
RE-USED ONCE PERIPHERALINITIALIZE HAS EXITED; 14004000
|
|
BOOLEAN PROCEDURE GIVEBACKDISK(DKADDR, SIZE); 14005000
|
|
VALUE DKADDR, SIZE; 14006000
|
|
REAL DKADDR, SIZE; FORWARD; 14007000
|
|
ARRAY DISKMAPARRAY[*,*]; %USED FOR DISK TABLE BUILDING 14008000
|
|
DEFINE LLLROWS = 10 #, %THE NUMBER OF ROWS FOR THE ABOVE 14009000
|
|
LLLCHUNK = 100 #; %THE ROW SIZE OF THE ABOVE; 14010000
|
|
COMMENT THE CELL FOR DISKMAPARRAY IS AVAILABLE AFTER DISKMAPING; 14011000
|
|
COMMENT DECLARATIONS FOR USER DISK MANAGEMENT; 14012000
|
|
COMMENT FIELD DEFINES FOR USERDISK TABLE; 14013000
|
|
FIELD 14014000
|
|
DISKADDRF=19:20, COMMENT DISK ADDRESS; 14020000
|
|
EUNOF = 27:8; COMMENT UNIT NUMBER OF EU; 14021000
|
|
LAYOUT DISKADDRESSL(EUNOF, DISKADDRF); 14025000
|
|
LAYOUT FIRSTMAPWORD ( 14026000
|
|
MAPUNITNOF = 47:8 14027000
|
|
, MAPADDRESSF = 39:20 14028000
|
|
, ADDRESSF 14029000
|
|
) 14030000
|
|
, FIRSTMAPWORDRIME( 14031000
|
|
MAPAREAF = 47:28 14032000
|
|
, ADDRESSF 14033000
|
|
) 14034000
|
|
; 14035000
|
|
SAVE ARRAY NEXTEU[3]; COMMENT ONE WORD FOR EACH DISK DENSITY; 14035100
|
|
ARRAY USERDISKLIST[*,*], % ROW SIZE MUST BE EVEN 14036000
|
|
USERDISKDOPEVECTOR = USERDISKLIST [*], %DOPE VECTOR OF ABOVE 14036500
|
|
GETUSERDISKHEAD[*], % SIZE IS NUMBER OF ROWS IN 14037000
|
|
FORGETUSERDISKHEAD[*]; % USERDISKLIST 14038000
|
|
INTERLOCK USERDISKLOCK; 14039000
|
|
DEFINE DISKRETURNLOCK = HEADERLOCKS[1] #, 14039100
|
|
EUFACTOR = 2 #, 14039150
|
|
USERDISKLISTROWSIZE = 30 #; 14039160
|
|
LAYOUT USERDISKHEADWORD( 14041000
|
|
USERDISKINDEXF = 47:20 14042000
|
|
, EUNOF 14043000
|
|
, ADDRESSF 14044000
|
|
) 14045000
|
|
, DISKAREAWORDL( 14046000
|
|
DISKAREASIZEF = 47:20 14047000
|
|
, DISKADDRESSF = 27:28 14048000
|
|
) 14049000
|
|
; 14050000
|
|
VALUE ARRAY DISKFILE1C5 := ( % DISK TYPE MOD SWITCH 14051000
|
|
0 % 1C-5 0 0 14052000
|
|
, 25200 % 1C-5 0 1 14053000
|
|
, 50400 % 1C-5 0 2 14054000
|
|
, 75600 % 1C-5 0 3 14055000
|
|
, 100800 % 1C-5 1 0 14056000
|
|
, 126000 % 1C-5 1 1 14057000
|
|
, 151200 % 1C-5 1 2 14058000
|
|
, 176400 % 1C-5 1 3 14059000
|
|
, 201600 % 1C-5 2 0 14060000
|
|
, 226800 % 1C-5 2 1 14061000
|
|
, 252000 % 1C-5 2 2 14062000
|
|
, 277200 % 1C-5 2 3 14063000
|
|
, 302400 % 1C-5 3 0 14064000
|
|
, 327600 % 1C-5 3 1 14065000
|
|
, 352800 % 1C-5 3 2 14066000
|
|
, 378000 % 1C-5 3 3 14067000
|
|
, 403200 % 1C-5 4 0 14068000
|
|
, 428400 % 1C-5 4 1 14069000
|
|
, 453600 % 1C-5 4 2 14070000
|
|
, 478800 % 1C-5 4 3 14071000
|
|
, 503000 % 1C-5 5 0 14072000
|
|
), 14073000
|
|
DISKFILE1AX := ( % DISK TYPE MOD SWITCH 14074000
|
|
0 % 1A-X 0 0 14075000
|
|
, 12500 % 1A-X 0 1 14076000
|
|
, 25000 % 1A-X 0 2 14077000
|
|
, 37500 % 1A-X 0 3 14078000
|
|
, 50000 % 1A-X 1 0 14079000
|
|
, 62500 % 1A-X 1 1 14080000
|
|
, 75000 % 1A-X 1 2 14081000
|
|
, 87500 % 1A-X 1 3 14082000
|
|
, 100000 % 1A-X 2 0 14083000
|
|
, 112500 % 1A-X 2 1 14084000
|
|
, 125000 % 1A-X 2 2 14085000
|
|
, 137500 % 1A-X 2 3 14086000
|
|
, 150000 % 1A-X 3 0 14087000
|
|
, 162500 % 1A-X 3 1 14088000
|
|
, 175000 % 1A-X 3 2 14089000
|
|
, 187500 % 1A-X 3 3 14090000
|
|
, 200000 % 1A-X 4 0 14091000
|
|
, 212500 % 1A-X 4 1 14092000
|
|
, 225000 % 1A-X 4 2 14093000
|
|
, 237500 % 1A-X 4 3 14094000
|
|
, 250000 % 1A-X 5 0 14095000
|
|
), 14096000
|
|
DISKFILESIM := ( % DISK TYPE MOD SWITCH 14097000
|
|
0 % SI-M 0 0 14098000
|
|
,0,0,0 COMMENT FILLER TO MAKE IT WORK LIKE THE REST OF THEM; 14098100
|
|
, 1250 % SI-M 0 1 14099000
|
|
), 14100000
|
|
DISKFILE1C3 := ( % DISK TYPE MOD SWITCH 14101000
|
|
0 % 1C-3 0 0 14102000
|
|
, 27600 % 1C-3 0 1 14103000
|
|
, 55600 % 1C-3 0 2 14104000
|
|
, 83400 % 1C-3 0 3 14105000
|
|
, 111200 % 1C-3 1 0 14106000
|
|
, 139000 % 1C-3 1 1 14107000
|
|
, 166800 % 1C-3 1 2 14108000
|
|
, 194600 % 1C-3 1 3 14109000
|
|
, 222400 % 1C-3 2 0 14110000
|
|
, 250200 % 1C-3 2 1 14111000
|
|
, 278000 % 1C-3 2 2 14112000
|
|
, 305800 % 1C-3 2 3 14113000
|
|
, 333600 % 1C-3 3 0 14114000
|
|
, 361400 % 1C-3 3 1 14115000
|
|
, 389200 % 1C-3 3 2 14116000
|
|
, 417000 % 1C-3 3 3 14117000
|
|
, 444800 % 1C-3 4 0 14118000
|
|
, 472600 % 1C-3 4 1 14119000
|
|
, 500400 % 1C-3 4 2 14120000
|
|
, 528200 % 1C-3 4 3 14121000
|
|
, 556000 % 1C-3 5 0 14122000
|
|
), 14123000
|
|
DISKFILE1C4 := ( % DISK TYPE MOD SWITCH 14124000
|
|
0 % 1C-4 0 0 14125000
|
|
, 31800 % 1C-4 0 1 14126000
|
|
, 63600 % 1C-4 0 2 14127000
|
|
, 95400 % 1C-4 0 3 14128000
|
|
, 127200 % 1C-4 1 0 14129000
|
|
, 159000 % 1C-4 1 1 14130000
|
|
, 190800 % 1C-4 1 2 14131000
|
|
, 222600 % 1C-4 1 3 14132000
|
|
, 254400 % 1C-4 2 0 14133000
|
|
, 286200 % 1C-4 2 1 14134000
|
|
, 318000 % 1C-4 2 2 14135000
|
|
, 349800 % 1C-4 2 3 14136000
|
|
, 381600 % 1C-4 3 0 14137000
|
|
, 413400 % 1C-4 3 1 14138000
|
|
, 445200 % 1C-4 3 2 14139000
|
|
, 477000 % 1C-4 3 3 14140000
|
|
, 508800 % 1C-4 4 0 14141000
|
|
, 540600 % 1C-4 4 1 14142000
|
|
, 572400 % 1C-4 4 2 14143000
|
|
, 604200 % 1C-4 4 3 14144000
|
|
, 636000 % 1C-4 5 0 14145000
|
|
); 14146000
|
|
COMMENT GLOBALS FOR GETAREA/FORGETAREA; 15000000
|
|
COMMENT FIELD DECLARATIONS FOR AREASTATUS ITEM OF BLOCKOFAREASQUE;15001000
|
|
FIELD BASEADDRF =39:20, COMMENT BASE ADDRESS OF THE BLOCK; 15002000
|
|
AREASIZEFF=47:4 , COMMENT SIZE OF AREA IN A BLOCK; 15003000
|
|
AREASTATUSBITSF=19:20; COMMENT BITS FOR INDICATING 15004000
|
|
AVAILABLITY OF AREAS; 15005000
|
|
DEFINE MAXNOOFAREAS =20#; COMMENT KLUDGE UNTIL BOBS PATCH IS IN 15006000
|
|
INTEGER MAXNOOFAREAS; COMMENT NO. OF AREAS ALLOWED IN A BLOCK WHICH IS15007000
|
|
ALLOCATED AT A TIME. MAXIMUM NO OF AREAS IS 20; 15008000
|
|
DEFINE AITDESCRIPTORPLACE=19#; COMMENT TEMP DEFINE FOR AIT; 15009000
|
|
COMMENT DECLARATION FOR QUEUE OF BLOCKS OF AREAS OF DIFFERENT SIZE; 15010000
|
|
ARRAY DUMMYBLOCKOFAREASQUE[*]; COMMENT FOR MAKING ENTRY IN 15011000
|
|
BLOCKOFAREASQUE; 15012000
|
|
REFERENCE LASTBLOCK; COMMENT POINTS TO LAST BLOCK IN BLOCKOFAREASQUE;15013000
|
|
PROCEDURE STANDARDINSERT (FIRSTENTRY, LASTENTRY, ENTRY); 16000000
|
|
VALUE ENTRY; 16001000
|
|
REFERENCE FIRSTENTRY, LASTENTRY, ENTRY; 16002000
|
|
COMMENT ASSUMES FIRST 2 ITEMS OF QUEUE ARE PREVIOUS ENTRY 16003000
|
|
AND NEXT ENTRY, RESPECTIVELY. SEE STANDARDQUEUE.; 16004000
|
|
IF LASTENTRY =NULL 16005000
|
|
THEN BEGIN COMMENT QUEUE IS EMPTY; 16006000
|
|
FIRSTENTRY ~ LASTENTRY ~ ENTRY; 16007000
|
|
PREVIOUSSTANDARD @(ENTRY) ~ NEXTSTANDARD @(ENTRY) ~ NULL; 16008000
|
|
END 16009000
|
|
ELSE BEGIN COMMENT NEW ENTRY TO TAIL OF QUEUE; 16010000
|
|
PREVIOUSSTANDARD @(ENTRY) ~ LASTENTRY; 16011000
|
|
NEXTSTANDARD @ (LASTENTRY) ~ ENTRY; 16012000
|
|
LASTENTRY ~ ENTRY; 16013000
|
|
NEXTSTANDARD @ (ENTRY) ~ NULL; 16014000
|
|
END OF STANDARD QUEUE INSERTION ALGORITHM; 16015000
|
|
PROCEDURE STANDARDDELINK (FIRSTENTRY, LASTENTRY, ENTRY); 16016000
|
|
VALUE ENTRY; 16017000
|
|
REFERENCE ENTRY, FIRSTENTRY, LASTENTRY; 16018000
|
|
COMMENT ASSUMES FIRST 2 ITEMS OF QUEUE ARE PREVIOUS ENTRY 16019000
|
|
AND NEXT ENTRY, RESPECTIVELY. SEE STANDARDQUEUE.; 16020000
|
|
IF ENTRY =FIRSTENTRY COMMENT ENTRY IS THE TOP OF THE QUEUE; 16021000
|
|
THEN IF FIRSTENTRY = LASTENTRY 16022000
|
|
THEN FIRSTENTRY ~LASTENTRY ~NULL 16023000
|
|
ELSE BEGIN 16024000
|
|
FIRSTENTRY ~ NEXTSTANDARD @ FIRSTENTRY; 16025000
|
|
PREVIOUSSTANDARD @(FIRSTENTRY) ~NULL; 16026000
|
|
END 16027000
|
|
ELSE IF ENTRY =LASTENTRY 16028000
|
|
THEN BEGIN COMMENT REMOVE LAST ENTRY; 16029000
|
|
LASTENTRY ~PREVIOUSSTANDARD @ ENTRY; 16030000
|
|
NEXTSTANDARD @ (LASTENTRY) ~NULL; 16031000
|
|
END 16032000
|
|
ELSE BEGIN COMMENT REMOVE ANY OTHER ENTRY; 16033000
|
|
NEXTSTANDARD @(PREVIOUSSTANDARD @ ENTRY) ~ 16034000
|
|
NEXTSTANDARD @ ENTRY; 16035000
|
|
PREVIOUSSTANDARD @ (NEXTSTANDARD @ ENTRY) ~ 16036000
|
|
PREVIOUSSTANDARD @ ENTRY; 16037000
|
|
END OF DELINKING STANDARD QUEUE; 16038000
|
|
REFERENCE LASTNAME; 17000000
|
|
SAVE REFERENCE PROCEDURE allocatenameq; FORWARD; 17000100
|
|
QUEUE NAMEQUEUE:FIRSTNAME(PREVNAME,NEXTNAME,POINTERTONAME,CHARCOUNT); 17001000
|
|
VALUE POINTERTONAME, CHARCOUNT, PREVNAME, NEXTNAME; 17002000
|
|
REFERENCE PREVNAME, NEXTNAME; 17003000
|
|
POINTER POINTERTONAME; 17004000
|
|
INTEGER CHARCOUNT; 17005000
|
|
COMMENT QUEUE INDIVIDUAL NAMES UNTIL A "DIRECTORYSEARCH" TYPE 17006000
|
|
POINTER CAN BE BUILT; 17007000
|
|
USING LOCKED: 17008000
|
|
ALLOCATE IS ALLOCATENAMEQ: 17009000
|
|
TO INSERT, 17010000
|
|
STANDARDINSERT (FIRSTNAME, LASTNAME, ENTRY): 17011000
|
|
TO DELINK, 17012000
|
|
STANDARDDELINK (FIRSTNAME, LASTNAME, ENTRY); 17013000
|
|
SAVE REFERENCE PROCEDURE ALLOCATENAMEQ; 17014000
|
|
BEGIN 17015000
|
|
REFERENCE R; 17016000
|
|
ARRAY A [3]; 17017000
|
|
ALLOCATENAMEQ ~ R ~ R & DATADESCRIPTOR(,1,*,,,,,,4,GETAREA(4));17018000
|
|
POINTERTONAME @(R) ~ POINTER (A); 17019000
|
|
RETURN (R); 17019100
|
|
END NAMEQUEUE ALLOCATION AND INITIALIZATION; 17020000
|
|
QUEUE BLOCKOFAREASQUE :FIRSTBLOCK(PRVSBLOCK, NEXTBLOCK, AREASTATUS); 17021000
|
|
VALUE PRVSBLOCK, NEXTBLOCK, AREASTATUS; 17022000
|
|
REFERENCE PRVSBLOCK, NEXTBLOCK; 17023000
|
|
REAL AREASTATUS; 17024000
|
|
USING 17025000
|
|
ALLOCATE IS REFERENCE (DUMMYBLOCKOFAREASQUE & 17026000
|
|
ARRAYDESCL( ,3,GETSPACE(3,0,4,0))): 17027000
|
|
TO INSERT, 17028000
|
|
STANDARDINSERT (FIRSTBLOCK, LASTBLOCK, ENTRY): 17029000
|
|
TO DELINK, 17030000
|
|
BEGIN 17031000
|
|
STANDARDDELINK (FIRSTBLOCK, LASTBLOCK, ENTRY); 17032000
|
|
FORGETSPACE (WORD(ENTRY).ADDRESS); 17033000
|
|
END; 17034000
|
|
% GLOBALS FOR KEYINQ 17035000
|
|
REAL KEYINLK; 17036000
|
|
REFERENCE FIRSTINP, 17037000
|
|
NEXTINP, 17038000
|
|
LASTINP; 17039000
|
|
INTEGER PROCEDURE CENSUS(O,Y);VALUE O,Y;REFERENCE O,Y;FORWARD; 17039100
|
|
QUEUE KEYINQ:KEYQHD (KUSER,KRD,KBUF,KEVNT:PREINP,NEXINP); 17040000
|
|
VALUE KUSER,KRD,KBUF,KEVNT,PREINP,NEXINP; 17041000
|
|
REFERENCE KBUF, PREINP, NEXINP; 17042000
|
|
REAL KUSER, KRD, KEVNT; 17043000
|
|
USING 17045000
|
|
NEXT IS 17046000
|
|
(NEXTINP~NEXINP @ NEXTINP): 17047000
|
|
LOCKED: 17048000
|
|
POPULATION = CENSUS(FIRSTINP,LASTINP):% 17048100
|
|
TO DELINK, 17049000
|
|
BEGIN 17050000
|
|
IF ENTRY=FIRSTINP THEN 17051000
|
|
IF ENTRY=LASTINP THEN 17052000
|
|
FIRSTINP~LASTINP~NULL 17053000
|
|
ELSE BEGIN 17054000
|
|
FIRSTINP~NEXINP @ FIRSTINP; 17055000
|
|
PREINP @ (FIRSTINP)~NULL; 17056000
|
|
END 17057000
|
|
ELSE IF ENTRY=LASTINP THEN 17058000
|
|
BEGIN 17059000
|
|
LASTINP~PREINP @ LASTINP; 17060000
|
|
NEXINP @ (LASTINP)~NULL; 17061000
|
|
END 17062000
|
|
ELSE BEGIN 17063000
|
|
NEXINP @ (PREINP @ ENTRY)~NEXINP @ ENTRY; 17064000
|
|
PREINP @ (NEXINP @ ENTRY)~PREINP @ ENTRY; 17065000
|
|
END; 17066000
|
|
END: 17067000
|
|
TO INSERT, 17068000
|
|
BEGIN 17069000
|
|
IF LASTINP=NULL THEN% EMPTY 17070000
|
|
BEGIN 17071000
|
|
LASTINP~FIRSTINP~ENTRY; 17072000
|
|
NEXINP @ (FIRSTINP)~PREINP @ (FIRSTINP)~NULL; 17073000
|
|
END 17074000
|
|
ELSE BEGIN 17075000
|
|
PREINP @ (ENTRY)~LASTINP; 17076000
|
|
NEXINP @ (LASTINP)~ ENTRY; 17077000
|
|
LASTINP~ENTRY; 17078000
|
|
NEXINP @ (ENTRY)~ NULL; 17079000
|
|
END; 17080000
|
|
END; 17081000
|
|
INTEGER PROCEDURE CENSUS(OLDEST,YOUNGEST);VALUE OLDEST,YOUNGEST; 17082000
|
|
REFERENCE OLDEST,YOUNGEST; 17082100
|
|
BEGIN INTEGER TMP~1;% 17082200
|
|
IF OLDEST=NULL THEN RETURN(0) ELSE% 17082400
|
|
BEGIN 17082410
|
|
NEXTINP~OLDEST;% 17082500
|
|
WHILE OLDEST!YOUNGEST DO% 17082600
|
|
BEGIN% 17082610
|
|
TMP~*+1;% 17082620
|
|
OLDEST~NEXT(KEYINQ);% 17082630
|
|
END;% 17082690
|
|
END;% 17082700
|
|
RETURN(TMP);% 17082900
|
|
END CENSUS;% 17082990
|
|
% GLOBALS FOR SPOUTQ 17090000
|
|
REAL SPOUTLK;% 17090100
|
|
REFERENCE FIRSTOUTP,% 17090200
|
|
NEXTOUTP,% 17090300
|
|
LASTOUTP;% 17090400
|
|
QUEUE SPOUTQ:SPOQHD(SUSER,SRD,SBUF,SEVNT:PREOUTP,NEXOUTP); 17091000
|
|
VALUE SUSER,SRD,SBUF,SEVNT,PREOUTP,NEXOUTP; 17091100
|
|
REAL SUSER,SRD;% 17091200
|
|
WORD SEVNT;% 17091210
|
|
REFERENCE SBUF, PREOUTP,NEXOUTP; 17091300
|
|
USING 17091400
|
|
NEXT IS 17091500
|
|
(NEXTOUTP~NEXOUTP@NEXTOUTP):% 17091600
|
|
LOCKED: 17091700
|
|
TO INSERT,% 17091800
|
|
BEGIN% 17091900
|
|
IF LASTOUTP=NULL THEN% EMPTY 17092000
|
|
BEGIN% 17092100
|
|
LASTOUTP~FIRSTOUTP~ENTRY;% 17092200
|
|
NEXOUTP@(FIRSTOUTP)~PREOUTP@(FIRSTOUTP)~NULL;% 17092300
|
|
END% 17092400
|
|
ELSE BEGIN% 17092500
|
|
PREOUTP@(ENTRY)~LASTOUTP;% 17092600
|
|
NEXOUTP@(LASTOUTP)~ENTRY;% 17092700
|
|
LASTOUTP~ENTRY;% 17092800
|
|
NEXOUTP@(ENTRY)~NULL;% 17092900
|
|
END;% 17093000
|
|
END:% 17093100
|
|
TO DELINK,% 17094000
|
|
BEGIN% 17094100
|
|
IF ENTRY=FIRSTOUTP THEN% 17094200
|
|
IF ENTRY=LASTOUTP THEN% ONE AND ONLY ONE ITEM IN QUEUE 17094300
|
|
FIRSTOUTP~LASTOUTP~NULL% 17094400
|
|
ELSE BEGIN% TOP ITEM IN QUEUE 17094500
|
|
FIRSTOUTP~NEXOUTP@FIRSTOUTP;% 17094600
|
|
PREOUTP@(FIRSTOUTP)~NULL;% 17094700
|
|
END 17094800
|
|
ELSE IF ENTRY=LASTOUTP THEN% BOTTOM ITEM IN QUEUE 17094900
|
|
BEGIN% 17095000
|
|
LASTOUTP~PREOUTP@LASTOUTP;% 17095100
|
|
NEXOUTP@(LASTOUTP)~NULL;% 17095200
|
|
END% 17095300
|
|
ELSE BEGIN% ITEM IS IN THE MIDDLE OF QUEUE 17095400
|
|
NEXOUTP@(PREOUTP@ENTRY)~NEXOUTP@ENTRY;% 17095500
|
|
PREOUTP@(NEXOUTP@ENTRY)~PREOUTP@ENTRY;% 17095600
|
|
END;% 17095700
|
|
END;% 17095800
|
|
INTERLOCK ARRAY CHANNELLOCKS[*];% 17100000
|
|
ARRAY CHANNELGUIDE[*];% 17100100
|
|
LAYOUT LNDESCL (FIRF=19:1,LASF=18:1,PGF=17:10,LNF=7:8),% 17100500
|
|
GYDEFORM (RATINGSAMPLEF=47:30,SERF=17:8,CUSTF=9:8,0:1~1); 17100590
|
|
FIELD LNSTATF = 19:2;% 17100600
|
|
PROCEDURE CHANLINSERT(E,I);VALUE E,I;REAL I;REFERENCE E; FORWARD; 17101000
|
|
PROCEDURE CHANLREPLACE(E); VALUE E; REFERENCE E; FORWARD;% 17101100
|
|
DEFINE% FOR TUNING CHANNELS 17102000
|
|
MAXPSUEDOCHANNELS=10#,% 17102100
|
|
PICQSZ= 6#,% 17102110
|
|
MIXPIC = 0%,% 17102200
|
|
PERPIC = 1#,% 17102210
|
|
SCHPIC = 2#,% 17102220
|
|
DIRPIC = 3#,% 17102230
|
|
MIXCHNLLK = CHANNELLOCKS[MIXPIC]#,% 17102300
|
|
MIXQ(R) = PICQ,R,MIXPIC#,% 17102310
|
|
MIXQHD = CHANLHD[MIXPIC]#,% 17102320
|
|
PRINTMIXPIC(A)= CHANLOUT(MIXPIC,A)#,% 17102330
|
|
FIRSTLN= CHANLHD[INDEX]#,% 17102340
|
|
TOPLINE= 1&LNDESCL(,,1)#,% 17102350
|
|
FIRSTIMAGE(L,P)= L&LNDESCL(1,0,P)#,% 17102360
|
|
LASTIMAGE(L,P)= L&LNDESCL(0,1,P)#,% 17102370
|
|
CURRENTIMAGE(L,P)= L&LNDESCL(1,1,P)#,% 17102380
|
|
AVAILABLEIMAGE(L,P)= L&LNDESCL(0,0,P)#,% 17102390
|
|
AVAILINE(L)= (L).LNSTATF=0#,% 17102400
|
|
STATUSPOSIT= 28#,% 17102500
|
|
STATUSSZ= 3#,% 17102600
|
|
ENDCHANLQDEF=0#;% 17102990
|
|
QUEUE ARRAY PICQ:CHANLHD[*](LNID,LNDESC,LNBUF,INTERPICLNK,PRELN,NEXLN); 17103000
|
|
VALUE LNID,LNDESC, INTERPICLNK,PRELN,NEXLN; 17103100
|
|
REAL LNID,LNDESC, INTERPICLNK; 17103200
|
|
ARRAY LNBUF[*];% 17103210
|
|
REFERENCE PRELN,NEXLN; 17103300
|
|
USING LOCKED:% 17103400
|
|
TO INSERTINTO, CHANLINSERT(ENTRY,INDEX):% 17103500
|
|
TO REPLACIT, CHANLREPLACE(ENTRY):% 17103600
|
|
TO INSERT,% 17103700
|
|
BEGIN% 17103710
|
|
IF FIRSTLN=NULL THEN% 17103720
|
|
BEGIN% 17103730
|
|
FIRSTLN~ENTRY;% 17103740
|
|
PRELN@(ENTRY)~ENTRY;% 17103750
|
|
NEXLN@(ENTRY)~NULL;% 17103760
|
|
END% 17103770
|
|
ELSE BEGIN% 17103780
|
|
NEXLN@(ENTRY)~FIRSTLN;% 17103790
|
|
NEXLN@(PRELN@FIRSTLN)~ENTRY;% 17103800
|
|
PRELN@(ENTRY)~PRELN@FIRSTLN;% 17103810
|
|
PRELN@(FIRSTLN)~ENTRY; 17103820
|
|
END; 17103830
|
|
END: 17103890
|
|
TO DELINK,% 17104000
|
|
BEGIN% 17104010
|
|
IF ENTRY=FIRSTLN THEN% 17104020
|
|
IF NEXLN@ENTRY=NULL THEN FIRSTLN~NULL% 17104030
|
|
ELSE BEGIN% 17104040
|
|
FIRSTLN~NEXLN@ENTRY;% 17104050
|
|
PRELN@(FIRSTLN)~PRELN@ENTRY;% 17104060
|
|
END% 17104070
|
|
ELSE IF NEXLN@ENTRY=NULL THEN NEXLN@(PRELN@ENTRY)~NULL% 17104080
|
|
ELSE BEGIN% 17104090
|
|
NEXLN@(PRELN@ENTRY)~NEXLN@ENTRY;% 17104100
|
|
PRELN@(NEXLN@ENTRY)~PRELN@ENTRY;% 17104110
|
|
END;% 17104120
|
|
FORGETAREA(WORD(ENTRY).LENGTHF,WORD(ENTRY).ADDRESSF); 17104130
|
|
END:% 17104190
|
|
TO REARRANGE,% 17104200
|
|
BEGIN% 17104210
|
|
ENTRY~NEXLN@ENTRY; 17104220
|
|
WHILE PRELN@ENTRY!PRELN@FIRSTLN DO% 17104230
|
|
BEGIN% 17104240
|
|
PRELN@(ENTRY)~PRELN@(PRELN@ENTRY);% 17104250
|
|
IF AVAILINE(LNDESC@(NEXLN@(PRELN@ENTRY))) THEN% 17104260
|
|
FORGETAREA(WORD(NEXLN@(PRELN@ENTRY)).LENGTHF,% 17104270
|
|
WORD(NEXLN@(PRELN@ENTRY)).ADDRESSF);% 17104280
|
|
END;% 17104290
|
|
END;% 17104300
|
|
PROCEDURE CHANLINSERT(ENTREE,CHNNO);VALUE ENTREE,CHNNO;% 17110000
|
|
REAL CHNNO; REFERENCE ENTREE;% 17110100
|
|
BEGIN% 17111000
|
|
INTEGER TMPLN, TMPPG~-1;% 17112000
|
|
REFERENCE TMPENTRY~CHANLHD[CHNNO];% 17113000
|
|
LABEL LOOP;% 17119000
|
|
LOOP: TMPLN:=(TMPLN MOD MAXLNS)+1;% 17121000
|
|
IF TMPENTRY=NULL THEN% 17122000
|
|
BEGIN% 17123000
|
|
LNDESC@(ENTREE)~FIRSTIMAGE(TMPLN,TMPPG+REAL(TMPLN=1)); 17124000
|
|
PICQ[CHNNO]~ENTREE;% 17125000
|
|
END% 17126000
|
|
ELSE BEGIN% 17127000
|
|
IF AVAILINE(TMPLN~LNDESC@TMPENTRY) THEN% 17128000
|
|
BEGIN% 17129000
|
|
LNDESC@(ENTREE)~FIRSTIMAGE(TMPLN,TMPLN.PGF);% 17130000
|
|
PRELN@(ENTREE)~TMPENTRY;% 17131000
|
|
REPLACIT(PICQ,ENTREE,CHNNO);% 17132000
|
|
END% 17133000
|
|
ELSE BEGIN% 17134000
|
|
TMPENTRY~NEXLN@TMPENTRY;% 17135000
|
|
GO TO LOOP;% 17136000
|
|
END;% 17137000
|
|
END;% 17138000
|
|
END CHANLINSERT;% 17139900
|
|
PROCEDURE CHANLREPLACE(ENTREE);VALUE ENTREE;REFERENCE ENTREE; 17150000
|
|
BEGIN% 17150100
|
|
REFERENCE PREVLINE~PRELN@ENTREE;% 17150200
|
|
PRELN @ (ENTREE) ~ PRELN @ PREVLINE;% 17150300
|
|
NEXLN @ (ENTREE) ~ NEXLN @ PREVLINE;% 17150400
|
|
NEXLN @ (PRELN @ ENTREE) ~ PRELN @ (NEXLN @ ENTREE) ~ENTREE; 17150500
|
|
FORGETAREA(WORD(PREVLINE).LENGTHF,% 17150700
|
|
WORD(PREVLINE).ADDRESSF);% 17150702
|
|
END CHANLREPLACE;% 17151990
|
|
REFERENCE LASTPARAM; 17152000
|
|
QUEUE PARAMETERQUEUE:FIRSTPARAM 17153000
|
|
(PREVPARAM, NEXTPARAM, POINTERTOID, PARAMETERINFO); 17154000
|
|
VALUE PREVPARAM, NEXTPARAM, POINTERTOID, PARAMETERINFO; 17155000
|
|
REFERENCE PREVPARAM, NEXTPARAM, PARAMETERINFO; 17156000
|
|
POINTER POINTERTOID; 17157000
|
|
COMMENT QUEUE PARAMETER NAMES AND THEIR ASSOCIATED INFO 17158000
|
|
UNTIL ALL ITEMS CAN BE PLACED IN A SINGLE 17159000
|
|
VECTOR.; 17160000
|
|
USING LOCKED: 17161000
|
|
ALLOCATE IS ALLOCATENAMEQ: 17162000
|
|
TO INSERT, 17163000
|
|
BEGIN 17164000
|
|
PARAMETERINSERT (FIRSTPARAM, LASTPARAM, ENTRY); 17165000
|
|
END: 17166000
|
|
TO DELINK, 17167000
|
|
BEGIN 17168000
|
|
STANDARDDELINK (FIRSTPARAM, LASTPARAM, ENTRY); 17169000
|
|
FORGETAREA (4, WORD (ENTRY).ADDRESSF); 17170000
|
|
END: 17171000
|
|
TO INITIALINSERT, 17172000
|
|
STANDARDINSERT (FIRSTPARAM, LASTPARAM, ENTRY); 17173000
|
|
PROCEDURE PARAMETERINSERT (FIRSTPARAM, LASTPARAM, ENTRY); 17174000
|
|
VALUE ENTRY; 17175000
|
|
REFERENCE FIRSTPARAM, LASTPARAM, ENTRY; 17176000
|
|
BEGIN 17177000
|
|
POINTER PT, PE; 17178000
|
|
ARRAY PB [*]; 17179000
|
|
REFERENCE RT, PBR = PB; 17180000
|
|
INTEGER IT, IE, WORDS; 17181000
|
|
REAL T; 17182000
|
|
LABEL AWAY; 17183000
|
|
IF RT ~ FIRSTPARAM ! NULL 17184000
|
|
THEN BEGIN 17185000
|
|
WORDS~REAL(POINTERTOID@(RT),6).TOTALINFOWORDSF; 17186000
|
|
DO IF IT ~ REAL(PT ~POINTERTOID@(RT), 6). 17187000
|
|
KEYFIELDF = 17188000
|
|
IE ~ REAL(PE ~POINTERTOID@(ENTRY),6). 17189000
|
|
KEYFIELDF 17190000
|
|
THEN IF PT+6 = PE+6 FOR IT.ALFALENGTHF 17191000
|
|
THEN BEGIN 17192000
|
|
PBR ~ PARAMETERINFO@(RT); 17193000
|
|
WORDS ~ WORDS - REAL(PT,6).INFOINDEXF - 17194000
|
|
PB.LENGTHF; 17195000
|
|
STANDARDDELINK (FIRSTPARAM, LASTPARAM, RT); 17196000
|
|
FORGETSPACE(PT.ADDRESSF); 17197000
|
|
FORGETSPACE(PB.ADDRESSF); 17198000
|
|
FORGETAREA(4, WORD (RT).ADDRESSF); 17199000
|
|
GO AWAY 17200000
|
|
END 17201000
|
|
UNTIL RT ~ NEXTPARAM@(RT) = NULL; 17202000
|
|
END 17203000
|
|
ELSE PE ~ POINTERTOID@(ENTRY); 17204000
|
|
AWAY: PBR ~ PARAMETERINFO@(ENTRY); 17205000
|
|
STANDARDINSERT (FIRSTPARAM, LASTPARAM, ENTRY); 17206000
|
|
UPDATEWORDCOUNT 17207000
|
|
(WORDS + (REAL(PE,6).INFOINDEXF) + 17208000
|
|
(T ~ PB.LENGTHF), FIRSTPARAM); 17209000
|
|
UPDATEINFOINDEX (T, ENTRY); 17210000
|
|
END; 17211000
|
|
% GLOBALS FOR LOGGING 17300000
|
|
ARRAY LOGBUF[*],% 17300100
|
|
LOGHDR[*];% 17300200
|
|
REAL LOGLOCK,% 17300300
|
|
LOGRECCNT;% 17300400
|
|
DEFINE 17301000
|
|
LOGROWSZ= 1000#,% 17301100
|
|
SEGMENTSZ= 30#,% 17301200
|
|
LOGRECSZ= 15#,% 17301300
|
|
LOGHDRSZ= 30#,% 17301400
|
|
ENDLOGDEF=0#;% 17301900
|
|
COMMENT GLOBALS FOR ARRAYDEC; 18000000
|
|
DEFINE MCPAITSIZE=10#, 18000300
|
|
AITSIZE=64#; 18000700
|
|
ARRAY MCPARRAYINFOT[MCPAITSIZE]; 18001000
|
|
LAYOUT SARRAYDESCL(TAG~5,LENGTHF,MCPARRAYBIT=19:1,FILETYPEF, 18002000
|
|
AITINDICATORF,AITINDEXF=16:12,ARRAYTYPEF=4:5); 18003000
|
|
COMMENT TO MAKE UP A SPECIAL ARRAY 18004000
|
|
DESCRIPTOR FOR ARRAY DECLARATIONS; 18005000
|
|
FIELD DOUBLEBIT=2:1,LSAVEBIT=0:1; 18006000
|
|
COMMENT GLOBALS FOR FILE MANAGEMENT; 18007000
|
|
DEFINE STOPFILETIMING=STARTFILETIMING #, COMMENT WHEN 18008000
|
|
STOPFILETIMING IS CALLED SECOND PARAMETER IS FALSE; 18009000
|
|
SETUNITAVAILABLE=SETUNITINUSE #, COMMENT WHEN 18010000
|
|
SETUNITAVAILABLE IS CALLED SECOND PARAMETER IS FALSE;18011000
|
|
LEBZERO=LEB[0]#, 18012000
|
|
LEBONE=LEB[1]#, 18013000
|
|
LEBTWO=LEB[2]#; 18014000
|
|
FIELD BYTE1F=47:8, 18015000
|
|
BYTE2F=39:8, 18016000
|
|
BYTE3F=31:8, 18017000
|
|
BYTE4F=23:8, 18018000
|
|
BYTE5F=15:8, 18019000
|
|
BYTE6F=7:8; 18020000
|
|
DEFINE PUTINBITSTABLE(TABLE,U) =TABLE[U DIV 48].[U MOD 48:1]~1#; 18021000
|
|
FIELD PTYPEF =4:5, % DEVICE CODE OF PERIPHERAL TYPE 18022000
|
|
PTYPECODEF=7:3, % QUALIFYING CODE FOR PERIPHERAL TYPE 18023000
|
|
UNOF =U:1; % FOR RESETTING BITS IN UNIT BITS TABLE 18024000
|
|
EVENT FINDINPUTEVENT; % NOW YOU CAN CALL FINDINPUT 18024100
|
|
REAL MCPDISKUNITNO; % UNIT NO TO BE USED FOR TALKING ABOUT DISK18024200
|
|
COMMENT DEFINES FOR CODE VALUE PASSED TO FINDINPUT; 18024300
|
|
DEFINE SEARCHONLY=1# % DONOT WAIT IF DISK FILE IS LOCKED 18024400
|
|
; 18024800
|
|
ARRAY REPLY[*]; COMMENT FOR STORING REPLYCODE FOR CHECKING 19002000
|
|
VALID RESPONSES FROM SPO FOR EACH STACK NO.19003000
|
|
(SNR).WHEN VALID RESPONSE IS RECEIVED 19004000
|
|
REPLY[SNR]>0 AND WILL CONTAIN THE RECEIVED 19005000
|
|
MESSAGE; 19006000
|
|
% THE ARRAY REPLY[*] IS TEMPORARILY BEING INITIALIZED 19006200
|
|
% TO MAXIMUM NO OF STACKS -- EVENTUALLY IT SHOULD BE MADE DYNAMIC, 19006210
|
|
% POSSIBLY BY A QUEUE MECHANISM OR BY STANDARD OFFSET FROM BOSR. 19006220
|
|
LAYOUT REPWRDL (% 19006500
|
|
REPINFOF=23:9,% MISC. INFO 19006510
|
|
REPVALF=14:15);% RESPONSE VALUE 19006590
|
|
DEFINE% REPLY BIT VALUE REPINFOF 19006900
|
|
DSREP = 1#,% NOTHING 19007000
|
|
RMREP = 2#,% NOTHING 19007010
|
|
OKREP = 4#,% NOTHING 19007020
|
|
ILREP = 8#,% UNIT NO. 19007030
|
|
FMREP = 16#,% UNIT NO. 19007040
|
|
ULREP = 32#,% UNIT NO. 19007050
|
|
OUREP = 64#,% UNIT TYPE 19007060
|
|
FRREP = 128#,% NOTHING 19007070
|
|
OFREP = 256#,% NOTHING 19007080
|
|
USREP = 512#,% GEN AND VER NOS. 19007090
|
|
AXREP = 1024#,% DONT KNOW YET 19007100
|
|
DEFINEREPEND=O#; 19014000
|
|
COMMENT DEFINES FOR BIT NO VALUE IN REPLY MASK; 19014010
|
|
DEFINE DSV =0# 19014020
|
|
,RMV =1# 19014030
|
|
,OKV =2# 19014040
|
|
,ILV =3# 19014050
|
|
,FMV =4# 19014060
|
|
,ULV =5# 19014070
|
|
,OUV =6# 19014080
|
|
,FRV =7# 19014090
|
|
,OFV =8# 19014100
|
|
,USV =9# 19014110
|
|
,AXV =10# 19014120
|
|
; 19014300
|
|
COMMENT DEFINES FOR FIB; 19015000
|
|
20000000
|
|
20001000
|
|
DEFINE INDEPENDENTRUNNERCORE = 512 # %***STACK CORE 20002000
|
|
, IRCORE = 500 # %TOTAL CORE 20003000
|
|
, IRPROCTIME = 1000 # 20004000
|
|
, IRIOTIME = 500 # 20005000
|
|
, D0OFFSET = 0 # 20006000
|
|
; 20007000
|
|
REAL INDEPENDENTRUNNERLOK 20008000
|
|
; 20009000
|
|
COMMENT THE FOLLOWING INDICES ARE USED FOR PARTITIONING INDEPENDENT 20009100
|
|
RUNNER PROCEDURES 20009200
|
|
; 20009300
|
|
REAL IRPCWSTARTPLACE~NAME(CONTROLCARD).ADRCPLF 20009400
|
|
, ONEONLYINDEX ~ NAME(STATUS).ADRCPLF -IRPCWSTARTPLACE 20009500
|
|
, MAXIRINDEX ~ NAME(TERMINATE).ADRCPLF -IRPCWSTARTPLACE20009600
|
|
, MAXIRINDEXPLUS1 ~ MAXIRINDEX+1 20009700
|
|
; 20009800
|
|
COMMENT THE FOLLOWING INDICATORS ARE USED BY INDEPENDENT RUNNER IN 20010000
|
|
RECOGNISING THOSE RUNNERS REQUIRING SPECIAL ACTION. FOR 20010200
|
|
EXAMPLE INITIALISE WILL PUT PRIORITIES FOR RECOGNISED RUNNERS 20010400
|
|
INTO "IRPRIORITIES"(NOTE - THIS HAS TO BE CODED) - NON 20010600
|
|
RECOGNISED RUNNERS WILL HAVE DEFAULT PRIORITIES 20010800
|
|
; 20011000
|
|
20011100
|
|
20011200
|
|
REAL CONTROLCARDINDICATOR ~ NAME(CONTROLCARD).ADRCPLF 20013000
|
|
-IRPCWSTARTPLACE 20013200
|
|
, INITIATEINDICATOR ~ NAME(INITIATE).ADRCPLF 20014000
|
|
-IRPCWSTARTPLACE 20014200
|
|
, TERMINATEINDICATOR ~ NAME(TERMINATE).ADRCPLF 20015000
|
|
-IRPCWSTARTPLACE 20015200
|
|
, DIRCOMPLEMENTINDICATOR := NAME(DIRECTORYCOMPLEMENT). 20015300
|
|
ADRCPLF - IRPCWSTARTPLACE 20015400
|
|
; 20016000
|
|
DEFINE FORK(PROC,PARAM)=INDEPENDENTRUNNER(NAME(PROC).ADRCPLF20020020
|
|
-IRPCWSTARTPLACE,PARAM) # ; 20020040
|
|
COMMENT FOLLOWING DEFINE DEFAULT PRIORITY AND PRIORITIES FOR RUNNERS 20020100
|
|
WITH WHICH INDICATORS ARE ASSOCIATED; 20020200
|
|
DEFINE IRDEFAULTPRIORITY 20020300
|
|
= 10 # 20020400
|
|
, DIRCOMPLEMENTPRIORITY = 18 # 20020420
|
|
, CONTROLCARDPRIORITY 20020500
|
|
= 12 # 20020600
|
|
, INITIATEPRIORITY 20020620
|
|
= 12 # 20020640
|
|
, TERMINATEPRIORITY 20020660
|
|
= 19 # 20020680
|
|
; 20020900
|
|
REAL IRSTACKS %~2 20023000
|
|
, PIRSTACKS 20024000
|
|
; 20025000
|
|
ARRAY STACKINUSE[*], 20026000
|
|
IRPRIORITIES[*] 20026100
|
|
%EACH IR MUST BE INITI-20027000
|
|
%ALISED 20028000
|
|
; 20029000
|
|
ARRAY IRPARAMETERLOK[*] 20030000
|
|
; 20031000
|
|
BOOLEAN NOTFIRSTWAIT % *** KLUDGE 20032000
|
|
; 20033000
|
|
INTEGER TERMINATESTACK % STACK NUMBER FOR TERMINATE 20034000
|
|
; 20035000
|
|
LAYOUT REDYQHEAD( FIRSTREADYF = 12:10 21000000
|
|
,LASTREADYF = 22:10 21001000
|
|
) 21002000
|
|
; 21003000
|
|
REAL ARRAY VECTORLOK[2] 21004000
|
|
; 21005000
|
|
DEFINE SHEETINDICATOR = FALSE # 21006000
|
|
, READYINDICATOR = TRUE # 21007000
|
|
, SVECTORPLACE = 16 # 21008000
|
|
21009000
|
|
21010000
|
|
, PRIORITYRANGE = 9 # % UPPER LIMIT ON PRIORITIES 21011000
|
|
, PRIORITYRANGEPLUS1 = 10 # 21011100
|
|
, TIMELOAD = 10# % NO OF RE-ARRANGES OF SHEET21012000
|
|
% BEFORE PRIORITY INCREASE 21013000
|
|
, ALLOWABLESLACK = 120# % IN SHEET,STACK VECTOR SIZE21014000
|
|
, VECTORMODULE = 100# % SHEET AND STACK VECTOR 21015000
|
|
; 21016000
|
|
REAL LASTNOTAVAILABLEINVECTOR 21017000
|
|
, FIRSTAVAILABLEINVECTOR 21018000
|
|
; 21019000
|
|
21020000
|
|
21021000
|
|
ARRAY PRIORITYLEVEL[PRIORITYRANGEPLUS1] 21022000
|
|
; 21023000
|
|
REAL HIGHESTSHEETVECTOR 21024000
|
|
, HIGHESTSTACKVECTOR 21025000
|
|
; 21026000
|
|
DEFINE SHEET = 0 # %NORMAL 21027000
|
|
, REDY = 1 # %FROM WAITQ 21028000
|
|
, SHEETI = SHEET # 21029000
|
|
, WAITI = 2 # 21030000
|
|
, OTHERREDY = 3 # 21031000
|
|
, OTHER = OTHERREDY # 21032000
|
|
, GETIRS = 4 # 21033000
|
|
, TERMINATEI = 5 # 21034000
|
|
, READYQHEAD = READYQHED # 21034100
|
|
; 21035000
|
|
21036000
|
|
21037000
|
|
21038000
|
|
COMMENT FOLLOWING ARE FORMATS OF SHEET PSEUDO-STACK,PROCESS STACK, 21039000
|
|
D1 STACK AND D2 STACK NOTE CORRESPONDENCE WITH SHEETQ AND READYQ 21040000
|
|
DECLARATIONS - IN GENERAL THERE ARE TWO WAYS OF REFERENCING STACK 21041000
|
|
OR PSEUDO STACK INFORMATE - THROUGH ITEM REFERENCES OR THROUGH 21042000
|
|
DIRECT INDEXING INTO STACK OR SHEET ARRAY 21043000
|
|
; 21044000
|
|
DEFINE FIRSTPLACE = 0 # 21045000
|
|
, LINKPLACE = 1 # 21046000
|
|
, COREPLACE = 2 # 21047000
|
|
, PRIORITYPLACE = 3 # 21048000
|
|
, PROCTIMEPLACE = 4 # 21049000
|
|
, IOTIMEPLACE = 5 # 21050000
|
|
, FPBDESCPLACE = 6 # 21051000
|
|
, COMMONVALUEPLACE = 7 # 21052000
|
|
, PROCESSNATUREPLACE= 8 # 21053000
|
|
, FIRSTPARAMETERPLACE = 9# 21053200
|
|
, LASTPARAMETERPLACE =10# 21053400
|
|
, STACKOLAYABLECOREPLACE = 9 # 21054000
|
|
, STACKNONOLAYABLECOREPLACE= 10# 21055000
|
|
, TARGETTIMEPLACE = 13# 21056000
|
|
, IDPLACE = 14# 21057000
|
|
, TIMEENTEREDPLACE = 15 # 21058000
|
|
, FIRSTXPLACE = 16# 21059000
|
|
, CODEFILEDESCPLACE= 17# 21060000
|
|
, CODEFILENAMEDESCPLACE= 18# 21061000
|
|
, STACKSIZEPLACE = 20# 21062000
|
|
, SEPCOMPILEINFOPLACE = 21# 21063000
|
|
, EXTERNALINFOPLACE = 22# 21064000
|
|
, D1DESCRIPTORPLACE = 23# 21065000
|
|
, D2DESCRIPTORPLACE = 24# 21066000
|
|
, NEXTPROGRAMPLACE = 26# 21066100
|
|
, AUTHORITYLINKPLACE = 32# 21067000
|
|
, REQUIREDPLACE = 33 # 21067200
|
|
, AUTHORITYPLACE = 34 # 21067400
|
|
, AUTHORITYEVENTPLACE = 35# 21067600
|
|
, FIRSTMSCWPLACE 21072000
|
|
= 36 # 21072050
|
|
, FIRSTRCWPLACE 21072100
|
|
= 37 # 21072150
|
|
, IRPARAMETERPLACE 21072200
|
|
= 38 # 21072250
|
|
, IRPCWPLACE 21072300
|
|
= 39 # 21072350
|
|
, SECNDMSCWPLACE 21072400
|
|
= 40 # 21072450
|
|
, RETURNCONTROLWORDPLACE 21072500
|
|
= 41 # 21072550
|
|
; 21073000
|
|
DEFINE EVENTWAITQLINK = LINKPLACE # ; 21074000
|
|
COMMENT FOLLOWING APPLY TO PSEUDO-STACK ONLY; 21075000
|
|
DEFINE SCHEDULEIDPLACE= 14# 21076000
|
|
, COLLAPSEDNAMEPLACE = 15# 21077000
|
|
; 21078000
|
|
21079000
|
|
COMMENT FOLLOWING APPY TO PROCESS STACK ONLY; 21080000
|
|
DEFINE JOBIDPLACE = 14# 21081000
|
|
, PROCESSIDPLACE = 16# 21082000
|
|
, TRPLACE = 17# 21083000
|
|
, TWPLACE = 18# 21084000
|
|
, AITDESCPLACE = 19# 21085000
|
|
, TPPLACE = 20# 21086000
|
|
, CURRENTPRIORITYPLACE= 23# 21087000
|
|
, MYCOURSEPLACE = 24# 21088000
|
|
, IOTIMEACCUMPLACE = 25# 21089000
|
|
21090000
|
|
, DATDESCRIPTORPLACE = 26# 21091000
|
|
, OLAYFILEDESCRIPTORPLACE= 27# 21092000
|
|
, PROCESSFAMILYLINKPLACE = 28# 21093000
|
|
, ERRORCOUNTPLACE = 29 # 21094000
|
|
, ABORTEVENTPLACE = 30 # 21095000
|
|
, REPLYEVENTPLACE = 31 # 21096000
|
|
; 21097000
|
|
COMMENT FOLLOWING APPLY TO D1 STACK ONLY; 21098000
|
|
DEFINE SEGDICTIDENTPLACE = 2 # 21099000
|
|
, FIRSTPCWPLACE = 3 # 21100000
|
|
, D1CODEFILEDESCPLACE = 4 # 21101000
|
|
, D1CODEFILENAMEDESCPLACE =5# 21102000
|
|
, USERCOUNTNLINKAGEPLACE =6 # 21103000
|
|
, D1MSCWPLACE = 13# 21104000
|
|
, D1RCWPLACE = 14# 21105000
|
|
, MYCODEFILENAME(D2STKNR)= WORDSTACK[WORDSTACK[D2STKNR,21105100
|
|
PROCESSFAMILYLINKPLACE].FATHERF, 21105102
|
|
D1CODEFILENAMEDESCPLACE]#% 21105104
|
|
; 21106000
|
|
DEFINE D1INFO = D1MSCWPLACE # 21107000
|
|
; 21108000
|
|
LAYOUT READYWAITLINK ( BACKWARDLINKF = 22:10 21109000
|
|
, FORWARDLINKF = 12:10 21110000
|
|
, SELFIDENTF = 45:10 21111000
|
|
, HEYOUINTERRUPTF= 24:1 21112000
|
|
) 21113000
|
|
; 21114000
|
|
FIELD DEDICATEDSTACKF = 25:1 21114200
|
|
; 21114400
|
|
WORD D2MSCW2 21115000
|
|
, SHEETTOSCW 21116000
|
|
, D2MSCW1 21117000
|
|
, IRMSCW1 21118000
|
|
, IRMSCW2 21119000
|
|
, D1MSCW 21120000
|
|
, D2RCW1 21121000
|
|
, IRTOSCW 21122000
|
|
, D2TOSCW 21122100
|
|
; 21123000
|
|
FIELD DYNAMICLINKSF =22:23 21124000
|
|
, STATUSINDICATORF = 23:21 21125000
|
|
, FULLINDICATORF = 23:1 21126000
|
|
; 21127000
|
|
DEFINE 21128000
|
|
21129000
|
|
D1TOSCW = SHEETTOSCW # 21130000
|
|
, IRRCW1 = D2RCW1 # 21131000
|
|
21131200
|
|
, D1RCW = D2RCW1 # 21132000
|
|
; 21133000
|
|
LAYOUT USERLINK ( LATENTUSERSF = 39:10 21134000
|
|
, ACTIVEUSERSF = 29:10 21135000
|
|
, FIRSTD2VALUE = 19:20 21136000
|
|
) 21137000
|
|
; 21138000
|
|
FIELD NUMBEROFUSERSF = 39:20 21138010
|
|
; 21138020
|
|
LAYOUT PROCESSFAMILYLINKAGE 21138100
|
|
% *** AT PRESENT ,A D2 STACK CAN HAVE NO FATHER AND 21138110
|
|
% *** FATHERPROCESSF HOLDS THE D1 STACK NO. THE 21138120
|
|
% *** D1LINKFLAGF(WHICH AT PRESENT IS UNUSED) MAY PROVE 21138130
|
|
% *** USEFUL IF THIS SITUATION CHANGES.15 MARCH 1969 21138140
|
|
( FATHERF = 9:10 21138200
|
|
, D1LINKFLAGF = 10:1 21138300
|
|
, ELDESTSONF = 20:10 21138400
|
|
, OLDERBROTHERF = 30:10 21138500
|
|
, YOUNGERBROTHERF = 40:10 21138600
|
|
); 21138900
|
|
21139000
|
|
QUEUE READYQ :WRONGTYPEREADYQHEAD ( 21140000
|
|
READYQBOTTOM 21141000
|
|
, READYQLINK 21142000
|
|
, READYQCORE 21143000
|
|
, DECLAREDPRIORITY 21144000
|
|
, PROCESSLIMIT 21145000
|
|
, IOLIMIT 21146000
|
|
, FPBDESCRIPTOR 21147000
|
|
, COMMONVALUE 21148000
|
|
, PROCESSCLASS 21149000
|
|
, STACKOLAYABLECORE 21149200
|
|
, STACKNONOLAYABLECORE 21149400
|
|
, DUMMYREDY1 21149600
|
|
, DUMMYREDY2 21149800
|
|
, TARGETTIME 21150000
|
|
, JOBID 21151000
|
|
, TIMEENTERED 21152000
|
|
, PROCESSID 21153000
|
|
, TIMEINREADYQ 21154000
|
|
, WAITTIME 21155000
|
|
, AITDESCRIPTOR 21155200
|
|
, PROCESSTIME 21156000
|
|
, SEPCOMPILEINFO 21156200
|
|
, EXTERNALINF 21156400
|
|
, CURRENTPRIORITY 21157000
|
|
, MYCOURSEITEM 21158000
|
|
, ACCUMULATEDIOTIME 21159000
|
|
21160000
|
|
, OATDESCRIPTOR 21161000
|
|
, OLAYFILEDESCRIPTOR 21162000
|
|
, PROCESSFAMILYLINK 21163000
|
|
, ERRORCOUNT 21164000
|
|
, ABORTEVENT 21165000
|
|
, REPLYEVENT 21166000
|
|
, AUTHORITYLINK 21166010
|
|
, REQUIRED 21166100
|
|
, AUTHORITY 21166200
|
|
, AUTHORITYEVENT 21166300
|
|
, FIRSTMSCW 21166400
|
|
, FIRSTRCW 21166500
|
|
, IRPARAMETER 21166600
|
|
, IRPCW 21166700
|
|
, SECNDMSCW 21166800
|
|
, RETURNCONTROLWD 21166900
|
|
); 21167000
|
|
VALUE READYQBOTTOM 21168000
|
|
, READYQLINK 21169000
|
|
, READYQCORE 21170000
|
|
21171000
|
|
, DECLAREDPRIORITY 21172000
|
|
, PROCESSLIMIT 21173000
|
|
, IOLIMIT 21174000
|
|
, FPBDESCRIPTOR 21175000
|
|
, COMMONVALUE 21176000
|
|
, TARGETTIME 21177000
|
|
, JOBID 21178000
|
|
, TIMEENTERED 21179000
|
|
, PROCESSCLASS 21180000
|
|
, PROCESSID 21181000
|
|
, TIMEINREADYQ 21182000
|
|
, WAITTIME 21183000
|
|
, PROCESSTIME 21184000
|
|
, CURRENTPRIORITY 21185000
|
|
, MYCOURSEITEM 21186000
|
|
, ACCUMULATEDIOTIME 21187000
|
|
, AITDESCRIPTOR 21188000
|
|
, OATDESCRIPTOR 21189000
|
|
, OLAYFILEDESCRIPTOR 21190000
|
|
, PROCESSFAMILYLINK 21191000
|
|
, ERRORCOUNT 21192000
|
|
, DUMMYREDY1 21193000
|
|
, DUMMYREDY2 21193200
|
|
, SEPCOMPILEINFO 21193400
|
|
, EXTERNALINF 21193600
|
|
, AUTHORITYLINK 21193800
|
|
, REQUIRED 21194000
|
|
, AUTHORITY 21194200
|
|
, IRPARAMETER 21194400
|
|
, FIRSTMSCW 21194600
|
|
, FIRSTRCW 21194800
|
|
, IRPCW 21195000
|
|
, SECNDMSCW 21195200
|
|
, RETURNCONTROLWD 21195400
|
|
, STACKOLAYABLECORE 21195700
|
|
, STACKNONOLAYABLECORE 21195800
|
|
; 21195900
|
|
REAL READYQCORE 21196000
|
|
21197000
|
|
, DECLAREDPRIORITY 21198000
|
|
, PROCESSLIMIT 21199000
|
|
, IOLIMIT 21200000
|
|
, COMMONVALUE 21201000
|
|
, TARGETTIME 21202000
|
|
, JOBID 21203000
|
|
, TIMEENTERED 21204000
|
|
, PROCESSCLASS 21205000
|
|
, PROCESSID 21206000
|
|
, TIMEINREADYQ 21207000
|
|
, WAITTIME 21208000
|
|
, PROCESSTIME 21209000
|
|
, CURRENTPRIORITY 21210000
|
|
, MYCOURSEITEM 21211000
|
|
, ACCUMULATEDIOTIME 21212000
|
|
, PROCESSFAMILYLINK 21213000
|
|
, ERRORCOUNT 21214000
|
|
, DUMMYREDY1 21214100
|
|
, DUMMYREDY2 21214200
|
|
, SEPCOMPILEINFO 21214300
|
|
, EXTERNALINF 21214400
|
|
, AUTHORITYLINK 21214500
|
|
, REQUIRED 21214600
|
|
, AUTHORITY 21214700
|
|
, IRPARAMETER 21214800
|
|
, STACKOLAYABLECORE 21214820
|
|
, STACKNONOLAYABLECORE 21214840
|
|
; 21215000
|
|
WORD READYQBOTTOM 21216000
|
|
, READYQLINK 21217000
|
|
, FPBDESCRIPTOR 21218000
|
|
, AITDESCRIPTOR 21219000
|
|
, OATDESCRIPTOR 21220000
|
|
, OLAYFILEDESCRIPTOR 21221000
|
|
, FIRSTMSCW 21221100
|
|
, FIRSTRCW 21221200
|
|
, IRPCW 21221300
|
|
, SECNDMSCW 21221400
|
|
, RETURNCONTROLWD 21221500
|
|
; 21222000
|
|
EVENT ABORTEVENT 21223000
|
|
, REPLYEVENT 21224000
|
|
, AUTHORITYEVENT 21224100
|
|
; 21225000
|
|
USING 21226000
|
|
LOCKED 21227000
|
|
:TO INSERT, VECTORINSERT(REDY ,ENTRY) 21228000
|
|
:TO REARRANGE, STACKQREARRANGE(READYINDICATOR) 21229000
|
|
:EMPTY IF REAL(M[NAME(WRONGTYPEREADYQHEAD)])=0 21230000
|
|
:TO INSERTINQ, INSERTINQUEUE(REDY ,INDEX) 21231000
|
|
: TO MOVETONEXTINREADY ,NEXTPROCESS 21232000
|
|
: TO MOVEFROMSHEET, SELECTION 21233000
|
|
; 21234000
|
|
21235000
|
|
21236000
|
|
DEFINE FIRSTATLEVEL = FIRSTREADYF # 21237000
|
|
, LASTATLEVEL = LASTREADYF # 21238000
|
|
; 21239000
|
|
FIELD COUNTATLEVEL = 45:20 21240000
|
|
; 21241000
|
|
LAYOUT LEVELFORMAT ( FIRSTATLEVEL 21241010
|
|
, LASTATLEVEL 21241020
|
|
,COUNTATLEVEL 21241030
|
|
); 21241040
|
|
DEFINE DEFAULTPRIORITY= 5 # 21241100
|
|
; 21241200
|
|
COMMENT FOLLOWING ARE THE CURRENT WEIGHTING COEFFICIENTS OF THE 21242000
|
|
SCHEDULING ALGORITHMS. THEY ARE PURELY TEMPORARY FOR THE 21243000
|
|
FOLLOWING REASONS : 21244000
|
|
A THEIR DERIVATION WAS PURELY ARBITRARY. AS YET THERE HAS 21245000
|
|
BEEN NO ATTEMPT TO ARRIVE AT GOOD VALUES. FURTHER ANALYSIS21246000
|
|
,SIMULATION AND EXPERIENCE ARE REQUIRED 21247000
|
|
B THE VALUES OF THE COEFFICIENTS WILL BE DYNAMIC RATHER 21248000
|
|
THAN FIXED AS SHOWN BELOW 21249000
|
|
; 21250000
|
|
REAL DECLAREDPRIORITYWEIGHT ~ 1.0 21251000
|
|
21252000
|
|
%)TIMES IN SECS21253000
|
|
, READYTIMEWEIGHT ~ 0.0017 %)THUS 1 ADDED 21254000
|
|
, WAITTIMEWEIGHT ~ 0.0017 %)EVERY 10 OR 21255000
|
|
, ELAPSEDTIMEWEIGHT ~ 0.00017 %)HUNDRED MINS 21256000
|
|
%)TO PRIORITY 21257000
|
|
21258000
|
|
, TARGETTIMEWEIGHT ~ 0.1 21259000
|
|
, COREWEIGHT ~ 0.002 21260000
|
|
, TIMEINSCHEDULEWEIGHT ~ 0.0017 21261000
|
|
; 21262000
|
|
QUEUE SHEETQ :WRONGTYPESHEETQHEAD ( 21263000
|
|
SHEETBOTTOM 21264000
|
|
, SHEETLINK 21265000
|
|
, SHEETCORE 21266000
|
|
, SHEETPRIORITY 21267000
|
|
, PROCESSLIMITINSHEET 21268000
|
|
, IOLIMITINSHEET 21269000
|
|
, FPBDESCRIPTORINSHEET 21270000
|
|
, COMMONVALUEINSHEET 21271000
|
|
, PROCESSNATURE 21272000
|
|
, FIRSTPARAMETER 21272200
|
|
, LASTPARAMETER 21272400
|
|
, DUMMYSHEET3 21272600
|
|
, DUMMYSHEET4 21272800
|
|
, TARGETTIMEINSHEET 21273000
|
|
, SCHEDULEID 21274000
|
|
, TIMEENTEREDINSHEET 21275000
|
|
, FIRSTXINSHEET 21276000
|
|
, SHEETCODEFILEDESCRIPTOR 21277000
|
|
, SHEETCODEFILENAMEDESCRIPTOR 21278000
|
|
, COLLAPSEDNAME 21279000
|
|
, STACKSIZEINSHEET 21280000
|
|
, SEPARATELYCOMPILEDINFO 21281000
|
|
, EXTERNALINFO 21282000
|
|
, D1DESCRIPTOR 21283000
|
|
, D2DESCRIPTOR 21284000
|
|
, PREVIOUSPROGRAM 21285000
|
|
, NEXTPROGRAM 21286000
|
|
, DUMMYSHEET5 21286020
|
|
, DUMMYSHEET6 21286040
|
|
, DUMMYSHEET7 21286060
|
|
, DUMMYSHEET8 21286080
|
|
, DUMMYSHEET9 21286100
|
|
, AUTHORITYLINKINSHEET 21286120
|
|
, REQUIREDINSHEET 21286140
|
|
, AUTHORITYINSHEET 21286160
|
|
, AUTHORITYEVENTINSHEET 21286180
|
|
, FIRSTMSCWINSHEET 21286200
|
|
, FIRSTRCWINSHEET 21286220
|
|
, IRPARAMETERINSHEET 21286240
|
|
, IRPCWINSHEET 21286260
|
|
, SECNDMSCWINSHEET 21286280
|
|
, RETURNCONTROLWORDINSHEET 21286300
|
|
); 21287000
|
|
VALUE SHEETBOTTOM 21288000
|
|
, SHEETLINK 21289000
|
|
, SHEETCORE 21290000
|
|
, SHEETPRIORITY 21291000
|
|
, PROCESSLIMITINSHEET 21292000
|
|
, IOLIMITINSHEET 21293000
|
|
, FPBDESCRIPTORINSHEET 21294000
|
|
, COMMONVALUEINSHEET 21295000
|
|
, TARGETTIMEINSHEET 21296000
|
|
, SCHEDULEID 21297000
|
|
, TIMEENTEREDINSHEET 21298000
|
|
, PROCESSNATURE 21299000
|
|
, FIRSTPARAMETER 21299200
|
|
, LASTPARAMETER 21299400
|
|
, FIRSTXINSHEET 21300000
|
|
, SHEETCODEFILEDESCRIPTOR 21301000
|
|
, SHEETCODEFILENAMEDESCRIPTOR 21302000
|
|
, COLLAPSEDNAME 21303000
|
|
, STACKSIZEINSHEET 21304000
|
|
, SEPARATELYCOMPILEDINFO 21305000
|
|
, EXTERNALINFO 21306000
|
|
, D1DESCRIPTOR 21307000
|
|
, D2DESCRIPTOR 21308000
|
|
, PREVIOUSPROGRAM 21309000
|
|
, NEXTPROGRAM 21310000
|
|
, AUTHORITYLINKINSHEET 21310020
|
|
, REQUIREDINSHEET 21310040
|
|
, AUTHORITYINSHEET 21310060
|
|
, FIRSTMSCWINSHEET 21310080
|
|
, FIRSTRCWINSHEET 21310100
|
|
, IRPARAMETERINSHEET 21310120
|
|
, IRPCWINSHEET 21310140
|
|
, SECNDMSCWINSHEET 21310160
|
|
, RETURNCONTROLWORDINSHEET 21310180
|
|
; 21311000
|
|
REAL SHEETCORE 21312000
|
|
, SHEETPRIORITY 21313000
|
|
, PROCESSLIMITINSHEET 21314000
|
|
, IOLIMITINSHEET 21315000
|
|
, COMMONVALUEINSHEET 21316000
|
|
, TARGETTIMEINSHEET 21317000
|
|
, SCHEDULEID 21318000
|
|
, TIMEENTEREDINSHEET 21319000
|
|
, PROCESSNATURE 21320000
|
|
, COLLAPSEDNAME 21321000
|
|
, STACKSIZEINSHEET 21322000
|
|
, SEPARATELYCOMPILEDINFO 21323000
|
|
, EXTERNALINFO 21324000
|
|
21324020
|
|
21324040
|
|
, DUMMYSHEET3 21324060
|
|
, DUMMYSHEET4 21324080
|
|
, DUMMYSHEET5 21324100
|
|
, DUMMYSHEET6 21324120
|
|
, DUMMYSHEET7 21324140
|
|
, DUMMYSHEET8 21324160
|
|
, DUMMYSHEET9 21324180
|
|
, AUTHORITYLINKINSHEET 21324200
|
|
, REQUIREDINSHEET 21324220
|
|
, AUTHORITYINSHEET 21324240
|
|
; 21325000
|
|
WORD SHEETBOTTOM 21326000
|
|
, SHEETLINK 21327000
|
|
, FPBDESCRIPTORINSHEET 21328000
|
|
, SHEETCODEFILEDESCRIPTOR 21329000
|
|
, SHEETCODEFILENAMEDESCRIPTOR 21330000
|
|
, D1DESCRIPTOR 21331000
|
|
, D2DESCRIPTOR 21332000
|
|
, FIRSTMSCWINSHEET 21332020
|
|
, FIRSTRCWINSHEET 21332040
|
|
, IRPARAMETERINSHEET 21332060
|
|
, IRPCWINSHEET 21332080
|
|
, SECNDMSCWINSHEET 21332100
|
|
, RETURNCONTROLWORDINSHEET 21332120
|
|
, FIRSTXINSHEET 21333000
|
|
; 21334000
|
|
REFERENCE PREVIOUSPROGRAM 21335000
|
|
, FIRSTPARAMETER 21335200
|
|
, LASTPARAMETER 21335400
|
|
, NEXTPROGRAM 21336000
|
|
; 21337000
|
|
EVENT 21337020
|
|
AUTHORITYEVENTINSHEET 21337040
|
|
; 21337100
|
|
USING 21338000
|
|
LOCKED 21339000
|
|
:TO INSERT, VECTORINSERT(SHEETI ,ENTRY) 21340000
|
|
:TO REARRANGE, STACKQREARRANGE(SHEETINDICATOR) 21341000
|
|
:EMPTY IF REAL(M[NAME(WRONGTYPESHEETQHEAD)])=0 21342000
|
|
: NEXTINDEX = NEXTINSCHEDULE 21343000
|
|
; 21344000
|
|
DEFINE MOVETONEXTINREADYQ = MOVETONEXTINREADY(READYQ)# 21345000
|
|
, MOVETONEXTONEINREADYQ = MOVETONEXTINREADYQ # 21346000
|
|
, NEXTSTACKINREADYQ = READYQHED.FIRSTREADYF# 21347000
|
|
, NOTHINGTODO = (EMPTY(READYQ) AND EMPTY(SHEETQ))# 21347100
|
|
; 21348000
|
|
WORD WORDREADYQHEAD = WRONGTYPEREADYQHEAD 21349000
|
|
, WORDSHEETQHEAD = WRONGTYPESHEETQHEAD 21350000
|
|
; 21351000
|
|
DEFINE FILLARRAY(ARAY,VALU ,LENGTH) 21352000
|
|
= REPLACE POINTER(ARAY) BY VALU FOR LENGTH 21353000
|
|
OVERWRITE # 21354000
|
|
; 21355000
|
|
21356000
|
|
QUEUE TERMINATEQ:WRONGTYPETERMINATEQHEAD(DUMMY); REAL DUMMY; 21357000
|
|
USING 21358000
|
|
LOCKED 21358200
|
|
: TO INSERTINQ , INSERTINQUEUE(TERMINATEI,INDEX) 21358400
|
|
: EMPTY IF REAL(M[NAME(WRONGTYPETERMINATEQHEAD)])= 0 21358600
|
|
: TO REMOVE, STACKQREMOVE(TERMINATEI,INDEX) 21359000
|
|
; 21360000
|
|
DEFINE NEXTINTERMINATEQ=TERMINATEQHEAD.FIRSTREADYF # 21361000
|
|
; 21361500
|
|
WORD WORDTERMINATEQHEAD = WRONGTYPETERMINATEQHEAD ; 21362000
|
|
REAL READYQHED =WRONGTYPEREADYQHEAD 21363000
|
|
, TERMINATEQHEAD = WRONGTYPETERMINATEQHEAD 21364000
|
|
, SHEETQHEAD=WRONGTYPESHEETQHEAD 21365000
|
|
; 21366000
|
|
21367000
|
|
21368000
|
|
21369000
|
|
DEFINE FORWARDLINKSF = FORWARDLINKF # 21370000
|
|
, SELFIDENTSF = SELFIDENTF # 21371000
|
|
, BACKWARDLINKSF = BACKWARDLINKF # 21372000
|
|
; 21373000
|
|
21374000
|
|
21375000
|
|
REAL FIRSTLOK 21376000
|
|
; 21377000
|
|
LAYOUT LINKWORD ( FORWARDLINKSF 21378000
|
|
, SELFIDENTSF 21379000
|
|
, BACKWARDLINKSF 21380000
|
|
) 21381000
|
|
; 21382000
|
|
BOOLEAN MUSTREARRANGE 21383000
|
|
; 21384000
|
|
DEFINE RUNRETURNCONTROLWORD = RUNPCW&RETURNCONTROLWORD 21385000
|
|
(,*,*,*,*,*,*) # 21386000
|
|
; 21387000
|
|
21388000
|
|
DEFINE LOOKFORSOMETHING = 21388200
|
|
BEGIN 21388300
|
|
UNLOCK(READYQ); 21388320
|
|
IF NOTFIRSTWAIT AND NOT BUSY(INDEPENDENTRUNNERLOK) 21388400
|
|
THEN FORK(STATUS,0); 21388500
|
|
ALLOW; ALLOW; DISALLOW; 21388600
|
|
GO LOOKFORNEWPROCESS; 21388700
|
|
END # ; 21388800
|
|
21389000
|
|
21390000
|
|
DEFINE TIMEOFDAY = SCANIN(TIMEOFDAYWORD) # 21391000
|
|
; 21392000
|
|
LAYOUT JOBTIME ( TIMEOFDAYF = 47:36) 21393000
|
|
; 21394000
|
|
REAL SHEETENTRYSIZE ~ SIZE(SHEETQ)-4; 21394200
|
|
DEFINE READYENTRYSIZE=SHEETENTRYSIZE # 21394300
|
|
, FIXEDIRSIZE = SHEETENTRYSIZE # 21394400
|
|
; 21394500
|
|
REFERENCE DUMMYREF; 21395000
|
|
REAL NEXTINREADYVECTOR 21395100
|
|
, NEXUNSHEETVECTOR 21395200
|
|
; 21395300
|
|
SAVE EVENT ARRAY HOLEINVECTOR[2] 21395400
|
|
; 21395500
|
|
DEFINE PUTINJOBIDANDTIME(S,N) 21395600
|
|
=S[JOBIDPLACE]~N&JOBTIME(S[TIMEENTEREDPLACE] 21395700
|
|
~TIMEOFDAY)# 21395800
|
|
; 21395900
|
|
COMMENT *** FOLLOWING IS DUMMY UNTIL COREFACTOR DEFINED; 21399000
|
|
BOOLEAN COREFACTOR; COMMENT TRUE IF MEMORY USAGE IS SATIS- 21400000
|
|
FACTORY FOR NEW PROCESS INITIATION; 21400100
|
|
DEFINE FIRSTBITPH = 20 # 21400200
|
|
, LENGTHPH = 5 # 21400300
|
|
, FIRSTBITPC = 15 # 21401000
|
|
, LENGTHPC = 8 # 21401500
|
|
; 21402000
|
|
LAYOUT NATUREOFPROCESS(PROCESSHISTORYF=FIRSTBITPH:LENGTHPH 21402500
|
|
,PROCESSCLASSF= FIRSTBITPC:LENGTHPC ) 21403000
|
|
; 21403200
|
|
DEFINE AD1STACK 21403500
|
|
= 0 # 21404000
|
|
, NORMAL 21404500
|
|
= 1 # 21405000
|
|
, XSED 21405500
|
|
= 2 # 21406000
|
|
, DSED 21406500
|
|
= 3 # 21407000
|
|
, DEPENDENT 21407200
|
|
= 4 # 21407400
|
|
, INDEPENDENT 21407600
|
|
= 5 # 21407800
|
|
, TERMINATEIR 21408000
|
|
= 6 # 21408200
|
|
; 21408800
|
|
COMMENT THE FOLLOWING ARE VALUES FOR PROCESSCLASS; 21409000
|
|
DEFINE GOJOB = 0 # 21410000
|
|
, EXECUTEJOB= 1 # 21411000
|
|
, COMPILENGOJOB= 10# 21412000
|
|
, COMPILENSYNTAXJOB= 11# 21413000
|
|
, COMPILETOLIBRARYJOB=12# 21414000
|
|
, COMPILETOLIBRARYANDGOJOB = 19 # 21414100
|
|
, RUNJOB = 20# 21415000
|
|
, LIBRARYNGOJOB = 6# 21415100
|
|
, COMPILENSYNTAXOBJECT = 7# 21415200
|
|
; 21416000
|
|
DEFINE FIRSTCOMPILEROPTION = COMPILENGOJOB # 21416200
|
|
, LASTCOMPILEROPTION = COMPILETOLIBRARYJOB # 21416300
|
|
; 21416400
|
|
FIELD INITIATESTACKF = 21:1 21416500
|
|
; 21416600
|
|
DEFINE COMPILEFORSYNTAX(P) = 21417000
|
|
P.PROCESSCLASSF = COMPILENSYNTAXOBJECT#; 21418000
|
|
COMMENT DIRECTORY MANAGEMENT GLOBALS; 23000000
|
|
DEFINE DIRECTORYBITE = 90 #, %THE SIZE OF A DIRECTORY RECORD 23001000
|
|
SEGMENTSPERDIRECTORYBITE = 3 #, 23002000
|
|
SYSTEMDIRECTORYINDEX = 0 # %INDEX INTO DISKFILEHEADERS 23002100
|
|
; 23003000
|
|
ARRAY DISKFILEHEADERS[*,*]; 23003100
|
|
INTERLOCK HEADERLOCK; 23003200
|
|
ARRAY DISKFILEHEADERSDOPEVECTOR = DISKFILEHEADERS [*]; 23003250
|
|
REAL DISKB;%KLUDGE FOR SIMULATOR"S DIRECTORY SEARCH 23003301
|
|
DEFINE DIRECTORYLOCK = HEADERLOCKS[0] # 23003310
|
|
, HEADERSTOSTARTWITH = 10 # 23003320
|
|
; 23003330
|
|
INTERLOCK ARRAY HEADERLOCKS[HEADERSTOSTARTWITH]; 23003335
|
|
ARRAY SYSTEMDIRECTORY[*]; 23003340
|
|
LAYOUT DIRECTORYSEARCHCODES( 23003355
|
|
DCODE1 = 38:15 23003360
|
|
,DCODE2 = 23:8 23003370
|
|
,DCODE3 = 14:15 23003375
|
|
); 23003380
|
|
COMMENT DEFINES FOR DCODE3 FIELD VALUE WHEN DIRECTORYSEARCH IS 23003383
|
|
UNSUCCESSFUL- (WHEN IT RETURNS NEGATIVE VALUE); 23003387
|
|
DEFINE NOSUCHFILE=1#, 23003390
|
|
NOTAVALIDFILENAME=2#, % DIRECTORY NAME MISSING 23003393
|
|
FILETHEREBUTLOCKED=3#, 23003395
|
|
FILEWITHWRONGGENEALOGY=4#; 23003397
|
|
LAYOUT STANDARDMASSADDRESSWORD( %STANDARD MASS STORAGE 23004000
|
|
%ADDRESS FORMAT 23005000
|
|
VOLUMEKIND = 47:3 %VOLUME TYPE 23006000
|
|
, VOLUMENOEUNOF = 44:25 %VOLUME OR EU UNIT 23007000
|
|
%AS PER ABOVE. 23008000
|
|
, BLOCKADDRESSF = 19:20 %BLOCK ADDRESS OR BLOCK23009000
|
|
%NUMBER. 23010000
|
|
); 23011000
|
|
DEFINE VOLUMENOF = VOLUMENOEUNOF # 23012000
|
|
; 23013000
|
|
COMMENT EUNOF = VOLUMENOEUNOF%UNIT NO. OF EU 23014000
|
|
, DISKADDRESS = BLOCKADDRESSF 23015000
|
|
; 23016000
|
|
DEFINE %THESE DEFINITIONS ARE TO 23017000
|
|
%BE USED FOR "VOLUMEKIND" 23018000
|
|
%IN STANDARD MASS ADDRESS 23019000
|
|
%WORDS 23020000
|
|
FIXEDDISK = 0# 23021000
|
|
, DISKPACK = 1# 23022000
|
|
, TAPE = 2# 23023000
|
|
; 23024000
|
|
COMMENT: 23024050
|
|
THE FOLLOWING ARE THE FIRST FOUR WORDS OF A DIRECTORY RECORD. 23024100
|
|
SUCCESSOR RECORD = WORD 0 23024150
|
|
PREDICESSOR RECORD = WORD 1 23024200
|
|
FIRST AVAILABLE NAME BLOCK INDEX = WORD 2 23024250
|
|
RECORD NUMBER OF THIS RECORD = WORD 3 23024300
|
|
NOTE: 23024350
|
|
THERE IS ALWAYS AT LEAST ONE WORD AT THE END OF A RECORD 23024400
|
|
WHICH IS USED AS A STOPPER. IT HAS A VALUE OF EITHER 23024450
|
|
THREE OR ONE, AS DESCRIBED BY "ENDER" IN THE NAME BLOCK 23024500
|
|
DESCRIPTION. 23024550
|
|
; 23024600
|
|
COMMENT: 23025000
|
|
THE FOLLOWING IS A DESCRIPTION OF THE NAME ENTRY FOR A FILE 23026000
|
|
IN A DIRECTORY RECORD. 23027000
|
|
; 23028000
|
|
LAYOUT DIRECTORYENTRYINFOWORD( %WORD 0 23029000
|
|
USEMEDIUMF = 47:5 %STORAGE MEDIUM WHERE 23030000
|
|
%FILE IS SUPOSED TO BE 23031000
|
|
%WHEN IT IS IN USE. 23032000
|
|
%USEMEDIUM=0 MEANS THAT23033000
|
|
%IT IS WHERE IT SHOULD 23034000
|
|
%BE. 23035000
|
|
, FILEKINDF = 36:8 %FILE TYPE FOR THE FILE23038000
|
|
%(PROGRAM,DIRECTORY...)23039000
|
|
, HEADERSIZEF = 28:10 %SIZE (IN WORDS) OF THE23040000
|
|
%HEADER FOR THIS FILE. 23041000
|
|
, ENDER = 1:2 %DIRECOTRY END MARKER 23042000
|
|
% =3 IS END OF RECORD 23043000
|
|
% =1 IS END OF FILE 23044000
|
|
%IF THE WORD IS -1 THEN23044100
|
|
%IT MARKS THE END OF A 23044200
|
|
%SCRAMBLED DIRECTORY. 23044300
|
|
) 23045000
|
|
COMMENT ADDRESSOFFILEHEADER = STANDARDMASSADDRESSWORD-WORD 1;23046000
|
|
, DIRECTORYENTRYFILENAME( %WORD 2 23047000
|
|
CHARACTERCOUNTF= 47:8 %CHARACTER COUNT FOR 23048000
|
|
%FILE NAME. 23049000
|
|
, FIRSTFIVECHRS = 39:40 %FIRST FIVE EBCDIC 23050000
|
|
%CHARACTERS OF THE FILE23051000
|
|
%NAME. (LEFT JUSTIFIED23052000
|
|
%WITH TRAILING ZEROS IF23053000
|
|
%NECESSARY. 23054000
|
|
) 23055000
|
|
; 23056000
|
|
COMMENT THE NEXT TWO WORDS CONTAIN THE REST OF THE NAME. THE NAME 23057000
|
|
IS LIMITED TO 17 CHARACTERS; 23058000
|
|
COMMENT: 23069000
|
|
THE FOLLOWING IS A DESCRIPTION OF A FILE HEADER 23070000
|
|
; 23071000
|
|
COMMENT ADDRESSOFHEADER = STANDARDMASSADDRESSWORD 23072000
|
|
THIS WORD IS WORD -1 23073000
|
|
OF THE CORE COPY OF THE23074000
|
|
HEADER RELATIVE TO THE 23075000
|
|
DESCRIPTOR RETURNED BY 23076000
|
|
DIRECTORY SEARCH 23077000
|
|
IT IS IN THE MEMORY LINK 23078000
|
|
; 23079000
|
|
LAYOUT COREADDRANDLOCKER( %WORD 0 23080000
|
|
COREADDRF = 19:20 %ON DISK THIS FIELD IS 23086000
|
|
%THE POINTER TO THE 23087000
|
|
%CORE COPY OF THIS 23088000
|
|
%HEADER. IF THIS FIELD23089000
|
|
%IS ZERO, THERE IS NO 23090000
|
|
%COPY IN CORE. 23091000
|
|
) 23092000
|
|
, HEADERINFOONE( %WORD 1 23093000
|
|
UPDATEBITF = 47:1 %TRUE IF FILE UPDATED 23094000
|
|
, OPENCOUNTF = 46:10 %NUMBER OF PROCESSES 23095000
|
|
%LOOKING AT THE HEADER.23096000
|
|
, FILEKINDF %SAME AS IN 23097000
|
|
%DIRECTORYENTRYINFOWORD23098000
|
|
, HEADERSIZEF %SAME AS IN 23099000
|
|
%DIRECTORYENTRYINFOWORD23100000
|
|
, SECURITYCODEF = 18:4 %CLASS OF SECURITY ON 23101000
|
|
%THIS FILE. 23102000
|
|
, SECINFOSIZEF = 14:8 %SIZE (IN WORDS) OF THE23103000
|
|
%SECURITY INFORMATION 23104000
|
|
%IN THIS HEADER. 23105000
|
|
, LOGICALMODEF = 3:4 %EBCDIC, DOUBLE, ETC...23106000
|
|
) 23108000
|
|
, HEADERINFOTWO( % FILE ORGANIZATION 23109000
|
|
PACKEDB = 47:1 % (IF 1 FILE IS PACKED)23110000
|
|
, PROTECTIONF = 46:1 % (1 IF FILE PROTECTED)23110100
|
|
, PERMANENCYF = 45:1 % (1 IF TEMPORARY FILE)23110200
|
|
, RECORDTYPEF = 42:3 % RECORD TYPE 23111000
|
|
, FILEORGF = 39:40 % FILE ORGANIZATION 23113000
|
|
) 23114000
|
|
COMMENT WORD 3 IS FIB TANKDATA2; 23115000
|
|
COMMENT ENDOFFILECOUNT WORD 4; 23116000
|
|
, ROWINFO( %WORD 5 23117000
|
|
NUMROWSF = 29:10 %NUMBER OF ROWS FOR 23120000
|
|
%WHICH ROW ADDRESS 23121000
|
|
%WORDS ARE ASSIGNED. 23122000
|
|
, ROWSIZEF = 19:20 %SIZE (IN SEGMENTS) OF 23123000
|
|
%EACH ROW . 23124000
|
|
) 23125000
|
|
, NAMEQUALIFICATIONINFO( %WORD 6 23126000
|
|
SAVEFACTORF = 47:10 %SAVE TIME 23127000
|
|
, CREATEDDATEF = 37:18 %WHEN THE FILE WAS MADE23128000
|
|
, GENERATIONNOF = 19:15 %USASCI GENERATION NO. 23128100
|
|
, MAXGENERATIONSF= 4:5 %PURGE ANY OVER THIS 23128200
|
|
, GENERATIONNO = 19:20 %USASCI GENERATION NO. 23129000
|
|
) 23130000
|
|
, ACCESSINFO( %WORD 7 23131000
|
|
LASTACCESSDATEF=17:18 %DATE LAST USED 23132000
|
|
) 23133000
|
|
COMMENT WORD 8 IS USED FOR VARIOUS PURPOSES DEPENDING ON THE FILE KIND.23134000
|
|
FOR DIRECTORIES, IT IS THE SCRAMBLE MODULUS. 23134100
|
|
FOR CODE FILES, IT IS THE STACK NUMBER FOR THE D1 STACK WHEN 23134200
|
|
A COPY OF THE PROGRAM IS RUNNING. 23134300
|
|
; 23134900
|
|
COMMENT SPARE (WORD 9) = RESERVED FOR EXPANSION; 23135000
|
|
COMMENT ROW ADDRESS WORDS IN STANDARD MASS ADDRESS WORD 23136000
|
|
FORMAT. ONE WORD PER ROW FOR 23137000
|
|
NUMROWS ROWS; 23138000
|
|
COMMENT SECURITYINFO SECINFOSIZE WORDS; 23139000
|
|
; 23141000
|
|
DEFINE FIRSTROWINDEX = 10 # 23141100
|
|
, FIRSTROWADDRESS(HDR) = HDR[FIRSTROWINDEX] # 23141120
|
|
, ROWADDRESS(HDR, ROW) = HDR[FIRSTROWINDEX + ROW] # 23141130
|
|
, SCRAMBLEMOD(HDR) = HDR[8] # 23141150
|
|
, HEADERSIZE(HDR) = HDR[1].HEADERSIZEF # 23141200
|
|
, HEADERUPDATED(HDR) = TRUE # % TEMPORARY 23141250
|
|
, OPENCOUNT(HDR) = HDR[1].OPENCOUNTF # 23141300
|
|
, ROWSIZE(HDR) = HDR[5].ROWSIZEF # 23141350
|
|
, CRUNCHED(HDR) = 0 # COMMENT TEMPORARY ONLY; 23141400
|
|
, NUMBEROFROWS(HDR) = HDR[5].NUMROWSF # 23141450
|
|
, D1STACKNUMBER(HDR) = HDR[8] # 23141500
|
|
, UPDATED(HDR) = HDR[1].UPDATEBITF# 23141550
|
|
, DISKBLOCKING(HDR) = HDR[3]# 23141600
|
|
, FIBINFO(HDR) = HDR[2]# 23141650
|
|
; 23141950
|
|
DEFINE %THESE DEFINITIONS ARE TO 23142000
|
|
%BE USED FOR "FILEKIND" IN 23143000
|
|
%FILE HEADERS AND DIRECTORY 23144000
|
|
%NAME ENTRIES 23145000
|
|
DIRECTORY = 0# 23146000
|
|
, DATA = 1# 23147000
|
|
; 23148000
|
|
COMMENT *** FOLLOWING FIELD AND DEFINE ARE TEMPORARY ; 23177100
|
|
FIELD TYPEINFOF = 35: 36 ; 23177200
|
|
DEFINE COMPILERS = 0 # ; 23177300
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24000000
|
|
% I/O INTRINSIC DECLARATIONS %24001000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24002000
|
|
% %24003000
|
|
% * WARNING * %24004000
|
|
% %24005000
|
|
% DO NOT REFER TO FIB WORDS OR FIELDS DIRECTLY. INSERT YOUR FIB %24006000
|
|
% REFERENCE INTO THE MASTER-FIB DEFINE LIST. ONLY THIS LIST WILL %24007000
|
|
% BE CHECKED WHEN IT IS NECESSARY TO CHANGE THE DEFINITION OF A FIB %24008000
|
|
% WORD OR FIELD. %24009000
|
|
% (HONI SOIT QUI MAL Y PENSE) %24010000
|
|
% %24011000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24012000
|
|
24013000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24252000
|
|
% FIXED PART OF FILE INFORMATION BLOCK %24253000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24254000
|
|
DEFINE 24255000
|
|
%%%%% SIMPLE I/O 24256000
|
|
FIBSIZE = FIB[0]#, % SIZE OF FILE INFO BLOCK 24257000
|
|
RECORDSTATUS = FIB[1]#, 24258000
|
|
FILESTATUS = FIB[2]#, 24259000
|
|
TANKDATA1 = FIB[3]#, % BLOCK SIZE INFORMATION 24260000
|
|
TANKDATA2 = FIB[4]#, % RECORD SIZE INFORMATION 24261000
|
|
TANKDATA3 = FIB[5]#, % BUFFER SIZE INFORMATION 24262000
|
|
IOINFO = FIB[6]#, % HARDWARE INFORMATION 24263000
|
|
IOADESC = FIBW[7]#, % TOP IOAREA 24264000
|
|
LBLEQTN = FIBW[8]#, % LABEL EQUATION BLOCK 24265000
|
|
%%%%% REGULAR I/O 24266000
|
|
BUFDESC = FIBW[9]#, % BUFFER DESCRIPTOR 24267000
|
|
UNITSLEFT = FIB[10]#, % WORDS OR CHARACTERS LEFT 24268000
|
|
BLOCKCOUNT = FIB[11]#, % BLOCK COUNT OR PAGE COUNT 24269000
|
|
RECORDCOUNT = FIB[12]#, % RECORD COUNT OR LINE COUNT24270000
|
|
LABELATT = FIB[13]#; % LABEL ATTRIBUTES 24272000
|
|
LAYOUT 24273000
|
|
FIBSIZEL ( 24274000
|
|
FIBFXD = 47:8, % SIZE OF FIXED PART 24275000
|
|
FIBOPT = 39:40), % VARIABLE PART MASK 24276000
|
|
RECORDSTATUSL ( 24277000
|
|
MTBUF = 0:1, % BUFFER NEEDS I/O 24278000
|
|
UFEAT = 1:1, % UNIT FEATURE 24279000
|
|
DRCDSIZE = 2:1, % RECORD SIZE REQUIRED OR DESIRED24280000
|
|
EXCEPTION = 3:1, % EXCEPTION CONDITION 24281000
|
|
OPNOUT = 4:1, % OPEN OUTPUT 24282000
|
|
OPNIN = 5:1, % OPEN INPUT 24283000
|
|
DIO = 6:1, % DIRECTED I/O (DATA COMM) 24284000
|
|
SIO = 7:1), % SIMPLE I/O 24285000
|
|
FILESTATUSL ( 24286000
|
|
% EXCEPTION CONDITIONS 24287100
|
|
STATEF = 9:10, % STATE OF FILE 24287200
|
|
% 0:1 = EOF (DISCONNECT) 24287300
|
|
% 1:1 = PARITY ERROR 24287400
|
|
% 2:1 = DATA ERROR 24287500
|
|
% 3:1 = LOCKOUT 24287600
|
|
% 4:1 = NO INPUT(TIME OUT) 24287700
|
|
% 5:1 = BREAK 24287800
|
|
% ERROR HANDLING LEVEL 24287900
|
|
ERRLEVEL = 12:2, % LEVEL OF ERROR RECOVERY 24288000
|
|
% 0 = FULL SYSTEM ACTION 24288100
|
|
% 1 = INHIBIT COPY 24288200
|
|
EXCEPTIONT= 13:1, % EXCEPTION ACTION TAKEN 24288300
|
|
OPT = 14:1, % OPTIONAL 24288400
|
|
IMPOPEN = 15:1, % (1 IF IMPLICIT OPEN IS NOT OK) 24288410
|
|
% EXCEPTION ACTION 24288500
|
|
% CODES ARE: 24288600
|
|
% 0 = MARK AND EXIT 24288700
|
|
% 1 = EVENT OR IMPLICIT LABEL 24288800
|
|
% 2 = RETURN OR USE ROUTINE 24288900
|
|
% 3 = TERMINATE 24289000
|
|
EOFACTION = 22:3, 24289100
|
|
PARACTION = 25:3, 24289200
|
|
DATACTION = 28:3, 24289300
|
|
LOCACTION = 31:3, 24289400
|
|
NOIACTION = 34:3, 24289500
|
|
BREACTION = 37:3), 24289600
|
|
TANKDATA1L ( 24345000
|
|
BLKFUNNY = 47:1, % ALTERNATE AREA IN USE 24346000
|
|
BLKD = 46:1, % BLOCKED 24347000
|
|
MLTBLK = 45:1, % MULTI-PHYSICAL-RECORD BLOCK 24348000
|
|
PNTR = 44:1, % (1 IF POINTER TO BE RETURNED) 24349000
|
|
INTMODE = 43:3, % INTERNAL RECORD FORM - 24350000
|
|
% RECORD DESCRIPTOR TYPE: 24351000
|
|
% 0 = SINGLE DATA 24352000
|
|
% 1 = DOUBLE DATA 24353000
|
|
% 2 = PACKED-DECIMAL (4) 24354000
|
|
% 3 = BCL (6) 24355000
|
|
% 4 = EBCDIC (8) 24356000
|
|
% 5 = ASCII (8) 24357000
|
|
RCDUNTS = 40:2, % RECORD UNITS: 24358000
|
|
% 0 = WORDS 24359000
|
|
% 1 = CHARACTERS 24360000
|
|
RCRDTYPE = 38:4, % RECORD TYPE 24361000
|
|
% 0 = "F" - FIXED LENGTH 24362000
|
|
% 1 = "D" = VARIABLE, LENGTH24363000
|
|
% IN BINARY IN FIRST 2 24363100
|
|
% CHARACTERS 24363200
|
|
% 2 = "V" - VARIABLE, LENGTH24364000
|
|
% IN DECIMAL IN FIRST 424364100
|
|
% CHARACTERS 24364200
|
|
% 3 = "U" - UNDEFINED, SIZE 24365000
|
|
% PROVIDED EXPLICITLY 24365100
|
|
% 4 = "I" - VARIABLE, LENGTH24366000
|
|
% IN RECORD AT FIXED 24366100
|
|
% LOCATION 24366200
|
|
% 5 = "L" - LINKS 24367000
|
|
% 6 = "Z" - FORTRAN 24367100
|
|
% 7 = DEPENDENT SPECIFICATN 24367200
|
|
% FIXED UP AT OPEN 24368000
|
|
SIZEMODE = 34:3, % SIZE MODE 24369000
|
|
SIZEOFF = 31:16, % SIZE OFFSET 24370000
|
|
SIZESZ = 15:16), % SIZE SIZE 24371000
|
|
TANKDATA2L ( 24372000
|
|
BLOCKSIZE = 47:16, % BLOCK SIZE 24373000
|
|
MINRECSIZE= 31:16, % MINIMUM RECORD SIZE 24374000
|
|
MAXRECSIZE= 15:16), % MAXIMUM RECORD SIZE 24375000
|
|
TANKDATA3L ( 24376000
|
|
BUFFERD = 47:1, % (1 IF BUFFERED - LEVEL 2&3 I/O)24377000
|
|
CNTGS = 44:1, % CONTIGUOUS - BUFFERS ADJACENT 24378000
|
|
BFFRLCK = 45:1, % (1 IF BUFFERS NEED LOCKS) 24378100
|
|
BUFFPROT = 44:1, % (1 IF MUST PROTECT BUFFERS) 24378200
|
|
BEVNT = 43:12, % BUFFER EVENT # 24379000
|
|
BFFRSZ = 31:16, % BUFFER SIZE (IOAREA SIZE) 24380000
|
|
BUFFREQSTD= 15:8, % BUFFERS REQUESTED 24381000
|
|
BUFFASSGND= 7:8), % BUFFERS ASSIGNED 24382000
|
|
IOINFOL ( 24383000
|
|
%%%%% FOR DATACOM USE THIS WORD FOR LAST STATION 24383100
|
|
SKLTNIOCW = 47:27, % SKELETON IOCW 24384000
|
|
UNITNUM = 12:8, % UNIT NUMBER 24385000
|
|
UNITYPP = 4:5), % UNIT TYPE 24386000
|
|
LABELATTL ( 24387000
|
|
LABELUSER = 47:1, % LABEL USE ROUTINES 24388000
|
|
LABELTYP = 46:3, % LABEL TYPE 24389000
|
|
% 0 = B6500 USASI 24390000
|
|
% 1 = UNLABELLED 24391000
|
|
% 2 = SYSTEM STANDARD 24392000
|
|
WRPRND = 17:1, % (1 IF WRAPAROUND SPECIFIED) 24392100
|
|
USERSIZE = 16:4, % NUMBER OF USERS LABELS 24393000
|
|
LBLEQTD = 12:1, % (1 IF HAVE LOCATED FPB) 24394000
|
|
EVNTNO = 11:12); % FILE EVENT # 24395000
|
|
FIELD 24396000
|
|
%%%%% RECORDSTATUS 24397000
|
|
OPENBITS = 9:2, 24398000
|
|
%%%%% FILESTATUS 24398010
|
|
EOFB = 0:1, % END-OF-FILE (DISCONNECT) 24398020
|
|
PARITYB = 1:1, % PARITY ERROR 24398030
|
|
DATAERRORB= 2:1, % DATA ERROR 24398040
|
|
LOCKOUTB = 3:1, % LOCKOUT 24398050
|
|
NOINPUTB = 4:1, % NO INPUT (TIME OUT) 24398060
|
|
BREAKB = 5:1, % BREAK 24398070
|
|
%%%%% IOINFO 24404000
|
|
SIOCWSTANDARD = 45:10; % STANDARD FIELD OF IOCW 24405000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24406000
|
|
% OPTIONAL PART OF FILE INFORMATION BLOCK %24407000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24408000
|
|
DEFINE 24409000
|
|
ALTDESCF = 0#, 24410000
|
|
FIBLOCKF = 1#, 24411000
|
|
FRMTLOCKF = 2#, 24412000
|
|
DISKHDRF = 3#, 24413000
|
|
DISKINFOF = 4#, 24414000
|
|
LIMITSF = 5#, 24415000
|
|
USERSF = 6#, 24416000
|
|
RERUNF = 7#, 24417000
|
|
EOFF = 8#, 24418000
|
|
PARITYP = 9#, 24419000
|
|
NOINPUTF = 10#, 24420000
|
|
BREAKF = 11#, 24421000
|
|
QUEUEFULLF= 12#, 24422000
|
|
INQUEUEF = 13#, 24423000
|
|
TLISTF = 14#, 24424000
|
|
TOWF = 15#, 24425000
|
|
TMISCF = 16#, 24426000
|
|
OUTQUEUEF = 17#, 24426100
|
|
SORTWORDF = 18#, 24426200
|
|
% FIBOVERFLOW=39#, % RESERVED FOR EXPANSION 24426900
|
|
FIIB(FLD) = FIB[FIB0.FIBFXD 24428000
|
|
+ONES(FIB0.[39:FLD])]#, 24429000
|
|
FIIBW(FLD)= FIBW[FIB0.FIBFXD 24430000
|
|
+ONES(FIB0.[39:FLD])]#, 24431000
|
|
FIBB(FLD) = BOOLEAN(FIB0.[39-(FLD):1])#, 24432000
|
|
ALTDESC = FIBW[FIB0.FIBFXD]#, % ALTERNATE DESCRIPTOR 24433000
|
|
% IF BLOCKEDFUNNY THEN DESCRIPTOR FOR ALTERNATE 24434000
|
|
% AREA. IF COPY BLOCKING THEN POINTER TO OTHER 24435000
|
|
% FIB. 24436000
|
|
LOCKER = FIIB(FIBLOCKF)#, % LOGICALRECORD LOCK 24437000
|
|
FLOCK = FIIB(FRMTLOCKF)#, % FORMATTER LOCK 24438000
|
|
DISKHEADER= FIIBW(DISKHDRF)#, % DISK HEADER 24439000
|
|
FILEACCESS= FIIB(DISKINFOF)#, % FILE ACCESS INFORMATION 24440000
|
|
FILELIMITS= FIIB(LIMITSF)#, % FILE LIMITS 24441000
|
|
USEROUTINES=FIIBW(USERSF)#, % USE-ROUTINE-INDEX ARRAY 24442000
|
|
RERUNATT = FIIB(RERUNF)#, % RERUN ATTRIBUTES 24443000
|
|
EOFE = FIIBW(EOFF)#, % END OF FILE EVENT 24444000
|
|
PARITYE = FIIBW(PARITYP)#, % PARITY EVENT 24445000
|
|
NOINPUTE = FIIBW(NOINPUTF)#, % NO INPUT EVENT 24446000
|
|
BREAKE = FIIBW(BREAKF)#, % BREAK EVENT 24447000
|
|
QUEUEFULLE= FIIBW(QUEUEFULLF)#,% QUEUE FULL EVENT 24448000
|
|
INQUEUE = FIIBW(INQUEUEF)#, % INPUT QUEUE 24449000
|
|
TERMINALISTF=FIIBW(TLISTF)#, % TERMINAL LIST 24450000
|
|
TOCCURSWORD=FIIB(TOWF)#, % TERMINAL OCCURS WORD 24451000
|
|
TMISC = FIIB(TMISCF)#, % TERMINAL MISC WORD 24452000
|
|
OUTQUEUE = FIIBW(OUTQUEUEF)#,% OUTPUT QUEUE 24452100
|
|
SORTWORD = FIIB(SORTWORDF)#, % SORT INFO 24452200
|
|
USERS = FIBB(USERSF)#, 24453000
|
|
KLUDGED = 0#; 24454000
|
|
LAYOUT 24455000
|
|
FILEACCESSL ( 24456000
|
|
EXPADRS = 41:1, % (1 IF EXPLICIT ADDRESS IS 24459000
|
|
% PERMITTED WITH SEQUENTIAL 24460000
|
|
% FILE) 24461000
|
|
BEGINO = 40:1, % (1 IF FILE BEGINS AT 1) 24462000
|
|
ACSSTYPE = 39:4, % FILE ACCESS TYPE: 24463000
|
|
% 0 = SERIAL 24464000
|
|
% 1 = RANDOM 24465000
|
|
% 2 = LINKED 24466000
|
|
% 3 = DIRECTED 24467000
|
|
ACSSMODES = 35:1, % (1 IF ACCESS MODE SPECIFIED) 24467100
|
|
ACSSMODE = 34:3, % ACCESS MODE (IF LINKED) 24468000
|
|
% SAME VALUES AS INTMODES 24469000
|
|
ACSSOFF = 31:16, % ACCESS OFFSET 24473000
|
|
ACSSZ = 15:16), % ACCESS SIZE 24474000
|
|
RERUNATTL ( 24475000
|
|
RERUNEOR = 47:2, % RERUN END-OF-REEL 24476000
|
|
% 0 = NONE 24477000
|
|
% 1 = EOR 24478000
|
|
% 2 = RECORDS 24479000
|
|
% 3 = CLOCK UNITS 24480000
|
|
RERUNHERE = 45:1, % RERUN ON THIS TAPE 24481000
|
|
RERUNCOUNT= 31:16, % NUMBER OF RECORDS: ACCUMULATOR 24482000
|
|
RERUNNO = 15:16), % NUMBER OF RECORDS: TARGET 24483000
|
|
TOCWL ( 24484000
|
|
TERMINALSZ= 47:16, % TERMINAL SIZE 24485000
|
|
NUMTERMS = 31:16); % NUMBER OF TERMINALS 24486000
|
|
DEFINE 24487000
|
|
% TERMINAL LIST 24488000
|
|
TOUTQUEUE = TLISTW[TSZ]#, % OUTPUT QUEUE (DIRECTED) 24489000
|
|
TSTATUS = TLIST[TSZ+1]#, % TERMINAL STATUS 24490000
|
|
TFILE = TLISTW[TSZ+2]#, % TERMINAL FILE 24491000
|
|
TTIME = TLIST[TSZ+3]#, % TERMINAL TIME DATA 24492000
|
|
TINQUEUE = TLISTW[TSZ+4]#, % INPUT QUEUE (TERMINAL) 24493000
|
|
TSTAT = TLIST[TSZ+5]#; % TERMINAL STATISTICS 24494000
|
|
DEFINE 24494100
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24494110
|
|
% LABEL-EQUATION BLOCK (LEB) %24494120
|
|
% SAME FORMAT ALSO USED IN LABEL TABLE AND FPB %24494130
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24494140
|
|
% FIXED PART LEB 24494150
|
|
LEBC = LEB[0]#, % BASIC DATA: SIZE,KIND ... 24494160
|
|
GEN1 = LEB[1]#, % REEL, CYCLE, VERSION 24494170
|
|
GEN2 = LEB[2]#, % DATE, SAVE FACTOR 24494180
|
|
DSKS = LEB[3]#, % DISK INFO AND MYUSE,OTHERUSE...24494190
|
|
OPENTIME = LEB[4]#, % TIME FILE OPEN 24494200
|
|
% OPTIONAL PART LEB 24494210
|
|
% BLK1 = LEB[U]#, % FILE TYPE,BLOCK SIZE,MAX REC SZ24494220
|
|
% BLK2 = LEB[U+1]#, % MINIMUM RECORD SIZE 24494230
|
|
% TITLE FOLLOWS LAST WORD OF OPTIONAL PART 24494240
|
|
% LABEL TABLE 24494250
|
|
LCNTRL = UINFOP[U,0]#, 24494260
|
|
LGEN1 = UINFOP[U,1]#, 24494270
|
|
LGEN2 = UINFOP[U,2]#, 24494280
|
|
LMISC = UINFOP[U,3]#, 24494290
|
|
USERFIB = UINFOPW[U,4]#,% SIRW TO USERS FIB 24494300
|
|
LBLK1 = UINFOP[U,5]#, 24494310
|
|
LBLK2 = UINFOP[U,6]#; 24494320
|
|
LAYOUT 24495000
|
|
% LABEL-EQUATION BLOCK (LEB) 24496000
|
|
LEBCNTRL ( 24497000
|
|
FXD = 47:4, % NUMBER OF WORDS IN FIXED PART 24498000
|
|
OPTMASK = 43:15, % OPTIONAL-PART MASK 24499000
|
|
% OPTIONALF = 23:1, % OPTIONAL 24499010
|
|
% FPRTCTD = 20:1, % FILE PROTECTED 24499020
|
|
LPARITY = 19:1, % PARITY (1 IS ODD) 24500000
|
|
DENSITYS = 18:1, % ON IF DENSITY SPECIFIED 24501000
|
|
DENSITYL = 17:2, % DENSITY: 0-800, 1-556, 2-200, 24502000
|
|
% 3-1600 24503000
|
|
LABELTYPES= 15:1, % ON IF LABEL TYPE SPECIFIED 24504000
|
|
LABELTYPEL= 14:4, % LABEL TYPE: 24505000
|
|
% 0 - B6500 USASI 24506000
|
|
% 1 - UNLABELLED 24507000
|
|
% 2 - B5500 24508000
|
|
% 3 - SYSTEM STANDARD 24509000
|
|
% 4 - B3500 USASI 24510000
|
|
% 5 - NON-STANDARD USASI 24511000
|
|
% 6 - BACKUP TAPE 24512000
|
|
% 7 - LIBRARY TAPE 24513000
|
|
% 8 - LOAD-CONTROL TAPE 24514000
|
|
% 9 - SYSTEM TAPE 24515000
|
|
% 10 - B5500 BACKUP 24516000
|
|
% 11 - B5500 LIBRARY 24517000
|
|
EXTFORML = 10:3, % EXTERNAL FORM 24518000
|
|
% PROBLEM WITH UNSPECIFIED Q 24518010
|
|
PTYPEL = 7:8), % PERIPHERAL TYPE 24519000
|
|
%%%%% FOR CARD READERS HAVE ONLY THIS BLOCK PLUS THE NAMES 24520000
|
|
GENEALOGY1 ( 24521000
|
|
CYCLE =38:15, % CYCLE (GENERATION NUMBER) 24522000
|
|
GENVERSN = 23:8, % GENERATION VERSION 24523000
|
|
REELS = 15:1, % ON IF REEL NUMBER SPECIFIED 24524000
|
|
REEL = 14:15), % REEL NUMBER 24525000
|
|
GENEALOGY2 ( 24526000
|
|
% SERIALN = 45:20, % SERIAL # (FOR LABEL TABLE) 24526010
|
|
SAVFACTOR = 25:11, % SAVE FACTOR 24527000
|
|
CRTNDATE = 14:15), % CREATION DATE 24528000
|
|
LMISCL ( % USED IN LABEL TABLE 24529000
|
|
BCNTL = 43:20, % BLOCK COUNT 24530000
|
|
RCNTL = 23:24), % RECORD COUNT 24531000
|
|
DISKSPECL ( 24532000
|
|
DIRECTIONF= 47:1, % (1 IF REVERSED) 24533000
|
|
REVACTIONF= 46:1, % (1 IF OPEN REVERSE GOES 1 REEL)24533100
|
|
DRCTRYF = 43:1, % (1 IF GOES IN DIRECTORY) 24533200
|
|
PACKEDF = 42:1, % PACKED 24533300
|
|
FLEXIBLEF = 41:1, % FLEXIBLE 24533400
|
|
SPEEDF = 40:3, % SPEED 24534000
|
|
OTHERUSEF = 37:2, % OTHER USE 24535000
|
|
MYUSEF = 35:2, % MY USE 24536000
|
|
ACCSSTYPEF= 33:4, % ACCESS TYPE 24537000
|
|
NUMAREAS = 29:10, % NUMBER OF AREAS 24538000
|
|
AREASIZE = 19:20), % AREA SIZE 24539000
|
|
% OPTIONAL PART OF LEB RELATIVE WORD #24540000
|
|
%*************************************************************%24540050
|
|
% POINTER TO INTERNAL NAME (IF ANY) % 124540100
|
|
%*************************************************************%24540110
|
|
BLOCKING1 ( % 224541000
|
|
FILETYPEL = 41:3, % FILE TYPE 24542000
|
|
NONBUFFRDL= 38:1, % NON-BUFFERED 24543000
|
|
BUFFERNOL = 37:6, % NUMBER OF BUFFERS 24544000
|
|
MAXRECSZL = 31:16, % MAXIMUM RECORD SIZE 24545000
|
|
BLOCKSZL = 15:16), % BLOCK SIZE 24546000
|
|
BLOCKING2 ( % 324547000
|
|
MINRECSZL = 15:16); % MINIMUM RECORD SIZE 24548000
|
|
FIELD 24549000
|
|
FPRTCTD = 20:1, % FILE PROTECTED 24550000
|
|
OPTIONALF =23:1, % ON, IF OPTIONAL FILE 24551000
|
|
% GENEALOGY2 24552000
|
|
SERIALN = 45:20; % SERIAL # (FOR LABEL TABLE) 24553000
|
|
DEFINE 24553100
|
|
INTNAME = 0#, 24553110
|
|
BLCKNG1 = 1#, 24553120
|
|
BLCKNG2 = 2#, 24553130
|
|
FRMS = 3#, 24553140
|
|
LEEB(FLD) = LEB[LEBC.FXD+ONES(LEBC.[43:FLD])]#, 24553150
|
|
LEBB(FLD) = BOOLEAN(LEB[LEBC.FXD+ONES(LEBC.[43-FLD:1])])#,24553160
|
|
BLK1 = LEEB(BLCKNG1)#,% FILE TYPE, BLOCKING INFO 24553170
|
|
BLK2 = LEEB(BLCKNG2)#,% MINIMUM RECORD SIZE 24553180
|
|
KLUDGED1 = 0#; 24553190
|
|
DEFINE 24571000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24571100
|
|
% FILE LABEL DEFINES %24571200
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24571300
|
|
24571400
|
|
% B6500 USASI LABELS 24572000
|
|
% VOL1 24573000
|
|
UVSN = PVOL1+4#, % SERIAL NUMBER 24574000
|
|
UMFID = PVOL1+11#, % MULTIPLE FILE ID 24575000
|
|
USYSN = PVOL1+28#, % "65" 24576000
|
|
USYST = PVOL1+30#, % TAPE TYPE 24577000
|
|
% 0 - SCRATCH 24578000
|
|
% 1 - USER 24579000
|
|
% 2 - LIBRARY 24580000
|
|
% 3 - BACK UP 24581000
|
|
% 4 = LOAD CONTROL 24582000
|
|
ULSL = PVOL1+79#, % 1 IF STANDARD USASI 24583000
|
|
% HDR1 24584000
|
|
UFID = PHDR1+4#, % FILE ID 24585000
|
|
URLNMBR = PHDR1+27#, % FILE SECTION NUMBER (REEL #) 24586000
|
|
USQNCNMBR = PHDR1+31#, % FILE SEQUENCE NUMBER (POSITION)24587000
|
|
UGNRTN = PHDR1+35#, % GENERATION NUMBER 24588000
|
|
UVRSN = PHDR1+39#, % VERSION 24589000
|
|
UCDT = PHDR1+42#, % CREATION DATE 24590000
|
|
UEDT = PHDR1+48#, % EXPIRATION DATE 24591000
|
|
UBCNT = PHDR1+54#, % BLOCK COUNT 24592000
|
|
URCNT = PHDR1+60#, % RECORD COUNT 24593000
|
|
USYSL = PHDR1+67#, % " B6500" 24594000
|
|
% HDR2 24595000
|
|
URF = PHDR2+4#, % RECORD FORMAT 24596000
|
|
UBL = PHDR2+5#, % BLOCK LENGTH 24597000
|
|
URL = PHDR2+10#, % RECORD LENGTH 24598000
|
|
UDNSTY = PHDR2+15#, % DENSITY 24599000
|
|
USNTNL = PHDR2+16#, % SENTINEL 24600000
|
|
UPRTY = PHDR2+17#, % PARITY 24601000
|
|
UFORM = PHDR2+18#, % EXTERNAL FORM 24602000
|
|
UMRL = PHDR2+19#, % MINIMUM RECORD LENGTH 24603000
|
|
UOFS = PHDR2+50#, % OFFSET TO DATA 24604000
|
|
% B3500 USASI LABELS 24605000
|
|
% VOL1 ALL BLANKS EXCEPT "VOL1",SERIAL NUMBER, AND "1" 24606000
|
|
% HDR1 24607000
|
|
B35FID = PHDR1+13#, % B3500 FILE ID 24608000
|
|
B35MFID = PHDR1+21#, % B3500 MULTIPLE FILE ID 24609000
|
|
% NO HDR2 24610000
|
|
% B5500 LABELS 24611000
|
|
% B5500 LABEL 24612000
|
|
LMFIO = PVOL1+9#, 24613000
|
|
LFID = PVOL1+17#, 24614000
|
|
LREEL = PVOL1+24#, 24615000
|
|
LCDT = PVOL1+27#, 24616000
|
|
LCYCLE = PVOL1+32#, 24617000
|
|
LEDT = PVOL1+34#, 24618000
|
|
LSNTNL = PVOL1+39#, 24619000
|
|
LBCNT = PVOL1+40#, 24620000
|
|
LRCNT = PVOL1+45#, 24621000
|
|
LMEMDUMP = PVOL1+52#, 24622000
|
|
LVSN = PVOL1+53#; 24623000
|
|
LAYOUT 24624000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24624100
|
|
% UNIT FEATURE WORD (PASSED BY COMPILERS TO LOGICALRECORD) %24624200
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24624300
|
|
UFEATL ( % UNIT FEATURE LAYOUT 24625000
|
|
MOTIONF = 47:1, % (1 IF PRINT AFTER PAPER MOTION)24626000
|
|
DRCTNF = 46:1, % (1 IF REVERSE SPACE) 24627000
|
|
SKIPFF = 45:1, % (1 IF SKIP TO CHANNEL) 24628000
|
|
ABSLINEF = 44:1, % (1 IF ABSOLUTE LINE NUMBER) 24629000
|
|
WRAPF = 43:1, % ( 1 IF WRAPAROUND) 24630000
|
|
REUSEF = 42:1, % (1 IF REUSE THIS RECORD) 24631000
|
|
FORMATTERF= 41:1, % (1 STILL IN THE FORMATTER) 24632000
|
|
MEMINHIBITF=40:1, % (1 NO DATA TRANSFER) 24632010
|
|
CVALUEF = 15:16); % CONTROL VALUE: 24633000
|
|
% ABSOLUTE LINE NUMBER 24634000
|
|
% RELATIVE LINE NUMBER 24635000
|
|
% CHANNEL # 24636000
|
|
% ABSOLUTE RECORD # 24637000
|
|
% RELATIVE RECORD # 24638000
|
|
DEFINE 24639000
|
|
% USE-ROUTINES-INDEX ARRAY 24640000
|
|
% INPUT 24641000
|
|
BBRI = PUSE#, % BEFORE BEGINNING REEL INPUT 24642000
|
|
ABRI = PUSE+1#, % AFTER BEGINNING REEL INPUT 24643000
|
|
BBFI = PUSE+2#, % BEFORE BEGINNING FILE INPUT 24644000
|
|
ABFI = PUSE+3#, % AFTER BEGINNING FILE INPUT 24645000
|
|
BERI = PUSC+4#, % BEFORE ENDING REEL INPUT 24646000
|
|
AERI = PUSE+5#, % AFTER ENDING REEL INPUT 24647000
|
|
BEFI = PUSE+6#, % BEFORE ENDING FILE INPUT 24648000
|
|
AEFI = PUSE+7#, % AFTER ENDING FILE INPUT 24649000
|
|
% OUTPUT 24650000
|
|
BBRO = PUSE+8#, % BEFORE BEGINNING REEL OUTPUT 24651000
|
|
ABRO = PUSE+9#, % AFTER BEGINNING REEL OUTPUT 24652000
|
|
BBFO = PUSE+10#, % BEFORE BEGINNING FILE OUTPUT 24653000
|
|
ABFO = PUSE+11#, % AFTER BEGINNING FILE OUTPUT 24654000
|
|
BERO = PUSE+12#, % BEFORE ENDING REEL OUTPUT 24655000
|
|
AERO = PUSE+13#, % AFTER ENDING REEL OUTPUT 24656000
|
|
BEFO = PUSE+14#, % BEFORE ENDING FILE OUTPUT 24657000
|
|
AEFO = PUSE+15#, % AFTER ENDING FILE OUTPUT 24658000
|
|
% IO 24659000
|
|
BBRIO = PUSE+16#, % BEFORE BEGINNING REEL IO 24660000
|
|
ABRIO = PUSE+17#, % AFTER BEGINNING REEL IO 24661000
|
|
BBPIO = PUSE+18#, % BEFORE BEGINNING FILE IO 24662000
|
|
ABFIO = PUSE+19#, % AFTER BEGINNING FILE IO 24663000
|
|
BERIO = PUSE+20#, % BEFORE ENDING REEL IO 24664000
|
|
AERIO = PUSE+21#, % AFTER ENDING REEL IO 24665000
|
|
BEFIO = PUSE+22#, % BEFORE ENDING FILE IO 24666000
|
|
AEFIO = PUSE+23#, % AFTER ENDING FILE IO 24667000
|
|
% ERROR 24668000
|
|
EI = PUSE+24#, % ERROR INPUT 24669000
|
|
ERO = PUSE+25#, % ERROR OUTPUT 24670000
|
|
EIO = PUSE+26#; % ERROR IO 24671000
|
|
DEFINE 24672000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24673000
|
|
% IOAREA - NORMAL STATE I/O BUFFER LAYOUT %24674000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24675000
|
|
% AT THE FRONT OF THE IOAREA IS THE IOCB - I/O CONTROL BLOCK %24676000
|
|
% USER = 0 % USER WORD: 24677000
|
|
% PRIORITY, UNIT-NUMBER, 24678000
|
|
% WORD-COUNT, I/O-ERROR RECOVERY 24679000
|
|
% MISC = 1 % RECEIVES RESULT DESCRIPTOR 24680000
|
|
% AREADESC= 2 % POINTS AT BEGINNING OF BUFFER (IOCW)24681000
|
|
% EVNT = 3 % POINTS AT THE BUFFER (FILE) EVENT 24682000
|
|
% PRVSIO = 4 % FORWARD QUEUE LINK 24683000
|
|
% NEXTIO = 5 % BACKWARD QUEUE LINK 24684000
|
|
% A FEW WORDS ARE NEEDED FOR BUFFER CONTROL ... %24685000
|
|
IOAL = 6#, % FORWARD & REVERSE BUFFER LINKS 24686000
|
|
IOAW = 7#, % HOLDS NECESSARY FIELDS 24687000
|
|
% REWRITE,BEFORE,PASSED,ACTIVE 24688000
|
|
% THE BEGINNING OF THE BUFFER %24689000
|
|
IOCWP = 8#, % IOCW - I/O CONTROL WORD 24690000
|
|
FRSTDATA = 9#, % FIRST DATA 24691000
|
|
IOTANKSZ = 9#; 24692000
|
|
FIELD 24693000
|
|
% IOAW FIELDS 24694000
|
|
RWRT = 47:1, % REWRITE 24695000
|
|
BFR = 46:1, % BEFORE 24696000
|
|
RCN = 39:20, % RECORD NUMBER 24697000
|
|
PSSD = 39:10, % PASSED 24698000
|
|
ACTV = 29:10, % ACTIVE 24699000
|
|
ACTLKY = 19:20; % ACTUAL KEY 24700000
|
|
DEFINE 24701000
|
|
% ARGUMENT 24702000
|
|
INV = 1#, 24703000
|
|
OUTV = 2#, 24704000
|
|
IOV = 3#, 24705000
|
|
REGOPEN = 0#, 24706000
|
|
RLSWTCH = 1#, 24707000
|
|
STATUSV = 2#, 24708000
|
|
PRESENTV = 3#, 24709000
|
|
REGCLOSE = 0#, 24709100
|
|
RELEASEV = 1#, 24710000
|
|
PURGEV = 2#, 24710100
|
|
MOREWINDV = 3#, 24710200
|
|
LOCKV = 4#, 24711000
|
|
CRUNCHV = 5#, 24711100
|
|
HERE = 6#, 24712000
|
|
ASTRSK = 7#; 24713000
|
|
DEFINE 24714000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24715000
|
|
% MASTER LIST OF FIB DEFINES %24716000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24717000
|
|
ACCESSMODE = FILEACCESS.ACSSMODE#, %24718000
|
|
ACCESSOFF = FILEACCESS.ACSSOFF#, 24719000
|
|
ACCESSZ = FILEACCESS.ACSSZ#, 24720000
|
|
ACCESSTYPE= FILEACCESS.ACSSTYPE#, 24720100
|
|
ACTIONTAKEN=BOOLEAN(ATAKEN)#, 24720150
|
|
ACTIVE = IOAREA[IOAW].ACTV#, 24721000
|
|
ACTUALKEY = IOAREA[IOAW].ACTLKY#, 24722000
|
|
ADD1TOBIT32=4294967296#, 24722100
|
|
ADRSF = ADDRESSF#, 24723000
|
|
AFTER = BOOLEAN(UNITFEATURE.MOTIONF)#, 24723100
|
|
ALREADYOPEN = RECORDSTATUS.OPENBITS!0#, 24724000
|
|
ATAKEN = FILESTATUS.EXCEPTIONT#, 24724010
|
|
ARRAYROW = BOOLEAN(TANKDATA1.PNTR)#, 24724100
|
|
BEFORE = NOT AFTER#, 24724200
|
|
BFFRD = TANKDATA3.BUFFERD#, 24726000
|
|
BEFOREACTION=BOOLEAN(IOAREA[IOAW].BFR)#, 24727000
|
|
BFFRXHSTD = RECORDSTATUS.MTBUF#, 24728000
|
|
BLCKDFNNY = TANKDATA1.BLKFUNNY#, 24729000
|
|
BFRACTN = IOAREA[IOAW].BFR#, 24730000
|
|
BLKDFNNY(P1,P2,SZ) = IF BLOCKEDFUNNY THEN 24731000
|
|
REPLACE P1 BY P2 FOR SZ WORDS#, 24732000
|
|
BLOCKED = BOOLEAN(TANKDATA1.BLKD)#, 24733000
|
|
BLOCKEDFUNNY = BOOLEAN(TANKDATA1.BLKFUNNY)#, 24734000
|
|
BLOCKSZ = TANKDATA2.BLOCKSIZE#, 24735000
|
|
BUFFERED = BOOLEAN(BFFRD)AND NUMBEROFBUFFERS!0#, 24736000
|
|
BUFFEREXHAUSTED = BOOLEAN(RECORDSTATUS.MTBUF)#, 24737000
|
|
BUFFERSZ = TANKDATA3.BFFRSZ#, 24738000
|
|
BUFFREQ = TANKDATA3.BUFFREQSTD#, 24739000
|
|
CARRIAGECONTROL=RECORDSTATUS.UFEAT#, 24740000
|
|
CHANNELNO = UNITFEATURE.ADDRESSF#, 24741000
|
|
CHANNELSKIP=BOOLEAN(UNITFEATURE.SKIPF)#, 24742000
|
|
CHARECORD = BOOLEAN(RECORDUNITS)#, 24742100
|
|
CHERE = FILESTATUS.CLSHR#, 24743000
|
|
CLOSEHERE = BOOLEAN(FILESTATUS.CLSHR)#, 24744000
|
|
CONTGS = TANKDATA3.CNTGS#, 24745000
|
|
CONTIGUOUS= BOOLEAN(TANKDATA3.CNTGS)#, 24746000
|
|
CRRGCNTRL = BOOLEAN(CARRIAGECONTROL)#, 24747000
|
|
DIRECTION = IOINFO.IOBACKWARD#, 24748000
|
|
DISC = UNITYP=DISKFILE#, 24749000
|
|
DISKREAD = @460#, % MEMORY PROTECT 24749100
|
|
DISKWRITE = @040#, 24749200
|
|
DIVORCEMOM(A)=A~A&DIVMOML(,)#, 24750000
|
|
ENDOF = BOOLEAN(FILESTATUS.EOFB)#, 24751000
|
|
ENDOFACTION = FILESTATUS.EOFACTION#, 24752000
|
|
ENDOFTAKEN= ENDOF AND ACTIONTAKEN#, 24753000
|
|
ENDOV = FILESTATUS.EOFB#, 24754000
|
|
ENTERDIR = FILEACCESS.DRCTRYF#, 24755000
|
|
EVENTNO = TANKDATA3.BEVNT#, 24756000
|
|
EXPLICITADDRESS=BOOLEAN(FILEACCESS.EXPADRS)#, 24757000
|
|
FFORTRAN = RECORDTYPE=6#, 24757100
|
|
BIB0 = FIBSIZE#, 24757200
|
|
FIBUZZ = IF FIBB(FIBLOCKF) THEN BEGIN 24758000
|
|
WHILE BOOLEAN(READLOCK(1,LOCKER)) DO 24759000
|
|
WAIT(IOEVENT[FILEVENT]); 24760000
|
|
RESET(IOEVENT[FILEVENT]) END#, 24761000
|
|
FILEDRCDSIZE=BOOLEAN(RECORDSTATUS.DRCDSIZE)#, 24761050
|
|
FILEMTBUF = BOOLEAN(RECORDSTATUS.MTBUF)#, 24761100
|
|
FILENOTOPEN = RECORDSTATUS.OPENBITS=0#, 24762000
|
|
FILEVENT = LABELATT.EVNTNO#, 24763000
|
|
FILEXCPTN = BOOLEAN(RECORDSTATUS.EXCEPTION)#, 24764000
|
|
FIXEDL = RECORDTYPE=0#, 24764100
|
|
FLINKED = RECORDTYPE=5#, 24764200
|
|
FORMATD = RECORDTYPE=1#, 24764300
|
|
FORMATI = RECORDTYPE=4#, 24764400
|
|
FORMATTER = BOOLEAN(TANKDATA1.PNTR)AND PFOCRCSZ#, 24764450
|
|
FORMATU = RECORDTYPE=3#, 24764500
|
|
FORMATV = RECORDTYPE=2#, 24764600
|
|
FORMSMESSAGE=LEBB(FRMS)#, 24764700
|
|
GENSZ= 4#,% 24766000
|
|
IMPLCTOPN = FILESTATUS.IMPOPEN#, 24767000
|
|
IMPLICITOPEN=NOT BOOLEAN(IMPLCTOPN)#, 24768000
|
|
INOUTPART = DSKS.MYUSEF#, 24769000
|
|
INTERNALMODE = FILESTATUS.INTMODE#, 24770000
|
|
IOCOMPLET = USER@(IOCB).USERIOFINISH#, 24771000
|
|
IOCOMPLETE= BOOLEAN(WORD(USER@IOCB).(USERIOFINISH)#, 24772000
|
|
IOCWSKLTN= IOINFO#, 24774000
|
|
IOPENDING = NOT IOCOMPLETE#, 24775000
|
|
IOTERMINATE=BEGIN TRACE(18);TRACE(21)END#, 24776000
|
|
LABELEQTD = BOOLEAN(LABELATT.LBLEQTD)#, 24777000
|
|
LABELTYPE = LABELATT.LABELTYP#, 24778000
|
|
LASTBUFFER=IOAREA~*&ARRAYDESCL(,*,IOAREA[IOAL].BL)#, 24778100
|
|
LASTLENGTH= TANKDATA1.SIZESZ#, 24778200
|
|
LBLEQUATED= LABELATT.LBLEQTD#, 24779000
|
|
LOCKOUT = FILESTATUS.LOCKOUTB#, 24780000
|
|
MAGICNUMBER=150#, 24781000
|
|
MAXGENNO= 9999#,% 24781100
|
|
MAXNO = 549755813887#, 24782000
|
|
MAXRECSZ = TANKDATA2.MAXRECSIZE#, 24783000
|
|
MAXVERNO= 99#,% 24783100
|
|
MINRECSZ = TANKDATA2.MINRECSIZE#, 24784000
|
|
MLTBLCK = TANKDATA1.MLTBLK#, 24785000
|
|
MULTIBLOCK= BOOLEAN(TANKDATA1.MLTBLK)#, 24786000
|
|
NEXTBUFFER=IOAREA~*&ARRAYDESCL(,*,IOAREA[IOAL].FL)#, 24786100
|
|
NOACTION = BOOLEAN(UNITFEATURE.REUSEF)#, 24786200
|
|
NOLINES = UNITFEATURE.ADDRESSF#, 24786600
|
|
NOMORE = BOOLEAN(WORD(USER@IOCB).USEREOFORTBIT)#, 24789000
|
|
NOTOPEN = RECORDSTATUS.OPENBITS=0#, 24791000
|
|
NUMBEROFBUFFERS = TANKDATA3.BUFFASSGND#, 24792000
|
|
NUMLABELS = LABELATT.USERSIZE#, 24794000
|
|
ONEREELREVERSE=BOOLEAN(DSKS.REVACTIONF)#, 24795000
|
|
OPENINPUT = BOOLEAN(RECORDSTATUS.OPNIN)#, 24796000
|
|
OPENIO = RECORDSTATUS.OPENBITS=3#, 24797000
|
|
OPENOUTPUT = BOOLEAN(RECORDSTATUS.OPNOUT)#, 24798000
|
|
OPNINPUT = RECORDSTATUS.OPNIN#, 24799000
|
|
OPNOUTPUT = RECORDSTATUS.OPNOUT#, 24800000
|
|
NOPTIONAL = LEBC.OPTIONALF#, 24801000
|
|
OPTSPACE(SYZE)=GETSPACE(SYZE,0,0,0)#, 24802000
|
|
PARITYERROR=BOOLEAN(WORD(USER@IOCB).USERPARITYBIT)#, 24802100
|
|
PARITYERR = FILESTATUS.PARITYB#, 24802500
|
|
PARITYACTION=FILESTATUS.PARACTION#, 24802600
|
|
PASSED = IOAREA[IOAW].PSSD#, 24803000
|
|
PFOCRCSZ = BOOLEAN(PFOC.DRCDSIZE)#, 24807000
|
|
PFOCMTBUF = BOOLEAN(PFOC.MTBUF)#, 24808000
|
|
PLMT(UT) = ((UT=CARDREADER OR UT=CARDPUNCH1 OR 24810000
|
|
UT=CARDPUNCH2) AND BLOCKSZ>10 OR 24811000
|
|
(UT=BUFFPRINTER OR UT=UNBUFFPRINTER) AND 24812000
|
|
BLOCKSZ>17 24813000
|
|
)#, 24814000
|
|
PNCH(UT) = (UT=CARDPUNCH1 OR UT=CARDPUNCH2)#, 24814010
|
|
POINTEREQD=ARRAYROW#, 24814050
|
|
PRINTSPACE= @200#, 24814100
|
|
PRNTR(UT) = (UT=BUFFPRINTER OR UT=UNBUFFPRINTER)#, 24816000
|
|
PROPERIOACTION = RECORDSTATUS.OPNIN=PFOC.OPNIN#, 24817000
|
|
PROTECTED = LEBC.FPRTCTD#, 24818000
|
|
PRTY = BOOLEAN(FILESTATUS.PARITYB)#, 24819000
|
|
PRTYACTN = FILESTATUS.PARACTION#, 24820000
|
|
RANDOM = ACCESSTYPE=1#, 24821000
|
|
RCRDSZ(A,B)=IF FIXEDL THEN MAXRECSZ ELSE IF FLINKED THEN 24821100
|
|
IF WORDORIENTED THEN M[A.ADDRESSF].FRWRDLNK 24821200
|
|
ELSE REAL(B,WORDSTO).FRWRDLNK ELSE 24821300
|
|
CALCRECSZ(A,FIB)#, 24821400
|
|
RECINBLK = IOAREA[IOAW].RCN#, 24824000
|
|
RECORDMODE = TANKDATA1.SIZEMODE#, 24827000
|
|
RECORDOFF = TANKDATA1.SIZEOFF#, 24828000
|
|
RECORDSZ = TANKDATA1.SIZESZ#, 24829000
|
|
RECORDUNITS=TANKDATA1.RCDUNTS#, 24830000
|
|
RECORDTYPE= TANKDATA1.RCRDTYPE#, 24831000
|
|
RECSIZE = TANKDATA2.MAXRECSIZE#, 24832000
|
|
REQSPACE(SYZE)=GETSPACE(SYZE,0,0&SPACETYPE(0,1,1,0),0)#, 24833000
|
|
REVERSED = BOOLEAN(DIRECTION)#, 24834000
|
|
REVERSETYPE = UNITYP=DISKFILE OR MAGTAPE(UNITYP)#, 24835000
|
|
REWRITE = BOOLEAN(IOAREA[IOAW].RWRT)#, 24836000
|
|
REWRT = IOAREA[IOAW].RWRT#, 24837000
|
|
ROTATEBUFFERS=IF BUFFERED THEN 24837100
|
|
IOCB~REFERENCE(IOAREA~IOADESC~ 24837200
|
|
IOAREA&ARRAYDESCL(,*,IOAREA[IOAL].FL))#, 24837300
|
|
SIZEPROBLEM=FILESTATUS.DATAERRORB#, 24841000
|
|
SKLTN = IOINFO.SKLTNIOCW#, 24843000
|
|
SKLTNSTNDRD = IOINFO.SIOCWSTANDARD#, 24844000
|
|
TANKEY = IOAREA[IOAW].ACTLKY#, 24845000
|
|
TAPEFILE = MAGTAPE(IOINFO.UNITYPP)#, 24846000
|
|
TAPEREWIND=@210#, 24847000
|
|
TAPESPACE = @600#, 24847100
|
|
UNBLOCKED = NOT BOOLEAN(TANKDATA1.BLKD)#, 24848000
|
|
UNITNUMBER=IOINFO.UNITNUM#, 24849000
|
|
UNITYP=IOINFO.UNITYPP#, 24850000
|
|
UNLABELLED= LABELTYPE=1#, 24851000
|
|
UNLOCKFIB = IF FIBB(FIBLOCKF) THEN BEGIN 24852000
|
|
READLOCK(0,LOCKER); 24853000
|
|
CAUSE(IOEVENT[FILEVENT]) END#, 24854000
|
|
USASILABEL= LABELTYPE=0#, 24855000
|
|
VERSZ= 2#,% 24856000
|
|
WORDORIENTED=NOT CHARECORD#, 24856050
|
|
WORDSLEFT = UNITSLEFT#, 24856100
|
|
WORDSTO = CASE INTERNALMODE OF(1,.5,12,8,6,6)#, 24857000
|
|
WORDSTORND= CASE INTERNALMODE OF (0,0,11,7,5,5)#, 24858000
|
|
WRAPAROUND= LABELATT.WRPRND#; 24859000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24860000
|
|
SAVE PROCEDURE AVAILREMOVE (AVAILZLINK); 30000000
|
|
VALUE AVAILZLINK; 30001000
|
|
INTEGER AVAILZLINK; 30002000
|
|
BEGIN COMMENT REMOVE AN AREA FROM THE AVAILABLE LIST; 30003000
|
|
INTEGER MI ~ AVAILZLINK - M[AVAILZLINK].LENGTHZ + 1; 30004000
|
|
INTEGER T; 30005000
|
|
IF MI-1 = PREVADDR 30006000
|
|
THEN BEGIN COMMENT THE AREA TO BE REMOVED IS THE LARGEST 30007000
|
|
AREA THAT FOLLOWS A NON-OVERLAYABLE AREA. 30008000
|
|
AVAILB CONTAINS THE NEW PREVADDR.; 30009000
|
|
PREVADDR ~ M[MI] 30010000
|
|
END; 30011000
|
|
M[M[MI]].LINK ~ T ~ M[MI-1].LINK; 30012000
|
|
COMMENT PREVIOUS POINTS AT NEXT; 30013000
|
|
M[T+1] ~ M[MI]; 30014000
|
|
COMMENT NEXT POINTS AT PREVIOUS; 30015000
|
|
END OF AVAIL REMOVE; 30016000
|
|
SAVE PROCEDURE ORDER (ADDRESS); 30017000
|
|
VALUE ADDRESS; 30018000
|
|
INTEGER ADDRESS; 30019000
|
|
BEGIN COMMENT ORDER PLACES THE AREA WITH AVAILA AT ADDRESS IN 30020000
|
|
THE AVAILABLE LIST ACCORDING TO THE ARGUMENT IN 30021000
|
|
BITS 47:27 OF THE WORD AT ADDRESS.; 30022000
|
|
INTEGER T; COMMENT THE LINK THIS LINK WILL POINT AT.; 30023000
|
|
REAL RETRIES; 30023100
|
|
IF NOT BOOLEAN (M[ADDRESS].PREOLAY) 30024000
|
|
THEN BEGIN COMMENT UPDATE PREVADDR IF REQUIRED AND DETER- 30025000
|
|
MINE HIGHEST STARTING POINT FOR LLLU OPERATOR.; 30026000
|
|
IF M[ADDRESS].LENGTH > M[PREVADDR].LENGTH 30027000
|
|
THEN PREVADDR ~ ADDRESS; 30028000
|
|
MINDEX ~ AVAILI; 30029000
|
|
END 30030000
|
|
ELSE MINDEX ~ PREVADDR; 30031000
|
|
M[ADDRESS + 1] ~ MINDEX ~ 30032000
|
|
LISTLOOKUP (M[ADDRESS].AVAILKEY, M, MINDEX); 30033000
|
|
M [ADDRESS].LINK ~ T ~ M[MINDEX].LINK; 30034000
|
|
M [MINDEX].LINK ~ ADDRESS; 30035000
|
|
M [T + 1] ~ ADDRESS; 30036000
|
|
IF SPACEQHEAD !0 THEN 30036050
|
|
IF ((RETRIES ~ ( STACK [T~SPACEQHEAD.FASTPLACE, 30036100
|
|
AUTHORITYLINKPLACE]).RETRYCOUNT) =0 30036200
|
|
OR STACK [T, REQUIREDPLACE] { M [ADDRESS].LENGTH) 30036250
|
|
THEN BEGIN 30036300
|
|
DELINKASTACK (T, SPACEQHEAD); 30036400
|
|
CAUSE (AUTHORITYEVENT @(REFERENCE(STACK[T,*]))); 30036500
|
|
END 30036600
|
|
ELSE STACK [T, AUTHORITYLINKPLACE].RETRYCOUNT ~ RETRIES - 1; 30036650
|
|
END OF ORDERING AVAILABLE LIST; 30037000
|
|
DEFINE GETLEFTOFF (ADDRESS) = 30038000
|
|
IF ADDRESS = LEFTOFF 30039000
|
|
THEN LEFTOFF ~ M[M[ADDRESS].INUSELENGTH + ADDRESS].FRONTLINK; 30040000
|
|
#; 30041000
|
|
DEFINE CONSOLIDATE (ADDRESS, MINDEX) = 30042000
|
|
BEGIN 30043000
|
|
MLENGTH ~ M[ADDRESS].INUSELENGTH; 30044000
|
|
IF BOOLEAN (M [MINDEX ~ ADDRESS + M[ADDRESS].INUSELENGTH +1] 30045000
|
|
.AVAILABLE) 30046000
|
|
THEN BEGIN 30047000
|
|
MLENGTH ~ * + (T ~ M[MINDEX].LENGTH) + 1; 30048000
|
|
AVAILREMOVE (MINDEX + T); 30049000
|
|
END; 30050000
|
|
IF BOOLEAN (M[ADDRESS - 1].AVAILABLE) 30051000
|
|
THEN BEGIN COMMENT PREVIOUS AREA IS AVAILABLE; 30052000
|
|
MLENGTH ~ * + (T ~ M[ADDRESS - 1].LENGTHZ)+1; 30053000
|
|
MINDEX ~ ADDRESS - T - 1; 30054000
|
|
AVAILREMOVE (ADDRESS-1); 30055000
|
|
END 30056000
|
|
ELSE MINDEX ~ ADDRESS; 30057000
|
|
END 30058000
|
|
#; 30059000
|
|
SAVE BOOLEAN PROCEDURE TURNOVERLAYKEY (ADDRESSOFMOM); 30060000
|
|
VALUE ADDRESSOFMOM; 30061000
|
|
INTEGER ADDRESSOFMOM; 30062000
|
|
BEGIN COMMENT IF THE SPACE POINTED AT BY MOM IS PRESENT AND 30063000
|
|
NON-OVERLAYABLE, SET IT TO ITS PERMANENT STATE 30064000
|
|
AND RETURN TRUE OTHERWISE RETURN FALSE; 30065000
|
|
WORD MOM, ZLINK; 30066000
|
|
INTEGER T, TA, I; 30067000
|
|
BOOLEAN B; 30067100
|
|
LABEL AWAY; 30067200
|
|
IF B ~ UNLOCK (SPACELOCK) THEN BUZZCONTROL (SPACELOCK); 30068000
|
|
MOM ~ M[ADDRESSOFMOM]; 30069000
|
|
IF MOM.PBITF =1 30070000
|
|
THEN BEGIN COMMENT MOM HAS SPACE TO CHANGE; 30071000
|
|
T ~ (TA ~ MOM.ADDRESSF) - LINKSIZE - 1; 30072000
|
|
DO I ~ * + M[TA ~ * -1].TAG UNTIL TA =T; 30072100
|
|
IF I ! (LINKSIZE + 1) | MEMLINK 30072200
|
|
THEN GO AWAY; 30072300
|
|
T ~ * + 1; 30072400
|
|
ZLINK ~ M[T ~ T + M[T].INUSELENGTH]; 30073000
|
|
IF TURNOVERLAYKEY ~ ZLINK.SPACEOLAYLOCK =0 30074000
|
|
THEN M[T].SPACEOLAYLOCK ~ ZLINK.OLAY; 30075000
|
|
END; 30076000
|
|
AWAY: 30076100
|
|
IF B THEN UNLOCK (SPACELOCK); 30077000
|
|
END TURNOVERLAYKEY; 30078000
|
|
SAVE PROCEDURE MAKEPRESENTANDSAVE (DATA); 30078100
|
|
WORD ARRAY DATA [*]; 30078200
|
|
BEGIN 30078300
|
|
WORD MPS; MONITOR DONMONITOR (MPS); MPS ~ DATA; %%%%%%%% 30078380
|
|
DATA [0] ~ *; 30078500
|
|
COMMENT * * * * * * FIX IOFINISH TURNOLAYKEY 2/17 30078599
|
|
M[DATA.ADDRESSF + DATA.LENGTHF].SPACEOLAYLOCK ~ 0; 30078600
|
|
END OF INSURING PRESENCE AND SAVING DATA; 30078800
|
|
SAVE INTEGER PROCEDURE CONSOLIDATEANDORDER(ADDRESS); 30156000
|
|
VALUE ADDRESS; 30157000
|
|
INTEGER ADDRESS; 30158000
|
|
BEGIN 30159000
|
|
INTEGER MINDEX, T; 30160000
|
|
WORD ZLINK; 30161000
|
|
CONSOLIDATE (ADDRESS, MINDEX); 30162000
|
|
ZLINK ~ M[MINDEX-1]; 30163000
|
|
T ~ REAL(ZLINK.OLAY = 1 OR ZLINK.SPACEOLAYLOCK = 1); 30164000
|
|
M[MINDEX] ~ 0 & AVAILA (, T,MLENGTH, , *); 30165000
|
|
M[MINDEX ~ MLENGTH] ~ 0 & AVAILZ (,, MLENGTH); 30166000
|
|
ORDER (MINDEX); 30167000
|
|
CONSOLIDATEANDORDER ~ MINDEX; 30168000
|
|
END OF CONSOLIDATING RETURNED AREA AND ORDERING IT IN LIST; 30169000
|
|
SAVE INTEGER PROCEDURE FORGETSPACE(ADDRESS); 30170000
|
|
VALUE ADDRESS; 30171000
|
|
INTEGER ADDRESS; 30172000
|
|
BEGIN COMMENT RETURN THE SPACE DESCRIBED BY THE IN-USE LINK 30173000
|
|
POINTED AT BY ADDRESS TO THE AVAILABLE LIST. 30174000
|
|
WHEN "ADDRESS" IS POSITVE CONSOLIDATION WITH 30175000
|
|
ADJACENT AVAILABLE AREAS IS PERFORMED AND THE 30176000
|
|
LIST IS RE-ORDERED AND THE NEW ADDRESS IS 30177000
|
|
RETURNED. WHEN "ADDRESS" IS NEGATIVE CONSOLI- 30178000
|
|
DATION AND ORDERING ARE NOT PERFORMED.; 30179000
|
|
LABEL AWAY; 30180000
|
|
INTEGER TADDR ~ ABS (ADDRESS) - LINKSIZE, 30181000
|
|
FRONTLNK, 30182000
|
|
30183000
|
|
T, COMMENT TEMPORARY; 30184000
|
|
TRACTER, 30185000
|
|
MINDEX; 30186000
|
|
TRACTER~TRACE(0); 30186100
|
|
MINDEX ~ TADDR -1; 30187000
|
|
DO T ~ *+M[MINDEX].TAG UNTIL MINDEX ~ * +1 = ABS(ADDRESS); 30188000
|
|
IF T ! (LINKSIZE +1) | MEMLINK 30189000
|
|
THEN BEGIN 30190000
|
|
FORGETSPACE ~ -MINDEX; 30191000
|
|
GO AWAY; 30192000
|
|
END; 30193000
|
|
FRONTLNK ~ M[TADDR + M[TADDR].INUSELENGTH].FRONTLINK; 30194000
|
|
IF FRONTLNK ! 0 30195000
|
|
THEN BEGIN COMMENT REMOVE AREA FROM IN-USE LIST; 30196000
|
|
M[FRONTLNK].BACKLINK ~ MINDEX ~ M[TADDR ].BACKLINK; 30197000
|
|
M[MINDEX + M[MINDEX].INUSELENGTH].FRONTLINK ~ 30198000
|
|
M[TADDR + M[TADDR ].INUSELENGTH].FRONTLINK; 30199000
|
|
END 30200000
|
|
ELSE BEGIN COMMENT AREA BEING FORGOTTEN WAS LAST ALLOCATED;30201000
|
|
BACKALLOCATED ~ M[TADDR ].LINK; 30202000
|
|
M[M[BACKALLOCATED].INUSELENGTH + BACKALLOCATED]. 30203000
|
|
FRONTLINK ~ 0; 30204000
|
|
END; 30205000
|
|
GETLEFTOFF (TADDR); 30206000
|
|
IF ADDRESS > 0 30207000
|
|
THEN BEGIN COMMENT CONSOLIDATE WITH ADJACENT AVAILABLE 30208000
|
|
AREAS AND ORDER NEW AREA IN LIST; 30209000
|
|
FORGETSPACE ~ CONSOLIDATEANDORDER (TADDR); 30210000
|
|
END 30211000
|
|
ELSE FORGETSPACE ~ ADDRESS; 30212000
|
|
AWAY: 30213000
|
|
TRACE(TRACTER); 30214000
|
|
UNLOCK (SPACELOCK); 30214100
|
|
END OF FORGETSPACE; 30215000
|
|
SAVE PROCEDURE OVERLAY (ADDRESS); VALUE ADDRESS; INTEGER ADDRESS; ; 30216000
|
|
SAVE REAL PROCEDURE GETSPACE (SIZE, WHOFOR, TYPE, ADDRESS); 30217000
|
|
VALUE SIZE, WHOFOR, TYPE, ADDRESS; 30218000
|
|
INTEGER SIZE, WHOFOR, TYPE; 30219000
|
|
REAL ADDRESS; 30220000
|
|
BEGIN COMMENT 30221000
|
|
;30222000
|
|
LABEL OVERSRCH, STARTSRCH, TRUBLE, AROUND, ALLDONE; 30223000
|
|
LABEL RETRY; 30223100
|
|
INTEGER S ~ SIZE + LINKSIZE, 30224000
|
|
START, 30225000
|
|
ARGS; 30226000
|
|
INTEGER TRACTER; COMMENT SAVE AND RESTORE TRACE; 30227000
|
|
BOOLEAN TRYAGAIN; 30227100
|
|
SAVE INTEGER PROCEDURE TROUBLE (REQ); 30228000
|
|
VALUE REQ; 30229000
|
|
INTEGER REQ; 30230000
|
|
BEGIN COMMENT TROUBLE IS RESPONSIBLE FOR CHASING THE LEFT-OFF 30231000
|
|
LIST AND RETURNING WITH AN ADDRESS OF AN AREA 30232000
|
|
THAT WILL SATISFY THE SIZE REQUIREMENT (REQ). 30233000
|
|
IF AN ADEQUATE AREA CANNOT BE FOUND, A NEGATIVE 30234000
|
|
VALUE IS RETURNED. 30235000
|
|
;30236000
|
|
INTEGER LEFTOFFT ~ LEFTOFF, COMMENT THE NEXT ADDRESS IN THE30237000
|
|
LEFT-OFF LIST.; 30238000
|
|
R, COMMENT TEMPORARY REQ; 30239000
|
|
MINDEX, 30240000
|
|
INITIAL, COMMENT THE ABSOLUTE ADDRESS OF THE AREA 30241000
|
|
BEING MADE AVAILABLE.; 30242000
|
|
FINAL; COMMENT THE FINAL ADDRESS OF THE AREA 30243000
|
|
BEING MADE AVAILABLE.; 30244000
|
|
BOOLEAN FIRST, COMMENT WHEN TRUE THE SUCCEEDING AS 30245000
|
|
WELL AS PRECEDING AREAS ARE EXAMINED 30246000
|
|
FOR AVAILABILITY.; 30247000
|
|
AVAILB; COMMENT TRUE WHEN THE ADDRESS OF AN 30248000
|
|
IN-USE AREA HAS BEEN RECORDED FOR 30249000
|
|
OVERLAY BECAUSE OF THE AVAILABILITY OF30250000
|
|
AN ADJACENT AREA.; 30251000
|
|
LABEL NEXT, 30252000
|
|
EXIT; 30253000
|
|
WORD TLINK; COMMENT TEMPORARY MEMORY LINK.; 30254000
|
|
MONITOR DONMONITOR 30254100
|
|
(R 30254200
|
|
,INITIAL 30254300
|
|
,FINAL 30254400
|
|
, TLINK); 30254500
|
|
IF TYPE.MAKEROOM = 0 30255000
|
|
THEN BEGIN 30256000
|
|
MINDEX ~ -1; 30257000
|
|
GO EXIT; 30258000
|
|
END; 30259000
|
|
NEXT: COMMENT EXAMINE NEXT AREA IN LEFT=OFF LIST.; 30260000
|
|
SETINTERVALTIMER; 30260100
|
|
R ~ REQ; 30261000
|
|
MINDEX ~ LEFTOFFT; 30262000
|
|
FIRST ~ TRUE; 30263000
|
|
DO BEGIN COMMENT BY-PASS NON-OVERLAYABLE ITEMS LEFT- 30264000
|
|
OFF LIST.; 30265000
|
|
IF LEFTOFFT !0 THEN 30266000
|
|
IF NOT BOOLEAN ((TLINK ~ M[LEFTOFFT + M[LEFTOFFT] 30267000
|
|
.INUSELENGTH]).SPACEOLAYLOCK) 30268000
|
|
THEN MINDEX ~ LEFTOFFT ~ TLINK.FRONTLINK; 30269000
|
|
END UNTIL BOOLEAN(TLINK.SPACEOLAYLOCK) OR LEFTOFFT = 0; 30270000
|
|
IF MINDEX = 0 30271000
|
|
THEN BEGIN COMMENT LEFT-OFF LIST HAS BEEN EXHAUSTED.; 30272000
|
|
MINDEX ~ -(IF BOOLEAN (TYPE.SLEEPY) THEN 3 ELSE 5) 30273000
|
|
+ TYPE.PRINTNOMEM; 30274000
|
|
GO EXIT; 30275000
|
|
END; 30276000
|
|
FINAL ~ M[MINDEX].INUSELENGTH + MINDEX; 30277000
|
|
LEFTOFFT ~ TLINK.FRONTLINK; 30278000
|
|
WHILE R > 0 30279000
|
|
DO BEGIN COMMENT EXAMINE THIS AREA AND ADJACENT AREAS 30280000
|
|
IN DESCENDING MEMORY LOCATIONS UNTIL R { 0 OR 30281000
|
|
A NON-OVERLAYABLE AREA IS ENCOUNTERED.; 30282000
|
|
AVAILB ~ FALSE; 30283000
|
|
IF FIRST 30284000
|
|
THEN BEGIN COMMENT THE FIRST TIME THE AREA SUC- 30285000
|
|
CEEDING THE LEFT-OFF AREA MUST BE EX- 30286000
|
|
AMINED FOR AVAILABILITY.; 30287000
|
|
IF INITSWITCH 30287100
|
|
THEN BEGIN 30287200
|
|
LEFTOFF ~ MINDEX; 30287300
|
|
INITSWITCH ~ FALSE; 30287400
|
|
END; 30287500
|
|
INITIAL ~ MINDEX; 30288000
|
|
FIRST ~ FALSE; 30289000
|
|
IF BOOLEAN ((TLINK ~ M[(FINAL ~ MINDEX + 30290000
|
|
M[MINDEX].INUSELENGTH+1)]).AVAILABLE) 30291000
|
|
THEN BEGIN 30292000
|
|
INITIAL ~ MINDEX; 30293000
|
|
FINAL ~ FINAL + TLINK.LENGTH +1; 30294000
|
|
AVAILB ~ TRUE; 30295000
|
|
R ~ R - TLINK.LENGTH 30296000
|
|
- M[MINDEX].INUSELENGTH; 30297000
|
|
END; 30298000
|
|
END; 30299000
|
|
IF BOOLEAN ((TLINK ~ M[MINDEX - 1]).AVAILABLE) 30300000
|
|
THEN BEGIN COMMENT ALL AREAS PRECEDING IN-USE 30301000
|
|
AREAS ARE EXAMINED FOR AVAILABILITY.; 30302000
|
|
INITIAL ~ MINDEX - TLINK.LENGTHZ - 1; 30303000
|
|
R ~ R - TLINK.LENGTHZ - 30304000
|
|
(IF AVAILB THEN 1 ELSE M[MINDEX] 30305000
|
|
.INUSELENGTH); 30306000
|
|
AVAILB ~ TRUE; 30307000
|
|
END 30308000
|
|
ELSE INITIAL ~ MINDEX; 30308100
|
|
R ~ R-(IF AVAILB THEN 1 ELSE M[MINDEX].INUSELENGTH); 30309000
|
|
IF R > 0 30310000
|
|
AND NOT BOOLEAN (M[INITIAL - 1].SPACEOLAYLOCK) 30311000
|
|
THEN GO NEXT; 30312000
|
|
MINDEX ~ INITIAL -1 - M[INITIAL -1].INUSELENGTHZ; 30313000
|
|
END; 30314000
|
|
IF BOOLEAN ((TLINK ~ M[INITIAL - 1]).AVAILABLE) 30315000
|
|
THEN INITIAL ~ INITIAL - TLINK.LENGTHZ -1; 30316000
|
|
MINDEX ~ INITIAL; 30317000
|
|
DO IF AVAILB ~ BOOLEAN ( (TLINK ~ M[MINDEX]).AVAILABLE) 30318000
|
|
THEN BEGIN 30319000
|
|
AVAILREMOVE (MINDEX + TLINK.LENGTH); 30320000
|
|
R ~ TLINK.LENGTH; 30321000
|
|
END 30322000
|
|
ELSE R ~ TLINK.INUSELENGTH 30323000
|
|
UNTIL MINDEX ~ * + R + 1 > FINAL; 30324000
|
|
MINDEX ~ INITIAL; 30325000
|
|
DO IF NOT AVAILB ~ BOOLEAN ((TLINK ~ M[MINDEX]).AVAILABLE) 30326000
|
|
THEN BEGIN 30327000
|
|
GLOBALSTOP; 30327100
|
|
OVERLAY (MINDEX + LINKSIZE); 30328000
|
|
FORGETSPACE (-MINDEX - LINKSIZE); 30329000
|
|
R ~ TLINK.INUSELENGTH; 30330000
|
|
END 30331000
|
|
ELSE R ~ TLINK.LENGTH 30332000
|
|
UNTIL MINDEX ~ * + R + 1 > FINAL; 30333000
|
|
MINDEX ~ INITIAL; 30334000
|
|
EXIT: 30335000
|
|
IF TROUBLE ~ MINDEX > 0 30336000
|
|
THEN BEGIN COMMENT MAKE AREA LOOK AVAILABLE.; 30337000
|
|
M[INITIAL] ~ 0 & AVAILA(,*, FINAL-INITIAL,, *); 30338000
|
|
M[FINAL] ~ 0 & AVAILZ (,, FINAL - INITIAL); 30339000
|
|
END; 30340000
|
|
END OF TROUBLE; 30341000
|
|
SAVE INTEGER PROCEDURE ALOCATE (SIZE, MINDEX); 30342000
|
|
VALUE SIZE, MINDEX; 30343000
|
|
INTEGER SIZE, MINDEX; 30344000
|
|
BEGIN COMMENT ALOCATE ASSIGNS IN-USE LINKS FOR AN AREA OF SIZE30345000
|
|
SOMEWWERE IN THE AREA STARTING AT MINDEX. NON- 30346000
|
|
OVERLAYABLE AREAS ARE ASSIGNED AT THE FRONT OF 30347000
|
|
AN AREA. THAT PORTION OF AN AREA THAT IS NOT 30348000
|
|
USED IS RETURNED TO THE AVAILABLE LIST.; 30349000
|
|
INTEGER AVLINK; 30350000
|
|
IF (MLENGTH ~ M[MINDEX].LENGTH- SIZE - 1) { LINKSIZE 30351000
|
|
THEN SIZE ~ SIZE + MLENGTH + 1; 30352000
|
|
IF TYPE.OERLAY = 0 30353000
|
|
THEN AVLINK ~ MINDEX + SIZE + 1 30354000
|
|
ELSE BEGIN 30355000
|
|
AVLINK ~ MINDEX; 30356000
|
|
MINDEX ~ M[MINDEX].LENGTH - SIZE + AVLINK; 30357000
|
|
IF LEFTOFF { 0 THEN LEFTOFF ~ MINDEX; 30358000
|
|
END; 30359000
|
|
M[MINDEX + SIZE] ~ 0 & LINKZ(, REAL(TYPE.OERLAY=1 AND 30360000
|
|
ADDRESS!0),,,,, SIZE); 30361000
|
|
IF MLENGTH > LINKSIZE 30362000
|
|
THEN BEGIN 30363000
|
|
M[AVLINK] ~ 0 & AVAILA 30364000
|
|
(, M[AVLINK-1].OLAY, MLENGTH, ,*); 30365000
|
|
COMMENT ORDER WILL SUPPLY LINK; 30366000
|
|
M[AVLINK + MLENGTH] ~ 0 & AVAILZ 30367000
|
|
(, , MLENGTH); 30368000
|
|
ORDER (AVLINK); 30369000
|
|
END; 30370000
|
|
M[MINDEX] ~ 0 & LINKA (, WHOFOR, SIZE, *, BACKALLOCATED); 30371000
|
|
M[MINDEX + 1] ~ 0 & LINKB 30372000
|
|
(, % TAG =3 30373000
|
|
, % USAGE 30374000
|
|
*, % ADDRESS TYPE - ABSOLUTE FOR NOW 30375000
|
|
ADDRESS, % OF MOM 30376000
|
|
IF ADDRESS ! 0 THEN M[ADDRESS].ADDRESSF ELSE 0); % DISK 30377000
|
|
COMMENT NUMEROUS UNANSWERED QUESTIONS.; 30378000
|
|
M[MINDEX +2] ~ 0 & LINKC ( ); COMMENT UNUSED; 30379000
|
|
M[BACKALLOCATED + M[BACKALLOCATED].INUSELENGTH].FRONTLINK ~ 30380000
|
|
MINDEX; 30381000
|
|
BACKALLOCATED ~ MINDEX; 30382000
|
|
ALOCATE ~ MINDEX + LINKSIZE; 30383000
|
|
END OF ALOCATE; 30384000
|
|
TRACTER ~ TRACE(0); COMMENT TURN OFF & SAVE TRACE; 30385000
|
|
BUZZCONTROL (SPACELOCK); 30385100
|
|
RETRY: 30385200
|
|
MINDEX ~ M[STOPPER + 1]; 30386000
|
|
IF BOOLEAN (TYPE.OERLAY) 30387000
|
|
THEN BEGIN COMMENT LOOK FOR AN AREA ADJACENT TO OVERLAY- 30388000
|
|
ABLE STORAGE.; 30389000
|
|
IF S { M[MINDEX].LENGTH 30390000
|
|
AND BOOLEAN (M[MINDEX].PREOLAY) 30391000
|
|
THEN BEGIN COMMENT START SEARCH IN OVERLAYABLE 30392000
|
|
PORTION OF LIST; 30393000
|
|
OVERSRCH: START ~ PREVADDR; 30394000
|
|
ARGS ~ 1 & LLLUARG (1, S); 30395000
|
|
END 30396000
|
|
ELSE IF S > M[PREVADDR].LENGTH 30397000
|
|
THEN GO TRUBLE 30398000
|
|
ELSE BEGIN 30399000
|
|
STARTSRCH: START ~ AVAILI; 30400000
|
|
ARGS ~ 1 & LLLUARG (0, S); 30401000
|
|
END 30402000
|
|
END 30403000
|
|
ELSE IF S > M[PREVADDR].LENGTH 30404000
|
|
THEN IF S > M[MINDEX].LENGTH THEN GO TRUBLE ELSE GO 30405000
|
|
OVERSRCH 30406000
|
|
ELSE GO STARTSRCH; 30407000
|
|
MINDEX ~ M[LISTLOOKUP(ARGS, M, START)].LINK; 30408000
|
|
AVAILREMOVE (MINDEX + M[MINDEX].LENGTH); 30409000
|
|
GO AROUND; 30410000
|
|
TRUBLE: MINDEX ~ TROUBLE(S); 30411000
|
|
IF MINDEX < 1 30412000
|
|
THEN BEGIN 30413000
|
|
SAVE PROCEDURE DAMMIT; 30413020
|
|
BEGIN 30413040
|
|
EVENT SPACESHOT; 30413160
|
|
TRYAGAIN ~ FALSE; 30413200
|
|
QUEUEMYSTACK (STACK[WHOFOR, PRIORITYPLACE], S, SPACERETRY, 30413400
|
|
SPACESHOT, SPACEQHEAD); 30413500
|
|
UNLOCK (SPACELOCK); 30413760
|
|
WAIT (SPACESHOT); 30413780
|
|
BUZZ (SPACELOCK); 30413800
|
|
TRYAGAIN ~ TRUE; 30413810
|
|
END OF QUEUEING UNSATISFIED REQUEST; 30413820
|
|
SAVE PROCEDURE SPOUTIT; 30413840
|
|
BEGIN 30413860
|
|
END OF SPOUTIT; 30413980
|
|
CASE ABS (MINDEX) OF 30413990
|
|
BEGIN 30414000
|
|
; COMMENT - SHOULD NEVER HAPPEN 0;30415000
|
|
; COMMENT - NO OVERLAY, SPOUT OR SLEEP 1;30416000
|
|
BEGIN 30417000
|
|
SPOUTIT; DAMMIT; % 2 30418000
|
|
END; 30419000
|
|
BEGIN 30420000
|
|
DAMMIT; % 3 30421000
|
|
END; 30422000
|
|
BEGIN 30423000
|
|
SPOUTIT; 30424000
|
|
END; 30425000
|
|
BEGIN 30426000
|
|
30427000
|
|
END; 30428000
|
|
END 30429000
|
|
END OF UNSATISFIED REQUESTS; 30429100
|
|
IF TRYAGAIN THEN GO RETRY ELSE IF MINDEX < 0 THEN GO ALLDONE; 30430000
|
|
AROUND: MINDEX ~ ALOCATE (S, MINDEX); 30431000
|
|
ALLDONE: GETSPACE ~ MINDEX; 30436000
|
|
UNLOCK (SPACELOCK); 30436100
|
|
TRACE (TRACTER); COMMENT RESTORE TRACE; 30437000
|
|
END OF GETSPACE; 30438000
|
|
SAVE PROCEDURE MOMTOVECTOR (MOM, VECTOR, INDEX); 30439000
|
|
VALUE COMMENT A COPY OR MOM DESCRIPTOR THAT IS AC- 30440000
|
|
CEPTABLE TO PRESENCE BIT; 30441000
|
|
COMMENT AN-UNINDEXED DESCRIPTOR THAT IS AC- 30442000
|
|
CEPTABLE TO AN NXLN OPERATOR; 30443000
|
|
INDEX; COMMENT THE INDEX FOR VECTOR WHERE MOM IS TO 30444000
|
|
BE PLACED; 30445000
|
|
WORD ARRAY MOM[*], 30446000
|
|
VECTOR[*]; 30447000
|
|
INTEGER INDEX; 30448000
|
|
BEGIN 30449000
|
|
MOM[0] ~ *; 30456000
|
|
VECTOR[INDEX] ~ MOM & SETCOPYBIT (0); 30457000
|
|
M [MOM.ADDRESSF - LINKSIZE +1].ADDRMOM ~ VECTOR.ADDRESSF+INDEX;30458000
|
|
END MOM TO VECTOR OR QUEUE; 30459000
|
|
30460000
|
|
SAVE PROCEDURE QUEUEMYSTACK (AUTHORITY, REQUIRED, COUNT, MYEVENT, HEAD);30461000
|
|
VALUE AUTHORITY, COMMENT THE SORTKEY FOR THIS QUEUE; 30462000
|
|
REQUIRED, COMMENT AN ADDITIONAL INFORMATION WORD FOR THE 30463000
|
|
QUEUE ENTRY; 30464000
|
|
COUNT; COMMENT A 10 BIT COUNTER IN THE STACK LINK 30465000
|
|
WORD FOR THIS QUEUE; 30466000
|
|
REAL HEAD ; COMMENT A GLOBAL REAL THAT CONTAINS THE BACK- 30467000
|
|
WARD AND FORWARD LINKS FOR THE QUEUE. THE BACK 30468000
|
|
WARD LINK POINTS TO THE ENTRY WITH THE HIGHEST 30469000
|
|
AUTHORITY; 30470000
|
|
EVENT MYEVENT; COMMENT THE EVENT THAT IS WAITED UPON AND 30471000
|
|
CAUSED BY THE CALLER; 30472000
|
|
REAL AUTHORITY, 30473000
|
|
REQUIRED; 30474000
|
|
INTEGER COUNT; 30475000
|
|
BEGIN COMMENT PLACE MYEVENT, REQUIRED AND AUTHORITY IN MY30476000
|
|
STACK AND PLACE MY STACK IN THE QUEUE POINTED AT30477000
|
|
BY HEAD BASED ON AUTHORITY.; 30478000
|
|
INTEGER FASTER, % THAN ME 30479000
|
|
SLOWER, % THAN ME 30480000
|
|
FASTEST, % ACCORDING TO HEAD 30481000
|
|
SLOWEST, % DITTO 30482000
|
|
I, % THE NEXT FASTEST ENTRY 30483000
|
|
INDEX, % THE ENTRY FASTER THAN MINE 30484000
|
|
ME ; % THE CALLERS (AND MY) STACK 30485000
|
|
MONITOR DONMONITOR (ME, HEAD, 30485100
|
|
SLOWER, 30485200
|
|
FASTER, 30485300
|
|
I); 30485400
|
|
ARRAY MY [*]; 30486000
|
|
REFERENCE MYREFERENCE = MY; 30486100
|
|
LABEL AHEAD, AROUND; 30487000
|
|
DEFINE AUTHORITYLINKL = READYWAITLINK#; 30488000
|
|
MY ~ STACK [ME ~ SNR, *]; 30489000
|
|
STOREITEM (AUTHORITYEVENT@(MYREFERENCE), MYEVENT); 30490000
|
|
MY [AUTHORITYPLACE] ~ AUTHORITY; 30492000
|
|
MY [REQUIREDPLACE] ~ REQUIRED; 30493000
|
|
SLOWEST ~ HEAD.SLOWPLACE; 30495000
|
|
IF I ~ FASTEST ~ HEAD.FASTPLACE = 0 30496000
|
|
THEN BEGIN COMMENT AN EMPTY HEAD; 30497000
|
|
%FASTER ~ SLOWER ~ 0; 30498000
|
|
HEAD ~ 0 & AUTHORITYLINKL(ME, ME); 30499000
|
|
GO AROUND; 30500000
|
|
END; 30501000
|
|
WHILE AUTHORITY { STACK [I, AUTHORITYPLACE] 30502000
|
|
DO BEGIN COMMENT I"M HIGHER LOOK FOR LESSER OR LEAST; 30503000
|
|
INDEX ~ I; 30504000
|
|
IF I ~ STACK[I, AUTHORITYLINKPLACE].SLOWPLACE = 0 30505000
|
|
THEN GO AHEAD; 30506000
|
|
END; 30507000
|
|
IF I = FASTEST 30508000
|
|
THEN BEGIN COMMENT I"M FASTER THAN THE FASTEST - TELL EM;30509000
|
|
STACK [SLOWER ~ FASTEST, AUTHORITYLINKPLACE]. 30510000
|
|
FASTPLACE ~ ME; 30511000
|
|
HEAD.FASTPLACE ~ ME; 30512000
|
|
% FASTER ~ 0; 30513000
|
|
GO AROUND; 30514000
|
|
END 30515000
|
|
ELSE BEGIN COMMENT THERE ARE HIGHER & LOWER AUTHORITIES; 30516000
|
|
FASTER ~ INDEX; 30517000
|
|
SLOWER ~ STACK [INDEX, AUTHORITYLINKPLACE].SLOWPLACE;30518000
|
|
STACK[FASTER, AUTHORITYLINKPLACE].SLOWPLACE ~ ME; 30519000
|
|
STACK[SLOWER,AUTHORITYLINKPLACE].FASTPLACE ~ ME; 30520000
|
|
GO AROUND END; 30521000
|
|
AHEAD: STACK [FASTER ~ SLOWEST, AUTHORITYLINKPLACE].SLOWPLACE ~ ME; 30522000
|
|
HEAD.SLOWPLACE ~ ME; 30523000
|
|
% SLOWER ~ 0; NOBODY IS SLOWER THAN ME 30524000
|
|
AROUND: MY [AUTHORITYLINKPLACE] ~ 0 & AUTHORITYLINKL 30525000
|
|
(FASTER, SLOWER, COUNT); 30526000
|
|
END; 30527000
|
|
PROCEDURE DELINKASTACK (WHOSE, HEAD); 30528000
|
|
VALUE WHOSE; 30529000
|
|
INTEGER WHOSE; COMMENT THE AUTHORITY TYPE STACK TO DELINK; 30530000
|
|
REAL HEAD ; COMMENT THE HEAD OF THE AUTHORITY TYPE STACK; 30531000
|
|
BEGIN COMMENT UNDO ALL THE GOOD WORK OF QUEUEMYSTACK; 30532000
|
|
INTEGER SLOWEST, 30533000
|
|
FASTEST, 30534000
|
|
SLOWER, 30535000
|
|
FASTER; 30536000
|
|
REAL LINK; 30537000
|
|
MONITOR DONMONITOR (HEAD 30537100
|
|
); 30537200
|
|
ARRAY WHO [*]; 30538000
|
|
LABEL AWAY; 30539000
|
|
DEFINE ALP = WHO [AUTHORITYLINKPLACE]#; 30540000
|
|
WHO ~ STACK [WHOSE, *]; 30541000
|
|
SLOWEST ~ HEAD.SLOWPLACE; 30542000
|
|
FASTEST ~ HEAD.FASTPLACE; 30543000
|
|
IF SLOWEST = FASTEST 30544000
|
|
THEN BEGIN COMMENT ONLY ONE ENTRY; 30545000
|
|
IF WHOSE!SLOWEST THEN EXIT; % CALLER GOOFED 30546000
|
|
HEAD ~ 0; 30547000
|
|
END 30548000
|
|
ELSE IF WHOSE=FASTEST 30549000
|
|
THEN BEGIN COMMENT SLOWER OF WHOSE IS FASTEST; 30550000
|
|
HEAD.FASTPLACE~SLOWER~WHO[AUTHORITYLINKPLACE]. 30551000
|
|
SLOWPLACE; 30552000
|
|
STACK [SLOWER, AUTHORITYLINKPLACE].FASTPLACE ~0;30553000
|
|
END 30554000
|
|
ELSE IF WHOSE = SLOWER 30555000
|
|
THEN BEGIN COMMENT FASTER OF WHOSE IS SLOWEST; 30556000
|
|
HEAD.SLOWPLACE ~ FASTER ~ ALP.FASTPLACE; 30557000
|
|
STACK [SLOWER, AUTHORITYLINKPLACE]. 30558000
|
|
SLOWPLACE ~ 0; 30559000
|
|
END 30560000
|
|
ELSE BEGIN 30561000
|
|
FASTER ~(LINK ~ ALP).FASTPLACE; 30562000
|
|
SLOWER ~ LINK.SLOWPLACE; 30563000
|
|
STACK[FASTER, AUTHORITYLINKPLACE]. 30564000
|
|
SLOWPLACE ~ SLOWER; 30565000
|
|
STACK[SLOWER, AUTHORITYLINKPLACE]. 30566000
|
|
FASTPLACE ~ FASTER 30567000
|
|
END; 30568000
|
|
ALP ~ 0; 30569000
|
|
END OF DELINKING A QUEUE; 30570000
|
|
SAVE INTEGER PROCEDURE GETAREA(SIZE); VALUE SIZE; INTEGER SIZE; 31000000
|
|
COMMENT GETAREA SEARCHES BLOCKOFAREASQUE FOR A BLOCK OF A GIVEN SIZE 31001000
|
|
AREA. IF BLOCK IS NOT IN THE QUEUE IT CALLS GETSPACE PROCEDURE31002000
|
|
AND BUILDS UP AREASTATUS WORD FOR THE OBTAINED BLOCK- IT THEN 31003000
|
|
MAKES ENTRY INTO THE QUEUE, IT RESETS BIT REPRESNTING THE 31004000
|
|
FIRST AREA OF THE BLOCK AND RETURNS BASE ADDRESS OF THE BLOCK.31005000
|
|
IF BLOCK IS IN QUEUE,IT FINDS BITNO REPRESENTING AVAILABLE 31006000
|
|
AREA, RESETS THAT BIT IN AREASTATUSBITS FIELD AND RETURNS THE 31007000
|
|
ADDRESS AS BASE ADDRESS OF BLOCK INDEXED BY (BITNO-1). 31008000
|
|
SIZE -SIZE OF AREA IN NO. OF WORDS; 31009000
|
|
BEGIN 31010000
|
|
DEFINE AREASIZEF=AREASIZEFF#; 31011000
|
|
REFERENCE BLOCKPOINTER; COMMENT CURRENT POINTER OF QUEUE; 31012000
|
|
ARRAY QENTRY =BLOCKPOINTER [*]; 31013000
|
|
REAL AREASTATUSWORD; COMMENT LOCAL FOR AREASTATUS ITEM; 31014000
|
|
INTEGER BITNO; COMMENT BIT NO. FOR AVAILABLE AREA; 31015000
|
|
INTEGER COREADDR, COMMENT GETSPACE ADDRESS; 31016000
|
|
TRACTER,% MAR USED TO SHUT OFF TRACE IN THIS PROCEDURE 31017000
|
|
COREAREASIZE; 31018000
|
|
LABEL TRYANOTHER,LOOP; 31019000
|
|
LABEL NOQUENTRY; 31020000
|
|
FIELD SETFIELD=MAXNOOFAREAS-2:MAXNOOFAREAS-1; 31021000
|
|
TRACTER~TRACE(0); 31022000
|
|
IF FIRSTBLOCK=NULL THEN GO NOQUENTRY; 31023000
|
|
BLOCKPOINTER~ FIRSTBLOCK; 31024000
|
|
LOOP: 31025000
|
|
AREASTATUSWORD~ AREASTATUS @ BLOCKPOINTER; 31026000
|
|
IF SIZE=AREASTATUSWORD.AREASIZEF THEN COMMENT FOUND BLOCK; 31027000
|
|
BEGIN 31028000
|
|
BITNO~ FIRSTONE(AREASTATUSWORD.AREASTATUSBITSF )-1; 31029000
|
|
IF BITNO!-1 THEN AREASTATUS@(BLOCKPOINTER)~ 31030000
|
|
RESET(AREASTATUS@BLOCKPOINTER,BITNO) 31031000
|
|
ELSE GO TRYANOTHER; 31032000
|
|
END ELSE 31033000
|
|
BEGIN 31034000
|
|
TRYANOTHER: 31035000
|
|
BLOCKPOINTER ~ NEXTBLOCK @ BLOCKPOINTER; 31036000
|
|
IF BLOCKPOINTER!NULL THEN GO LOOP 31037000
|
|
ELSE 31038000
|
|
BEGIN 31039000
|
|
NOQUENTRY: 31040000
|
|
AREASTATUSWORD ~ 0; 31041000
|
|
AREASTATUSWORD.SETFIELD ~ @77777777; 31042000
|
|
BITNO~MAXNOOFAREAS-1; 31043000
|
|
AREASTATUSWORD.AREASIZEF~ SIZE; 31044000
|
|
COREAREASIZE~SIZE | MAXNOOFAREAS + 1; 31045000
|
|
COREADDR~GETSPACE(COREAREASIZE,0,4,0); 31046000
|
|
AREASTATUSWORD.BASEADDRF~COREADDR + 1; 31047000
|
|
M [COREADDR] ~ 0; 31047100
|
|
BLOCKPOINTER ~ ALLOCATE(BLOCKOFAREASQUE); 31048000
|
|
INITIALIZETOZERO(QENTRY.ADDRESSF, 3); 31049000
|
|
AREASTATUS@(BLOCKPOINTER)~AREASTATUSWORD; 31050000
|
|
BLOCKOFAREASQUE ~ BLOCKPOINTER; 31051000
|
|
END; 31052000
|
|
END; 31053000
|
|
INITIALIZETOZERO(COREADDR ~ AREASTATUSWORD.BASEADDRF + 31054000
|
|
BITNO | SIZE, SIZE); 31055000
|
|
TRACE(TRACTER); 31055100
|
|
RETURN(COREADDR); 31056000
|
|
END GETAREA; 31058000
|
|
SAVE PROCEDURE FORGETAREA(SIZE,ADDRESS); VALUE SIZE,ADDRESS; 31059000
|
|
INTEGER SIZE,ADDRESS; 31060000
|
|
COMMENT FORGETAREA SEARCHES BLOCKOFAREASQUE FOR A BLOCK OF A GIVEN 31061000
|
|
SIZE AREA. IF NO BLOCK IS FOUND THEN THE SIZE SPECIFIED MUST 31062000
|
|
BE WRONG. WHEN THE BLOCK OF GIVEN SIZE IS FOUND IT CHECKS 31063000
|
|
WHETHER SPECIFIED ADDRESS FALLS WITHIN THE BLOCK RANGE. WHEN 31064000
|
|
THE RIGHT BLOCK IS FOUND,IT FINDS BITNO REPRESENTING AREA TO 31065000
|
|
BE FORGOTTEN. IT SETS THAT BIT NO IN AREASTATUS ITEM OF QUEUE.31066000
|
|
IF ALL THE AREAS WITHIN BLOCK ARE AVAILABLE IT CALLS 31067000
|
|
FORGETSPACE TO FORGET THE BLOCK.NOTE QUEUE IS SEARCHED FROM 31068000
|
|
THE END TO DEALLOCATE ADDITIONAL BLOCKS (OF GIVEN SIZE) AS 31069000
|
|
SOON AS POSSIBLE: 31070000
|
|
SIZE - SIZE OF AREA IN NO OF WORDS 31071000
|
|
ADDRESS- BASE ADDRESS OF THE AREA; 31072000
|
|
IF SIZE = 0 31073000
|
|
THEN FORGETSPACE (ADDRESS) ELSE 31074000
|
|
BEGIN 31075000
|
|
DEFINE AREASIZEF=AREASIZEFF#; 31076000
|
|
REFERENCE BLOCKPOINTER; COMMENT CURRENT POINTER OF QUEUE; 31077000
|
|
REAL AREASTATUSWORD; COMMENT LOCAL FOR AREA STATUS ITEM; 31078000
|
|
INTEGER BITNO; COMMENT BIT NO FOR AREA TO BE FORGOTTEN; 31079000
|
|
LABEL LOOP,QUIT; 31080000
|
|
BLOCKPOINTER ~ LASTBLOCK ; 31081000
|
|
LOOP: 31082000
|
|
AREASTATUSWORD~ AREASTATUS @ BLOCKPOINTER; 31083000
|
|
IF SIZE=AREASTATUSWORD.AREASIZEF THEN 31084000
|
|
BEGIN COMMENT BLOCK OF RIGHT SIZE; 31085000
|
|
IF BITNO~ADDRESS-AREASTATUSWORD.BASEADDRF>0 THEN 31086000
|
|
IF BITNO~BITNO DIV SIZE < MAXNOOFAREAS THEN 31087000
|
|
BEGIN COMMENT BLOCK OF RIGHT SIZE AND ADDRESS; 31088000
|
|
AREASTATUSWORD~ SET(AREASTATUSWORD,BITNO); 31089000
|
|
COMMENT COUNT NO. OF BITS ON (NO OF AVAILABLE 31090000
|
|
AREAS); 31091000
|
|
BITNO~ ONES(AREASTATUSWORD.AREASTATUSBITSF); 31092000
|
|
IF BITNO=MAXNOOFAREAS THEN 31093000
|
|
BEGIN 31094000
|
|
FORGETSPACE(AREASTATUSWORD.BASEADDRF-1); 31095000
|
|
DELINK(BLOCKOFAREASQUE,BLOCKPOINTER) 31096000
|
|
END ELSE 31097000
|
|
AREASTATUS @(BLOCKPOINTER)~AREASTATUSWORD; 31098000
|
|
GO QUIT; 31099000
|
|
END; 31100000
|
|
END; 31101000
|
|
BLOCKPOINTER~ PRVSBLOCK @ BLOCKPOINTER; 31102000
|
|
IF BLOCKPOINTER=NULL THEN 31103000
|
|
BEGIN 31104000
|
|
COMMENT BUILD A MESSAGE "WRONG SIZE OR ADDRESS FOR AREA"; 31105000
|
|
%SPOUT(MSGAREA,DISPLAYONCON);% MAR 31106000
|
|
END ELSE GO LOOP; 31107000
|
|
QUIT: 31108000
|
|
END FORGETAREA; 31109000
|
|
SAVE 1 PROCEDURE INITIALIZEARRAY(FIRSTARRAY, LASTARRAY, LENGTH); 32000000
|
|
VALUE LENGTH; 32001000
|
|
INTEGER LENGTH; 32002000
|
|
WORD ARRAY FIRSTARRAY,LASTARRAY [*]; 32003000
|
|
BEGIN COMMENT GET SPACE AND INITIALIZE ALL DESCRIPTORS BETWEEN32004000
|
|
FIRSTARRAY AND LASTARRAY (INCLUSIVE). (SEE COM- 32005000
|
|
MENT AT "UNIT" ARRAY DECLARATION) "LENGTH" IS 32006000
|
|
THE NUMBER OF WORDS GOTTEN FOR EACH ARRAY AND 32007000
|
|
THE LENGTH FIELD OF THE ARRAY DESCRIPTOR. ;32008000
|
|
INTEGER MOMF ~ NAME(FIRSTARRAY).ADRCPLF, 32009000
|
|
MOML ~ NAME(LASTARRAY).ADRCPLF, 32010000
|
|
T, 32011000
|
|
A; 32012000
|
|
MOMF ~ * + D0; 32013000
|
|
MOML ~ * + D0; 32014000
|
|
T ~ MOML - MOMF + 1; 32015000
|
|
LENGTH~*|(FIRSTARRAY.DBITF+1); 32015100
|
|
M[MOMF] ~ FIRSTARRAY & DATADESCRIPTOR 32016000
|
|
(,1,0,*,*,*,*,*,LENGTH, A ~ 32017000
|
|
GETSPACE (T | LENGTH, 0, 1, 0)); 32018000
|
|
INITIALIZETOZERO (A, T | LENGTH); 32019000
|
|
WHILE MOMF ~ * + 1 { MOML DO 32020000
|
|
M[MOMF] ~ 0 & DATADESCRIPTOR 32021000
|
|
(,1,0,*,*,*,*,*, LENGTH, A ~ A + LENGTH); 32022000
|
|
END INITIALIZE ARRAYS; 32023000
|
|
SAVE 1 PROCEDURE INITIALIZEQARRAY (QARRAYW, LENGTH); 32024000
|
|
VALUE LENGTH; 32025000
|
|
INTEGER LENGTH; 32026000
|
|
WORD ARRAY QARRAYW [*]; 32027000
|
|
BEGIN COMMENT GET "LENGTH" SPACE AND FILL IT WITH NULL DATA 32028000
|
|
DESCRIPTORS; 32029000
|
|
WORD DD; 32030000
|
|
WORD WT1 = QARRAYW; 32031000
|
|
INTEGER MOMQ ~ WT1.ADRCPLF, 32032000
|
|
A; 32033000
|
|
INTEGER I ~ LENGTH - 1; 32034000
|
|
M[MOMQ] ~ 0 & DATADESCRIPTOR 32035000
|
|
(,1,*,*,*,*,*,*, LENGTH, 32036000
|
|
A ~ GETSPACE (LENGTH, 0, 1, 0)); 32037000
|
|
DD ~ 0 & DATADESCRIPTOR (,1,1,*,*,*,*,*,*,*); 32038000
|
|
DO QARRAYW[I] ~ DD UNTIL I ~1 - 1 < 0; 32039000
|
|
END INITIALIZEQARRAY; 32040000
|
|
SAVE 1 PROCEDURE INITIALIZE (P1, P2); 32041000
|
|
VALUE P1; 32042000
|
|
INTEGER P1; 32043000
|
|
WORD P2; 32044000
|
|
BEGIN 32045000
|
|
DEFINE TIMEINCR = 32048000
|
|
1000 COMMENT THE TIME IN MICRO-SECONDS THAT 32049000
|
|
SHOULD BE ADEQUATE TO INITIALIZE A PROCES- 32050000
|
|
SORS STACK.; 32051000
|
|
/BASICCLOCKUNIT 32052000
|
|
| 0 COMMENT ************ CHECK-OUT; 32053000
|
|
| 8 #, COMMENT MAXIMUM NUMBER OF PROCESSORS.; 32054000
|
|
DD = DATADESCRIPTOR#, 32055000
|
|
MINDEX = TIMEOUT#, 32056000
|
|
MLENGTH = MAXADDR#,% 32057000
|
|
T = NEXTADDR #, 32058000
|
|
CODE = FIRSTADDR #, 32059000
|
|
OLDS = NEXTROW #, 32059100
|
|
STOPPIT = GLOBALSTOP#; 32060000
|
|
FIELD PROCIDBITS = (MYSELF-1):1, 32061000
|
|
MODULE = 19:6, 32062000
|
|
SDBITS = 9:10, 32063000
|
|
MOD2F = 0:1, 32064000
|
|
DIV2F = 47:47; 32065000
|
|
LAYOUT MSCW (35:16, 13:14); 32066000
|
|
DEFINE TYPEINT = TYPEINTERROGATE#, PATHINT = TYPEINT#; 32067000
|
|
DEFINE INITIALIZERARRAY (QARRAY, RARRAY, LENGTH) = 32068000
|
|
REPLACE POINTER (RARRAY) BY POINTER (QARRAY) 32069000
|
|
FOR LENGTH OVERWRITE;#; 32070000
|
|
DEFINE MOVESTACK (NEWF) = 32071000
|
|
BEGIN 32072000
|
|
D[30] ~ F; COMMENT D[30] IS TEMPORARY FOR WHERE WE 32073000
|
|
MOVE FROM; 32074000
|
|
F ~ NEWF ~ SHEETENTRYSIZE + 2; 32075000
|
|
COMMENT ALL PROCESSORS HAVE AN INITIAL S REG 32076000
|
|
SETTING OF 8192. WHEN INITIALIZE IS INVOKED, IT32077000
|
|
RUNS WITH A D[1] AND F OF 8193 AND THIS IS IM- 32078000
|
|
MEDIATELY CHANGED TO A LOCATION SOME PLACE IN 32079000
|
|
THE SECOND HALF OF MOD 0. THE EXACT LOCATION IS32080000
|
|
BASED ON THE PROCESSOR ID.; 32081000
|
|
D[1] ~ F; 32082000
|
|
S ~ S + F - D[30]; 32083000
|
|
M[F] ~ 0 & MARKSTACKCW (, 32084000
|
|
REAL (SNR ! 0), 1, *, *, 1, 32085000
|
|
IF SNR =0 THEN F ELSE SHEETENTRYSIZE +1); 32086000
|
|
REPLACE POINTER (M[F+1]) BY POINTER (M[D[30] + 1]) 32087000
|
|
FOR S - F OVERWRITE; 32088000
|
|
D[30] ~ 0; 32089000
|
|
END #; 32090000
|
|
DEFINE MISSINGMODS = 32091000
|
|
BEGIN COMMENT MISSINGMODS ALLOCATES MISSING MEMORY MODULES AS 32092000
|
|
NON-OVERLAYABLE AREAS AND PRESENT MODULES AS 32093000
|
|
OVERLAYABLE AREAS. WHEN MISSINGMODS IS INVOKED 32094000
|
|
THE SITUATION IS THIS: 32095000
|
|
1. THERE ARE "HOLES" IN MEMORY. I.E. THERE ARE32096000
|
|
ONE OR MORE INACTIVE MODULES SURROUNDED BY 32097000
|
|
ONE OR MORE ACTIVE MODULES. 32098000
|
|
2. ACTIVE MODULES INCLUDE 0 AND THE HIGHEST 32099000
|
|
AVAILABLE. 32100000
|
|
3. ZERO WORDS HAVE BEEN ALLOCATED AT THE HIGH-32101000
|
|
EST POSSIBLE MEMORY LOCATION. 32102000
|
|
4. MEMMODS ARRAY (INDEXED BY MODULE) HAS BEEN 32103000
|
|
INITIALIZED (1 IS ACTIVE MODULE). 32104000
|
|
5. THE REMAINDER OF THE HIGHEST MODULE IS A- 32105000
|
|
VAILABLE FOR ALLOCATION. WE WILL DO THIS 32106000
|
|
IN SUCH A WAY THAT THE ZERO WORD OF THE 32107000
|
|
MODULE IS AVAILABLE FOR SOME "Z" LINK. ;32108000
|
|
MINDEX ~ GETSPACE(16382-(LINKSIZE+1)|2,0,1,1).MODULE -1; 32109000
|
|
MLENGTH ~ 16384; 32110000
|
|
WHILE MINDEX } 1 DO 32111000
|
|
BEGIN 32112000
|
|
IF MEMMODS[MINDEX] = 0 32113000
|
|
THEN BEGIN COMMENT THE MOD IS MISSING; 32114000
|
|
IF MEMMODS[MINDEX -1] = 1 32115000
|
|
THEN BEGIN COMMENT BUT THE ONE BELOW IT IS 32116000
|
|
READY SO WE ALLOCATE THE MISSING 32117000
|
|
ONE AS NON-OVERLAYABLE.; 32118000
|
|
GETSPACE (MLENGTH, 0, 1, 0); 32119000
|
|
MLENGTH ~ 16364; 32120000
|
|
END OTHERWISE WE INCREASE THE AMOUNT WE 32121000
|
|
GET WHEN WE CAN 32122000
|
|
ELSE IF (MLENGTH ~ MLENGTH + 16364).MODULE > 7 32123000
|
|
THEN STOP COMMENT DONT EXCEDE GETSPACE MAX;32124000
|
|
END OTHERWISE ALLOCATE AS OVERLAYABLE SAVING FIRST 32125000
|
|
WORD OF MODULE FOR Z LINK 32126000
|
|
ELSE GETSPACE (16383 - LINKSIZE, 0, 1, 1); 32127000
|
|
MINDEX ~ MINDEX - 1; 32128000
|
|
END 32129000
|
|
END #; 32130000
|
|
DISALLOW; 32131000
|
|
CASE FIRSTONE(ABS(P1))-21+REAL(NOT INITSWITCH).MPXINDICATOR OF 32132000
|
|
BEGIN 32133000
|
|
CASE FIRSTONE (P1.SDBITS) - 1 OF 32134000
|
|
BEGIN 32135000
|
|
STOPPIT; 32136000
|
|
STOPPIT; 32137000
|
|
STOPPIT; 32138000
|
|
STOPPIT; 32139000
|
|
STOPPIT; 32140000
|
|
STOPPIT; 32141000
|
|
STOPPIT; 32142000
|
|
STOPPIT; 32143000
|
|
STOPPIT; 32144000
|
|
BEGIN 32145000
|
|
STOPPIT; 32145050
|
|
END IO FINISH; 32145100
|
|
; 32146000
|
|
; 32147000
|
|
; 32148000
|
|
; 32149000
|
|
; 32150000
|
|
; 32151000
|
|
END MPX INTERRUPTS CASE; 32153000
|
|
BEGIN COMMENT PROCESSOR TO PROCESSOR INTERRUPT; 32154000
|
|
MOVESTACK (PROCSTACKSIZE | MYSELF + F); 32155000
|
|
PROCMASK.PROCIDBITS ~ 1; COMMENT IDENTIFY MYSELF; 32156000
|
|
IF TIMEOUT = 0 32157000
|
|
THEN BEGIN COMMENT FIRST PROCESSOR SAYS HOW LONG32158000
|
|
IT SHOULD TAKE TO INITIALIZE 32159000
|
|
ALL PROCESSORS; 32160000
|
|
TIMEOUT ~ SCANIN (TIMEOFDAYWORD)+ TIMEINCR;32161000
|
|
INITSWITCH ~ TRUE; 32162000
|
|
END; 32163000
|
|
HEYOU; COMMENT ALL PROCESSORS HAVE BEEN IDLING OR 32164000
|
|
EXECUTING THE CODE IN THIS COMPOUND 32165000
|
|
STATEMENT.; 32166000
|
|
COMMENT ONLY ONE PROCESSOR CAN SUCCESSFULLY 32167000
|
|
COMPLETE THE TWO FOLLOWING STATEMENTS 32168000
|
|
AND IT IS THE ONE THAT COMPLETES THE 32169000
|
|
INITIALIZATION.; 32170000
|
|
DO UNTIL SCANIN (TIMEOFDAYWORD) > TIMEOUT; 32171000
|
|
BUZZCONTROL (SLAVEQUARTERS); 32172000
|
|
IF LOCK(SLAVEQUARTERS) 32173000
|
|
THEN BEGIN COMMENT GET MEMORY 32174000
|
|
UNDER CONTROL.; 32175000
|
|
MINDEX := INITIALIZEPCW := 0; 32176000
|
|
MCPINFO ~ MCPINFO & 32177000
|
|
NOTPRESENTARRAYDESCL(,*,3,0,MCPTOP := 32177040
|
|
M[2]); 32177050
|
|
COMMENT THE MCP LOADERS 32177100
|
|
WILL ALWAYS PLACE THIS 32178000
|
|
ADDRESS IN MEMORY[2] SO32179000
|
|
THAT WE WILL KNOW WHERE32180000
|
|
TO FIND THE MCP INFO 32181000
|
|
SEGMENTS; 32182000
|
|
SIMULATING := BOOLEAN(M[2]).BIT45 ; 32182100
|
|
M[2] := 0; 32182200
|
|
DO MINDEX ~ M[MINDEX].INUSELENGTH + MINDEX32183000
|
|
+ 1 UNTIL BOOLEAN(M[MINDEX].AVAILABLE);32184000
|
|
PREVADDR ~ MINDEX; 32185000
|
|
AVAILI ~ TEMPLINKS.ADDRESSF; 32186000
|
|
COMMENT FIX FIRST AVAILABLE LINK; 32187000
|
|
TEMPLINKS[0] ~ 0 & 32188000
|
|
AVAILA (,*,LINKSIZE,, PREVADDR); 32189000
|
|
TEMPLINKS [LINKSIZE] ~ 0 & 32190000
|
|
AVAILZ (,, LINKSIZE); 32191000
|
|
COMMENT FIX STOPPER; 32192000
|
|
STOPPER ~ LINKSIZE + 1; 32193000
|
|
TEMPLINKS [STOPPER] ~ 4"040000000001" & 32194000
|
|
AVAILA (,*, LINKSIZE,,*); 32195000
|
|
TEMPLINKS[STOPPER+1] ~ PREVADDR; 32196000
|
|
TEMPLINKS[STOPPER+LINKSIZE] ~ 32197000
|
|
0 & AVAILZ (,, LINKSIZE); 32198000
|
|
COMMENT UPDATE AVAILABLE AREA LINK; 32199000
|
|
STOPPER ~STOPPER +TEMPLINKS.ADDRESSF; 32200000
|
|
M[PREVADDR].LINK ~STOPPER; 32201000
|
|
M[PREVADDR+1] ~ AVAILI; 32202000
|
|
COMMENT SAVE INITIALIZATION CODE 32203000
|
|
ADDRESS FOR LATER FORGETING;32204000
|
|
SAVE1ADDRESS ~ PREVADDR - M[PREVADDR -1]. 32205000
|
|
INUSELENGTHZ + 2; 32206000
|
|
32207000
|
|
BACKALLOCATED ~ SAVE1ADDRESS - LINKSIZE; 32208000
|
|
MEMMODS ~ MEMMODS&DD 32209000
|
|
COMMENT IT SEEMS LIKE A REASONABLE PLACE;32210000
|
|
( ,1,0,*,*,*,*,*,*, 12000); 32211000
|
|
REPLACE POINTER(MEMMODS) BY 1 FOR 64 32212000
|
|
OVERWRITE; 32213000
|
|
COMMENT ASSUME ALL POSSIBLE MEMORY IS 32214000
|
|
PRESENT AND MARK ABSENT MODS IN INVALID 32215000
|
|
ADDRESS.; 32216000
|
|
MEMMAX ~ M.LENGTHF; 32217000
|
|
COMMENT LET INVALID ADDRESS WORK; 32218000
|
|
MINDEX ~ 0; 32219000
|
|
DO BEGIN 32220000
|
|
M[MINDEX := MINDEX + 16384] := 0; 32220500
|
|
IF BOOLEAN(MEMMODS[MINDEX.MODULE]) THEN 32220600
|
|
M[MINDEX+1] := 0; %CHECK INTERLACING 32220700
|
|
END UNTIL MINDEX = 1032192; 32221000
|
|
COREFACTOR ~ TRUE; COMMENT * * * * * * * * * * ; 32221050
|
|
AVAILABLECORE ~ MEMMAX - PREVADDR; 32221100
|
|
COMMENT FIND HIGHEST POSSIBLE ADDRESS; 32222000
|
|
MINDEX~MASKSEARCH(1,1,MEMMODS)|16384+16382;32223000
|
|
M.LENGTHF ~MINDEX + 1; 32224000
|
|
COMMENT WHEN THERE IS MAXIMUM MEMORY32225000
|
|
THE LAST WORD IS NOT INDEXABLE THROUGH32226000
|
|
M AND SO WE WASTE IT ALLCASES.; 32227000
|
|
M[PREVADDR].LENGTH ~ MINDEX - PREVADDR; 32228000
|
|
M[MINDEX] ~ 0 & AVAILZ (,,MINDEX-PREVADDR);32229000
|
|
COMMENT NOW ALL MEMORY ABOVE INITIALIZA- 32230000
|
|
TION AND INCLUDING MEMMAX LOOKS 32231000
|
|
AVAILABLE. THIS MAY NOT BE TRUE 32232000
|
|
BECAUSE OF MISSING MODS, BUT ALL 32233000
|
|
THE SPACE ROUTINES WILL FUNCTION,32234000
|
|
AND TO AVOID REPETITIVE CHECKS AS32235000
|
|
TO WHETHER WE ARE AT THE END OF 32236000
|
|
MEMORY WE WILL ALLOCATE 0 NON- 32237000
|
|
OVERLAYABLE WORDS AT THE END OF 32238000
|
|
MEMORY.; 32239000
|
|
GETSPACE (0, 0, 1, 0); 32240000
|
|
MEMMAX ~ MEMMAX -1; 32241000
|
|
IF MINDEX ! MEMMAX 32242000
|
|
THEN BEGIN COMMENT THERE ARE MISSING MODS.32243000
|
|
REGARDLESS OF THE STATUS OF OTHER32244000
|
|
MODS, 16375 WORDS CAN BE GOTTEN 32245000
|
|
IN THE FINAL MOD AND THE FIRST 32246000
|
|
WORD OF THE MOD WILL BE AVAILABLE32247000
|
|
FOR SOME "Z" LINK.; 32248000
|
|
MISSINGMODS; 32249000
|
|
END; 32250000
|
|
MINDEX ~ M.LENGTHF -1; 32251000
|
|
DO BEGIN 32252000
|
|
IF BOOLEAN(M[MINDEX].OLAY) 32253000
|
|
THEN FORGETSPACE(MINDEX +LINKSIZE32254000
|
|
-M[MINDEX].INUSELENGTHZ); 32255000
|
|
MINDEX ~ MINDEX 32256000
|
|
- M[MINDEX].INUSELENGTHZ -1;32257000
|
|
END 32258000
|
|
UNTIL MINDEX + LINKSIZE +1= SAVE1ADDRESS; 32259000
|
|
REPLACE POINTER(MEMMODS) BY 0 FOR 64 WORDS;32260000
|
|
T ~ D31; 32261000
|
|
MONITORMASK ~ T.MONMASKF; 32262000
|
|
D31 := MONITORVALUE := T.MONVALF; 32263000
|
|
IF SIMULATING 32265000
|
|
THEN BEGIN 32266000
|
|
MINDEX ~ NAME(MON1TOR).SDIF; 32267000
|
|
M[MINDEX] ~ M[NAME(SIM1TOR)]; 32268000
|
|
END ELSE 32269000
|
|
LOCK(MONITORLOCK); 32269100
|
|
IF MAXSTACKS ~ (MEMMAX.MODULE +1) | 32270000
|
|
STACKSPERMODULE > 1024 32271000
|
|
THEN MAXSTACKS ~ 1024; 32272000
|
|
STACK ~ 32273000
|
|
STACK & DD(,1,0,*,*,*,*,*, MAXSTACKS, 32274000
|
|
GETSPACE(MAXSTACKS, 0, 1, 0)) ; 32275000
|
|
INITIALIZEARRAY(REPLY,REPLY,MAXSTACKS); 32275100
|
|
MAXSTACKS ~ * -1; 32276000
|
|
COMMENT ******** SOMETHING WILL EVENTUALLY HAVE TO BE DONE 32277000
|
|
ABOUT THE FOLLOWING TWO STATEMENTS IN REGARDS 32278000
|
|
TO NON-SEOUENTIALLY NUMBERED PROCESSORS 8/16; 32279000
|
|
PROCSTACKSTARTW~ WORD(GETSPACE( 32280000
|
|
PROCSTACKSIZE|FIRSTONE(PROCMASK),0,1,0)); 32281000
|
|
STACKVECTOR [0] ~ 0 & DD(); 32282000
|
|
REPLACE POINTER (STACKVECTOR[1]) BY 32283000
|
|
POINTER (STACKVECTOR[0]) 32284000
|
|
FOR MAXSTACKS - 1 OVERWRITE; 32285000
|
|
STACKVECTOR [0] ~ STACKVECTOR [0] 32286000
|
|
&DD(,1,0,*,*,*,*,*, 1+ 32287000
|
|
M[0].INUSELENGTH, *); 32288000
|
|
PERIPHERALINVALIDADDRESS := TRUE; 32288050
|
|
MAXCHANNELS := 4"F"; 32288060
|
|
FOR CODE := 0 STEP 1 UNTIL 3 DO 32288100
|
|
BEGIN % MPX 32288150
|
|
OLDS := S; 32288200
|
|
SCANIN(0 & SCANINWORD(2, SET(0, CODE),32288250
|
|
1)); %MIGHT AS WELL READ R.D. 32288300
|
|
S := OLDS; % TO DELETE IN ADDR CRAP 32288350
|
|
END; 32288400
|
|
MULTIPLEXORMASK := BOOLEAN(2|MAXCHANNELS); 32288420
|
|
DCPSANDGCAS := 4"FFFFFFFFFF"; 32288440
|
|
FOR CODE := 4 STEP 1 UNTIL 19 DO 32288450
|
|
BEGIN % DCP 32288500
|
|
OLDS := S; 32288550
|
|
SCANOUT(0, 4"C0000" & SCANOUTWORD 32288600
|
|
(2, CODE - 4, 0)); % HALT DCP 32288650
|
|
S := OLDS; 32288700
|
|
END; 32288750
|
|
COMMENT DO THE GCA HERE---CODE GEQ 20; 32288800
|
|
UNLOCK (SLAVEQUARTERS); 32289000
|
|
32290000
|
|
COMMENT *** SOME QUEUE HEADS HAVE TO BE SMASHED AT INITIALISATION; 32292000
|
|
; 32293000
|
|
WORDREADYQHEAD ~ 0; 32294000
|
|
WORDSHEETQHEAD ~ 0; 32295000
|
|
WORDTERMINATEQHEAD ~ 0; 32296000
|
|
COMMENT *** END OF QUEUE HEAD SMASHING; 32297000
|
|
INITIALIZEARRAY(STACKINUSE, IRPARAMETERLOK, 32297100
|
|
MAXIRINDEXPLUS1); 32297200
|
|
INITIALIZEARRAY(PRIORITYLEVEL,PRIORITYLEVEL,PRIORITYRANGE+1); 32297300
|
|
32297400
|
|
COMMENT *** THE NUMBER OF INDEPENDENT RUNNER STACKS MAY BE A DEFINE OR32298000
|
|
IT MAY BE A SYSTEM PARAMETER, FOR THE MOMENT, IT IS AN 32299000
|
|
INITIALISED VARIABLE AS DEMONSTRATED BELOW; 32300000
|
|
INDEPENDENTRUNNERSTACKS ~ 2; 32301000
|
|
COMMENT STACKINUSE GIVES THE STACK NO OF EACH INDEPENDENT RUNNER 32302000
|
|
WHICH IS CURRENTLY RUNNING AND WHICH DOES NOT REQUIRE MORE32303000
|
|
THAN ONE STACK, IT MUST BE INITIALISED TO ZERO; 32304000
|
|
FILLARRAY(STACKINUSE,0,MAXIRINDEX); 32305000
|
|
COMMENT IRPRIORITIES GIVES PRIORITY OF EACH INDEPENDENT RUNNER, 32306000
|
|
THOSE RUNNERS ASSIGNED INDICATORS MUST HAVE PRIORITIES 32306200
|
|
ASSIGNED.OTHER RUNNERS WILL HAvE DEFAULT PRIORITIES 32306400
|
|
; 32307000
|
|
FILLARRAY(IRPRIORITIES,IRDEFAULTPRIORITY,MAXIRINDEX);32308000
|
|
IRPRIORITIES[CONTROLCARDINDICATOR] 32308200
|
|
~CONTROLCARDPRIORITY; 32308400
|
|
IRPRIORITIES[INITIATEINDICATOR]~INITIATEPRIORITY; 32308600
|
|
IRPRIORITIES[TERMINATEINDICATOR]~TERMINATEPRIORITY; 32308800
|
|
IRPRIORITIES[DIRCOMPLEMENTINDICATOR] := 32308900
|
|
DIRCOMPLEMENTPRIORITY; 32308950
|
|
COMMENT FOLLOWING ARE INITIALIZATIONS OF SOME CONTROL WORDS; 32309000
|
|
D2MSCW2~0&MARKSTACKWD(,*,1,*,READYENTRYSIZE-2,*,2,4);32310000
|
|
IRMSCW2~0&MARKSTACKWD(,*,1,*,FIXEDIRSIZE-2,*,2,4); 32311000
|
|
SHEETTOSCW~0&TOSCW(,0,0,0,0,SHEETENTRYSIZE+1,1,1,2); 32312000
|
|
D2MSCW1~0&MARKSTACKWD(,1,1,*,D0OFFSET,*,1, 32313000
|
|
READYENTRYSIZE-3); 32314000
|
|
IRMSCW1~0&MARKSTACKWD(,1,1,*,D0OFFSET,*,1,FIXEDIRSIZE32315000
|
|
-3); 32315100
|
|
D1MSCW~0&MARKSTACKWD(,1,1,*,D0OFFSET,*,1,D1INFO-1); 32316000
|
|
32317000
|
|
D2RCW1 ~ 0&RETURNCONTROLWORD(,*,*,*,*,*,*); 32318000
|
|
IRTOSCW~0&TOSCW(,,,,,FIXEDIRSIZE+4,1,2,2); 32319000
|
|
D2TOSCW~0&TOSCW(,,,,,READYENTRYSIZE+4,1,2,2); 32319100
|
|
D03 := HARDWAREINTERRUPTPCW; 32320000
|
|
END OF NON PROCESSOR INITIALIZATION; 32321000
|
|
SNR ~ MYSELF; 32322000
|
|
P1 ~ PROCSTACKSTART.ADDRESSF + (MYSELF-1)| 32323000
|
|
PROCSTACKSIZE; 32324000
|
|
MOVESTACK (P1); 32324100
|
|
INITIALIZETOZERO (P1, SHEETENTRYSIZE); 32324900
|
|
STACKVECTOR [MYSELF] ~ 32325000
|
|
0 & DD ( ,1,*,*,*,*,*,*, PROCSTACKSIZE, 32326000
|
|
F - SHEETENTRYSIZE - 2); 32327000
|
|
STACK [SNR, 0]~MYSELF; % PROCESSOR ID TO TOS 32328000
|
|
WORDSTACK [MYSELF, 1] ~ 0 & 32329000
|
|
MARKSTACKCW (,*,1, SNR, *,*,*); 32330000
|
|
BOSR ~ STACKVECTOR[SNR].ADDRESSF; 32331000
|
|
LOSR ~ BOSR + PROCSTACKSIZE - STACKOFLOWSIZE; 32332000
|
|
MORETHANONEPROCESSOR ~ (NUMBEROFPROCESSORS ~ 32333000
|
|
ONES(PROCMASK)) > 1; 32334000
|
|
PROCSTACKSTART.LENGTHF ~ PROCSTACKSTART.LENGTHF+1; 32335000
|
|
INITIALIZEARRAY(SHEETVECTOR,SHEETVECTOR, 32336000
|
|
IF STACKVECTOR.LENGTHF<511 32336100
|
|
THEN STACKVECTOR.LENGTHF|2 ELSE 1024); 32336200
|
|
COMMENT *** THERE IS NO JUSTIFICATION FOR THIS; 32336400
|
|
HOLDINITIALISE; 32337000
|
|
END PROCESSOR TO PROCESSOR INTERRUPT; 32338000
|
|
BEGIN COMMENT TIMER & STACK OVERFLOW; 32339000
|
|
STOPPIT 32340000
|
|
END; 32341000
|
|
BEGIN COMMENT SYLLABLE DEPENDENT - CLASS 2; 32342000
|
|
STOPPIT 32343000
|
|
END; 32344000
|
|
CASE FIRSTONE (P1.SDBITS) - 1 OF 32345000
|
|
BEGIN 32346000
|
|
STOPPIT; COMMENT MEMORY PROTECT; 32347000
|
|
STOPPIT; COMMENT INVALID OPERATOR; 32348000
|
|
STOPPIT; COMMENT DIVIDE BY ZERO; 32349000
|
|
STOPPIT; COMMENT EXPONENT OVERFLOW; 32350000
|
|
STOPPIT; COMMENT EXPONENT UNDEHFLOW; 32351000
|
|
STOPPIT; COMMENT INVALID INDEX; 32352000
|
|
STOPPIT; COMMENT INTEGER OVERFLOW; 32353000
|
|
STOPPIT; COMMENT BOTTOM OF STACK; 32354000
|
|
BEGIN COMMENT PRESENCE BIT - 32355000
|
|
AS LONG AS P2 POINTS TO A WELL FORMED DATA 32356000
|
|
DESCRIPTOR THAT DOES NOT REQUIRE I-O, WE SHOULD 32357000
|
|
BE ABLE TO SATISFY PB INTERRUPTS DURING INITIAL-32358000
|
|
IZATION. HOWEVER, IT SHOULD BE REMEMBERED 32359000
|
|
THAT MOST ALLOCATION DURING INITIALIZATION IS 32360000
|
|
NON-STANDARD. I.E. NON-OVERLAYABLE AND HIGH IN 32361000
|
|
MEMORY. THIS PRESENCE BIT WILL CAUSE THE SAME 32362000
|
|
TYPE OF ACTION. NOTE - OP NOT CONSIDERED .; 32363000
|
|
ALLOW; 32364000
|
|
M[P2.ADDRESSF] ~ M[P2.ADDRESSF] & DD 32365000
|
|
(*,1,0,*,*,*,*,*,*, GETSPACE( M[P2.ADDRESSF]. 32366000
|
|
LENGTHF , 0,1, P2.ADDRESSF)); 32367000
|
|
INITIALIZETOZERO(M[P2.ADDRESSF].ADDRESSF, 32368000
|
|
M[P2.ADDRESSF].LENGTHF); 32368100
|
|
IF P2.TAG ! 1 32369000
|
|
THEN P2~P2 & DD (*,1,1,*,*,*,*,*,*, 32370000
|
|
M[P2.ADDRESSF].ADDRESSF); 32370100
|
|
IF P1 < 0 32371000
|
|
THEN RETURN(P2); 32372000
|
|
32373000
|
|
END INITIALIZE PRESENCE BIT; 32374000
|
|
STOPPIT; COMMENT SEQUENCE ERROR; 32375000
|
|
END SYLLABLE DEPENDENT; 32376000
|
|
CASE FIRSTONE(P1.SDBITS) OF 32377000
|
|
BEGIN COMMENT ALARM INTERRUPTS; 32378000
|
|
STOPPIT; 32379000
|
|
STOPPIT; COMMENT OPERATOR LOOP; 32380000
|
|
STOPPIT; COMMENT MEMORY PARITY; 32381000
|
|
STOPPIT; COMMENT MPX PARITY; 32382000
|
|
IF PERIPHERALINVALIDADDRESS THEN 32383000
|
|
BEGIN COMMENT PERIPHERAL TYPE INVALID ADDRESS; 32383100
|
|
IF CODE < 4 THEN 32383200
|
|
MAXCHANNELS := RESET(MAXCHANNELS,CODE) ELSE 32383300
|
|
DCPSANDGCAS := RESET(DCPSANDGCAS, CODE - 4 | 32383400
|
|
REAL(CODE < 20)); 32383500
|
|
END ELSE 32383600
|
|
BEGIN COMMENT MEMORY TYPE INVALID ADDRESS; 32383700
|
|
MEMMODS[MINDEX.MODULE] ~ 0; 32384000
|
|
MEMMAX ~ MEMMAX - 16384; 32385000
|
|
M[F+1] ~ IF M[F+1].PSRF = 0 32386000
|
|
THEN M[F+1] & RETURNCONTROLWORD 32387000
|
|
(*,*,5,M[F+1].PIRF-1,*,*,*) 32388000
|
|
ELSE M[F+1] & RETURNCONTROLWORD 32389000
|
|
(*,*,M[F+1].PSRF-1,*,*,*,*); 32390000
|
|
M[F-1].INDEXF ~ 16383; 32391000
|
|
COMMENT SET BACK PIR & PSR SO THAT THE 32392000
|
|
INVOKING OPERATOR IS REPEATED AND32393000
|
|
THE STACK IS PROPERLY CUT BACK. 32394000
|
|
THE WORD AT 16383 IS AVAILABLE 32395000
|
|
AND UNUSED AT THIS TIME.; 32396000
|
|
END; 32397000
|
|
STOPPIT; COMMENT STACK UNDERFLOW; 32398000
|
|
STOPPIT; COMMENT INVALID OPERATOR; 32399000
|
|
END ALARM INTERRUPTS; 32400000
|
|
END MAJOR INTERRUPT CASE; 32401000
|
|
32402000
|
|
END INITIALIZE; 32403000
|
|
32404000
|
|
33000000
|
|
SAVE PROCEDURE HARDWAREINTERRUPT (P1,P2); VALUE P1,P2; 33001000
|
|
INTEGER P1; COMMENT IDENTIFIES TYPE OF INTERRUPT; 33002000
|
|
WORD P2; COMMENT USED BY PRESENCE BIT AND POSSIBLY OTHERS; 33003000
|
|
COMMENT FURTHER GLOBALS ARE 33004000
|
|
33005000
|
|
33006000
|
|
33007000
|
|
PROCEDURE MYFAULT ) NOTE THAT THESE NAMES 33008000
|
|
MYDIVIDEBYZERO ) ACCESS PCWS STUFFED IN 33009000
|
|
MYEXPONENTOVERFLOW ) KNOWN STACK LOCATIONS BY 33010000
|
|
MYEXPONENTUNDERFLOW ) COMPILES,LINKAGE LOADERS ETC. 33011000
|
|
MYINVALIDINDEX ) THEY ARE ASSOCIATED WITH E.G. 33012000
|
|
MYINTEGEROVERFLOW ) ALGOL FAULT STATEMENTS THUS 33013000
|
|
) PCWS SHOULD HAVE CONTROL BIT ON33014000
|
|
) AND ACCESSED STATEMENTS SHOULD 33015000
|
|
) NOT INVOKE SYLLABLE DEPENDENT 33016000
|
|
) INTERRUPTS 33017000
|
|
SIZE IS NUMBER OF WORDS REQUIRED, 33018000
|
|
THERE ARE POTENTIALLY 8 TYPES ONLY TWO ARE DISTINGUISHED SO 33019000
|
|
FAR(AND MUST BE GLOBALLY DEFINED): 33020000
|
|
OVLAYABLE 33021000
|
|
NONOVLAYABLE 33022000
|
|
GREATESTTYPE MAXIMUM VALUE OF TYPE FOR GETSPACE 33023000
|
|
MASSIN(DISKTYPE,DISKADDRESS,EVENT, SOME OTHER PARAMETERS) 33024000
|
|
DISKTYPE CODEDISK 33025000
|
|
OVERLAYDISK 33026000
|
|
EVENT IS SET ON COMPLETION 33027000
|
|
FIREUP TRANSFERS PROCESSES FROM EVENT QUEUE 33028000
|
|
TO READYQ 33029000
|
|
; 33030000
|
|
COMMENT THIS PROCEDURE HANDLES ALL INTERRUPTS 33031000
|
|
IT USES AS BIBLE :- "INTERRUPT HANDLING AND ACCIDENTAL ENTRY"33032000
|
|
, E.A. HAUK, JULY 25 1967 33033000
|
|
(1) NOTE THAT THE PROCEDURE MAY EITHER EXIT ON COMPLETION OR 33034000
|
|
CHANGE TO ANOTHER PROCESS(JOB). THUS ALL PROCESS INITIATION 33035000
|
|
AND RE-ACTIVATION MAY BE HANDLED IN THIS PROCEDURE IF SUCH A 33036000
|
|
COURSE PROVES DESIRABLE 33037000
|
|
(2) NOTE THAT A SINGLE PROCESSOR USER PAYS A PRICE BECAUSE OF 33038000
|
|
POTENTIAL MULTIPROCESSOR USERS. SOME ATTEMPT TO MINIMISE THIS 33039000
|
|
PRICE MAY BE WORTHWHILE. SOURCE EDITING AND THE USE OF DEFINES 33040000
|
|
MAY BE APPROPRIATE; 33041000
|
|
33042000
|
|
BEGIN COMMENT MCS 1; 33043000
|
|
REAL TRACTER ; 33044000
|
|
PROCEDURE NOTYETCODED (X); VALUE X; REAL X; FORWARD; 33045000
|
|
LAYOUT P1PARAMETER 33046000
|
|
( IOFFIELD = 0:1 % INT MASK FIELD FOR IOFINISH 33047000
|
|
, MPXSPECFIELD= 3:4 % SPECIFIES MPXA OR MPXB 33048000
|
|
, ALARMFIELD = 5:6 % ALARM TYPE 33049000
|
|
, IFFIELD = 7:4 % MPX INTERFACE 33050000
|
|
, INTFIELD = 9:10 % SD INTERRUPT TYPE 33051000
|
|
, MPXFIELD = 20:1 % MPX INTERRUPT 33052000
|
|
, SDFIELD = 24:1 % SYLLABLE DEP INT FLAG 33053000
|
|
, RTBITF = 46:1 % RETURN BIT 33054000
|
|
) ; 33055000
|
|
33056000
|
|
33057000
|
|
33058000
|
|
DEFINE INTERVALTIMERSPEC = @020000001# 33059000
|
|
, STACKOVERFLOWSPEC = @020000002# 33060000
|
|
, SYLLABLEDEPNDNT2SPEC= @040000000# 33061000
|
|
, ALARMSPEC = @200000001# 33062000
|
|
, PROCTOPROCSPEC = @010000000# 33063000
|
|
, SYLABLEDEPENDENT2 = SYLLABLEDEPNDNT2SPEC# 33064000
|
|
; 33065000
|
|
DEFINE LITERALFUNCTIONA = @ 743 # 33066000
|
|
, LITERALFUNCTIONB = @ 745 # 33067000
|
|
; 33068000
|
|
INTEGER MYSNR 33069000
|
|
, MYF 33070000
|
|
33071000
|
|
; 33072000
|
|
LABEL LOOKAROUND 33073000
|
|
, AGAIN 33074000
|
|
, FINI 33075000
|
|
; 33076000
|
|
BOOLEAN FIRST )"TRUE IF FIRST TIME AT LOOKAROUND "(33077000
|
|
RTBIT 33078000
|
|
; 33079000
|
|
MONITOR JACKMONITOR(P1); 33080000
|
|
WORD ACTUALCOPY = P2 33081000
|
|
; 33082000
|
|
FIELD BITONEF = 1:1 33082100
|
|
, BITTWOF = 2:1 33082200
|
|
; 33082300
|
|
COMMENT THE FOLLOWING LOCAL PROCEDURES HANDLE ALL INTERRUPTS OTHER 33083000
|
|
THAN INTERVAL TIMER, GCA AND IOFINISH, 33084000
|
|
; 33085000
|
|
SAVE PROCEDURE PROCTOPROC; 33086000
|
|
NOTYETCODED(PRTOPR); 33087000
|
|
SAVE PROCEDURE STACKOVERFLOW; 33088000
|
|
NOTYETCODED(STACKOVER); 33089000
|
|
SAVE PROCEDURE SYLLABLEDEPENDENT2; 33090000
|
|
KILLME(SYLABLEDEPENDENT2); 33091000
|
|
SAVE PROCEDURE ALARM; 33092000
|
|
NOTYETCODED(BLOWUP+P1.ALARMFIELD); 33093000
|
|
SAVE PROCEDURE MEMORYPROTECT; 33094000
|
|
NOTYETCODED(MEMPROTECT); 33095000
|
|
SAVE PROCEDURE INVALIDOPERATOR; 33096000
|
|
NOTYETCODED(INVALIDOP); 33097000
|
|
SAVE PROCEDURE SEQUENCEERROR; 33098000
|
|
NOTYETCODED(SEQERROR); 33099000
|
|
SAVE PROCEDURE MLL1; 33100000
|
|
NOTYETCODED(ML1); 33101000
|
|
SAVE PROCEDURE MLL2; 33102000
|
|
NOTYETCODED(ML2); 33103000
|
|
SAVE PROCEDURE MLL3; 33104000
|
|
NOTYETCODED(ML3); 33105000
|
|
SAVE PROCEDURE MLL4; 33106000
|
|
NOTYETCODED(ML4); 33107000
|
|
SAVE PROCEDURE EXTERNALMPX; 33108000
|
|
NOTYETCODED(EXTMPX); 33109000
|
|
SAVE PROCEDURE MPXUNASSIGNED(SPEC); VALUE SPEC; INTEGER SPEC; 33110000
|
|
NOTYETCODED(SPEC); 33111000
|
|
SAVE PROCEDURE BOTTOMOFSTACK; 33112000
|
|
NOTYETCODED(STACKBOTTOM); 33113000
|
|
SAVE PROCEDURE ARITHMETICFAULT(WHICH); VALUE WHICH; 33114000
|
|
INTEGER WHICH; COMMENT SPECIFIES INTERRUPT; 33115000
|
|
COMMENT HANDLES DIVIDE BY ZERO,EXPONENT OVERFLOW,EXPONENT UNDERFLOW, 33116000
|
|
INVALID INDEX AND INTEGER OVERFLOW 33117000
|
|
THE PROCEDURE ACCESSES "MYCOURSE" (A DEFINE OR 33118000
|
|
INTRINSIC ACCESSING A STACK LOCATION SET BY THE COMPILER. THE 33119000
|
|
LINKAGE LOADER OR SOMETHING) 33120000
|
|
MYCOURSE = UPTOYOU THE MCP DOES AS IT PLEASES 33121000
|
|
= FINISH THE MCP MUST D-ES ME 33122000
|
|
= CARRYON THE MCP IGNORES THIS INTRUPT33123000
|
|
= TELLME THE MCP SETS SOME FLAGS 33124000
|
|
= FAULTROUTINE ENTER GENERAL FAULT ROUTINE 33125000
|
|
= SELECT ACCESS PCW APPROPRIATE TO 33126000
|
|
INTERRUPT 33127000
|
|
THESE CHOICES COULD BE LIMITED. GIVING A MORE 33128000
|
|
UNIFORM APPROACH BUT USING MORE CORE STORAGE. THEY ALLOW ALGOL,33129000
|
|
COBOL ETC. TO REACT DIFFERENTLY TO FAULT CONDITIONS - DO WE 33130000
|
|
WANT THIS 33131000
|
|
ALL CHOICES EXCEPT THE LAST TWO INVOLVE RETURN TO THE33132000
|
|
INTERRUPT ROUTINE. HOWEVER BAD GO TOS ASSOCIATED WITH THE LAST 33133000
|
|
TWO CHOICES (A LIKELY OCCURRENCE)MAY PREVENT SUCH A RETURN. 33134000
|
|
HENCE THE BAD GO TO MECHANISM MUST CALL THE PROCEDURE 33135000
|
|
WHATDOIDO (AMONG OTHER THINGS) 33136000
|
|
NOTE THAT THE CONCEPT OF MASTER AND SLAVE PROCESSORS 33137000
|
|
AS DESCRIBED BY DAHM IS CONSIDERED AN UNNECESSARY COMPLICATION 33138000
|
|
IN THE HANDLING OF SYLLABLE DEPENDENT INTERRUPTS 33139000
|
|
; 33140000
|
|
BEGIN 33141000
|
|
INTEGER MYACTION 33142000
|
|
; 33143000
|
|
LABEL BUZZ,LOOKFORJOB 33144000
|
|
; 33145000
|
|
33146000
|
|
33147000
|
|
33148000
|
|
IF MYACTION ~ MYCOURSE=UPTOYOU OR MYACTION=FINISH THEN 33149000
|
|
KILLME(WHICH) 33150000
|
|
ELSE IF MYACTION =CARRYON THEN GO LOOKFORJOB 33151000
|
|
ELSE IF MYACTION =TELLME THEN BEGIN SETOVERFLOWFF; 33152000
|
|
GO LOOKFORJOB END 33153000
|
|
ELSE IF MYACTION =FAULTROUTINE THEN 33154000
|
|
MYFAULT(P2) 33155000
|
|
ELSE 33156000
|
|
CASE WHICH OF 33157000
|
|
BEGIN 33158000
|
|
MYDIVIDEBYZERO(P2); 33159000
|
|
MYEXPONENTOVERFLOW(P2); 33160000
|
|
MYEXPONENTUNDERFLOW(P2); 33161000
|
|
MYINVALIDINDEX(P2); 33162000
|
|
MYINTEGEROVERFLOW(P2); 33163000
|
|
END CASE EXPRESSION; 33164000
|
|
LOOKFORJOB: 33165000
|
|
END ARITHMETICFAULT; 33166000
|
|
SAVE WORD PROCEDURE PRESENCEBIT; 33167000
|
|
COMMENT 33168000
|
|
(1) THE PROCEDURE DOES NOT RUN AROUND MAKING ABSENT COPIES PRESENT 33169000
|
|
MAYBE IT SHOULD; 33170000
|
|
BEGIN COMMENT MCS 1; 33171000
|
|
LABEL TOSLEEP 33172000
|
|
,FIN 33173000
|
|
,LOOKFORPREEMPT 33174000
|
|
,MOMPRESENT 33175000
|
|
33176000
|
|
; 33177000
|
|
INTEGER 33178000
|
|
TI1,TI2,TI3, 33179000
|
|
IOCW, 33180000
|
|
KIND )"WHETHER P2 IS OPERAND,DD,SEGDESC OR IRW "(33181000
|
|
FIRSTLOC )"MULTIPLE DESCRIPTORS-LOCATION FIRST ARG "(33182000
|
|
LASTLOC 33183000
|
|
; 33184000
|
|
EVENT EVNN 33185000
|
|
; 33186000
|
|
33187000
|
|
33188000
|
|
33189000
|
|
WORD 33190000
|
|
MOM %HOLDS MOM (NOT COPY) 33191000
|
|
, MOMLOCATION %INDEX INTO M FOR MOM 33192000
|
|
, TW1 = TI2 33193000
|
|
; 33194000
|
|
33195000
|
|
33196000
|
|
33197000
|
|
BOOLEAN ALREADYPRESENT; 33198000
|
|
33199000
|
|
33200000
|
|
33201000
|
|
33202000
|
|
BOOLEAN NOCHANGE 33203000
|
|
, OLAY 33203100
|
|
; 33204000
|
|
ARRAY DISKADDRESSES[*] 33205000
|
|
, IOCBREFERENCE [IOCBSIZE] 33206000
|
|
; 33207000
|
|
REFERENCE IOCB = IOCBREFERENCE 33208000
|
|
; 33209000
|
|
DEFINE FIXRECORDDESC(X) = WORD(AREADESC @ X).ADDRESSF # 33210000
|
|
; 33211000
|
|
33212000
|
|
BUZZCONTROL(PBLOK); COMMENT *** BUZZ; 33213000
|
|
COMMENT*** AT PRESENT THIS LOCK IS REDUNDANT. HOWEVER WHEN GROSS LOCK 33214000
|
|
IS REMOVED, AN EVEN FINER LOCK MAY BE REQUIRED; 33215000
|
|
ALREADYPRESENT~FALSE; 33216000
|
|
RTBIT ~ BOOLEAN(P1.RTBITF); 33217000
|
|
NOCHANGE~FALSE; 33218000
|
|
IF (KIND ~ ACTUALCOPY.TAG) = SINGL 33219000
|
|
THEN BEGIN COMMENT MCS 2MULTIPLE DESCRIPTORS; 33220000
|
|
LASTLOC := MYF - REAL(ACTUALCOPY); 33221000
|
|
FIRSTLOC := MYF - 1; 33222000
|
|
UNLOCK(PBLOK); 33223000
|
|
33224000
|
|
FOR TI1 := FIRSTLOC STEP -1 UNTIL LASTLOC DO 33225000
|
|
BEGIN 33226000
|
|
IF (TW1 := P2 := M[TI1]).TAG = DOUBL THEN 33227000
|
|
BEGIN 33227100
|
|
LASTLOC := * - 1; 33227200
|
|
TI1 := * - 1; 33227300
|
|
COMMENT P2 DOESN"T COUNT DOUBLES AS 2 33227400
|
|
WORDS; 33227500
|
|
END ELSE 33227600
|
|
IF TW1.TAG = DATADESC THEN 33228000
|
|
IF NOT BOOLEAN(REAL(TW1).PBITF) THEN 33229000
|
|
M[TI1] ~ PRESENCEBIT; 33230000
|
|
33231000
|
|
END; 33232000
|
|
GO TO FIN; 33233000
|
|
END MCS 2 MULTIPLE DESCRIPTORS 33234000
|
|
ELSE 33235000
|
|
33236000
|
|
IF (REAL(MOM~M[MOMLOCATION~(IF KIND=IRW 33237000
|
|
THEN STACKVECTOR [ACTUALCOPY.STKNRF].ADDRESSF33238000
|
|
+ACTUALCOPY.DISPF 33239000
|
|
+ACTUALCOPY.SIRWDELTAF 33240000
|
|
ELSE ACTUALCOPY.ADDRESSF)] 33241000
|
|
).LOCKBITF=1 AND KIND=SEGDESC) 33242000
|
|
OR DESCRIPTORLOCK 33242100
|
|
THEN 33243000
|
|
COMMENT *** NOTE ABSOLUTE ADDRESSES, THIS IS A MESSY BUSINESS AND33244000
|
|
SHOULD BE CHANGED IF POSSIBLE. NOTE THAT THE SIRW 33245000
|
|
IS CHANGED INTO AN ABSOLUTE ADDRESS BECAUSE GETSPACE 33246000
|
|
EXPECTS ONE; 33247000
|
|
BEGIN COMMENT MCS 3; 33248000
|
|
UNLOCK(PBLOK); 33249000
|
|
WAIT(EVNT @ REFERENCE(IOCBREFERENCE ~ 33250000
|
|
IOCBREFERENCE&REFERENCED 33251000
|
|
(1,*,* 33251100
|
|
,TI3~IF KIND=SEGDESC 33251200
|
|
THEN MOM.ADDRESSF 33251300
|
|
ELSE MOM.ADDRESF 33251400
|
|
) 33251500
|
|
)); 33252000
|
|
TI2~WORD(AREADESC@IOCB).ADDRESSF+1; 33253000
|
|
33254000
|
|
COMMENT *** MAYBE THIS CAN BE FIXED LATER; 33255000
|
|
GO TOSLEEP; 33256000
|
|
END MCS 3 33257000
|
|
ELSE; 33258000
|
|
33259000
|
|
33260000
|
|
33261000
|
|
33262000
|
|
UNLOCK(PBLOK); 33263000
|
|
IF MOM.AITINDICATORF=1 AND KIND=DATADESC 33264000
|
|
THEN BEGIN M[MOMLOCATION]~MOM~DOPEVECTOR(MOM); 33265000
|
|
IF BOOLEAN(ACTUALCOPY.IBITF) THEN 33266000
|
|
ACTUALCOPY~ MOM &DATADESCRIPTOR 33267000
|
|
(*,*,1,1,*,*,*,*, 33268000
|
|
ACTUALCOPY.INDEXF,*) ELSE 33269000
|
|
ACTUALCOPY~MOM&DATADESCRIPTOR(*,*,1,*,*,*,*33270000
|
|
,*,*,*); 33271000
|
|
GO LOOKFORPREEMPT; 33272000
|
|
END; 33273000
|
|
IF MOM.PBITF= 1 33274000
|
|
THEN 33275000
|
|
BEGIN COMMENT MCS 4; 33276000
|
|
TI2~MOM.ADDRESSF; 33277000
|
|
ALREADYPRESENT ~ TRUE; 33278000
|
|
MOMPRESENT: IF KIND!IRW THEN PREsENCEBIT~ACTUALCOPY 33279000
|
|
~ACTUALCOPY&FIXDESC(1,*,TI2); 33280000
|
|
IF NOT ALREADYPRESENT 33281000
|
|
THEN 33282000
|
|
BEGIN COMMENT MCS 4A ; 33283000
|
|
MOM~MOM&FIXDESC(1,*,TI2); 33284000
|
|
IF KIND=SEGDESC 33285000
|
|
THEN MOM.LOCKBITF~0; 33286000
|
|
M [MOMLOCATION] ~ MOM; 33287000
|
|
TURNOVERLAYKEY(MOMLOCATION); 33288000
|
|
END MCS 4A; 33288100
|
|
IF NOCHANGE 33289000
|
|
THEN 33290000
|
|
BEGIN COMMENT MCS 4B; 33291000
|
|
IF NOT ALREADYPRESENT THEN 33294000
|
|
FORGETAREA(IOCBSIZE,TI333294100
|
|
); 33294200
|
|
UNLOCK(MULTIPLEREFERENCELOK);33295000
|
|
GO FIN; 33296000
|
|
END MCS 4B; 33297000
|
|
33298000
|
|
LOOKFORPREEMPT: % *** THERE WAS A CONDITIONAL CALL ON WHATDOIDO 33299000
|
|
END MCS 4 33300000
|
|
ELSE 33301000
|
|
BEGIN COMMENT MCS 5 ; 33302000
|
|
COMMENT ********** *************33303000
|
|
******************* *************33304000
|
|
DATA AND SEGMENT DESCRIPTORS ARE INTERPRETED AS FOLLOWS 33305000
|
|
***** DATA DESCRIPTORS ***** 33306000
|
|
INTERPRETATION 33307000
|
|
FIELD OLAYTYPEF 33308000
|
|
MCPF FILETYPEF AITINDICATORF ADDRESF 33309000
|
|
(MCPCODEF) 33310000
|
|
BITS 19:1 18:1 17:1 16:17 33311000
|
|
0 0 0 >1 NON-MCP READ IN OLAYABLE 33312000
|
|
FROM OLAY FILE 33313000
|
|
0 0 0 0 NON-MCP GET OLAYABLE 33314000
|
|
0 0 0 1 NON-MCP GET SAVE SPACE 33315000
|
|
0 0 1 * NON-MCP AIT REFERENCE 33316000
|
|
0 1 0 * NON-MCP READ ONLY 33317000
|
|
FROM CODE FILE 33318000
|
|
0 1 1 * NOT USED 33319000
|
|
1 0 0 >1 NOT USED 33320000
|
|
1 0 0 0 MCP GET OLAYABLE SPACE 33321000
|
|
1 0 0 1 MCP GET SAVE SPACE 33322000
|
|
1 0 1 * MCP.AIT REFERENCE 33323000
|
|
1 1 0 * MCP READ ONLY 33324000
|
|
FROM CODE FILE 33325000
|
|
1 1 1 * ADDRESS IS THAT OF IOCB 33326000
|
|
SOMEBODY ELSE IS READING 33326100
|
|
IN ARRAY.WAIT ON EVENT IN 33326200
|
|
IOCB. (NOTE THIS IS A 33326300
|
|
SPECIAL COMBINATION WHERE 33326400
|
|
MEANINGS OF INDIVIDUAL 33326500
|
|
BITS DO NOT APPLY). 33326600
|
|
*****SEGMENT DESCRIPTORS ***** 33327000
|
|
INTERPRETATION 33328000
|
|
FIELD DICTIONARYF LOCKBITF ADDRESSF 33329000
|
|
BITS 45:1 44:1 19:20 33330000
|
|
1 0 * DO DICTIONARY READ IN 33331000
|
|
OVERLAYABLE PROGRAM FROM 33332000
|
|
MCP CODE FILE 33333000
|
|
0 0 * D1 DICTIONARY.READ IN 33334000
|
|
OVERLAYABLE FROM PROGRAM 33335000
|
|
CODE FILE 33336000
|
|
0 1 * ) ADDRESS IS THAT OF IOCB 33337000
|
|
1 1 * ) SOMEBODY ELSE IS READING 33338000
|
|
IN PROGRAM. WAIT ON EVENT 33339000
|
|
IN IOCB 33340000
|
|
DD FORMAT TO BE DETERMINED NON OLAYABLE FROM OLAY FILE 33343000
|
|
DD FORMAT TO BE DETERMINED NON OLAYABLE FROM CODE FILE 33344000
|
|
SD >1 * 0 READ IN OVERLABLE PROGRAM 33345000
|
|
SD >1 * 1 READ NON OVERLAYABLE PROGRAM33346000
|
|
; 33347000
|
|
TI1~MOM.LENGTHF; 33348000
|
|
COMMENT *** MAYBE WE SHOULD CALL GETAREA SOMETIMES; 33349000
|
|
TI2 ~GETSPACE 33350000
|
|
( TI1 ~(IF KIND=SEGDESC 33351000
|
|
THEN TI1 33352000
|
|
ELSE IF MOM.SZF = 1 33353000
|
|
THEN TI1 | 2 33354000
|
|
ELSE IF TI3~ MOM.SZF= 0 33355000
|
|
THEN TI1 33356000
|
|
ELSE (TI1 ~ (IF TI3 = 4 THEN 33357000
|
|
(TI3~6) - 1 33358000
|
|
ELSE IF TI3 = 3 THEN 33359000
|
|
(TI3~8) - 1 33360000
|
|
ELSE (TI3~12) - 1)) 33361000
|
|
DIV TI3) 33362000
|
|
, MYSNR 33363000
|
|
,0&SPACETYPE (1,1,1, 33364000
|
|
REAL(NOT ( KIND = DATADESC AND REAL(MOM).ADDRESSF = 1))) 33365000
|
|
33366000
|
|
,MOMLOCATION 33367000
|
|
); 33368000
|
|
IF KIND = SEGDESC OR MOM.ADDRESF > 1 OR 33369000
|
|
MOM.DESCRIPTORLOCKF = 2 THEN 33369100
|
|
33370000
|
|
BEGIN COMMENT MCS 6; 33371000
|
|
IF(KIND=SEGDESC AND MOM.DICTIONARYF=1) OR 33372000
|
|
(KIND=DATADESC AND MOM.MCPCODEF=3) 33373000
|
|
THEN TI3 ~ MOM.ADDRESF+MCPDISKBASE 33374000
|
|
ELSE 33375000
|
|
BEGIN 33376000
|
|
DISKADDRESSES~WORDSTACK 33377000
|
|
[IF(OLAY~KIND=DATADESC AND MOM.FILETYPEF=0) 33377500
|
|
THEN MYSNR 33378000
|
|
ELSE WORDSTACK[MYSNR,PROCESSFAMILYLINKPLACE]. 33378500
|
|
FATHERF 33378502
|
|
, IF OLAY 33379000
|
|
THEN OLAYFILEDESCRIPTORPLACE 33379500
|
|
ELSE D1CODEFILEDESCPLACE 33380000
|
|
]; 33380800
|
|
33381000
|
|
TI3~DISKADDRESSES 33382000
|
|
[FIRSTROWINDEX + (TI3 := MOM.ADDRESF) 33383000
|
|
DIV(IF OLAY THEN OLAYROWLENTH ELSE CODEROWLENTH)33384000
|
|
] 33385000
|
|
+TI3 MOD(IF OLAY THEN OLAYROWLENTH ELSE CODEROWLENTH)33386000
|
|
; 33387000
|
|
33388000
|
|
END; 33389000
|
|
IOCW ~ @440 + REAL(KIND = SEGDESC); 33390000
|
|
RESET(EVNN); 33391000
|
|
DISKADDRESSES~DISKADDRESSES&ARRAYDESCL(3,TI1,TI2); 33392000
|
|
MOM~MOM&POINTTOIOCB(*, 33393000
|
|
WORD(DISKIO(DISKADDRESSES,-1,TI1,TI3,IOCW,EVNN))); 33394000
|
|
M[MOMLOCATION]~MOM 33394100
|
|
~IF KIND=SEGDESC THEN MOM&LOKMOM(1,*) 33394200
|
|
ELSE MOM&LOKMOM(*,7); 33394300
|
|
UNLOCK(PBLOK); 33396000
|
|
WAIT (EVNN); 33397000
|
|
TI3 ~ MOM.ADDRESSF; 33398000
|
|
33399000
|
|
TOSLEEP: NOCHANGE~ TRUE; 33400000
|
|
BUZZCONTROL(MULTIPLEREFERENCELOK); COMMENT *** BUZZ; 33401000
|
|
IF BOOLEAN (M[MOMLOCATION].PBITF) 33402000
|
|
THEN BEGIN 33403000
|
|
ALREADYPRESENT ~ TRUE; 33404000
|
|
END; 33405000
|
|
33406000
|
|
GO TO MOMPRESENT; 33407000
|
|
END MCS 6 33408000
|
|
ELSE BEGIN 33409000
|
|
MOM~MOM&FIXDESC(1,*,TI2); 33410000
|
|
INITIALIZETOZERO (TI2, TI1); 33411000
|
|
COMMENT *** OPTIMISE LATER; 33412000
|
|
GO TO MOMPRESENT; 33413000
|
|
END; 33414000
|
|
END MCS 5; 33415000
|
|
FIN: 33416000
|
|
RETURN(ACTUALCOPY); 33417000
|
|
END MCS 1 PRESENCEBIT; 33418000
|
|
PROCEDURE NOTYETCODED(SPEC); VALUE SPEC; 33419000
|
|
REAL SPEC; COMMENT SPECIFIES MSSING CODE; 33420000
|
|
BEGIN 33421000
|
|
COMMENT MUST IMSERT CODE TO PRINT OUT MESSAGE HERE; 33422000
|
|
KILLME(SPEC); 33423000
|
|
END NOTYETCODED; 33424000
|
|
%%%%% INTERRUPT PROCEDURE OUTER BLOCK CODE %%%% 33425000
|
|
%%%%% %%%% 33426000
|
|
%%%%% %%%% 33427000
|
|
TRACTER~TRACE(0); 33428000
|
|
IF SIMULATING THEN 33428990
|
|
MONITORVALUE~D[31]; 33429000
|
|
P1~P1; COMMENT ***** REDUNDANT- FOR MONITORING; 33430000
|
|
COMMENT 33431000
|
|
IF P1= INTERVALTIMERSPEC AND BUSY(GROSSLOK) 33432000
|
|
THEN GO FINI 33433000
|
|
ELSE IF LOCK(GROSSLOK) THEN KILLME(GROSSLOCK); 33434000
|
|
COMMENT *** ELSE BUZZ(GROSSLOK) LATER; 33435000
|
|
COMMENT GROSSLOK IS NOMINALLY SET AT ENTRY TO INTERRUPT 33436000
|
|
PROCEDURE AND DETERMINES THAT ONLY ONE INTERRUPT33437000
|
|
AT A TIME IS HANDLED. THIS MAY BE A TEMPORARY 33438000
|
|
MEASURE IN WHICH CASE A LOCK LESS POWERFUL THAN 33439000
|
|
GROSSLOK, WHICH PREVENTS OVERLAY ACTION, WILL BE33440000
|
|
USED 33441000
|
|
WHEN AN INTERRUPT GOES THROUGH THE LOCK, IT33442000
|
|
MAY NOT BE INTERRUPTED (FOR HARDWARE OR 33443000
|
|
SOFTWARE REASONS) BY ANYTHING EXCEPT INTERVAL 33444000
|
|
TIMER. HENCE INTERVAL TIMER MUST NOT BUZZ THE 33445000
|
|
LOCK IF IT HAS BEEN SET BY SOMEBODY ELSE- IN 33446000
|
|
THIS CIRCUMSTANCE THE INTERVAL TIMER INTERRUPT 33447000
|
|
IS LOST 33448000
|
|
; 33449000
|
|
DISABLEOVERLAY; 33450000
|
|
COMMENT THIS SHOULD 33451000
|
|
(1) MAKE THE STACK NON OVERLAYABLE 33452000
|
|
(2) MARK THE STACK APPROPRIATELY 33453000
|
|
AT PRESENT IT DOES NOTHING. NOTE THAT THIS HAS TO MESH IN WITH 33454000
|
|
GENERAL SCHEME FOR HANDLING ABSOLUTE ADDRESSES IN STACKS 33455000
|
|
; 33456000
|
|
MYF ~ F; 33457000
|
|
MYSNR~SNR; 33458000
|
|
COMMENT *** ABSOLUTE ADDRESS; 33459000
|
|
COMMENT * ** * * * * * * *; CASE P1.MPXFIELD | P1.IFFIELD OF 33460000
|
|
BEGIN COMMENT MCS 2; 33461000
|
|
COMMENT ALL NON MPX INTERRUPTS HERE; 33462000
|
|
CASE P1.SDFIELD|FIRSTONE(P1.INTFIELD) OF 33463000
|
|
BEGIN COMMENT MCS 3; 33464000
|
|
COMMENT ALL NON MPX,NON SYLLABLE DEPENDENT INTERRUPTS HERE; 33465000
|
|
IF P1 = PROCTOPROCSPEC THEN PROCTOPROC 33466000
|
|
ELSE IF P1=INTERvALTIMERsPEc THEN 33467000
|
|
BEGIN COMMENT MCS 3A; 33468000
|
|
IF (COUNTFORTIMERINTERRUPTEVENT~*+1) 33469000
|
|
= NUMBEROFPROCESSORS AND NOT 33470000
|
|
BUSY(READYQ) 33470100
|
|
THEN BEGIN COMMENT MCS 3B; 33471000
|
|
COUNTFORTIMERINTERRUPTEVENT 33472000
|
|
~0; 33473000
|
|
CAUSE (TIMERINTERRUPTEVENT);33474000
|
|
END MCS 3B; 33475000
|
|
END MCS 3A 33476000
|
|
ELSE IF P1=STACKOVERFLOWSPEC THEN STACKOVERFLOW 33477000
|
|
ELSE IF P1=SYLLABLEDEPNDNT2SPEC THEN 33478000
|
|
SYLLABLEDEPENDENT2 33479000
|
|
ELSE IF P1 } ALARMSPEC THEN ALARM 33480000
|
|
ELSE STOP; 33481000
|
|
MEMORYPROTECT; 33482000
|
|
INVALIDOPERATOR; 33483000
|
|
ARITHMETICFAULT(DZ); COMMENT DIVIDE BY ZERO; 33484000
|
|
ARITHMETICFAULT(EO); COMMENT EXPONENT OVERFLOW; 33485000
|
|
ARITHMETICFAULT(EU); COMMENT EXPONENT UNDERFLOW; 33486000
|
|
ARITHMETICFAULT(II); COMMENT INVALID INDEX; 33487000
|
|
ARITHMETICFAULT(IO); COMMENT INTEGER OVERFLOW; 33488000
|
|
BOTTOMOFSTACK; 33489000
|
|
BEGIN 33490000
|
|
PRESENCEBIT; 33491000
|
|
33492000
|
|
GO FINI; 33493000
|
|
END; 33494000
|
|
STOP; 33495000
|
|
WHATDOIDO; 33496000
|
|
GO FINI; 33497000
|
|
END MCS 3 SYLLABLE DEPENDENT INTERRUPTS; 33498000
|
|
MLL1; 33499000
|
|
MLL2; 33500000
|
|
MLL3; 33501000
|
|
MLL4; 33502000
|
|
EXTERNALMPX; 33503000
|
|
COMMENT FIRST MPX UNASSIGNED INTERRUPT HANDLED HERE.IN-LINE CODE USED; 33504000
|
|
NOTYETCODED(GCAINTERRUPT); 33505000
|
|
COMMENT OTHER MPX UNASSIGNED INTERRUPTS HANDLED HERE; 33506000
|
|
MPXUNASSIGNED(UA2); 33507000
|
|
MPXUNASSIGNED(UA3); 33508000
|
|
AGAIN: 33508100
|
|
IOFINISH(P1.MPXSPECFIELD); 33509000
|
|
COMMENT SKIP UNUSED BIT POSITIONS IN IFFIELD HERE; 33510000
|
|
;;;;; 33511000
|
|
COMMENT REST OF THIS PROCEDURE DEVOTED TO IOFINISH. NOTE THE FOLLOWING:33512000
|
|
(1) IOFINISH AND GCA INTERRUPTS ARE HANDLED BY CODE LOCAL33513000
|
|
TO INTERRUPT PROCEDURE . ALL OTHER INTERRUPTS 33514000
|
|
HANDLED BY PROCEDURE CALLS 33515000
|
|
(2) CALLED PROCEDURES ARE DECLARED LOCAL TO THE 33516000
|
|
INTERRUPT PROCEDURE 33517000
|
|
(3) THERE MAY BE DUPLICATION OF CODE IN ORDER TO 33518000
|
|
SPEED THE PROCESSING OF SOME INTERRUPTS 33519000
|
|
; 33520000
|
|
STOP; 33522000
|
|
END MCS CASE EXPRESSION; 33523000
|
|
IF MULTIPLEXORMASK.BITONEF 33524000
|
|
THEN IF (P1~SCANIN(LITERALFUNCTIONA))!1 33525000
|
|
THEN GO AGAIN; 33526000
|
|
IF MULTIPLEXORMASK.BITTWOF 33527000
|
|
THEN IF (P1~SCANIN(LITERALFUNCTIONB))!2 33528000
|
|
THEN GO AGAIN; 33529000
|
|
WHATDOIDO; 33529100
|
|
FINI: 33530000
|
|
UNLOCK(GROSSLOK); 33531000
|
|
ENABLEOVERLAY; 33532000
|
|
TRACE(TRACTER); 33534998
|
|
IF RTBIT THEN RETURN(ACTUALCOPY); 33535000
|
|
END MCS 1 HARDWAREINTERRUPT; 33537000
|
|
SAVE PROCEDURE WHATDOIDO; 33538000
|
|
COMMENT IF THERE IS SOMETHING OF HIGHER PRIORITY IN THE READYQ THEN 33539000
|
|
FIRE IT UP ELSE EXIT. SIMILAR TO WAIT AND HOLD 33540000
|
|
; 33541000
|
|
BEGIN 33542000
|
|
LABEL FINI 33543000
|
|
; 33544000
|
|
REAL MYSNR 33545000
|
|
, NEXTSTACKNO 33546000
|
|
; 33547000
|
|
MONITOR JACKMONITOR(MYSNR); 33548000
|
|
33549000
|
|
SETINTERVALTIMER; 33550000
|
|
MYSNR ~ SNR; 33551000
|
|
STACK[MYSNR,PRIORITYPLACE]~0;% *** TAKE OUT WHEN PRIORITY ALGORTHMS OK 33551100
|
|
IF LOCK(READYQ) THEN GO FINIS; % *** WITH NO INTERVAL TIMER 33552000
|
|
% *** PROBLEMS BUZZCONTROL 33552100
|
|
COMMENT ***** SHOULD THIS BE BUZZ; 33553000
|
|
IF NOTHINGTODO 33554000
|
|
THEN GO FINI 33555000
|
|
ELSE IF STACK[NEXTSTACKNO~NEXTSTACKINREADYQ,PRIORITYPLACE]33556000
|
|
}STACK[MYSNR,PRIORITYPLACE] 33557000
|
|
THEN BEGIN 33558000
|
|
INSERTINQ(READYQ,DUMMYREF,MYSNR); 33559000
|
|
MOVETONEXTINREADYQ; 33560000
|
|
END 33561000
|
|
ELSE ; 33562000
|
|
33563000
|
|
FINI: UNLOCK(READYQ); 33564000
|
|
FINIS: 33564100
|
|
END WHATDOIDO; 33565000
|
|
33566000
|
|
SAVE PROCEDURE EVENTHANDLER (THEEVENT,EVENTWORD1,WAITFLAG); 33567000
|
|
VALUE EVENTWORD1,WAITFLAG; 33568000
|
|
WORD THEEVENT %IRW OR INDEXED DD POINTING TO EVENT 33569000
|
|
, EVENTWORD1 %FIRST WORD OF EVENT 33570000
|
|
; 33571000
|
|
BOOLEAN WAITFLAG %TRUE IF WAIT, FALSE IF CAUSE 33572000
|
|
; 33573000
|
|
COMMENT 33574000
|
|
THE ESPOL INTRINSIC WAIT(WAITFLAG TRUE) OR CAUSE, LOCKS THE EVENT 33575000
|
|
AND PASSES TO THIS PROCEDURE: 33576000
|
|
AN IRW OR INDEXED DD POINTING TO THE EVENT 33577000
|
|
THE FIRST WORD OF THE EVENT (WITH A DOUBLE TAG) 33578000
|
|
A FLAG INDICATING WHETHER CAUSE OR WAIT IS REQUIRED 33579000
|
|
33580000
|
|
33581000
|
|
WAIT ACTION: 33582000
|
|
1) THE INTERVAL TIMER IS RESET 33583000
|
|
2) IF THE READYQ IS EMPTY, THE NOTHING TO DO LOOP IS 33584000
|
|
ENTERED. IN THE NOTHING TO DO LOOP: 33585000
|
|
A THE READYQ IS BUZZED 33586000
|
|
B IF READYQ NON EMPTY THEN GO TO 3 33587000
|
|
C IF EVENT HAS HAPPENED,UNLOCK READYQ,E GO TO 4 33588000
|
|
D OTHERWISE CALL STATUS AND GO TO A 33589000
|
|
3) IF THE READYQ IS NOT EMPTY 33590000
|
|
A PUT THIS PROCESS IN EVENT QUEUE 33591000
|
|
B UNLOCK EVENT (BY REPLACING FIRST WORD OF EVENT) 33592000
|
|
C UNLOCK READYQ 33593000
|
|
D MOVE TO NEW JOB 33594000
|
|
E ON RETURN PROCESS ANY OUTSTANDING SOFTWARE 33595000
|
|
INTERRUPTS 33596000
|
|
4) EXIT 33597000
|
|
CAUSE ACTION 33598000
|
|
1) MOVE WAITQ TO READYQ 33599000
|
|
2) CHECK SOFTWARE INTERRUPT COUNT IN FIRST WORD OF EVENT 33600000
|
|
IF ZERO GO TO OTHERWISE 33601000
|
|
3) FOR EACH STACK IN INTERRUPT QUEUE IN TURN 33602000
|
|
A BUZZ SOFTWAREINTERRUPTLOCK 33603000
|
|
B IS THE INTERRUPT ENABLED,IF NOT GO TO NEXT STACK33604000
|
|
C OTHERWISE ENTER INTERRUPT IN SOFTWAREINTERRUPTQ 33605000
|
|
D IF STACK ACTIVE THEN DO A HEYOU 33606000
|
|
E UNLOCK SOFTWARE INTERRUPT LOCK 33607000
|
|
4) UNLOCK AND SET THE EVENT 33608000
|
|
; 33609000
|
|
BEGIN 33610000
|
|
LABEL LOOKFORNEWPROCESS 33611000
|
|
, LOOKFORANOTHER 33612000
|
|
; 33613000
|
|
EVENT THISEVENT=THEEVENT 33614000
|
|
; 33615000
|
|
DEFINE NEXTINTERRUPTPCW = 33616000
|
|
STACK[(NEXTSNR~NEXTSTACK.STKNRF), 33617000
|
|
DISPPCW~NEXTSTACK.DISPF+NEXTSTACK.SIRWDELTAF]# 33618000
|
|
33619000
|
|
33620000
|
|
,UNLOCKEVENT=THEEVENT~EVENTWORD1&FIRSTEVENTWORD(,*,*,33621000
|
|
*,*,*,0)# 33622000
|
|
, PROCESSINHOLD = REFERENCE(WORD(NEXTSNR))# 33623000
|
|
, EVENTWAITQ= EVENTWORD1 # 33624000
|
|
; 33625000
|
|
WORD EVENTPOINTER=THEEVENT %PREVENTS PARAMETER ACTION 33626000
|
|
, NEXTSTACK 33627000
|
|
, INTERRUPTPOINTER 33628000
|
|
; 33629000
|
|
REAL INTERRUPTQCOUNT 33630000
|
|
, NEXTSNR 33631000
|
|
, DISPPCW = NEXTSTACK 33632000
|
|
, MYSNR 33633000
|
|
; 33634000
|
|
REFERENCE REFERENCEINTERRUPTPOINTER=INTERRUPTPOINTER 33635000
|
|
; 33636000
|
|
MONITOR JACKMONITOR(WAITFLAG); 33637000
|
|
INTEGER IDLETI, REALTI; 33638000
|
|
MONITOR DONMONITOR (REALTI, IDLETI); 33639000
|
|
MYSNR~SNR; 33640000
|
|
IF SIMULATING THEN BEGIN 33641100
|
|
WAITFLAG ~ *; 33641200
|
|
REALTI ~ REGISTERS[61]; 33642000
|
|
IDLETI ~ REGISTERS[62]; 33643000
|
|
END; 33643100
|
|
IF WAITFLAG 33644000
|
|
THEN 33645000
|
|
BEGIN%%%%%%%%%%%%%%% %%%MCS 133646000
|
|
% WAIT PROCESSING 33647000
|
|
SETINTERVALTIMER; 33649000
|
|
IF BOOLEAN(EVENTWORD1.HAPPENEDBITF) 33649100
|
|
THEN BEGIN UNLOCKEVENT;GO FINI;END; 33649200
|
|
LOOKFORNEWPROCESS: BUZZCONTROL(READYQ); 33650000
|
|
COMMENT ***** SHOULD THIS BE BUZZ; 33651000
|
|
IF NOTHINGTODO 33652000
|
|
THEN 33653000
|
|
BEGIN%%%%%%%%%%%%%%% %%%MCS 233654000
|
|
% READYQ EMPTY 33655000
|
|
UNLOCK(READYQ); 33655100
|
|
UNLOCKEVENT; 33656000
|
|
33657000
|
|
33658000
|
|
COMMENT *** 33659000
|
|
ALLOW; 33660000
|
|
COMMENT * * * * SIMULATOR ONLY; PAUSE; 33661000
|
|
DISALLOW; 33662000
|
|
IF HAPPENED(THISEVENT) 33663000
|
|
THEN 33664000
|
|
BEGIN%%%%%%%%%%%%%%% %%%MCS 333665000
|
|
% CLEAN UP AND GET OUT 33666000
|
|
UNLOCK(READYQ); 33667000
|
|
33668000
|
|
COMMENT THE EVENT IS UNLOCKED WITH FIRST 33669000
|
|
WORD RESTORED; 33670000
|
|
END %%%%%%%%%%%%%%% %%%MCS 333671000
|
|
ELSE LOOKFORSOMETHING; 33672000
|
|
END %%%%%%%%%%%%%%% %%%MCS 233682000
|
|
ELSE 33683000
|
|
BEGIN%%%%%%%%%%%%%%% %%%MCS 533684000
|
|
% SEND PROCESS TO SLEEP 33685000
|
|
WORDSTACK[MYSNR,EVENTWAITQLINK] 33686000
|
|
.FULLINDICATORF~1; 33687000
|
|
IF EVENTWORD1.WAITQHEADF=0 33688000
|
|
THEN 33689000
|
|
%%%%%%%%%%%%%%%%%%%% %%%%%%% 33690000
|
|
%FIRST IN QUEUE 33691000
|
|
EVENTWORD1.WAITQHEADF~MYSNR 33692000
|
|
ELSE 33693000
|
|
BEGIN%%%%%%%%%% %%%MCS5133694000
|
|
% SECOND AND SUBSEQUENT IN QUEUE 33695000
|
|
33696000
|
|
WORDSTACK[MYSNR,EVENTWAITQLINK].BACKWARDLINKF~EVENTWORD1.WAITQTAILF; 33697000
|
|
WORDSTACK[EVENTWORD1.WAITQTAILF,EVENTWAITQLINK].FORWARDLINKF~MYSNR; 33698000
|
|
33699000
|
|
33700000
|
|
33701000
|
|
END; %%%%%%%%%% %%%MCS5133702000
|
|
EVENTWORD1.WAITQTAILF~MYSNR; 33703000
|
|
UNLOCKEVENT; 33704000
|
|
MOVETONEXTINREADYQ; 33705000
|
|
COMMENT A READYQ ALGORITAM:DELINKS,UNLOCKS,MOVES; 33706000
|
|
COMMENT AT THIS POINT WE LOSE CONTROL SOME LOGGING 33707000
|
|
ACTION IS REQUIRED; 33708000
|
|
LOOKFORANOTHER: IFTHEREISASOFTWAREINTERRUPT 33709000
|
|
THEN 33710000
|
|
BEGIN%%%%%%%%%%%%%%% %%%MCS 633711000
|
|
HANDLETHESOFTWAREINTERRUPT; 33712000
|
|
GO LOOKFORANOTHER; 33713000
|
|
END %%%%%%%%%%%%%%% %%%MCS 633714000
|
|
END %%%%%%%%%%%%%%% %%%MCS 533715000
|
|
END %%%%%%%%%%%%%%% %%%MCS 133716000
|
|
ELSE 33717000
|
|
BEGIN%%%%%%%%%%%%%%% %%%MCS 733718000
|
|
% CAUSE PROCESSING 33719000
|
|
IF EVENTWORD1.WAITQHEADF!0 33720000
|
|
THEN 33721000
|
|
BEGIN%%%%%%%%%%%%%%% %%%MCS 833722000
|
|
BUZZCONTROL(READYQ); 33723000
|
|
INSERTINQUEUE(WAITI,EVENTWAITQ); 33724000
|
|
UNLOCK(READYQ); 33725000
|
|
END ; %%%%%%%%%% %%%MCS 833726000
|
|
IF INTERRUPTQCOUNT ~ EVENTWORD1.COUNTF!0 33727000
|
|
THEN 33728000
|
|
BEGIN%%%%%%%%%%%%%%% %%%MCS 933729000
|
|
NEXTSTACK~INTERRUPTPOINTER 33730000
|
|
~SECONDWORD(THISEVENT) ;33731000
|
|
DO 33732000
|
|
BEGIN%%%%%%%%%%%%%%% %%%MCS9A33733000
|
|
BUZZ(SOFTWAREINTERRUPTLOCK); 33734000
|
|
IF BOOLEAN(NEXTINTERRUPTPCW). 33735000
|
|
ENABLEBITF 33736000
|
|
THEN 33737000
|
|
BEGIN%%%%%%%%%%%%%%% %%%MCS1033738000
|
|
INTERRUPTPOINTER~INTERRUPTPOINTER&STUFFEDIRW(,,*,*,*); 33739000
|
|
INSERT(SOFTWAREINTERRUPTQ,REFERENCEINTERRUPTPOINTER); 33740000
|
|
IF WORDSTACK[NEXTSNR,0].TAG = SINGL 33741000
|
|
THEN HEYOU 33742000
|
|
ELSE IF STACK[NEXTSNR,READYQLINK].FULLINDICATORF=0 33743000
|
|
THEN 33744000
|
|
BEGIN%%%%%%%%%%%%%%% %%%MCS5033745000
|
|
BUZZ(READYQ); 33746000
|
|
INSERTINQ(READYQ,DUMMYREF,MYSNR); 33747000
|
|
33748000
|
|
UNLOCK(READYQ); 33749000
|
|
END ;%%%%%%%%%%%%%%% %%%MCS5033750000
|
|
END ;%%%%%%%%%%%%%%% %%%MCS1033751000
|
|
NEXTSTACK~INTERRUPTPOINTER 33752000
|
|
~STACK[NEXTSNR,DISPPCW-1]; 33753000
|
|
UNLOCK(SOFTWAREINTERRUPTLOCK); 33754000
|
|
END %%%%%%%%%%%%%%% %%%MCS9A33755000
|
|
UNTIL INTERRUPTQCOUNT~INTERRUPTQCOUNT-1=0; 33756000
|
|
END ;%%%%%%%%%%%%%%% %%%MCS 933757000
|
|
THEEVENT~EVENTWORD1&FIRSTEVENTWORD(,*,0,0,*,1,0); 33758000
|
|
GO LOOKFORANOTHER; 33759000
|
|
END ;%%%%%%%%%%%%%%% %%%MCS 733760000
|
|
FINI: 33761000
|
|
END EVENTHANDLER; 33762000
|
|
SAVE PROCEDURE GAOLER(EVENTT, UNLOCK); 33762100
|
|
VALUE UNLOCK; 33762120
|
|
EVENT EVENTT; 33762140
|
|
BOOLEAN UNLOCK; 33762160
|
|
COMMENT THE GAOLER KEEPS THE KEYS TO THE INTERLOCKS; 33762180
|
|
BEGIN 33762200
|
|
LABEL LOCKUP; 33762220
|
|
IF UNLOCK THEN 33762240
|
|
BEGIN 33762260
|
|
FREE(EVENTT); 33762280
|
|
CAUSE(EVENTT); 33762300
|
|
END 33762320
|
|
ELSE 33762340
|
|
LOCKUP: IF FIX(EVENTT) THEN 33762360
|
|
BEGIN 33762400
|
|
WAIT(EVENTT); 33762420
|
|
GO LOCKUP; 33762440
|
|
END 33762460
|
|
ELSE 33762465
|
|
RESET(EVENTT); 33762470
|
|
END GAOLER; 33762480
|
|
SAVE WORD PROCEDURE SOFTWAREINTERRUPTDEC(THEEVENT,EVENTWORD1,EVENTWORD2,33763000
|
|
KLUDGE,PCWPOINTER); 33764000
|
|
VALUE EVENTWORD1,EVENTWORD2,PCWPOINTER,KLUDGE; 33765000
|
|
WORD THEEVENT, % IRW OR INDEXED DD POINTING TO 33766000
|
|
% INTERRUPT EVENT 33767000
|
|
EVENTWORD1, % FIRST WORD OF EVENT 33768000
|
|
EVENTWORD2, % ZERO USED TO FIX UP SECOND WORD OF 33769000
|
|
% EVENT AT FIRST ENTRY 33770000
|
|
PCWPOINTER % POINTER TO INTERRUPT PCW (SIRW) 33771000
|
|
,KLUDGE % HORRIBLE KLUDGE FOR COMPILER 33772000
|
|
; 33773000
|
|
COMMENT 33774000
|
|
THE ESPOL INTERRUPT DECLARATION PLACES ZERO IN THE FIRST WORD OF 33775000
|
|
INTERRUPT AND A PCW REFERENCING THE STATEMENT IN THE SECOND WORD. IT33776000
|
|
GENERATES A CALL ON THIS PROCEDURE. 33777000
|
|
THIS PROCEDURE LINKS THIS STACK INTO THE INTERRUPT QUEUE BEHIND33778000
|
|
THE EVENT AFTER FIRST CHECKING THAT THE STACK IS NOT ALREADY SO 33779000
|
|
LINKED (A RUN TIME ERROR IS NOTED IF THIS CHECK FAILS) 33780000
|
|
THE INTERRUPT QUEUE IS DERIVED AS FOLLOWS: 33781000
|
|
(1) THE EVENT DECLARATION HAS PRODUCED A DOUBLE-LENGTH REAL 33782000
|
|
(2) THE FIRST (ENCOUNTERED) INTERRUPT DECLARATION REFERENCING 33783000
|
|
THE EVENT CAUSES THE SECOND WORD OF THE EVENT TO POINT TO 33784000
|
|
THE INTERRUPT PCW.THE SECOND WORD OF THE EVENT IS NOW 33785000
|
|
ESSENTIALLY A STUFFED IRW EXCEPT FOR ITS TAG FIELD. 33786000
|
|
(3) THE SECOND AND SUBSEQUENT INTERRUPT DECLARATIONS CAUSE THE33787000
|
|
FIRST WORD OF INTERRUPT IN THE STACK AT THE END OF THE 33788000
|
|
INTERRUPT QUEUE TO BE CHANGED FROM ZERO TO A STUFFED IRW 33789000
|
|
THIS STUFFED IRW POINTS TO THE PCW OF THE NEW 33790000
|
|
INTERRUPT DECLARATION. 33791000
|
|
; 33792000
|
|
BEGIN 33793000
|
|
DOUBLE EVENTVALUE=EVENTWORD1 %TWO WORDS OF EVENT STARTING WITH33794000
|
|
%EVENTWORD1 33795000
|
|
, EVENTPLACE=THEEVENT %THEEVENT INVOKES OVRD.EVENTPLACE33796000
|
|
% INVOKES STOD.NOTE NO EVAL FOR 33797000
|
|
% EVENTPLACE, HOWEVER STOD CHASES33798000
|
|
% IRWS. 33799000
|
|
; 33800000
|
|
BOOLEAN FIRST % TRUE WHEN FIRST DECLARATION 33801000
|
|
; 33802000
|
|
INTEGER COUNT % NUMBER OF STACKS IN QUEUE (INC THIS ONE) 33803000
|
|
; 33804000
|
|
WORD NEXTSTACK % POINTS TO NEXT STACK IN QUEUE 33805000
|
|
; 33806000
|
|
REAL NEXTSTACKNO 33807000
|
|
, DISPSIRW 33808000
|
|
, MYSNR 33809000
|
|
; 33810000
|
|
DEFINE NEXTINTERRUPTSIRW = STACK 33811000
|
|
[NEXTSTACKNO 33812000
|
|
~NEXTSTACK.STKNRF,33813000
|
|
DISPSIRW~NEXTSTACK.DISPF-1 33814000
|
|
+ NEXTSTACK.SIRWDELTAF]# 33815000
|
|
; 33816000
|
|
MYSNR ~ SNR; 33817000
|
|
SOFTWAREINTERRUPTDEC~KLUDGE; 33818000
|
|
EVENTWORD1.COUNTF ~ COUNT ~ EVENTWORD1.COUNTF+1; 33819000
|
|
IF COUNT=1 33820000
|
|
THEN 33821000
|
|
BEGIN%%%%%%%%%%%%%%% %%%MCS 133822000
|
|
% FIRST DECLARATION 33823000
|
|
FIRST~TRUE; 33824000
|
|
COMMENT *** THIS CODE SLOPPY-OPTIMISE LATER; 33825000
|
|
END %%%%%%%%%%%%%%% %%%MCS 133826000
|
|
ELSE 33827000
|
|
33828000
|
|
BEGIN%%%%%%%%%%%%%%% %%%MCS 233829000
|
|
% SECOND AND SUBSEQUENT DECS. 33830000
|
|
NEXTSTACK~SECONDWORD(EVENTVALUE); 33831000
|
|
DO 33832000
|
|
BEGIN%%%%%%%%%%%%%%% %%%MCS 333833000
|
|
NEXTSTACK ~ NEXTINTERRUPTSIRW; 33834000
|
|
33835000
|
|
IF MYSNR=NEXTSTACKNO THEN KILLME(INTERRUPTDEC); 33836000
|
|
END %%%%%%%%%%%%%%% %%%MCS 333837000
|
|
UNTIL (COUNT~COUNT-1)=1; 33838000
|
|
STACK[NEXTSTACKNO,DISPSIRW-1] ~ PCWPOINTER; 33839000
|
|
END; %%%%%%%%%%%%%%% %%%MCS 233840000
|
|
%%%%%%%%%%%%%%% CLEAN UP 33841000
|
|
EVENTWORD1.EVENTLOCKBITF~0; 33842000
|
|
EVENTWORD1.TAG~DOUBL; 33843000
|
|
IF FIRST 33844000
|
|
THEN BEGIN 33845000
|
|
COMMENT *** (NO GOOD) EVENTWORD2~PCWPOINTER&STUFFEDIRW(DOUBL,*,*,*,*);33846000
|
|
PCWPOINTER.TAG~DOUBL;EVENTWORD2~PCWPOINTER; 33847000
|
|
THEEVENT~EVENTWORD1; 33848000
|
|
COMMENT THIS IS TERRIBLE,DOUBLE TAG SCREWS EVERYTHING; 33849000
|
|
EVENTPLACE~EVENTVALUE; 33850000
|
|
COMMENT *** OPTIMISE LATER; 33851000
|
|
END 33852000
|
|
ELSE THEEVENT ~ EVENTWORD1; % INVOKES OVRD 33853000
|
|
END SOFTWAREINTERRUPTDEC; 33854000
|
|
SAVE PROCEDURE HOLD; 33855000
|
|
COMMENT SENDS A PROCESS TO SLEEP. THE PROCESS WILL NOT WAKE UP UNTIL 33856000
|
|
A SOFTWARE INTERRUPT IS DIRECTED TO IT 33857000
|
|
IF THERE IS NOTHING IN THE READYQ, THE PROCESS ENTERS A 33858000
|
|
NOTHING TO DO LOOP (WITH INTERRUPTS ALLOWED). SHOULD A SOFTWARE33859000
|
|
INTERRUPTED BE DIRECTED AT IT IN THIS CONDITION, IT WILL BE 33860000
|
|
INTERRUPTED BY A HEYOU (HARDWARE) INTERRUPT 33861000
|
|
THE HEYOU INTERRUPT WILL TURN ON THE HEYOUINTERRUPT FIELD 33862000
|
|
TO INDICATE THE PROCESSING OF THE SOFTWARE INTERRUPT 33863000
|
|
33864000
|
|
PART OF THE NOTHING TO DO LOOP TESTS THE READYQLINK AND 33865000
|
|
THE PROCESS EXITS IF IT IS NON ZERO 33866000
|
|
; 33867000
|
|
BEGIN 33868000
|
|
REAL MYSNR 33869000
|
|
; 33870000
|
|
LABEL LOOKFORNEWPROCESS 33871000
|
|
,FINI 33872000
|
|
; 33873000
|
|
SETINTERVALTIMER; 33874000
|
|
MYSNR~SNR; 33875000
|
|
BUZZCONTROL(READYQ); % *** BUZZ 33876000
|
|
LOOKFORNEWPROCESS: 33877000
|
|
IF NOTHINGTODO 33878000
|
|
THEN IF WORDSTACK[MYSNR,LINKPLACE].HEYOUINTERRUPTF!0 33879000
|
|
THEN 33880000
|
|
BEGIN%%%%%%%%%%%%%%% %%%MCS 133881000
|
|
WORDSTACK[MYSNR,LINKPLACE].HEYOUINTERRUPTF~0; 33882000
|
|
UNLOCK(READYQ); 33883000
|
|
GO FINI; 33884000
|
|
END %%%%%%%%%%%%%%% %%%MCS 133885000
|
|
ELSE LOOKFORSOMETHING 33886000
|
|
ELSE MOVETONEXTONEINREADYQ; 33887000
|
|
FINI: 33888000
|
|
END HOLD; 33889000
|
|
SAVE PROCEDURE HOLDINITIALISE; 33890000
|
|
COMMENT THIS PROCEDURE IS ENTERED FROM INITIALISE AND PERFORMS THE 33891000
|
|
FOLLOWING FUNCTIONS: 33892000
|
|
A.FORGETS SPACE ASSOCIATED WITH INITIALISE 33893000
|
|
B.FIXES UP STACK SO THAT RUN WILL BE ENTERED WHEN IT IS 33894000
|
|
MOVED TO LATER ON (I.E. IT IS AN INDEPENDENTRUNNER STACK) 33895000
|
|
C.ENTERS A NOTHING-TO-DO LOOP 33896000
|
|
; 33897000
|
|
BEGIN 33898000
|
|
INTEGER I 33899000
|
|
, STACKNO 33899200
|
|
; 33900000
|
|
MONITOR JACKMONITOR(IRSTACKS) 33901000
|
|
; 33902000
|
|
REAL STAKADRES 33903000
|
|
, MYSNR 33904000
|
|
; 33905000
|
|
ARRAY MYSTACK[*]; 33906000
|
|
WORD ARRAY MYWORDSTACK = MYSTACK[*]; 33907000
|
|
33908000
|
|
LABEL FIXUPPROCESSOR 33909000
|
|
; 33910000
|
|
INTEGER HI % *** FOR MONITOR ONLY 33911000
|
|
; 33912000
|
|
MONITOR JACKMONITOR(HI) 33913000
|
|
; 33914000
|
|
HI~HI; % *** FOR MONITOR ONLY 33915000
|
|
MYSNR ~ SNR; 33916000
|
|
PIRSTACKS~IRSTACKS~SET(IRSTACKS,MYSNR); 33917000
|
|
WORDSTACK[MYSNR,PROCESSNATUREPLACE].DEDICATEDSTACKF ~ 1; 33918000
|
|
IF NOT LOCK(FIRSTLOK) 33919000
|
|
THEN BEGIN %%%MCS000010033920000
|
|
PERIPHERALINITIALIZE; 33921000
|
|
FORGETSPACE(SAVE1ADDRESS); 33922000
|
|
33922500
|
|
IF INDEPENDENTRUNNERSTACKS > NUMBEROFPROCESSORS 33923000
|
|
THEN 33924000
|
|
BEGIN %%%MCS000012533925000
|
|
COMMENT WE HAVE TO BUILD SOME MORE INDEPENDENT RUNNER STACKS; 33926000
|
|
DISABLEOVERLAY; 33927000
|
|
FOR I~NUMBEROFPROCESSORS+1 STEP 1 UNTIL INDEPENDENTRUNNERSTACKS DO 33928000
|
|
BEGIN %%%MCS000015033929000
|
|
IRSTACKS~SET(IRSTACKS,(STACKNO~GETINDEPENDENTRUNNERSTACK( 33930000
|
|
STAKADRES)));33931000
|
|
WORDSTACK[STACKNO,LINKPLACE ].DEDICATEDSTACKF ~ 1; 33932000
|
|
COMMENT *** 33933000
|
|
CHANGESPACE(STAKADRES); 33934000
|
|
END; %%%MCS000015033935000
|
|
ENABLEOVERLAY; 33936000
|
|
END %%%MCS000012533937000
|
|
ELSE INDEPENDENTRUNNERSTACKS~I~ 33938000
|
|
NUMBEROFPROCESSORS ; 33939000
|
|
PIRSTACKS~IRSTACKS~RESET(IRSTACKS,TERMINATESTACK~MYSNR); 33946000
|
|
NOTFIRSTWAIT~TRUE; COMMENT *** IS THIS A KLUDGE; 33947000
|
|
33948000
|
|
END; %%%MCS000010033949000
|
|
33950000
|
|
MYSTACK~STACK[MYSNR ,*]; 33951000
|
|
MYSTACK[COREPLACE]~IRCORE; 33952000
|
|
MYSTACK[PROCTIMEPLACE]~IRPROCTIME; 33953000
|
|
MYSTACK[IOTIMEPLACE]~IRIOTIME; 33954000
|
|
MYWORDSTACK[FIRSTPLACE]~IRTOSCW; 33954100
|
|
MYWORDSTACK[FIRSTMSCWPLACE]~IRMSCW1; 33955000
|
|
MYWORDSTACK[FIRSTRCWPLACE]~IRRCW1; 33956000
|
|
MYWORDSTACK[SECNDMSCWPLACE]~IRMSCW2&MARKSTACKWD(*,*,*,MYSNR 33957000
|
|
,*,*,*,*); 33958000
|
|
MYWORDSTACK[RETURNCONTROLWORDPLACE]~RUNRETURNCONTROLWORD; 33959000
|
|
LASTNOTAVAILABLEINVECTOR~(FIRSTAVAILABLEINVECTOR~FIRSTONE 33959020
|
|
(IRSTACKS))-1; 33959040
|
|
FORK(DIRECTORYCOMPLEMENT, SYSTEMDIRECTORY); 33959060
|
|
HOLD; 33959200
|
|
END HOLDINITIALISE; 33960000
|
|
SAVE 33960100
|
|
INTEGER PROCEDURE GETINDEPENDENTRUNNERSTACK(STAKADRES); 33961000
|
|
REAL STAKADRES 33962000
|
|
; 33963000
|
|
BEGIN 33964000
|
|
INTEGER NEWSTACK 33965000
|
|
; 33967000
|
|
INTEGER GIR ; % ***FOR MONITOR ONLY 33970000
|
|
MONITOR JACKMONITOR(GIR); 33971000
|
|
STAKADRES~GETSPACE ( INDEPENDENTRUNNERCORE 33973000
|
|
, 0 33974000
|
|
, 0&SPACETYPE(1,1,1,0) 33975000
|
|
, 0 33976000
|
|
) 33977000
|
|
; 33978000
|
|
GIR~STAKADRES; %*** FOR MONITOR ONLY 33979000
|
|
M[STAKADRES-LINKSIZE].INUSEID~NEWSTACK~ 33980000
|
|
GETINDEPENDENTRUNNERSTACK ~ 33981000
|
|
VECTORINSERT ( GETIRS 33982000
|
|
, DUMMYAREA & DATADESCRIPTOR 33983000
|
|
(*,1,0,0,0,0,0,0 33984000
|
|
,INDEPENDENTRUNNERCORE 33985000
|
|
,STAKADRES 33986000
|
|
) 33987000
|
|
) ; 33988000
|
|
M[STAKADRES-LINKSIZE+1].ADDRMOM ~ STACKVECTOR.ADDRESSF 33989000
|
|
+ NEWSTACK; 33990000
|
|
INITIALIZETOZERO(STAKADRES,INDEPENDENTRUNNERCORE); 33991000
|
|
LOADFIXEDIRSTACK(NEWSTACK); 33992000
|
|
UNLOCK(READYQ); 33993000
|
|
UNLOCK(VECTORLOK[1]); 33993100
|
|
END GETINDEPENDENTRUNNERSTACK; 33994000
|
|
33995000
|
|
SAVE PROCEDURE INDEPENDENTRUNNER(INDEX,PAR); 33996000
|
|
VALUE INDEX,PAR; 33997000
|
|
REAL INDEX; 33998000
|
|
WORD PAR; 33999000
|
|
BEGIN 34000000
|
|
INTEGER STACKNO 34001000
|
|
; 34002000
|
|
WORD ARRAY IRWORDSTACK [*]; 34002020
|
|
ARRAY IRSTACK=IRWORDSTACK[*] ; 34002040
|
|
BOOLEAN NEWSTACK 34002100
|
|
; 34002200
|
|
DEFINE MYSNR = SNR # 34002300
|
|
; 34002400
|
|
INTEGER IR; % ***FOR MONITOR ONLY 34003000
|
|
MONITOR JACKMONITOR(IR); 34004000
|
|
IR~INDEX; %*** FOR MONITOR ONLY 34005000
|
|
IR~PAR; %*** FOR MONITOR ONLY 34006000
|
|
BUZZCONTROL(INDEPENDENTRUNNERLOK); 34007000
|
|
IF INDEX=TERMINATEINDICATOR AND STACK[SNR,PROCESSNATUREPLACE] 34007200
|
|
.PROCESSHISTORYF =TERMINATEIR 34007400
|
|
THEN BEGIN %%%MCS000050034007600
|
|
UNLOCK(INDEPENDENTRUNNERLOK); 34007620
|
|
STACKINUSE[INDEX]~0 ; 34007700
|
|
IR~STACKINUSE[TERMINATEINDICATOR]; %*** FOR MONITOR ONLY 34007710
|
|
GO FINI; 34007800
|
|
END; %%%MCS000050034007900
|
|
BUZZCONTROL(IRPARAMETERLOK[INDEX]); 34007910
|
|
IF(NEWSTACK~(INDEX<ONEONLYINDEX OR((STACKNO~STACKINUSE[INDEX]) 34008000
|
|
=0))) 34009000
|
|
34010000
|
|
THEN 34011000
|
|
BEGIN %%%MCS000100034012000
|
|
COMMENT WE HAVE TO GET A NEW STACK; 34013000
|
|
UNLOCK(IRPARAMETERLOK[INDEX]); 34013100
|
|
IF INDEX=TERMINATEINDICATOR 34014000
|
|
THEN BEGIN %%%MCS000080034015000
|
|
STACKNO ~ TERMINATESTACK; 34015200
|
|
GO TO FIXEDSTACKS; 34015400
|
|
END %%%MCS000080034015600
|
|
ELSE 34016000
|
|
IF STACKNO~FIRSTONE(IRSTACKS)=0 34017000
|
|
THEN 34018000
|
|
34019000
|
|
COMMENT WE HAVE TO BUILD A NEW STACK; 34020000
|
|
BEGIN %%%MCS000200034021000
|
|
STACKNO~GETINDEPENDENTRUNNERSTACK(STACKNO);34022000
|
|
34023000
|
|
34024000
|
|
34025000
|
|
END %%%MCS000200034026000
|
|
ELSE 34027000
|
|
BEGIN %%%MCS000300034028000
|
|
IRSTACKS~RESET(IRSTACKS,STACKNO~STACKNO-1); 34029000
|
|
FIXEDSTACKS: REPLACE POINTER(STACK 34029200
|
|
[STACKNO,RETURNCONTROLWORDPLACE+1] 34029400
|
|
) BY 0 FOR INDEPENDENTRUNNERCORE 34029600
|
|
- RETURNCONTROLWORDPLACE -1 34029800
|
|
OVERWRITE; 34030000
|
|
END ; %%%MCS000300034030200
|
|
IRSTACK ~ STACKVECTOR[STACKNO]; 34031000
|
|
IRWORDSTACK[ FIRSTPLACE]~IRTOSCW; 34031200
|
|
IRWORDSTACK [IRPARAMETERPLACE]~PAR; 34031500
|
|
IRWORDSTACK [IRPCWPLACE]~0&NORMALIRW(,,IRPCWSTARTPLACE+INDEX); 34032000
|
|
PUTINJOBIDANDTIME(IRWORDSTACK ,STACKNO); 34032500
|
|
IRWORDSTACK [SECNDMSCWPLACE]~IRMSCW2&MARKSTACKWD(*,*,*,STACKNO,34033000
|
|
*,*,*,*); 34033500
|
|
IRWORDSTACK [RETURNCONTROLWORDPLACE]~ RUNRETURNCONTROLWORD; 34034000
|
|
IRSTACK [PRIORITYPLACE]~ IRPRIORITIES[INDEX]; 34034500
|
|
IRSTACK [PROCESSNATUREPLACE]~*&NATUREOFPROCESS(IF INDEX = 34035000
|
|
TERMINATEINDICATOR THEN TERMINATEIR ELSE INDEPENDENT, 34035500
|
|
INDEX);34035800
|
|
IRSTACK [STACKSIZEPLACE]~INDEPENDENTRUNNERCORE; 34036000
|
|
COMMENT *** WE SHOULD USE DIFFERENT STACK SIZES FOR DIFFERENT IR S; 34036200
|
|
END ELSE UNLOCK(IRPARAMETERLOK[INDEX]); %%%MCS000100034036500
|
|
IF INDEX } ONEONLYINDEX THEN 34037000
|
|
BEGIN %%%MCS000400034038000
|
|
BUZZCONTROL(IRPARAMETERLOK[INDEX]); 34039000
|
|
STACK[STACKNO,IRPARAMETERPLACE]~*+1; 34040000
|
|
UNLOCK(IRPARAMETERLOK[INDEX ]); 34041000
|
|
34042000
|
|
END ; %%%MCS000400034043000
|
|
STACKINUSE[INDEX ]~STACKNO; 34043100
|
|
IF INDEX = TERMINATEINDICATOR THEN 34043200
|
|
BEGIN %%%MCS000500034043300
|
|
BUZZCONTROL(IRPARAMETERLOK[TERMINATEINDICATOR]); 34043400
|
|
INSERTINQ(TERMINATEQ,DUMMYREF,MYSNR ); 34043500
|
|
UNLOCK(IRPARAMETERLOK[TERMINATEINDICATOR]); 34043600
|
|
END ; %%%MCS000500034043700
|
|
UNLOCK(INDEPENDENTRUNNERLOK); 34044000
|
|
BUZZCONTROL(READYQ); 34045200
|
|
IF NEWSTACK THEN 34046000
|
|
INSERTINQUEUE(OTHERREDY,STACKNO); 34047000
|
|
FINI: 34047200
|
|
UNLOCK(READYQ); 34048000
|
|
EXIT; 34048100
|
|
END INDEPENDENTRUNNER; 34049000
|
|
SAVE 34050000
|
|
PROCEDURE RUN (PARAMETER,PROCEEDURE); 34051000
|
|
VALUE PARAMETER 34052000
|
|
; 34053000
|
|
WORD PARAMETER 34054000
|
|
; 34055000
|
|
PROCEDURE PROCEEDURE 34056000
|
|
; 34057000
|
|
COMMENT INDEPENDENT RUNNER STACKS, INITIATE STACKS AND JOB (D2) STACKS 34058000
|
|
ALL EXIT TO RUN AFTER A MVST TAKES THEM OUT OF THE READYQ FOR 34058020
|
|
THE FIRST TIME 34058040
|
|
RUN DETERMINES (FROM "NATURE OF PROCESS" IN THE PROCESS 34058060
|
|
STACK) WHETHER INITIATE, AN INDEPENDENT RUNNER OR A NORMAL 34058080
|
|
STATE PROGRAM (WHICH MAY BE A TYPED OR UNTYPED PROCEDURE 34058100
|
|
REQUIRING OR NOT REQUIRING PARAMETERS) IS TO BE ENTERED 34058120
|
|
UPON RETURN TO RUN (AT EXIT OR RETURN FROM THE CALLED 34058140
|
|
PROCEDURE), RUN TAKES APPROPRIATE ACTION AS REQUIRED BY 34058160
|
|
COMPILERS, DIFFERENT INDEPENDENT RUNNERS ETC. AND THEN CALLS 34058180
|
|
TERMINATE 34058200
|
|
; 34059000
|
|
BEGIN 34059200
|
|
REAL PROCESSNATUR 34059300
|
|
, RESULT 34059400
|
|
, TEMPORARY = RESULT 34059500
|
|
, MYSNR 34059600
|
|
; 34060000
|
|
DEFINE COMPILER = PROCESSNATUR 34060200
|
|
.PROCESSHISTORYF!INDEPENDENT AND 34060220
|
|
(TEMPORARY~PROCESSNATUR.PROCESSCLASSF)34060240
|
|
}FIRSTCOMPILEROPTION AND 34060260
|
|
TEMPORARY{LASTCOMPILEROPTION# 34060400
|
|
, IFINDEPENDENTRUNNER 34060600
|
|
= IF (PROCESSNATUR~MYSTACK[PROCESSNATUREPLACE]) 34060800
|
|
.PROCESSHISTORYF=INDEPENDENT 34060802
|
|
OR PROCESSNATUR.PROCESSHISTORYF=TERMINATEIR34060805
|
|
OR PROCESSNATUR.INITIATESTACKF=1# 34060810
|
|
, SYNTAXTOG = PROCESSNATUR.PROCESSCLASSF= 34060820
|
|
COMPILENSYNTAXJOB# 34060830
|
|
; 34061000
|
|
ARRAY MYSTACK[*] 34061200
|
|
; 34062000
|
|
REAL PROCEDURE REALPROCEEDURE=PROCEEDURE;NULL; 34062010
|
|
INTEGER GALLOP ; % *** FOR MONITOR ONLY 34064740
|
|
MONITOR JACKMONITOR(GALLOP); 34064760
|
|
GALLOP~TRACE(0); 34064800
|
|
MYSTACK~STACKVECTOR[MYSNR~SNR]; 34065000
|
|
LOSR~MYSTACK[STACKSIZEPLACE]-STACKOFLOWSIZE; 34065200
|
|
IFINDEPENDENTRUNNER 34066000
|
|
THEN 34066020
|
|
BEGIN %%%MCS000100034066040
|
|
PROCEEDURE(PARAMETER); 34066200
|
|
END %%%MCS000100034066800
|
|
ELSE 34066900
|
|
BEGIN %%%MCS000150034067000
|
|
BOJMESSER(MYSNR); 34067200
|
|
IF COMPILER 34067400
|
|
THEN 34067600
|
|
BEGIN %%%MCS000200034067800
|
|
RESULT~REALPROCEEDURE(SYNTAXTOG);34068000
|
|
END %%%MCS000200034070600
|
|
ELSE 34070800
|
|
BEGIN %%%MCS000300034071000
|
|
COMMENT WE HAVE A PROGRAM WITH NO PARAMETERS; 34071200
|
|
PROCEEDURE; 34071400
|
|
END; %%%MCS000300034072800
|
|
EOJMESSER(MYSNR); 34073000
|
|
END; %%%MCS000150034074000
|
|
COMMENT *** 5 MARCH 1969, THE ABOVE CODE WILL HAVE TO BE EXPANDED TO 34074010
|
|
CATER FOR MORE EXTENSIVE TREATMENT OF COMPILERS AND PROGRAMS AS34074020
|
|
(TYPED OR UNTYPED) PROCEDURES. ALSO THE FOLLOWING TERMINATE 34074040
|
|
CODE MAY REQUIRE ALTERING 34074060
|
|
; 34074080
|
|
FORK(TERMINATE,0); 34075000
|
|
IF SIMULATING THEN 34075010
|
|
GALLOP~GALLOP; %*** FOR MONITOR ONLY 34075100
|
|
TRACE(GALLOP); 34075200
|
|
HOLD; 34076000
|
|
END RUN ; 34077000
|
|
SAVE PROCEDURE IRTEST(IND); INTEGER IND; 34077200
|
|
BEGIN 34078000
|
|
MONITOR JACKMONITOR(IND); 34079000
|
|
REAL MYSNR; 34080000
|
|
REAL OLDTIME; 34080100
|
|
MONITOR JACKMONITOR(MYSNR); 34081000
|
|
IND~IND; %*** FOR MONITOR ONLY 34082000
|
|
MYSNR~SNR; %*** FOR MONITOR ONLY 34083000
|
|
DO BEGIN 34083100
|
|
IF(OLDTIME~OLDTIME+1) MOD 10 = 0 THEN 34083200
|
|
FORK(STATUS,0); 34083300
|
|
WAIT(TIMERINTERRUPTEVENT); 34083400
|
|
END UNTIL FALSE; 34083500
|
|
HOLD; 34084000
|
|
END IRTEST; 34085000
|
|
SAVE 34085300
|
|
34085310
|
|
PROCEDURE LOADFIXEDIRSTACK(STACKNO); 34086000
|
|
VALUE STACKNO ; 34087000
|
|
INTEGER STACKNO 34088000
|
|
; 34089000
|
|
COMMENT PUTS THE FIRST (TOSCW),SECOND (SELF IDENTIFYING MSCW) WORDS 34090000
|
|
IN AN INDEPENDENT RUNNER STACK.PUTS THE RUN RETURN CONTROL 34091000
|
|
WORD AND THE PROCESS INFORMATION WHICH IS FIXED FOR ALL 34092000
|
|
INDEPENDENT RUNNERS I.E. CORE ESTIMATE,PROCESSOR TIME 34093000
|
|
ESTIMATE,I/O TIME ESTIMATE.PUTS IN SOME OTHER CONTROL WORDS 34094000
|
|
; 34095000
|
|
BEGIN 34096000
|
|
INTEGER LFI = STACKNO % *** FOR MONITOR ONLY 34097000
|
|
; 34098000
|
|
MONITOR JACKMONITOR(LFI) 34099000
|
|
; 34100000
|
|
ARRAY MYSTACK[*]; 34101000
|
|
WORD ARRAY MYWORDSTACK =MYSTACK[*] 34102000
|
|
; 34103000
|
|
LFI~LFI; % *** FOR MONITOR ONLY 34104000
|
|
MYSTACK~STACK[STACKNO,*]; 34105000
|
|
MYWORDSTACK[FIRSTPLACE]~IRTOSCW; 34106000
|
|
MYWORDSTACK[LINKPLACE]~0&MARKSTACKWD(,*,1,STACKNO,*,*,*,*); 34107000
|
|
34110100
|
|
MYWORDSTACK[FIRSTMSCWPLACE]~IRMSCW1; 34111000
|
|
MYWORDSTACK[FIRSTRCWPLACE]~IRRCW1; 34112000
|
|
EXIT; 34115100
|
|
END LOADFIXEDIRSTACK; 34116000
|
|
PROCEDURE CONTROLCARD (PARAMETER); 38000000
|
|
WORD PARAMETER; 38001000
|
|
BEGIN COMMENT CONTROL CARD PROCESSES THE EBCDIC RECORD AS 38002000
|
|
DESCRIBED BY THE AREA DESCRIPTOR OF THE IOCB AND38003000
|
|
READS ADDITIONAL RECORDS UNTIL A "LABEL", "DATA"38004000
|
|
OR "END" IS ENCOUNTERED. WHILE A CONTROL DECK 38005000
|
|
IS BEING PROCESSED, THE UNIT OF THE IOCB IS 38006000
|
|
ASSIGNED TO THE CONTROL CARD PROCEDURE. THE 38007000
|
|
FINAL OUTPUT OF CONTROLCARD IS ONE OR MORE SHEET38008000
|
|
ENTRIES OR AN ASSIGNMENT OF A LABEL TO A UNIT. 38009000
|
|
;38010000
|
|
REFERENCE IOCB =PARAMETER; 38011000
|
|
INTEGER UNITNO = PARAMETER; 38012000
|
|
VALUE ARRAY RESERVED ~ (0,0,0,0,0,0,0,0,0,0,0,0,0,0, 8"UNKNOWNID", 0 38013000
|
|
, 8"# " , 114800 % CLASS 148 38014000
|
|
, 8". " , 114600 % CLASS 146 38015000
|
|
, 8"~ " , 114100 % CLASS 141 38016000
|
|
, 8"- " , 114500 % CLASS 145 38017000
|
|
, 8"; " , 114300 % CLASS 143 38018000
|
|
, 8"/ " , 114700 % CLASS 147 38019000
|
|
, 8", " , 114200 % CLASS 142 38020000
|
|
,40"7F4040404040", 114400 % QUOTE MARK CLASS 144 38021000
|
|
,40"6F4040404040", 114100 % QUEST MARK CLASS 141 38022000
|
|
, 8"ALGOL " , 505202 % CLASS 52 CASE 2 38023000
|
|
, 8"ALPHA " , 513600 % CLASS 136 38024000
|
|
, 8"BACKUP" , 608900 % CLASS 89 38025000
|
|
, 8"CC " , 214000 % CLASS 140 38026000
|
|
, 8"CHANGE" , 600701 % CLASS 7 CASE 1 38027000
|
|
, 8"COBOL " , 506502 % CLASS 65 CASE 2 38028000
|
|
, 8"COMMON" , 603902 % CLASS 39 CASE 2 38029000
|
|
, 8"COMPILE" , 700301 % CLASS 3 CASE 1 38030000
|
|
, 8"CORE " , 404002 % CLASS 40 CASE 2 38031000
|
|
, 8"DATA " , 400801 % CLASS 8 CASE 1 38032000
|
|
, 8"DATAB " , 501401 % CLASS 14 CASE 1 38033000
|
|
, 8"DISK " , 407900 % CLASS 79 38034000
|
|
, 8"DISPLAY" , 708300 % CLASS 83 38035000
|
|
, 8"DUMP " , 400601 % CLASS 6 CASE 1 38036000
|
|
, 8"END " , 302401 % CLASS 24 CASE 1 38037000
|
|
, 8"ESPOL " , 505402 % CLASS 54 CASE 2 38038000
|
|
, 8"EXECUTE" , 700201 % CLASS 2 CASE 1 38039000
|
|
, 8"EXTERNAL" , 806600 % CLASS 66 38040000
|
|
, 8"FILE " , 403502 % CLASS 35 CASE 2 38041000
|
|
, 8"FORM " , 413700 % CLASS 137 38042000
|
|
, 8"FORTRAN" , 705302 % CLASS 53 CASE 2 38043000
|
|
, 8"FREE " , 401201 % CLASS 12 CASE 1 38044000
|
|
, 8"GO ", 206900 % CLASS 69 38045000
|
|
, 8"IO " , 203702 % CLASS 37 CASE 2 38046000
|
|
, 8"LIBRARY" , 706700 % CLASS 67 38047000
|
|
, 8"LOAD " , 400501 % CLASS 5 CASE 1 38048000
|
|
, 8"PAPER " , 508600 % CLASS 86 38049000
|
|
, 8"PRINT " , 508700 % CLASS 87 38050000
|
|
, 8"PRIORITY" , 803802 % CLASS 38 CASE 2 38051000
|
|
, 8"PROCESS" , 703602 % CLASS 36 CASE 2 38052000
|
|
, 8"PROTECT" , 711200 % CLASS 112 38053000
|
|
, 8"PUBLIC" , 601301 % CLASS 13 CASE 1 38054000
|
|
, 8"PUNCH " , 508500 % CLASS 85 38055000
|
|
, 8"RANDOM" , 612500 % CLASS 125 38056000
|
|
, 8"READER" , 608800 % CLASS 88 38057000
|
|
, 8"RELEASE" , 701101 % CLASS 11 CASE 1 38058000
|
|
, 8"REMOTE" , 608400 % CLASS 84 38059000
|
|
, 8"REMOVE" , 600401 % CLASS 4 CASE 1 38060000
|
|
, 8"RUN " , 300101 % CLASS 1 CASE 1 38061000
|
|
, 8"SAVE " , 411100 % CLASS 111 38062000
|
|
, 8"SERIAL" , 612300 % CLASS 123 38063000
|
|
, 8"SPECIAL" , 710000 % CLASS 100 38064000
|
|
, 8"STACK " , 504102 % CLASS 41 CASE 2 38065000
|
|
, 8"SYNTAX" , 606800 % CLASS 68 38066000
|
|
, 8"TAPE7 " , 508100 % CLASS 81 38067000
|
|
, 8"TAPE9 " , 508200 % CLASS 82 38068000
|
|
, 8"TAPE " , 408000 % CLASS 80 38069000
|
|
, 8"UNIT " , 413800 % CLASS 138 38070000
|
|
, 8"UNLABELED" , 913900 % CLASS 139 38071000
|
|
, 8"UPDATE" , 612400 % CLASS 124 38072000
|
|
, 8"USER " , 401001 % CLASS 10 CASE 1 38073000
|
|
, 8"USE " , 300901 % CLASS 9 CASE 1 38074000
|
|
); 38075000
|
|
DEFINE 38076000
|
|
RUNCLS = 1#, 38077000
|
|
EXECUTECLS = 2#, 38078000
|
|
COMPILECLS = 3#, 38079000
|
|
REMOVECLS = 4#, 38080000
|
|
LOADCLS = 5#, 38081000
|
|
DUMPCLS = 6#, 38082000
|
|
CHANGECLS = 7#, 38083000
|
|
DATACLS = 8#, 38084000
|
|
USECLS = 9#, 38085000
|
|
USERCLS = 10#, 38086000
|
|
RELEASECLS = 11#, 38087000
|
|
FREECLS = 12#, 38088000
|
|
PUBLICCLS = 13#, 38089000
|
|
DATABCLS =14#, 38090000
|
|
ENDCLS = 24#, 38091000
|
|
FILECLS = 35#, 38092000
|
|
PROCESSCLS = 36#, 38093000
|
|
IOCLS = 37#, 38094000
|
|
PRIORITYCLS = 38#, 38095000
|
|
COMMONCLS = 39#, 38096000
|
|
CORECLS = 40#, 38097000
|
|
STACKCLS = 41#, 38098000
|
|
ALGOLCLS = 52#, 38099000
|
|
FORTRANCLS = 53#, 38100000
|
|
ESPOLCLS = 54#, 38101000
|
|
COBOLCLS = 65#, 38102000
|
|
EXTERNALCLS = 66#, 38103000
|
|
LIBRARYCLS = 67#, 38104000
|
|
SYNTAXCLS = 68#, 38105000
|
|
GOCLS = 69#, 38106000
|
|
DISKCLS = 79#, 38107000
|
|
TAPECLS = 80#, 38108000
|
|
TAPE7CLS = 81#, 38109000
|
|
TAPE9CLS = 82#, 38110000
|
|
DISPLAYCLS = 83#, 38111000
|
|
REMOTECLS = 84#, 38112000
|
|
PUNCHCLS = 85#, 38113000
|
|
PAPERCLS = 86#, 38114000
|
|
PRINTCLS = 87#, 38115000
|
|
READERCLS = 88#, 38116000
|
|
BACKUPCLS = 89#, 38117000
|
|
SPECIALCLS = 100#, 38118000
|
|
SAVECLS = 111#, 38119000
|
|
PROTECTCLS = 112#, 38120000
|
|
SERIALCLS = 123#, 38121000
|
|
UPDATECLS = 124#, 38122000
|
|
RANDOMCLS = 125#, 38123000
|
|
ALPHACLS = 1346, 38124000
|
|
FORMCLS = 137#, 38125000
|
|
UNITCLS = 138#, 38126000
|
|
UNLABELEDCLS = 139#, 38127000
|
|
CCCLS = 140#, 38128000
|
|
QUESTIONCLS = 141#,% ~ 38129000
|
|
COMMACLS = 142#,% , 38130000
|
|
SEMICOLONCLS = 143#,% ; 38131000
|
|
QUOTECLS = 144#,% " 38132000
|
|
HYPHENCLS = 145#,% - 38133000
|
|
PERIODCLS = 146#,% . 38134000
|
|
SLASHCLS = 147#,% / 38135000
|
|
CROSSHATCHCLS = 148#,% # 38136000
|
|
UNKNOWNIDCLS = 0#; 38137000
|
|
INTEGER MYCOMMON; %%%%% 38138000
|
|
ARRAY SEGZERO [SIZE(SHEETQ)]; 38139000
|
|
COMMENT SEGMENT ZERO WILL BE READ INTO THIS ARRAY AND 38140000
|
|
THE SHEET WILL BE BUILT IN THE ARRAY AND A REF- 38141000
|
|
ERENCE TO THE ARRAY WILL BE ENTERED IN THE 38142000
|
|
SHEET.; 38143000
|
|
ARRAY SEGZEROSKELETON [SIZE(SHEETQ)]; 38144000
|
|
ARRAY SEGZEROTEMP [*] ; %%%%%% 38145000
|
|
COMMENT PRESERVE FOR LOOPING; 38146000
|
|
WORD SEGZEROWORD = SEGZEROSKELETON; 38147000
|
|
WORD ARRAY HEADERW [*]; COMMENT THE DISK HEADER RETURNED BY 38148000
|
|
DIRECTORYSEARCH BASED ON NAME POINTER;38149000
|
|
ARRAY SOURCEAREA [15], 38150000
|
|
COMMENT THE AREA DESCRIPTOR OF THE IOCB.; 38151000
|
|
ACCUMULATOR [13]; 38152000
|
|
COMMENT THE FIRST 14 WORDS OF THE RESERVED ARRAY. USED 38153000
|
|
AS A TEMPORARY HOLDING AREA FOR CONTROL CARD 38154000
|
|
SYNTACTICAL UNITS AND THE RESERVED SEARCH 38155000
|
|
ARGUMENT (AND STOPPER).; 38156000
|
|
REAL RESULT COMMENT AN I/O RESULT DESCRIPTOR; 38157000
|
|
, FILEID COMMENT WAITIO CALLS IT "USER"; 38158000
|
|
,ACTION COMMENT WAITIO CALLS IT " IOERRORMASK"; 38159000
|
|
,CONTROLWORD 38160000
|
|
; 38161000
|
|
INTEGER COUNT, COMMENT A UTILITY CHARACTER COUNTER.; 38162000
|
|
LIMIT, COMMENT THE CHARACTERS OF A RECORD THAT ARE38163000
|
|
TO BE SCANNED.; 38164000
|
|
WORDDIVCHARSIZE, COMMENT THE NUMBER OF CHARACTERS IN 38165000
|
|
A WORD.; 38166000
|
|
T, COMMENT TEMPORARY; 38167000
|
|
LABELTYPE, 38168000
|
|
ORIGINALLIMIT, COMMENT THE NUMBER OF CHARACTERS IN A 38169000
|
|
RECORD.; 38170000
|
|
RESERVECASE, 38171000
|
|
CLASS, 38172000
|
|
WORDCOUNT; COMMENT THE NUMBER OF WORDS REQUIRED TO 38173000
|
|
CONTAIN AN IDENTIFIER.; 38174000
|
|
WORD WORDMON; %%%%%%%%%%%%% 38175000
|
|
REFERENCE SOURCEREFERENCE = SOURCEAREA, 38176000
|
|
SUCCESSORSHEET, PREDECESSORSHEET; 38177000
|
|
COMMENT REFERENCES TO THE SHEET ENTRIES FOR THE 38178000
|
|
PROCESSES THAT ARE DIRECTLY RELATED TO THE 38179000
|
|
PROCESS REFERENCED BY SEGZERO.; 38180000
|
|
ARRAY SUCCESSOR = SUCCESSORSHEET [*], 38181000
|
|
PREDECESSOR = PREDECESSORSHEET [*]; 38182000
|
|
POINTER ACCUMPOINTER, COMMENT A POINTER TO THE ACCUMULATOR.; 38183000
|
|
SOURCE, COMMENT THE SOURCE AREA - MAY BE UPDATED.; 38184000
|
|
ORIGINALSOURCE, COMMENT SOURCE-MAY NOT BE UPDATED; 38185000
|
|
DESTINATION, COMMENT - DITTO FOR ACCUMULATOR.; 38186000
|
|
TSOURCE, COMMENT - USUALLY POINTS AT BEGINNING OF 38187000
|
|
LAST ENTITY SCANNED.; 38188000
|
|
NAMEPOINTER; COMMENT POINTS TO COMPLETE NAME 38189000
|
|
CHARACTER STRING.; 38190000
|
|
BOOLEAN SPECIAL, COMMENT TRUE WHILE A SPECIAL CHARACTER IS38191000
|
|
TO BE SCANNED.; 38192000
|
|
ALFA, COMMENT TRUE IF IDENTIFIER TYPE STUFF IS 38193000
|
|
BEING SCANNED.; 38194000
|
|
ENDOFRECORD, COMMENT TRUE IF LIMIT HAS BEEN REACHED 38195000
|
|
OR "." HAS BEEN SEEN.; 38196000
|
|
CONVERT, COMMENT WHEN TRUE THE SCANNER ATTEMPTS TO 38197000
|
|
LEAVE A CONVERTED INTEGER IN ACCUMULATOR[0].; 38198000
|
|
COMPILER, COMMENT TRUE WHEN "COMPILE" HAS BEE SEEN;38199000
|
|
EXECUTESHEET, COMMENT TRUE WHEN EXECUTE SHEET ENTRY 38200000
|
|
(IMPLICIT OR EXPLICIT) IS TO BE 38201000
|
|
ENTERED IN THE SHEET QUEUE.; 38202000
|
|
SHEETENTERED; COMMENT TRUE WHEN SEGZERO HAS BEEN 38203000
|
|
ENTERED IN THE SHEETQ.; 38204000
|
|
LABEL CCERROR, 38205000
|
|
NATURALDEATH, 38206000
|
|
NEWLIFE, 38207000
|
|
EXECUTE, 38208000
|
|
DATA, 38209000
|
|
SUICIDE; 38210000
|
|
DEFINE CONTROLCARDIO = 38211000
|
|
BEGIN 38212000
|
|
SOURCEAREA [0] ~ CONTROLWORD; 38213000
|
|
RESULT ~ WAITIO (SOURCEAREA, FILEID, ACTION); 38214000
|
|
LIMIT ~ORIGINALLIMIT; 38215000
|
|
SOURCE ~ ORIGINALSOURCE; 38216000
|
|
CONTROLCARDCHECK; 38217000
|
|
END #, 38218000
|
|
CONTROLCARDCHECK = 38219000
|
|
IF BOOLEAN (RESULT.RDNOTREADY) THEN GO SUICIDE; %STATUS VECTOR KLUDGE 38220000
|
|
COMMENT - WAIT ON MPX 38220100
|
|
IF NOT BOOLEAN (RESULT.RDCNTRLCARD) 38221000
|
|
THEN CONTROLCARDERROR (2); 38222000
|
|
#, 38223000
|
|
CONVERTEDINTEGER = 999#, 38224000
|
|
CHARSIZE = 8#, 38225000
|
|
QUOTE = 8 """#, 38226000
|
|
BLANK = 8 " "#, 38227000
|
|
A =8"A"#, 38228000
|
|
ZERO = 8"0"#, 38229000
|
|
DEBLANK (P) = 38230000
|
|
BEGIN 38231000
|
|
SCAN P:P FOR T:LIMIT WHILE = BLANK; 38232000
|
|
ENDOFRECORD ~ LIMIT ~ T =0; 38233000
|
|
END #, 38234000
|
|
BLANKIT (PTR, CHARS) = 38235000
|
|
REPLACE PTR BY BLANK FOR CHARS#, 38236000
|
|
CONTROLCARDERROR (WHICH) = 38237000
|
|
BEGIN 38238000
|
|
GO TO CCERROR; 38239000
|
|
END #, 38240000
|
|
LEQACTION = 0#, 38241000
|
|
CARDACTION =1#, 38242000
|
|
CODEACTION =2#, 38243000
|
|
NATUREOFPROCESS(A, V) = 38244000
|
|
A[PROCESSNATUREPLACE].PROCESSCLASSF ~ V #, 38245000
|
|
CURRENTTIME = TIMEOFDAY#, %%%%%%%%% 38246000
|
|
FIXEDFPBSIZE = 4#, 38247000
|
|
COMPARE (SOURCE, DESTINATION, COUNT) = 38248000
|
|
IF SOURCE = DESTINATION FOR COUNT 38249000
|
|
THEN TRUE ELSE FALSE#, 38250000
|
|
MOVE (SOURCE , DESTINATION , CONDITION) = 38251000
|
|
REPLACE DESTINATION BY SOURCE CONDITION #, 38252000
|
|
MOVEUPDATE (SOURCE , DESTINATION , COND) = 38253000
|
|
REPLACE DESTINATION:DESTINATION BY 38254000
|
|
SOURCE:SOURCE COND #, 38255000
|
|
RESERVEINFOWRD = 38256000
|
|
RESERVED [RESERVEI+((COUNT+WORDDIVCHARSIZE) DIV 38257000
|
|
WORDDIVCHARSIZE - 38258000
|
|
(IF COUNT MOD WORDDIVCHARSIZE=0 THEN 1 ELSE 0))]#38259000
|
|
, 38260000
|
|
RANGE (LOW, HIGH) = 38261000
|
|
(CLASS } LOW AND CLASS { HIGH)#, 38262000
|
|
COUNTDIV = 100000#, 38263000
|
|
CLASSDIV = 100#, 38264000
|
|
RESERVECOUNT = RESERVEINFOWRD DIV COUNTDIV#; 38265000
|
|
FIELD VECTOR = 7:3, 38266000
|
|
WHICHUNIT = (UNITNO MOD 32+1):1; 38267000
|
|
MONITOR DONMONITOR ( 38268000
|
|
SHEETENTERED, 38269000
|
|
RESULT, 38270000
|
|
CLASS); 38271000
|
|
SAVE INTEGER PROCEDURE SCANNER; 38272000
|
|
BEGIN 38273000
|
|
INTEGER RESERVEI 38274000
|
|
; 38275000
|
|
REAL DELIMIT 38276000
|
|
, MASK ~3"7777777777777777" 38277000
|
|
, RESERVEINFO 38278000
|
|
; 38279000
|
|
LABEL BACK 38280000
|
|
, AWAY 38281000
|
|
; 38282000
|
|
BOOLEAN FIRSTQUOTE 38283000
|
|
, FOUND 38284000
|
|
; 38285000
|
|
FIELD FIRSTCHAR = 47:CHARSIZE; 38286000
|
|
BACK: DESTINATION ~ ACCUMPOINTER; 38287000
|
|
MOVE (BLANK, DESTINATION, FOR WORDDIVCHARSIZE); 38288000
|
|
TSOURCE ~ SOURCE; 38289000
|
|
IF SPECIAL ~ SOURCE < A FOR 1 38290000
|
|
THEN MOVEUPDATE (SOURCE, DESTINATION, FOR 1) 38291000
|
|
ELSE IF ALFA ~ SOURCE < ZERO FOR 1 OR FIRSTQUOTE 38292000
|
|
THEN MOVEUPDATE (SOURCE, DESTINATION, 38293000
|
|
FOR COUNT:LIMIT UNTIL { QUOTE) 38294000
|
|
ELSE IF CONVERT 38295000
|
|
THEN BEGIN 38296000
|
|
SCAN SOURCE FOR COUNT:LIMIT UNTIL < QUOTE; 38297000
|
|
COUNT ~ LIMIT - COUNT; 38298000
|
|
LIMIT ~ LIMIT - COUNT; 38299000
|
|
ACCUMULATOR [0] ~ INTEGER (SOURCE, COUNT); 38300000
|
|
SOURCE ~ SOURCE + COUNT; 38301000
|
|
DEBLANK (SOURCE); 38302000
|
|
RETURN (CONVERTEDINTEGER); 38303000
|
|
END 38304000
|
|
ELSE MOVEUPDATE (SOURCE, DESTINATION, 38305000
|
|
FOR COUNT:LIMIT UNTIL { QUOTE); 38306000
|
|
COUNT ~ IF SPECIAL THEN 1 ELSE LIMIT - COUNT; 38307000
|
|
LIMIT ~ LIMIT - COUNT; 38308000
|
|
IF FIRSTQUOTE 38309000
|
|
THEN BEGIN 38310000
|
|
IF SOURCE ! QUOTE FOR 1 38311000
|
|
THEN BEGIN COMMENT FINISH THE STRING; 38312000
|
|
T ~ LIMIT - COUNT; 38313000
|
|
LIMIT ~ * - T; 38314000
|
|
MOVEUPDATE (SOURCE, DESTINATION, 38315000
|
|
FOR COUNT:LIMIT UNTIL = QUOTE); 38316000
|
|
COUNT ~ LIMIT - COUNT + T; 38317000
|
|
LIMIT ~ * - COUNT - 1; 38318000
|
|
END ELSE LIMIT ~ COUNT - 1; 38319000
|
|
SOURCE ~ SOURCE +1; 38320000
|
|
RESERVEI ~ 0; 38321000
|
|
END; 38322000
|
|
IF COUNT > 17 THEN COUNT ~ 17; % USASI 38323000
|
|
WORDCOUNT ~ (COUNT + WORDDIVCHARSIZE - 1) DIV WORDDIVCHARSIZE; 38324000
|
|
IF FIRSTQUOTE THEN GO AWAY; 38325000
|
|
RESERVEI ~ MASKSEARCH (RESERVED[0], MASK, RESERVED); 38326000
|
|
IF COUNT > WORDDIVCHARSIZE 38327000
|
|
THEN WHILE RESERVEI > 0 AND NOT FOUND 38328000
|
|
DO BEGIN 38329000
|
|
FOUND ~ COMPARE (ACCUMPOINTER+WORDDIVCHARSIZE, 38330000
|
|
POINTER(RESERVED[RESERVEI+1], CHARSIZE), 38331000
|
|
COUNT - WORDDIVCHARSIZE); 38332000
|
|
FOUND ~ FOUND AND COUNT = RESERVECOUNT; 38333000
|
|
IF NOT FOUND 38334000
|
|
THEN RESERVEI ~ MASKSEARCH (ACCUMULATOR[0], 38335000
|
|
MASK, 38336000
|
|
RESERVED & DATADESCRIPTOR 38337000
|
|
(,,,1,,,,,RESERVEI-1)); 38338000
|
|
END; 38339000
|
|
AWAY: DEBLANK (SOURCE); 38340000
|
|
RESERVEINFO ~ IF RESERVEI = 0 THEN 0 38341000
|
|
ELSE RESERVEINFOWRD MOD COUNTDIV; 38342000
|
|
CLASS ~ RESERVEINFO DIV CLASSDIV; 38343000
|
|
RESERVECASE ~ RESERVEINFO MOD CLASSDIV; 38344000
|
|
IF CLASS } CCCLS THEN 38345000
|
|
BEGIN 38346000
|
|
CASE CLASS - CCCLS OF 38347000
|
|
BEGIN 38348000
|
|
CLASS ~ QUESTIONCLS; % CC 38349000
|
|
; % QUESTION MARK 38350000
|
|
GO BACK; % , 38351000
|
|
CLASS ~ QUESTIONCLS; % ; 38352000
|
|
BEGIN % " 38353000
|
|
FIRSTQUOTE ~ TRUE; 38354000
|
|
GO BACK; 38355000
|
|
END; 38356000
|
|
BEGIN % - 38357000
|
|
CONTROLCARDIO; 38358000
|
|
DEBLANK (SOURCE); 38359000
|
|
GO BACK; 38360000
|
|
END; 38361000
|
|
ENDOFRECORD ~ TRUE; % . 38362000
|
|
; % / 38363000
|
|
; % # 38364000
|
|
END SPECIAL CHARACTER CASES; 38365000
|
|
END; 38366000
|
|
SCANNER ~ CLASS; 38367000
|
|
END SCANNER; 38368000
|
|
SAVE POINTER PROCEDURE NAMES (CALLER); 38369000
|
|
VALUE CALLER; 38370000
|
|
INTEGER CALLER; 38371000
|
|
BEGIN 38372000
|
|
REFERENCE THISNAME; 38373000
|
|
POINTER ANAME, ALLNAMEPTR, P; 38374000
|
|
ARRAY ONENAME, ALLNAMES, DUMMY [*]; 38375000
|
|
FIELD CHARS = 19:20; 38376000
|
|
LAYOUT WORDS (WRDCNT = 39:20); 38377000
|
|
LAYOUT IDSANDNAMES (47:8, 39:8); 38378000
|
|
FIELD COUNTF = 47:8; 38379000
|
|
INTEGER TOTALCHARS, COMMENT THE TOTAL CHARACTERS IN A NAM;38380000
|
|
TOTALNAMES, COMMENT THE NUMBER OF NAMES IN AN 38381000
|
|
IDENTIFIER (THE THING THAT UNIQUELY 38382000
|
|
IDENTIFIES A FILE); 38383000
|
|
TOTALIDENTIFIERS; COMMENT THE TOTAL NUMBER OF 38384000
|
|
IDENTIFIERS IN A SERIES (IDENTIFIERS 38385000
|
|
SEPARATED BY COMMAS); 38386000
|
|
LABEL SERIES; 38387000
|
|
TOTALCHARS ~ WORDDIVCHARSIZE + 3; % PROVIDE FOR INFO WORD, 38388000
|
|
% TOTAL IDENTIFIERS, NAMES AND 38389000
|
|
% STOPPER 38390000
|
|
IF LOCK (NAMEQUEUE) THEN BUZZ (NAMEQUEUE); 38391000
|
|
SERIES: TOTALIDENTIFIERS ~ * + 1; 38392000
|
|
DO BEGIN 38393000
|
|
SCANNER; 38394000
|
|
ONENAME ~ ONENAME & DATADESCRIPTOR 38395000
|
|
(,1,0,,,,,, WORDCOUNT+1, GETAREA (WORDCOUNT)); 38396000
|
|
ONENAME[0].COUNTF ~ COUNT; 38397000
|
|
TOTALNAMES ~ * + 1; 38398000
|
|
TOTALCHARS ~ * + COUNT + (IF CALLER =DATACLS 38399000
|
|
THEN 18 - COUNT ELSE 1); 38400000
|
|
ANAME ~ POINTER (ONENAME, CHARSIZE)+1; 38401000
|
|
MOVE (ACCUMPOINTER, ANAME, FOR COUNT); 38402000
|
|
THISNAME ~ ALLOCATE (NAMEQUEUE); 38403000
|
|
POINTERTONAME@(THISNAME) ~ANAME - 1; 38404000
|
|
CHARCOUNT @ (THISNAME) ~ COUNT +1 & WORDS(WORDCOUNT);38405000
|
|
NAMEQUEUE ~ THISNAME; 38406000
|
|
IF NOT ENDOFRECORD THEN SCANNER; 38407000
|
|
END 38408000
|
|
UNTIL CLASS !SLASHCLS; 38409000
|
|
IF CLASS = COMMACLS THEN GO SERIES; 38410000
|
|
ALLNAMES ~ ALLNAMES & DATADESCRIPTOR (,,0,,,,,, 38411000
|
|
(WORDDIVCHARSIZE - TOTALCHARS MOD WORDDIVCHARSIZE + 38412000
|
|
TOTALCHARS) DIV WORDDIVCHARSIZE, 1); 38413000
|
|
ANAME ~ POINTER (ALLNAMES, CHARSIZE); 38414000
|
|
ANAME ~ ANAME + WORDDIVCHARSIZE + 2; 38415000
|
|
WORDMON ~ WORD (ANAME); %%%%%% 38416000
|
|
WHILE THISNAME ~ FIRSTNAME ! NULL 38417000
|
|
DO BEGIN 38418000
|
|
T ~ CHARCOUNT @ (THISNAME).CHARS; 38419000
|
|
P ~ POINTERTONAME @(THISNAME); 38420000
|
|
MOVEUPDATE (P, ANAME, FOR T); 38421000
|
|
IF CALLER = DATACLS THEN ANAME ~ ANAME + (18 - T); 38422000
|
|
FORGETAREA (SIZE(NAMEQUEUE), 38423000
|
|
WORD (THISNAME).ADDRESSF); 38424000
|
|
FORGETAREA (CHARCOUNT @ (THISNAME).WRDCNT, 38425000
|
|
WORD (POINTERTONAME @ (THISNAME)).ADDRESSF); 38426000
|
|
DELINK (NAMEQUEUE, THISNAME); 38427000
|
|
END; 38428000
|
|
UNLOCK (NAMEQUEUE); 38429000
|
|
ALLNAMES [1] ~ * & IDSANDNAMES (TOTALIDENTIFIERS, TOTALNAMES); 38430000
|
|
ALLNAMES[0] ~ 0 & FIRSTPOINTERWORDL (*, ALLNAMES.LENGTHF, *, *,38431000
|
|
TOTALCHARS -6); 38432000
|
|
IF CALLER = DATACLS THEN RETURN (ALLNAMES); 38433000
|
|
RETURN( ANAME & STRINGDESCRIPTOR (,*,0,,*,*,*,TOTALCHARS,*)); 38434000
|
|
END OF NAMES; 38435000
|
|
SAVE INTEGER PROCEDURE GETANUMBER (AGAIN); 38436000
|
|
VALUE AGAIN; 38437000
|
|
BOOLEAN AGAIN; 38438000
|
|
BEGIN 38439000
|
|
SCANNER; COMMENT GET RID OF DELIMITER; 38440000
|
|
CONVERT ~ TRUE; 38441000
|
|
IF SCANNER !CONVERTEDINTEGER 38442000
|
|
THEN CONTROLCARDERROR (3) 38443000
|
|
ELSE GETANUMBER ~ ACCUMULATOR [0]; 38444000
|
|
IF AGAIN AND NOT ENDOFRECORD THEN SCANNER; 38445000
|
|
END GETANUMBER; 38446000
|
|
SAVE PROCEDURE QUEUEPARAMETERS(SEGZERO2); 38447000
|
|
ARRAY SEGZERO2[*]; 38448000
|
|
BEGIN COMMENT READ THE PARAMETER BLOCK THAT THE COMPILERS HAVE38449000
|
|
WRITTEN TO THE CODE FILE AND MAKE INDIVIDUAL 38450000
|
|
QUEUE ENTRIES FOR EACH OF THEM. IF THE BLOCK 38451000
|
|
DOES NOT EXIST, SET UP AN EMPTY QUEUE.; 38452000
|
|
ARRAY SEGZERO = SEGZERO2 [*,*]; 38453000
|
|
ARRAY PB, MYPB, HEADER [*]; 38454000
|
|
INTEGER L, A, I, T, PI, DA; 38455000
|
|
REAL X; 38456000
|
|
REFERENCE R, MYPBR = MYPB; 38457000
|
|
IF L ~ (PB ~ SEGZERO [FPBDESCPLACE,*]).LENGTHF > 1 38458000
|
|
THEN BEGIN COMMENT A COMPILE TIME PARAMETER BLOCK WAS 38459000
|
|
CREATED.; 38460000
|
|
MYPB ~ MYPB & ARRAYDESCL(0, L, 1); 38461000
|
|
HEADER ~ SEGZERO [CODEFILEDESCPLACE, *]; 38462000
|
|
BUZZ (PARAMETERQUEUE); 38463000
|
|
LASTPARAM ~ FIRSTPARAM ~ NULL; 38464000
|
|
PI ~ 1; 38465000
|
|
SEGZERO [FPBDESCPLACE, *].ADDRESSF ~ A ~ 38466000
|
|
MYPB.ADDRESSF; 38467000
|
|
DO BEGIN 38468000
|
|
A ~ A + (X ~ MYPB[PI]).INFOINDEXF; 38469000
|
|
R ~ ALLOCATE (PARAMETERQUEUE); 38470000
|
|
POINTERTOID @(R) ~ POINTER (MYPB[PI],8); 38471000
|
|
PARAMETERINFO@(R) ~ MYPBR& ARRAYDESCL 38472000
|
|
(3, X.INFOLENGTHF, A); 38473000
|
|
INITIALINSERT (PARAMETERQUEUE, R); 38474000
|
|
END 38475000
|
|
UNTIL PI ~ PI + X.TOTALINFOWORDSF ! PI; 38476000
|
|
COMMENT DITTO IS ZERO WHEN THE LAST 38477000
|
|
PARAMETER HAS BEEN PROCESSED.; 38478000
|
|
UPDATEWORDCOUNT (L, FIRSTPARAM ); 38479000
|
|
END 38480000
|
|
ELSE BEGIN 38481000
|
|
BUZZ (PARAMETERQUEUE); 38482000
|
|
FIRSTPARAM ~ LASTPARAM ~ NULL; 38483000
|
|
END; 38484000
|
|
READLOCK (FIRSTPARAM , SEGZERO[FIRSTPARAMETERPLACE, *]); 38485000
|
|
READLOCK (LASTPARAM , SEGZERO[LASTPARAMETERPLACE, *]); 38486000
|
|
UNLOCK (PARAMETERQUEUE); 38487000
|
|
EXIT; 38488000
|
|
END OF QUEUEPARAMETERS; 38489000
|
|
SAVE PROCEDURE EMPTYPARAMETERQ(SEGZERO2); 38490000
|
|
ARRAY SEGZERO2[*]; 38491000
|
|
BEGIN COMMENT EMPTY THE PARAMETER QUEUE. ALL PARAMETERS FOR 38492000
|
|
THIS RUN ARE NOW KNOWN AND THE INFORMATION FOR THEM 38493000
|
|
EXISTS AS INDIvIDUAL ENTRIES IN THE PARAMETER QUEUE. 38494000
|
|
THESE ENTRIES EXIST EITHER IN THE AREA DESCRIBED 38495000
|
|
BY THE ORIGINAL FPB DESCRIPTOR (AS SUPPLIED BY THE 38496000
|
|
COMPILER (AS SUPPLIED BY CONTROL CARD)) OR IN INDIV- 38497000
|
|
IDUAL AREAS THAT WERE OBTAINED AS INDIVIDUAL CONTROL 38498000
|
|
CARDS WERE PROCESSED. IT IS NOW TIME TO CONSOLIDATE 38499000
|
|
ALL ENTRIES INTO A SINGLE ENTRY AND PUT A NEW 38500000
|
|
DESCRIPTOR IN SEGMENT ZERO. WHEN THERE ARE ABSOLUTE-38501000
|
|
LY NO PARAMETERS, THE FPB DESCRIPTOR IS AN ABSENT 38502000
|
|
DESCRIPTOR WITH A LENGTH OF 1 WHICH WILL (AUTOMATIC- 38503000
|
|
ALLY) RETURN A ZERO WHEN THE ZEROTH WORD (WORD COUNT)38504000
|
|
IS ACCESSED.; 38505000
|
|
ARRAY SEGZERO =SEGZERO2 [*,*]; 38506000
|
|
ARRAY PB [1], PINFO [*]; 38507000
|
|
ARRAY PBW = PB [*]; 38508000
|
|
REFERENCE PINFOR = PINFO; 38509000
|
|
INTEGER PI, FWI, FWL; 38510000
|
|
POINTER PINFOP = PINFO; 38511000
|
|
REFERENCE RT, RTT; 38512000
|
|
REAL FW; 38513000
|
|
IF (RT ~ REFERENCE (SEGZERO [FIRSTPARAMETERPLACE, *]))! NULL 38514000
|
|
THEN BEGIN 38515000
|
|
FIRSTPARAM ~ RT; 38516000
|
|
LASTPARAM ~ REFERENCE(SEGZERO[LASTPARAMETERPLACE,*]);38517000
|
|
PB ~ PB & ARRAYDESCL (0, 38518000
|
|
(PI ~ REAL (POINTERTOID@(RT), 6).TOTALINFOWORDSF38519000
|
|
+1), 1); 38520000
|
|
PB[0] ~ PI; 38521000
|
|
PI ~ 1; 38522000
|
|
DO BEGIN 38523000
|
|
FW ~ REAL (POINTERTOID@(RT), 6); 38524000
|
|
PI ~ PI + FWI + FWL; 38525000
|
|
MOVE (PINFOP ~ POINTERTOID@(RT), 38526000
|
|
POINTER (PB[PI], CHARSIZE), 38527000
|
|
FOR FWI ~ FW.INFOINDEXF WORDS); 38528000
|
|
FORGETSPACE (PINFO.ADDRESSF); 38529000
|
|
PINFOR ~ PARAMETERINFO@(RT); 38530000
|
|
MOVE (POINTER(PINFO, CHARSIZE) 38531000
|
|
,POINTER(PB[PI+FWI], CHARSIZE), 38532000
|
|
FOR FWL ~ FW.INFOLENGTHF WORDS); 38533000
|
|
PB[PI].TOTALINFOWORDSF ~ FWI + FWL; 38534000
|
|
FORGETSPACE (PINFO.ADDRESSF); 38535000
|
|
RTT ~ NEXTPARAM@(RT); 38536000
|
|
DELINK (PARAMETERQUEUE, RT); 38537000
|
|
RT ~ RTT; 38538000
|
|
END 38539000
|
|
UNTIL RTT =NULL; 38540000
|
|
PB[PI].TOTALINFOWORDSF ~ 0; 38541000
|
|
FIRSTPARAM ~ LASTPARAM ~NULL; 38542000
|
|
IF SEGZERO[FPBDESCPLACE, *].LENGTHF > 1 38543000
|
|
THEN FORGETSPACE (SEGZERO [FPBDESCPLACE,*].ADDRESSF);38544000
|
|
COMMENT THIS IS THE PLACE TO WRITE PB TO MCP OLAY DISK, 38545000
|
|
FIX UP THE DESCRIPTOR ACCORDINGLY AND FORGET THE 38546000
|
|
SPACE USED BY PB. ALSO CHECK ON EXECUTABLE STATUS 38547000
|
|
OF SEGZERO BEING PROCESSED.; 38548000
|
|
END; 38549000
|
|
READLOCK (PBW,SEGZERO [FPBDESCPLACE, *]); 38550000
|
|
EXIT; 38551000
|
|
END EMPTYPARAMETERQ; 38552000
|
|
SAVE PROCEDURE FILECARD (SEGZERO, ACTION); 38553000
|
|
VALUE ACTION; 38554000
|
|
INTEGER ACTION; 38555000
|
|
ARRAY SEGZERO [*]; 38556000
|
|
BEGIN COMMENT PROCESS AND QUEUE FILE PARAMETER CARDS.; 38557000
|
|
REFERENCE THISFILE, TEMPR; 38558000
|
|
POINTER EXTERNALNAME, PT; 38559000
|
|
WORD EXTERNALNAMEW = EXTERNALNAME; 38560000
|
|
INTEGER T; 38561000
|
|
SAVE ARRAY FPB [1], 38562000
|
|
SCRATCH [1]; 38563000
|
|
REFERENCE FPBR = FPB; 38564000
|
|
WORD ARRAY SZ = SEGZERO[*], 38565000
|
|
SUCCESSOR = SUCCESSORSHEET [*,*]; 38566000
|
|
DEFINE FPPLACE = FIRSTPARAMETERPLACE #, 38567000
|
|
LPPLACE = LASTPARAMETERPLACE#, 38568000
|
|
REEDLOCK (LOCALP, GLOBALP, PLACE) = 38569000
|
|
LOCALP ~ GLOBALP; GLOBALP ~ REFERENCE (SZ[PLACE]); 38570000
|
|
SZ [PLACE] ~ WORD (LOCALP) #, 38571000
|
|
FPBSIZE (V) = 38572000
|
|
FPB ~ FPB & ARRAYDESCL (0, V + FIXEDFPBSIZE, 1)#, 38573000
|
|
SCRATCHSIZE (ARAY) = 38574000
|
|
SCRATCH ~ * & ARRAYDESCL(0,T~ARAY[0].INFOINDEXF,1)#; 38575000
|
|
IF COMPILEFORSYNTAX(SEGZERO[PROCESSNATUREPLACE]) THEN EXIT; 38576000
|
|
BUZZ (PARAMETERQUEUE); 38577000
|
|
REEDLOCK (TEMPR, FIRSTPARAM, FPPLACE); 38578000
|
|
REEDLOCK (TEMPR, LASTPARAM, LPPLACE); 38579000
|
|
THISFILE ~ ALLOCATE (PARAMETERQUEUE); 38580000
|
|
CASE ACTION OF 38581000
|
|
BEGIN 38582000
|
|
BEGIN % STANDARD LABEL EQUATION 38583000
|
|
POINTERTOID@(THISFILE) ~ PT ~ NAMES(FILECLS); 38584000
|
|
EXTERNALNAME ~ NAMES(FILECLS); 38585000
|
|
FPBSIZE (REAL (EXTERNALNAME, 6).INFOINDEXF); 38586000
|
|
WHILE CLASS ! QUESTIONCLS AND NOT ENDOFRECORD DO SCANNER; 38587000
|
|
COMMENT PRECEDING STATEMENT IS IN LIEU OF FULL LABEL 38588000
|
|
EQUATION PROCESSING.; 38589000
|
|
END; 38590000
|
|
BEGIN % COMPILE CARD FILE 38591000
|
|
SCRATCHSIZE (COMPILERCARDEXTERNAL); 38592000
|
|
MOVE (CURRENTTIME, POINTER(COMPILERCARDEXTERNAL[1], 38593000
|
|
CHARSIZE) +3, FOR 6); 38594000
|
|
MOVE (PT ~ POINTER(COMPILERCARDEXTERNAL, CHARSIZE), 38595000
|
|
POINTER (SCRATCH, CHARSIZE), FOR T WORDS); 38596000
|
|
MOMTOVECTOR (SCRATCH, UINFOW, FILEID.UNITNOF); 38597000
|
|
FPBSIZE (T); 38598000
|
|
MOVE (PT, POINTER (FPB[FIXEDFPBSIZE],CHARSIZE), 38599000
|
|
FOR T WORDS); 38600000
|
|
SCRATCHSIZE (COMPILERCARDFILE); 38601000
|
|
MOVE (POINTER(COMPILERCARDFILE, CHARSIZE), 38602000
|
|
POINTER (SCRATCH, CHARSIZE), FOR T WORDS); 38603000
|
|
POINTERTOID@(THISFILE) ~ PT ~ POINTER(SCRATCH, CHARSIZE); 38604000
|
|
END; 38605000
|
|
BEGIN % COMPILER CODE FILE 38606000
|
|
SCRATCHSIZE (COMPILERCODEFILE); 38607000
|
|
MOVE (POINTER(COMPILERCODEFILE, CHARSIZE), 38608000
|
|
POINTER(SCRATCH, CHARSIZE), FOR T WORDS); 38609000
|
|
POINTERTOID@(THISFILE) ~ PT ~ POINTER (SCRATCH, CHARSIZE);38610000
|
|
EXTERNALNAMEW~ WORD(SUCCESSOR[CODEFILENAMEDESCPLACE,*]); 38611000
|
|
FPBSIZE (REAL(EXTERNALNAME, 6).INFOINDEXF); 38612000
|
|
END; 38613000
|
|
END OF CASE; 38614000
|
|
IF ACTION ! CARDACTION 38615000
|
|
THEN MOVE (EXTERNALNAME, POINTER(FPB[FIXEDFPBSIZE], CHARSIZE), 38616000
|
|
FOR (REAL(EXTERNALNAME, 6).INFOINDEXF) WORDS); 38617000
|
|
IF ACTION = LEQACTION 38618000
|
|
THEN FORGETSPACE (EXTERNALNAME.ADDRESSF); 38619000
|
|
MOVE (REAL(PT, 6)& FIRSTPOINTERWORDL(*,*,*,FILETYPEP), PT, 38620000
|
|
FOR 1 WORDS); 38621000
|
|
PARAMETERINFO @(THISFILE) ~ FPBR; 38622000
|
|
PARAMETERQUEUE ~ THISFILE; 38623000
|
|
FIRSTPARAM ~ READLOCK(FIRSTPARAM ,SZ [FPPLACE]); 38624000
|
|
LASTPARAM ~ READLOCK (LASTPARAM , SZ [LPPLACE]); 38625000
|
|
UNLOCK (PARAMETERQUEUE); 38626000
|
|
EXIT; 38627000
|
|
END FILECARD; 38628000
|
|
SAVE PROCEDURE ENDGAME (SEGZERO); 38629000
|
|
ARRAY SEGZERO [*]; 38630000
|
|
BEGIN COMMENT DO ALL PROCESSING NORMALLY ASSOCIATED WITH THE 38631000
|
|
END OF A SCHEDULE DECK.; 38632000
|
|
REFERENCE PSR; 38633000
|
|
ARRAY PS = PSR[*]; 38634000
|
|
BOOLEAN PRIOR; 38635000
|
|
WORD ARRAY SEGZERW = SEGZERO [*]; 38636000
|
|
REFERENCE ARRAY SZR = SEGZERO [*]; 38637000
|
|
IF (PSR ~ PREVIOUSPROGRAM@(REFERENCE (SEGZERO)))! NULL 38638000
|
|
THEN BEGIN PRIOR ~ TRUE; ENDGAME (PS); END; 38639000
|
|
EMPTYPARAMETERQ(SEGZERO); 38640000
|
|
IF PRIOR THEN FIRSTPARAMETER@(PSR) ~ SZR[FPBDESCPLACE]; 38641000
|
|
SEGZERO [TIMEENTEREDPLACE] ~ TIMEOFDAY; 38642000
|
|
IF T ~ SEGZERO[PROCESSNATUREPLACE].PROCESSCLASSF ! 38643000
|
|
COMPILENSYNTAXOBJECT 38644000
|
|
THEN BEGIN 38645000
|
|
BUZZ (SHEETQ); 38646000
|
|
SHEETQ ~ REFERENCE(SEGZERO); 38647000
|
|
UNLOCK (SHEETQ); 38648000
|
|
SHEETENTERED ~ TRUE; 38649000
|
|
IF PRIOR 38650000
|
|
THEN READLOCK (SEGZERW[LINKPLACE].SELFIDENTF, 38651000
|
|
PS [NEXTPROGRAMPLACE]); 38652000
|
|
END 38653000
|
|
ELSE BEGIN 38654000
|
|
FORGETSPACE (SEGZERO.ADDRESSF); 38655000
|
|
END; 38656000
|
|
EXECUTESHEET ~ FALSE; 38657000
|
|
END ENDGAME; 38658000
|
|
SAVE PROCEDURE GETHEADER; 38659000
|
|
BEGIN COMMENT GETHEADER PRESUMES NAMEPOINTER HAS BEEN INITIAL-38660000
|
|
IZED TO POINT AT A NAME STRING. SEGMENT ZERO 38661000
|
|
WILL BE MADE PRESENT (BY PRESENCE BIT) AND 38662000
|
|
ENTRIES APPROPRIATE TO THE SHEETQ ARE MADE. 38663000
|
|
SEGZERO IS EVENTUALLY PLACED IN THE SHEETQ.; 38664000
|
|
WORD ARRAY NAMEPOINTERW = NAMEPOINTER [*]; 38665000
|
|
WORD ARRAY SEGZEROW = SEGZERO [*]; 38666000
|
|
REAL ARRAY HEADER =HEADERW [*]; 38667000
|
|
DEFINE 38668000
|
|
ARGUMENT = 0#, 38669000
|
|
LOCKER = FALSE #; 38670000
|
|
IF T ~ DIRECTORYSEARCH (NAMEPOINTER, ARGUMENT, LOCKER) < 0 38671000
|
|
THEN CONTROLCARDERROR (4) 38672000
|
|
ELSE HEADERW ~ DISKFILEHEADERS [T, *]; 38673000
|
|
T := @440; 38674000
|
|
DISKWAIT(SEGZERO, -1, SIZE(SHEETQ), FIRSTROWADDRESS(HEADER), 38675000
|
|
T); 38676000
|
|
SEGZEROW[FPBDESCPLACE].TAG ~ DATADESC; 38677000
|
|
QUEUEPARAMETERS (SEGZERO); 38678000
|
|
PREVIOUSPROGRAM@(REFERENCE(SEGZERO)) ~ NULL; 38679000
|
|
MOMTOVECTOR (NAMEPOINTERW, SEGZERO, CODEFILENAMEDESCPLACE); 38680000
|
|
MOMTOVECTOR (HEADERW, SEGZERO, CODEFILEDESCPLACE); 38681000
|
|
SEGZERO.CBITF ~ 1; 38682000
|
|
EXIT; 38683000
|
|
END OF GETTING HEADER; 38684000
|
|
COMMENT CONTROL CARD STARTS HERE; 38685000
|
|
WORDDIVCHARSIZE ~ 48 DIV CHARSIZE; 38686000
|
|
IF 5 = IOCB.TAG 38687000
|
|
THEN BEGIN COMMENT AN IOCB; 38688000
|
|
SOURCEREFERENCE ~ AREADESC @(IOCB); 38689000
|
|
RESULT ~ MISC @ (IOCB); 38690000
|
|
CONTROLCARDCHECK; 38691000
|
|
CONTROLWORD ~ SOURCEAREA [0]; 38692000
|
|
FILEID ~ USER @(IOCB); 38693000
|
|
END 38694000
|
|
ELSE BEGIN COMMENT A UNIT NUMBER; 38695000
|
|
CONTROLWORD ~ 30"044"; 38696000
|
|
FILEID ~ 0 & USERL (SNR, STACK[SNR, PRIORITYPLACE], 38697000
|
|
UNITNO); 38698000
|
|
ACTION ~ 3"1001"; % VALIDITY - WAIT FOR MPX ON CM 38698100
|
|
COMMENT * * * * 38698900
|
|
ACTION ~ 3"3001"; % CC OR CM AND VALIDITY 38699000
|
|
TRACE (23); 38700000
|
|
NEWLIFE: 38701000
|
|
SEGZERO ~ SEGZEROWORD; 38702000
|
|
CONTROLCARDIO; 38703000
|
|
ACTION ~ 3"3011"; % SIM KLUDGE 38704000
|
|
END; 38705000
|
|
LIMIT ~ ORIGINALLIMIT ~ RESULT.RDMEMADDR|WORDDIVCHARSIZE + 38707000
|
|
RESULT.RDCHRCNT - 1; 38708000
|
|
SOURCE ~ ORIGINALSOURCE ~ POINTER(SOURCEAREA, 38709000
|
|
CHARSIZE) + WORDDIVCHARSIZE; 38710000
|
|
RESULT ~ RESERVED [0]; 38711000
|
|
ACCUMULATOR ~ RESERVED & DATADESCRIPTOR 38712000
|
|
(,,,,,0,,,ACCUMULATOR.LENGTHF); 38713000
|
|
ACCUMPOINTER ~ POINTER(ACCUMULATOR, CHARSIZE); 38714000
|
|
SCANNER; 38715000
|
|
WHILE CLASS = QUESTIONCLS 38716000
|
|
DO BEGIN 38717000
|
|
SCANNER; 38718000
|
|
IF RANGE (ALGOLCLS, COBOLCLS) 38719000
|
|
THEN BEGIN COMMENT A COMPILER PARAMETER; 38720000
|
|
SCANNER; 38721000
|
|
SEGZERO ~ PREDECESSOR; 38722000
|
|
END; 38723000
|
|
CASE RESERVECASE OF 38724000
|
|
BEGIN 38725000
|
|
CONTROLCARDERROR(0); 38726000
|
|
BEGIN 38727000
|
|
IF CLASS > ENDCLS THEN CONTROLCARDERROR(1);38728000
|
|
IF EXECUTESHEET THEN ENDGAME(SEGZERO); 38729000
|
|
CASE CLASS - RUNCLS OF 38730000
|
|
BEGIN % FIRST CARD CASE 38731000
|
|
BEGIN % RUN 138732000
|
|
GO EXECUTE; 38733000
|
|
END; % RUN 138734000
|
|
EXECUTE: BEGIN 38735000
|
|
SHEETENTERED ~ FALSE; 38736000
|
|
NAMEPOINTER ~ NAMES(EXECUTECLS); 38737000
|
|
GETHEADER; 38738000
|
|
SUCCESSOR ~ SEGZERO; 38739000
|
|
NATUREOFPROCESS(SEGZERO,EXECUTEJOB); 38740000
|
|
EXECUTESHEET ~ TRUE; 38741000
|
|
END; % EXECUTE 238742000
|
|
BEGIN % COMPILE 338743000
|
|
COMPILER ~ TRUE; 38744000
|
|
NAMEPOINTER ~ NAMES (COMPILECLS); 38745000
|
|
MOMTOVECTOR (WORD(NAMEPOINTER),SEGZERO,CODEFILENAMEDESCPLACE); 38746000
|
|
SUCCESSORSHEET ~ REFERENCE (SEGZERO); 38747000
|
|
READLOCK(0&DATADESCRIPTOR (), SEGZERO[FPBDESCPLACE]); 38748000
|
|
SEGZERO ~ SEGZEROWORD; 38749000
|
|
WHILE NOT RANGE (ALGOLCLS, COBOLCLS) DO SCANNER; 38750000
|
|
SOURCE ~ TSOURCE; 38751000
|
|
NAMEPOINTER ~ NAMES (COMPILECLS); 38752000
|
|
GETHEADER; 38753000
|
|
NEXTPROGRAM@(REFERENCE(SEGZERO)) ~ SUCCESSORSHEET; 38754000
|
|
PREDECESSOR ~ SEGZERO; 38755000
|
|
PREVIOUSPROGRAM@(SUCCESSORSHEET) ~ PREDECESSORSHEET; 38756000
|
|
FILECARD (SEGZERO, CARDACTION); 38757000
|
|
WHILE NOT RANGE (LIBRARYCLS, DISKCLS -1) 38758000
|
|
DO IF CLASS ! QUESTIONCLS AND NOT ENDOFRECORD 38759000
|
|
THEN SCANNER 38760000
|
|
ELSE CLASS ~ GOCLS; 38761000
|
|
CASE CLASS - LIBRARYCLS OF 38762000
|
|
BEGIN 38763000
|
|
BEGIN % COMPILE FOR LIBRARY 38764000
|
|
NATUREOFPROCESS (SEGZERO, COMPILETOLIBRARYJOB); 38765000
|
|
DO UNTIL SCANNER = QUESTIONCLS OR ENDOFRECORD; 38766000
|
|
NATUREOFPROCESS (SUCCESSOR, IF ENDOFRECORD 38767000
|
|
THEN COMPILETOLIBRARYJOB ELSE LIBRARYNGOJOB); 38768000
|
|
FILECARD (SEGZERO, CODEACTION); 38769000
|
|
END; 38770000
|
|
BEGIN % COMPILE FOR SYNTAX 38771000
|
|
NATUREOFPROCESS (SEGZERO, COMPILENSYNTAXJOB); 38772000
|
|
NATUREOFPROCESS (SUCCESSOR, COMPILENSYNTAXOBJECT); 38773000
|
|
END; 38774000
|
|
BEGIN % COMPILE AND GO 38775000
|
|
NATUREOFPROCESS(SEGZERO, COMPILENGOJOB); 38776000
|
|
NATUREOFPROCESS(SUCCESSOR,GOJOB); 38777000
|
|
FILECARD (SEGZERO, CODEACTION); 38778000
|
|
CLASS ~ QUESTIONCLS; 38779000
|
|
END; 38780000
|
|
END; 38781000
|
|
FIRSTPARAMETER@(SUCCESSORSHEET)~LASTPARAMETER@(SUCCESSORSHEET)~38782000
|
|
NULL; 38783000
|
|
EXECUTESHEET ~ TRUE; 38784000
|
|
WHILE CLASS !QUESTIONCLS AND NOT ENDOFRECORD DO SCANNER; 38785000
|
|
END; % COMPILE 338786000
|
|
BEGIN % REMOVE 438787000
|
|
END; % REMOVE 438788000
|
|
BEGIN % LOAD 538789000
|
|
LIBMAIN(NAMES(LOADCLS)+6); 38789100
|
|
END; % LOAD 538790000
|
|
BEGIN % DUMP 638791000
|
|
END; % DUMP 638792000
|
|
BEGIN % CHANGE 738793000
|
|
END; % CHANGE 738794000
|
|
BEGIN % DATA 838795000
|
|
LABELTYPE ~ 4; %%%%%%%%%%%%%%%% 38796000
|
|
DATA: IF NOT ENDOFRECORD 38797000
|
|
THEN UINFOW [FILEID.UNITNOF] ~ WORD (NAMES(DATACLS)); 38798000
|
|
UINFOP [FILEID.UNITNOF, 0] ~ 0 & LEBCNTRL 38799000
|
|
(1,,,,,1,LABELTYPE); 38800000
|
|
GO SUICIDE; 38801000
|
|
END; % DATA 838802000
|
|
BEGIN % USE 938803000
|
|
END; % USE 938804000
|
|
BEGIN % USER 1038805000
|
|
END; % USER 1038806000
|
|
BEGIN % RELEASE 1138807000
|
|
END; % RELEASE 1138808000
|
|
BEGIN % FREE 1238809000
|
|
END; % FREE 1238810000
|
|
BEGIN % PUBLIC 1338811000
|
|
END; % PUBLIC 1338812000
|
|
BEGIN % DATAB 1438813000
|
|
LABELTYPE ~ 3; %%%%%%%%%%%% 38814000
|
|
GO DATA; 38815000
|
|
END; % DATAB 1438816000
|
|
BEGIN % UNUSED 1538817000
|
|
END; % UNUSED 1538818000
|
|
BEGIN % UNUSED 1638819000
|
|
END; % UNUSED 1638820000
|
|
BEGIN % UNUSED 1738821000
|
|
END; % UNUSED 1738822000
|
|
BEGIN % UNUSED 1838823000
|
|
END; % UNUSED 1838824000
|
|
BEGIN % UNUSED 1938825000
|
|
END; % UNUSED 1938826000
|
|
BEGIN % UNUSED 2038827000
|
|
END; % UNUSED 2038828000
|
|
BEGIN % UNUSED 2138829000
|
|
END; % UNUSED 2138830000
|
|
BEGIN % UNUSED 2238831000
|
|
END; % UNUSED 2238832000
|
|
BEGIN % UNUSED 2338833000
|
|
END; % UNUSED 2338834000
|
|
BEGIN % END 2438835000
|
|
END; % END 2438836000
|
|
END OF FIRST CARD CASE; 38837000
|
|
END; 38838000
|
|
CASE CLASS - FILECLS OF 38839000
|
|
BEGIN % PARAMETER CARD CASE 38840000
|
|
BEGIN % FILE 3538841000
|
|
FILECARD(SEGZERO, LEQACTION); 38842000
|
|
END; % FILE 3538843000
|
|
BEGIN % PROCESS 3638844000
|
|
END; % PROCESS 3638845000
|
|
BEGIN % IO 3738846000
|
|
MYCOMMON ~ 38847000
|
|
SEGZERO [IOTIMEPLACE ] ~ GETANUMBER(TRUE); 38848000
|
|
END; % IO 3738849000
|
|
BEGIN % PRIORITY 3838850000
|
|
SEGZERO [PRIORITYPLACE ] ~ GETANUMBER(TRUE); 38851000
|
|
END; % PRIORITY 3838852000
|
|
BEGIN % COMMON 3938853000
|
|
SEGZERO [COMMONVALUEPLACE ] ~ GETANUMBER(TRUE); 38854000
|
|
END; % COMMON 3938855000
|
|
BEGIN % CORE 4038856000
|
|
SEGZERO [COREPLACE ] ~ GETANUMBER(TRUE); 38857000
|
|
END; % CORE 4038858000
|
|
BEGIN % STACK 4138859000
|
|
SEGZERO [STACKSIZEPLACE ] ~ GETANUMBER(TRUE); 38860000
|
|
END; % STACK 4138861000
|
|
BEGIN % UNUSED 4238862000
|
|
END; % UNUSED 4238863000
|
|
BEGIN % UNUSED 4338864000
|
|
END; % UNUSED 4338865000
|
|
BEGIN % UNUSED 4438866000
|
|
END; % UNUSED 4438867000
|
|
BEGIN % UNUSED 4538868000
|
|
END; % UNUSED 4538869000
|
|
BEGIN % UNUSED 4638870000
|
|
END; % UNUSED 4638871000
|
|
BEGIN % UNUSED 4738872000
|
|
END; % UNUSED 4738873000
|
|
BEGIN % UNUSED 4838874000
|
|
END; % UNUSED 4838875000
|
|
BEGIN % UNUSED 4938876000
|
|
END; % UNUSED 4938877000
|
|
BEGIN % UNUSED 5038878000
|
|
END; % UNUSED 5038879000
|
|
BEGIN % UNUSED 5138880000
|
|
END; % UNUSED 5138881000
|
|
BEGIN % ALGOL 5238882000
|
|
END; % ALGOL 5238883000
|
|
BEGIN % FORTRAN 5338884000
|
|
END; % FORTRAN 5338885000
|
|
BEGIN % ESPOL 5438886000
|
|
END; % ESPOL 5438887000
|
|
BEGIN % UNUSED 5538888000
|
|
END; % UNUSED 5538889000
|
|
BEGIN % UNUSED 5638890000
|
|
END; % UNUSED 5638891000
|
|
BEGIN % UNUSED 5738892000
|
|
END; % UNUSED 5738893000
|
|
BEGIN % UNUSED 5838894000
|
|
END; % UNUSED 5838895000
|
|
BEGIN % UNUSED 5938896000
|
|
END; % UNUSED 5938897000
|
|
BEGIN % UNUSED 6038898000
|
|
END; % UNUSED 6038899000
|
|
BEGIN % UNUSED 6138900000
|
|
END; % UNUSED 6138901000
|
|
BEGIN % UNUSED 6238902000
|
|
END; % UNUSED 6238903000
|
|
BEGIN % UNUSED 6338904000
|
|
END; % UNUSED 6338905000
|
|
BEGIN % UNUSED 6438906000
|
|
END; % UNUSED 6438907000
|
|
BEGIN % COBOL 6538908000
|
|
END; % COBOL 6538909000
|
|
END; % PARAMETER CARD CASE 38910000
|
|
END RESERVED CASE; 38911000
|
|
IF ENDOFRECORD AND NOT SHEETENTERED 38912000
|
|
THEN BEGIN 38913000
|
|
CONTROLCARDIO; 38914000
|
|
SCANNER; 38915000
|
|
END; 38916000
|
|
SEGZERO ~ SUCCESSOR; 38917000
|
|
END OF QUESTION CLASS WHILE; 38918000
|
|
NATURALDEATH: 38919000
|
|
IF SCANIN (0 & USTATUSWORD (UNITNO.VECTOR,,,)).WHICHUNIT = 1 38920000
|
|
THEN GO NEWLIFE; 38921000
|
|
SUICIDE: 38922000
|
|
UNIT [FILEID.UNITNOF].UNITASSIGNED ~ 0; 38923000
|
|
EXIT; 38924000
|
|
38925000
|
|
CCERROR: 38926000
|
|
GLOBALSTOP; 38927000
|
|
END CONTROL CARD; 38928000
|
|
SAVE PROCEDURE INITIATEIO(AREADESC,UNITWORD,USERIDNO); 40000000
|
|
VALUE AREADESC,UNITWORD,USERIDNO; 40001000
|
|
REAL UNITWORD; 40002000
|
|
REFERENCE AREADESC; 40003000
|
|
INTEGER USERIDNO; FORWARD; 40004000
|
|
SAVE PROCEDURE STARTIO(U); VALUE U; INTEGER U; 40005000
|
|
COMMENT STARTIO FIRST CHECKS FOR CHANNEL IF THE UNIT IS IN AN USABLE 40006000
|
|
STATE.IF CHANNEL IS AVAILABLE, IT CALLS INITIATEIO, OTHERWISE 40007000
|
|
IT INSERTS ENTRY INTO WAITCHANNEL QUEUE. 40008000
|
|
U -LOGICAL UNIT NO.; 40009000
|
|
BEGIN 40010000
|
|
INTEGER N, COMMENT N STORES UNIT IN PROCESS OR BUSY BITS; 40011000
|
|
MPXINDEX; COMMENT MULTIPLEXOR NO. FOR WAITCHANNELQUE 40012000
|
|
INDEX; 40013000
|
|
REAL X, COMMENT X CONTAINS UNIT TABLE ENTRY; 40014000
|
|
UNITWORD; COMMENT RESULT OF INTERROGATE I/O PATH FOR 40015000
|
|
UNIT; 40016000
|
|
REFERENCE IOCB; COMMENT POINTER TO ENTRY OF I/O QUEUE; 40017000
|
|
X~ UNIT[U]; 40018000
|
|
IF X.UNITSTATUS=0 THEN COMMENT CHECKING CURRENT STATE OF UNIT;40019000
|
|
IF FIRSTIO[U]!NULL THEN COMMENT MORE I/O TO BE DONE FOR UNIT; 40020000
|
|
BEGIN 40021000
|
|
UNITWORD~SCANIN(0&IOPATHWORD(U,X.UNITMPXD,X.UNITMPXI)); 40022000
|
|
IF BOOLEAN(UNITWORD) THEN 40023000
|
|
BEGIN 40024000
|
|
IOCB ~FIRSTIO[U]; 40025000
|
|
INITIATEIO(AREADESC @IOCB,UNITWORD,USER @(IOCB).IDNO); 40026000
|
|
N~3; COMMENT SET UNIT IN PROCESS BITS; 40027000
|
|
END ELSE 40028000
|
|
BEGIN COMMENT ENTER IN WAITCHANNELQUE; 40029000
|
|
MPXINDEX~UNITWORD.MPXDESIGNATOR DIV 2; 40030000
|
|
WAITCHANNELQUE[MPXINDEX]~WAITCHANNELQUE(UNITWORD); 40031000
|
|
N~4; COMMENT SET UNIT WAITING FOR CHANNEL BIT; 40032000
|
|
END; 40033000
|
|
UNIT[U].UCHANWAITORBUSY~N; 40034000
|
|
END; 40035000
|
|
END STARTIO; 40036000
|
|
SAVE PROCEDURE INITIATEIO(AREADESC,UNITWORD,USERIDNO); 40037000
|
|
VALUE AREADESC,UNITWORD,USERIDNO; 40038000
|
|
REAL UNITWORD; 40039000
|
|
REFERENCE AREADESC; 40040000
|
|
INTEGER USERIDNO; 40041000
|
|
COMMENT INITIATEIO INITIATES I/O AND INITIALIZES I/O TIME FOR THE USER40042000
|
|
IT ALSO CHECKS FOR THE UNIT TYPE AND UPDATES THE TRANSACTION 40043000
|
|
COUNTER APPROPRIATELY 40044000
|
|
AREADESC - DESCRIPTOR POINTING TO THE I/O CONTROL WORD WHICH 40045000
|
|
PRECEEDS I/O AREA 40046000
|
|
THIS AREA MUST BE NON-OVERLAYABLE AT THIS POINT. 40046100
|
|
SEE DISKWAIT OR WAITIO FOR EXAMPLES OF HOW TO 40046200
|
|
GUARENTEE THIS. 40046300
|
|
UNITWORD - CONTROL WORD FOR THE UNIT ON WHICH I/O IS TO BE 40047000
|
|
INITIATED. 40048000
|
|
USERIDNO - USER IDENTIFICATION NO. FOR BOOK-KEEPING.; 40049000
|
|
BEGIN 40050000
|
|
REAL IOCW ; COMMENT LOCATION FOR I/O CONTROL WORD; 40052000
|
|
INTEGER U, COMMENT CONTAINS LOGICAL UNIT NO.; 40053000
|
|
TYPE; COMMENT CONTAINS UNIT TYPE; 40054000
|
|
WORD ARRAY IOAREA[*]; 40055000
|
|
IOAREA~WORD(AREADESC); 40056000
|
|
IOCW ~ TAGZOT(IOAREA[0]); 40057000
|
|
IIO(IOAREA,UNITWORD); 40060000
|
|
TYPE~UNIT[U~UNITWORD.UNITNO].UNITTYPE; 40062000
|
|
IOTIME[U] ~ * - SCANIN(TIMEOFDAYWORD); 40062100
|
|
IF BOOLEAN(IOCW.IOTESTBIT) THEN EXIT; 40063000
|
|
IF MAGTAPE(TYPE) THEN 40064000
|
|
IF BOOLEAN(IOCW.IOBACKWARD) THEN 40065000
|
|
BEGIN COMMENT IOMEMINHIBIT BIT IS USED TO CHECK WHETHER UNIT 40066000
|
|
IS REWINDING; 40067000
|
|
IF NOT BOOLEAN(IOCW.IOMEMINHIBIT) THEN 40068000
|
|
TRANSACTION[U]~*-1; 40069000
|
|
EXIT; 40070000
|
|
END; 40071000
|
|
TRANSACTION[ U ]~ * + 1; 40072000
|
|
EXIT; 40073000
|
|
END INITIATEIO; 40074000
|
|
SAVE PROCEDURE IOREQUEST(IOCB); 40075000
|
|
VALUE IOCB; 40076000
|
|
REFERENCE IOCB; 40077000
|
|
COMMENT IOREQUEST QUEUES UP I/O IN IOQUE IF THIS IS THE ONLY ENTRY 40078000
|
|
IN QUEUE IT CALLS STARTIO 40079000
|
|
IOCB - DESCRIPTOR POINTING TO THE ENTRY BLOCK FOR I/O QUEUE 40080000
|
|
6 WORDS IN A BLOCK; 40081000
|
|
BEGIN 40082000
|
|
INTEGER U; COMMENT U CONTAINS LOGICAL UNIT NO; 40083000
|
|
U~USER @(IOCB).UNITNOF; 40084000
|
|
IF UNIT[U].UNITTYPE=0 THEN 40084010
|
|
BEGIN % INVALID UNIT 40084020
|
|
MISC @(IOCB)~REAL(NOT FALSE); 40084030
|
|
USER @(IOCB).USERIOFINISH~1; 40084040
|
|
CAUSE(EVNT @ IOCB); 40084050
|
|
END ELSE 40084060
|
|
BEGIN % GO AHEAD 40084080
|
|
MISC @ (IOCB).RDEXCEPTION := 0; 40084100
|
|
IOQUE[U] ~ IOCB; 40085000
|
|
IF NEXT(IOQUE,U)=NULL THEN STARTIO(U); COMMENT ONLY ONE 40086000
|
|
ENTRY IN IOQUE; 40087000
|
|
END; 40087500
|
|
END IOREQUEST; 40088000
|
|
SAVE REAL PROCEDURE WAITIO(ARRA, USER, IOERRORMASK); 40089000
|
|
VALUE USER, IOERRORMASK; 40090000
|
|
ARRAY ARRA[*]; 40091000
|
|
REAL USER, IOERRORMASK; 40092000
|
|
COMMENT: WAITIO BUILDS AN IOCB AND CALLS IOREQUEST PASSING A LOCAL 40093000
|
|
EVENT ON WHICH IT WAITS. IF THERE ARE NO ERRORS OTHER 40094000
|
|
THAN THOSE ACCOUNTED FOR BY IOERRORMASK THEN WAITIO 40095000
|
|
RETURNS THE RESULT DESCRIPTOR. OTHERWISE IT CALLS 40096000
|
|
UNEXPECTEDIOERROR. 40097000
|
|
IOERRORMASK -ERROR MASK PROVIDED BY CALLER TO DO ITS OWN 40098000
|
|
ERROR-HANDLING 40099000
|
|
BUFFERLENGTH FIELD OF IOERRORMASK HAS A MASK 40100000
|
|
WHICH DETERMINES UNEXPECTED I/O ERROR. 40101000
|
|
USER -THIS IS THE USER WORD WHICH IS TO BE PUT IN THE IOCB. 40102000
|
|
IT MUST CONTAIN THE UNIT NUMBER IN THE UNIT FIELD. 40103000
|
|
ARRA -THIS IS AN UNINDEXED DATA DESCRIPTOR FOR THE IO AREA. 40104000
|
|
THE CALLER MUST HAVE STORED AN IOCW IN AREA[0]. ;40105000
|
|
BEGIN 40106000
|
|
REAL RD; 40107000
|
|
EVENT EVE; 40108000
|
|
REFERENCE ADAM; 40109000
|
|
WORD ARRAY AREA[*]; 40110000
|
|
INTEGER TRACTER;% USED TO SHUT OFF TRACE -- MAR 40112000
|
|
TRACTER~TRACE(0); 40113000
|
|
MAKEPRESENTANDSAVE(ARRA); %MAKE TEMPORARILY SAVE FOR I/O 40114000
|
|
AREA ~ ARRA & ARRAYDESCL(3, ARRA.LENGTHF - 1, *); 40116000
|
|
IOERRORMASK ~ REAL(NOT BOOLEAN(IOERRORMASK)); 40117000
|
|
ADAM ~ IOQUE(USER, -0, REFERENCE(AREA), EVE); 40118000
|
|
MISC@(ADAM).IOERRORMASKFIELD ~ IOERRORMASK; 40119000
|
|
IOREQUEST(ADAM); 40120000
|
|
WAIT(EVE); 40121000
|
|
IF BOOLEAN(WAITIO ~ RD ~ MISC@(ADAM)) THEN 40122000
|
|
IF REAL(BOOLEAN(RD.IOERRORMASKFIELD) AND 40123000
|
|
BOOLEAN(IOERRORMASK) AND 40124000
|
|
BOOLEAN(IOERRORMASK.BUFFERLENGTH)) !0 THEN 40125000
|
|
UNEXPIOERROR(ADAM,REAL(NOT BOOLEAN(IOERRORMASK. 40126000
|
|
IOERRORMASKFIELD))); 40127000
|
|
FORGETAREA(6,WORD(ADAM).ADDRESSF); 40128000
|
|
TURNOVERLAYKEY(ARRA.ADDRESSF);%RETURN TO PREVIOUS OLAY STATUS 40128100
|
|
TRACE(TRACTER); 40129000
|
|
RETURN(RD); 40129100
|
|
END WAITIO; 40130000
|
|
SAVE PROCEDURE NEWIO(MPXINDEX); VALUE MPXINDEX; 40131000
|
|
INTEGER MPXINDEX; 40132000
|
|
COMMENT NEWIO PICKS UP THE FIRST UNIT FOR GIVEN MPX WAITCHANNELQUE, 40133000
|
|
AND INTERROGATES FOR I/O PATH. IF PATH IS AVAILABLE IT PICKS 40134000
|
|
UP THE FIRST I/O FROM THE SPECIFIED UNIT I/O QUEUE. IT CALLS 40135000
|
|
INITIATEIO, DELINKS THE FIRST ENTRY FROM WAITCHANNELQUE AND 40136000
|
|
SETS UNIT BUSY BITS. 40137000
|
|
MPXINDEX -MULTIPLEXOR NO. FOR WAITCHANNELQUE INDEX; 40138000
|
|
BEGIN 40139000
|
|
INTEGER U; COMMENT U CONTAINS LOGICAL UNIT NO.; 40140000
|
|
REAL UNITWORD; COMMENT RESULT OF INTERROGATE I/O PATH FOR 40141000
|
|
UNIT; 40142000
|
|
REFERENCE IOCB; COMMENT POINTER TO ENTRY OF I/O QUEUE; 40143000
|
|
UNITWORD ~ SCANIN(UNTWORD @ FIRSTUNIT[MPXINDEX]); 40144000
|
|
IF BOOLEAN(UNITWORD) THEN 40145000
|
|
BEGIN 40146000
|
|
IOCB ~ FIRSTIO[U ~ UNITWORD.UNITNO]; 40147000
|
|
INITIATEIO(AREADESC @ IOCB ,UNITWORD,USER @(IOCB). IDNO); 40148000
|
|
COMMENT REMOVES ENTRY FROM TOP; 40149000
|
|
DELINK(WAITCHANNELQUE,FIRSTUNIT[MPXINDEX],MPXINDEX); 40150000
|
|
UNIT[U].UNITSTATUS ~3; COMMENT SETS UNIT BUSY BITS; 40151000
|
|
END; 40152000
|
|
END NEWIO; 40153000
|
|
SAVE PROCEDURE IOFINISH(MPXINDEX); VALUE MPXINDEX; INTEGER MPXINDEX;40154000
|
|
COMMENT IOFINISH READS A RESULT DESCRIPTOR FOR A SPECIFIED MULTIPLEXOR40155000
|
|
IT DOES ALL THE ERROR CHECKING. IF NO ERROR IS FOUND IT FIRES 40156000
|
|
UP NEW I/O WAITING FOR CHANNEL AND INSERTS I/O REQUEST FOR 40157000
|
|
THE UNIT ON WHICH I/O WAS FINISHED INTO A WAITCHANNELQUE. IF 40158000
|
|
NO UNIT IS WAITING FOR CHANNEL IT REMOVES FINISHED I/O ENTRY 40159000
|
|
FROM UNIT QUEUE AND IF QUEUE IS NOT EMPTY THEN CALLS STARTIO. 40160000
|
|
IF ERROR IS FOUND, IT SETS APPROPRIATE BITS IN THE UNIT TABLE.40161000
|
|
IF THERE IS A DISK ERROR, IT WILL TRY 10 TIMES TO RECOVER FROM40162000
|
|
THE ERROR. FOR OTHER ERRORS IT CALLS PROCESS IOERROR. IT KEEPS40163000
|
|
THE ERROR. FOR OTHER ERRORS IT CALLS PROCESS IOERR. IT KEEPS 40164000
|
|
TRACK OF I/O TIME AND FOR ERROR FREE OPERATION IT GIVES THE 40165000
|
|
WORD COUNT FOR READ OPERATION. 40166000
|
|
40167000
|
|
MPXINDEX -MULTIPLEXOR DESIGNATOR VALUE; 40168000
|
|
BEGIN 40169000
|
|
LABEL OK,NOWAIT,SETERRORBITS, RESETBUSYBITS,WRAPUP,DONEWIO, 40170000
|
|
UNITTYPETEST,EXIT; 40171000
|
|
INTEGER UNTTYPE, COMMENT UNIT TYPE; 40172000
|
|
U , COMMENT LOGICAL UNIT NO; 40173000
|
|
WORDCOUNT; COMMENT WORD COUNT FOR READ; 40174000
|
|
REAL CURRENTERROR, COMMENT ERROR FIELD OF CURRENT R. D.; 40175000
|
|
PASTERROR, COMMENT ERROR FIELD OF PAST R. D.; 40176000
|
|
UTABLEENTRY, COMMENT UNIT TABLE ENTRY; 40177000
|
|
RECDESC, COMMENT RECORD DESCRIPTOR SKELETON 40178000
|
|
IF NEGATIVE IT IS FOR MCP; 40179000
|
|
RD; COMMENT RESULT DESCRIPTOR; 40180000
|
|
WORD IOCW; COMMENT I/O CONTROL WORD; 40181000
|
|
REFERENCE IOCB; COMMENT TOP IOCB IN THE UNIT QUEUE; 40182000
|
|
BOOLEAN DELINKTOGGLE; % TRUE IF IOQUE ENTRY IS DELINKED 40183000
|
|
MONITOR RAJMONITOR(RD,IOCB); 40186000
|
|
DEFINE LINKINTOKEYINQ = 40187000
|
|
BEGIN 40188000
|
|
KEVNT @(IOCB) ~1; 40189000
|
|
BUZZCONTROL(KEYINQ); 40190000
|
|
KEYINQ~IOCB; 40191000
|
|
UNLOCK(KEYINQ);% TEMPORARY WHILE FORK MIGHT LOSE CONTROL 40192000
|
|
FORK(KEYIN,0); 40194000
|
|
END#,% 40194100
|
|
LINKINTOSPOUTQ=% 40195000
|
|
BEGIN% 40195100
|
|
BUZZCONTROL(SPOUTQ);% 40195200
|
|
SPOUTQ~IOCB;% 40195300
|
|
UNLOCK(SPOUTQ);% TEMPORARY 40195400
|
|
FORK(CONNSOUL,0);% 40195500
|
|
END#,% 40195590
|
|
ENDIOFDEF=0#;% 40195900
|
|
COMMENT READ THE RESULT DESCRIPTOR FOR A SPECIFIED MPX; 40196000
|
|
RD ~SCANIN(0&SCANINWORD(2,MPXINDEX,1)); 40197000
|
|
IF RD=0 THEN BEGIN GO EXIT; END; 40198000
|
|
MPXINDEX~FIRSTONE(MPXINDEX)-1; COMMENT TURNS MPXINDEX TO INDEX 40199000
|
|
FOR WAITCHANNELQUE; 40200000
|
|
U~ RD.RDUNITNO; 40201000
|
|
IOCB~FIRSTIO[U]; 40202000
|
|
UTABLEENTRY ~ UNIT[U]; 40203000
|
|
RECDESC~ MISC @ IOCB; 40204000
|
|
UNTTYPE~UTABLEENTRY.UNITTYPE; 40205000
|
|
IOCW~M[WORD(AREADESC @ IOCB)]; 40205200
|
|
IF MAGTAPE( UNTTYPE) AND NOT BOOLEAN(IOCW.IOTESTBIT) THEN 40205400
|
|
BEGIN % GET RID OF UNDESIRABLE BITS IN RD 40205450
|
|
IF RD.RDERROR=@2001 THEN % TURN OFF INCOMPLETE RECORD BIT 40205600
|
|
RD~REAL(BOOLEAN(RD) AND NOT BOOLEAN(@2001)); 40205800
|
|
IF BOOLEAN(RD.RDWLOOREOF) THEN 40205820
|
|
RD~REAL(BOOLEAN(RD)AND NOT BOOLEAN(4"C80")); 40205840
|
|
END; 40205860
|
|
IF BOOLEAN(CURRENTERROR := RD.RDERROR) OR 40206000
|
|
(PASTERROR~UTABLEENTRY.UNITERRORFIELD)!0 THEN 40207000
|
|
BEGIN COMMENT SOME KIND OF ERROR; 40208000
|
|
IF NOT BOOLEAN(USER@(IOCB).USERIOBIT) THEN COMMENT 40209000
|
|
MCP I/O OPERATION; 40210000
|
|
IF CURRENTERROR~ REAL(BOOLEAN(CURRENTERROR) AND 40211000
|
|
BOOLEAN(RECDESC .IOERRORMASKFIELD))=0 THEN 40212000
|
|
IF PASTERROR=0 THEN GO OK; COMMENT NO ERROR ON UNIT; 40213000
|
|
IF UTABLEENTRY.UNITTYPE !DISKFILE THEN GO SETERRORBITS; 40214000
|
|
COMMENT ERROR CHECKING FOR DISK UNIT; 40215000
|
|
IF CURRENTERROR=0 THEN COMMENT NO ERROR ON CURRENT R.D.; 40216000
|
|
IF NOT BOOLEAN(UTABLEENTRY.UNITRETRY) 40217000
|
|
THEN GO SETERRORBITS COMMENT IOERR WILL HANDLE IT; 40218000
|
|
ELSE BEGIN COMMENT ERROR ON MASS STORAGE RECOVERED; 40219000
|
|
PASTERROR~0; 40220000
|
|
UTABLEENTRY.UNITRETRY~0; 40220500
|
|
GO UNITTYPETEST; 40221000
|
|
END; 40222000
|
|
COMMENT ERROR ON CURRENT R.D.; 40223000
|
|
IF PASTERROR=0 THEN 40224000
|
|
BEGIN COMMENT ORIGINAL ERROR ON MASS STORAGE; 40225000
|
|
PASTERROR~1; 40226000
|
|
COMMENT TOTALUNITERROR~ * + 1; 40227000
|
|
UTABLEENTRY.UNITRETRY~1; 40228000
|
|
END ELSE 40229000
|
|
BEGIN COMMENT RECURRENT ERROR ON MASS STORAGE; 40230000
|
|
IF NOT BOOLEAN(UTABLEENTRY.UNITRETRY) THEN 40231000
|
|
GO SETERRORBITS; 40232000
|
|
IF (PASTERROR~* + 1)>10 THEN COMMENT THERE HAVE 40233000
|
|
BEEN 10 TRIES; 40234000
|
|
BEGIN 40235000
|
|
PASTERROR~0; 40236000
|
|
UTABLEENTRY.UNITRETRY ~0; 40237000
|
|
GO SETERRORBITS; 40238000
|
|
END; 40239000
|
|
END; 40240000
|
|
UTABLEENTRY.UNITERRORFIELD ~ PASTERROR; 40241000
|
|
UTABLEENTRY.UNITIOBUSY~0; 40242000
|
|
UNIT[U]~UTABLEENTRY; 40243000
|
|
STARTIO(U); 40244000
|
|
GO EXIT; 40245000
|
|
SETERRORBITS: 40246000
|
|
PASTERROR~ * + 1; 40247000
|
|
DELINKTOGGLE~TRUE; % PREVENTS DELINKING AT WRAPUP TIME 40248000
|
|
UTABLEENTRY.UNITERROR~1; 40249000
|
|
IF FIRSTUNIT[MPXINDEX]=NULL THEN 40251000
|
|
GO WRAPUP ELSE 40252000
|
|
GO DONEWIO; 40253000
|
|
END; 40254000
|
|
UNITTYPETEST: 40255000
|
|
COMMENT ****************** NEEDS PATCH FOR BUFFERED PRINTER; 40256000
|
|
OK: COMMENT CHECK WHETHER YOU CAN START NEW I/O ON SAME UNIT; 40257000
|
|
UTABLEENTRY.UNITIOBUSY~0; 40258000
|
|
UNIT[U]~UTABLEENTRY; 40259000
|
|
IF FIRSTUNIT[MPXINDEX]=NULL THEN 40260000
|
|
NOWAIT: COMMENT NO UNIT WAITING FOR CHANNEL; 40261000
|
|
BEGIN 40262000
|
|
DELINK(IOQUE,FIRSTIO[U],U); 40263000
|
|
DELINKTOGGLE~TRUE; 40264000
|
|
IF FIRSTIO[U]!NULL THEN 40265000
|
|
STARTIO(U) ELSE 40266000
|
|
RESETBUSYBITS: 40267000
|
|
UTABLEENTRY.UNITIOBUSY~0; 40268000
|
|
GO WRAPUP; 40269000
|
|
END; 40270000
|
|
DONEWIO: COMMENT DO NEW I/O FOR UNIT WAITING FOR CHANNEL; 40271000
|
|
NEWIO(MPXINDEX); 40272000
|
|
IF PASTERROR!0 THEN GO WRAPUP; 40273000
|
|
IF NEXT(IOQUE,U)=NULL THEN GO RESETBUSYBITS; 40274000
|
|
WAITCHANNELQUE[MPXINDEX]~ 40275000
|
|
WAITCHANNELQUE(0&IOPATHWORD(U,UTABLEENTRY.UNITMPXD, 40276000
|
|
UTABLEENTRY.UNITMPXI)); 40277000
|
|
UTABLEENTRY.UCHANWAIT~1; 40278000
|
|
WRAPUP: 40279000
|
|
COMMENT CLOCK THE OPERATION OFF 40280000
|
|
IOTIME[USER @ (IOCB).IDNO]~ * + SCANIN(TIMEOFDAYWORD); 40281000
|
|
IF CURRENTERROR=0 AND 40282000
|
|
(NOT DELINKTOGGLE) THEN DELINK(IOQUE,FIRSTIO[U],U); 40283000
|
|
UTABLEENTRY.UNITERRORFIELD~ PASTERROR; 40284000
|
|
USER @(IOCB).USERIOFINISH~1; 40284500
|
|
UNIT[U]~UTABLEENTRY; 40285000
|
|
IF BOOLEAN(IOCW.IOREADBIT) THEN COMMENT READ OPERATION; 40287000
|
|
BEGIN % COMPUTING NO OF WORDS READ 40288000
|
|
WORDCOUNT ~ABS(RD.RDMEMADDR- 40289000
|
|
((AREADESC@(IOCB)).ADDRESSF+1)); 40290000
|
|
IF ( UNTTYPE=MAGTAPE1 OR UNTTYPE=MAGTAPCLUSTER1) AND 40291000
|
|
NOT BOOLEAN(IOCW.IOBACKWARD) THEN 40292000
|
|
RD.RDCHRCNT~RD.RDCHRCNT-1; 40293000
|
|
RD.WORDCOUNTF~WORDCOUNT; 40299000
|
|
END; 40300000
|
|
IF CURRENTERROR!0 AND PASTERROR=1 THEN 40301000
|
|
BEGIN % ERROR FOR THE FIRST TIME FOR THIS I/O 40302000
|
|
USER@(IOCB).IOERRORRECOVERY~1; 40303000
|
|
FORK(IOERROR,RD); 40304000
|
|
GO EXIT; 40305000
|
|
END; 40309000
|
|
40310000
|
|
MISC @ ( IOCB ) ~ RD; 40311000
|
|
IF UNTTYPE=CONN THEN% 40312000
|
|
IF INPUT(IOCW) THEN LINKINTOKEYINQ% 40312100
|
|
ELSE IF (SEvNT@IOCB).TAG=1 THEN CAUSE(EVNT@IOCB)% 40312200
|
|
ELSE LINKINTOSPOUTQ% 40312300
|
|
ELSE% 40312400
|
|
CAUSE(EVNT @ IOCB); 40313000
|
|
EXIT: 40314000
|
|
END IOFINISH; 40315000
|
|
PROCEDURE STATUS (COUNT); INTEGER COUNT; % *** NOTE PARAMETER 40316000
|
|
COMMENT STATUS INTERROGATES ALL THE PERIPHERAL UNITS. IT COMPARES THE 40317000
|
|
NEWSTATUS WITH OLDSTATUS AND NOTES STATUS CHANGE CORRESPONDING40318000
|
|
TO EACH UNIT. IT CHECKS CURRENT STATE OF THE UNIT TO DETERMINE40319000
|
|
WHAT SHOULD BE DONE.IF A UNIT GOES NOT READY IT SETS 40320000
|
|
UNITNOTREADY IN UNIT TABLE. IF UNIT GOES READY IT RESETS 40321000
|
|
UNITNOTREADY. IF A UNIT WAS A USER AND THEN WENT READY, 40322000
|
|
IT CALLS STARTIO. 40323000
|
|
40324000
|
|
IF AN UNASSIGNED UNIT GOES READY, STATUS BRANCHES ON UNIT TYPE:40325000
|
|
RIATE ACTION ON THE RESULT. 40328000
|
|
FOR CARD READER IT CALLS INDEPENDENTRUNNER TO RUN CONTROLCARD 40329000
|
|
PROCESS AND MARKS UINFO TABLE APPROPRIATELY. 40330000
|
|
40331000
|
|
FOR TAPE, STATUS CALLS READALABEL; 40332000
|
|
BEGIN 40333000
|
|
REAL BITNO, % BIT # IN STATUS FIELD(32:32) 40334000
|
|
VECTORNO, % STATUS VECTOR # 40335000
|
|
U, % LOGICAL UNIT # 40336000
|
|
NRDLBLP, % # OF READALABEL PROCESSES 40337000
|
|
TEMP, % TEMPORARY 40337010
|
|
UNT; % UNIT TABLE ENTRY FOR UNIT[U] 40337020
|
|
40338000
|
|
BOOLEAN NEWSTATUS, % RESULT OF INTERROGATE 40339000
|
|
OLDSTATUS, % OLD STATUS OF CURRENT VECTOR 40340000
|
|
STATUSMASK, % TO MASK OUT UNITS ALREADY NOTED40341000
|
|
SAVESTATUS, % USED TO CONTROL READALABEL 40342000
|
|
BITWORD; % RELEVANT BIT # IN NEWSTATUS 40343000
|
|
LAYOUT BITSETL(BITNO:1~1); 40344000
|
|
LABEL FILENOTREADY,ENDOFREADY,SCRATCH,READALABEL2; 40350000
|
|
LABEL ENDOFUNIT,HR,PRG,UFU; 40351000
|
|
INTEGER STATEUS ; % *** FOR MONITOR ONLY 40352000
|
|
MONITOR JACKMONITOR(STATEUS); 40353000
|
|
MONITOR BOBMONITOR(NEWSTATUS,OLDSTATUS); 40353010
|
|
LABEL L;L:IF SIMULATING THEN BEGIN DISALLOW;SETINTERVALTIMER;PAUSE END; 40354000
|
|
STATEUS~STATEUS; % *** FOR MONITOR ONLY 40355000
|
|
40356000
|
|
VECTORNO~-1; 40357000
|
|
WHILE VECTORNO~VECTORNO+1{MAXVECTORNO 40358000
|
|
DO 40359000
|
|
BEGIN 40360000
|
|
OLDSTATUS~OLDSTATUSWORD[VECTORNO]; 40361000
|
|
% KLUDGE 40362000
|
|
OLDSTATUS~OLDSTATUS OR TRUE; 40363000
|
|
STATUSMASK~FALSE; 40364000
|
|
SAVESTATUS~BOOLEAN(REAL(NOT FALSE)); 40365000
|
|
WHILE REAL((NEWSTATUS~BOOLEAN(SCANIN(0& 40366000
|
|
USTATUSWORD(VECTORNO,,,)))OR STATUSMASK)AND SAVESTATUS) 40367000
|
|
! REAL(OLDSTATUS) 40368000
|
|
DO 40369000
|
|
BEGIN 40370000
|
|
U~VECTORNO|32+((BITNO~ 40371000
|
|
FIRSTONE(REAL(NEWSTATUS EQV NOT OLDSTATUS))-1)-1); 40372000
|
|
IF U>MAXUNIT THEN GO TO UFU; 40373000
|
|
WHILE BOOLEAN(UNT~READLOCK(1,UNIT[U])) DO; 40374000
|
|
40375000
|
|
BITWORD~FALSE&BITSETL(); 40376000
|
|
IF REAL(NEWSTATUS)<REAL(OLDSTATUS) THEN 40377000
|
|
BEGIN %%%%%%%%%%%%%%%%%%%%% UNIT NOT READY 40378000
|
|
OLDSTATUS~OLDSTATUS AND NOT BITWORD; 40379000
|
|
IF UNT.UNITTYPE=DISKFILE THEN 40380000
|
|
BEGIN 40381000
|
|
% CALL STEVE 40382000
|
|
END; 40383000
|
|
IF BOOLEAN(UNT.UNITASSIGNED)THEN 40384000
|
|
BEGIN % USER 40385000
|
|
IF NOT BOOLEAN(UNT.UINREWIND) THEN 40386000
|
|
IF NOT BOOLEAN(UNT.UNITNOTREADY)THEN 40387000
|
|
BEGIN 40388000
|
|
NOTREADYMSG(UNT);% 40389000
|
|
UNT.UNITNOTREADY~1; 40390000
|
|
END; 40391000
|
|
% CLOSED NO REWIND 40392000
|
|
END ELSE 40393000
|
|
% NO USER 40394000
|
|
BEGIN 40395000
|
|
UNT.ULOCKED~0; 40396000
|
|
FILENOTREADY: 40397000
|
|
UNT.UERRORSTATUSBITS~0; 40398000
|
|
UNT.UNITNOTREADY~1; 40399000
|
|
IF UINFOW[U].TAG!0 THEN 40400000
|
|
BEGIN 40401000
|
|
FORGETSPACE(UINFOW[U].ADDRESSF); 40402000
|
|
UINFOW[U]~0; 40403000
|
|
END; 40404000
|
|
END; 40405000
|
|
UNIT[U]~UNT; 40406000
|
|
STATUSMASK~STATUSMASK AND NOT BITWORD; 40407000
|
|
END ELSE 40408000
|
|
BEGIN %%%%%%%%%%%%%%%%%%%%% UNIT READY 40409000
|
|
OLDSTATUS~OLDSTATUS OR BITWORD; 40410000
|
|
UNT.UNITNOTREADY~0; 40411000
|
|
40412000
|
|
IF BOOLEAN(UNT.UNITASSIGNED) THEN 40413000
|
|
BEGIN % USER 40414000
|
|
STATUSMASK~STATUSMASK OR BITWORD; 40415000
|
|
40416000
|
|
UNT.UINREWIND~0; 40417000
|
|
UNIT[U]~UNT; 40418000
|
|
STARTIO(U); 40419000
|
|
GO TO ENDOFUNIT 40420000
|
|
END; 40421000
|
|
% UNIT NOT ASSIGNED 40422000
|
|
IF BOOLEAN(UNT.UINREWIND) THEN 40423000
|
|
IF BOOLEAN(UNT.ULOCKED) OR 40424000
|
|
BOOLEAN(UNT.USAVED) THEN 40425000
|
|
BEGIN 40426000
|
|
UNT.UINREWIND~0; 40427000
|
|
HR: 40428000
|
|
IF BOOLEAN(UNT.USAVED)THEN BITWORD~FALSE; 40429000
|
|
GO TO FILENOTREADY 40430000
|
|
END ELSE 40431000
|
|
IF BOOLEAN(UNT.UTOBEPURGED) THEN 40432000
|
|
BEGIN % PURGE THE FILE 40433000
|
|
UNT.UINREWIND~0; 40434000
|
|
PRG: 40435000
|
|
UNT.UTOBEPURGED~1; 40436000
|
|
WHILE BOOLEAN(TEMP~READLOCK(1,PRGT)) DO; 40437000
|
|
IF TEMP>0 THEN PRGT~TEMP+2 ELSE 40438000
|
|
BEGIN 40439000
|
|
PRGT~2; 40440000
|
|
FORK(PURGIT,U); 40441000
|
|
END; 40442000
|
|
END ELSE 40443000
|
|
BEGIN 40443010
|
|
UNT.UINREWIND~0; 40444000
|
|
IF BOOLEAN(UNT.ULABELLED) OR 40444010
|
|
BOOLEAN(UNT.USCRATCH)THEN GO ENDOFREADY; 40444020
|
|
END; 40444030
|
|
IF BOOLEAN(UNT.USAVED) THEN GO TO ENDOFREADY; 40445000
|
|
IF BOOLEAN(UNT.ULOCKED)THEN GO FILENOTREADY; 40446000
|
|
IF BOOLEAN(UNT.UTOBEPURGED)THEN GO TO PRG; 40447000
|
|
STATUSMASK~STATUSMASK OR BITWORD; 40448000
|
|
CASE UNT.UNITTYPE OF 40449000
|
|
BEGIN %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 40450000
|
|
BEGIN % NO UNIT 0 40451000
|
|
UFU: 40452000
|
|
UFUMSG(UNT);% 40453000
|
|
OLDSTATUS~OLDSTATUS AND NOT BITWORD; 40454000
|
|
STATUSMASK~STATUSMASK AND NOT BITWORD; 40455000
|
|
UNT.UNITNOTREADY~0; 40456000
|
|
IF U{MAXUNIT THEN UNIT[U]~UNT; 40457000
|
|
END; 40458000
|
|
BEGIN % DISK FILE 1 40459000
|
|
% CALL STEVE 40460000
|
|
END; 40461000
|
|
BEGIN % SNGL LINE CNTL 2 40462000
|
|
% CALL MIKE -- UNIT WENT WRITE READY 40462100
|
|
END; 40468000
|
|
; % UNASSIGNED 3 40469000
|
|
BEGIN % PAPER TAPE RDR 4 40470000
|
|
UNT.ULABELLED~1; 40471000
|
|
END; 40472000
|
|
40473000
|
|
40474000
|
|
BEGIN % PAPER TAPE PCH 5 40475000
|
|
SCRATCH: 40476000
|
|
UNT.UERRORSTATUSBITS~0; 40477000
|
|
UNT.UNITSTATE~0; 40478000
|
|
UNT.USCRATCH~1; 40479000
|
|
IF UINFOW[U].TAG!0 THEN 40480000
|
|
BEGIN 40481000
|
|
FORGETSPACE(UINFOW[U].ADDRESSF); 40482000
|
|
UINFOW[U]~0; 40483000
|
|
END; 40484000
|
|
% CHECK FOR BACKUP MESAGE PENDING 40485000
|
|
END; 40486000
|
|
40487000
|
|
GO TO SCRATCH; % LINE PRINTER I 6 40488000
|
|
GO TO SCRATCH; % LINE PRNTER II 7 40489000
|
|
40490000
|
|
; % UNASSIGNED 8 40491000
|
|
BEGIN % CARD READER 9 40492000
|
|
UNT.UNITASSIGNED~1; 40493000
|
|
UNIT[U]~UNT; 40494000
|
|
STATUSMASK~STATUSMASK OR BITWORD; 40495000
|
|
FORK(CONTROLCARD,U); 40496000
|
|
40497000
|
|
40498000
|
|
END; 40499000
|
|
GO TO SCRATCH; % CARD PUNCH I 10 40500000
|
|
GO TO SCRATCH; % CARD PUNCH II 11 40501000
|
|
; % UNASSIGNED 12 40502000
|
|
BEGIN % MAG TAPE I 13 40503000
|
|
TEMP~1; 40504000
|
|
READALABEL2: 40505000
|
|
WHILE BOOLEAN(NRDLBLP~READLOCK(1,RDLBLP))DO; 40506000
|
|
IF ONES(NRDLBLP)}MAXRDLBLP THEN 40507000
|
|
BEGIN 40508000
|
|
OLDSTATUS~OLDSTATUS AND NOT BITWORD; 40509000
|
|
SAVESTATUS~SAVESTATUS&BITSETL(0); 40510000
|
|
END ELSE 40511000
|
|
BEGIN 40512000
|
|
UNT.UERRORSTATUSBITS~0; 40513000
|
|
UNT.UNITSTATE~0; 40514000
|
|
UNT.UNITASSIGNED~1; 40515000
|
|
FORK(READALABEL,0&RDLBL(BITNO~FIRSTONE( 40516000
|
|
REAL(NOT BOOLEAN(NRDLBLP)).RF), 40517000
|
|
TEMP,U)); 40518000
|
|
NRDLBLP~*&BITSETL(); 40519000
|
|
END; 40520000
|