ASMB,R HED <> 92065-16001 NAM BASC1,7 92065-16001 REV.1726 770523 * DATE REV CODE 9-24-76 * * * ************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- * * PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH- * * OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ************************************************************** * * * * SOURCE: 92065-18002 * * * ************************************************************* * * ENT BASC1,QUOTE,DIM EXT PLIST,PEXMK,GETCR,LETCK,DIGCK,INTCK,MVTOH EXT BCKSP,FNDPS,NUMCK,OUTER EXT FCNS,FCNCT,INDCK COM TEMPS(30),PNTRS(61),SPEC(10) **************************************************** * * * SEGMENT #1: CHECK SYNTAX AND TRANSLITERATE * * * **************************************************** * * THIS PART OF THE INTERPRETER IS LOADED BY THE BASIC MAIN CONTROL * WHENEVER A RECORD IS INPUT WITH A NUMBER AS THE FIRST CHAR. IT * WILL CONVERT AN ASCII STATEMENT RECORD INTO THE SPECIAL BINARY * CODE WHICH IS USED BY THE LIST AND EXECUTION SEGMENTS OF THE * INTERPRETER. AFTER EACH STATEMENT IS PROCESSED, EXECUTION IS * RETURNED TO THE MAIN CONTROL PROGRAM. THE GENERAL FORM OF THE * TRANSLITERATED CODE IS SHOWN BELOW: * * WORD #1 - LINE NUMBER * WORD #2 - # WORDS IN TRANSLITERATED STATEMENT * WORD #3 > WORD #N - OPERATORS, CONSTANTS, ETC. SKP *************************** * * * CONSTANTS AND VARIABLES * * * *************************** * FWAM EQU PNTRS FIRST WORD OF AVAILABLE MEMORY LWBM EQU PNTRS+1 LAST WORD OF AVAILABLE MEMORY .INBF EQU PNTRS+2 INPUT BUFFER ADDRESS SBUFA EQU PNTRS+3 SYNTAX BUFFER ADDRESS SYMTA EQU PNTRS+4 START OF SYMBOL TABLE SYMTF EQU PNTRS+5 END OF SYMBOL TABLE PBUFF EQU PNTRS+6 FIRST WORD OF USER PROGRAM PBPTR EQU PNTRS+7 LAST WORD+1 OF USER PROGRAM INBFA EQU PNTRS+8 INPUT BUFFER POINTER ICCNT EQU PNTRS+9 INPUT CHARACTER COUNT SBPTR EQU PNTRS+10 SYNTAX BUFFER POINTER .LNUM EQU PNTRS+11 CURRENT LINE # FCORE EQU PNTRS+12 START OF FREE CORE MNNAM EQU PNTRS+13 MNEMONIC TABLE NAME:SC:LU BRNAM EQU PNTRS+18 BRANCH TABLE NAME:SC:LU FWAMM EQU PNTRS+23 POINTER TO START OF MNEMONIC TABLE FWAMB EQU PNTRS+24 POINTER TO START OF BRANCH TABLE .OTBF EQU PNTRS+25 POINTER TO OUTPUT BUFFER OCCNT EQU PNTRS+26 OUTPUT CHARACTER COUNT OTBFA EQU PNTRS+27 POINTER INTO OUTPUT BUFFER LUOUT EQU PNTRS+28 CURRENT OUTPUT L.U. # LUINP EQU PNTRS+29 CURRENT INPUT L.U. # SIGN EQU PNTRS+30 SIGN OF CURRENT NUMBER BLANK EQU PNTRS+31 CURRENT TERMINATION CHAR REC# EQU PNTRS+32 COMMAND FILE RECORD NUMBER FLTYP EQU PNTRS+33 TYPE 0 FILE FLAG TTYPR EQU PNTRS+34 CONSOLE TTY L.U. # PRINT EQU PNTRS+35 LISTING L.U. # READR EQU PNTRS+36 AUXILLIARY INPUT L.U. # PUNCH EQU PNTRS+37 AUXILLIARY OUTPUT L.U. # ERTTY EQU PNTRS+38 ERROR LIST OUTPUT L.U. # DCB EQU PNTRS+39 DATA CONTROL BLOCK ADDRESS FILBK EQU PNTRS+40 FILE CONTROL BLOCK ADDRESS PFLAG EQU PNTRS+41 SAVE,LOAD FILE FLAG LOLIM EQU PNTRS+42 LOW LIMITS OF PROGRAM HILIM EQU PNTRS+43 HIGH LIMITS OF PROGRAM LORUN EQU PNTRS+44 LOW RUN LIMITS HIRUN EQU PNTRS+45 HIGH RUN LIMITS SLSTM EQU PNTRS+46 EXECUTE SLOW STMTS LOTRC EQU PNTRS+47 LOW TRACE LIMITS HITRC EQU PNTRS+48 HIGH TRACE LIMITS BRKP1 EQU PNTRS+49 BREAK POINT #1 BRKP2 EQU PNTRS+50 BREAK POINT #2 BRKP3 EQU PNTRS+51 BREAK POINT #3 BRKP4 EQU PNTRS+52 BREAK POINT #4 SMFLG EQU PNTRS+53 SIMULATE FLAG TYPE EQU PNTRS+54 PARTIAL LINE CHARACTER COUNT DLMTR EQU PNTRS+55 CHAR EDIT DELIMITER MERGF EQU PNTRS+56 MERGE FLAG SKP SUP PRESS MULTIPLE LISTINGS SPC 1 TEMPT BSS 14 .2 DEC 2 .3 DEC 3 .10 DEC 10 B42 OCT 42 B4000 OCT 4000 LETOP OCT 32000 OPMSK OCT 77000 OPDMK OCT 100777 FRMSK OCT 100757 M1 DEC -1 M2 DEC -2 M3 DEC -3 M9 DEC -9 MNEG OCT 100000 MAXIMUM NEGATIVE FLOATING OCT 376 POINT NUMBER FLGBT EQU MNEG STBAS DEF SYNTB-26,I SKP ********************************** * * * PRINT NAME TABLE FOR OPERATORS * * * ********************************** QUOTE OCT 1000 BITS 15-9 OF THE LABELLED WORD ASC 1," COMMA OCT 2000 ARE THE BASIC CODE OPERATOR ASC 1,, SMCLN OCT 3000 NUMBERS. BITS 3-0 ARE THE ASC 1,; RPARN OCT 4001 OPERATOR'S HIERARCHICAL ASC 1,) RBRAC OCT 5001 PRECEDENCE FOR THOSE OPERATORS ASC 1,] SCMMA OCT 6002 BELONGING TO FORMULAS. THE ASC 1,, ASSOP OCT 7002 UNLABELLED WORD GIVES THE ASC 1,= PLUS OCT 10007 ASCII REPRESENTATION OF THE ASC 1,+ MINUS OCT 11007 SINGLE CHARACTER OPERATORS. ASC 1,- TIMES OCT 12010 ASC 1,* DIV OCT 13010 ASC 1,/ EXPS OCT 14012 ASC 1,^ GTR OCT 15005 ASC 1,> LSS OCT 16005 ASC 1,< UNEQL OCT 17005 ASC 1,# EQUAL OCT 20005 ASC 1,= UNMIN OCT 21011 ASC 1,- LBRAC OCT 22020 ASC 1,[ LPARN OCT 23020 ASC 1,( UPLUS OCT 24011 ASC 1,+ OROP OCT 25003 MSFLG NOP ANDOP OCT 26004 DFLAG NOP NOTOP OCT 27011 PRFLG NOP GTREQ OCT 30005 UFLAG NOP LSSEQ OCT 31005 SKP * DIM OCT 33003 ASC 2,DIM COM OCT 34003 ASC 2,COM DEF OCT 35003 ASC 2,DEF REM OCT 36003 ASC 2,REM IF OCT 40002 ASC 1,IF FOR OCT 41003 ASC 2,FOR NEXT OCT 42004 ASC 2,NEXT END OCT 45003 ASC 2,END DATA OCT 51004 ASC 2,DATA * LET OCT 32003 THESE STATEMENTS MAY FOLLOW AN ASC 2,LET GOTO OCT 37004 'IF' OPERATOR ASC 2,GOTO GOSUB OCT 43005 ASC 3,GOSUB RTRN OCT 44006 ASC 3,RETURN STP OCT 46004 ASC 2,STOP WAIT OCT 47004 ASC 2,WAIT CALL OCT 50004 ASC 2,CALL READ OCT 52004 ASC 2,READ PRNT OCT 53005 ASC 3,PRINT INPUT OCT 54005 ASC 3,INPUT RSTOR OCT 55007 ASC 4,RESTORE PAUSE OCT 56005 ASC 3,PAUSE TRAP OCT 66004 ASC 2,TRAP * FAIL OCT 57005 ASC 3,FAIL: THEN OCT 60004 ASC 2,THEN * USING OCT 61005 ASC 3,USING * TO OCT 75002 ASC 1,TO STEP OCT 76004 ASC 2,STEP OF OCT 77002 ASC 1,OF NOT OCT 27003 ASC 2,NOT AND OCT 26003 ASC 2,AND OR OCT 25002 ASC 1,OR * GTE OCT 30002 ASC 1,>= LTE OCT 31002 ASC 1,<= AUNEQ OCT 17002 ALTERNATE UNEQUAL SIGN ASC 1,<> * LEN OCT 3 ASC 2,LEN #SIGN OCT 73001 ASC 1,# EOF OCT 62003 ASC 3,EOF SKP ************************************* * * * BRANCH TABLE FOR STATEMENT SYNTAX * * * ************************************* SYNTB DEF LETS LET DEF DIMS DIM DEF COMS COM DEF DEFS DEF DEF REMS REM DEF GOTOS GO TO DEF IFS IF DEF FORS FOR DEF NXTS NEXT DEF GOTOS GOSUB DEF ENDS RETURN DEF ENDS END DEF ENDS STOP DEF WAITS WAIT DEF CALLS CALL DEF DATAS DATA DEF READS READ DEF PRINS PRINT DEF INPTS INPUT DEF RSTRS RESTORE DEF PAUS PAUSE DEF SYNE2-1 FAIL DEF SYNE2-1 THEN DEF SYNE2-1 USING NOP SPCECIAL SYNTAX REP 3 NOP .PLACE HOLDERS DEF TRAPS TRAP SPC 1 * #STND DEC -23 # STANDARD OPERATORS IN TABLE * #PSIF DEC -12 # OPERATORS ALLOWED PAST 'IF' * SKP *********************************** * * * CHECK SYNTAX AND TRANSLITERATE * * * *********************************** BASC1 NOP * * LDA SBPTR,I GET FIRST CHAR IN BUFFER SPC 1 * DETERMINE SEQUENCE NUMBER SPC 1 SYNTX CPA .45 MINUS SIGN(DELETE CURRENT LINE)? JMP DLLIN YES JSB INTCK RECORD DEF MAXSN SEQUENCE NUMBER JMP SYE25 STA TEMP3 SAVE CHAR LDA LOLIM IS SEQUENCE CMA,INA NUMBER >= ADA 1 TO THE SSA LOW LIMIT? JMP PEXMK NO, IGNORE STMT LDA 1 IS SEQUENCE CMA,INA NUMBER <= ADA HILIM TO THE SSA HIGH LIMIT? JMP PEXMK NO, IGNORE STMT STB .LNUM SAVE LINE NUMBER * * LDB FWAMM SET UP INB SEARCH STB SUBS1 POINTERS STB SUBS2 STB SUBS3 STB SUBS4 LDA TEMP3 RECOVER CHAR ISZ SBPTR SAVE SPACE FOR LENGTH WORDR; LDB SBUFA SET INB TEMP TO STB TEMP (SBUFF)+1 SPC 1 * DETERMINE STATEMENT TYPE SPC 1 CPA .10 NULL STATEMENT? JMP DLSTM DELETE STATEMENT! LDB #STND -# OF STANDARD MNEMONICSR JSB TBSRH FIND STATEMENT TYPE DEF DIM START AT TOP OF LIST RSS NO ERROR IF NOT FOUND JMP PSTIF FOUND SUBR LDB FWAMM,I GET MNEM COUNT SZB,RSS .SKIP TABLE SEARCH IF NULL TABLE JMP SS1 JSB TBSRH LOOK IN MNEMONIC TABLE SUBS1 DEF 0 SS1 JMP TRYLT TRY LET STATEMENT PSTIF LDB M9 SET MULTIPLE STORE STB MSFLG TO FALSE LDB PBPTR NULL CPB PBUFF PROGRAM? RSS JMP SYNT1 NO LDB FWAM INSURE NO STB PBUFF SPURIOUS COMMON STB PBPTR EXISTS SYNT1 STB TEMPS POINTER CLB SET DEFINE FLAG STB DFLAG TO FALSE STB PRFLG SET PARAMETER FLAG TO FALSE STB FROMF SET FROM FLAG CLEAR STA 1 * SYNT5 LDA FWAMM IS ENTRY IN CMA,INA THE STANDARD BASIC ADA TBLPT STATEMENT TABLE? SSA,RSS NAMED SUBROUTINE? JMP NMSBR YES LSR 9 COMPUTE ADDRESS OF SYNTAX STB SFLAG SET STRING FLAG TO OFF ADB STBAS ROUTINE AND JMP 1,I BRANCH TO IT ** *** TRY IMPLIED LET ** TRYLT LDB M1 SET TO SMALL NEG. NO. STB TBLPT SO TO SKIP NAMED SUB. SYNTAX JSB BCKSP BACK UP TO START FORMULA PROCESSOR LDA LETOP STA SBPTR,I DUB IN "LET" CODE JMP PSTIF SKP ** * *** *** ** LET STATEMENT SYNTAX ** *** *** * LETS LDA SBPTR ENABLE STRING STA SFLAG VARIABLE ISZ MSFLG SET MULTIPLE STORE FLAG ON JSB FSC FETCH FORMULA ISZ SFLAG STRING VARIABLE FOUND? JMP LET1 NO! JSB SYMCK YES, DEMAND ASSIGNMENT OPERATOR! DEF ASSOP-1 JMP SYNE2-1 NO ASSIGNMENT OPERATOR! JSB RSTOP RECORD STRING OPERATOR JSB SNULL RECORD END-OF-FORMULA JMP EOST DEMAND END SPC 1 LET1 ISZ SFLAG DID STORE OCCUR? JSB ERROR NO SYNE2 EQU * * ****************************** * * * CHECK FOR END OF STATEMENT * * * ****************************** EOST CPA .10 END OF STATEMENT? JMP ACTST YES,ACCEPT STATEMENT! NOEOF JSB ERROR CHARACTERS AFTER LEGAL END-OF-STATEMENT ***************************** * * * CALL STATEMENT SYNTAX * * * ***************************** * * THE CALL SYNTAX CHECK MAKES EXTENSIVE USE OF THE MNEMONIC AND * BRANCH TABLES TO DETERMINE THE CORRECTNESS OF THE SUBROUTINE * CALL AND THE ORDINAL POSITION OF THE SUBROUTINE WITHIN THE * BRANCH TABLE, SO THAT THE EXECUTE SEGMENT OF BASIC CAN COMPUTE * THE ADDRESS OF THE SUBROUTINE. CERTAIN ERRORS CAN BE CAUSED * BY THE INCORRECT USE OF PARAMETERS IN THE CALLING SEQUENCE OF * A SUBROUTINE. BELOW IS A SIMPLE TABLE INDICATING LEGAL PARAMETERS: * * * DIRECTION OF PARAMETER TRANSFER * +---------------------------------------------------+ * ! TYPE OF PARAMETER ! BASIC TO SUB. ! SUB. TO BASIC ! * +---------------------------------------------------! * ! SIMPLE VARIABLE ! LEGAL ! LEGAL ! * +---------------------------------------------------+ * ! CONSTANT ! LEGAL ! ILLEGAL ! * +---------------------------------------------------+ * ! ARRAY VARIABLE ! LEGAL ! LEGAL ! * +---------------------------------------------------+ * ! ARRAY ELEMENT ! LEGAL ! LEGAL ! * +---------------------------------------------------+ * ! STRING VARIABLE ! LEGAL ! LEGAL ! * +---------------------------------------------------+ * ! STRING CONSTANT ! LEGAL ! ILLEGAL ! * +---------------------------------------------------+ * ! EXPRESION ! LEGAL ! ILLEGAL ! * +---------------------------------------------------+ * * * * THE MNEMONIC TABLE CONTAINS THE ASCII NAME OF THE SUBROUTINE, * THE NUMBER OF CHARACTERS IN THE SUBROUTINE, AND THE NUMBER OF * PARAMETERS IN THE SUBROUTINE CALLING SEQUENCE. THE FORMAT OF * EACH ENTRY IS SHOWN BELOW. * * * 15 0 * +-------------------------------+ * !F! ! ! ! ! ! ! !P!P!P!P!C!C!C!C! * +-------------------------------+ * ! 1ST CHARACTER ! 2ND CHARACTER ! * +-------------------------------+ * ! 3RD CHARACTER ! ETC. ! * +-------------------------------+ * * WHERE : * F = 1 IF FUNCTION * F = 0 IS SUBROUTINE * PPPP = NUMBER OF PARAMTERS * CCCC = NUMBER OF CHARACTERS IN NAME * * * THE BRANCH TABLE CONTAINS INFORMATION REGARDING THE ADDRESS * OF THE SUBROUTINE, PARAMETER CONVERSION (REAL TO INTEGER OR * INTEGER TO REAL), TYPE OF PARAMETER, AND DIRECTION THAT THE * PARAMETER IS REUIRED TO GO ( BASIC TO SUBROUTINE OR SUBROUTINE * TO BASIC). * * * 15 0 * +-------------------------------+ * !D!D!D!D!D!P!P!P!P!P!S!S!S!S!S!S! ADDRESS * +-------------------------------+ * !X!A!A!A!A!A!A!A!A!A!A!A!A!A!A!A! ARRAY * +-------------------------------+ * !X!T!T!T!T!T!T!T!T!T!T!T!T!T!T!T! TO FROM * +-------------------------------+ * !F!I!I!I!I!I!I!Y!I!I!I!I!I!I!I!I! CONVERSION * +-------------------------------+ * * * WHERE: * DDDDD = IDENTIFICATION LETTER * PPPPP = OVERLAY NUMBER * SSSSSS = SUBROUTINE NUMBER WITHIN OVERLAY * A = 1 IF ARRAY, 0 IF NON-ARRAY * T = 1 IF FROM SUBROUTINE, 0 IF TO SUBROUTINE * F = 1 IF INTEGER FUNCTION * F = 0 IF REAL FUNCTION * I = 1 IF CONVERSION TO INTEGER REQUIRED * I = 0 IF NO CONVERSION REQUIRED * X = BIT POSITION NOT USED * * * CALLS JSB GETCR FETCH AND JMP NOEOF RECORD LDB FWAMM,I GET MNEM COUNT SZB,RSS JMP SS2 .IF NULL TABLE SKIP TABLE SEARCH JSB TBSRH LOOK FOR SUBROUTINE NAME SUBS2 DEF 0 SS2 JSB ERROR NOT FOUND CALER JMP PSTIF DO POST-IF STATEMENT * ** *** NAMED SUBROUTINE SYNTAX (NO 'CALL' PREFIX) ** NMSBR CLA SET TO STA TEMP7 INDICATE SUBROUTINE * GET FIRST WORD OF MNEMONIC TBL ENTRY LDA PRPTR,I IS THIS SSA REALLY A SUBROUTINE? JSB ERROR NO! SYNE3 EQU * FUNCT STA TEMP6 SAVE PARAMETER WORD RRR 4 COUNT AND .15 FROM CMA BEING DESTROYED STA PCNT BY FSC CMA SAVE COUNT LSL 9 LEFT JUSTIFY STA TEMP3 FOR INTERP. CODE LDA FWAMM,I COMPUTE OFFSET IN MNEMONIC TBL CMA,INA ADA COUNT AND SAVE IT FOR LATER STA TCCNT THIS ORDINAL POSITION OF SUB. ENTRY LDB TEMP6 FORTRAN SSB FUNCTION? JMP CALL1 YES! ADA B5000 NO, ADD IN CALL OP CODE CALL4 STA SBPTR,I STORE IN INTERP. CODE ISZ SBPTR UPDATE INTERP. CODE PTR. LDA COMMA COMMA CODE STA SBPTR,I STUFF IT (WIPE OUT LEFT PAREN) ISZ PCNT ANY PARAMETERS REQUIRED? JMP NAMSB YES LDB B4000 FUDGE A RIGHT PAREN STB SBPTR,I LDA TEMP7 DID WE PROCESS A AND OPDMK FORTRAN CPA FRMSK FUNCTION JMP FSC10+1 YES! JSB GETCR FETCH NEXT CHARACTER LDA .10 ISZ SBPTR JMP CALL5 * CALL1 ADA TEMP3 STUFF IN JMP CALL4 PARM COUNT INSTEAD OF B50000 * * CALL2 CCB JSB SYMCK COMMA? DEF COMMA-1 JMP CALL3 NO ISZ PCNT YES, MORE PARAMS REQUIRED? JMP PRMCK YES, LOOK FOR PARAMETER. SYE11 JSB ERROR WRONG NUMBER OF PARAMS. * * PROCESS SUBROUTINE AND FUNCTION PARAMETERS * NAMSB LDA TCCNT GET ORDINAL NUMBER ALS,ALS AND MULTIPLY BY 4 ADA .2 AND ADD 2 TO GET ADA FWAMB POSITION IN BRANCH TBL THEN LDA 0,I GET THE TO/FROM PARAMETER WORD STA TOFRM SAVE FOR CHECKING EACH PARAMETER PRMCK LDA TOFRM GET TO/FROM WORD CCB SLA,RSS IS IT SET? CLB NO! THEN SET THE FLAG TO 0 STB FROMF YES! THEN SET IT NON-ZERO ARS SHIFT TO STA TOFRM FOR NEXT PARAMETER JSB GETCR GET THE FIRST PARAMETER CHARACTER LDA .10 CPA B42 IS IT A STRING LITERAL? JMP CALL6 YES! JSB LETCK IS IT A LETTER? JSB PERR NO, CHECK FOR PARAMETER ERROR JSB BCKSP NO, PUT CHAR BACK JSB FRCUR SAVE VARIABLES LDA SBPTR SET TO STA SFLAG ALLOW STRING VARIABLES JSB FSC FETCH CLB CLEAR STB FROMF TO/FROM FLAG ISZ SFLAG STRING? RSS NO! JMP CALL7 YES! CALL8 JSB FPOP RESTORE VARIABLES JMP CALL2 PARAMETER FORMULA * CALL3 ISZ PCNT ALL PARAMETERS PRESENT? JMP SYE11 NO JSB RPCK YES, FETCH RIGHT PARENTHESIS STA 1 SAVE CHARACTER LDA TEMP7 FORTRAN AND OPDMK FUNCTION CPA FRMSK BEING PROCESSED? JMP FSC19 YES, COMPLETE SYNTAX CHECK LDA 1 RESTORE CHARACTER * CALL5 CCB JSB TBSRH IS CALL FOLLOWED BY "FAIL:"? DEF FAIL JMP EOST JSB GETCR YES. ANALYZE REST OF STMT. JMP NOEOF ISZ SBPTR JMP FAILS * CALL6 JSB PERR CHECK FOR PARAMETER ERROR ISZ SBPTR POINT AT PLACE TO PUT " OPERATOR CCB JSB SYMCK PUT IN " OPERATOR DEF QUOTE-1 NOP LDA B42 SPECIFY STRING TERMINATOR JSB CHRST PUT STRING IN INTERP CODE JSB SNULL ADD NULL AFTER STRING CONSTANT JSB GETCR FETCH NEXT CHARACTER LDA .10 JMP CALL2 * CALL7 JSB SNULL PUT NULL AFTER STRING CCB STB SFLAG RESET SFLAG JMP CALL8 * * * A CHECK IS MADE HERE TO SEE IF THE SUBROUTINE PARAMETER * (A STRING LITERAL, CONSTANT OR EXPRESSION) IS BEING * RETURNED FROM A SUBROUTINE AS INDICATED BY THE BRANCH TABLE * PERR NOP LDB FROMF FLAG SZB,RSS SET? JMP PERR,I NO! CPA .41 RIGHT PAREN? JMP PERR,I YES, OK THEN! CPA B135 RIGHT BRACKET? JMP PERR,I YES, OK CPA B54 COMMA? JMP PERR,I YES, OK THEN! CLA CLEAR STA FROMF FROM FLAG JSB ERROR NO, ILLEGAL PARAMETER SYE16 EQU * B5000 OCT 50000 .15 DEC 15 .41 DEC 41 B54 OCT 54 B135 OCT 135 SKP * ******************** * * * TRAP STATEMENT * * * ******************** * TRAPS CCB SET FOR STB CCODE NEG SEQ NUMBER CASE JSB FSC FETCH TRAP # FORMULA CPA .10 END-OF-STATEMENT? JMP SYNE6-1 YES CCB GET JSB TBSRH GOSUB SYNTAX DEF GOSUB JSB ERROR NOT FOUND SYNE6 JSB GETCR CHECK NOP FOR (-) SIGN CPA .45 IS IT? JMP TRAP1 YES! JSB BCKSP GET BACK TO LAST CHAR TRAP2 CCB SET FOR STB RFLAG ERROR RETURN HERE JSB PRGIN GET SEQUENCE NUMBER DEF MAXSN RSS GOOD RETURN JSB CKZER IS NUMBER=0? JSB BCKUP BACK UP TO SEQ NUMBER LDB SBPTR,I NEGATE ISZ CCODE SEQUENCE NUMBER CMB,INB STB SBPTR,I IF NECESSARY ISZ SBPTR RESET PTR JMP EOST END-OF-STATEMENT PROCESSING * TRAP1 CLB SET FOR STB CCODE (-) FOUND JMP TRAP2 * CKZER NOP IF SZB B=0 JMP SYE25 THEN STORE STB SBPTR,I IT IN INTERP. ISZ SBPTR ELSE PRINT JMP CKZER,I ERROR MESSAGE * SKP * ************************ * * * DIM STATEMENT SYNTAX * * * ************************ DIMS ISZ DFLAG SET DFLAG TO TRUE LDA SBPTR ENABLE STRING STA SFLAG VARIABLE JSB ARRYS CHECK AN ARRAY JMP ACTST DONE JMP DIMS+1 WAS A COMMA, CONTINUE ************************ * * * COM STATEMENT SYNTAX * * * ************************ COMS CLB SET ARRAY POINTER STB TEMPS+7 INITIALLY TO ZERO ISZ SBPTR SAVE SPACE FOR ISZ SBPTR COMMON SIZE WORD STB SBPTR,I INSERT NULL ISZ DFLAG SET DEFINE FLAG TO TRUE COMS1 CCA SET COMMON FLAG STA PRFLG TO TRUE LDA SBPTR ENABLE STA SFLAG STRING VARIABLES JSB ARRYS CHECK AN ARRAY RSS DONE JMP COMS1 MORE ARRAYS LDB SBUFA CALCULATE WHERE ADB .3 COMMMON SIZE GOES LDA TEMPS+7 RECORD COMMON STA 1,I SIZE JMP ACTST EXIT * SKP