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

CTRL1    DEFB 3,9,10,13 Otill}tna CTRL
CTRL2    DEFM "ANGE CTRL-TKN."

CTRL     LD   HL,(253:243)
         PUSH HL        Spara mark|r
         LD   HL,CTRL2
         LD   C,CTRL-CTRL2
         CALL CUR
         POP  HL
         LD   (253:243),HL
         CALL GET       H{mta tangent
         CP   64        Bokstav ?
         JPC  TAN14     Nej, fel tkn
         AND  223       G|r versal
         SUB  64        G|r CTRL-tkn
         LD   HL,CTRL1
         LD   C,4       OBS att B=noll!
         CPIR           Godk{nt tkn ?
         JPZ  TAN14     Nej, hoppa
         LD   HL,MAXFLG Uppdatera
         INC  (HL)      virtuell kolumn
; Forts{tt ner i TANGENT

TECKEN   CALL UPPDAT    Uppdatera raden
         LD   A,(ORDFLG)
         AND  A         Ord-mode ?
         JRZ  TECK3     Nej, hoppa
         LD   BC,(HMARG)
         LD   A,C
         AND  A         Finns marginal?
         LD   A,(L[NGD)
         JRZ  TECK1     Nej, hoppa
         CP   C         Marg > radl{ngd?
         JRC  TECK1     Ja, hoppa
         LD   A,C
TECK1    LD   BC,(KOL)
         INC  C         Skriver vi i
         CP   C         marginalen ?
         JRZ  TECK2
         JRNC TECK3     Nej, hoppa
TECK2    LD   A,32      Var sista
         CP   (HL)      tecknet space ?
         JRZ  TECK3     Ja, hoppa
         LD   E,C
         CPDR           Leta space
         JRNZ TECK3     Ej hittat
         INC  BC        Mark|r placeras
         LD   (KOL),BC  p} sista ordet
         LD   D,C
         PUSH DE
         CALL BRYT      Bryt av raden
         POP  DE
         JPC  TANGENT   Minnet fullt
         LD   A,E       Fixa mark|rens
         SUB  D         placering p}
         LD   (KOL),A   den nya raden
         JP   SIDTEST   Fixa \VERST

TECK3    CALL SKRIVRAD  Skriv ut raden
         JR   H\GERPIL  Flytta mark|r

UPPDAT   LD   HL,BUFF1
         LD   BC,(KOL)
         ADD  HL,BC     Peka p} tecken
         PUSH AF        under mark|r
         LD   A,(INSFLG) Ska tecken
         AND  A          skjutas in ?
         CALLNZ INSERT  Ja, g|r plats
         POP  BC        B = nya tecknet
         LD   A,255
         LD   (SPRFLG),A
         LD   A,(HL)    Gammalt tecken
         LD   (HL),B    L{gg ner tecken
         CP   32        CTRL-tecken?
         RETNC          Nej, retur
         CP   6         Slut grafik?
         RETZ           Ja, retur
         CP   23        Start grafik?
         RETZ           Ja, retur
         LD   HL,MAXFLG
         DEC  (HL)
         RET

INSERT   PUSH DE
         PUSH BC
         EX   DE,HL
         LD   HL,BUFF1+159
         PUSH HL
         AND  A
         SBC  HL,DE
         EX   (SP),HL
         POP  BC
         LD   E,L
         LD   D,H
         JRZ  INSERT1
         DEC  HL
         LDDR           Flytta }t h|ger
         EX   DE,HL
INSERT1  POP  BC
         POP  DE
         RET

TILLTAB  LD   C,A
         LD   A,(S\KFLG)
         AND  A
         JPNZ S\KIGEN
         LD   A,C
         LD   HL,(L[NGD)
         DEC  HL
         LD   BC,(KOL)
         AND  A
         SBC  HL,BC
         JRZ  H\GERPIL
         LD   C,L
         LD   B,H
         LD   HL,TABRAD1
         LD   DE,(KOL)
         ADD  HL,DE
         INC  HL
         LD   A,''
         CPIR
         JRNZ H\GERPIL
         LD   HL,(L[NGD)
         DEC  HL
         AND  A
         SBC  HL,BC
         LD   (KOL),HL
         JP   TANGENT

H\GERPIL LD   A,(KOL)
         INC  A
         LD   (KOL),A
         LD   HL,(L[NGD)
         LD   A,(MAXFLG)
         INC  A
         CP   L
         JPC  TANGENT
RETURN   XOR  A
         LD   (KOL),A
         LD   (S\KFLG),A Avbryt s|kning
         LD   (BYTFLG),A och utbyte
NER      CALL FR]NBUFF
         LD   HL,(RAD)
         INC  HL
         LD   (RAD),HL
         JP   SIDTEST

V[NSTPIL LD   E,A
         LD   A,(KOL)
         DEC  A
         LD   (KOL),A
         INC  A         Utanf|r raden?
         JPNZ TANGENT   Nej, hoppa
         LD   A,E
         CP   8         Piltangent ?
         LD   A,(L[NGD)
         JRNZ V[N1      Nej, hoppa
         LD   A,1
V[N1     DEC  A
         LD   (KOL),A
UPP      CALL FR]NBUFF
         LD   HL,(RAD)
         DEC  HL        Befinner vi oss
         LD   A,H       p} den |versta
         OR   L         raden ?
         JPZ  TANGENT   Ja, hoppa
         LD   (RAD),HL  Spara ny rad
         JP   SIDTEST

HOME     CALL FR]NBUFF
         LD   HL,(\VERST)
         LD   (RAD),HL
         XOR  A
         LD   (KOL),A
         JP   TANGENT

FRAMSIDA CALL FR]NBUFF
         LD   A,(SCRFLG)
         AND  A         Scroll-mode ?
         JRZ  FRA1      Nej, hoppa
         LD   HL,(\VERST)
         INC  HL
         LD   (\VERST),HL
         LD   HL,(RAD)
         INC  HL
         JR   FRA2

FRA1     LD   HL,(RAD)
         LD   DE,(SIDSTORL)
         ADD  HL,DE
FRA2     LD   (RAD),HL
         XOR  A
         RET

BAKSIDA  CALL FR]NBUFF
         LD   DE,(SIDSTORL)
         LD   A,(SCRFLG)
         AND  A         Scroll-mode ?
         JRZ  BAK1      Nej, hoppa
         LD   DE,1
BAK1     LD   HL,(RAD)
         AND  A
         SBC  HL,DE
         JPC  TANGENT
         JPZ  TANGENT
         LD   (RAD),HL
         LD   A,(SCRFLG)
         AND  A         Scroll-mode ?
         RETZ           Nej, retur
         LD   HL,(\VERST)
         DEC  HL
         LD   A,H
         OR   L
         JPZ  TANGENT
         LD   (\VERST),HL
         XOR  A
         RET

F\RSIDA  CALL FR]NBUFF
         LD   HL,1      F|rsta raden
         LD   (RAD),HL  i texten
         XOR  A
         LD   (KOL),A
         JP   SIDTEST

SISTSIDA CALL FR]NBUFF
         XOR  A
         LD   (KOL),A
         CALL R[KNA
         EX   DE,HL     HL=antal rader
         LD   A,H       som finns i TED
         OR   L
         JRNZ SIS1
         INC  HL
SIS1     LD   (RAD),HL
         JP   SIDTEST

INSLINE  CALL FR]NBUFF
         JPC  TANGENT   Minnet fullt
         CALL INSL      Skjut in en rad
         JPC  TANGENT   Minnet fullt
         XOR  A
         RET            Visa sida

INSL     LD   HL,(SAKNAS)
         LD   A,H
         OR   L
         AND  A         Clear carry
         RETNZ          Rad saknas
         LD   DE,(EOT)
         INC  DE
         LD   HL,(MAX)
         AND  A
         SBC  HL,DE
         JPC  ERR       Minnet fullt
         LD   HL,(PRAD)
         EX   DE,HL
         SBC  HL,DE
         RETZ           Rad saknas
         LD   C,L
         LD   B,H
         LD   HL,(EOT)
         LD   E,L
         LD   D,H
         INC  DE
         LD   (EOT),DE
         LDDR
         LD   A,1
         LD   (DE),A
         LD   (BRAD),BC
         AND  A
         RET

HM[RKE   LD   BC,(HMARG)
         DEC  BC
         LD   HL,0
         LD   (HMARG),HL
         LD   HL,TABRAD1
         ADD  HL,BC
         LD   A,C
         INC  A
         JRNZ TAB2
         LD   HL,TABRAD1
         LD   BC,(KOL)
         ADD  HL,BC
         LD   (HL),"#"
         INC  BC
         LD   (HMARG),BC
         JP   TANGENT

TAB      LD   HL,TABRAD1
         LD   BC,(KOL)
         ADD  HL,BC
         LD   A,(HL)
         CP   ""
         JRZ  TAB2
         CP   "#"
         JRNZ TAB1
         XOR  A
         LD   (HMARG),A
TAB1     LD   (HL),""
         JP   TANGENT

TAB2     EX   DE,HL
         LD   HL,TABRAD2
         ADD  HL,BC
         LD   A,(HL)
         LD   (DE),A
         JP   TANGENT

DELCHAR  LD   HL,BUFF1
         LD   BC,(KOL)
         ADD  HL,BC
         EX   DE,HL
         LD   HL,BUFF1+159
         AND  A
         SBC  HL,DE
         JRZ  DELCH1
         LD   C,L
         LD   B,H
         LD   L,E
         LD   H,D
         INC  HL
         LD   A,B
         OR   C
         LDIR
DELCH1   LD   A,32
         LD   (DE),A
         LD   (SPRFLG),A
         CALL SKRIVRAD
         JP   TANGENT

DELLINE  CALL FR]NBUFF
         LD   HL,(PRAD)
         PUSH HL
         LD   C,(HL)
         LD   B,0
         ADD  HL,BC
         EX   DE,HL
         LD   HL,(EOT)
         AND  A
         SBC  HL,DE
         EX   (SP),HL
         POP  BC
         EX   DE,HL
         LD   A,B
         OR   C
         JRZ  DELL1
         LDIR
DELL1    EX   DE,HL
         LD   (HL),C
         LD   (EOT),HL
         LD   (BRAD),BC
         XOR  A
         RET

SCRMODE  CALL FR]NBUFF
         LD   A,(SCRFLG)
         XOR  255
         LD   (SCRFLG),A
         JR   SK[3      T|m sk{rm

RADL[NGD CALL FR]NBUFF
         LD   A,(L[NGD)
         LD   H,40
         ADD  H          \ka radl{ngd
         CP   200        St|rre {n max?
         JRNZ RAD1       Nej, hoppa
         LD   A,H        Ja, s{tt 40
RAD1     LD   (L[NGD),A
         LD   L,A
         LD   A,(KOL)
         ADD  H
RAD2     SUB  H
         CP   L
         JRNC RAD2
         LD   (KOL),A
         PUSH HL
         LD   HL,RAD3
         LD   BC,SK[RMBRE-RAD3
         CALL CUR
         POP  HL
         LD   H,B       HL=radl{ngden
         CALL SKRIVTAL
         JR   SK[2

RAD3     DEFM "RADL[NGD: "

SK[RMBRE CALL FR]NBUFF
         LD   A,(1:216)
         LD   B,A
         LD   C,4
         CP   40
         JRZ  SK[1
         DEC  C
SK[1     IN   A,(C)
         LD   A,(1:216)
         CP   B
         JPZ  TANGENT
         CALL BLANK     Blanka rad 23
SK[2     LD   A,(SCRFLG)
         AND  A         Scroll-mode ?
         JRZ  SK[3      Nej, hoppa
         LD   HL,(RAD)
         LD   (\VERST),HL
SK[3     LD   A,255      S{tt flagga
         LD   (T\MFLG),A f|r formfeed
         XOR  A
         RET
