Trailing-Edge
-
PDP-10 Archives
-
bb-d868e-bm_tops20_v41_2020_dist_1of2
-
language-sources/begin.bli
There are 18 other files named begin.bli in the archive. Click here to see a list.
SWITCHES LIST;
!THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
! OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
!
!COPYRIGHT (C) 1972,1973,1974,1977,1978 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. 01754
!FILENAME: BEGIN.BLI
!DATE: 26 MARCH 1974
!AUTHOR: M. G. MANUGIAN/FLD/GJB
%4.02% GLOBAL BIND BEGIV=21; !MODULE VERSION NUMBER
!FUNCTION: COMMON PARAMETER FILE FOR ALL BLIS10 MODULES.
! THIS FILE, BEGIN.BLI, DEFINES A BLOCK WHICH MUST EMBRACE
! ANY REAL BLISS COMPILER CODE DURING THE BOOTSTRAPPING PROCESS.
!
! THIS FILE SHOULD BE CONCATINATED TO THE HEAD OF THE FILE
! CONTAINING THE ACTUAL BLISS CODE (AFTER ELIMINATION OF
! MACRO ETC), AND ITS COMPANION FILE END.BLI SHOULD BE
! CONCATINATED TO THE TAIL.
!
! THE FILE END.BLI CONTAINS THE END CORRESPONDING TO THE
! BLOCK BEGIN INTRODUCED IN THIS FILE.
!HERE ARE THE ROUTINES FOR THE COMPILER
!--------------------------------------
! THE FOLLOWING IS FROM H3CCL
EXTERNAL CCLINIT;
! THE FOLLOWING ARE FROM LEXAN
%2.9% EXTERNAL PUNT, RELEASESPACE, GETSPACE, LTINSERT, GETLITVAL, GETADDLIT, SEARCH,
LITLEXEME, STINSERT, BLOCKPURGE, SKAN, IDFIXER, IDFIXFS,
WRUND1, WRUND2, WRUND3, WRUND, SMACRO, EXPMCR, DOCOREUUO,
%2.34% DUMPMACRO, HASH, SCANNER, PURGENSYMS, GSTINSERT,SRUND;
! THE FOLLOWING ARE FROM MACRO
EXTERNAL GETACTUAL, MCSAV, PUSHEXP, POPEXP, PRGSTR;
! THE FOLLOWING ARE FROM SYNTAX
EXTERNAL INITSYNTAX, HRUND, RECOVER, DEMAND, IDCHECKER, SLABEL, SLEAVE,
EXPRESSION, SCOMPOUND, SSET, SOPERATOR, SUSERCALL, SPLIT, SLONGS,
SSQOPEN, SPTR, SCASE, SREP, SESCAPE, SSPLF, SSELECT, SSPUNOP,
SIF, SDO, SWU, SPAROPEN, SML, DECLTEMPREG, SEXCHJ, SCREAT,SPLIT1;
! THE FOLLOWING ARE FROM XREF
EXTERNAL XREFWRITE,XLINE,XEOB,XREFINS;
! THE FOLLOWING ARE FROM DECLAR
EXTERNAL DECSYN, SROUTINE, SFUNCTION, SSTRUCTURE, RFS, GENFCN,
PEXTERNAL, PGLO, WHICHBIND, MKDUMINCA, CHECKEXTER,
SALLMACHOP, SMACHOP, SFORWARD, SLOCAL, SOWN, SGLOBAL,
SEXTERNAL, SREGISTER, SBIND, SMAP, UNMAP, INSTVECTOR,
CHKULA, RELSTRLIST, GSSA, SWITCHER, SMODHEAD, SDECLABEL,
DECSYM, STRECOPY, STRSCOPY, DECSYQ, H1RFS, GLOBALCHECK;
! THE FOLLOWING ARE FROM GTREE
EXTERNAL GENGRAPH, GENERATOR, GTPURGE, SETFUNBIT, RESTORERESULT,
GTINCR, GTDECR, CLEARRTGT, FIXSIDEEFFECTS, GENCODE,
GTHASH, MAKGT, FIXOCCF, GTLEXP, GTORES,
FOCGPH, MAXER, MARKFUNNY;
! THE FOLLOWING ARE FROM ADDRES
EXTERNAL GETVREG, GPA, GMA, RAGLAR, COPTR, LEXRA, FSA,
REGAR, REGAK, TVRP, ITRP, DCRP, READY, GLTM, TVMP,
LITV, LITA, MADRIR, RMA, MEMORYA, USABLEINDEXREG,
VALPTRTYP, PTRTYPP, MPTRTYP, MADDRFRPTRTYP, MCOPTRFRPTRTYP,
MLEXFRPTRTYP, REGP, SMPOSLITVP, SMNEGLITVP;
! THE FOLLOWING ARE FROM REGIST
EXTERNAL GLR, GLTR, GOLTR, GLTR2, GLPR, ACQUIRE, RMFRLST, GETAR, ENTER,
GETRN, DUMPREG, GENLOCAL, MATCH, CODEN, CODE, CLEARALL, GTUPDATE,
CLEARONE, CLEARSOME, DUA, DUN, DUAN, DUM, INCRUSEN, DULEX, RELREG,
FREEVREG, SAVRT, RESRT, COPYTRCT, CLEARTEMP, RMINT, RGINIT, RMREFREG,
GLAR, REGINIT, RELOADTEMP, SAVREG, LIVR, CTRCTH, REGSEARCH;
! THE FOLLOWING ARE FROM ARITH
EXTERNAL GPTR, GDOT, GAT, GSLSH, LEXNPSD, GLSH, GMUL, GDIV, GMOD, GADD, GSUB,
GNEG, GLSS, GEQL, GLEQ, GGEQ, GNEQ, GGTR, GAND, GOR,
GXOR, GEQV, GNOT, GFADR, GFMLR, GFSBR, GFDVR, GFNEG,
GFIX, GFLOAT, FLOATB, GSTO, GSLASH, GOTM, FULLWORD, FALR, CODEDPB,LOG2;
! THE FOLLOWING ARE FROM LSTPKG
EXTERNAL TEMPLATE, SKELETON, HEADER, UNTEMPLATE, UNSKELETON, SYPHON,
LAST, ALLNOS, PREVCODE, SWALABEL, CLASSP, CLASSLAB, ACPR1, ACPR2,
ACPR3, ACPDT, ACPDB, ADVR1, ADVR2, ADVR3, ADVDT, FLATTEN,
ADVDB, PUSHCODE, PUSHCPH, FOLLCPH, LOSECONV, LOCATE, SURFACE,
PRECEDE, PROMOTE, DROP, SCAN, SCAN0, ERASETOP, ERASEBOT, ERASE,
EMPTY, NEWBOT, FOLLOW, PUSHBOT, PUSHTOP, TAKE, FLATFUNC, PCIVR,
POPTOP, NONCLASSP, FIRST, FRONT,
DELCELL, DETCELL, ERASECELL, ERASEDET;
! THE FOLLOWING ARE FROM CNTROL
EXTERNAL TIMEIN, TIMEOUT, GCE0, GCE1, GCE2, GDWU0, GDWU1, GDWU2,
MPTIMIN,MPTIMOUT,DEBIN,DEBOUT,
GWUD0, GWUD1, GWUD2, GID0, GID1, GID2, GID3, GID4,
GITE0, GITE1, GITE2, GITE3, GCOST0, GCOST1, GLEAVE,
GCOST2, GCOST3, GCOST4, GSE0, GSE1, GSE2, GSE3, GSE3O, GSE3A,
GSE4, GSE5, CONVEY, GRETURN, GXBLOCK, GXLOOP, GXCOND,
GXCMPEX, GXSELECT, GXSET, GXCASE, GEXIT, GSPLF, GML,
GSPUNOP, GJFFO, GMOVM, GSGN,
GEPILOG, GPROLOG, GFRC1, GFRC2, GEXCH0, GEXCH1, GCREA0,
GCREA1, GCREA2, GCREA3, GCREA4, GCREA5, H2RFS;
! THE FOLLOWING ARE FROM LDINT
EXTERNAL LDINT, DEFLOW, LIINIT, PSWENT, DEFGLLEX, OFFST,
DEFGBC,DEFGBG,DEFGBR,PUTGBP,CHKGBP,
%2.25% PTTRANS, EXTCOUNT, TEXTHD, RPTTRANS, WRITE9, WRIT10, GETNAM;
%2.25%! THE FOLLOWING ARE FROM H3ASSY
%2.25%
%3.19% EXTERNAL MACOUT, MBLKOUT, MCODEOUT, MCPOUT, MDCLOUT,
%2.25% MENDOUT, MEXTOUT, MLITOUT, MMHDOUT, MPLITOUT,
%2.25% MPLOUT,MREGSOUT, R50TOASCIZ;
! THE FOLLOWING ARE FROM DRIVER
%3.20% EXTERNAL OCHAR, OUTREL, OUTPSTRING, OUTSTR, OUTSTN, OUTBLANK, OUTCONOC,
%3.20% OUTMOC, NEWLINE, EOCHAR, EOUTSTR, EOUTBLANK, OUTNUM,
%3.20% ENEWLINE, EMESSAGE, FORCELINE, ERROR, IDERROR, SAVEMACSRC,
PSWRES, PSWSAV, PSWSPC, EOSTN, WRITEFINAL, DRIVER,
%3.9-1% WARNEM, READALINE, MACHINECODE, WRITECODE, OUTOFFSET;
! THE FOLLOWING ARE FROM H3CNTR
EXTERNAL PSWSTK, PSWTIM, PSWSTT, CNINIT, PSWVER;
! THE FOLLOWING ARE FROM IO AND ONCE
EXTERNAL TTYLIST, INITIO, FINIO, FINLST, FORCE, PAGE, PAGER, READTEXT,
CALLEXECFORSPACE, BIO, ONCEONLY,CCLCTL,CCLBP,
%3.18% ERRDAT, ERROPEN, ERRDEV, ERRPPN, ERRFILE;
! THE FOLLOWING IS FROM REQUIRE
EXTERNAL SREQUIRE;
! THE FOLLOWING IS FROM H3ERR
%3.18% EXTERNAL ERRTABLE;
! THE FOLLOWING ARE FROM H3PEEP
EXTERNAL
NXTINSTR,PEEPER,PEEP00,PEEP01,PEEP02,PEEP03,PEEP04,
PEEP07,PEEP10,PEEP11,PEEP23,PEEP12,PEEP14,PEEP05,
PEEP20,PEEP21,PEEP30,PEEP36,PEEPA0,POPT01,POPT02,
POPT03,POPT04,POPT06,POPT07,POPT09,POPT10,POPT11,
POPT14,POPT15,POPT16,POPT17,POPT18,POPT19,POPT21,
POPT22,POPT23,POPT24,POPT27,POPT29,POPT30,POPT70,
POPT71,POPT72,POPT73,POPT74,POPT75,
NONSKIP,OPTOMEM,AROPTOMEM,DELCODE;
!HERE ARE THE GLOBAL VARIABLES
!-----------------------------
%2.25% EXTERNAL ONAME, GNAME, FNAME, CNAME, LNAME, TNAME, PNAME, XWDOFFSET, NEXTLAB;
EXTERNAL ACCUMLENGTH, AMNTFREE, ACCUM, ARTB,
BODYMC, BREG, BLOCKLEVEL, BUFF, BUF1, BUFPT1, BUF2, BUFPT2, B20FLG,
CODETOG, CHAR, CODEPTR, CODEPROP, COMPILLERERROR, CSTI,
CSTIL, CURST, CURSTI, CURSTE, CURSTAP, CURSTIP, CURSTNP,
DEBFLG, DEPTH, DDEPTH, DEVBPT, DEL, DISPLAYLEN, DSTACK, DEFACTS, DUPPLITFL,
ERRORFOUND, ERRLEVEL, ENLEX, EXPANDMACRO,
ETP, ETL, ETPNXT, ENDOFSPACE, ENDLK, EBUF, ENTHED, EXPINCA,
FBLKMC, FFSEEN, FLAGS, FORGET, FREG, FUNCTIONLEVEL, FREEVHEADER,
FCNSTATE, FNSTAT, FSTRHED, FUTSYM, FUTDEL, FCNLIST, FREEHEAD,
%2.34% GENSYMS, GLLIST, GTL, GTP,
HOLD, HITREGM, RPAGE,
INCA, IBUF, INCASIZE, INDECS,
%2.9% ?.JBVER, JSPREG, ?.JBSYM, ?.JBREL, ?.JBHRL, LTBASE, LTTBASE,
LABIND, LINCNT, LTFULL, LOADECREG, LOC2, LOCC,
LSTART, LXSEMC, LXOPEP, LXPLUS, LXCLOP, LXOPEA, LXCOMMA,
%2.9% LXCLOA, LAHTR,
%5.200.26% LNKSTE,
MUSTDU, MCBUFF, MDEPTH, MDDEPTH, MACRODEF, MACROFORMAL, MPOCDV,
MHTIME, MNAME, MMC, MNAM, MODLENGTH, MAXLOCAL, MODREGM, MAPTB,
%2.14% NEEDDISP, NOSVR, NLINES, NSYM, NDEL, NFUTSYM, NFUTDEL, NCBUFF,
NEXTLOCAL, NEXTGLOBAL, NEXTOWN, NOGBGCOL, NORECVAL, NOWSEG,
NODISC, NOCSAV, NOPSAV, NUMENT, NUMPARS, NOSAVREG, NREG,
OTL, OBUF, OFLAGS, OTYPE, OPAR, OFUN, OEQL, OASS, OPTTOREGADDR,
PGSL, PACCUM, PBUFF, PSTRING, PROGRAM, PDBUF, POSIT, POSITC,
%2.25% PTOVECTOR, PTREFNO, PTLNK, PTTRANST, PGM, PLNEXT, PLHEAD, PLBOOL,
QUOTETYPE,OWNHEAD,GLOHEAD,OWNBLK,GLOBLK,STUTYPE,
RESREGM, REALFS, REALS, REGUSE, RETOT, RENTLEX, RXITLEX,
SACCUM, !V2G-
SAVJBREL, SIZE, SIZEM1, SESTOG, SOSPGC, STKSTAT, STRINFIXED, SREG, SYM, SVREGM,
STRDEF, STRING, STRSTE, STE, STELIST, STEMC, SERRPOS, SERRSTE,
STELAST, STRLXS, STRHED, SSTREX, STREXP, STACK, SFORLABEL,
TEMP, TIMSTAT, TYPE, VECTOR TYPEDOPE, TRBLEVEL, TGRBLEVEL, TOPOFTABLE, TSTACK,
UNDECLEX,
VALIDBUF, VREG, VAL, VECACTS, VTARGET,
XNCBUFF,XTIT1,XTIT2,XHED,
%2.9% WARNINGFOUND, WDVECTOR, ZEROAD,
%3.31% COREGONE,
GBPHDR;
!HERE ARE THE MACROS AND BINDS
!-----------------------------
EXTERNAL LEXERR;
MACRO DISPAD(R)=R$,
ERRLEX=(#177777^18 OR LEXERR)$;
! TRANSFORM VECTORS TO ADDRESSES
MACRO NGOTM=GOTM$,
NSFORWARD=SFORWARD$,
NGDIV=GDIV$,
NGMOD=GMOD$,
NGDOT=GDOT$,
NGAT=GAT$,
NGNEG=GNEG$,
NGPTR=GPTR$,
NSROUTINE=SROUTINE$,
NSCOMPOUND=SCOMPOUND$,
NSEXTERNAL=SEXTERNAL$,
NSGLOBAL=SGLOBAL$,
NSOWN=SOWN$,
NSBIND=SBIND$,
NDRIVER=DRIVER$;
! MASKING AND POSITIONING MACROS:
MACRO
MASK(FIELD)=REALMASK(FIELD)$,
REALMASK(POS,SIZ)=((1^SIZ-1)^POS)$,
FIELDVAL(FIELD,VAL)=REALFIELDV(FIELD,VAL)$,
REALFIELDV(POS,SIZ,VAL)=((VAL)^POS)$,
POSITION(FIELD)=FIRSTPAR(FIELD)$,
SIZEPART(FIELD)=SECONDPAR(FIELD)$,
FIRSTPAR(I,J)=(I)$,
SECONDPAR(I,J)=(J)$;
! SWITCH DEFINITIONS
! ------------------
MACRO
LSTFLG=FLAGS<28,1>$, LUNDEFLG=FLAGS<25,1>$, SVERGFLG=FLAGS<26,1>$,
STATFLG=FLAGS<24,1>$, BINFLG=FLAGS<27,1>$, FINFLG=FLAGS<34,1>$,
NPTFLG=FLAGS<23,1>$, TWOSEGFLG=FLAGS<29,1>$, HGHFLG=FLAGS<32,1>$,
XREFLG=FLAGS<35,1>$, TTYLST=FLAGS<10,1>$, ERRBIT=FLAGS<7,1>$,
EMFLAG=FLAGS<22,1>$, EMFLG=EMFLAG$, MLFLG=FLAGS<30,1>$,
GRFLG=FLAGS<21,1>$, TTFLAG=FLAGS<20,1>$, CCLFLAG=FLAGS<19,1>$,
PROFLG=FLAGS<18,1>$, FSAVFLG=FLAGS<33,1>$, CANLST=FLAGS<31,1>$,
FFFLAG=FLAGS<33,1>$; !FIX UP FREG ON EVERY ROUTINE ENTRANCE AND EXIT
EXTERNAL NOENGLISH, STARTBLOCK; ! 3.18 AND 3.22
! VARIOUS PARAMETERIZED MACROS
MACRO NULL(H)=(.CT[(H),1]<NEXTF> EQL (H))$;
MACRO CASE2(T,P1,P2)=CASE T OF SET P1; P2 TES$;
MACRO TREGNUM(X)=(X<RTEF>)$;
MACRO WORD(X)=(X)<0,36>$;
MACRO LITP(X)=(((X) AND NOT STEM) EQL 0)$;
MACRO NAMP(X)=(((X) AND NOT STEM) EQL (LSM OR ZERO36))$;
MACRO SIGN(X)=(X<NEGF>)$;
MACRO GABS(X)=((X) AND NOT NEGM)$;
MACRO NO(X)=(X<NOTF>)$;
MACRO GYES(X)=((X) AND NOT NOTM)$;
MACRO LEXRN(X)=((X)^16)$;
MACRO FLOATONE=LITLEXEME(#201400^18)$;
MACRO VERYBIG=LITLEXEME(-1 AND NOT 1^35)$;
MACRO ZERONAMP(X)=(((X) AND NOT STEM) EQL LSM)$;
MACRO STACKVARP(X)=STACKVAR^(-.ST[X,0]<TYPEF>)$;
! VARIOUS SIZES AND MASK DEFINITIONS
BIND
PTMASK=#377, GTMASK=#37, HTSIZE=125,
DTSIZE=#100, EOL=#15, MAXSTRING=135,
%2.9% LTMASK=#377, LTSIZE=LTMASK+1, LITLEX1=0,
LITLEX2=(1^14), DEFAULTSTKL=#1000, COROUPREFL=4,
GTLEX=#077777, EXPHTSIZE=31, LONGESTPLIT=200,
%2.9% LTNUM=8, !MAX # OF LT AND LTTRANST MODULES
%2.9% LTLIM=LTSIZE-LTSIZE^(-2), !MAX # OF ENTRIES ALLOWED IN LT MODULE
ALIVEM=1^31, !V2H- ALIVE BIT IN LABEL STES
DEADM=1^30; !V2H- DEAD BIT IN LABEL STES.
MACRO STKLEN(I)=STKSTAT[I]<0,18>$, STKSTE(I)=STKSTAT[I]<18,18>$;
! SYMBOL TABLE TYPE EQUATES
BIND
DELMT=#00, UNDEDT=#01, GLOBALT=#02,
OWNT=#03, EXTRNT=#04, LOCALT=#05,
BINDT=#06, FORMALT=#07, REGT=#20,
GROUTINET=#12, ROUTINET=#10, EXPRT=#11,
RTNT=#10, STFORMT=#14, STRFPT=STFORMT,
FUNCT=#13, FORWT=#17, MACHT=#40,
MACHOPT=MACHT, SPLFT=#41, ABSOLUTET=#42,
STRT=#30, MACROT=#31, PLITT=#15,
LEXEMT=#32, SPUNOPT=#43, PTRT=#44,
GPLITT=#22, !GLOBAL BIND TO LOCATION WITHIN PLITT
GABSOLUTET=#21, !GLOBAL BIND TO COMPILE TIME CONSTANT
GLEXEMT=#32, !GLOBAL BIND TO LINK TIME CONSTANT
LINKAGET=#45, !NAME OF LINKAGE TYPE (5.200.19)
LABELT= #16; !THIS IS A CONTROL EXPRESSION LABEL.
! UNUSED TYPES: 24-27,33-37,46-47
BIND STACKVAR=(1^LOCALT OR 1^FORMALT OR 1^BINDT OR 1^STFORMT);
BIND GLOBALTYPE= (1^GLOBALT OR 1^GABSOLUTET OR 1^GROUTINET
OR 1^GPLITT);
BIND VALIDTYPE= (1^GLOBALT OR 1^OWNT OR 1^EXTRNT OR 1^LOCALT OR 1^EXPRT OR
1^FORMALT OR 1^ROUTINET OR 1^GROUTINET OR 1^FUNCT OR
1^FORWT OR 1^STFORMT OR 1^BINDT OR 1^PLITT OR 1^GPLITT
); !5.200.17 REMOVED "1^STRT OR"
%5.200.18% BIND LOADTIMEAD=
%5.200.18% (1^OWNT OR 1^GLOBALT OR 1^EXTRNT OR 1^EXPRT OR
%5.200.18% 1^GROUTINET OR 1^ROUTINET OR 1^FUNCT OR 1^PLITT OR
%5.200.18% 1^FORWT OR
%5.200.18% 1^GPLITT);
%5.200.19% BIND BADEXPTYPE=(1^STRT OR 1^LABELT
%5.200.19% OR 1^UNDEDT OR 1^LINKAGET);
! VARIOUS FIELD EQUATES
MACRO
FUNNYBIT=35,1$, MARKBIT=34,1$, RESULTF=33,1$,
OCCF=18,8$, SAVGEF=26,7$,
SUBNF=15,3$, ROSF=18,16$,
PREVF=15,15$, NEXTF=0,15$, LEFTM=#777777^18$,
%5.200.27% LINKAGESTF=15,15$, PORTALSWF=30,1$,
LEFTF=18,18$, RIGHTF=0,18$, RIGHTM=#777777$,
BLF=28,6$, FLF=22,6$, TYPEF=16,6$,
LSSTEF=0,16$, LINKF=0,15$, ADDRESSF=0,18$,
STRF=18,15$, NPARMSF=18,6$, MTLF=24,11$,
NRF=33,3$, NEGF=35,1$, NOTF=34,1$,
NGNTF=34,2$, COPF=33,1$, DOTF=33,1$,
POSNF=27,6$, SIZEF=21,6$, POSNSIZEF=21,12$,
USEF=18,8$, DTF=20,1$, TDF=20,1$,
RTEF=16,5$, LRTEF=0,5$, LSF=15,1$,
VEF=14,1$, LTEF=0,14$, STEF=0,15$,
PRIORITYF=30,6$, DNUMF=27,3$, RADDRF=0,18$,
HCLASS=34,2$, LEFTHALF=18,18$, RIGHTHALF=0,18$,
HUNARY=20,1$, HPRIORITY=30,6$, AEMAYFOLLOW=23,1$,
SIMBIT=24,1$, OFFSETF=0,18$, PARSTEF=18,15$,
DEADALIVEF=30,2$, !DEAD AND ALIVE BITS IN LABEL STES.
DEADB=30,1$, !DEADB IN LABEL STES.
ALIVEB=31,1$; !ALIVEB IN LABEL STES.
! DELIMETER CODES
BIND
OPENBRACKET=0, CLOBRAC=2, OPRTR=1,
DCLRTR=3;
! DELIMETER TYPE LEXEME BINDS
BIND
HEMPTY=0, HUNARYM=1^20, HBLOCK=#1560,
HMODULE=#2563, HELUDOM=#400023, HOTHERWISE=#400264,
HALWAYS=#400260, HBEGIN=#2560, HPAROPEN=#3750,
%2.21% HROPEN=#3560, HDOT=#211504, HAT=#212504,
%2.21% HBKSLSH=#213504, HMIN=#262700, HPLUS=#261720,
HNOT=#311514, HNEG=#223504, HEXCHJ=#1542,
HCREATE=#1541, HLENGTH=#400101, HCRAT=#400102,
HWHILE=#5140, HUNTIL=#4140, HSQOPEN=#4750,
HPTOPEN=#2750, HDOOPEN=#3140, HCOMMA=#401060,
HNAMES=#400010, HINDEXES=#400011, HGLOBALLY=#400012,
%5.200.25% HPORTAL=#601013,
HFUNCTION=#601024, HROUTINE=#602024, HEND=#400020,
HSEMCOL=#400060, HDO=#403040, HUNTLCLO=#404040,
HWHLCLO=#405040,
HIFSKIP=#2141, HTHEN=#400040, HELSE=#406040,
HPOINTCLO=#402020, HROCLO=#401020, HPTCLO=#402020,
HSQCLO=#403020, HSTO=#370740, HDECR=#1100,
HTO=#402040, HSELECT=#1240, HNSET=#400100,
HTESN=#400200, HTES=#400000, HSET=#7140,
HOF=#401000, HFROM=#401040, HBY=#402041,
%5.200.19% HENTXIT=#604000,
! (5.200.19) THE KEY WORD FOR THE LINKAGE TYPE: LINKAGE <X>=ENTXIT(<Y>,<Z>)
%5.200.14% HEQL=%407020% HSTO, HCOLON=#403060, HEXITCOND=#1143,
! NOTE: THE CHANGE 5.200.14 ON THE PREVIOUS LINE IS, WITH
! THE CHANGE TO LOONCE, THE EQUIVALENCING OF "=" AND "_".
HEXITLOOP=#1140, HEXITCOMP=#1141, HEXITBLOCK=#1142,
HEXITSELECT=#2141, HEXITCASE=#2142, HEXITSET=#2143,
HEXIT=#3140, HRETURN=#2140, HBREAK=#1140,
HSESEMCOL=#400360,HREQUIRE=#600003, !FOR REQUIRE FILE 4-22-77
HWITH= #405000, !V2H- "WITH" IN A LEAVE EXPRESSION
HLEAVE= #3141, !V2H- "LEAVE" IN A LEAVE EXPRESSION
HLABEL= #600001, !V2H- "LABEL" IN A LABEL DECLARATION
HLABCOLON= #204500; !V2H- ":" AS A LABEL DELIMITER
MACRO
HERRLEX=ERRLEX$;
! MACHINE OP CODE BINDS
BIND
FSC=#132, IBP=#133, ILDB=#134,
IDPB=#136, LDB=#135, DPB=#137,
FAD=#140, FADRR=#144, FADRRI=#145,
FADRM=#146, FSBRR=#154, FSBRRI=#155,
FSBRM=#156, FMLRR=#164, FMLRRI=#165,
FMPRM=#166, FDVRR=#174, FDVRRI=#175,
MOVEI=#201, MOVEM=#202, MOVE=#200,
MOVNI=#211, MOVNM=#212, MOVNS=#213,
MOVN=#210, MOVM=#214, IMULI=#221,
IMULM=#222, IMUL=#220, MULI=#225,
IDIVI=#231, IDIVM=#232, IDIV=#230,
ASH=#240, LSH=#242, EXCH=#250,
JRST=#254, XCT=#256, PUSHJ=#260,
PUSH=#261, POPJ=#263, POP=#262,
ADDI=#271, ADDM=#272, ADD=#270,
SUBI=#275, SUBM=#276, SUB=#274,
CAILE=#303, CAIN=#306, CAI=#300,
CAMLE=#313, CAMN=#316, CAME=#312,
CAMGE=#315, CAM=#310, JUMPE=#322,
JUMPG=#327, JUMP=#320, SKIPE=#332,
SKIPA=#334, SKIPGE=#335, AOJ=#340,
AOJLE=#343, AOJA=#344, AOS=#350,
AOSE=#352, SOJ=#360, SOJA=#364,
SOJGE=#365, SOJG=#367, SOS=#370,
SETZM=#402, SETZ=#400, ANDM=#406,
XORM=#432, IOR=#434, IORI=#435,
ORM=#436, EQVM=#446, SETCAM=#452,
SETCAB=#453, SETCA=#450, SETCMM=#462,
SETCM=#460, SETOM=#476, SETO=#474,
HRLZ=#514, HRLZI=#515, HRLZS=#517,
HRLOI=#525, HRLI=#505, HRLM=#506,
HRL=#504, HLLZS=#513, HLLOS=#523,
HRRI=#541, HRRM=#542, HRRZI=#551,
HRRZM=#552, HRRZS=#553, HRRZ=#550,
HLRZ=#554, HLRZS=#557, HRROS=#563,
HRR=#540, TRNE=#602, TLNE=#603,
TRNN=#606, TLNN=#607, TRZ=#620,
TLZ=#621, TDZ=#630, TLC=#641,
TRO=#660, TLO=#661, TDO=#670,
JSP=#265, JFFO=#243, SKIPLE=#333,
ANDI=#405, SKIP=#330, ANDCMI=#421,
TDNE=#612, TDNN=#616, TDZA=#634,
HRROI=#561, JUMPGE=#325, JUMPLE=#323,
JUMPL=#321, AOJL=#341, HLL=#500,
HLR=#544, FDVRM=#176, ADDB=#273,
SETCMB=#463, SETOB=#477, SETZB=#403,
MOVSI=#205, SKIPL=#331, CAIA=#304,
IORM=#436, ANDCAM=#412, ANDCA=#410,
ANDCAI=#411, ANDCM=#420, ANDCB=#440,
ANDCBI=#441, ORCA=#454, ORCAI=#455,
ORCM=#464, ORCMI=#465, ORCB=#470,
ORCBI=#471;
! DECLARATION FIELDS AND MASKS
MACRO
NFPARMBIT=1^32$, TYPEFP=16$, LSFPLUS=15,21$,
NPARMF=32,4$, LASTF=15,15$, COPYLEX=0,1$,
SIMBITAF=31,1$, SIMBITSF=30,1$, LXTESF=15,15$,
LXTEAF=0,15$, TACCESS=1,1$, NPF=3,4$,
STRXPF=0,15$, STRXF=0,15$, PSZF=32,4$,
STELSTEF=18,18$, STELCPF=0,36$, STELNEXTF=0,18$,
MAPLINKF=0,15$, MAPSTEF=0,15$, MAPSTRF=15,15$,
SIMBITAM=1^31$;
%%
% 3 USEFUL MACROS:
"PUSHGPV(<INDEX>,<NAME>)" SAME AS LCC "NEW NAME"
"POPGPV(<INDEX>,<NAME>)" SAME AS EXITING THE PART IN WHICH
NAME WAS DECLARED "NEW".
"CHECK(<ROUTINE NAME>)" SIMPLY GENERATES A RETURN IF THE
ROUTINE (CALLED WITH NO PARAMETERS) RETURNS A 1.
NOTE: "CHECK(Y) 1;" WILL RETURN A 1 IF Y DOES.
<INDEX> IN GPV MACROS REFERS TO AN OFFSET FROM A LOCAL VARIABLE
DECLARED LOCGPV[<LENGTH>]--I.E. IT MUST BE A VECTOR.
%
%%
MACRO PUSHGPV(INDEX,NAME)=(LOCGPV[INDEX]_.NAME; NAME)$,
POPGPV(INDEX,NAME)=NAME_.LOCGPV[INDEX]$,
CHECK(ROUT)=IF ROUT() THEN RETURN$;
% MAPPING TEST MACROS %
BIND MAPMASK=1^ABSOLUTET+1^GABSOLUTET+1^REGT+1^STRFPT+1^FORMALT+1^PLITT+1^LEXEMT+
1^BINDT+1^LOCALT+1^EXTRNT+1^OWNT+1^GLOBALT+1^GPLITT;
MACRO RELINCA(INCSTE)=RELEASESPACE(INCSTE,.ST[INCSTE,0]<PSZF>)$,
MAPPABLE(TYPE)=(MAPMASK^(-TYPE))$,
MAKEEXTERNAL(STE)=(WARNEM(.NSYM,0);
ST[STE,0]<TYPEF>_EXTRNT;
ST[STE,1]<ADDRESSF>_#777777)$;
! DECLARATION ERROR CODE BINDS
BIND
ERSYNAME=60, ERSYNOEQ=61, ERSYNOFPRD=62,
ERSYMRBRAC=63, ERSYMDEL=64, ERSYMNPRD=65,
ERSYNOCOL=66, ERSYMEQ=67, ERSYMGRLD=68,
ERSYUNMTCH=#142, ERSYMLBRAC=69, ERSMNDEC=86,
ERSMINREG=87, ERSMNOTL=88, ERSMUNMP=89,
ERSMEXPAR=90, ERSMNOTC=91, ERSMINULA=92,
ERSMBADFEXP=93, ERSMBADEXP=94, ERSMNOMAP=95,
ERSMNOTSTR=96, ERSMSIZE=97, ERSMNOFUN=98,
ERSMPREV=99,
ERRUNOP=#400, ERNOCBDEL=#401, ERNOSEMI=#402,
ERINVLEX=#403, ERGBMBCTC=#404, ERTMFP= #405,
ERCANTSHRINK=#406, ERILTL=#407, ERNONAME=#410,
ERNMPREV=#411, ERNOBINDDU=#412, ERALDECGL=#413,
ERDMBIN=#414, ERFEWERACT=#415, ERCANTLABEL=#416,
ERIMPLABEL=#417, ERALUSEDLAB=#420, EROUTLABSCOPE=#421,
ERSMBSVNAME=#422, ERTOBEOBS=#423, ERGLRTOROUT=#424,
ERGLTOOWN=#425, ERREDGLOBAL=#427,
ERRRDLINK=#432,
ERRBADSYM=#426, !(5.200.19)(BAD EXPRESSION CONSTITUENT)
% IN THE MODULE HEAD %
ERSYINVMDEC=#613, ERSMSTKD=#614, ERSYSTKINV=#615,
ERSMINSTKL=#616, ERSMINUSE=#617, ERSMSPRINV=#620,
ERSMSPRPRE=#621, ERSYMODBEG=#622, ERSMTOOM=#623,
ERSYRRINV=#624, ERSMNOPROG=#625, ERSYENTINV=#626,
ERSMNOENT=#627, ERSYNVER=#640,
% IN PLITS AND LONG STRINGS %
ERSYPLMRP=#630, ERSMPLNLI=#631, ERSMPLNLO=#632,
ERSMDUP=#633, ERSMLONG=#634, ERSYMRQ=#635,
ERSYIQC=#636, ERSMEXACT=#637,
% RELATIVE SWITCH TABLE LENGTH LOCATIONS 3.28 %
ALLSWL=-1, SWSWL=0;
! CODE HEADER CLASSES
BIND
CNVEYC=0, RELC=1, XBLOCKC=2,
XLOOPC=3, XCMPEXC=4, XCONDC=5,
XCOSTC=6, XSELECTC=7, XITC=8,
%5.200.29% PORTALC=9,
CODEC=12, LABELC=13, COSTC=14,
SELECTC=15, SELELC=16, EXCHC=17,
CREATC=18, CASEC=21, SETC=22,
NSETC=23, CMPEXC=24, ITEC=25,
DWUC=26, WUDC=27, IDFTDC=28,
BEC=29, FRC=30, CURRENTC=31;
! RELOCATION FIELD VALUES
BIND
NORELOC=0, EXTRELOC=1, CTRELOC=2,
OWNRELOC=3, GLORELOC=4, EXPRELOC=5,
PTRELOC=6, LTRELOC=7, LOCRELOC=8,
PLRELOC=9, CASEJMPRELOC=10, MODRELOC=11,
NOBORELOC=12, LUNDERELOC=13, TTRELOC=14;
! CODE CELL TYPE FIELDS
MACRO
ARTEF=32,4$, HOLYF=31,1$, LOCKF=30,1$,
BLOCKSIZEF=26,4$, RSF=15,1$, FCHAINF=30,6$,
BCHAINF=24,6$, CHAINF=24,12$, FREEF=15,1$,
HDRF=35,1$, CLASSF=30,5$, HDRCLASSF=30,6$,
RELRF=23,4$, RELOCF=30,5$, FUNCF=27,9$,
ACCF=23,4$, IXYF=0,23$, INDRF=22,1$,
INDXF=18,4$;
! CODE GENERATION MASKS
BIND
NEGM=1^35, NOTM=1^34, COPM=1^33,
DOTM=1^33, POSNM=#77^27, SIZEM=#77^21,
IXYM=#37777777, RELOCM=#37^30, INDIRM=1^22,
%2.22% NOTPSMASK=#77^18 + #777777, !BYTE POINTER EXCLUSIVE OF POS & SIZE
INDRM=1^22, DTM=1^20, RTEM=#37^16,
LSM=1^15, LSSTEM=#177777, VEM=1^14,
STEM=#77777, LTEM=#37777, NGNTM=3^34,
ONES=-1, ONE =1 , PRIME=13,
%2.9% RTESTEM=(RTEM OR STEM), COPLTEM=(COPM OR LTEM), ZERO=(#37777 OR VEM),
ZERO36=36^21, RELRM=#17^23, INDXM=#17^18,
NEXTM=#77777, POSNSIZEM=POSNM OR SIZEM,
%4.01% PEEPHOLE=#776, !PEEPHOLE OPCODE
%4.01% PEEPON=#701, !TURN PEEPHOLER ON
%4.01% PEEPOFF=#700, !TURN PEEPHOLER OFF
%4.01% PEEPREV=#702, !REVERT PEEPHOLING TO PREVIOUS STATE
%4.01% PEEPNOP=#704; !PEEPHOLE NO-OP
%4.01% EXTERNAL
%4.01% PX, !CURRENT PEEPHOLE POINTER
%4.01% PEEPHDR, !START OF THE CODE CHAIN FOR PEEPER
%4.01% LNKUP, !LINK TO PREVIOUS CODE WORD
%4.01% LNKUP2, !LINK TO 2ND PREVIOUS CODE WORD
%4.01% LNKDN, !LINK TO NEXT CODE WORD
%4.01% LNKDN2, !LINK TO 2ND CODE WORD FOLLOWING
%4.01% PEEPOK, !BOOLEAN TO ALLOW PEEPING
%4.01% PSTKPTR, !PEEP STACK POINTER
%4.01% PSTACK, !THE PEEP STACK ITSELF
%4.01% PSTOP; !MOVEABLE BEGINNING OF PEEPHOLE WINDOW
%4.01% MACRO
%4.01% PLABEL(I)=CT[I,0]<HDRF>$,
%4.01% PRELOC(I)=CT[I,0]<RELOCF>$,
%4.01% PCODEWD(I)=CT[I,1]$,
%4.01% POPCODE(I)=CT[I,1]<27,9>$,
%4.01% PREG(I)=CT[I,1]<23,4>$,
%4.01% PADDR(I)=CT[I,1]<0,23>$,
%4.01% PRGADDR(I)=CT[I,1]<0,27>$,
%4.01% POFFSET(I)=CT[I,1]<0,18>$;
! MACRO PROCESSOR EQUATES AND MACROS.
MACRO
INUSEBIT=15,1$, CHARF=0,7$, WORDF=0,36$,
NAMEF=15,15$, POSITF=7,29$, ACTUALF=30,5$;
BIND
TERMINATOR=#177, NOBLKS=1, TOOBIG=((NOBLKS*2)*5-1);
! STANDARD STRUCTURE DECLARATIONS AND THEIR EXTERNALS.
BIND TIMXMF=1, TIMXGF=2;
EXTERNAL TABLE;
STRUCTURE STANDARD[I,J]=(TABLE+TIMXMF*.I+.J)<0,36>;
STRUCTURE OLDSTANDARD[I,J]=(.OLDSTANDARD+2*.I+.J)<0,36>;
STRUCTURE BITVECTOR[I]=(.BITVECTOR+.I^(-5))<.I AND #37,1>;
STRUCTURE FORPOC[I,J]=(.FORPOC+.(MPOCDV+.I)<0,36>+.J)<0,36>;
STRUCTURE FOROCE[I,J]=(.FOROCE+4*.I+.J)<0,36>;
STRUCTURE FORDEVBUF[I,J]=(@DEVBPT+3*.I+.J)<0,36>;
STRUCTURE TYPESTR[I]=(.(TYPEDOPE+(.I AND 7)) + .I^(-3));
MAP STANDARD TABLE;
EXTERNAL STANDARD GT:ST:CT:XT:LXT:MAPT:MT,
%VECTOR% ART:RT:HT:XHT:GNAMES:EXPHT:
LT:DT:GRAPHHEAD,
OLDSTANDARD PT,
BITVECTOR AVL,
TYPESTR TYPETAB,
FORPOC POC,
FOROCE OCE,
FORDEVBUF DEVBUF;
STRUCTURE GTVEC[I]=(TABLE+TIMXMF*@.GTVEC+.I)<0,36>;
STRUCTURE STVEC[I]=(TABLE+TIMXMF*@.STVEC+.I)<0,36>;
! MACROS AND BINDS FOR TIMING/TRACING FEATURES
MACRO
TIMSTE=TIMSTAT<18,18>$, TIMLEN=TIMSTAT<0,18>$;
BIND
DEFAULTTIML=4;
%4.01% MAP BITVECTOR PSTACK; !THE PEEPSTACK
! DEFINITION OF DEBUGUUO
BIND DEBUGUUO=#037;
!APPERSON'S MACROS AND STRUCTURES
MACRO
CASEJMPP(I)=(.CTCELTYP[I] EQL CASEJMPRELOC)$,
CELTYPF=HDRCLASSF$,
CF0(NAM)=FSM(CT,NAM,0)$,
CF1(NAM)=FSM(CT,NAM,1)$,
CF2(NAM)=FSM(CT,NAM,2)$,
CLASS1F=CLASSF$,
CONC(A,B)=ID(A)B$,
CTREFP(I)=((1^CTRELOC+1^CASEJMPRELOC)^(-.CTCELTYP[I]))$,
CURRENTP(I)=(.CTCELTYP[I] EQL CURRENTC+32 OR .CTCELTYP[I] EQL SELELC+32)$,
FIRSTP(I)=(.NOFP(I) NEQ (I))$,
FIXEDF=34,1$,
FIXEDP(IND)=(.CTFIXED[IND])$,
FSM(PRE,NAM,WD)=BIND STFSTR CONC(PRE,NAM)[0,WD,CONC(NAM,F)]=TABLE+WD,
PTFSTR CONC(PT,NAM)[0,WD,CONC(NAM,F)]=PT+WD$,
HDR1F=HDRF$,
HEADER1P(I)=(.CT[I,1] LSS 0)$,
HEADERP(I)=(.CT[I,0] LSS 0)$,
ID(A)=A$,
JMPP(I)=(.CTOPLEFT[I] EQL JRST^9 AND LABREFP(I))$,
JUMP0P(I)=(.CTFUNC[I] EQL JUMP)$,
LABELP(I)=(.CTCELTYP[I] EQL LABELC+32)$,
LABSEENF=HDR1F$,
LASTP(I)=(.POFN(I) NEQ (I))$,
LINENOF=0,36$,
LINENOP(I)=(.CTCELTYP[I] EQL 0 AND .CTOPLEFT[I] EQL 0)$,
NEXT1F=NEXTF$,
NEXTOFPREV(I)=(NOFP(I)[FIRSTP(I)]<NEXTF>)$,
NOFP(I)=(CTNEXT[.CTPREV[I]])$,
OPADF=0,18$,
OPF=0,36$,
OPLEFTF=18,18$,
POFN(I)=(CTPREV[.CTNEXT[I]])$,
PREV1F=PREVF$,
PREVOFNEXT(I)=(POFN(I)[LASTP(I)]<PREVF>)$,
PTREFP(I)=(.CTCELTYP[I] EQL PTRELOC)$,
REFEDF=35,1$,
REFEF=PREVF$,
REFRF=NEXTF$,
RELADF=NEXTF$,
RELF=RELOCF$,
REPLACEVAL(A,B)=(REGISTER R;R_.(A);(A)_(B);.R)$,
RPTCNTF=RIGHTHALF$,
SF1(NAM)=FSM(ST,NAM,1)$,
XCTP(I)=(CTREFP(I) AND .CTOPLEFT[I] EQL XCT^9)$;
!STRUCTURES FOR CT AND ST FIELDS
STRUCTURE PTFSTR[I,WD,P,S]=(PT+WD+2*.I)<P,S>;
STRUCTURE STFSTR[I,WD,P,S]=(TABLE+TIMXMF*.I+WD)<P,S>;
CF1(ACC);
CF0(CELTYP);
CF1(CLASS1);
CF0(FIXED);
CF1(FUNC);
CF0(HDR);
CF1(HDR1);
CF1(LABSEEN);
CF1(LINENO);
CF0(NEXT);
CF1(NEXT1);
SF1(OFFSET);
CF1(OP);
CF1(OPAD);
CF1(OPLEFT);
CF0(PREV);
SF1(PARSTE);
CF1(PREV1);
CF1(REFE);
CF1(REFED);
CF1(REFR);
CF0(REL);
CF1(RELAD);
CF2(RPTCNT);
! GESCHKE'S MACROS TO HANDLE THE PTRTYP STUFF
MACRO
NORELOCPTRTYPP(X)=.ST[X,1]<RELOCF> EQL NORELOC$,
PSPTRTYP(X)=VALPTRTYP(X)^(-24)$,
INDPTRTYPP(X)=VALPTRTYP(X)^(-22)$,
LSSTEFPTRTYP(X)=.ST[X,1]<LSSTEF>$;
%V2H% !THESE MACROS HANDLE THE SETTING AND KILLING OF LABELS.
%V2H% !SETLABSIFNECESSARY IS CALLED BY THE MAIN SYNTAX ROUTINE
%V2H% !OF THE LABELED CONTROL EXPRESSION TO SET THE ALIVE BIT
%V2H% !AND THE INDEX FIELD IN THE LABEL STE. NOTE THAT
%V2H% !BOTH THESE MACROS MUST BE CALLED REGARDLESS OF THE STATE
%V2H% !OF CODETOG.
%V2H% MACRO SETLABSIFNECESSARY(CNTRLCLASS)=
%V2H% IF ((LLABIND_.LABIND) NEQ 0)
%V2H% THEN (BIRTHLABEL(IF .CODETOG THEN LOCATE(CNTRLCLASS,0)))$;
%V2H% MACRO KILLLABSIFNECESSARY=
%V2H% IF .LLABIND NEQ 0 THEN KILLLABEL(.LLABIND)$;
SWITCHES LIST; !RE-ENABLE LISTING IF NECESSARY
BEGIN ! THIS IS THE BEGINNING OF THE INNER BLOCK
!END OF BEGIN.BLI