Google
 

Trailing-Edge - PDP-10 Archives - BB-4172H-BM - language-sources/lnklow.mac
There are 48 other files named lnklow.mac in the archive. Click here to see a list.
UNIVERSAL	LNKLOW - LOW SEGMENT DATA MODULE FOR LINK
SUBTTL	D.M.NIXON/DMN/JLd/JBC/JNG/MCHC/DZN/PAH/PY	6-Jan-83


;COPYRIGHT (C) 1974, 1983 BY
;DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
;
;
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
;ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH LICENSE AND WITH THE
;INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR ANY  OTHER
;COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
;OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF THE  SOFTWARE  IS  HEREBY
;TRANSFERRED.
;
;
;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT  NOTICE
;AND  SHOULD  NOT  BE  CONSTRUED  AS A COMMITMENT BY DIGITAL EQUIPMENT
;CORPORATION.
;
;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY  OF  ITS
;SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.


SEARCH		LNKPAR,OVRPAR,MACTEN,UUOSYM,SCNMAC
SALL


CUSTVR==0		;CUSTOMER VERSION
DECVER==5		;DEC VERSION
DECMVR==1		;DEC MINOR VERSION
DECEVR==2026		;DEC EDIT VERSION

	LOC	137
.JBVER::<BYTE(3)CUSTVR(9)DECVER(6)DECMVR(18)DECEVR>
	RELOC
SUBTTL	REVISION HISTORY


;START OF VERSION 1A
;44	ADD ASCIZ TEXT BLOCK
;45	REMOVE INSYMSW (HASH INITIAL SYMBOLS AT ASSEMBLY TIME)
;46	ADD KLUDGE FEATURE
;55	STORE .JBVER IN .RBVER (USE VERNUM)
;61	ADD PAGING INFO FOR FX AND GS
;65	TENEX SPEEDUP
;100	ADD NEW LABELS FOR LNKCOR
;104	ADD WORD FOR PTR TO FAIL BLOCK HEADERS
;106	ADD SOFTWARE ORIGIN OF LOW/HIGH SEGMENTS
;107	REPLACE KLUDGE WITH MIXFOR

;START OF VERSION 2
;135	ADD OVERLAY FACILITY
;137	ADD SUPPORT FOR PLOT PACKAGE
;170	CHANGE IODATA MACRO TO ALLOW DIFFERENT MODES FOR PLOT SWITCH
;176	CHANGE START BLOCK (7) TO ALLOW 2 WORDS
;207	MAKE OVERLAY OVERHEAD TABLES SMALLER

;START OF VERSION 2B
;225	ADD SUPPORT FOR PSECT (MACRO VERSION 51)
;262	Add a flag to indicate /LINK was seen
;277	Add marker for PDL to restore stack on LOOKUP error
;350	DELETE REFERENCES TO RSYM
;353	REMOVE EDIT 225
;400	Use UUOSYM definitions for SFD block offsets.
;411	Add the F.ASCK flag for LNKSCN

;START OF VERSION 2C
;457	Add LIBPRC to indicate processors seen in library.
;471	Add code for ALGOL debugging system.
;534	Add F.ASZR for list of specs this text block.
;557	Clean up the listing for release.

;START OF VERSION 3A
;560	Release on both TOPS-10 and TOPS-20 as LINK version 3A(560)
;START OF VERSION 4
;567	Delete PARVAL and PARPTR.
;600	Reserve LN.PLC locations for phased lowseg code.
;621	/SAVE and /SSAVE switches generate an EXE file.
;635	Add ARSIZE storage cell and TMAMAX word.
;650	Use VM on TOPS-10 if available.
;674	Allocate the SEGPTH block for GETSEG UUO path block.
;676	Add POPOFS word.
;706	Add RC.NTB contains permanent PSECT order for this load.
;715	Modify SYMSEG to take psect name.
;720	Allocate 3 words for doing pop loop when moving a block up in core.
;730	Add S.DEBG to save /DEBUG: file spec for /LINK.
;731	SEARCH MACTEN,UUOSYM instead of C.
;732	Add LOWLOC.
;755	Add TAB.ZE table.
;761	Add RC.SET for setting relocatable PSECT bit.
;765	Release on both TOPS-10 and TOPS-20 as LINK version 4(765)

;START OF VERSION 4A
;1101	Delete LSTLOD, add DTAFLG.
;1120	Delete CPUSN,  add OKCPUS.
;1144	Add DDTMAP to flag that DDT has been mapped in.
;1172	Add PATLOC.
;1174	Add NXTGLB, RTNPC and ERCHAN.
;1204	Add LSTRRV.
;1217	Clean up the listings for release.
;1220	Release on both TOPS-10 and TOPS-20 as version 4A(1220).

;START OF VERSION 4B
;1257	Add ROOTAB.
;1262	Add NOCMX.
;1264	Add .TEMP2
;1273	Add HP.S0, HP.S1, HP.S2 to fix problem with RC.HL(1) and RC.HL(2)
;1274	Add POLLEN to store length of Polish stack.
;1300	Add BADCORE flag for fixups.
;1301	Add TABCHR flag for error routines.
;1304	Add RC.MAP and SLOT2 for handling psects with twoseg.
;1306	Add MODTYP flag whether current module is twoseg or psect.

;START OF VERSION 5
;1400	Use OVRPAR.MAC for overlay file definitions, add OW table.
;1401	Add CHAN.JF table on TOPS-20 for native file handling.
;1402	Add RFLEN on TOPS-20 for REL file handling.
;1411	Add NONZER for loading into nonzero sections.
;1423	Add globals for program data vector storage.
;1434 	Add CURTYP global.
;1442	Add EXTFLG global.

;START OF VERSION 5.1
;1704	Add WRTDAT for writable link table.
;1747	add storage for global symbols use in maintenance edits at GLBBEG
;1754	Add SAVCOD and SAVP1 for T.1072 block code.
;1764	Add word for entry vector length
;1772	make conditionals around ENTLEN TOPS20 not FTFRK2
;2002	Add PPTYPE to specify type of overlay plot.
SUBTTL	STORAGE


%LOW::!
OFFSET::BLOCK	1		;STARTING ADDRESS OFFSET
TIMEON::BLOCK	1		;INITIAL TIME FOR LOG FILE
ZCOR::!				;START OF AREA TO ZERO ON INITIAL LOAD
UUOTRAP::BLOCK	2		;UUO TRAP HANDLER
ENTDDT:BLOCK	1		;DEBUG ENTRY POINT TO DDT
;TEMPORARY STORAGE SPACE - CAN BE USED ONLY BY INDEPENDENT MODULES
.TLEN==:60			;NUMBER OF WORDS
.TEMP::	BLOCK	.TLEN
.TEMP2::BLOCK	.TLEN		;[1264] SECOND TEMPORARY SPACE
GLBBEG::BLOCK	10		;[1747] STORAGE FOR GLOBAL SYMBOLS
GLBEND::			;USE IN MAINTENANCE PATCHES
EPDP::	BLOCK	LN.EPD+2	;EMERGENCY PUSH DOWN STACK
PDP::	BLOCK	1		;ORIGINAL NORMAL STACK POINTER
MARKWP::BLOCK	1		;STACK MARKER FOR LOOKUP
				; ERROR RESET IN LNKWLD
CPUHST::BLOCK	1		;HOST CPU, KA10=0, KI10=1
CPUTGT::BLOCK	1		;TARGET CPU, KA10=0, KI10=1
BATCH::	BLOCK	1		;-1 IF RUNNING UNDER BATCH
MYPPN::	BLOCK	1		;PROJECT-PROGRAMMER NUMBER OF THIS JOB
PTHARG::BLOCK	1		;ARG/FLAG FOR PATH UUO
PTHSCN::BLOCK	1		;SCAN SWITCH FOR PATH UUO
PTHDIR::BLOCK	LN.DRB		;ACTUAL PATH
PTHEND::BLOCK	1		;0 TO FORCE END
PTHLEN==.-PTHARG
RC.CUR::BLOCK	1		;CURRENT PSECT INDEX
RC.TB::	BLOCK	1		;POINTER TO RELOCATION TABLES(ORDERED BY CURRENT MODULE)
RC.NTB::BLOCK	1		;[706] POINTER TO  RELOCATION TABLES( PERMANENT ORDER FOR THIS LOAD)
RC.MAP::BLOCK	1		;[1304] POINTER PSECT NUMBERS MAP
SG.TB::	BLOCK	3		;PTR TO SEGMENT TABLES (.+1)
				;PTR TO LOW SEG DATA BLOCK
				;PTR TO HIGH SEG DATA BLOCK
SLOT2::	BLOCK	1		;[1304] PSECT WHEN SLOT 2 FOR TWOSEG
RC.NO::	BLOCK	1		;NUMBER OF RELOCATION COUNTERS ASSIGNED
RC.FRE::BLOCK	1		;NUMBER FREE IN TABLES
RC.SET::BLOCK	1		;[761] 0 IF CREATED BY /SET, -1 IF NOT
RELSIZ::BLOCK	1		;BYTE SIZE FOR NEW FILE RELOCATION
ASFILE::BLOCK	1		;LOCATION OF ALGOL .SYM FILE BLOCK
ASYM::	BLOCK	1		;NUMBER OF ALGOL SYMBOLS
HIORGN::BLOCK	1		;[650] ORIGIN OF HIGH SEG
IFN FTVM,<
PAGFUN::BLOCK	1		;[650] FUNCTION FOR PAGE. UUO
PAGCNT::BLOCK	1		;[650] COUNT OF AGS FOLLOWING
PAGBLK::BLOCK	LN.PAG		;[650] ARG FOR PAGE. UUO
USEVM::	BLOCK	1		;[650] -1 IF PAGE UUO'S AVAILABLE
> ;END IFN FTVM
POPOFS::BLOCK	1		;EXP OFFSET(T4) FOR POPLP ROUTINE
PATLOC::BLOCK	1		;[1172] LOCATION OF PAT.. AREA
LSTRRV::BLOCK	1		;[1204] LAST RIGHT RELOCATABLE VALUE FROM RB.1
CRTMP1::BLOCK	1		;[2024] HOLD AC FOR FAILED PMAP RETRIES
CRTMP2::BLOCK	1		;[2024] ...
CRTMP3::BLOCK	1		;[2024] ...
IFN TOPS20,<			;[1772]
ENTLEN::BLOCK	1		;[1764] LENGTH OF ENTRY VECTOR
>;[1772] IFN TOPS20
IFN FTFRK2,<
LSTLRV::BLOCK	1		;[1466] LAST LEFT RELOCATABLE FROM RB.1
> ;[1466] IFN FTFRK2
ROOTAB::BLOCK	1		;[1257] HIGHEST ABSOLUTE LOCATION IN ROOT NODE
NOCMX::	BLOCK 1			;[1262] LNKCMX already printed switch
NONZER::BLOCK 1			;[1411] NONZERO SECTION BEING LOADED
EXTFLG::BLOCK 1			;[1442] NONZERO SECTION HAS BEEN LOADED
BADCORE::BLOCK	1		;[1300] PSECT LIMIT EXCEEDED SWITCH
TABCHR::BLOCK	1		;[1301] -1 FOR TAB, 0 FOR SPACE
MODTYP::BLOCK	1		;[1306] PLUS IF TWOSEG, MINUS IF PSECT
PRGPDV::BLOCK	1		;[1423] PROGRAM DATA VECTOR STORAGE POINTER
PVPNAM::BLOCK	1		;[1423] NAME OF PSECT CONTAINING PDV
PVPSEG::BLOCK	1		;[1423] POINTER TO PSECT RELOC BLOCK
PVPLIM::BLOCK	1		;[1423] UPPER LIMIT TO WHICH PDV CAN GROW
COMPDT::BLOCK	1		;[1423] CREATION DATE OF FILE W/START ADDR
PDVADR::BLOCK	2		;[1423] ADDRESS OF PDV IN USER PROGRAM
				;[1423] 2ND WORD BEING SYMBOLIC
COERPT::BLOCK	1		;[1405] COERCION BLOCK PTR
NORBYT::BLOCK	1		;[1456] DON'T LOOK FOR ANOTHER RELOC BYTE
SUBTTL	PER SEGMENT DATA


;INDEXED BY R (R=1 FOR LOW SEG, R=2 FOR HIGH SEG)

;HIGHEST DATA LOCATION IN SEGMENT
HC.S0::	BLOCK	1		;USED FOR ABS DATA
HC.S1::	BLOCK	1		;HIGHEST LOC IN LOW SEG CONTAINING DATA
HC.S2::	BLOCK	1		;DITTO FOR HIGH SEG

;HIGHEST LOCATION IN SEGMENT (MAYBE BLANK)
HL.S0::	BLOCK	1
HL.S1::	BLOCK	1		;HIGHEST LOC IN LOW SEG
HL.S2::	BLOCK	1		;...

;SOFTWARE ORIGIN OF SEGMENT (FOR CURRENT MODULE)
SO.S0==:.-1
SO.S1::	BLOCK	1		;ORIGIN OF LOW SEGMENT (USUALLY 0)
SO.S2::	BLOCK	1		;ORIGIN OF HIGH SEGMENT (USUALLY 400000)

;LOWEST LOCATION IN SEGMENT
LL.S0==:.-1
LL.S1::	BLOCK	1		;LOWEST LOC IN LOW SEG (USUALLY 0)
LL.S2::	BLOCK	1		;LOWEST LOC IN HIGH SEG (USUALLY 400000)

;[1273] HIGHEST LOCATION IN PSECT (.LOW. OR .HIGH.)
HP.S0==:.-1			;[1273] .ABS. DOES NOT HAVE PROBLEM
HP.S1::	BLOCK 1			;[1273] HIGHEST LOCATION LOADED IN .LOW.
HP.S2:: BLOCK 1			;[1273] HIGHEST LOCATION LOADED IN .HIGH.

;FIXUP INFO POINTERS FOR DATA OUT ON DSK

FX.S0==:.-1			;SO WE CAN INDEX BY 1 OR 2

;CHAINED FIXUPS - STORE VALUE IN ALL PLACES ON CHAIN

FX.S1::	BLOCK	1		;LOW SEG CHAIN
FX.S2::	BLOCK	1		;HIGH SEG CHAIN
FS.SS::	BLOCK	1		;LOCAL SYMBOL FIXUP TABLES


FXT.S0::BLOCK	1		;TEMP POINTER TO HOLD CURRENT LIST
FXC.S0==:.-1
FXC.S1::BLOCK	1		;COUNT OF TOTAL NUMBER OF SUCH FIXUPS TO DO
FXC.S2::BLOCK	1
FXC.SS::BLOCK	1		;COUNT OF SYMBOL TABLE FIXUPS PENDING

FXSPTR::BLOCK 1			;[1450] SECTION FIXUP ARRAY
SUBTTL	PAGING DATA


TAB.LW::			;LOWEST ADDRESS IN WINDOW
DEFINE XXX (ABC)<
 LW.'ABC::BLOCK 1
>
AREAS
LW.S0==:LW.LC-1			;SO WE CAN INDEX BY R (1 OR 2)
LW.S1==:LW.S0+1			;START OF LOWSEG WINDOW
LW.S2==:LW.S0+2			;DITTO FOR HIGH SEG

TAB.UW:: 			;HIGHEST ADDRESS IN WINDOW
TAB.PG::!			;BETTER NMEMONICS IF JUST TESTING FOR PAGING OR NOT
DEFINE XXX (ABC)<
 PAG.'ABC::!
 UW.'ABC::BLOCK 1
>
AREAS
UW.S0==:UW.LC-1
UW.S1==:UW.S0+1			;END OF LOW SEG WINDOW
UW.S2==:UW.S0+2			;...

PAG.S0==:UW.S0
PAG.S1==:UW.S1			;FLAG TO SHOW PAGING (IF NON-ZERO)
PAG.S2==:UW.S2

TAB.HB::			;HIGHEST BLOCK IN USE ON DSK
DEFINE XXX (ABC)<
 HB.'ABC::BLOCK 1
>
AREAS
HB.S0==:HB.LC-1
HB.S1==:HB.S0+1			;HIGHEST BLOCK ALLOCATED (ON DSK)
HB.S2==:HB.S0+2			;SAME FOR HIGH SEG PAGED CODE
SUBTTL	SYMBOL TABLE DATA


SYMLEN::BLOCK	1		;ACTUAL WORDS COUNT REQUIRED FOR THIS ENTRY
SUBLEN::BLOCK	1		;LENGTH OF SUB BLOCKS
FXSPC::	BLOCK	1		;NUMBER OF WORDS IN FIXUP TO BE GARBAGE COLLECTED
POLSTK::BLOCK	1		;START OF POLISH PUSHDOWN STACK
POLLEN::BLOCK	1		;[1274] LENGTH OF POLISH STACK

;HASH TABLE SEARCH DATA
HT.PTR::BLOCK	1		;POINTER TO HASH TABLE
HT.PRM::BLOCK	1		;CURRENT HASH PRIME NUMBER
HASHSZ::BLOCK	1		;USER DESIRED HASH TABLE SIZE
HSPACE::BLOCK	1		;SPACE LEFT IN HASH TABLE (HSFACT% FULL)
HSFACT::BLOCK	1		;PERCENTAGE OF TABLE TO FILL BEFORE REHASHING
PRMPTR::BLOCK	1		;POINTER TO NEXT PRIME NUMBER
CORFUL::BLOCK	1		;-1 WHEN CORE UUO FAILS

FILNUM::BLOCK	1		;NUMBER OF FILE ON NON-DIRECTORY DEVICE
PRGNAM::BLOCK	1		;NAME OF CURRENT PROGRAM (FROM TITLE)
LODNAM::BLOCK	1		;NAME OF THIS CORE IMAGE WHEN SAVED
JOBNUM::BLOCK	1		;SIXBIT JOB#,,OCTAL JOB#
VERNUM::BLOCK	1		;VERSION NUMBER OF CORE IMAGE
LSTSYM::BLOCK	1		;ADDRESS (REL) OF LAST LOCAL SYMBOL (RH)
				;ADDRESS (REL) OF LAST GLOBAL SYMBOL (RH)
				;FOR ADDITIVE GLOBAL REQUESTS
PRGPTR::BLOCK	1		;POINTER TO LIST OF BLOCK TYPE 16 REQUESTS
LIBPTR::BLOCK	1		;SAME FOR TYPE 17
USEPTR::BLOCK	1		;PTR TO LIST OF USER LIBRARIES
CTYPE::	BLOCK	1		;COMPILER TYPE PRODUCING CURRENT CODE
PROCSN::BLOCK	1		;OR OF ALL PROCESSORS SEEN
LIBPRC::BLOCK	1		;PROCESSORS SEEN THIS LIBRARY PASS
MNTYPE::BLOCK	1		;PROCESSOR FOR MAIN PROG (STARTING ADDRESS)
MNSEEN::BLOCK	1		;OR OF ALL MAIN PROGRAMS SEEN
OKCPUS::BLOCK	1		;[1120] BITS ON FOR ALL CPUS PROG WILL RUN ON
COREFL::BLOCK	1		;-1 IF LNKCOR SHUFFLED USER CORE
NAMPTR::BLOCK	1		; (RH) POINTS TO CURRENT NAME IN LOCAL SYMBOL TABLE
				; (LH) POINTS TO SEG RELOCATION INFO FOR CURRENT PROG
FBHPTR::BLOCK	1		;POINTER TO FAIL BLOCK HEADERS IN LOCAL SYMBOL TABLE
EXCPTR::BLOCK	1		;POINTER TO MODULES TO EXCLUDE
INCPTR::BLOCK	1		;POINTER TO MODULES TO INCLUDE
ENTPTR::BLOCK	1		;POINTER TO TEMP STORAGE OF ENTRY NAMES
NXTGLB::BLOCK	1		;[1174] PUSHJ P,LOCN FOR /ENTRY, /U, ETC.
IFN .NWBLK,<
TTLADR::BLOCK	1		;RELATIVE ADDR OF TITLE IN DY FOR T.1003
> ;END IFN .NWBLK
IFE TOPS20,<
.PGSIZ::BLOCK	1		;CORE PAGE SIZE (1K OR 0.5K)
>
IFE FTSINGLE,<
NXTSEG::BLOCK	1		;POINTER TO GETSEG ROUTINE
LSTSEG::BLOCK	1		;DITTO
FSTSEG::BLOCK	1		;NAME OF INITIAL SEGMENT
SEGBLK::BLOCK	6		;DATA FOR GETSEG UUO
SEGPTH::BLOCK	.PTMAX		;PATH FOR GETSEG UUO
>
SUBTTL	AREA BOUNDS


;GENERATE SYMBOLS FOR AREAS
.ZZ==0	;START AT ZERO
DEFINE XXX (ABC)<
 ABC'.IX==:.ZZ
 .ZZ==.ZZ+1
>
AREAS
XXX.IX==:.ZZ-1
HG.TAB==:.ZZ-1			;HIGHEST AREA NUMBER ALLOWED
LN.TAB==:.ZZ			;LENGTH OF TABLE OF AREAS
PURGE .ZZ

TAB.LB::			;LOWER BOUND TABLE
DEFINE XXX (ABC)<
ABC'.LB::BLOCK	1>
AREAS

TAB.AB::			;ACTUAL BOUND TABLE
DEFINE XXX (ABC)<
ABC'.AB::BLOCK	1>
AREAS

TAB.UB::			;UPPER BOUND TABLE
DEFINE XXX (ABC)<
ABC'.UB::BLOCK	1>
AREAS

TAB.PT::			;POINTER TO NEXT FREE WORD TABLE
DEFINE XXX (ABC)<
ABC'.PT::BLOCK	1>
AREAS

TAB.FR::			;TABLE OF FREE SPACE IN CURRENT BLOCK
DEFINE XXX (ABC)<
ABC'.FR::BLOCK	1>
AREAS
TAB.NB::			;TABLE OF POINTERS FOR CORE ROUTINE
DEFINE XXX (ABC)<
ABC'.NB::BLOCK	1>
AREAS

TB.LNK::			;TABLE OF POINTERS TO LINKED FREE SPACE
DEFINE XXX (ABC)<
ABC'.LNK::BLOCK	1>
AREAS

TB.FSP::			;TABLE OF FREE SPACE IN LINKED LISTS
DEFINE XXX (ABC)<
ABC'.FSP::BLOCK	1>
AREAS

TAB.PP::			;IF -1 PROHIBIT PAGING OF THIS AREA
DEFINE XXX (ABC)<
ABC'.PP::BLOCK	1>
AREAS

TAB.ZE::			;[755] -1 IF FREE AREA NEED TO BE ZEROED
DEFINE XXX (ABC)<
ABC'.ZE::BLOCK	1>
AREAS


IFN TOPS20&FTFORK,<
TB.FRK::			;TABLE OF RELATIVE FORK HANDLES
DEFINE XXX (ABC)<
ABC'.FRK::BLOCK	1>
AREAS
>
SUBTTL	I/O DATA AREAS


H.ZER::!			;START OF AREA FOR INPUT PARAMETERS

OPENBL::BLOCK	LN.OPN		;OPEN BLOCK
FSTR==:OPENBL+I.DEV		;CURRENT FILE STRUCTURE NAME
OPNSZ==:OPENBL+I.DVZ		;STORE DEVSIZ INFO
OPNFF==:OPENBL+I.RNG		;ADDRESS OF BUFFER AREA
MDSCN==:OPENBL+I.SCN		;SPECIAL MOD WORD COPIED FROM SCAN

LBLOCK::BLOCK	LN.RIB		;ADDRESS OF LOOKUP BLOCK
RIBLEN==OPENBL+I.RIB		;EXTENDED LOOKUP BLOCK LENGTH
UFDPPN==:OPENBL+I.PPN		;PROJECT-PROGRAMMER NUMBER
FNAM==:OPENBL+I.NAM		;CURRENT FILE NAME
FEXT==:OPENBL+I.EXT		;CURRENT FILE EXTENSION
FCRE==:OPENBL+I.PRV		;CURRENT FILE CREATION WORD
FLEN==:OPENBL+I.SIZ		;CURRENT FILE LENGTH WORD
FVER==:OPENBL+I.VER		;CURRENT FILE VERSION WORD
FEST==:OPENBL+I.EST		;ESTIMATED LENGTH
FALC==:OPENBL+I.ALC		;ALLOCATED LENGTH
FDEV==:OPENBL+I.LDV		;LOGICAL DEVICE

;BLOCK TO HOLD PATH IF FULL PATH SPECIFIED
SFDARG::BLOCK	LN.SFD
SFDSCN==:SFDARG+.PTSWT
SFDDIR==:SFDARG+.PTPPN
SFDEND==:SFDARG+.PTMAX-1
H.EZER==:.-1
;I/O BUFFER HEADERS

DEFINE XXX (CH,NUM,MODE)<
 IFDIF <MODE><.IODPR>,<
  CH'BUF::BLOCK	3
>>
DEFINE XXXX (CH,NUM,MODE)<
 IFDIF <MODE><.IODPR>,<
  IFGE MODE,<
   SYN NUM'BUF,CH'BUF
>>>
IODATA
XBUF::	BLOCK	3		;FAKE BUFFER HEADER FOR INDEX LIBRARIES

DEFINE XXX (CH,NUM,MODE)<
 BLOCK 1
>
DEFINE XXXX (CH,NUM,MODE)<
 BLOCK 1
>
IO.PTR::IODATA			;1 WORD PER CHANNEL IN USE

IO.EMG::BLOCK	1		;EMERGENCY DATA BLOCK POINTER
				;USED WHEN DSK OVERFLOW  OCCURS

IFN TOPS20,<

CHAN.JF::			;[1401] FOR JFNS OF TEMP OVF FILES

DEFINE XXX (CHAN,NUM,MODE)<CHAN'.JF::BLOCK 1> ;[1401]

IODATA				;[1401]

IFN FTFRK2,<
GS.JF==GC.JF
FX.JF==FC.JF
> ;[1450] IFN FTFRK2
LS.JF==SC.JF			;[1401] SC CHANNEL IS FOR LOCAL SYMBOLS
AS.JF==AC.JF			;[1401] AC CHANNEL IS ALGOL SYMBOLS

> ;[1401] IFN TOPS20

PURGE	XXX,XXXX
SUBTTL	FILE SPECS


F.INZR::BLOCK	1		;POINTER TO START OF FILE SPEC
F.NXZR::BLOCK	1		;POINTER TO NEXT FILE SPEC STORAGE
F.WLZR::BLOCK	1		;USED BY WILD ( (F.INZR)+2 )
F.EDIT::BLOCK	1		; RH POINTER TO REST OF LIST IF EDITING A FILE SPEC
				; LH LOCAL FLAGS AT TIME OF ERROR (RH OF FL)
F.ASCI::BLOCK	1		;POINTER TO ASCIZ TEXT BLOCK FROM REL FILE
F.ASCC::BLOCK	1		;USED TO HOLD CHAR COUNT DURING TEXT READ
F.ASCK::BLOCK	1		;POINTER TO EXTRA KOMMAND FOR SCAN
F.ASZR::BLOCK	1		;SCAN BLOCKS THIS ASCII TEXT BLOCK
S.INZR::BLOCK	1		;SAVE F.INZR OVER /LINK
S.LHFL::BLOCK	1		;SAVE LH(FL) OVER /LINK
S.DEBG::BLOCK	1		;[730] SAVE /DEBUG FILE SPEC FOR /LINK
SWFLAG::BLOCK	1		;LINK TO SWITCHES SEEN
IO.CHN::BLOCK	1		;LAST I/O CHAN SEEN (FOR DEFERED SWITCHES)
IO.CHR::BLOCK	1		;DEVCHR OF IO.CHN
OSCANF::BLOCK	1		;-1 IF .OSCAN ALREADY CALLED
NULSPC::BLOCK	1		;-1 IF NOT A INPUT SPEC (SWITCHES ONLY, OR OUTPUT)

;INPUT GLOBAL DEFAULT AREA

G.ZER::
G.DEV::	BLOCK	1
G.NAM::	BLOCK	1
G.NAMM::BLOCK	1
G.EXT::	BLOCK	1
G.PROT::BLOCK	2
G.DIR::	BLOCK	1
G.DIRM::BLOCK	2*.FXLND-1
G.BFR::	BLOCK	1
G.SNC::	BLOCK	1
G.LZER==:.-G.ZER


;OUTPUT GLOBAL DEFAULTS
O.ZER::
O.DEV::	BLOCK	1
O.NAM::	BLOCK	1
O.NAMM::BLOCK	1
O.EXT::	BLOCK	1
O.PROT::BLOCK	2
O.DIR::	BLOCK	1
O.DIRM::BLOCK	2*.FXLND-1
O.BFR::	BLOCK	1
O.SNC::	BLOCK	1
O.LZER==:.-O.ZER
;FULL WORD SWITCHES

FLAGS::	BLOCK	1		;DEFAULT GLOBAL FLAGS (LH) OF FL ,, REMEMBER LOCAL FLAGS (RH) OF FL
MAXCOR::BLOCK	2		;MAXIMUM INCORE SIZE (LOW,HIGH)
RUNCOR::BLOCK	2		;SIZE OF JOB AT RUN TIME (LOW,HIGH)
RUNAME::BLOCK	1		;NAME FOR CORE IMAGE
SSNAME::BLOCK	1		;NAME FOR SAVE COMMAND
SSEXT::	BLOCK	1		;EXTENSION FOR SAVE/SSAVE COMMAND
EXEBLK::BLOCK	1		;EXE FILE BLOCK COUNT
EXEDIR::BLOCK	2		;POINTS TO THE EXE DIRETORY PAGE IN CORE
MAPCON::BLOCK	1		;CONTENTS OF MAP (FROM SWITCH)
MAPSW::	BLOCK	1		;WHEN MAP IS TO BE OUTPUT
EXECSW::BLOCK	1		;[1144] -1,,x IF /EXECUTE, x = ADDR TO START
DEBUGSW::BLOCK	1		;[1144] -1,,INDEX IF /DEBUG, 0,,INDEX IF /TEST
DDEBUG::BLOCK	1		;DEFAULT DEBUGGING AID
DDTMAP::BLOCK	1		;[1144] -1 IF DDT HAS BEEN MAPPED IN
FORLIB::BLOCK	1		;EITHER FORSE OR FOROTS
GOTO::	BLOCK	1		;GO TO TERMINATION ADDRESS
FRECOR::BLOCK	1		;FREE CORE TO BE KEPT DURING LOAD
SYMFRM::BLOCK	1		;-1 IF NEW, 0 IF OLD
NOSYMS::BLOCK	1		;-1 FOR NO SYMBOL TABLE REQUIRED
NOLIBS::BLOCK	1		;-1 FOR NO DEFAULT LIBRARIES
MIXFOR::BLOCK	1		;-1 IF /KLUDGE SWITCH SEEN
PASDFL::BLOCK	1		;[DMN] /DEBUG:PASCAL SEEN
LOWLOC::BLOCK	1		;[732] LOWEST LOCATION
SYMSEG::BLOCK	1		;SEGMENT TO SAVE SYMBOLS IN
SSGNAM::BLOCK	1		;[715] PSECT NAME TO SAVE SYMBOLS IN
SYMLIM::BLOCK	1		;[715] SYMBOL LIMIT(NEXT PSECT ORIGIN)
				;[727] BIT0 ON MEANS DEFAULT LIMIT--
				;[727] /SYMSEG & /UPTO MAY OVERRIDE IT.
OTSEG::	BLOCK	1		;SEGMENT TO PUT OTS IN 
SYMSRT::BLOCK	1		;HOW SYMBOL TABLE IS TO BE SORTED
MAPSRT::BLOCK	1		;HOW MAP IS TO BE SORTED

;LOG AND ERROR PARAMETERS
LOGLVL::BLOCK	1		;SWITCH VALUE FOR LOG FILE MESSAGES
ERRLVL::BLOCK	1		;SAME FOR TTY ERROR MESSAGES
SEVLVL::BLOCK	1		;FATAL ERROR CUTOFF
VERLVL::BLOCK	1		;VERBOSITY LEVEL
ERRCOD::BLOCK	1		;ERROR CODE FOR LAST ERROR
LOGTTY::BLOCK	1		;-1 IF LOG DEV IS TTY (USE TTCALLS)
LOGSUB::BLOCK	1		;POINTS TO SOSG LOG OUTPUT ROUTINE IN LOW SEG
TTYSUB::BLOCK	1		;DITTO FOR TTY (BUFFER FOR OUTCHR'S)
LOWSUB::BLOCK	1		;LOG SUB ,, TTY SUB ;INCASE NEEDED LATER
TTYBUF::BLOCK	3		;FAKE BUFFER HEADER FOR OUTPUT TTY
LINBUF::BLOCK	LN.CPL/5+1	;LINE BUFFER FOR ABOVE
RTNPC::	BLOCK	1		;[1174] ADDR OF LAST JMP .ETC. FOR RTN
ERCHAN::BLOCK	1		;[1174] CHANNEL FOR FILE-RELATED ERRORS
PRTMSG::BLOCK	1		;[1174] FLAG FOR HOW MUCH OF MESSAGE TO PRINT
NEGOFF==:400
BLCOMM::BLOCK	1		;SIZE OF BLANK COMMON
LOD37::	BLOCK	1		;OVERHEAD FOR COBDDT
OWNLNG::BLOCK	1		;ALGOL OWN LENGTH
%OWN::	BLOCK	1		;ALGOL OWN AREA POINTER
;VARLNG::BLOCK	1		;LVAR VARIABLE LENGTH
LINKTB::BLOCK	1		;POINTER TO LINK TABLE (TYPE 12)
				;NOTE THIS IS INDEXED BY W2 WHEN SETUP
T11FA::	BLOCK	1		;XWD LENGHT, RELATIVE ADD OF POLISH BLOCK
T11BP::	BLOCK	1		;BYTE POINTER TO FIXUP
SVSAT::	BLOCK	1		;NUMBER OF OPERANDS NEEDED
SVSAT1::BLOCK	1		;NUMBER STILL NEEDED
DTAFLG::BLOCK	1		;[1101] INPUT DEVICE IS DECtape
IFN TOPS20,
<RFLEN::BLOCK	1		;[1402] LENGTH OF CURRENT REL FILE>
LSTBLK::BLOCK	1		;INDEX - POINTER TO LAST BLOCK LOADED
SAVCOD::BLOCK	1		;[1754] SAVE 9-BIT SYMBOL CODE, INCASE OF ERROR
SAVP1::	BLOCK	1		;[1754] SAVE P1 FOR LONG SYMBOL COMPARE
SYMFLG::BLOCK	1		;ADDITIONAL SYMBOL FLAGS TO APPLY TO FIXUP SYMBOL
CURTYP::BLOCK	1		;[1434] CURRENT REL BLOCK TYPE BEING PROCESSED

IFN FTMANTIS,<
MANTP0::BLOCK	1		;MANTIS DATA INITIAL POINTER
MANTP::	BLOCK	1		;MANTIS DATA CURRENT POINTER
MANTC::	BLOCK	1		;MANTIS FREE SPACE POINTER
>
SAVEAC::BLOCK	20		;SAVE VARIOUS AC
				;SAVE ACS T1-T4 & P1 IN LNKLOG
				;SO WE CAN PASS ARGS IN ALL ACCS
				;SAVE AC0 AND P1-17 IN LNKERR
				;SO WE CAN RETURN
SUBTTL	PLOT DATA STORAGE


PLOTSW::BLOCK	1		;-1 IF PLOT WANTED
DEFINE KEYMAC (A,B)<
 IFIDN <A><PLT>,<
  IRP B,<
   B::	BLOCK	1
>>>
PLTTAB::!KEYWORDS

COMMENT	/
INCHES::BLOCK	1		;WIDTH IN INCHES
LEAVES::BLOCK	1		;NO. OF LEAVES
STEPS::	BLOCK	1		;NO. OF STEPS PER INCH.
/
PPTYPE::BLOCK	1		;[2002] PLOTTER TYPE
SUBTTL	OVERLAY DATA STORAGE


IFN FTOVERLAY,<

DI::	BLOCK	DI.LEN		;[1400] DIRECTORY FOR OVERLAY FILE
CS::	BLOCK	CS.LEN		;[1400] LINK CONTROL SECTION
ET::	BLOCK	ET.LEN		;[1400] EXTERNAL REFERENCE TABLE
;DATA REQUIRED FOR OVERLAYS
OVERLW::BLOCK	1		;TYPE OF OVERLAY
RGNNUM::BLOCK	1		;REGION NUMBER
RGNNAM::BLOCK	1		;REGION NAME
L.MAX::	BLOCK	1		;MAX LINK NO. WE CAN HANDLE IN TABLE
LNKTBL::BLOCK	1		;TABLE OF DISC ADDRESSES
OVLBLK::BLOCK	1		;HIGHEST BLOCK IN USE
BRNLEN::BLOCK	1		;AOBJN WORD FOR NO. OF LINKS IN CURRENT BRANCH
BRNTBL::BLOCK	1		;TABLE OF LINKS IN THIS BRANCH
BRNDSK::BLOCK	1		;PARALLEL TABLE OF LENGTH,,DSK ADDRESS
BG.SCH::BLOCK	1		;-1 IF ALLOWED TO SEARCH BG TABLES
EXTCNT::BLOCK	1		;COUNT OF MAX # OF EXTTABS SEEN
INTCNT::BLOCK	1		;SAME FOR INTTABS
LNKMAX::BLOCK	1		;HIGHEST LINK # SEEN
LNKNO.::BLOCK	1		;TEMP, USED TO HOLD CURRENT LINK NO.
BRNMAX::BLOCK	1		;MAX DEPTH OF BRANCH
ADDOVU::BLOCK	1		;ADDRESS OF .OVRLU ROUTINE
FSTPTR::BLOCK	1		;INITIAL PTR TO OVERLAY TREE
LSTPTR::BLOCK	1		;POINTER TO LAST LINK IN TREE
LNMPTR::BLOCK	1		;POINTER TO LIST OF LINK NAMES
RBGPTR::BLOCK	1		;RELOCATABLE BOUND GLOBAL PTR
BRNADD::BLOCK	1		;PARALLEL TABLE OF LINK#,,LOWEST ADDRESS
OVLOFF::BLOCK	1		;OFFSET IF BASE OF LINK IS NOT IN CORE
OVINEX::BLOCK	1		;PERMANENT INCLUDE/EXCLUDE  
LINKSEEN::BLOCK	1		;FLAG TO INDICATE /LINK PROCESSED:
				; -1 WHEN BEGIN PROCESSING /LINK
				;  0 WHEN BEGIN NEXT /NODE
ARSIZE::BLOCK	1		;[635] GLOBAL,,THIS LINK'S ARSIZE.
TMAMAX::BLOCK	1		;[635] BIGGEST TMA ERROR SEEN
WRTDAT::BLOCK	1		;[1704] PTR TO WRITABLE OVERLAY TABLE
>;END OF IFN FTOVERLAY
IFN FTOVERLAY,<
;NOTE THAT ALL MEMORY FROM HERE TO PH.ZZ **MUST** BE CONTIGUOUS!
PH::	BLOCK	PH.LEN		;[1400] PREAMBLE FOR EACH LINK
OV.S0==:.-1
OV.S1::	BLOCK	1		;COPY OF HC.S1,,HL.S1
OV.S2::	BLOCK	1		;COPY OF HC.S2,,HL.S2
PV.S0==:.-1
PV.S1::	BLOCK	1		;COPY OF OV.S1 AT START
PV.S2::	BLOCK	1		;COPY OF OV.S2 AT START
>;END OF IFN FTOVERLAY
OV1.Z0::!			;DATA TO CLEAR ON LNKOV1
GSYM::	BLOCK	1		;COUNT OF GLOBAL SYMBOLS
USYM::	BLOCK	1		;COUNT OF UNDEFINED (REQUESTED) GLOBALS
MSYM::	BLOCK	1		;COUNT OF MULTIPLY DEFINED GLOBALS
LSYM::	BLOCK	1		;COUNT OF SYMBOL WORDS (PLUS GLOBALS)
STADDR::BLOCK	2		;STARTING ADDRESS
IFN FTFRK2,<
THSTRT::BLOCK	2		;[1450] POSSIBLE 30-BIT STARTING ADDRESS
> ;[1450] IFN FTFRK2
STANAM::BLOCK	1		;ACTUAL PROG NAME CONTAINING IT
PRGNO::	BLOCK	1		;NUMBER OF PROGRAMS LOADED
PATSPC::BLOCK	1		;SPACE TO LEAVE BETWEEN CODE AND SYMBOLS

IFN FTOVERLAY,<
BSYM::	BLOCK	1		;NO. OF SYMBOLS COPIED FROM BOUND TABLES
SPACE::	BLOCK	1		;SPACE TO ALLOCATE FOR THIS LINK
OV1.ZE==:.-1			;LAST WORD CLEARED
PH.ZZ==:.-PH			;[1400] PER-LINK MEMORY FOR LINK'S USE

LNKNAM=:CS+CS.LNM		;[1400] LOGICAL NAME OF THIS LINK
SYN	BRNMAX,BRNPTR		;USED TO BUILD PATH
>
IFE FTSINGLE,<
PHAZLO::BLOCK	LN.PLC		;[600] BLOCK FOR PHASED LOWSEG CODE
> ;END IFE FTSINGLE

S.EZER=.-1
EZCOR==:.-1			;END OF AREA TO ZERO

SYN	GS.LB,NAMLOC
SUBTTL	THE END


	END