.PREL .IDENT STDBAS .INSERT HVG.LIB .INSERT MACRO.LIB .INSERT BBEQU.ASM .RELOC GOTO:: RSTEXP PUSH D CALL FNDLN# JNZ AHOW# POP PSW JMP RUNTSL# ; LIST AND PRINT ; NEW - IMPROVED LIST COMMAND ; LETS YOU PUT IT IN A PROGRAM LIST:: LXI H,0 ; ASSUME AT EOL RSTIGN ; IGNORE CALL ATNL# JRZ LS3 CPI ',' ; LEADING COMMA? JRZ LS3 ; YEP - SKIP FIRST EXPR GET ; NOT AT END - GET FIRST EXPR LS2: RSTEXP LS3: PUSH H LXI H,0FFFFH TSTCC COMMA,LS4 RSTEXP LS4: PUSH D POP Y XTHL CALL FNDLN# LS5: JRC LSQUIT XTHL MOV A,H ORA L JRZ LSQUIT DCX H XTHL CALL PRTLN# CALL PRTSTG# CALL WHATSU# CALL FNDLP# JMPR LS5 LSQUIT: PUSH Y POP D RSTFIN PRINT:: MVI C,8 TSTCC 59,PR1 CALL CRLF# JMP RUNSML# PR1: TSTCC CR,PR6 CALL CRLF# JMP RUNNXL# PR2: TSTC '#',PR4 PR3: RSTEXP MVI A,0C0H ANA L ORA H JNZ QHOW# MOV C,L JMPR PR5 PR4: CALL QTSTG JMPR PR9 PR5: TSTCC COMMA,PR8 PR6: TSTCC COMMA,PR7 MVI A,' ' RSTOCH JMPR PR6 PR7: CALL FIN# JMPR PR2 PR8: CALL CRLF# RSTFIN PR9: RSTEXP PUSH B CALL PRTNUM# POP B JMPR PR5 ; GOSUB AND RETURN GOSUB:: CALL PUSHA RSTEXP PUSH D CALL FNDLN# JNZ AHOW# LHLD CURRNT# PUSH H LHLD STKGOS# PUSH H LXI H,0 SHLD LOPVAR# DAD SP SHLD STKGOS# JMP RUNTSL# RETURN:: LHLD STKGOS# MOV A,H ORA L JZ QWHAT# SPHL RESTO: POP H SHLD STKGOS# POP H SHLD CURRNT# POP D CALL POPA RSTFIN ; FOR AND NEXT FOR:: CALL PUSHA CALL SETVAL# DCX H SHLD LOPVAR# LXI H,TAB4 ; LOOK FOR 'TO' JMP EXEC# FR1: RSTEXP SHLD LOPLMT# LXI H,TAB5 ; CHECK FOR STEP JMP EXEC# FR2: RSTEXP JMPR FR4 FR3: LXI H,1 ; DEFAULT STEPSIZE FR4: SHLD LOPINC # LHLD CURRNT# SHLD LOPLN# XCHG SHLD LOPPT# LXI B,10 LHLD LOPVAR# XCHG MOV H,B MOV L,B DAD SP JMPR FR6 FR5: DAD B FR6: MOV A,M INX H ORA M JRZ FR7 MOV A,M DCX H CMP D JRNZ FR5 MOV A,M XRA E JRNZ FR5 XCHG MOV H,A MOV L,A DAD SP MOV B,H MOV C,L LXI H,10 DAD D CALL HKMVD# SPHL FR7: LHLD LOPPT# XCHG RSTFIN ; SEARCH TABLES FOR FOR COMMAND TAB4: TOKEN 77H,FR1 ITEM 'TO',FR1 TOKEN 7FH,QWHAT# TAB5: TOKEN 75H,FR2 ITEM 'STEP',FR2 TOKEN 7FH,FR3 NEXT:: CALL TSTV# JC QWHAT# SHLD VARNXT# NX1: PUSH D XCHG LHLD LOPVAR# MOV A,H ORA L JZ AWHAT# CALL COMP# JRZ NX2 POP D CALL POPA LHLD VARNXT# JMPR NX1 NX2: XCHG LDAX D MOV L,A INX D LDAX D MOV H,A XCHG LHLD LOPINC # PUSH H MOV A,H XRA D MOV A,D DAD D JM NX3 XRA H JM NX5 NX3: XCHG LHLD LOPVAR# MOV A,E MOV M,A INX H MOV A,D MOV M,A LHLD LOPLMT# POP PSW ORA A JP NX4 XCHG NX4: CALL CKHLDE# POP D JRC NX6 LHLD LOPLN# SHLD CURRNT# LHLD LOPPT# XCHG RSTFIN NX5: POP H POP D NX6: CALL POPA RSTFIN ; REM, IF, INPUT, LET REM:: LXI H,0 JMPR IF1 IFF:: RSTEXP IF1: MOV A,H ORA L JNZ RUNSML# CALL FNDSKP# JNC RUNTSL# JMP RSTART# INPERR:: LHLD STKINP# SPHL POP H SHLD CURRNT# POP D POP D INPUT ==: . IP1: PUSH D CALL QTSTG# JMPR IP8 IP2: CALL TSTV# JRC IP5 IP3: CALL IP12 LXI D,BUFFER# RSTEXP POP D XCHG MOV A,E MOV M,A INX H MOV A,D MOV M,A IP4: POP H SHLD CURRNT# POP D IP5: POP PSW IP6: TSTCC COMMA,IP7 JMPR INPUT IP7: RSTFIN IP8: PUSH D CALL TSTV# JRNC IP11 IP10: JMP QWHAT# IP11: MOV B,E POP D CALL PRTCHS# JMPR IP3 IP12: POP B PUSH D XCHG LHLD CURRNT# PUSH H LXI H,IP1 SHLD CURRNT# LXI H,0 DAD SP SHLD STKINP# PUSH D PUSH B MVI A,' ' JMP GETLN# DEFLT:: LDAX D CPI CR JRZ IP7 JMP QWHAT# POPA: POP B POP H SHLD LOPVAR# MOV A,H ORA L JRZ PP1 POP H SHLD LOPINC# POP H SHLD LOPLMT# POP H SHLD LOPLN# POP H SHLD LOPPT# PP1: PUSH B RET PUSHA: LXI H,STKLMT# POP B ANA A DSBC SP JNC QSORRY# LHLD LOPVAR# MOV A,H ORA L JRZ PU1 LHLD LOPPT# PUSH H LHLD LOPLN# PUSH H LHLD LOPLMT# PUSH H LHLD LOPINC # PUSH H LHLD LOPVAR# PU1: PUSH H PUSH B RET .END