UNIVERSAL LNKLOW - LOW SEGMENT DATA MODULE FOR LINK SUBTTL D.M.NIXON/DMN/JLd/JBC/JNG/MCHC/DZN/PAH/PY/JBS/HD 18-Dec-85 ;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1974,1985,1986. ALL RIGHTS RESERVED. ; ; ;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==6 ;DEC VERSION DECMVR==0 ;DEC MINOR VERSION DECEVR==2375 ;DEC EDIT VERSION LOC 137 .JBVER:: 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. ;2046 Add DYGCNT to count typechecking blocks returned for GC. ;2053 Add ARGOVL and ARGFXP for argument checking across overlays. ;2063 Increase the value of .TLEN so that pathblock will fit in .TEMP. ;Start of Version 6 ;2200 Make FXSPTR a static array, add FXSBIT for the bits. ;2202 Remove NONZER and FTFRK2. ;2210 Allocate block to hold long symbol names ;2211 Add flag word for /NOJOBDAT switch processor ;2220 Add flags for long symbol support. ;2223 Add REDLO and REDHI to store psect names for /REDIRECT. ;2227 Add CPSECT to store base of list for /PSCOMMON. ;2237 Add PDMPLN for PDV memory map. ;2245 Add four words for PDV symbol table vector information. ;2247 Remove LOWLOC on TOPS-20, remove EXTFLG. ;2250 Another word for symbol table vector length calculation ;2254 Remove FBHPTR, add SEGPTR. ;2255 Remove LSTSYM, replace it with LSTGBL and LSTLCL. ;2257 Add buffer for ERSTR% string storage during JSYS errors. ;2270 Implement pagable TP area for typechecking blocks. ;2277 Add flag word for merging DDT. ;2300 Remove F40 and FTFORK code. ;2301 Add FILBLK to store filespec for typeout. ;2304 Remove 6 temp words defined by 2237, 2245, and 2250. ;2305 Add VALBLK to hold long symbol used as value. ;2306 Add DATIME, TOPS-20 style date/time, and NOPDMP for no PDV map. ;2306 Add NAMBLK to store a long title. ;2330 Put TOPS-20 locations under a TOPS-20 conditional. ;2356 Remove unnecessary TOPS20 conditional. ;2366 Add LC paging areas, TOPS-20 conditionals. ;2374 Add TPPTR pointer to TP window. ;2374 Do Copyright statements. SUBTTL STORAGE %LOW::! OFFSET::BLOCK 1 ;STARTING ADDRESS OFFSET TIMEON::BLOCK 1 ;INITIAL TIME FOR LOG FILE IFN TOPS20,< ;[2306] DATIME::BLOCK 1 ;[2306] ACTUAL (TOPS-20) DATE AND TIME >;[2306] IFN TOPS20 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==:100 ;[2063] 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 REDLO:: BLOCK 1 ;[2223] PSECT TO REDIRECT LOW SEGMENT TO REDHI:: BLOCK 1 ;[2223] PSECT TO REDIRECT HIGH SEGMENT TO 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] ... ENTLEN::BLOCK 1 ;[1764] LENGTH OF ENTRY VECTOR LSTLRV::BLOCK 1 ;[1466] LAST LEFT RELOCATABLE FROM RB.1 ROOTAB::BLOCK 1 ;[1257] HIGHEST ABSOLUTE LOCATION IN ROOT NODE NOCMX:: BLOCK 1 ;[1262] LNKCMX already printed switch 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 TPGCNT::BLOCK 1 ;[2270] Count for garbage collection TPPTR::BLOCK 1 ;[2374] Pointer to the PT window IFN TOPS20,< ;[2330] ERRJSY::BLOCK +1 ;[2257] BUFFER LARGE ENOUGH FOR LONGEST ERSTR% GETDDT::BLOCK 1 ;[2277] FLAG TO MERGE DDT LATER FILBLK::BLOCK FILSIZ ;[2301] BLOCK OF MEMORY FOR JFNS% >;[2330] END IFN TOPS20 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 MAXSEC ;[2200] Section fixup array IFN TOPS20,< FXSBIT::BLOCK 1 ;[2200] Bits to indicate section exists >;[2366] IFN TOPS20 ;[2366] 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) NAMBLK::BLOCK SYMSIZ ;[2326] long 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 LSTGBL::BLOCK 1 ;[2255] ADDRESS (REL) OF LAST GLOBAL SYMBOL LSTLCL::BLOCK 1 ;[2255] ADDRESS (REL) OF LAST LOCAL SYMBOL ;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 ;[2254] PTR TO CURRENT NAME IN LS AREA SEGPTR::BLOCK 1 ;[2254] PTR TO SEG RELOC INFO FOR CURRENT PROG 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. SYMBLK::BLOCK SYMSIZ ;[2210] LONG SYMBOL NAME VALBLK::BLOCK SYMSIZ ;[2305] CPSECT::BLOCK 1 ;[2227] 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 ;[2366] THE LC MAP CONSISTS OF 1024 HALFWORD ENTRIES, EACH OF WHICH ;[2366] CONTAINS THE STARTING BLOCK OF A 64 DISK PAGE AREA IN THE ;[2366] LC OVERFLOW FILE. IFE TOPS20,< ;[2366] LC MAP FOR TOPS-10 LC.UM::BLOCK 1 ;[2366] HIGHEST BLOCK MAPPED LC.UP::BLOCK 1 ;[2366] HIGHEST PHYSICAL BLOCK IN FILE LC.MAP::BLOCK </<.DBS*.LMS>>/2 ;[2366] THE MAP ITSELF >;[2366] IFE TOPS20 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 <.IODPR>,< CH'BUF::BLOCK 3 >> DEFINE XXXX (CH,NUM,MODE)< IFDIF <.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) ;[1401] IODATA ;[1401] GS.JF==GC.JF FX.JF==FC.JF LS.JF==SC.JF ;[1401] SC CHANNEL IS FOR LOCAL SYMBOLS AS.JF==AC.JF ;[1401] AC CHANNEL IS ALGOL SYMBOLS TP.JF==PC.JF ;[2270] PC CHANNEL IS ARGUMENT TYPECHECKING > ;[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 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 PASDFL::BLOCK 1 ;[1435] /DEBUG:PASCAL SEEN IFE TOPS20,< ;[2247] LOWLOC::BLOCK 1 ;[732] LOWEST LOCATION >;[2247] IFE TOPS20 SYMSEG::BLOCK 1 ;SEGMENT TO SAVE SYMBOLS IN SSGNAM::BLOCK 1 ;[715] PSECT NAME TO SAVE SYMBOLS IN SYMLMS::BLOCK 1 ;[2220] -1 IF SYMLIM IS SYMBOLIC 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 IFN TOPS20,< ;[2366] NOJBDA::BLOCK 1 ;[2211] -1 IF NO JOBDAT WANTED >;[2366] IFN TOPS20 SCNSYM::BLOCK 1 ;[2220] -1 IF PARSED A SYMBOL ;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, 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 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 ,< 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 ARGOVL::BLOCK 1 ;[2053] -1 if typechecking BG area ARGFXP::BLOCK 1 ;[2053] PTR to list of character fixups >;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 TOPS20,< ;[2202] THSTRT::BLOCK 2 ;[1450] POSSIBLE 30-BIT STARTING ADDRESS NOPDMP::BLOCK 1 ;[2306] -1 IF NO DEFAULT PDV MAP > ;[2202] IFN TOPS20 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 END