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


SKRIVTA1 LD   DE,BUFF2
         PUSH DE
         LD   A,(24:96) Kolla checksumma
         CP   175
         PUSH AF
         CALLZ 24:96    \vers{tt till
         POP  AF        ASCII
         CALLNZ 24:98
         EX   DE,HL
         POP  DE
         AND  A         Ber{kna l{ngd
         SBC  HL,DE     p} str{ngen
         LD   C,L
         LD   B,H
         EX   DE,HL
         RET

;Skriv ut talet HL
SKRIVTAL CALL SKRIVTA1
         JP   0:11

;Skriv ut talet HL med rak h|gerkant
SKRTAL   CALL SKRIVTA1
         PUSH HL
         PUSH BC
         LD   HL,SPACE
         LD   A,5
         SUB  C
         LD   C,A
         CALLNZ 0:11
         POP  BC
         POP  HL
         JP   0:11

MULTIPL  LD   A,(55:107) Kolla
         CP   66        checksumma!
         JPZ  55:107    9913 eller 10042
         JP   55:116    annars 11273

DIVISION LD   A,(55:127) Checksummekoll
         CP   122       h{r ocks}!
         JPZ  55:127    9913 eller 10042
         JP   55:136    annars 11273

EDITOR   LD   A,(T\MFLG)
         AND  A         Sk{rm t|mmas?
         LD   A,23      Ej rad 23!
         CALLNZ 2:120   Ja, formfeed!
         XOR  A
         LD   (T\MFLG),A
         LD   (SIDFLG),A
         LD   A,(1:216) Sk{rmstorlek
         CP   40
         LD   HL,ED6-1
         JRZ  ED1
         LD   HL,ED7-1
ED1      LD   A,(L[NGD) Radl{ngden
ED2      INC  HL        Sl} i tabell
         SUB  40
         JRNZ ED2
         LD   A,(HL)
         PUSH AF        Spara rader/sida
         LD   E,A       DE = antal rader
         LD   D,0            per sida
         LD   (SIDSTORL),DE
         LD   A,(SCRFLG)
         AND  A         Scroll-mode ?
         JRZ  ED3       Nej, hoppa
         LD   HL,(\VERST)
         PUSH HL        L{gg |versta
         JR   ED4       raden p} stack

ED3      LD   HL,(RAD)
         DEC  HL
         PUSH DE
         CALL DIVISION  Ber{kna HL=HL/DE
         POP  DE
         PUSH HL        Spara sidnr - 1
         CALL MULTIPL   Ber{kna HL=HL*DE
         INC  HL        \versta raden
         LD   (\VERST),HL p} sidan
         EX   (SP),HL
         INC  HL        Sidnr
         LD   (SIDNR),HL
         PUSH HL
         LD   HL,ED8
         LD   BC,GET-ED8
         CALL 0:11      Skriv "sid "
         POP  HL        Sidnr
         CALL SKRIVTAL  Skriv ut sidnr
ED4      POP  DE        \versta raden
         POP  BC        Antal rader
         LD   IX,3:116+2*3 Tabell i ROM
ED5      PUSH BC
         PUSH DE
         CALL TILLBUFF  H{mta n{sta rad
         CALL SKRIV1    Skriv ut rad
         POP  DE
         POP  BC
         INC  DE        N{sta rad
         DJNZ ED5       Skriv hela sidan
         LD   L,B       SAKNAS kan vara
         LD   H,B       felaktigt nu !
         LD   (BRAD),HL
         CALL TANGENT   Behandla tangent
         CP   255       CTRL-C , CTRL-@?
         JPZ  MENY      Ja, till meny
         JP   EDITOR    Upprepa

ED6      DEFB 20,10,6,5
ED7      DEFB 20,20,10,10
ED8      DEFB 27,61,32+0,32+37
         DEFM "   "
         DEFB 27,61,32+0,32+33
         DEFM "sid "

GET      CALL 0:2       H{mta tangent
         PUSH AF        Spara tecken
         XOR  A         St{ng av ljud-
         OUT  (6),A     generatorn
         CALL BLANK     Blanka rad 23 +
         LD   A,(KLKFLG) en liten paus
         AND  A         Klickmode ?
         JRZ  GET1      Nej, hoppa
         LD   A,57      Ett kn{pp i
         OUT  (6),A     h|gtalaren
GET1     POP  AF
         RET

TANGENT  LD   DE,(RAD)
         PUSH DE
         CALL TILLBUFF  H{mta raden
         POP  HL
         LD   DE,(\VERST)
         AND  A
         SBC  HL,DE
         LD   E,L
         LD   D,H
         LD   A,(1:216) Sk{rmbredd 40/80
         LD   C,A
         LD   A,(L[NGD) Radl{ngden
TAN1     SUB  C
         JRZ  TAN2
         JRC  TAN2
         ADD  HL,DE
         JR   TAN1

TAN2     LD   A,L
         ADD  3
         LD   (SRAD),A  Sk{rmrad f|r rad
         LD   E,A
TAN3     LD   A,(KOL)
         LD   B,A       Loopvariabel
         LD   C,A       Virtuell kolumn
         LD   D,A       V{rde maxflagga
         INC  B
         LD   HL,BUFF1  Peka p} rad
TAN4     LD   A,(HL)    Tag tecken i rad
         INC  HL
         CP   32        CTRL-tecken ?
         JRNC TAN5      Nej, hoppa
         CP   6         Slut grafik?
         JRZ  TAN5      Ja, hoppa
         CP   23        Start grafik ?
         JRZ  TAN5      Ja, hoppa
         INC  D         \ka maxflagga
         LD   A,B       [r mark|ren p}
         DEC  A         CTRL-tecknet?
         JRZ  TAN5      Ja, hoppa
         INC  C         Mark|r }t h|ger
         LD   A,(L[NGD)
         CP   C         Utanf|r raden?
         JRNZ TAN5      Nej, hoppa
         LD   HL,KOL
         DEC  (HL)      Minska kolumn
         JR   TAN3

TAN5     DJNZ TAN4      R{kna vidare
         LD   A,D
         LD   (MAXFLG),A
         LD   A,(1:216) Sk{rmbredd 40/80
         LD   B,A
         LD   A,C       Virtuell kolumn
TAN6     INC  E         N{sta sk{rmrad
         SUB  B         rakt under
         JRNC TAN6      Utanf|r sk{rm
         ADD  B         ]terst{ll
         DEC  E
         LD   D,A       Mark|rkolumn
         PUSH DE        Spara mark|r
         LD   HL,0:0
         LD   (253:243),HL ;CUR(0,0)
         LD   HL,TAN17
         LD   BC,6
         LD   A,(INSFLG)
         AND  A
         JRNZ TAN7
         LD   HL,SPACE
TAN7     CALL 0:11      Ev ;"<INS> "
         LD   HL,TAN18
         LD   C,6       En blank efter
         LD   A,(ORDFLG) text !
         DEC  A
         JRZ  TAN8
         LD   HL,TAN19
         DEC  A
         JRZ  TAN8
         LD   HL,SPACE
TAN8     CALL 0:11      Ev ;"<ORD> "
         LD   HL,TAN20
         LD   C,7       Tv} blanka efter
         LD   A,(S\KFLG) text!!
         AND  A
         JRNZ TAN9
         LD   HL,TAN21
         LD   A,(BYTFLG)
         AND  A
         JRNZ TAN9
         LD   HL,SPACE
TAN9     CALL 0:11      Ev ;"<S\K>  "
         LD   HL,(EOT)  eller ;"<BYT>  "
         LD   DE,(TXT)
         AND  A
         SBC  HL,DE     Anv{nda bytes
         PUSH HL
         LD   HL,(MAX)
         AND  A
         SBC  HL,DE     Totalt bytes
         LD   DE,100
         CALL DIVISION
         EX   DE,HL
         POP  HL
         CALL DIVISION
         CALL SKRIVTAL  Skriv procenttal
         LD   HL,TAN22
         LD   C,TANTAB-TAN22
         CALL 0:11      ;"%  "CUR(0,24)
         LD   HL,(RAD)
         CALL SKRIVTAL  Skriv radnummer
         LD   HL,SPACE
         LD   C,1
         CALL 0:11      ;" "
         LD   HL,(KOL)
         INC  HL
         CALL SKRIVTAL  Skriv kolumnnr
         LD   HL,SPACE
         LD   A,33
         SUB  (IY-34)   Antal tkn kvar
         LD   C,A
         CALLNZ 0:11    Blanka bakom
         LD   HL,0:1
         LD   (253:243),HL ;CUR(1,0)
         LD   A,(1:216) Sk{rmbredd 40/80
         LD   E,A       Spara bredd
         LD   HL,TAN15-1
         CP   40        40-teckensmod?
         JRZ  TAN10     Ja, hoppa
         LD   HL,TAN16-1
TAN10    LD   A,(KOL)
         LD   D,A       Spara kolumn
TAN11    INC  HL        Sl} i tabell
         SUB  40
         JRNC TAN11
         LD   C,(HL)     Ber{kna
         LD   B,0        startposition
         LD   HL,TABRAD1 i tabraden
         ADD  HL,BC
         LD   C,E       Sk{rmbredd 40/80
         LD   A,C
         CP   40        40-tecken?
         JRZ  TAN13     Ja, hoppa
         LD   A,(L[NGD)
         CP   40        Radl{ngden=40?
         JRZ  TAN12     Ja, hoppa
         LD   C,80
         CP   120       Radl{ngd<>120?
         JRNZ TAN13     Ja, hoppa
         LD   A,D       Kolumn mark|r
         CP   C         Kolumn < 80 ?
         JRC  TAN13     Ja, hoppa
TAN12    PUSH HL        Spara tabraden
         LD   HL,(3:118) Adress rad 1
         LD   C,40
         ADD  HL,BC     Kolumn 40
         LD   E,L
         LD   D,H
         INC  DE
         DEC  BC
         LD   (HL),32   Blanka slutet
         LDIR           av raden
         POP  HL        Adress tabrad
         LD   C,40      L{ngd att skriva
TAN13    CALL 0:11      Skriv tabraden
         POP  DE        Placera mark|r
         LD   (253:243),DE p} r{tt plats
         CALL GET       H{mta tangent
TAN14    LD   E,A
         LD   A,(BYTFLG)
         AND  A
         LD   A,E
         JPNZ BYTTKN
         CP   32
         JPNC TECKEN
         LD   E,A
         LD   D,0
         LD   HL,TANTAB
         ADD  HL,DE
         ADD  HL,DE
         LD   E,(HL)
         INC  HL
         LD   D,(HL)
         EX   DE,HL
         JP   (HL)

TAN15    DEFB 0,40,80,120
TAN16    DEFB 0,0,80,80
TAN17    DEFM "<INS> "
TAN18    DEFM "<ORD> "
TAN19    DEFM "<RAK> "
TAN20    DEFM "<S\K>  "
TAN21    DEFM "<BYT>  "
TAN22    DEFM "%  "
         DEFB 27,61,32+0,32+24

TANTAB   DEFW EXIT      0  CTRL-@
         DEFW V[NSTPIL  1  A
         DEFW BYTTEXT   2  B
         DEFW EXIT      3  C
         DEFW DELCHAR   4  D
         DEFW DELLINE   5  E
         DEFW INSMODE   6  F
         DEFW ORDMODE   7  G
         DEFW V[NSTPIL  8  H
         DEFW TILLTAB   9  I
         DEFW BRYTIHOP  10 J
         DEFW SK[RMBRE  11 K
         DEFW RADL[NGD  12 L
         DEFW RETURN    13 M
         DEFW BRYTAV    14 N
         DEFW KOPIA     15 O
         DEFW SCRMODE   16 P
         DEFW HOME      17 Q
         DEFW INSLINE   18 R
         DEFW H\GERPIL  19 S
         DEFW TAB       20 T
         DEFW KLICK     21 U
         DEFW S\KTEXT   22 V
         DEFW UPP       23 W
         DEFW HJ[LP     24 X
         DEFW HM[RKE    25 Y
         DEFW NER       26 Z
         DEFW SISTSIDA  27 [
         DEFW F\RSIDA   28 \
         DEFW BAKSIDA   29 ]
         DEFW FRAMSIDA  30 ^
         DEFW CTRL      31 SHIFT+O

EXIT     CALL FR]NBUFF
         LD   HL,0
         LD   (BRAD),HL
         LD   A,255
         RET

;Hj{lprader

HR1      DEFM "Q=HOME W=UPP A=V[NSTER "
         DEFM "S=H\GER Z=NER "
HR2      DEFM "\=F\RSTA ]=BAK]T "
         DEFM "^=FRAM]T [=SISTA"

HR3      DEFM "D=DEL F=INS "
         DEFM "E=DELRAD R=INSRAD "
HR4      DEFM "K=40/80 L=RADL[NGD "
         DEFM "P=SCROLL U=KLICK"

HR5      DEFM "V=S\K B=BYT N=KLIPP "
         DEFM "J=KLISTRA T=TAB "
HR6      DEFM "Y=MARGINAL G=ORD/RAK "
         DEFM "O=KOPIA @=MENY"

;Rutin som skriver ut hj{lprader.
;Om 80-tknsk{rm anv{nds visas l{ngre
;hj{lprader.

HJK      LD   DE,(253:243)
         PUSH DE        Spara mark|r
         CALL CUR
         POP  DE
         LD   (253:243),DE
         CALL GET       H{mta tangent
         CP   24        CTRL-X ?
         JPNZ TAN14     Nej, hoppa
         LD   A,(1:216)
         CP   80
         LD   A,(HLPFLG)
         JRNZ HJK1      Hopp om 40-sk{rm
         OR   1         G|r udda
         INC  A         Addera tv} om 80
HJK1     INC  A         Addera ett om 40
         CP   7
         JRC  HJK2
         LD   A,1
HJK2     LD   (HLPFLG),A
         JP   HJ[LP     "retur"

HJ[LP    LD   A,(HLPFLG)
         LD   E,A
         LD   A,(1:216) Sk{rmbredd
         DEC  E
         JRNZ HJ1
         LD   HL,HR1
         LD   C,HR3-HR1
         CP   80        80-tkns sk{rm ?
         JRZ  HJK       Ja, hoppa
         LD   C,HR2-HR1-1 Ej sista blank
         JR   HJK

HJ1      DEC  E
         LD   HL,HR2
         LD   C,HR3-HR2
         JRZ  HJK
         DEC  E
         JRNZ HJ3
         LD   HL,HR3
         LD   C,HR5-HR3
         CP   80        80-tkns sk{rm ?
         JRZ  HJK       Ja, hoppa
         LD   C,HR4-HR3
HJ2      JR   HJK

HJ3      DEC  E
         LD   HL,HR4
         LD   C,HR5-HR4
         JRZ  HJK
         DEC  E
         LD   HL,HR6
         LD   C,HJK-HR6
         JRNZ HJK
         LD   HL,HR5
         LD   C,HJK-HR5
         CP   80        80-tkns sk{rm ?
         JRZ  HJK       Ja, hoppa
         LD   C,HR6-HR5
         JR   HJ2
