;        L]NGRAD.ASM
;        Anders Franz`n <5258>
;        Stockholm november 1985

;        Programmet m|jligg|r l{sandet av fil som har
;        rader som {r l{ngre {n 120 tecken. Det g}r
;        ocks} bra att skriva LOAD PROGNAMN och l{sa
;        in ett program som har f|r l}nga rader.


         ORG  251:0          ; Placera initieringsrutinen i
                             ; en kassettbuffert, rutinen
                             ; beh|vs ju bara en g}ng.

START    LD   A,192
         LD   (253:113),A    ; Markera DOS-buffertarna 3-5
         LD   (253:129),A    ; som upptagna
         LD   (253:145),A
         LD   HL,(254:10)
         LD   (L11),HL       ; Spara gamla enheter
         LD   HL,(253:58)    ; Adress till flexskivehopptabell
         LD   A,(HL)         ; Tag f|rsta byten i tabellen
         LD   DE,JP1         ; Plats f|r ny hopptabell
         LD   BC,27          ; Hopptabellen best}r av 27 bytes
         LDIR                ; Kopiera flexskivehopptabell
         LD   HL,3:164
         LD   C,27
         LDIR                ; Kopiera kassetthopptabell
         LD   HL,INLINE
         LD   (JP1+10),HL    ; Ny INLINE-rutin till hopptabellerna
         LD   (JP2+10),HL
         LD   HL,OPEN        ; Ny OPEN-rutin f|r flexskiva
         LD   (JP1+1),HL
         LD   HL,L1          ; Pekar p} flexl{nkar
         CP   195            ; Finns flexskiveenhet?
         JRZ  S2             ; Ja, hoppa
         LD   HL,INLINE
         LD   (254:39),HL    ; S{nk stacken
         LD   HL,L10         ; Pekar p} kassettl{nkar
S2       LD   (254:10),HL    ; L{gg nya enhetsl{nkarna i enhetslistan
         JP   0:198          ; Hoppa till ROM och g|r NEW


         ORG  248:0

; Ny INLINE-rutin f|r att klara l}nga rader

INLINE   EX   DE,HL          ; DE pekar dit text skall placeras
         PUSH IX             ; Spara IX p} stacken
         LD   IX,4
         ADD  IX,SP          ; IX pekar p} v{rdet efter IX p} stacken
I1       LD   L,(IX+0)
         LD   H,(IX+1)
         INC  IX
         INC  IX
         AND  A
         SBC  HL,DE          ; [r det adressen dit texten skall placeras?
         JRNZ I1             ; Nej, leta vidare (hittar alltid!)
         LD   DE,BUFFER
         LD   (IX-2),E       ; L{gg ner ny adress till rad i stacken
         LD   (IX-1),D
         POP  IX             ; ]terst{ll IX
         LD   (IX+13),1
         LD   L,(IX+10)
         LD   H,(IX+11)      ; Aktuell position i buffert
         LD   C,255          ; Max antal tecken att l{sa in
I2       LD   A,(HL)
         CP   3
         JRZ  EOT            ; Hoppa om bufferten slut
         CP   9
         JRZ  TAB            ; Hoppa om <TAB>
         AND  A
         SCF
         RETZ                ; Retur om EOF
         LD   A,186          ; ERR 58
         RETM                ; Retur om otill}tet tecken
         LD   A,(HL)
         LD   B,0
         LDI
         JPPO 9:233          ; ERR 20 om f|r m}nga tecken inl{sta
         CP   13
         JRNZ I2             ; Forts{tt om inte <CR>
         LD   (IX+10),L      ; Spara ny position i buffert
         LD   (IX+11),H
         RET

EOT      PUSH BC
         PUSH DE
         CALL 8:153          ; L{s in ny buffert
         POP  DE
         POP  BC
         JR   I2

TAB      INC  HL
         LD   B,(HL)         ; Antalet space
         INC  HL
         LD   A,C
         SUB  B
         JPC  9:233          ; Hoppa om f|r l}ng rad
         JPZ  9:233
         LD   C,A
         LD   A,32
T1       LD   (DE),A         ; L{gg ner space
         INC  DE
         DJNZ T1             ; Upprepa
         JR   I2

; Ny OPEN-rutin f|r att klara UNSAVE, KILL och NAME p} flexskiva.

OPEN     LD   HL,17
         ADD  HL,SP
         PUSH AF
         LD   A,(HL)         ; A = h|ga byten i returadressen
         CP   96
         JRC  OPEN1          ; Hoppa om ej anrop fr}n DOS
         CP   113
         JRNC OPEN1          ; Hoppa om ej anrop fr}n DOS
         LD   L,(IX+3)
         LD   H,(IX+4)       ; Tag adress till hopptabell
         DEC  HL
         LD   A,(HL)         ; Tag sista tecknet i enhetsnamnet
         LD   HL,253:58      ; Peka p} adress till DOS-JP
         LD   (IX+3),L       ; Byt ut den gamla hopptabellen mot ny
         LD   (IX+4),H
         DEC  HL
         LD   (HL),A         ; Spara sista tecknet i enhetsnamnet
OPEN1    POP  AF
         LD   HL,(253:58)    ; Adress till flexskivehopptabell
         JP   (HL)           ; Hoppa till ordinarie OPEN-rutinen

L1       DEFW L2,'   ',JP1
L2       DEFW L3,'DR0',JP1
L3       DEFW L4,'DR1',JP1
L4       DEFW L5,'DR2',JP1
L5       DEFW L6,'DR3',JP1
L6       DEFW L7,'DR4',JP1
L7       DEFW L8,'DR5',JP1
L8       DEFW L9,'DR6',JP1
L9       DEFW L10,'DR7',JP1
L10      DEFW L11,'   ',JP2
L11      DEFW 0,'CAS',JP2

JP1      DEFS 27
JP2      DEFS 27

BUFFER   DEFS 256


SLUT     EQU  $

