New documentation for Apple Logo: Switches and modes and who uses them: DEFFLG Defining a Ufun if nonzero. Set by TO when it is called from an eval-buffer. When set, the EVLBUF loop conses lines onto the procedure definition DEFATM, unless the first token in the line is END. Reset by EXTDEF and REINIT. DEFATM Atom (name) of Ufun currently being defined. Reset to nil by EXTDEF. Set by DEFSTP (called by TO). TO links DEFBOD to DEFATM, END tries to create a packed body and link it to DEFATM. DEFBOD Body of Ufun currently being defined. Reset to nil by EXTDEF, REINIT. EDLINE appends ufun lines onto it. TO inits it to the arglist and links it to the DEFATM. END calls STUFF to try and create a packed body from it. OTPFLG Type-outer-quotes if nonzero. Set during print-to-buffer mode, and elsewhere. TYPE prints outer funny-pname quotes if set. PONAME uses MAKE in place of IS if set. Reset by RSTIO, RSTIO1. INPFLG Indicates eval-buffer mode if nonzero. POPLST won't print anything if set; EVLBUF exits eval-buffer mode if reset. EDDONE, SREAD set it. Various graphics and filing commands and END check it. PRSFLG Indicates that the parser is running if nonzero. Used to lift node allocation limit. Parser sets and resets it when done; RSTIO, RSTIO1 reset it. REQUEST sets it negative before calling the parser, so the parser will parse input as a list. Sort-of-shared variables: ERRRET Error handler routine address. Set to default by REINIT, and ERROR (which dispatches from prior setting). GARCOL sets to GCLERR at start, then resets to ERROR1 when done. ERRY (Really ANSN3) Error code temporary, used between ERROR and ERROR1, so any ERRRET routines shouldn't bash it. YSAV1 Very low-level temporary. Here's who uses it: CRUNP, CRUNP1, EDOUT, COUT (all for Y-reg temp.), HLINE (dot counter). PLINE Index into parse-string. Used by the parser, PARSEL, EDIN (to set the point to the next line), GETLN. How to add new primitives: Index entry Primitive-table entry Primitive address entry How to add new error messages: Index entry Message-table entry Message text entry Subroutines which hack flags: RSTIO Resets INPFLG, OTPFLG, I/O device drivers, PRSFLG. Called by: EVLBUF (when finished evalling buffer) REINIT SYSBUG, DERROR, ERROR All Filing commands SETUP (monitor re-entry) GTPRV (line editor previous-line function) RSTIO1 Resets OTPFLG, I/O device drivers, PRSFLG. Called by: PARSEL (parse a list, for RUN, REPEAT, and DEFINE). EXTDEF Resets OTPFLG, DEFBOD, DEFATM. Called by: ERROR (except for XBRK) END Graphics structure (shared variables, etc.) I/O Structure (Drivers, interfaces, etc.) Special variable usage: MARK1: Parser PTFTXT UNSTUF CNSPDL LPUT, LIST, SE, DEFINE, TEXT, TO, TS MARK2: UNSTUF WORD, LPUT, LIST, SE MARK3: WORD, LPUT, SE MARK4: WORD NARG1: Parser Number-parsing Number-typing Arithmetic Number-passing Numerical conversions Arithmetic primitives NARG2: Number-parsing Number-typing Arithmetic Number-passing Numerical conversions Arithmetic primitives NARGX: Number-parsing Arctangent routine A1L: Editor, Infix operations, Number-parsing A2L: Editor, Infix operations A3L: Editor, Infix operations A4L: Editor, Infix operations A5L: Graphics Changes to make: WORD should use MARK1-3 instead of MARK2-4 Graphics/editor/music-only vars can use same p.z. locations (XSCR would be a real p.z. variable, then) Old doc: Reference Documentation for Apple-Logo Interpreter Source Code Written by Stephen L. Hain, Patrick G. Sobalvarro, and Leigh L. Klotz Massachusetts Institute of Technology (Program structure developed by the M.I.T. Logo Group) List of Subroutines for Apple Logo interpreter: DSPTYP Type in A, table in XY; dispatches off of type and table EDLINE Add line ILINE to current procedure definition MKSFUN Make system function entry A with pointer X POPFRM Pops a frame, restoring bindings RSTBND Restores bindings of procedure from PDL PUSHP Push X on PDL PUSH Push value/pointer XY on PDL PUSHB Push byte A on PDL VPUSH Push value/pointer XY on the VPDL VPUSHP Push X on the VPDL POP Pop X from PDL, don't change X VPOP Pop X from the VPDL, don't change X POPB Pop A from VPDL STKTS1 Tests for stack collision, if so error TSTPOL Tests for stack collision, if so error, else polls (POLL) POLL Polls for interrupts/buffer characters (except Pause) POLLZ Polls for interrupts/buffer characters, including Pause GETVAL Get value from atom Y into X PUTVAL Put value X in binding Y GETFUN Get function A (NIL if not found) from object X, returning type in Y GETCFN GETFUN(FUNCT,CURTOK) GTCFN1 GETFUN(FUNCT,(X)) GETPRC Get precedence in A of function X GETNGS Get number of args in A of function X INFIXP Return Carry Set if FUNCT infix, with index in A PTFTXT Put function text with text Y, atom X, and no. args A UNFUNC Delete function X UNFNC1 UNFUNC(ARG1) ERNAMS Erase all value bindings. ERPROS Erase all ufuns. CONS Get new node pointer ANSN, with car Y, cdr X, and type A PUTTYP Put type A in node X GETTYP Get type of node X in A TYPACS Return the type of node TEMPNH (from the typebase, i.e. no Q,D,LATOMs) GETWDS Gets a pointer to a block of Y contiguous words in X (NIL if none) GETULN Get uline X (NIL if comments) from body Y GETALN GETULN(ARGLST,FBODY) ULNADV Advance function line X GLNADV ULNADV(GOPTR) GTNXTK Get NEXTOK from TOKPTR TTKADV Advance token pointer X (NIL if comments) TOKADV TTKADV(TOKPTR) TFKADV Advance token pointer X SKPPTH Skips past a token or parenthesized expression EXIFSC Skip an IF clause, returning with next token in X DEFSTP Checks mode and argument token (error if not OK) for procedure definition EXTDEF Cleans up from edit mode STUFF Associates function body X with atom A UNSTUF Unstuff Body of function X into Y INTERN Intern string X, returning atom Y INTRNX Intern string X (known to be unique), returning atom Y GETLEN Get number of elements of list Y in X GTLSTC Get last element of list X in X PRTSTR Print string pointed to by XY LTYPE Type X, with A zero if toplevel brackets to be typed (for lists) TYPATM Types an atom for LTYPE TPSATM Types an Satom for LTYPE TYPFIX Type 2-byte fixnum X TPBFIX Type 4-byte fixnum NARG1 TYPFLO Type flonum NARG1 PRTPDL Type the string on the PDL of length ANSN1 PONAMS Print out names PONAME Print out name for PONAMS POFUNS Print out procedures, titles only if A zero POFUN Print out function A, title only if X zero POFUNX Print out function A, title only if FULL zero LODNUM Loads number pointed to by X into address X GETNUM Gets number and type A from X, returning Carry Clear if successful. GTNUM1 Gets number and type A from NARG1, returning Carry Clear if successful. GTNUM2 Gets number and type A from ARGSAV into NARG2, Carry clear if successful. GTNM2X Gets number and type A from NARG2, returning Carry Clear if successful. GT1NUM Gets a number NARG1 from the VPDL, else error, returns Carry Set if flonum GT1NMX Gets a number from NARG1, else error, returns Carry Set if flonum GT2NUM Gets two numbers NARG1 and NARG2 from VPDL, else error, coercing to real if not both integers, returns Carry Set if flonums GT1FIX Gets an integer NARG1 from the VPDL, else error GT2FIX Gets two integers NARG1, NARG2 from the VPDL, else error CHKINT Returns Carry Set if integer X is larger than two bytes; sign of A is sign of no. CHKPBN Returns Carry clear if integer is two bytes max. and positive, else carry set CHKPIN Returns Carry clear if integer is one byte max. and positive, else carry set ATMTNM Get number NARG1 from X ATMTNX Get number NARG1 from ANSN1 GOBDIG Processes the next character for ATMTNM/NX. GTBOOL Checks if X is boolean, error if not, returns Y zero if TRUE MAKPNM Get pname Y from X GETPNM Get pname Y from atom X CNSPDL Makes String from PDL, given length ANSN1 and pointer in A CNSPD1 Makes String from PDL, given length ANSN1 and pointer on proc. stack (so JMP to only) CVFIX Converts four-byte fixnum NARG1 to characters on PDL CVFIXX Used by CVFLO to get the exponent (like CVFIX) CVBFIX Converts two-byte fixnum X to characters on PDL CVFLO Converts flonum NARG1 to characters on PDL GTDECH Gets the next decimal digit for CVFLO GETINT Gets the next digit for GTDECH, CVFLO OTFXS1 Output two-byte fixnum NARG1 to VPDL OTPFXS Output two-byte fixnum Y to VPDL OTPFL1 Output flonum NARG1 to VPDL OTPFX1 Output fixnum NARG1 to VPDL OTPFLO Output flonum Y to VPDL OTPFIX Output fixnum Y to VPDL IMULT Multiply fixnums NARG1 and NARG2 (bashed), result in TEMPN,1, sets carry if overflow IDIVID Divide fixnum NARG1 by fixnum NARG2, result in NARG1 XDIVID Divide pos. fix. NARG1 by pos. fix. NARG2, res. in NARG1, rem. in NARG2, A (low byte) OTPRG1 Output ARG1 to the PDL PTRXOK Makes X suitable for ERROR (which should be called immediately) PTRYOK Makes Y suitable for ERROR (which should be called immediately) ERROR Error break of type A with optional args Y (first) and X (second) SYSBUG System Bug error, breaks to monitor, calling point in $00,$01 GARCOL Does a garbage-collect CLRMRK Clear all the mark bits in from Nodespace MARKA Mark contiguous area of size X pointed to by Y MARK Mark node X MARKX Mark node TEMPN SWAPT1 Swaps temporaries out for GARCOL SWAPT2 Swaps temporaries in for GARCOL GETLIN Read a line into the LINARY and set PLINE PGTLIN Type the prompt in A, read a line into the LINARY and set PLINE PARSTR Parse a line starting at Y, with list pointer X, Y nonzero if error PRSLIN Parse a line starting at PLINE, with list pointer X, Y nonzero if error ALLSTC Allocates a new list cell for the parser POPLST Pops and discards the pushed list pointers for the parser SELFDL Returns Carry Set if A (returned same) is self-delimiter PARSEL Dump and reparse the list ARG1 to TOKPTR Number utility routines: CNUML0 Initializes pname-to-number processing CNUML1 Processes a new digit A of a pname-to-number, returns Carry clear if illegal CNUML2 Finishes processing a pname-to-number, returns Carry clear if overflow XN1TOY Transfer NARG1 to Y. XYTON1 Transfer Y to NARG1. XN2TOY Transfer NARG2 to Y. XYTON2 Transfer Y to NARG2. DIGITP Returns Carry Set if A is a digit NMROL1 Multiply NARG1 by 2. NMROR1 Divide NARG1 by 2. MULN10 Multiply flonum NARG1 by 10. FDVD10 Divide flonum NARG1 by 10. XDVDX Divide fixnum NARG1 by A. ADDDIG Add ascii digit A to fixnum NARG1. FADDIG Add ascii digit A to flonum NARG1, breaks out with Carry Clear if overflow. FADDGX Add ascii digit A to flonum NARG1, returns Carry Set if overflow. FADDGN Add numerical decimal (<1) digit A to flonum NARG1. ADDNUM Add fixnum A1L to fixnum NARG1. INCEXP Process an exponent character A. Floating-point Arithmetic routines: FLOTN1 Make integer NARG1 floating-point. FLOTN2 Make integer NARG2 floating-point. XFLOAT Make positive integer NARG1 floating-point. INTN1 Make flonum NARG1 a fixnum, don't round XINTN1 Round up positive flonum NARG1 to a fixnum. RNDN1 Make flonum NARG1 a fixnum (rounds), error if overflow RNDN2 Make flonum NARG2 a fixnum (rounds), error if overflow SWAP Swap NARG1 and NARG2. FADD Floating point add, NARG1 gets NARG1 + NARG2. FSUB Floating point subtract, NARG1 gets NARG1 - NARG2 FSUBX Floating point subtract, NARG1 gets NARG2 - NARG1. FMUL Floating point multiply, NARG1 gets NARG1 * NARG2. FDIV Floating point divide, NARG1 gets NARG1/NARG2. FDIVX Floating point divide, NARG1 gets NARG2/NARG1. XDIVID Integer divide, NARG1 gets NARG1/NARG2. COMPL Complements fixnum X. FCOMPL Complements flonum NARG1. Screen Editor/Filing routines: CHGSTP Checks mode and argument for screen editor and dispatches to proper set-up routine (error if not OK) CHGNON, CHGNEW, or CHGOLD. CHGIN1 Initialize buffer-filling. CHGIN2 Initialize screen and editor. CHGIN3 Display buffer and call editor top-loop. CHGOLD Starts screen editor with a procedure in the buffer. CHGNEW Starts screen editor with TO definition line in buffer. CHGNON Starts screen editor with an empty buffer. INCPNT Increments the point DECPNT Decrements the point PNTBEG Sets the point to beginning of buffer TOPSCR Sets cursor at top left of screen. CHGLOP Top level screen editor loop. EDOUT Set up to output character A to buffer. EDSPBF Display page of buffer from point on. EDDONE Evaluates edit buffer and returns to Logo. CHGNYM Displays "Apple Logo Screen Editor" indicator. DOSSTP Initializes DOS and tells it to listen to our output. STDERR Tells DOS that error-return routine is DERROR. SAPOUT Tells DOS to listen to our output. DOSEAT Internal DOS subroutine which initializes output-listening. DERROR Gives appropriate filing error. DTPATM Type atom ARG1 coded for DOS. DPRLEN Type buffer length as DOS-coded hexadecimal digits. Temporary Variable Usage Table: Routines which use no temporary variables: CHKINT COMPL DIGITP EXTDEF GTNXTK POLL POLLZ POP POPB PUSH PUSHB PUSHP TSTPOL TSTSTK VPOP VPUSH VPUSHP (All Monitor Routines) First-level Routines: GETLEN TNH TN GETNGS TNH GETPRC TNH GETTYP TNH GETULN TNH GETVAL TNH GTLSTC AN TNH INFIXP TNH PRTPDL CCOUNT PRTSTR TNH PUTTYP TNH PUTVAL TNH TFKADV TNH TTKADV TNH TYPACS TNH ULNADV TNH UNFUNC TNH Second-level Routines: CONS AN TNH PUTTYP: TNH DEFSTP RG1 GETTYP: TNH TTKADV: TNH GETFUN AN TN GETTYP: TNH PUTFUN AN AN1 TNH GETTYP: TNH Third-level Routines: CNSPDL: AN1 TN MK1 CONS: AN TNH CNSPD1: AN1 TN MK1 CONS: AN TNH EDLINE TN TN1 CONS: AN TNH UNSTUF AN1 TNH TN TN1 TN2 TN3 TN4 GETTYP: TNH PUTTYP: TNH CONS: AN TNH Sixth-level Routines: GTBOOL AN1 TX1 INTERN: AN AN1 AN2 TNH TN TN1 TN2 TN4 TN5 Seventh-level Routines: POFUN AN1 AN4 TN6 TN7 TN8 TX1 GETFUN: AN TNH TN PRTSTR: TNH GETTYP: TNH LTYPE: AN AN1 AN2 AN3 TNH TN TN1 TN4 TN5 NG1 NG2 A1L A2L MK1 POFUNX AN1 AN4 TN6 TN7 TN8 TX1 GETFUN: AN TNH TN PRTSTR: TNH GETTYP: TNH LTYPE: AN AN1 AN2 AN3 TNH TN TN1 TN4 TN5 NG1 NG2 A1L A2L MK1 PONAME TN7 GETVAL: TNH GETTYP: TNH PRTSTR: TNH LTYPE: AN AN1 AN2 AN3 TNH TN TN1 TN4 TN5 NG1 NG2 A1L A2L MK1 Eighth-level Routines: GETNUM AN1 TNH NG1 GETTYP: TNH ATMTNX: AN AN1 AN2 TNH TN TN1 TN4 TN5 TN6high TX1low NG1 NG2 NGX A1L A2L MK1 GTNUM1 AN1 TNH NG1 GETTYP: TNH ATMTNX: AN AN1 AN2 TNH TN TN1 TN4 TN5 TN6high TX1low NG1 NG2 NGX A1L A2L MK1 POFUNS AN4 TX2 POFUNX: AN AN1 AN2 AN3 AN4 TNH TN TN1 TN4 TN5 TN6 TN7 TN8 TX1 NG1 NG2 A1L A2L MK1 PONAMS TN6 TN8 PONAME: AN AN1 AN2 AN3 TNH TN TN1 TN4 TN5 TN7 NG1 NG2 A1L A2L MK1 Ninth-level Routines: GTNUM2 TX1 NG2 A3L A4L GETNUM: AN AN1 AN2 TNH TN TN1 TN4 TN5 TN6high TX1low NG1 NG2 NGX A1L A2L MK1 GT1FIX GETNUM: AN AN1 AN2 TNH TN TN1 TN4 TN5 TN6high TX1low NG1 NG2 NGX A1L A2L MK1 RNDN1: AN TNH TN NG1 NG2 GT1NUM NG1 GTNUM1: AN AN1 AN2 TNH TN TN1 TN4 TN5 TN6high TX1low NG1 NG2 NGX A1L A2L MK1 GT1NMX GTNUM1: AN AN1 AN2 TNH TN TN1 TN4 TN5 TN6high TX1low NG1 NG2 NGX A1L A2L MK1 Tenth-level Routines: GT2FIX TX1 NG1 RNDN1: AN TNH TN NG1 NG2 RNDN2: AN TNH TN NG1 NG2 GETNUM: AN AN1 AN2 TNH TN TN1 TN4 TN5 TN6high TX1low NG1 NG2 NGX A1L A2L MK1 GTNUM2: AN AN1 AN2 TNH TN TN1 TN4 TN5 TN6high TX1low NG1 NG2 NGX A1L A2L MK1 GT2NUM AN3 TX2 NG1 FLOTN1: NG1 FLOTN2: NG1 NG2 GETNUM: AN AN1 AN2 TNH TN TN1 TN4 TN5 TN6high TX1low NG1 NG2 NGX A1L A2L MK1 GTNUM2: AN AN1 AN2 TNH TN TN1 TN4 TN5 TN6high TX1low NG1 NG2 NGX A1L A2L MK1 Bottom-level Routines (not called as subroutines): AL2 ANSN ARGLOP ANSN EVAL TEMPN (GETVAL: ) EVLINE TEMPN (GETTYP: ) (TTKADV: ) EVWRAP ANSN2 (TTKADV: ) INITLZ TEMPN (CLRMRK: ) SBOTH ANSN1 (GTBOOL: ANSN) SBTFST ANSN1* TEMPN* TEMPN1* TEMPN2* (CONS: ANSN) (GETTYP: ) (INTERN: ANSN ANSN1 ANSN2 TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4 TEMPN5) (MAKPNM: ANSN ANSN1 ANSN2 ANSN3 TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4) SBTLST ANSN1* ANSN2* TEMPN* TEMPN1* TEMPN2* TEMPN5 (CONS: ANSN) (GETTYP: ) (INTERN: ANSN ANSN1 ANSN2 TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4 TEMPN5) (MAKPNM: ANSN ANSN1 ANSN2 ANSN3 TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4) SDEFIN TN1 TN2 TN3 TN5 RG1 RG2 GETTYP: TNH CONS: AN TNH UNFUNC: TNH STUFF: AN AN1 AN2 AN3 AN4 TNH TN TN1 TN2 TN3 TN4 TN5 TN6 TN7 TN8 TX1 TX2 INTERN: AN AN1 AN2 TNH TN TN1 TN2 TN4 TN5 SDIF TEMPN1* (GT2NUM: ANSN ANSN1 ANSN2 TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4 TEMPN5 TEMPN6) (OTPNUM: ANSN TEMPN) SDIVID ANSN* (GT2NUM: ANSN ANSN1 ANSN2 TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4 TEMPN5 TEMPN6) (OTPNUM: ANSN TEMPN) (XDIVID: TEMPN TEMPN1) SEDIT TEMPN1* TEMPN5* TEMPX1 (DEFSTP: ) (GETFUN: ANSN TEMPN) (GETLEN: TEMPN) (PTFTXT: ANSN ANSN1 ANSN2 ANSN3 ANSNX TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4 TEMPN5 TEMPN6 TEMPN7 TEMPN8) (UNSTUF: ANSN ANSN1 ANSN2 TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4) SEITHR ANSN1 (GTBOOL: ANSN) SELSE TEMPN2 (EXIFSC: ANSN ANSN1 TEMPN TEMPN1) SEQUAL ANSN* ANSN1* TEMPN7 TEMPN8 (GETNUM: ANSN ANSN1 ANSN2 TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4 TEMPN5 TEMPN6) (GETTYP: ) SFIRST TEMPN5* TEMPN6 (CONS: ANSN) (GETTYP: ) (INTERN: ANSN ANSN1 ANSN2 TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4 TEMPN5) (MAKPNM: ANSN ANSN1 ANSN2 ANSN3 TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4) SGO TEMPN TEMPN1 (GETTYP: ) (GTTULN: ) (PUTTYP: ) (TTKADV: ) (ULNADV: ) SLAST TEMPN* (CONS: ANSN) (GETTYP: ) (GTLSTC: ANSN) (INTERN: ANSN ANSN1 ANSN2 TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4 TEMPN5) (MAKPNM: ANSN ANSN1 ANSN2 ANSN3 TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4) SLPUT TEMPN TEMPN1 TEMPN2 (CONS: ANSN) (GETTYP: ) SNODES TEMPN1 (OTPNUM: ANSN TEMPN) SPO TEMPN1* (GETFUN: ANSN TEMPN) (GETTYP: ) (POFUNS: ANSN ANSN1 ANSN2 TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4 TEMPN5 TEMPN6 TEMPN7 TEMPN8 TEX1 TEMPX2) (PONAMS: ANSN TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4 TEMPN5 TEMPN6 TEMPN7 TEMPN8) (POTEXT: ANSN ANSN1 ANSN2 TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4 TEMPN5 TEMPN6 TEMPN7 TEMPN8 TEMPX1) (TTKADV: ) SPROD ANSN* TEMPN1* (GT2NUM: ANSN ANSN1 ANSN2 TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4 TEMPN5 TEMPN6) (OTPNUM: ANSN TEMPN) SREAD1 TEMPN (GETTYP: ) SSUM TEMPN1* (GT2NUM: ANSN ANSN1 ANSN2 TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4 TEMPN5 TEMPN6) (OTPNUM: ANSN TEMPN) STEXT TEMPN1* TEMPN2* TEMPN5 TEMPN6 (CONS: ANSN) (GETFUN: ANSN TEMPN) (GETTYP: ) (UNSTUF: ANSN ANSN1 ANSN2 TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4) STITLE ANSN1* TEMPN* TEMPN1 TEMPN2 TEMPN3 (GETFUN: ANSN TEMPN) (GETTYP: ) (PUTFUN: ANSN ANSN1) (UNFUNC: ANSN) STO TEMPX1 TEMPX2 (CONS: ANSN) (EDTSTP: ) (EXTEDT: ) (GETFUN: ANSN TEMPN) (GETTYP: ) (PTFTXT: ANSN ANSN1 ANSN2 ANSN3 ANSNX TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4 TEMPN5 TEMPN6 TEMPN7 TEMPN8) (TFKADV: ) STRCBK ANSN1 TEMPN6 TEMPN7 TEMPN8 TEMPX1 TEMPX2 (LTYPE: ANSN TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4 TEMPN5) SWORD ANSNX TEMPN6 (CONCAT: ANSN ANSN1 TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4 TEMPN5) (COPY: ANSN1 TEMPN TEMPN1 TEMPN2 (CONS: ANSN)) (CONCAT: ANSN1* TEMPN* TEMPN1* TEMPN3 TEMPN4 TEMPN5 (GTLSTC: ANSN) (COPY: ANSN ANSN1 TEMPN TEMPN1 TEMPN2)) (INTERN: ANSN ANSN1 ANSN2 TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4 TEMPN5) (MAKPNM: ANSN ANSN1 ANSN2 ANSN3 TEMPN TEMPN1 TEMPN2 TEMPN3 TEMPN4) TOPLOP TEMPN (GETTYP: ) XSFNCL TEMPN XTAIL TEMPN2 TEMPN3 TEMPN4 TEMPN5 (GETVAL: ) (GTTULN: ) (INCVSP:) (PTRDEC: TEMPN5) (INCVSP: ) (PTRDEC: TEMPN5) (PTVTST: TEMPN5) (STPTR1: TEMPN5) (PTVTST: TEMPN5) (PUTVAL: ) (STPTR1: TEMPN5) (TTKADV: ) XUFNCL TEMPN TEMPN1 TEMPN2 TEMPN5 (GETVAL: ) (GETTYP: ) (GTTULN: ) (INCVSP:) (PTRDEC: TEMPN5) (PTVTST: TEMPN5) (PUTVAL: ) (STPTR1: TEMPN5) (TTKADV: ) GARCOL ANSN1 TEMPN* TEMPN3 TEMPN4 (CLRMRK: ) (MARK: ANSN TEMPN TEMPN1 TEMPN2) (MARKA: TEMPN) (TYPACS: ) (MARKX: ANSN TEMPN TEMPN1 TEMPN2) MARK ANSN TEMPN TEMPN1 TEMPN2 (TYPACS: ) MARKX " MARKA TEMPN (TYPACS: ) CLRMRK TNH SOBST1 TEMPN (PUTTYP: ) REINIT ANSN* ANSN2* ANSN3 TEMPN* TEMPN1* TEMPN2* TEMPN3 (CONS: ANSN) (INTRNX: ANSN ANSN1 ANSN2 TEMPN TEMPN1 TEMPN2) (MKSFUN: ANSN TEMPN1) (SOBST1: TEMPN) (MKSFUN: TEMPN1 (CONS: ANSN)) (SOBST1: TEMPN) Parser: ALLSTC TN TX2 MK1 POPLST TN1 TN8 SELFDL AN3 TN4high TN7high TN8 GETLIN AN3 AN4 TN TN1 TN2 TN4high TN5 TN6 TN7high TN8 TX1 TX2 MK1 POPLST: TN1 TN8 ALLSTC: TN TX2 MK1 SELFDL: AN3 TN4high TN7high TN8 CONS: AN TNH PRTSTR: TNH CNUML0: TN5 TN6high TX1low NG1 CNUML1: AN TNH TN TN5 TN6high TX1low NG1 NG2 NGX A1L A2L CNUML2: AN TNH TN TN5 TN6high TX1low NG1 NG2 NGX A1L A2L INTERN: AN AN1 AN2 TNH TN TN1 TN2 TN4 TN5 PUTTYP: TNH PARSTR AN3 AN4 TN TN1 TN2 TN4high TN5 TN6 TN7high TN8 TX1 TX2 MK1 POPLST: TN1 TN8 ALLSTC: TN TX2 MK1 SELFDL: AN3 TN4high TN7high TN8 CONS: AN TNH PRTSTR: TNH CNUML0: TN5 TN6high TX1low NG1 CNUML1: AN TNH TN TN5 TN6high TX1low NG1 NG2 NGX A1L A2L CNUML2: AN TNH TN TN5 TN6high TX1low NG1 NG2 NGX A1L A2L INTERN: AN AN1 AN2 TNH TN TN1 TN2 TN4 TN5 PUTTYP: TNH PGTLIN AN3 AN4 TN TN1 TN2 TN4high TN5 TN6 TN7high TN8 TX1 TX2 MK1 POPLST: TN1 TN8 ALLSTC: TN TX2 MK1 SELFDL: AN3 TN4high TN7high TN8 CONS: AN TNH PRTSTR: TNH CNUML0: TN5 TN6high TX1low NG1 CNUML1: AN TNH TN TN5 TN6high TX1low NG1 NG2 NGX A1L A2L CNUML2: AN TNH TN TN5 TN6high TX1low NG1 NG2 NGX A1L A2L INTERN: AN AN1 AN2 TNH TN TN1 TN2 TN4 TN5 PUTTYP: TNH PRSLIN AN3 AN4 TN TN1 TN2 TN4high TN5 TN6 TN7high TN8 TX1 TX2 MK1 POPLST: TN1 TN8 ALLSTC: TN TX2 MK1 SELFDL: AN3 TN4high TN7high TN8 CONS: AN TNH PRTSTR: TNH CNUML0: TN5 TN6high TX1low NG1 CNUML1: AN TNH TN TN5 TN6high TX1low NG1 NG2 NGX A1L A2L CNUML2: AN TNH TN TN5 TN6high TX1low NG1 NG2 NGX A1L A2L INTERN: AN AN1 AN2 TNH TN TN1 TN2 TN4 TN5 PUTTYP: TNH Number-parsing routines: SWAP NG1 NG2 MULN10 NG2 FMUL: AN TNH TN NG1 NG2 FDVD10: NG2 FDIV: AN TNH TN NG1 NG2 FADDGN NG1 NG2 NGX A1L A2L MULN10: AN TNH TN NG1 NG2 FLOTN2: NG1 NG2 FDIVX: AN TNH TN NG1 NG2 FADDGX NG2 FLOTN2: NG1 NG2 FADD: AN TNH TN NG1 NG2 FADDIG FADDGX: AN TNH TN NG1 NG2 CNUML0 TN5 TN6high TX1low NG1 CNUML2 TN5 TN6high TX1low NG1 NGX A1L A2L MULN10: AN TNH TN NG1 NG2 FDIVX: AN TNH TN NG1 NG2 FMUL: AN TNH TN NG1 NG2 CNUML1 TN5 TN6high TX1low A1L A2L NMROL1: NG1 ADDNUM: NG1 A1L A2L ADDDIG: NG1 NMROR1: NG1 FLOTN1: NG1 MULN10: AN TNH TN NG1 NG2 FADDIG: AN TNH TN NG1 NG2 FADDGN: AN TNH TN NG1 NG2 NGX A1L A2L INCEXP: TX1low FMDC1: NGX Arithmetic routines: XDIVID TN TN1 NG1 NG2 A1L A2L XDVDX TN TN1 NG1 NG2 A1L A2L FADD1 AN TNH TN NG1 NG2 FCOMPL NG1 FDIVD AN TNH TN NG1 NG2 FMULT AN TNH TN NG1 NG2 FSUB1 AN TNH TN NG1 NG2 FADD FADD1: AN TNH TN NG1 NG2 FDIV SWAP: NG1 NG2 FDIVD: AN TNH TN NG1 NG2 FDIVX FDIVD: AN TNH TN NG1 NG2 FLOTN1 NG1 FCOMPL: NG1 FLOTN2 SWAP: NG1 NG2 FLOTN1: NG1 FMUL FMULT: AN TNH TN NG1 NG2 FSUB SWAP: NG1 NG2 FSUB1: AN TNH TN NG1 NG2 FSUBX FSUB1: AN TNH TN NG1 NG2 INTN1 AN NG1 FCOMPL: NG1 XINTN1 NG2 FADD: AN TNH TN NG1 NG2 INTN1: AN NG1 RNDN1 NG1 FCOMPL: NG1 XINTN1: AN TNH TN NG1 NG2 RNDN2 SWAP: NG1 NG2 RNDN1: AN TNH TN NG1 NG2 Stuffing routines: GETWDS AN AN1 AN2 TNH TN TN1 TN2 TN3 TN4 PTFTXT AN3 AN4 TNH TN5 TN6 TN7 TN8 GETTYP: TNH GETWDS: AN AN1 AN2 TNH TN TN1 TN2 TN3 TN4 PUTTYP: TNH STUFF AN3 AN4 TNH TN TN1 TN3 TN5 TN6 TN7 TX1 TX2 GETLEN: TNH TN GETWDS: AN AN1 AN2 TNH TN TN1 TN2 TN3 TN4 PUTTYP: TNH PTFTXT: AN AN1 AN2 AN3 AN4 TNH TN TN1 TN2 TN3 TN4 TN5 TN6 TN7 TN8 Number-printing routines: CVFIX AN AN1 TN TN1 NG1 NG2 A1L A2L CVFIXX AN AN1 TN TN1 NG1 NG2 A1L A2L CVBFIX AN AN1 NG1 XDVDX: TN TN1 NG1 NG2 A1L A2L GETINT TN1 NG1 GTDECH AN1 TN1 NG2 FSUB: AN TNH TN NG1 NG2 FLOTN2: NG1 NG2 MULN10: AN TNH TN NG1 NG2 CVFLO AN1 AN2 AN3 TN1 NG1 FCOMPL: NG1 FADD: AN TNH TN NG1 NG2 MULN10: AN TNH TN NG1 NG2 FDVD10: AN TNH TN NG1 NG2 GETINT: TN1 NG1 GTDECH: AN AN1 TNH TN TN1 NG1 NG2 CVFIXX: AN AN1 TN TN1 NG1 NG2 A1L A2L TPBFIX CVBFIX: AN AN1 TN TN1 NG1 NG2 A1L A2L PRTPDL: AN1 TYPFIX CVFIX: AN AN1 TN TN1 NG1 NG2 A1L A2L PRTPDL: AN1 TYPFLO CVFLO: AN AN1 AN2 AN3 TNH TN TN1 NG1 NG2 A1L A2L PRTPDL: AN1 General typeout routines: TPSATM AN TN5 TYPATM AN TNH TN5 GETPNM: AN AN1 TNH TN TN1 MK1 LTYPE TN4 TN5 NG1 GETTYP: TNH TYPATM: AN TNH TN TN1 TN5 MK1 TPSATM: AN TN5 TPBFIX: AN AN1 TN TN1 NG1 NG2 A1L A2L TYPFLO: AN AN1 AN2 AN3 TNH TN TN1 NG1 NG2 A1L A2L Semi-dedicated primitive routines: ERNAMS TN TN1 TN2 PUTVAL: TNH ERPROS TN TN1 UNFUNC: TNH Pname routines: GETPNM TNH TN TN1 GETTYP: TNH CONS: AN TNH CNSPDL: AN AN1 TNH TN MK1 MAKPNM AN1 AN2 TNH NG1 GETTYP: TNH GETPNM: AN AN1 TNH TN TN1 MK1 CVBFIX: AN AN1 TN TN1 NG1 NG2 A1L A2L CVFLO: AN AN1 AN2 AN3 TNH TN TN1 NG1 NG2 A1L A2L CNSPD1: AN AN1 TNH TN MK1 Interning routines: INTRNX AN2 TN1 CONS: AN TNH INTERN AN1 AN2 TNH TN TN1 TN2 TN4 TN5 CONS: AN TNH GETPNM: AN AN1 TNH TN TN1 MK1 INTRNX: AN2 TNH TN1 Frame-popping routines: RSTBND AN TN TN1 PUTVAL: TNH POPFRM RSTBND: AN TNH TN TN1 If-then routines: EXIFSC AN1 TN1 TTKADV: TNH SKPPTH AN TN TTKADV: TNH Atom-to-number routines: GOBDIG CNUML1: AN TNH TN TN5 TN6high TX1low NG1 NG2 NGX A1L A2L ATMTNM AN1 AN2 TN4 TN7 NG1 FCOMPL: NG1 GETPNM: AN AN1 TNH TN TN1 MK1 CNUML0: TN5 TN6high TX1low NG1 CNUML2: AN TNH TN TN5 TN6high TX1low NG1 NG2 NGX A1L A2L GOBDIG: AN TNH TN TN5 TN6high TX1low NG1 NG2 NGX A1L A2L ATMTNX AN1 AN2 TN4 TN7 NG1 FCOMPL: NG1 GETPNM: AN AN1 TNH TN TN1 MK1 CNUML0: TN5 TN6high TX1low NG1 CNUML2: AN TNH TN TN5 TN6high TX1low NG1 NG2 NGX A1L A2L GOBDIG: AN TNH TN TN5 TN6high TX1low NG1 NG2 NGX A1L A2L