! File: STRUCT.BEG ! ! This work was supported by the Advanced Research ! Projects Agency of the Office of the Secretary of ! Defense (F44620-73-C-0074) and is monitored by the ! Air Force Office of Scientific Research. ! ! ! THIS BEGIN FILE CONTAINS INFO FOR STRUCTURES AND MACROS ! ! ! !----------------------------------------------------------------- !17. THERE ARE 4 MAJOR "STACKS" ASSOCIATED WITH THE MACRO/ ! STRUCTURE STREAM SYSTEM: INPUT (PREFIX INP), OUTPUT STREAM ! PREFIX WST), ACTUAL PARAMETER LIST (PREFIX APL) AND THE ! ACTUAL PARAMETER MECHANISM (PREFIX APM). ALL STACKS ARE ! HANDLED BY 2 ROUTINES -- STRMPUSH AND STRMPOP. BOTH TAKE ! AND ARGUMENT WHICH IS THE ADDRESS OF THE TOP OF A STACK. ! THE TOP IS A BUFFER IN GLOBAL STORAGE-- THE REMAINDER IS ! ALLOCATED FROM ST. THE STACK FORMAT MUST BE: MACRO STKLEN=0,0,18$, ! LENGTH IN WORDS, INCLUDING THE 0TH STKNEXT=0,18,18$; ! LINK WORD, SET BY PUSH ! TWO OF THE STACKS -- WST AND APL -- ARE ALSO USED AS ! "STREAM MECHANISMS". THE 2 FUNCTIONS STRMAPPEND AND ! STRMQUIT ARE USED ON TOP OF THE STACK MECHANISM TO CREATE ! STREAMS; THE STACK TOPS ACT AS BUFFERS IN THIS CASE, ! PUSHING ON OVERFLOW WITH APPENDS. WHEN WE QUIT, THE LINKS ! IN THE STACK ARE REVERSED TO CREATE A STREAM. ! GLOBAL DECLARATION: ROOM[INPMAX+APMMAX+FIXEDROOM] STRUCTURE FVEC[I,J,K]=(.FVEC+.I)<.J, IF .K EQL 0 THEN 36 ELSE .K>; STRUCTURE INDFVEC[I,J,K]=(@.INDFVEC+.I)<.J,IF .K EQL 0 THEN 36 ELSE .K>; STRUCTURE STREAMTOP[J,K]=(.STREAMTOP+.(.STREAMTOP)<0,18>) <.J, IF .K EQL 0 THEN 36 ELSE .K>; EXTERNAL FVEC ROOM; ! A. FIXED FIELDS BIND STVEC STRUDVNME=ROOM[0,18,18], ! DEFAULT VECTOR NT INDEX STVEC STRUDEFV=ROOM[0,0,18], ! DEFAULT VECTOR STE INDEX ROOMTOBE0=1, !ZEROED IN DRIVER FROM HERE UP NINP=ROOM[1,0,18], ! NUMBER OF PARAMETERS THIS DEF OLDDELI=ROOM[1,18,18], ! INDEX OF CURRENT DEL AFTER RUND OLDDEL=ROOM[2,0,36], ! DEL BEFORE RUND NATOM=ROOM[3,0,36], ! BUFFER POINTER NEXT ATOM STRUCP=ROOM[4,0,1], ! COPYING STRUCTURE BODY MACRCP=ROOM[4,3,1], ! COPYING MACRO BODY OR ACTUAL PARAMTER LIST SIZEEXP=ROOM[4,6,1], ! SIZE EXPRESSION BEING DEFINED NOIN=ROOM[4,12,1], NOIT=ROOM[4,15,1], NOCON=ROOM[4,18,1], NOPAR=ROOM[4,21,1], QUOTESYM=ROOM[4,24,1], ! SYMBOL IS QUOTED QUOTEDEL=ROOM[4,27,1], ! DELIMITER IS QUOTED QUOTED=ROOM[4,30,1], ! RUND HAS NOT DETERMINED WHAT ! IS QUOTED YET EXPANDERR=ROOM[4,33,1], ! ERROR IN SCANNING MACRO ACTUAL PARAMS RESWD=ROOM[4,35,1], ! CURRENT DELIMITER WAS RESERVED WORD STVEC STRUDEF:MACRDEF=ROOM[5], ! DEFINING THIS MACR OR STRU MACRNUMBL=ROOM[6], ! NUM BLANKS PREFIX MACRO TRACE FIXEDROOM=7; ! NUMBER OF CELLS IN FIXED AREA ! B. INPUT STACK FIELDS (INP) MACRO MARKL(L,O,PRE)=ID(PRE)LEN=L+O,ID(PRE)ROOM=FIXEDROOM+ID(PRE)LEN$; BIND FVEC INPBUF=ROOM[FIXEDROOM], INPUTTYPE=ROOM[FIXEDROOM+1,0,18], ! DETERMINE TAKE IN RUND ATOMISSYM=ROOM[FIXEDROOM+1,18,1], STRMEOF=ROOM[FIXEDROOM+1,21,1], STREAMIN=ROOM[FIXEDROOM+1,24,1], PEEKBIT=ROOM[FIXEDROOM+1,27,1], ACTUALEXP=ROOM[FIXEDROOM+1,30,1], TRACEBIT=ROOM[FIXEDROOM+1,33,1], STRUEXPAND=ROOM[FIXEDROOM+1,35,1], WINDOW FUTWINDOW=ROOM[FIXEDROOM+2], ATOMCLASS=FUTWINDOW[LTYPF], FUTRESWD=FUTWINDOW[30,1], TMS=ROOM[FIXEDROOM+3,0,18], ITMS=ROOM[FIXEDROOM+3,18,18], MACRITCOUNT=ROOM[FIXEDROOM+4,0,18], MACRLENGTH=ROOM[FIXEDROOM+4,18,18], MARKL(0,5,RUND), STVEC STRMTOP=ROOM[RUNDROOM,0,18], STVEC STRMBEG=ROOM[RUNDROOM,18,18], STVEC STRMPOS=ROOM[RUNDROOM+1,0,18], MACRSUBTYPE=ROOM[RUNDROOM+1,18,18], MARKL(RUNDLEN,2,MACRF), STVEC STRUNAME:MACRNAME=ROOM[MACRFROOM,0,18], STVEC STRUACT=ROOM[MACRFROOM,18,18], MARKL(MACRFLEN,1,STRU), STVEC REMBEG=ROOM[MACRFROOM,18,18], STVEC REMTOP=ROOM[MACRFROOM+1,0,18], REMLEN=ROOM[MACRFROOM+1,18,18], REMPOS=ROOM[MACRFROOM+2,0,18], MACRNACTS=ROOM[MACRFROOM+2,18,18], MARKL(MACRFLEN,3,MACRPA), STVEC MACRACT=ROOM[MACRPAROOM,0,18], MARKL(MACRPALEN,1,MACRRF), WINDOW MACRBSIND=ROOM[MACRRFROOM,0,36], MACRLBR=MACRBSIND[24,12], MACRRBR=MACRBSIND[12,12], MACRSEP=MACRBSIND[0,12], MACRNF=ROOM[MACRRFROOM+1,0,18], MACRNI=ROOM[MACRRFROOM+1,18,18], MARKL(MACRRFLEN,2,MACR), INPMAX=MACRLEN, INPROOM=MACRROOM; ! C. ACTUAL PARAMETER MECHANISM (APM) BIND FVEC APMBUF=ROOM[INPROOM]; ! D. ACTUAL PARAMETER LIST MECHANISM (APL) BIND STREAMTOP APLBUF=ROOM[INPROOM+1], APLBASE=INPROOM+2, APLMAX=33+1, APLROOM=INPROOM+1+APLMAX; ! E. STREAM CREATION MECHANISM (WST). BIND STREAMTOP WSTBUF=ROOM[APLROOM], WSTMAX=20+1, APMMAX=1+APLMAX+WSTMAX, MARKL(INPMAX,APMMAX,APM); ! E.1. TRACING STACK (MTBUF): BIND FVEC MTBUF=ROOM[APMROOM], MTMAX=10+1, MARKL(APMLEN,MTMAX,MT); ! ROOMSIZE IS ALSO DEFINED IN GLODEC.BEG; BIND ROOMSIZE=MTROOM; ! F. DEFAULT VECTOR STACK MECHANISM MACRO STRUCF=STKNEXT$; ! G. STATES OF THE MACRO SUBTYPE AND ASSOCIATED BINDS AND PREDICATES. BIND MACRRIND=1, ! [] SPECIFIED MACRIIND=2, ! [X,...] SPECIFIED MACRFIND=4, ! (X,...) SPECIFIED MACRSIND=8, ! STRUCTURE TYPE--ALLOWS COMMON "POPORIT" MACRSIMPLE=0, MACRPASSED=MACRRIND, MACRFIXED=MACRFIND, MACRRECUR=MACRFIND+MACRRIND; MACRO RECURSIVE=(.SUBTYPE EQL MACRRECUR)$, FIXED=(.SUBTYPE EQL MACRFIXED)$, PASSED=(.SUBTYPE EQL MACRPASSED)$, SIMPLE=(.SUBTYPE EQL MACRSIMPLE)$, ITERATED=((.SUBTYPE AND MACRIIND) NEQ 0)$, STRUCTURED=(.SUBTYPE EQL MACRSIND)$, MUSTSEEPARMS=(.SUBTYPE AND MACRRIND)$, REMREQ=((.SUBTYPE AND 7) NEQ 0)$, UNLESSQUOTED(SORD)=IF NOT .ID(QUOTE)SORD THEN$; ! H. MACROS USEFUL FOR DEFINING STANDARD (ALLOCATED) SYMBOLS. MACRO DEFEXT(STE)=(EXTERNAL DEFASYM,DEFMAP,PEXTERNAL; DEFASYM(STE,2,0,16); DEFMAP(STE); ST[STE,LNKGNMF]_.DFLTLNKGLX; PEXTERNAL(0,2,STE))$; !------------------------------------------------------------ !18. LONG STRING AND PLIT ASSOCIATED FIELDS AND CONSTANTS MACRO LEXEMEF=0,0,36$, ! NORMAL CELL HANGING FROM PLIT LIST LBYTE =0,8,8$, RBYTE =0,0,8$, DUPLENGTH=0,0,36$, ! NUMBER OF DUPLICATED SUBLISTS LSLENGTH=0,0,36$; ! LONG STRING LENGTH IN WORDS BIND LONGESTPLI=200, ! MAX NUMBER OF WORDS IN PLIT CHTLEX=0, ! CELL CONTAINS A LEXEME CHTPLIT=0, ! CELL IS A PLIT HEADER CHTDUP=1, ! CELL IS A DUPLICATION HEADER CHTLONGS=0; ! CELL IS A LONG STRING HEADER