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

S\KTEXT  LD   HL,S\KT1
         LD   C,S\KT2-S\KT1
         CALL CUR       Skriv fr}ga
         LD   HL,255:129
         LD   C,20
         PUSH HL
         CALL 0:5       H{mta s|kt text
         POP  HL
         LD   A,(HL)
         CP   13        Tom rad ?
         JPZ  TANGENT   Ja, ignorera
         LD   HL,0
         LD   (S\KACK),HL
         LD   A,255
         LD   (S\KFLG),A
S\KIGEN  CALL FR]NBUFF  Spara rad
         JPC  TANGENT   Minnet fullt
         CALL S\K
         JPNZ TANGENT   Hoppa om saknas
         JP   SIDTEST   Visa sida

S\KT1    DEFM "S\KT TEXT ?"
S\KT2    EQU  $

BYTTEXT  CALL FR]NBUFF
         JPC  TANGENT   Minnet fullt
         CALL BYTFR]GA  Fr}ga om text
         JPZ  TANGENT   Hoppa om fel
         CALL S\K       Leta s|kt text
         JPNZ TANGENT   Text ej hittad
         LD   HL,BYTT1
         LD   C,BYTTKN-BYTT1
         CALL CUR
         JP   SIDTEST   Visa sida

BYTT1    DEFM "CR=slut h|gerpil="
         DEFM "s|k \VR=byt A=alla"

BYTTKN   AND  223       G|r versal
         CP   13        Ska byte sluta ?
         JPZ  RETURN    Ja, hoppa
         CP   "A"       Byta allt ?
         JRZ  BYTALLT   Ja, hoppa
         CP   9         Ska byte ske ?
         CALLNZ BYT     Ja, byt ut text
         JPC  TANGENT   Minnet fullt
         CALL S\K       Leta s|kt text
         LD   A,255
         LD   (SIDFLG),A Sida ska visas
         JP   SIDTEST   Fixa \VERST

BYTALLT  CALL BYT       Byt ut text
         RETC           Minnet fullt
         LD   A,(254:7) CTRL-C ?
         AND  A
         LD   A,255
         RETNZ          Ja, retur
         CALL S\K       S|k vidare
         JRZ  BYTALLT   Igen om hittad
         LD   A,255
         LD   (SIDFLG),A Sida ska visas
         LD   A,(SCRFLG)
         AND  A
         JPZ  SIDTEST
         LD   A,(T\MFLG)
         AND  A
         JPZ  SIDTEST
         LD   HL,(RAD)
         LD   (\VERST),HL
         XOR  A
         RET            Visa sida

S\K      LD   DE,(RAD)  Rad f|r mark|r
         LD   BC,(KOL)  Kolumn mark|r
         INC  BC        N{sta kolumn
         LD   A,C
         CP   160       Sista kolumnen ?
         JRC  S\K1      Nej, hoppa
         INC  DE        Ja, tag n{sta
         LD   BC,0      rad !
S\K1     PUSH DE        Spara rad
         PUSH BC        Spara kolumn
         CALL TILLBUFF  H{mta rad
         LD   HL,(SAKNAS)
         LD   A,H       [r det slut p}
         OR   L         alla rader ?
         JRNZ S\K7      Ja, text saknas
         POP  BC        Kolumnnr
         LD   HL,160
         XOR  A
         SBC  HL,BC
         PUSH HL
         LD   HL,BUFF1  Rad att leta i
         ADD  HL,BC     F|rsta position
         POP  BC
         LD   E,A
         LD   D,A       DE=noll
         PUSH DE        Spara ny kolumn
S\K2     LD   DE,255:129 S|kt text
         LD   A,(DE)    F|rsta s|kta tkn
         CPIR           Finns tecken ?
         JRNZ S\K5      Nej, n{sta rad
         PUSH HL
         PUSH BC
S\K3     INC  DE
         LD   A,(DE)    N{sta s|kta tkn
         CP   13        Slut p} rad ?
         JRZ  S\K6      Ja, text hittad
         LD   A,B       [r aktuell rad
         OR   C         slut ?
         JRZ  S\K4      Ja, n{sta rad
         LD   A,(DE)
         CPI            Samma tecken ?
         JRZ  S\K3      Ja, n{sta tecken
S\K4     POP  BC
         POP  HL
         JRZ  S\K5
         JPPE S\K2
S\K5     POP  BC        Kolumn
         POP  DE        Radnummer
         INC  DE        Tag n{sta rad
         JR   S\K1      Forts{tt leta

S\K6     POP  BC
         POP  HL
         LD   HL,159
         AND  A
         SBC  HL,BC
         LD   (KOL),HL  Placera mark|r
         POP  BC        Kolumn
         LD   HL,(S\KACK)
         INC  HL
         LD   (S\KACK),HL
         POP  HL        Radens nummer
         LD   (RAD),HL  Spara rad
         CALL RJUST     Justera radl{ngd
         CP   A         Flagga hittad
         RET

S\K7     POP  BC        Ta bort kolumnnr
         POP  DE        Ta bort radnr
         CALL BLANK     Blanka rad 23
         LD   HL,(S\KACK)
         LD   A,H
         OR   L
         JRNZ S\K8
         LD   HL,S\K10
         LD   C,S\K11-S\K10
         CALL CUR       Skriv text
         JR   S\K9

S\K8     PUSH HL
         LD   HL,S\K11
         LD   C,S\K12-S\K11
         CALL CUR
         POP  HL
         CALL SKRIVTAL
S\K9     XOR  A
         LD   (S\KFLG),A
         LD   (BYTFLG),A
         INC  A         Flagga saknas
         RET            Tag ny tangent

S\K10    DEFM "S\KT TEXT FINNS EJ."
S\K11    DEFM "ANTAL TR[FFAR :  "
S\K12    EQU  $

BYTFR]GA LD   HL,BYT3
         LD   C,BYT4-BYT3
         CALL CUR       Skriv fr}ga
         LD   HL,255:129
         LD   C,17
         PUSH HL
         CALL 0:5       H{mta s|kt text
         POP  DE
         AND  A
         SBC  HL,DE     L{ngd p} text
         RETZ           Ignorera om noll
         LD   (255:180),HL
         CALL BLANK     Blanka rad 23
         LD   HL,BYT4
         LD   C,BYT5-BYT4
         CALL CUR       Skriv fr}ga
         LD   HL,255:150
         LD   C,16
         PUSH HL
         CALL 0:5       H{mta ny text
         POP  DE
         AND  A
         SBC  HL,DE     L{ngd p} text
         RETZ           Ignorera om noll
         LD   (255:182),HL
         LD   HL,0
         LD   (S\KACK),HL
         XOR  A
         LD   (S\KFLG),A
         DEC  A
         LD   (BYTFLG),A
         RET

BYT      LD   HL,BUFF1
         LD   BC,(KOL)
         ADD  HL,BC
         PUSH HL        Spara position
         LD   C,L       BC=f|rsta pos
         LD   B,H
         LD   HL,(255:180) L{ngd gammal
         LD   DE,(255:182) L{ngd ny text
         AND  A
         SBC  HL,DE     J{mf|r l{ngd
         JRZ  BYT2      Lika l{ngd
         JRC  BYT1      Ny text l{ngre
         EX   DE,HL
         ADD  HL,BC     Att flytta till
         PUSH HL
         ADD  HL,DE     Att flytta fr}n
         EX   DE,HL
         LD   HL,BUFF1+160
         AND  A
         SBC  HL,DE
         EX   (SP),HL
         EX   DE,HL
         POP  BC
         JRZ  BYT2
         LDIR           Ta bort tecknen
         LD   HL,BUFF1+159
         AND  A
         SBC  HL,DE
         LD   C,L       BC=antal tecken
         LD   B,H       borta i rad
         LD   L,E
         LD   H,D
         LD   (HL),32   L{gg ner space
         JRZ  BYT2
         INC  DE
         LDIR           Blanka resten
         JR   BYT2

BYT1     LD   DE,BUFF1+159
         ADD  HL,DE
         PUSH HL
         AND  A
         SBC  HL,BC
         EX   (SP),HL
         POP  BC
         JRZ  BYT2
         JRC  BYT2
         LDDR           G|r plats
BYT2     POP  DE        Position i rad
         LD   BC,(255:182)
         LD   HL,255:150
         LDIR
         CALL FR]NBUFF
         RET

BYT3     DEFM "TEXT ATT BYTA UT ?"
BYT4     DEFM "TEXT ATT BYTA TILL ?"
BYT5     EQU  $
