1C1F CLASS-01     CALL  28B2,LOOK-VARS         
                                            ,  
                                              
                                            

 'VARIABLE IN ASSIGNMENT' ("  ")
        DEST  STRLEN.

1C22 VAR-A-1      LD    (FLAGX),+00          FLAGX  +00.
                  JR    NC,1C30,VAR-A-2       
                                            ,  .
                  SET   1,(FLAGX)            " ".
                  JR    NZ,1C46,VAR-A-3        
                                              .

 2 - Variable not found (  )

1C2E REPORT-2     RST   0008,ERROR-1          
                  DEFB  +01                 .

    .

1C30 VAR-A-2      CALL  Z,2996,STK-VARS       
                                               
                                               
                                             (STK-VARS ,
                                             , "" .
                  BIT   6,(FLAGS)             
                  JR    NZ,1C46,VAR-A-3     ,   .
                  XOR   A                     A.
                  CALL  2530,SYNTAX-Z          ,
                  CALL  NZ,2BF1,STK-FETCH      
                                              .
                  LD    HL,+5C71             FLAGX.

                  OR    (HL)                 0  
                  LD    (HL),A                 
                                             , 
                                            "   
                                            ".
                  EX    DE,HL                HL    
                                             .

  STRLEN  DEST.      ""       STRLEN-io  ""  .            ""   ""  "".

1C46 VAR-A-3      LD    (STRLEN),BC          STRLEN.

DEST    " " " ",    ""  "" .

                  LD    (DEST),HL            DEST  .
                  RET

  02     ,     LET.

1C4E CLASS-02     POP   BC                    SCAN-LOOP
                  CALL  1C56,VAL-FET-1       .
                  CALL  1BEE,CHECK-END        
                                              CHECK-END, 
                  RET                        ,  
                                            STMT-RET,   "
                                            ".

 'FETCH A VALUE' (" ")
   LET, READ  INPUT,   ,       .
     VAL-FET-1  LET  READ   FLAGS,     VAL-FET-2  INPUT   FLAGX.

1C56 VAL-FET-1    LD    A,(FLAGS)            FLAGS.
1C59 VAL-FET-2    PUSH  AF                   FLAGS  FLAGX.
                  CALL  24FB,SCANNING         .
                  POP   AF                    FLAGS  FLAGX.
                  LD    D,(FLAGS)             FLAGS.
                  XOR   D                     
                  AND   +40                    
                                            .
                  JR    NZ,1C8A,REPORT-C      C,  
                                             .
                  BIT   7,D                  ,  
                  JP    NZ,2AFF,LET          , 
                                              , 
                  RET                         .

 'COMMAND CLASS 04' ("  04")
     FOR  NEXT.

1C6C CLASS-04     CALL  28B2,LOOK-VARS         
                                             .
                  PUSH  AF                   AF  
                  LD    A,C                  , 
                  OR    +9F                 ,  
                  INC   A                     FOR-NEXT.
                  JR    NZ,1C8A,REPORT-C    
                  POP   AF                   AF   ,
                  JR    1C22,VAR-A-1          , 
                                             " 
                                            '.

 'EXPECT NUMERIC/STRING EXPRESSIONS' (" / ")
   ,        .       " "   .
        NEXT-2NUM ,  CH-ADD   ,     .

1C79 NEXT-2NUM    RST   0020,NEXT-CHAR       CH-ADD.

  EXPT-2NUM (EQU. CLASS-08)     ,     .

1C7A EXPT-2NUM    CALL  1C82,EXPT-1NUM        . 
     (CLASS-08)                               .
                  CP    +2C                    , 
                  JR    NZ,1C8A                .
                  RST   0020,NEXT-CHAR       CH-ADD.

  EXPT-1NUM (EQU. CLASS-06)     ,  .

1C82 EXPT-1NUM    CALL  24FB,SCANNING         .
     (CLASS-06)
                  BIT   6,(FLAGS)             , .
                  RET   NZ                   - .

 "C - Nonsense in BASIC"

1C8A REPORT-C     RST   0008,ERROR-1          
                  DEFB  +0B                 .

  EXPT-EXP (EQU. CLASS-0A)     ,  .

1C8C EXPT-EXP     CALL  24FB,SCANNING         .
     (CLASS-0A)
                  BIT   6,(FLAGS)              ,
                  RET   Z                    .  
                  JR    1C8A,REPORT-C         .

 'SET PERMANENT COLOURS' SUBROUTINE (EQU. CLASS-07) ("  ")
      ,    .   07         .

1C96 PERMS        BIT   7,(FLAGS)            /.
     (CLASS-07)
                  RES   0,(TV-FLAG)          ' '.
                  CALL  NZ,0D4D,TEMPS           
                                            TEMPS,   
                                            ,   
                                            .
                  POP   AF                     -
                                            SCAN-LOOP.
                  LD    A,(T-ADDR)             T-ADDR
                                              +13,  
                  SUB   +13                   +D9  +DE, 
                                               
                                            INK - OVER.
                  CALL  21FC,CO-TEMP-4       ,  ,
                                             ,  
                                             BASIC.
                  CALL  1BEE,CHECK-END        ,
                                              
                                            
                  LD    HL,(ATTR-T)            
                  LD    (ATTR-P),HL          
                                            (both ATTR-P & MASK-P).
                  LD    HL,+5C91             P-FLAG;   
                  LD    A,(HL)               .

       .       ,   .

                  RLCA                        .
                  XOR   (HL)                   
                  AND   +AA                    .
                  XOR   (HL)               
                  LD    (HL),A               .
                  RET

 'COMMAND CLASS 09'
    PLOT, DRAW  CIRCLE  ,      'FLASH 8; BRIGHT 8; PAPER 8;'.        .

1CBE CLASS-09     CALL  2530,SYNTAX-Z         , 
                  JR    Z,1CD6,CL-09-1       .
                  RES   0,(TV-FLAG)          ' '.
                  CALL  0D4D,TEMPS             
                                             .
                  LD    HL,+5C90             MASK-T.
                  LD    A,(HL)                 , 
                  OR    +F8                     INK
                                            ''.
                  LD    (HL),A               , 
                                              'FLASH 8;
                                            BRIGHT 8; PAPER 8;'.
                  RES   6,(P-FLAG)           
                                            NOT 'PAPER 9'.
                  RST   0018,GET-CHAR          
                                            ,  
                                              .
1CD6 CL-09-1      CALL  21E2,CO-TEMP           
                                             .
                  JR    1C7A,EXPT-2NUM         
                                              PLOT, DRAW  CIRCLE.

 'COMMAND CLASS 0B'
    SAVE, LOAD, VERIFY  MERGE.

1CDB CLASS-0B     JP    0605,SAVE-ETC         
                                              .

 'FETCH A NUMBER' (" ")
      , ,   ,  .

1CDE FETCH-NUM    CP    +0D                    , 
                  JR    Z,1CE6,USE-ZERO     .
                  CP    +3A                      ,
                  JR    NZ,1C82,EXPT-1NUM     EXPT-1NUM.

         .

1CE6 USE-ZERO     CALL  2530,SYNTAX-Z         ,
                  RET   Z                     .
                  RST   0028,FP-CALC         .
                  DEFB  +A0,stk-zero         " "
                  DEFB  +38,end-calc         0.
                  RET                          0  
                                            .

 
   1CEE  23FA      BASIC.

  'STOP'
  STOP       .

1CEE STOP         RST   0008,ERROR-1          
     (REPORT-9)   DEFB  +08                 .

  'IF'
     IF  THEN  " "   .    ,    ,        .

1CF0 IF           POP   BC                    
                                            - STMT-RET.
                  CALL  2530,SYNTAX-Z         ,
                  JR    Z,1D00,IF-1           .

  ,       ,     DE,    .

                  RST   0028,FP-CALC         .
                  DEFB  +02,delete            
                  DEFB  +38,end-calc           .
                  EX    DE,HL                HL   
                  CALL  34E9,TEST-ZERO         TEST-ZERO.
                  JP    C,1BB3,LINE-END        'FALSE',
                                               .
1D00 IF-1         JP    1B29,STMT-L-1          'TRUE',  
                                              THEN .

  'FOR'
    VALUE  LIMIT (    FOR)     .

1D03 FOR          CP    +CD                    'STEP', 
                  JR    NZ,1D10,F-USE-1     .
                  RST   0020,NEXT-CHAR       CH-ADD  
                  CALL  1C82,EXPT-1NUM       STEP.
                  CALL  1BEE,CHECK-END        
                  JR    1D16,F-REORDER      ,   
                                            ,   .

STEP  ,     "1"

1D10 F-USE-1      CALL  1BEE,CHECK-END         ,
                                              
                  RST   0028,FP-CALC        ,  
                  DEFB  +A1,stk-one         ,  
                  DEFB  +38,end-calc        "1!   .

      - VALUE (v), the LIMIT (l)  STEP (s).    .

1D16 F-REORDER    RST   0028,FP-CALC        v, l, s
                  DEFB  +C0,st-mem-0        v, l, s (mem-0 = s)
                  DEFB  +02,delete          v, l
                  DEFB  +01,exchange        l, v
                  DEFB  +E0,get-mem-0       l, v, s
                  DEFB  +01,exchange        l, s, v
                  DEFB  +38,end-calc

  FOR         .

                  CALL  2AFF,LET            , ,  ,
                                             
                  LD    (MEM),HL            ( V).

,   ,      ,    ,       .

                  DEC   HL                    
                  LD    A,(HL)              .
                  SET   7,(HL)               7- .
                  LD    BC,+0006                6 .
                  ADD   HL,BC                HL,  
                                             .
                  RLCA                         
                  JR    C,1D34,F-L&S        ,    
                                            FOR.
                  LD    C,+0D                 
                  CALL  1655,MAKE-ROOM      13 .
                  INC   HL                    HL, 
                                             LIMIT.

     LIMIT  STEP.

1D34 F-L&S        PUSH  HL                   .
                  RST   0028,FP-CALC        l, s
                  DEFB  +02,delete          l
                  DEFB  +02,delete          -
                  DEFB  +38,end-calc        DE   'l'.
                  POP   HL                   ,
                  EX    DE,HL                 .
                  LD    C,+0A                 10  LIMIT
                  LDIR                       STEP.

       .

                  LD    HL,(PPC)              .
                  EX    DE,HL                 
                  LD    (HL),E                 
                  INC   HL                    FOR.
                  LD    (HL),D
                  LD    D,(SUBPPC)          
                  INC   D                   
                  INC   HL                  
                  LD    (HL),D

 NEXT-LOOP     "" ,   ,  ; ,    FOR - NEXT   .

                  CALL  1DDA,NEXT-LOOP      ""  ?
                  RET   NC                   , .
                  LD    B,(STRLEN-lo)         .
                  LD    HL,(PPC)               
                  LD    (NEWPPC),HL          NEWPPC.
                  LD    A,(SUBPPC)             
                  NEG                           .
                  LD    D,A                     D.
                  LD    HL,(CH-ADD)            CH-ADD.
                  LD    E,+F3                'NEXT'  .

             NEXT,     .

1D64 F-LOOP       PUSH  BC                    .
                  LD    BC,(NXTLIN)           
                                            NXTLIN.
                  CALL  1D86,LOOK-PROG        
                                                BC
                                               
                                            .
                  LD    (NXTLIN),BC            .
                  POP   BC                    .
                  JR    C,1D84,REPORT-I        NEXT, 
                                            .
                  RST   0020,NEXT-CHAR         NEXT.
                  OR    +20                     
                  CP    B                       
                                              .
                  JR    Z,1D7C,F-FOUND        , 
                                             .
                  RST   0020,NEXT-CHAR        CH-ADD , 
                  JR    1D64,F-LOOP          , 
                                             .

NEWPPC   ,     NEXT.          NSPPC.

1D7C F-FOUND      RST   0020,NEXT-CHAR       CH-ADD.
                  LD    A,+01                   D
                  SUB   D                      
                                              0,   
                                              "1".
                  LD    (NSPPC),A            .
                  RET                         STMT-RET.

   "I - FOR without NEXT".

1D84 REPORT-I     RST   0008,ERROR-1          
                  DEFB  +11                 .

 'LOOK-PROG'
  ,     DATA, DEF FN  NEXT.         E,    HL     .

1D86 LOOK-PROG    LD    A,(HL)                .
                  CP    +3A                  ,   ':',
                  JR    Z,1DA3,LOOK-P-2       
                                              
                                             .

          .

1D8B LOOK-P-1     INC   HL                      
                  LD    A,(HL)                 
                  AND   +CO                 ,   
                  SCF                        .
                  RET   NZ
                  LD    B,(HL)                 
                  INC   HL                    NEWPPC.
                  LD    C,(HL)
                  LD    (NEWPPC),BC
                  INC   HL                    .
                  LD    C,(HL)
                  INC   HL
                  LD    B,(HL)
                  PUSH  HL                    BC  
                  ADD   HL,BC                , 
                  LD    B,H                 .
                  LD    C,L                
                  POP   HL                   .
                  LD    D,+00                   0.
1DA3 LOOK-P-2     PUSH  BC                    
                  CALL  198B,EACH-STMT      ,  
                  POP   BC                    .
                  RET   NC                    "", 
                  JR    1D8B,LOOK-P-1       ;   
                                              .

  'NEXT'
  "  " (. CLASS-04,1C6C);      VALUE.

1DAB NEXT         BIT   1,(FLAGX)              ,
                  JP    NZ,1C2E,REPORT-2       
                                             .
                  LD    HL,(DEST)             
                  BIT   7,(HL)                 .
                  JR    Z,1DD8,REPORT-1    

   VALUE  STEP .

                  INC   HL                    .
                  LD    (MEM),HL              
                                             .
                  RST   0028,FP-CALC        -
                  DEFB  +E0,get-mem-0       v
                  DEFB  +E2,get-mem-2       v, s
                  DEFB  +0F,addition        v+s
                  DEFB  +C0,st-mem-0        v+s
                  DEFB  +02,delete          -
                  DEFB  +38,end-calc        -

    VALUE  STEP  LIMIT    NEXT-LOOP.

                  CALL  1DDA,NEXT-LOOP        VALUE
                                             LIMIT
                  RET   C                   ,  
                                             FOR-NEXT.

         .

                  LD    HL,(MEM)               
                  LD    DE,+000F              
                  ADD   HL,DE               .
                  LD    E,(HL)                 .
                  INC   HL
                  LD    D,(HL)
                  INC   HL
                  LD    H,(HL)                  .
                  EX    DE,HL                  
                  JP    1E73,GO-TO-2        ,   
                                               
                                             GO TO.

   "1 - NEXT without FOR"

1DD8 REPORT-1     RST   0008,ERROR-1          
                  DEFB  +00                 .

 'NEXT-LOOP'
      VALUE   LIMIT.    STEP.
        ,  LIMIT .

1DDA NEXT-LOOP    RST   0028,FP-CALC        -
                  DEFB  +E1,get-mem-1       l
                  DEFB  +E0,get-mem-0       l, v
                  DEFB  +E2,get-mem-2       l, v, s
                  DEFB  +36,less-0          l, v,(1/0)
                  DEFB  +00,jump-true       l, v,(1/0)
                  DEFB  +02,to NEXT-1       l, v,(1/0)
                  DEFB  +01,exchange        v, l
1DE2 NEXT-1       DEFB  +03,subtract        v-l or l-v
                  DEFB  +37,greater-0       (1/0)
                  DEFB  +00,jump-true       (1/0)

                  DEFB  +04,to NEXT-2       -
                  DEFB  +38,end-calc        -
                  AND   A                      
                  RET                        -  .

,   ,     .

1DE9 NEXT-2       DEFB  +38,end-calc        -
                  SCF                         
                  RET                        .

  'READ'
 READ     DATA     LET.
        READ   .   X-PTR        READ,   CH-ADD,     DATA.

1DEC READ-3       RST   0020,NEXT-CHAR         
                                              ,