LS-DOS 6.3.1 - BASIC Overlay #2 Assembly Listing (HTML format version)

[Copyright 1999,2002 Frank Durda IV, All Rights Reserved.
Mirroring of any material on this page in any form is expressly prohibited.
The official web site for this material is:  http://nemesis.lonestar.org
Contact this address for use clearances: clearance at nemesis.lonestar.org
Comments and queries to this address: web_software_2011 at nemesis.lonestar.org]
MISOSYS EDAS-4.3 04/11/99 22:35:07 BASIC/OV2                    Page 00001 

              00001 ;BMOVE/ASM
              00003 ;
              00004 ;
0000          00005 *GET    BUILDVER/ASM            ;<631>
              00006 ;
              00007 ;       Buildver/asm is a bit of a kludge since not all utilities can load
              00008 ;       equates from LDOS60 and still compile.  LOWCORE and everybody else
              00009 ;       relies on this setting, and it eventually ends up in LDOS60/EQU
              00010 ;       for programs that can use that.
              00011 ;
FFFF          00012 @BLD631         EQU     -1      ;<631>Build 631 distribution (LEVEL 1B)
              00013 ;       These switches activate patches made since the 1B release.
              00014 ;       It is important that all earlier patches be enabled when a higher
              00015 ;       patch is enabled.
              00016 ;       Patches C thru F were published in TMQ IV.iv, page 32 (NOTE: the
              00017 ;       patch addresses listed for SPOOL in SPOOL1/FIX are 19H high.)
FFFF          00018 @BLD631C        EQU     -1      ;<631>Apply 1C patches (SETKI)
FFFF          00019 @BLD631D        EQU     -1      ;<631>Apply 1D patches (DIR)
FFFF          00020 @BLD631E        EQU     -1      ;<631>Apply 1E patches (DIR & MEMDISK/DCT)
FFFF          00021 @BLD631F        EQU     -1      ;<631>Apply 1F patches (SPOOL)
              00022 ;       Patches G and H were published in TMQ V.i, pages 10 and 18/19.
FFFF          00023 @BLD631G        EQU     -1      ;<631>Apply 1G patches (//KEYIN,DIR,DO *)
FFFF          00024 @BLD631H        EQU     -1      ;<631>Apply 1H patches (MEMORY)
              00025 ;
              00026 ;End of BUILDVER/ASM
0000          00027 *GET    NEWB/EQU
0000          00028 @@1     DEFL    0000H
0000          00029 @@2     DEFL    0000H
0000          00030 @@3     DEFL    0000H
0000          00031 @@4     DEFL    0000H
1E00          00032 DOSOVR@ EQU     1E00H
819F          00033 LISTLIN@        EQU     819FH
83E0          00034 LSTKEY$ EQU     83E0H
83DC          00035 LSTLIN$ EQU     83DCH
83DE          00036 LSTNUM$ EQU     83DEH
83DB          00037 LSTTYP$ EQU     83DBH
83E1          00038 LSTVAR$ EQU     83E1H
80F4          00039 NOBRK@  EQU     80F4H
8277          00040 OVRLAY$ EQU     8277H
0069          00041 OVRLY$  EQU     0069H
8515          00042 PRMERR$ EQU     8515H
854E          00043 SIGNON$ EQU     854EH
854D          00044 STOR1$  EQU     854DH
8549          00045 STOR2$  EQU     8549H
854B          00046 STOR3$  EQU     854BH
000D          00047 CR      EQU     13
000E          00048 NUMTOKE EQU     0EH             ;Token for line ref.
5AB4          00049 FIND    EQU     5AB4H
5920          00050 READY   EQU     5920H           ;Print ready msg
5E93          00051 NXTCHR  EQU     5E93H           ;parse down line
5F9A          00052 NUM2DE  EQU     5F9AH           ;HL => value in DE
7178          00053 HIPT    EQU     7178H           ;Ptr to highest avail
71A3          00054 LOPT    EQU     71A3H           ;Ptr to lowest avail
6E9E          00055 PGMBGN  EQU     6E9EH           ;Ptr to start of pgm
7F1F          00056 OV1     EQU     7F1FH           ;Entry to reload ov1
5FAE          00057 NUMPOSN EQU     5FAEH           ;Find refed number
7145          00058 IPOS    EQU     7145H           ;Continuation pt after ref. #
7039          00059 INBUF   EQU     7039H           ;Input buffer
7A0D          00060 UNTOKE  EQU     7A0DH
6EF9          00061 LBUF    EQU     6EF9H
7192          00062 CURLIN  EQU     7192H
5F95          00063 FUNCERR EQU     5F95H
425C          00064 OMERR   EQU     425CH
46A5          00065 BASDSP  EQU     46A5H
3139          00066 NUMDSP  EQU     3139H
              00067 ;
              00068 ;
1E00          00069         ORG     DOSOVR@
              00070 ;
              00071 ;
              00072 ;       MOVE - Upon entry, HL => cmdline fm basic
              00073 ;
              00074 ;
1E00 ED735223 00075         LD      (SAVSTK),SP     ;Stack after clear done
1E04 FE05     00076         CP      5
1E06 CAC522   00077         JP      Z,COPY
1E09 FE02     00078         CP      2
1E0B C2C020   00079         JP      NZ,DOFIND
              00080 ;
1E0E CD4A1E   00081 MOVE:   CALL    NXTLIN          ;Get a line #
1E11 ED535623 00082         LD      (NUM1),DE       ;Start line
1E15 ED43A71E 00083         LD      (STRTLIN),BC    ;Line start pointer
1E19 D5       00084         PUSH    DE
1E1A CD4A1E   00085         CALL    NXTLIN          ;Get ending line
1E1D ED535823 00086         LD      (NUM2),DE
1E21 ED43AA1E 00087         LD      (ENDLIN),BC     ;Line start pointer
1E25 44       00088         LD      B,H             ;Save HL
1E26 4D       00089         LD      C,L
1E27 EB       00090         EX      DE,HL           ;End to HL
1E28 D1       00091         POP     DE
1E29 B7       00092         OR      A
1E2A ED52     00093         SBC     HL,DE           ;End > start!
1E2C DA4623   00094         JP      C,BADLIN
1E2F 60       00095         LD      H,B
1E30 69       00096         LD      L,C             ;Restore buffer ptr
1E31 CD935E   00097         CALL    NXTCHR          ;Must be last now
1E34 CA4623   00098         JP      Z,BADLIN
1E37 CD9A5F   00099         CALL    NUM2DE          ;Get number
1E3A C24623   00100         JP      NZ,BADLIN
1E3D CD561E   00101         CALL    NXTLIN1
1E40 ED539C1E 00102         LD      (NUM3),DE       ;Save endline
1E44 ED43861E 00103         LD      (POSN3),BC      ;Save line start
1E48 181A     00104         JR      GOTLIN
              00105 ;
              00106 ;       Get and check a line
              00107 ;
1E4A CD935E   00108 NXTLIN  CALL    NXTCHR          ;Pt to a line #
1E4D CA4623   00109         JP      Z,BADLIN        ;Must have something
1E50 CD9A5F   00110         CALL    NUM2DE          ;Get the value
1E53 CA4623   00111         JP      Z,BADLIN
1E56 7A       00112 NXTLIN1 LD      A,D             ;Not line zero
1E57 B3       00113         OR      E
1E58 CA4623   00114         JP      Z,BADLIN
1E5B E5       00115         PUSH    HL              ;Save buffer ptr
1E5C CDB45A   00116         CALL    FIND
1E5F E1       00117         POP     HL
1E60 D8       00118         RET     C               ;Back if real line
1E61 C34623   00119         JP      BADLIN
              00120 ;
1E64 ED5B9C1E 00121 GOTLIN: LD      DE,(NUM3)       ;Get newline posn
1E68 CDBA1F   00122         CALL    RANGE           ;Check that not in block!
1E6B D24623   00123         JP      NC,BADLIN       ;Quit if it is
1E6E CDB45A   00124         CALL    FIND            ;Find num3
1E71 23       00125         INC     HL
1E72 23       00126         INC     HL              ;Pt to following line #
1E73 5E       00127         LD      E,(HL)
1E74 23       00128         INC     HL
1E75 56       00129         LD      D,(HL)          ;Line # to DE
1E76 2A5623   00130         LD      HL,(NUM1)
1E79 B7       00131         OR      A
1E7A ED52     00132         SBC     HL,DE           ;Be sure a move will be made
1E7C CA4623   00133         JP      Z,BADLIN
1E7F 210000   00134         LD      HL,0            ;First, zero line ctr
1E82 22C31E   00135         LD      (BLANKS),HL
1E85 210000   00136         LD      HL,$-$          ;Move line posn
1E86          00137 POSN3   EQU     $-2
1E88 5E       00138         LD      E,(HL)          ;Get next line address
1E89 23       00139         INC     HL
1E8A 56       00140         LD      D,(HL)
1E8B ED535E23 00141         LD      (NEWLIN),DE     ;Save for move
1E8F EB       00142         EX      DE,HL           ;HL to nxt line
1E90 7E       00143         LD      A,(HL)          ;See if end
1E91 23       00144         INC     HL              ;Pt to line #
1E92 B6       00145         OR      (HL)
1E93 23       00146         INC     HL
1E94 5E       00147         LD      E,(HL)
1E95 23       00148         INC     HL
1E96 56       00149         LD      D,(HL)
1E97 EB       00150         EX      DE,HL           ;Nxt line to HL
1E98 280C     00151         JR      Z,GOODRM        ;If so, have enuf lines!
1E9A 2B       00152         DEC     HL              ;Cant be this line
1E9B 110000   00153         LD      DE,$-$
1E9C          00154 NUM3    EQU     $-2
1E9E ED52     00155         SBC     HL,DE           ;Get blanks avail.
1EA0 CA4623   00156         JP      Z,BADLIN        ;Quit if no room
1EA3 22C31E   00157         LD      (BLANKS),HL     ;Save this number
              00158 ;
              00159 ;       Now, count the lines to move
              00160 ;
1EA6 210000   00161 GOODRM: LD      HL,$-$
1EA7          00162 STRTLIN EQU     $-2
1EA9 110000   00163         LD      DE,$-$
1EAA          00164 ENDLIN  EQU     $-2
1EAC 010100   00165         LD      BC,1            ;Line counter
1EAF B7       00166 CNTLP:  OR      A
1EB0 E5       00167         PUSH    HL
1EB1 ED52     00168         SBC     HL,DE           ;See if at end
1EB3 E1       00169         POP     HL
1EB4 CAC21E   00170         JP      Z,ENDCNT        ;Go if so
1EB7 7E       00171         LD      A,(HL)          ;Get nxt line start
1EB8 23       00172         INC     HL
1EB9 66       00173         LD      H,(HL)
1EBA 6F       00174         LD      L,A
1EBB B4       00175         OR      H               ;Just in case, dont go to end
1EBC CA4623   00176         JP      Z,BADLIN
1EBF 03       00177         INC     BC              ;Show another coming
1EC0 18ED     00178         JR      CNTLP
              00179 ;
1EC2 210000   00180 ENDCNT: LD      HL,$-$          ;Get lines avail
1EC3          00181 BLANKS  EQU     $-2
1EC5 7C       00182         LD      A,H
1EC6 B5       00183         OR      L               ;If 0, always enough
1EC7 2805     00184         JR      Z,OKLINS
1EC9 ED42     00185         SBC     HL,BC           ;Sub count fm avail
1ECB DA4623   00186         JP      C,BADLIN        ;"Not enuf lines avail...
1ECE ED435A23 00187 OKLINS: LD      (LTM),BC        ;Save count of lines
              00188 ;
              00189 ;       Now check the memory needed
              00190 ;
1ED2 2A7871   00191         LD      HL,(HIPT)
1ED5 ED5BA371 00192         LD      DE,(LOPT)
1ED9 B7       00193         OR      A
1EDA ED52     00194         SBC     HL,DE           ;HL has free memory
1EDC E5       00195         PUSH    HL
1EDD 2AAA1E   00196         LD      HL,(ENDLIN)     ;Ptr to last lin
1EE0 5E       00197         LD      E,(HL)          ;This pts to end of
1EE1 23       00198         INC     HL              ; line+1
1EE2 56       00199         LD      D,(HL)
1EE3 EB       00200         EX      DE,HL           ;End+1 to HL
1EE4 ED5BA71E 00201         LD      DE,(STRTLIN)    ;Start posn
1EE8 B7       00202         OR      A
1EE9 ED52     00203         SBC     HL,DE           ;This is needed space
1EEB 225C23   00204         LD      (TOMOVE),HL     ;Save byte count
1EEE EB       00205         EX      DE,HL           ;Needed to DE
1EEF E1       00206         POP     HL              ;Available space
1EF0 ED52     00207         SBC     HL,DE
1EF2 DA4A23   00208         JP      C,NOMEM
              00209 ;
              00210 ;       Determine direction of shuffle
              00211 ;
1EF5 2AA71E   00212         LD      HL,(STRTLIN)
1EF8 ED5B5E23 00213         LD      DE,(NEWLIN)
1EFC B7       00214         OR      A
1EFD ED52     00215         SBC     HL,DE           ;CF set means up
1EFF F5       00216         PUSH    AF              ;Save dir flag
              00217 ;
              00218 ;       Now, mark all program ref's to these lines
              00219 ;       First, get offset fm current locn in mem to
              00220 ;       where the lines to be moved will end up.
              00221 ;
1F00 2A861E   00222         LD      HL,(POSN3)      ;Ptr to line to go after
1F03 5E       00223         LD      E,(HL)          ;Now get nxt posn
1F04 23       00224         INC     HL              ; as this will be start
1F05 56       00225         LD      D,(HL)          ; of insert point
1F06 2AA71E   00226         LD      HL,(STRTLIN)    ;Starting posn
1F09 EB       00227         EX      DE,HL
1F0A F5       00228         PUSH    AF
1F0B B7       00229         OR      A
1F0C ED52     00230         SBC     HL,DE           ;This is the offset
1F0E F1       00231         POP     AF              ;Get back dir
1F0F 3007     00232         JR      NC,DIR2         ;Done if move down
1F11 ED5B5C23 00233         LD      DE,(TOMOVE)     ;Else need to sub this also
1F15 B7       00234         OR      A
1F16 ED52     00235         SBC     HL,DE
1F18 22CC1F   00236 DIR2:   LD      (OFFSET),HL
              00237 ;
              00238 ;       Now find line refs and insert a 0D token and the line
              00239 ;       address PLUS the offset. This must be done to get
              00240 ;       the renumbered lines after the move when they are in
              00241 ;       their new positions.
              00242 ;
1F1B F601     00243         OR      1
1F1D 325523   00244 TIME2   LD      (DOPASS1),A     ;Make NZ
1F20 2A9E6E   00245         LD      HL,(PGMBGN)     ;Get the start of the pgrm
1F23 2B       00246         DEC     HL
1F24 23       00247 PAS1    INC     HL              ;Pt to next char
1F25 7E       00248         LD      A,(HL)
1F26 23       00249         INC     HL
1F27 B6       00250         OR      (HL)            ;Ck for end
1F28 CAD31F   00251         JP      Z,PAS1DUN       ;Go if done
1F2B 23       00252         INC     HL
1F2C 5E       00253         LD      E,(HL)          ;Get the line # into DE
1F2D 23       00254         INC     HL
1F2E 56       00255         LD      D,(HL)
1F2F CD935E   00256 PAS1A   CALL    NXTCHR          ;Get another char fm line
1F32 B7       00257 PAS1B   OR      A               ;See if line end
1F33 28EF     00258         JR      Z,PAS1          ;New line if so
1F35 4F       00259         LD      C,A             ;Save the token
1F36 3A5523   00260         LD      A,(DOPASS1)     ;Is this pass 1 or 2?
1F39 B7       00261         OR      A
1F3A 79       00262         LD      A,C             ;Recover token
1F3B 285B     00263         JR      Z,PAS2          ;Go if pass 2
1F3D FEA8     00264         CP      0A8H            ;Ck for ON ERROR
1F3F 2018     00265         JR      NZ,PAS1C        ;Go if not
1F41 CD935E   00266         CALL    NXTCHR
1F44 FE89     00267         CP      89H             ;See if goto
1F46 20EA     00268         JR      NZ,PAS1B
1F48 CD935E   00269         CALL    NXTCHR
1F4B FE0E     00270         CP      0EH             ;Line number next?
1F4D 20E3     00271         JR      NZ,PAS1B
1F4F D5       00272         PUSH    DE              ;Save the line number
1F50 CDAE5F   00273         CALL    NUMPOSN         ;get refed line # posn
1F53 7A       00274         LD      A,D             ;See if "0"
1F54 B3       00275         OR      E
1F55 200A     00276         JR      NZ,PAS1D        ;Go if not
1F57 182E     00277         JR      PAS1F           ; else skip - cant adjust a 0
1F59 FE0E     00278 PAS1C:  CP      0EH             ;Line # follows?
1F5B 20D2     00279         JR      NZ,PAS1A        ;No, get another token
1F5D D5       00280         PUSH    DE              ;Save curr line
1F5E CDAE5F   00281         CALL    NUMPOSN         ;Get refed line # posn
1F61 E5       00282 PAS1D:  PUSH    HL              ;Save posn in line
1F62 CDB45A   00283         CALL    FIND            ;Get posn of refed line
1F65 300A     00284         JR      NC,UNDEF
1F67 CDBA1F   00285         CALL    RANGE           ;See if a moved ref.
1F6A 381A     00286         JR      C,PAS1E         ;Dont do if not in range
1F6C 0B       00287         DEC     BC
1F6D 3E0D     00288         LD      A,0DH
1F6F 1839     00289         JR      PAS2A           ;Go if line found
              00290 ;
              00291 ;       Undefined line error report
              00292 ;
1F71 CDE941   00293 UNDEF:  CALL    41E9H
1F74 218B1F   00294         LD      HL,UNDEF$
1F77 D5       00295         PUSH    DE
1F78 CDA546   00296         CALL    46A5H           ;Dsply undefined
1F7B E1       00297         POP     HL
1F7C CD3931   00298         CALL    3139H           ;Dsply the line #
1F7F C1       00299         POP     BC
1F80 E1       00300         POP     HL
1F81 E5       00301         PUSH    HL
1F82 C5       00302         PUSH    BC
1F83 CD3131   00303         CALL    3131H           ;Dsply source line #
              00304 ;
1F86 E1       00305 PAS1E:  POP     HL
1F87 D1       00306 PAS1F:  POP     DE
1F88 2B       00307         DEC     HL
1F89 18A4     00308 PAS1G:  JR      PAS1A
1F8B 55       00309 UNDEF$  DB      'Undef. line ',00H
     6E 64 65 66 2E 20 6C 69
     6E 65 20 00 
              00310 ;
              00311 ;       Install new line # references
              00312 ;
1F98 FE0D     00313 PAS2:   CP      0DH             ;Token fm pass 1?
1F9A 20ED     00314         JR      NZ,PAS1G        ;Go if not
1F9C D5       00315         PUSH    DE
1F9D CDAE5F   00316         CALL    NUMPOSN         ;Get refed line posn
1FA0 E5       00317         PUSH    HL
1FA1 EB       00318         EX      DE,HL
1FA2 23       00319         INC     HL
1FA3 23       00320         INC     HL
1FA4 23       00321         INC     HL
1FA5 4E       00322         LD      C,(HL)          ;P/u new line #
1FA6 23       00323         INC     HL
1FA7 46       00324         LD      B,(HL)          ; into BC
1FA8 3E0E     00325         LD      A,0EH           ;Restore line ref token
1FAA 21861F   00326 PAS2A:  LD      HL,PAS1E        ;Return point
1FAD E5       00327         PUSH    HL
1FAE 2A4571   00328         LD      HL,(IPOS)       ;Posn in line +1
1FB1 E5       00329         PUSH    HL              ;Save for nxtchr
1FB2 2B       00330         DEC     HL              ;Ref'ed line #
1FB3 70       00331         LD      (HL),B          ;Insert whatever
1FB4 2B       00332         DEC     HL
1FB5 71       00333         LD      (HL),C
1FB6 2B       00334         DEC     HL
1FB7 77       00335         LD      (HL),A          ;Insert 0D or 0E
1FB8 E1       00336         POP     HL              ;Set for scan continue
1FB9 C9       00337         RET
              00338 ;
              00339 ;       See if line # in DE is in the move range
              00340 ;       BC,DE must not be altered
              00341 ;
1FBA 2A5823   00342 RANGE:  LD      HL,(NUM2)       ;Ending line #
1FBD B7       00343         OR      A
1FBE ED52     00344         SBC     HL,DE           ;Sub refed line
1FC0 D8       00345         RET     C               ;Back if line greater
1FC1 2A5623   00346         LD      HL,(NUM1)       ;Get starting line
1FC4 B7       00347         OR      A
1FC5 ED52     00348         SBC     HL,DE
1FC7 2802     00349         JR      Z,RNG1
1FC9 3F       00350         CCF
1FCA D8       00351         RET     C               ;Back if less
1FCB 210000   00352 RNG1:   LD      HL,$-$          ;Get the offset
1FCC          00353 OFFSET  EQU     $-2
1FCE 09       00354         ADD     HL,BC
1FCF 44       00355         LD      B,H
1FD0 4D       00356         LD      C,L             ;New offset to BC
1FD1 B7       00357         OR      A
1FD2 C9       00358         RET
              00359 ;
              00360 ;       Done with adjust, where did we come from?
              00361 ;
              00362 PAS1DUN:
1FD3 3A5523   00363         LD      A,(DOPASS1)
1FD6 B7       00364         OR      A               ;NZ=pass1
1FD7 CA4E23   00365         JP      Z,EXIT          ;Go if done
              00366 ;
              00367 ;       Now, we need to move the lines and change the memory
              00368 ;       pointers on the move lines and the shuffled lines.
              00369 ;       Start by jerking out the move block
              00370 ;
1FDA 2AA71E   00371         LD      HL,(STRTLIN)    ;Ptr to 1st line to move
1FDD ED5BA371 00372         LD      DE,(LOPT)       ;Free mem
1FE1 ED4B5C23 00373         LD      BC,(TOMOVE)
1FE5 EDB0     00374         LDIR                    ;Block now moved into memory
1FE7 ED535F20 00375         LD      (ENDPT),DE      ;For block adjust
              00376 ;
              00377 ;       CF has direction, CF=UP
              00378 ;       Init upward move
              00379 ;
1FEB F1       00380         POP     AF
1FEC F5       00381         PUSH    AF
1FED 2AAA1E   00382         LD      HL,(ENDLIN)     ;Pt past end line
1FF0 7E       00383         LD      A,(HL)
1FF1 23       00384         INC     HL
1FF2 66       00385         LD      H,(HL)
1FF3 6F       00386         LD      L,A             ;Ptr to HL
1FF4 E5       00387         PUSH    HL
1FF5 E5       00388         PUSH    HL
1FF6 C1       00389         POP     BC              ;Endlin+1 to BC
1FF7 2A5E23   00390         LD      HL,(NEWLIN)
1FFA B7       00391         OR      A
1FFB ED42     00392         SBC     HL,BC           ;This is bytes to move
1FFD 44       00393         LD      B,H
1FFE 4D       00394         LD      C,L             ;Count to BC
1FFF E1       00395         POP     HL
2000 ED5BA71E 00396         LD      DE,(STRTLIN)
2004 F1       00397         POP     AF
2005 3EB0     00398         LD      A,0B0H          ;LDIR byte
2007 F5       00399         PUSH    AF              ;Keep CF
2008 3811     00400         JR      C,DOMOV
              00401 ;
              00402 ;       No, is downward
              00403 ;
200A EB       00404         EX      DE,HL           ;HL=>STRT, DE=>END
200B 2B       00405         DEC     HL
200C 1B       00406         DEC     DE
200D E5       00407         PUSH    HL
200E ED4B5E23 00408         LD      BC,(NEWLIN)     ;Start-1
2012 B7       00409         OR      A
2013 ED42     00410         SBC     HL,BC
2015 23       00411         INC     HL
2016 44       00412         LD      B,H             ;Count to BC
2017 4D       00413         LD      C,L
2018 E1       00414         POP     HL
2019 3EB8     00415         LD      A,0B8H          ;LDDR inst.
              00416 ;
201B 322320   00417 DOMOV:  LD      (DIRECT),A      ;Set direction
201E ED438C20 00418         LD      (TOCNG),BC      ;Count for adj later
2022 ED       00419         DB      0EDH            ;LDxx opcode
2023 B0       00420 DIRECT  DB      0B0H            ;Either DR or IR opcode
2024 3004     00421         JR      NC,ADJ0         ;Go if downward
2026 ED537220 00422         LD      (UPSTART),DE    ;Save is move was up
              00423 ;
              00424 ;       Move done, adjust block pointers and line #'s
              00425 ;
202A 2AA371   00426 ADJ0:   LD      HL,(LOPT)       ;Pt to moved block
202D E5       00427         PUSH    HL              ;Save start
202E ED5BA71E 00428         LD      DE,(STRTLIN)    ;Where it came from
2032 B7       00429         OR      A
2033 ED52     00430         SBC     HL,DE
2035 225A20   00431         LD      (OFFSET1),HL    ;Save this offset
2038 E1       00432         POP     HL              ;HL to blk start
2039 ED4BCC1F 00433         LD      BC,(OFFSET)     ;Amount moved
203D 5E       00434 ADJ1:   LD      E,(HL)          ;LSB old ptr
203E 23       00435         INC     HL
203F 56       00436         LD      D,(HL)          ;MSB old ptr
2040 D5       00437         PUSH    DE              ;Save old ptr valu
2041 EB       00438         EX      DE,HL           ;Old ptr to HL
2042 09       00439         ADD     HL,BC           ;New ptr in HL
2043 EB       00440         EX      DE,HL           ;New ptr in DE
              00441 ;
2044 E5       00442         PUSH    HL              ;Save, make new line #
2045 D5       00443         PUSH    DE
2046 ED5B9C1E 00444         LD      DE,(NUM3)       ;Request line
204A 13       00445         INC     DE
204B ED539C1E 00446         LD      (NUM3),DE
204F 23       00447         INC     HL
2050 73       00448         LD      (HL),E          ;Insert new line #
2051 23       00449         INC     HL
2052 72       00450         LD      (HL),D
2053 D1       00451         POP     DE
2054 E1       00452         POP     HL
              00453 ;
2055 72       00454         LD      (HL),D          ;Put in new ptr
2056 2B       00455         DEC     HL
2057 73       00456         LD      (HL),E
2058 E1       00457         POP     HL              ;Old ptr value
2059 110000   00458         LD      DE,$-$          ;Mem offset
205A          00459 OFFSET1 EQU     $-2
205C 19       00460         ADD     HL,DE           ;This next HL posn
205D EB       00461         EX      DE,HL           ;Save in DE
205E 210000   00462         LD      HL,$-$          ;End of move blk
205F          00463 ENDPT   EQU     $-2
2061 B7       00464         OR      A
2062 ED52     00465         SBC     HL,DE           ;At the end?
2064 2803     00466         JR      Z,ADJ2          ;Go if so
2066 EB       00467         EX      DE,HL           ;HL pts to new ptr
2067 18D4     00468         JR      ADJ1
              00469 ;
2069 ED5B5E23 00470 ADJ2:   LD      DE,(NEWLIN)     ;Get new posn in pgm area
206D F1       00471         POP     AF              ;See shich direction
206E F5       00472         PUSH    AF
206F 3003     00473         JR      NC,ADJ2A        ;Ok if is down
2071 110000   00474         LD      DE,$-$          ;Else this is new locn
2072          00475 UPSTART EQU     $-2
2074 2AA371   00476 ADJ2A:  LD      HL,(LOPT)       ;Where we stored the block
2077 ED4B5C23 00477         LD      BC,(TOMOVE)     ;Block len
207B EDB0     00478         LDIR
              00479 ;
              00480 ;       Now all line pointers need adjustment except
              00481 ;       those in the moved block. AF still on stack with
              00482 ;       CF indicating direction.
              00483 ;
207D 2AA71E   00484         LD      HL,(STRTLIN)    ;Init was upward
2080 ED4B5C23 00485         LD      BC,(TOMOVE)
2084 F1       00486         POP     AF
2085 3804     00487         JR      C,WASUP         ;Go if ok
2087 2A5E23   00488         LD      HL,(NEWLIN)
208A 09       00489         ADD     HL,BC
              00490 ;
              00491 ;       Now, get the offset to adjust. TOMOVE has the right
              00492 ;       adjustment, but must be made negative if the move
              00493 ;       was in an upward position
              00494 ;
208B 010000   00495 WASUP:  LD      BC,$-$          ;Len of moved pgm
208C          00496 TOCNG   EQU     $-2
208E F5       00497         PUSH    AF              ;Save flags
208F E5       00498         PUSH    HL              ;Save start
2090 09       00499         ADD     HL,BC           ;This is end
2091 22AF20   00500         LD      (ENDPT1),HL
2094 E1       00501         POP     HL
2095 F1       00502         POP     AF
2096 ED4B5C23 00503         LD      BC,(TOMOVE)     ;This is move offset
209A 3009     00504         JR      NC,ADJ3         ;Go if move was down
209C E5       00505         PUSH    HL
209D B7       00506         OR      A               ;Reset CF
209E ED62     00507         SBC     HL,HL           ;HL = 0
20A0 ED42     00508         SBC     HL,BC           ;Offset negative
20A2 44       00509         LD      B,H             ; and back to BC
20A3 4D       00510         LD      C,L
20A4 E1       00511         POP     HL
20A5 5E       00512 ADJ3:   LD      E,(HL)          ;LSB old ptr
20A6 23       00513         INC     HL
20A7 56       00514         LD      D,(HL)          ;MSB old ptr
20A8 EB       00515         EX      DE,HL           ;Old ptr to HL
20A9 09       00516         ADD     HL,BC           ;New ptr in HL
20AA EB       00517         EX      DE,HL           ;New ptr in DE
20AB 72       00518         LD      (HL),D          ;Put in new ptr
20AC 2B       00519         DEC     HL
20AD 73       00520         LD      (HL),E
20AE 210000   00521         LD      HL,$-$          ;End of move blk
20AF          00522 ENDPT1  EQU     $-2
20B1 B7       00523         OR      A
20B2 ED52     00524         SBC     HL,DE           ;At the end?
20B4 2803     00525         JR      Z,ADJ4          ;Go if so
20B6 EB       00526         EX      DE,HL           ;HL pts to new ptr
20B7 18EC     00527         JR      ADJ3
              00528 ;
              00529 ;       Now, go back and fix line # refs
              00530 ;
20B9 AF       00531 ADJ4:   XOR     A               ;Set pass 2
20BA 325523   00532         LD      (DOPASS1),A     ;This msut be 0
20BD C31D1F   00533         JP      TIME2
              00534 ;
              00535 ;
              00536 ;       Find something 
              00537 ;
              00538 DOFIND:
20C0 32E921   00539         LD      (DTYPE),A       ;Save display mode
20C3 AF       00540         XOR     A
20C4 32F121   00541         LD      (FTIME),A       ;Dsply flag
20C7 21FA6E   00542         LD      HL,LBUF+1       ;Pt to command
20CA CD935E   00543         CALL    NXTCHR          ;Get 1st char of command
20CD CA6522   00544         JP      Z,AGAIN         ;Repeat previous
20D0 FE22     00545         CP      '"'             ;Literal string?
20D2 CA4623   00546         JP      Z,BADLIN        ;Error - cant find strings
20D5 FE41     00547         CP      'A'             ;See if variable
20D7 3804     00548         JR      C,CPNUM         ;Go if not
20D9 FE5B     00549         CP      'Z'+1
20DB 384F     00550         JR      C,VARFIND       ;Go if it is variable
20DD FE30     00551 CPNUM:  CP      '0'
20DF DA4623   00552         JP      C,BADLIN        ;Can't be less
20E2 FE3A     00553         CP      '9'+1
20E4 DA1E22   00554         JP      C,NUMFIND       ;Go if number
              00555 ;
              00556 ;       Find a keyword
              00557 ;
              00558 KEYFIND:
20E7 32DB83   00559         LD      (LSTTYP$),A     ;Save the type
20EA FEFF     00560         CP      0FFH            ;Special 2 byter?
20EC 06FF     00561         LD      B,0FFH          ;Init one part only
20EE 2002     00562         JR      NZ,KF1          ;Go if not
20F0 23       00563         INC     HL
20F1 46       00564         LD      B,(HL)          ;Get the 2nd half
20F2 4F       00565 KF1:    LD      C,A             ;Save main token
20F3 78       00566         LD      A,B
20F4 32E083   00567         LD      (LSTKEY$),A     ;Save 2nd type
20F7 2A9E6E   00568         LD      HL,(PGMBGN)     ;Find the program start
20FA 2B       00569 KEYREP: DEC     HL
20FB CDDA21   00570 KEYLP:  CALL    GTPTR
20FE CA4E23   00571         JP      Z,EXIT          ;Go if no more
2101 23       00572         INC     HL
2102 5E       00573         LD      E,(HL)          ;Get this line #
2103 23       00574         INC     HL
2104 56       00575         LD      D,(HL)
2105 ED53DC83 00576         LD      (LSTLIN$),DE    ;Save for next time
2109 CD935E   00577 KEYLP1: CALL    NXTCHR          ;Get a char
210C B7       00578         OR      A
210D 28EC     00579         JR      Z,KEYLP         ;Go on line end
210F FEFF     00580         CP      0FFH            ;Spcl?
2111 2805     00581         JR      Z,KEY2          ;Yes, ck it out
2113 B9       00582         CP      C               ;Was not spcl
2114 2811     00583         JR      Z,KEY3          ;Go if match
2116 18F1     00584         JR      KEYLP1
2118 B9       00585 KEY2:   CP      C               ;Looking for FF?
2119 08       00586         EX      AF,AF'          ;Save result flag
211A CD935E   00587         CALL    NXTCHR          ; and get next always
211D B7       00588         OR      A               ;EOL?
211E 28DB     00589         JR      Z,KEYLP         ;Done if so
2120 B8       00590         CP      B               ;Set for this char cp
2121 08       00591         EX      AF,AF'          ;Was C a match?
2122 20E5     00592         JR      NZ,KEYLP1       ;No, do more
2124 08       00593         EX      AF,AF'          ;C was, was B?
2125 20E2     00594         JR      NZ,KEYLP1       ;No, domore
2127 CDE821   00595 KEY3:   CALL    SHOW
212A 18CF     00596         JR      KEYLP
              00597 ;
              00598 VARFIND:
212C 11E183   00599         LD      DE,LSTVAR$      ;Save variable
212F 060A     00600         LD      B,10            ;Max cmp len
2131 7E       00601 VAR1:   LD      A,(HL)          ;Get a char
2132 23       00602         INC     HL
2133 CD9D22   00603         CALL    VALID           ;See if real char
2136 2004     00604         JR      NZ,VAR2         ;Found end if not
2138 12       00605         LD      (DE),A          ;Save char
2139 13       00606         INC     DE
213A 10F5     00607         DJNZ    VAR1            ;Find more
213C EB       00608 VAR2:   EX      DE,HL
213D 3600     00609         LD      (HL),0          ;Terminate variable
213F 3E0A     00610         LD      A,10
2141 90       00611         SUB     B               ;Get len of variable
2142 CA4623   00612         JP      Z,BADLIN        ;No len is immpossible
2145 32DB83   00613         LD      (LSTTYP$),A     ;Len = type
2148 47       00614         LD      B,A             ;Save len in B and
2149 4F       00615         LD      C,A             ; in C
214A 2A9E6E   00616         LD      HL,(PGMBGN)     ;Pt to start
214D 2B       00617 VARREP: DEC     HL
214E CDDA21   00618 VARLP:  CALL    GTPTR
2151 CA4E23   00619         JP      Z,EXIT
2154 41       00620         LD      B,C             ;Always reset counter
2155 23       00621         INC     HL              ;Now get line #
2156 5E       00622         LD      E,(HL)
2157 23       00623         INC     HL
2158 56       00624         LD      D,(HL)
2159 ED53DC83 00625         LD      (LSTLIN$),DE    ;Save for a match
215D 11E183   00626 VARLP3: LD      DE,LSTVAR$      ;Pt to stored var.
2160 CD935E   00627 VARLP1: CALL    NXTCHR          ;Get a char
2163 B7       00628         OR      A               ;Line end?
2164 28E8     00629         JR      Z,VARLP         ;Go if so
2166 FE8F     00630         CP      8FH             ;REM line
2168 CCD321   00631 VP0:    CALL    Z,DUMPLIN
216B 28E1     00632         JR      Z,VARLP
              00633         IF      @BLD631
216D FE84     00634         CP      84H             ;<631>
216F 28F7     00635         JR      Z,VP0           ;<631>
2171 FEFF     00636         CP      0FFH            ;<631>
2173 2003     00637         JR      NZ,VP0A         ;<631>
2175 23       00638         INC     HL              ;<631>
2176 18E8     00639         JR      VARLP1          ;<631>
              00640         ELSE
              00641         JP      PATCH1          ;Go to patch #6
              00642         NOP
              00643         ENDIF
2178 FE22     00644 VP0A    CP      '"'             ;String start?
217A 2835     00645         JR      Z,BYSTR         ;Bypass if so
217C FE41     00646         CP      'A'             ;Some variable?
217E 38E0     00647         JR      C,VARLP1        ;No, not a variable
2180 FE5B     00648         CP      'Z'+1
2182 30DC     00649         JR      NC,VARLP1       ;Go if not variable
2184 EB       00650 VARLP2: EX      DE,HL           ;DE to line, HL to var storage
2185 BE       00651         CP      (HL)            ;A match?
2186 EB       00652         EX      DE,HL           ;Back to normal
2187 2034     00653         JR      NZ,BYVAR        ;No, bypass entire variable
2189 13       00654         INC     DE              ;Next var. posn
218A 05       00655         DEC     B               ;Count down var len
218B C2A921   00656         JP      NZ,VAR3         ;Go if not end
218E FE28     00657         CP      '('             ;If subscripted, always ok
2190 2803     00658         JR      Z,VAR5
2192 79       00659         LD      A,C             ;Was it full 10 chars?
2193 FE0A     00660         CP      10
2195 CCE821   00661 VAR5:   CALL    Z,SHOW          ;If so, can be spcl
2198 28B4     00662         JR      Z,VARLP
219A 23       00663         INC     HL              ;Ck if next is spcl
219B 47       00664         LD      B,A             ;Save orig char
219C 7E       00665         LD      A,(HL)          ;If it is, not a match
219D 2B       00666         DEC     HL
219E CD9D22   00667         CALL    VALID
21A1 78       00668         LD      A,B             ;Get back char
21A2 2819     00669         JR      Z,BYVAR         ;Bypass if spcl
21A4 CDE821   00670         CALL    SHOW            ;Else show line
21A7 18A5     00671         JR      VARLP           ; and on to next
21A9 CD935E   00672 VAR3:   CALL    NXTCHR          ;Get nxt char
21AC B7       00673         OR      A
21AD 289F     00674         JR      Z,VARLP         ;Go on line end
21AF 18D3     00675         JR      VARLP2          ;Ck another char
21B1 CD935E   00676 BYSTR:  CALL    NXTCHR          ;Get either str or var char
21B4 B7       00677         OR      A
21B5 2897     00678         JR      Z,VARLP         ;Go on line end
21B7 FE22     00679         CP      '"'             ;End of string?
21B9 28A2     00680         JR      Z,VARLP3        ;Yes, cont search
21BB 18F4     00681         JR      BYSTR           ;If not, do another
21BD 41       00682 BYVAR:  LD      B,C             ;Reset counter!
21BE FE28     00683         CP      '('             ;Subscript (groan!)
21C0 289B     00684         JR      Z,VARLP3        ;Yes, ck subs.
21C2 CD935E   00685 BYV1:   CALL    NXTCHR          ;Get a char
21C5 B7       00686         OR      A
21C6 2886     00687         JR      Z,VARLP         ;Go on line end
21C8 FE28     00688         CP      '('             ;Start subscript?
21CA 2891     00689         JR      Z,VARLP3        ;Yes, return
21CC CD9D22   00690         CALL    VALID           ;End of var?
21CF 208C     00691         JR      NZ,VARLP3       ;Go if so
21D1 18EF     00692         JR      BYV1            ;Not end, another char
              00693 ;
21D3 CD935E   00694 DUMPLIN:        CALL    NXTCHR
21D6 B7       00695         OR      A               ;Line end?
21D7 20FA     00696         JR      NZ,DUMPLIN
21D9 C9       00697         RET     
              00698 ;
              00699 ;
21DA 23       00700 GTPTR:  INC     HL
21DB 7E       00701         LD      A,(HL)          ;Get ptr lsb
21DC 320722   00702         LD      (NXTPO),A
21DF F5       00703         PUSH    AF
21E0 23       00704         INC     HL
21E1 7E       00705         LD      A,(HL)          ;Get ptr msb
21E2 320822   00706         LD      (NXTPO+1),A
21E5 F1       00707         POP     AF
21E6 B6       00708         OR      (HL)            ;End of pgm?
21E7 C9       00709         RET
              00710 ;
              00711 ;
              00712 ;       See if display line or number
              00713 ;
21E8 3E00     00714 SHOW:   LD      A,$-$
21E9          00715 DTYPE   EQU     $-1             ;Get the command
21EA FE03     00716         CP      3               ;Search?
21EC 2823     00717         JR      Z,SHOLIN        ;Go if Search
              00718 ;
              00719 SHONUM:
21EE D5       00720         PUSH    DE
21EF C5       00721         PUSH    BC              ;These must be saved
21F0 3E00     00722         LD      A,$-$
21F1          00723 FTIME   EQU     $-1             ;Z if first time
21F2 B7       00724         OR      A
21F3 3E01     00725         LD      A,1
21F5 32F121   00726         LD      (FTIME),A       ;Show not first
21F8 2806     00727         JR      Z,SHO1          ;Go if was first
21FA 210E22   00728         LD      HL,COMSTR
21FD CDA546   00729         CALL    BASDSP
2200 2ADC83   00730 SHO1:   LD      HL,(LSTLIN$)    ;Get number
2203 CD3931   00731         CALL    NUMDSP          ;Let basic show it
2206 210000   00732         LD      HL,$-$
2207          00733 NXTPO   EQU     $-2
2209 2B       00734         DEC     HL              ;1 before nxt line
220A AF       00735         XOR     A               ;Show was done
220B C1       00736         POP     BC
220C D1       00737         POP     DE
220D C9       00738         RET
              00739 ;
220E 2C       00740 COMSTR  DB      ', ',0
     20 00 
              00741 ;
              00742 ;
              00743 ;       Show the line found
              00744 ;
              00745 SHOLIN:
2211 ED5BDC83 00746         LD      DE,(LSTLIN$)    ;Get the number
2215 ED539271 00747         LD      (CURLIN),DE     ;Make it current
2219 3E2E     00748         LD      A,'.'           ;Set show current
221B C34223   00749         JP      DOLINE          ;Show it!
              00750 ;
              00751 ;       Find a reference to a line number
              00752 ;
              00753 NUMFIND:
221E CD9A5F   00754         CALL    NUM2DE          ;Get the number in DE
2221 C24E23   00755         JP      NZ,EXIT         ;Quit on error
2224 ED53DE83 00756         LD      (LSTNUM$),DE    ;Save for retry
2228 2A9E6E   00757         LD      HL,(PGMBGN)     ;Get start of pgm
222B 3E0E     00758         LD      A,NUMTOKE       ;What to look for
222D 32DB83   00759         LD      (LSTTYP$),A     ;Save also for repeat
2230 2B       00760 NUMREP: DEC     HL
2231 4F       00761         LD      C,A             ;token to match
2232 D5       00762         PUSH    DE              ;Save cp valu on stack
2233 CDDA21   00763 NUMLP:  CALL    GTPTR
2236 CA4E23   00764         JP      Z,EXIT
2239 23       00765         INC     HL
223A 5E       00766         LD      E,(HL)          ;Get this line #
223B 23       00767         INC     HL
223C 56       00768         LD      D,(HL)
223D ED53DC83 00769         LD      (LSTLIN$),DE    ;Save for next time
2241 E3       00770 NUMLP1: EX      (SP),HL         ;Save HL, posn in line
2242 E5       00771         PUSH    HL              ;Save #
2243 B7       00772         OR      A
2244 ED52     00773         SBC     HL,DE           ;See if a match
2246 E1       00774         POP     HL
2247 E3       00775         EX      (SP),HL         ;All back in posn now
2248 ED5BDC83 00776         LD      DE,(LSTLIN$)    ;Get line # back
224C 2005     00777         JR      NZ,NUMLP2
224E CDE821   00778         CALL    SHOW            ;All done, found a match
2251 18E0     00779         JR      NUMLP
2253 CD935E   00780 NUMLP2: CALL    NXTCHR          ;Get the next char fm line
2256 B7       00781         OR      A
2257 28DA     00782         JR      Z,NUMLP         ;Go if line end
2259 B9       00783         CP      C               ;Is it a ref token?
225A 20F7     00784         JR      NZ,NUMLP2       ;Cont if not
225C CD9A5F   00785         CALL    NUM2DE
225F 2A4571   00786         LD      HL,(IPOS)       ;Get back buff posn
2262 2B       00787         DEC     HL
2263 18DC     00788         JR      NUMLP1          ;See if a match
              00789 ;
              00790 ;       Entry was F with no parms, use last ones
              00791 ;
2265 3AE921   00792 AGAIN:  LD      A,(DTYPE)       ;Get command type
2268 FE04     00793         CP      4               ;Is it find?
226A CA4E23   00794         JP      Z,EXIT          ;Can't "again" a find command
226D 3ADB83   00795         LD      A,(LSTTYP$)     ;Get the last search type
2270 B7       00796         OR      A               ;Was their one?
2271 CA4623   00797         JP      Z,BADLIN                ;Back if not
2274 F5       00798         PUSH    AF              ;Save type
2275 ED5BDC83 00799         LD      DE,(LSTLIN$)    ;P/u where we left off
2279 CDB45A   00800         CALL    FIND            ;Get the address of next
227C D24623   00801         JP      NC,BADLIN       ;Something goofed
227F F1       00802         POP     AF
2280 ED5BDE83 00803         LD      DE,(LSTNUM$)    ;Get previous
2284 FE0E     00804         CP      NUMTOKE         ;Numeric?
2286 28A8     00805         JR      Z,NUMREP        ;Go if so
2288 FE80     00806         CP      80H             ;Keyword?
228A 3808     00807         JR      C,AGN1          ;Go if not
228C 4F       00808         LD      C,A             ;Token to C
228D 3AE083   00809         LD      A,(LSTKEY$)     ;Get 2nd half
2290 47       00810         LD      B,A
2291 C3FA20   00811         JP      KEYREP          ;Start find
2294 47       00812 AGN1:   LD      B,A             ;Must be var. set up len
2295 4F       00813         LD      C,A
2296 11E183   00814         LD      DE,LSTVAR$      ;Pt to old var.
2299 D5       00815         PUSH    DE              ;Get on stack
229A C34D21   00816         JP      VARREP          ;Go do it
              00817 ;
              00818 ;       Check for valid variable chars - NZ on end
              00819 ;
229D FE2E     00820 VALID:  CP      '.'             ;Valid char
229F C8       00821         RET     Z
22A0 FE41     00822         CP      'A'
22A2 3804     00823         JR      C,VAL1          ;Not a letter
22A4 FE5B     00824         CP      'Z'+1
22A6 380C     00825         JR      C,VALZ          ;Yes - back
22A8 FE30     00826 VAL1:   CP      '0'
22AA 3804     00827         JR      C,SPCL          ;Not digit, ck more
22AC FE3A     00828         CP      '9'+1
22AE 3804     00829         JR      C,VALZ          ;Yes, a number
22B0 CDB622   00830 SPCL:   CALL    CKSPCL          ;Ck for special
22B3 C9       00831         RET                     ;Return result
22B4 BF       00832 VALZ:   CP      A               ;Set Z
22B5 C9       00833         RET
              00834 ;
22B6 FE21     00835 CKSPCL: CP      '!'
22B8 C8       00836         RET     Z
22B9 FE23     00837         CP      '#'
22BB C8       00838         RET     Z
22BC FE24     00839         CP      '$'
22BE C8       00840         RET     Z
22BF FE25     00841         CP      '%'
22C1 C8       00842         RET     Z
22C2 FE28     00843         CP      '('
22C4 C9       00844         RET
              00845 ;
              00846 ;
              00847 COPY:
22C5 213970   00848         LD      HL,INBUF
22C8 CD935E   00849         CALL    NXTCHR          ;Pt to possible parm
22CB 2873     00850         JR      Z,ILLEG         ;Bad if at end
22CD CD9A5F   00851         CALL    NUM2DE          ;Get the 1st number
22D0 286E     00852         JR      Z,ILLEG         ;Bad if end
22D2 7A       00853         LD      A,D
22D3 B3       00854         OR      E
22D4 286A     00855         JR      Z,ILLEG         ;Go if not a number
22D6 E5       00856         PUSH    HL              ;Must save buffer
22D7 CDB45A   00857         CALL    FIND
22DA 3064     00858         JR      NC,ILLEG        ;Go if can't find
22DC B7       00859         OR      A
22DD 03       00860         INC     BC
22DE 03       00861         INC     BC              ;Past line ptr
22DF ED42     00862         SBC     HL,BC           ;Len to HL
22E1 2B       00863         DEC     HL
22E2 2B       00864         DEC     HL              ;Past line #
22E3 E3       00865         EX      (SP),HL         ;Save len on stack
22E4 CD935E   00866         CALL    NXTCHR          ;On to next number
22E7 2857     00867         JR      Z,ILLEG
22E9 CD9A5F   00868         CALL    NUM2DE
22EC 2052     00869         JR      NZ,ILLEG        ;Now must be end
22EE 7A       00870         LD      A,D
22EF B3       00871         OR      E
22F0 284E     00872         JR      Z,ILLEG ;Go if not number
22F2 C5       00873         PUSH    BC              ;Save old line address
22F3 CDB45A   00874         CALL    FIND
22F6 E1       00875         POP     HL              ;New posn in BC,old in HL
22F7 3847     00876         JR      C,ILLEG ;Can't have new line already
22F9 C1       00877         POP     BC              ;Get len old line
              00878 ;
              00879 ;       Copy a line
              00880 ;
22FA D5       00881         PUSH    DE              ;Save new line #
22FB 23       00882         INC     HL
22FC 23       00883         INC     HL              ;Pass nxt line ptr
22FD 11FA6E   00884         LD      DE,LBUF+1       ;  else setup for move
2300 D5       00885         PUSH    DE              ;Save buffer
2301 EDB0     00886         LDIR
2303 E1       00887 MAKLIN: POP     HL              ;Back to buffer
2304 2B       00888         DEC     HL
2305 CD0D7A   00889         CALL    UNTOKE
2308 C5       00890         PUSH    BC              ;Save current eol
2309 210500   00891         LD      HL,5            ;Max ascii line #
230C 09       00892         ADD     HL,BC           ;New end
230D EB       00893         EX      DE,HL           ;End to DE
230E 60       00894         LD      H,B             ;HL to buffer end
230F 69       00895         LD      L,C
2310 013970   00896         LD      BC,INBUF        ;Line start
2313 B7       00897         OR      A
2314 ED42     00898         SBC     HL,BC           ;Len of line
2316 44       00899         LD      B,H
2317 4D       00900         LD      C,L             ;Len to BC
2318 E1       00901         POP     HL              ;Pt to curr end
2319 EDB8     00902         LDDR                    ;Make room for line #
231B EB       00903         EX      DE,HL           ;HL to buff start
231C 0606     00904         LD      B,6             ;Clear line # area
231E 3620     00905 CLRLP:  LD      (HL),20H        ;  with spaces
2320 2B       00906         DEC     HL
2321 10FB     00907         DJNZ    CLRLP
2323 D1       00908         POP     DE              ;Line # back
2324 EB       00909         EX      DE,HL
2325 13       00910         INC     DE              ;Input buffer start
2326 D5       00911         PUSH    DE
2327 3E61     00912         LD      A,97            ;HEXDEC, make # ascii
2329 EF       00913         RST     28H
232A 13       00914 ENDL:   INC     DE              ;Find 0 byte
232B 1A       00915         LD      A,(DE)
232C B7       00916         OR      A
232D 20FB     00917         JR      NZ,ENDL
232F E1       00918         POP     HL              ;Line start
2330 D5       00919         PUSH    DE              ;Line end
2331 3E0D     00920         LD      A,13
2333 12       00921         LD      (DE),A          ;For dsp
2334 3E0A     00922         LD      A,10            ;@@dsply
2336 EF       00923         RST     40
2337 D1       00924         POP     DE
2338 AF       00925         XOR     A
2339 12       00926         LD      (DE),A
233A 213870   00927         LD      HL,INBUF-1      ;Treat as typed line
233D C39359   00928         JP      5993H
2340 1804     00929 ILLEG:  JR      BADLIN
              00930 ;
              00931 ;
2342 21F480   00932 DOLINE: LD      HL,NOBRK@
2345 DD       00933         DB      0DDH
2346 21955F   00934 BADLIN: LD      HL,FUNCERR
2349 DD       00935         DB      0DDH
234A 215C42   00936 NOMEM:  LD      HL,OMERR
234D DD       00937         DB      0DDH
234E 212059   00938 EXIT:   LD      HL,READY
2351 310000   00939 EXIT1:  LD      SP,$-$
2352          00940 SAVSTK  EQU     $-2
2354 E9       00941         JP      (HL)
              00942 ;
2355 00       00943 DOPASS1 DB      0
2356 0000     00944 NUM1    DW      0
2358 0000     00945 NUM2    DW      0
235A 0000     00946 LTM     DW      0
235C 0000     00947 TOMOVE  DW      0
235E 0000     00948 NEWLIN  DW      0
              00949 ;
              00950         IFGT    $,23FFH
              00951         ERR     'Overflow into LIB region'
              00952         ENDIF
              00953 ;
              00954 ;
              00955         IF      @BLD631
              00956         ELSE
              00957 PATCH1  CP      84H
              00958         JP      Z,VP0
              00959         CP      0FFH
              00960         JP      NZ,VP0A
              00961         INC     HL
              00962         JP      VARLP1
              00963         ENDIF
1E00          00964         END     1E00H
1E00 is the transfer address
00000 Total errors


[Copyright 1999,2002 Frank Durda IV, All Rights Reserved.
Mirroring of any material on this page in any form is expressly prohibited.
The official web site for this material is:  http://nemesis.lonestar.org
Contact this address for use clearances: clearance at nemesis.lonestar.org
Comments and queries to this address: web_software_2011 at nemesis.lonestar.org]

Valid HTML 4.01!