! File: OF2.BLI ! ! 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. MODULE OF2(TIMER=EXTERNAL(SIX12))= BEGIN REQUIRE COMMON.BEG; REQUIRE PREDEF.BEG; REQUIRE GTST.BEG; REQUIRE ST.BEG; REQUIRE GTX.BEG; REQUIRE LDSF.BEG; REQUIRE LDSFT.BEG; REQUIRE STRUCT.BEG; REQUIRE TN.BEG; BEGIN EXTERNAL IST,ISTG,TNCHAIN; MACRO IDT(VALUE,ADDINF)=(DT[VALUE]_ADDINF;DTPF[VALUE]_0)$; ROUTINE DCLEXT(N1,N2)= BEGIN ISTG(.N1,.N2,EXTERNALT,0); DEFEXT(.STE); LEXOUT(BNDVAR,.STE) END; GLOBAL ROUTINE ONCEF2= BEGIN ! THIS IS DUPLICATE IN FUNCTION TO OF1 BIND REGSPLIT=PLIT( 'PC', PCREG<0,36>, 'SP', SPREG<0,36>, 'VREG', VVREG<0,36>, 'R0', RR0<0,36>, 'R1', RR1<0,36>, 'R2', RR2<0,36>, 'R3', RR3<0,36>, 'R4', RR4<0,36>, 'R5', RR5<0,36> ); INCR I FROM 0 TO .REGSPLIT[-1]-2 BY 2 DO BEGIN MAP STVEC STE; ISTG(.REGSPLIT[.I],0,REGT,0); .REGSPLIT[.I+1]_.STE; STE[MODE]_0; STE[POSF]_0; STE[SIZEF]_16; END; TNCHAIN<18,18>_TNCHAIN<0,18>_TNCHAIN<0,0>; ! H. NOW INITIALIZE RESERVED WORD DELIMITER SYMBOL ! TABLE ENTRIES (CONTINUED). ! SEE RUND AND SKAN IN "LEXSYN.BLI". ! ! TABLE FORMAT: ! ! THOSE DELIMITER CHARACTERS (NON-ALPHANUMERIC) FOR WHICH ! NO SPECIAL EDITING FUNCTION EXISTS--E.G. BLANK,!,%, ETC.-- ! ARE USED AS INDICES INTO THE DELIMITER TABLE, DT. THE POS- ! ITIONS WHICH SUCH CHARACTERS INDEX MUST CONTAIN A DELIMITER ! LEXEME (VALUE OF DEL), EVEN IF IT MAY NOT BE USED IN THE ! LANGUAGE--E.G. &. ! ! THE REMAINING POSITIONS ARE AVAILABLE FOR USE BY RESERVED WORDS, ! WHOSE ST ADDITIONAL INFORMATION WORD IS AN INDEX TO ! ITS CORRESPONDING LEXEME (SEE IST IN "ONCE.BLI"). ! ! LEAVE NOTES WHEN A RESERVED WORD IS DELETED AND MAKE ! ADDITIONS FROM THE POINT SO MARKED (SEQUENTIALLY). THE TABLE ! MAY SAFELY BE EXPANDED BEYOND #200 (# 7-BIT ASCII CHARS) WORDS ! BY CHANGING DTSIZE IN BEGIN.BLI. BEGIN BIND IST0PLIT=PLIT( 'BEGIN',HBEGIN, #1, 'CASE', HCASE, #2, 'DECR', HDECR, #3, 'IF', HIF, #4, 'INCR', HINCR, #5, 'SET', HSET, #6, 'UNTIL',HUNTIL, #7, 'WHILE',HWHILE, #10, 'DO', HDO, #11, ! 'EXCHJ',HEXCHJ, #12, ! EXCHJ IS NOW A ROUTINE NAME INSTEAD OF A DELIMITER 'AT', HCRAT, #15, 'END', HEND, #16, 'OF', HOF, #17, 'FROM', HFROM, #20, 'THEN', HTHEN, #21, 'TO', HTO, #22, 'TES', HTES, #23, 'ELSE', HELSE, #24, 'BY', HBY, #25, 'NSET', HNSET, #27, 'TESN', HTESN, #30, 'OR', HOR, #33, 'XOR', HXOR, #34, 'EQV', HEQV, #35, 'AND', HAND, #36, 'NOT', HNOT, #37, 'LSS', HLSS, #40, 'LEQ', HLEQ, #41, 'EQL', HEQL, #42, 'NEQ', HNEQ, #43, 'GEQ', HGEQ, #45, 'MOD', HMOD, #47, 'DIV', HDIV, #57, ! ALSO TAKES CARE OF "/" . 'OWN', HOWN, #61, 'MAP', HMAP, #66, 'BIND', HBIND, #67, 'LOCAL',HLOCAL, #70, 'MACRO',HMACRO, #71 ); BIND ISTPLIT=PLIT( 'CREAT','E', HCREATE, #12, 'LENGT','H', HLENGTH, #14, 'SELEC','T', HSELECT, #26, 'ALWAY','S', HALWAYS, #31, 'OTHER','WISE', HOTHERWISE, #32, 'REGIS','TER', HREGISTER, #60, 'GLOBA','L', HGLOBAL, #62, 'EXTER','NAL', HEXTERNAL, #63, 'ROUTI','NE', HROUTINE, #64, 'STRUC','TURE', HSTRUCTURE, #65, 'FORWA','RD', HFORWARD, #77 ); INCR I FROM 0 TO .IST0PLIT[-1]-3 BY 3 DO IST(.IST0PLIT[.I],0, .IST0PLIT[.I+1], .IST0PLIT[.I+2]); INCR I FROM 0 TO .ISTPLIT[-1]-4 BY 4 DO IST(.ISTPLIT[.I], .ISTPLIT[.I+1], .ISTPLIT[.I+2], .ISTPLIT[.I+3]); END; BEGIN BIND IDTPLIT=PLIT( 0, ERRLEX, "$", ERRLEX, ! POSITION ONLY REQUIRED "&", ERRLEX, ! #46 "(", HPARAOPEN, ! #50 ")", HPARACLOSE, ! #51 "*", HMULT, ! #52 "+", HADD, ! #53 ",", HCOMMA, ! #54 "-", HMINUS, ! #55 "@", HDOT, ! N.B. @ IS TREATED EXACTLY LIKE . ".", HDOT, ! #56 ":", HCOLON, ! #72 ";", HSEMICOLON, ! #73 "<", HPOINTOPEN, ! #74 "=", HEQUAL, ! #75 ">", HPOINCLOSE ! #76 ); INCR I FROM 0 TO .IDTPLIT[-1]-2 BY 2 DO IDT(.IDTPLIT[.I], .IDTPLIT[.I+1]); END; BEGIN EXTERNAL EXCHJLNKG; BIND DCLEXTPLIT=PLIT( LEXCREATE, '$CREA','T', LEXEXCHJ, 'EXCHJ', 0, LEXMUL, 'MUL', 0, LEXDIV, 'DIVR', 0, LEXMOD, 'MODR', 0, LEXROT, 'ROTAT','E', LEXSHIFT, 'SHIFT', 0, LEXBREG, '$BREG', 0, LEXPREV, '$PREV', 0, LXSIGV, 'SIGVA','L', LXSIGR, 'SIGRE','G', LXSIGL, '$SIGN','L', LXSIG1, '$SIGN','1', LXENAB, '$ENAB','L', LXSAV2, '$SAV2', 0, LXSAV3, '$SAV3', 0, LXSAV4, '$SAV4', 0, LXSAV5, '$SAV5', 0, LXINT612, 'INIT6','12', ! INITIALIZATION CALL TO SIX12 LXY612, 'ESIX1','2', ! ENABLE CALL TO SIX12...DO NOT CHANGE THESE NAMES !!!!! LXE612, 'SIX12', 0, ! ROUTINE ENTRY CALL TO SIX12 LXX612, 'XSIX1','2', ! ROUTINE EXIT CALL TO SIX12 LXHLNK, '$LINK', 0, LXIHLNK, '$ILIN','K', LXHLTB, 'LINKT','B' ); INCR I FROM 0 TO .DCLEXTPLIT[-1]-3 BY 3 DO .DCLEXTPLIT[.I]_ DCLEXT(.DCLEXTPLIT[.I+1],.DCLEXTPLIT[.I+2]); ST[.LEXEXCHJ,LNKGNMF]_.EXCHJLNKG; END; BEGIN EXTERNAL SPEC1LNKG,SPEC2LNKG; BIND SPCFNPLIT=PLIT( LXHALT, 'HALT', 0, SPEC2LNKG, 0, LXRESET, 'RESET', 0, SPEC1LNKG, 1, LXWAIT, 'WAIT', 0, SPEC1LNKG, 2, LXNOP, 'NOP', 0, SPEC1LNKG, 3, LXSWAB, 'SWAB', 0, SPEC1LNKG, 4, LXCARRY, 'CARRY', 0, SPEC1LNKG, 5, LXOVFLOW, 'OVERF', 'LOW', SPEC1LNKG, 6, LXMFPI, 'MFPI', 0, SPEC1LNKG, 7, LXMFPD, 'MFPD', 0, SPEC1LNKG, 8, LXMTPI, 'MTPI', 0, SPEC1LNKG, 9, LXMTPD, 'MTPD', 0, SPEC1LNKG, 10 ); INCR I FROM 0 TO .SPCFNPLIT[-1]-5 BY 5 DO BEGIN ISTG(.SPCFNPLIT[.I+1], .SPCFNPLIT[.I+2], SPECFUNT, .SPCFNPLIT[.I+4]); .SPCFNPLIT[.I]_LEXOUT(BNDVAR,.STE); STE[LNKGNMF]_..SPCFNPLIT[.I+3] END END; END; END END