; TEXT-EDITOR                       3/8
; Anders Franz`n <5258>
; Stockholm april 1985
; Uppdaterad juli 1985


; Skriv ut storlek p} text i TED
STORLEK  LD   HL,(EOT)
         LD   DE,(TXT)
         XOR  A         Ber{kna l{ngd
         SBC  HL,DE     p} text i editor
         PUSH HL
         LD   (IY-35),17
         LD   (IY-34),A ;CUR(17,0)
         CALL SKRTAL    Skriv v{rde
         CALL 7:66      Skriv CR+LF
         LD   HL,(MAX)
         LD   DE,(TXT)
         AND  A         Ber{kna ledigt
         SBC  HL,DE     utrymme i
         POP  DE        editorn
         SBC  HL,DE
         CALL SKRTAL    Skriv v{rde
         RET


;Skriv ut valm|jligheterna p} menyn
VAL      LD   HL,V1
         LD   BC,V2-V1  Skriv meny
         CALL 0:11
         LD   IX,M2     Antal val
         LD   (IX+0),"3" Tre val p} meny
         LD   HL,248:0
         LD   C,13
         LD   A,(96:0)
         CP   195       Finns flexskiva?
         JRNZ VAL1
         INC  (IX+0)    Fyra val p} meny
         CALL 0:11      Ja, LIB p} meny
VAL1     CALL 7:66      Skriv CR+LF
         LD   HL,(STACK)
         LD   A,(HL)    Finns extra
         CP   "5"       rutin?
         LD   C,13
         JRNZ VAL2
         LD   (IX+0),A  Fem val p} meny
         CALL 0:11      Ja, till menyn
VAL2     LD   HL,V2
         LD   C,V3-V2
         JP   0:11      Slut till menyn

V1       DEFB 27,61,32+7,32+0
         DEFM "1  L[S IN FIL",13,10
         DEFM "2  SPARA FIL ",13,10
         DEFM "3  EDITOR",13,10
V2       DEFB 27,61,32+13,32+0
         DEFM "0  SLUT      "
         DEFB 27,61,32+17,32+6
         DEFM "bytes anv{nda"
         DEFB 27,61,32+18,32+6
         DEFM "bytes lediga"
V3       EQU  $

MENY     CALL 3:62      CTRL-C ?
         LD   (IY-35),23
         JPNZ 0:210     Ja, till BASIC!
         LD   (TEDSTACK),SP Spara stack
         CALL 2:118     T|m sk{rmen
         CALL VAL       Valm|jligheter
         CALL STORLEK   Skriv utrymme
         LD   HL,M1
         LD   BC,M3-M1
         CALL 0:11      *  \nskat val?
MENY1    CALL 0:2       V{nta p} tangent
         PUSH AF
         CALL VAL       Blink bort
         CALL BLANK     Blanka rad 23
         POP  AF
         CP   "1"
         JPZ  L[SFIL
         CP   "2"
         JPZ  SKRIVFIL
         CP   "3"
         JPZ  EDITOR
         LD   HL,248:13
         LD   DE,96:0
         CP   "4"
         JRZ  MENY2
         LD   HL,(STACK)
         LD   DE,13
         ADD  HL,DE
         LD   E,L
         LD   D,H
         CP   "5"
         JRZ  MENY2
         CP   "0"       Sluta?
         JRNZ MENY      Nej, b|rja om
         LD   A,"7"
         CALL BLINK
         LD   (IY-35),19 Mark|r rad 19
         LD   A,(SPRFLG) [r texten
         AND  A         sparad ?
         JPZ  0:210     Ja, till BASIC !
         LD   HL,(TXT)
         LD   A,(HL)    Finns n}gon
         AND  A         text i editor ?
         JPZ  0:210     Nej, till BASIC
         LD   HL,M3
         LD   C,M4-M3
         CALL CUR
         JR   MENY1

MENY2    LD   C,A
         LD   A,(DE)
         CP   195
         JPNZ MENY
         PUSH HL        Spara adress
         LD   A,C       till rutin
         CALL BLINK
         LD   HL,MENY   Returadress
         EX   (SP),HL   till stacken
         JP   (HL)      Hoppa till rutin

M1       DEFB 27,61,32+3,32+0
         DEFM "TEXT-EDITOR",13,10
         DEFM "============="
CUR1     DEFB 7,27,61,32+23,32+0
         DEFM "*  \NSKAT VAL (0-"
M2       DEFM "3) ?"
M3       DEFM "TEXTEN EJ SPARAD."
M4       EQU  $

L[SFIL   CALL BLINK
         LD   HL,(TXT)
         LD   A,(HL)    [r editorn tom?
         AND  A
         JRZ  L[S1      Ja, hoppa
         PUSH HL
         LD   HL,L[S8   Fr}ga om editor
         LD   C,L[S9-L[S8 ska t|mmas
         CALL CUR
         CALL 0:2       V{nta p} tangent
         POP  HL        HL pekar p} text
         AND  223       G|r versal
         CP   "N"
         JRZ  L[S2
         XOR  "J"
         JPNZ MENY      Otill}tet svar
         LD   (HL),A    Tag bort gammal
         LD   (EOT),HL  text i editorn
         CALL STORLEK   Utrymme i TED
L[S1     XOR  A
         LD   L,A       OBS att A=noll!
         LD   H,A
         LD   (KOL),HL
         INC  HL
         LD   (RAD),HL
         LD   (\VERST),HL
         LD   (SPRFLG),A
L[S2     CALL BLANK     Blanka rad 23
         LD   HL,L[S9
         LD   C,L[S10-L[S9
         CALL CUR       Fr}ga efter fil
         LD   HL,FILNAMN
         LD   C,20
         PUSH HL
         CALL 0:5       H{mta filnamn
         POP  HL
         RST  32
         CP   13        Tom rad ?
         JPZ  MENY      Ja, till menyn
         PUSH HL
         CALL EXT       Default .TXT
         LD   HL,L[S10
         LD   BC,L[S11-L[S10
         CALL 0:11      ;CUR(20,0)
         POP  HL        (f|r OPEN CAS:)
         XOR  A         Kod = "open" !
         LD   (S\KFLG),A Nollst{ll
         LD   (BYTFLG),A flaggor
         LD   IX,-15    Reservera plats
         ADD  IX,SP     f|r filbeskrivn
         LD   SP,IX     p} stacken
         LD   (IX+2),255 Filnummer
         LD   DE,0:62   Rutinadress
         CALL FILCONTR  \ppna filen
L[S3     CALL R[KNA     DE=rader i TED
         INC  DE        Nr p} n{sta rad
         CALL TILLBUFF  H{mta raden
         LD   HL,BUFF1
         LD   BC,253    Klarar mycket
         PUSH HL        l}nga rader !
         LD   DE,8:147
         CALL FILCONTR  L{s in en rad
         POP  HL
         JRC  L[S7      Hoppa om EOF
         LD   BC,160
         LD   A,13
         CPIR           Leta radslut
         JRNZ L[S4      Hoppa om saknas
         DEC  HL        Peka p} CR
         LD   (HL),32   Blanka bort!
L[S4     LD   A,159
         SUB  C
         LD   C,A       L{ngd p} rad
         LD   A,(L[NGD)
L[S5     CP   160
         JRZ  L[S6
         CP   C         Rad <= l{ngd ?
         JRNC L[S6      Ja, hoppa
         ADD  40        \ka l{ngd
         LD   (L[NGD),A
         LD   HL,(RAD)
         LD   (\VERST),HL
         JR   L[S5

L[S6     LD   DE,(BRAD)
         CALL SPARRAD   Spara raden
         PUSH AF
         CALL STORLEK   Anv{nt utrymme!
         POP  AF
         JRNC L[S3      upprepa om ok
L[S7     PUSH AF        Spara felkod
         LD   DE,8:127
         CALL FILCONTR  St{ng filen
         POP  AF        Felkod till A
         LD   HL,15
         ADD  HL,SP
         LD   SP,HL     ]terst{ll stack
         LD   HL,0
         LD   (BRAD),HL T|m buffer
         AND  127       EOF ?
         JPZ  MENY      Ja, till meny
         LD   (IY+34),A Spara ERRCODE
         JP   FELRUTIN

L[S8     DEFM "SKALL EDITORN "
         DEFM "T\MMAS (J/N) ?"
L[S9     DEFM "INFIL ?"
L[S10    DEFB 27,61,32+20,32+0
L[S11    EQU  $

SKRIVFIL CALL BLINK
         LD   HL,(TXT)
         LD   A,(HL)
         AND  A         Editorn tom ?
         JRNZ SKR1      Nej, hoppa
         LD   HL,SKR9
         LD   C,SKR10-SKR9
         CALL CUR
         JP   MENY1

SKR1     LD   HL,SKR10
         LD   C,SKR11-SKR10
         CALL CUR       F}ga efter fil
         LD   HL,FILNAMN
         RST  32
         CP   13
         JRZ  SKR3      Ingen gammal fil
         PUSH HL
         LD   HL,SKR11
         LD   C,SKR12-SKR11
         CALL 0:11      Skriv "("
         POP  HL
SKR2     LD   C,1
         CALL 0:11      Skriv gammal fil
         LD   A,(HL)
         CP   13
         JRNZ SKR2
         LD   HL,SKR12
         LD   C,SKR13-SKR12
         CALL 0:11      Skriv ")"
SKR3     LD   HL,SKR13
         LD   C,SKR14-SKR13
         CALL 0:11      Skriv "?"
         LD   HL,FILNAMN H|gerpil kan
         RST  32         anv{ndas vid
         EX   DE,HL      redigering av
         LD   HL,BUFF2   nytt filnamn !!
         LD   C,20
         PUSH HL
         CALL 2:173     H{mta nytt
         POP  HL        filnamm
         PUSH HL
         RST  32
         CP   13
         POP  HL
         JRZ  SKR4      Inget angivet
         LD   BC,20
         LD   DE,FILNAMN
         LDIR           Spara filnamn
         CALL EXT       Default .TXT
SKR4     LD   HL,FILNAMN
         RST  32
         CP   13
         JPZ  MENY      Inget angivet
         XOR  A
         LD   (S\KFLG),A
         LD   (BYTFLG),A
         LD   IX,-15    Reservera plats
         ADD  IX,SP     f|r filbeskrivn
         LD   SP,IX     p} stacken
         INC  A         Kod = prepare
         LD   DE,0:62   Adress rutin
         CALL FILCONTR  |ppna filen
         LD   DE,1      F|rsta raden
SKR5     PUSH DE
         CALL TILLBUFF  H{mta rad
         POP  DE
         LD   HL,(SAKNAS)
         LD   A,H       Alla rader
         OR   L         skrivna ?
         JRNZ SKR8      Ja, hoppa
         PUSH DE
         LD   HL,BUFF1+160
         LD   B,160
         LD   A,32
SKR6     DEC  HL        Skippa space
         CP   (HL)      sist p} raden
         JRNZ SKR7
         DJNZ SKR6
         DEC  HL
SKR7     INC  HL
         LD   (HL),13   L{gg ner CR+LF,
         INC  HL        LF kr{vs om
         LD   (HL),10   utskrift p}
         INC  HL        printer
         LD   DE,BUFF1
         AND  A
         SBC  HL,DE
         LD   C,L       BC {r l{ngd p}
         LD   B,H       rad att skriva
         EX   DE,HL     HL pekar p} rad
         LD   DE,8:150
         CALL FILCONTR  Skriv rad
         POP  DE
         INC  DE        N{sta radnr
         JR   SKR5

SKR8     LD   DE,8:144
         CALL FILCONTR  St{ng filen
         LD   HL,15
         ADD  HL,SP
         LD   SP,HL     ]terst{ll stack
         XOR  A
         LD   (SPRFLG),A
         LD   L,A
         LD   H,A
         LD   (BRAD),HL
         JP   MENY

SKR9     DEFM "INGET ATT SPARA."
SKR10    DEFM "UTFIL "
SKR11    DEFM "("
SKR12    DEFM ") "
SKR13    DEFM "?"
SKR14    EQU  $

;Fixa default extension .TXT

EXT      LD   HL,FILNAMN-1
EXT1     LD   C,A       F|reg. tecken
         RST  24        Tag tecken
         CP   "."       Finns extension?
         RETZ           Ja, retur
         CP   13        Slut p} filnamn?
         JRNZ EXT1      Nej, leta vidare
         LD   A,C       Sista tecknet
         CP   ":"       ett kolon ?
         RETZ           Ja, retur (CAS:)
         EX   DE,HL     DE pekar p} CR
         LD   HL,EXT2
         LD   BC,5      Kopiera in .TXT
         PUSH HL
         LDIR           i filnamnet.
         POP  HL
         LD   C,4       Obs att B=0 !
         JP   0:11      Skriv ".TXT"

EXT2     DEFM ".TXT",13


FILCONTR PUSH HL        Spara HL
         LD   HL,FELRUTIN
         EX   (SP),HL   ]terst{ll HL
         LD   (254:54),SP RUN-timestack
         PUSH HL        Spara HL
         LD   HL,FILC2
         LD   (IY+30),L S{tt ONERROR-
         LD   (IY+31),H GOTO-adress
         LD   (IY+14),0 S{tt RUN-mode
         LD   (IY+15),0 S{tt NOTRACE
         LD   HL,FILC1
         EX   (SP),HL   ]terst{ll HL
         PUSH DE        Hoppadressen
         RET            Hoppa till rutin

FILC1    POP  HL        ]terst{ll stack
         RET            Klart, inga fel

FILC2    DEFB 4,0,1,145 BASIC-RETURN

FELRUTIN LD   SP,(TEDSTACK)
         CALL BLANK
         LD   HL,FELR1
         LD   C,FELR2-FELR1
         CALL CUR
         LD   A,(IY+34) ERRCODE
         AND  127       Sl{ck bit sju
         LD   L,A
         LD   H,B       OBS, B=noll!
         CALL SKRIVTAL
         LD   HL,FELR2
         LD   C,FELR3-FELR2
         CALL 0:11
         JP   MENY1

FELR1    DEFM "ERROR "
FELR2    DEFM " (se fellista)."
FELR3    EQU  $

BLINK    LD   HL,3:116
         SUB  49-7
         ADD  A
         LD   E,A
         LD   D,0
         ADD  HL,DE
         LD   E,(HL)
         INC  HL
         LD   D,(HL)
         EX   DE,HL
         INC  HL
         INC  HL
         INC  HL
         LD   B,10
BLINK1   SET  7,(HL)
         INC  HL
         DJNZ BLINK1
         RET

BLANK    LD   DE,(3:162) Adress rad 23
         CALL 2:103      Blanka raden
         RET
