; TEXT-EDITOR                       8/8
; Anders Franz`n <5258>
; Stockholm april 1985
; Uppdaterad juli 1985
; Konverterad till FD8,DOS 3.0
; Bo Engborg 851020 18.20
;
BUFF3    EQU  254:224

         ORG  248:0     DOS-buffert fyra

         DEFM "4  CAT FD8   " 13 tkn
         JP   LIBD1

LIBD1    LD   HL,LIBD5
         LD   C,LIBD6-LIBD5
         CALL CUX       Skriv drivefr}ga
LIBD2    CALL 0:2       H{mta tangent
         LD   HL,LIBD9
         LD   BC,8
         CPIR           Siffra 0-7 ?
         JRZ  LIBD3     Ja, hoppa
         LD   C,8
         CPIR           Shift + siffra ?
         RETNZ          Nej, fel
         XOR  A         Filstorlek visas
LIBD3    LD   (255:220),A Spara flagga
         LD   E,C       Vald drive
         CALL LIB       Visa LIB
         JRZ  LIBD1     Hoppa om okey
         LD   HL,LIBD6
         LD   BC,LIBD7-LIBD6
         BIT  7,A
         JRNZ LIBD4
         LD   HL,LIBD7
         LD   C,LIBD8-LIBD7
         CP   16
         JRZ  LIBD4
         LD   HL,LIBD8
         LD   C,LIBD9-LIBD8
LIBD4    CALL CUX       Skriv feltext
         JR   LIBD2     Upprepa

LIBD5    DEFM "\NSKAD DRIVE ?"
LIBD6    DEFM "SKIVAN EJ KLAR."
LIBD7    DEFM "SKIVAN D]LIGT "
         DEFM "FORMATERAD."
LIBD8    DEFM "FEL P] SKIVAN."
LIBD9    DEFM '76543210'
         DEFM '/&%$#"!='


; LIB
; Subrutin som visar skivans inneh}ll
; i den drive som anges av E-registret.
; Z-flaggan s{tts om det gick bra.
; Om det inte gick bra finns felkoden
; fr}n DOS i register A.

; LIBL[S l{ser en sektor p} skivan.
LIBL[S   PUSH DE
         PUSH BC
         PUSH HL
         CALL 96:102    L{s sektor
         POP  HL
         POP  BC
         POP  DE
         LD   A,(253:21)
         AND  A         Felkod > 0 ?
         RET

LIB      LD   A,E       Drive-nummer
         AND  7         Maska bort fel
         LD   (253:1),A Selektera drive
         ADD  48        G|r ASCII
         LD   (LIB20),A L{gg i textrad
         LD   DE,0:99   Sp}r 0,sektor
         CALL LIBL[S    L{s sektor
         RETNZ          Felkod >0
         LD   HL,245:0  Inl{st sektor
         LD   E,L
         LD   D,L       DE <-- noll
         LD   B,160     Antal bytes
LIB1     LD   A,(HL)    Tag byte
         INC  HL
         AND  A         Inneh}llet = 0 ?
         JRNZ LIB2      Nej, hoppa
         PUSH HL
         LD   HL,32
         ADD  HL,DE     \ka antalet
         EX   DE,HL     sektorer med 32
         POP  HL
LIB2     DJNZ LIB1      Upprepa
         LD   (255:200),DE Ant sektorer
         LD   DE,0:98   Sp}r 0 sektor
         CALL LIBL[S    L{s sektor
         RETNZ          Felkod > 0
         LD   HL,245:0  Inl{st sektor
         LD   E,L
         LD   D,L       DE <-- noll
         LD   C,160     Antal byte
LIB3     LD   B,8       ]tta bitar
LIB4     RR   (HL)      Testa bit
         JRC  LIB5      Upptagen
         INC  DE        \ka r{knare
         INC  DE
         INC  DE
         INC  DE
LIB5     DJNZ LIB4      Repetera
         INC  HL        N{sta byte
         DEC  C         Slut ?
         JRNZ LIB3      Nej, upprepa
         LD   (255:202),DE Lediga sekt
         LD   HL,245:239 Kopiera vilka
         LD   DE,255:204 sektorer i
         LD   C,16       biblioteket
         LDIR            som {r anv{nda
         LD   DE,73     DE <-- noll 0,9
         CALL LIBL[S    L{s sektor
         RETNZ          Felkod > 0
         LD   HL,LIB19
         LD   C,LIB21-LIB19 T|m sk{rm,
         CALL 0:11      skriv "Drive:x"
         LD   HL,LIB21
         LD   C,LIB22-LIB21
         CALL 0:11      Skriv "Volym:"
         LD   HL,245:3
         LD   BC,8      Max 8 tecken
         CALL 0:11      Skriv volymnamn
         LD   A,'.'
         LD   (DE),A
         INC  DE
         LD   HL,245:11  Extension
         LD   BC,3
         CALL 0:11
LIB8     CALL 7:66      Skriv CR+LF
         LD   DE,0      Sp}r 0 sektor 0
LIB9     LD   B,1       Fil p} ny rad
         PUSH DE
         LD   HL,255:204
         LD   D,0
         ADD  HL,DE     Sl} i tabell
         LD   A,E
         CP   8
         JR   NC,LIB9A
         LD   A,16
         LD   (MODER),A
         LD   A,(HL)
         CP   2
         JP   C,LIB18
         JR   LIB9B
LIB9A    LD   A,0
         LD   (MODER),A
         LD   A,(HL)    [r sektorn
         CP   1         anv{nd ?
         JPC  LIB18     Nej, tag n{sta
LIB9B    LD   D,0
         LD   A,E
         SLA  E
         SLA  E
         SLA  E
         LD   HL,128
         AND  3
         ADD  HL,DE
         EX   DE,HL
         LD   H,0
         LD   L,A
         ADD  HL,DE
         EX   DE,HL
         CALL LIBL[S    L{s sektor
         POP  DE
         RETNZ          Felkod > 0
         PUSH DE
         PUSH BC
         EX   DE,HL
         PUSH HL
         CALL 7:66
         LD   HL,TEXTSC
         LD   BC,12
         CALL 0:11
         POP  HL
         CALL 24:98
         LD   A,(MODER)
         LD   H,245
         LD   L,A       Biblioteket
         LD   D,252
         LD   E,A       Kassettbuffer 2
         PUSH DE
         PUSH HL
         LD   B,0
         LD   C,A
         LD   HL,256
         AND  A
         SBC  HL,BC
         AND  A
         PUSH HL
         POP  BC
         POP  HL
         LDIR           bibliotekssektor
         POP  HL        Filbeskrivning
         POP  BC        R{knaren
LIB10    LD   A,(254:7)
         AND  A         CTRL-C ?
         LD   A,0
         JPNZ 0:18      Ja, stopp
         INC  HL
         LD   A,(HL)
         LD   E,A
         DEC  HL
         LD   A,(HL)
         OR   E
         JPZ  LIB17     Nej, hoppa
         INC  A
         JPZ  LIB17
         DJNZ LIB12     Raden ej full
         CALL 7:66      Skriv CR+LF
         LD   A,(1:216)
         CP   40        40-tknsk{rm ?
         LD   A,(255:220)
         JRNZ LIB11     Nej,hoppa
         LD   B,2       Tv} filnamn/rad
         AND  A         Filstorlek ?
         JRZ  LIB12     Ja, hoppa
         LD   B,3       Tre filnamn/rad
         JR   LIB12

LIB11    LD   B,4       Fyra filnamn/rad
         AND  A         Filstorlek ?
         JRZ  LIB12     Ja, hoppa
         LD   B,5       Fem filnamn/rad
LIB12    PUSH BC        Spara r{knare
         PUSH HL        Spara beskrivn
         LD   DE,4
         ADD  HL,DE     Peka p} filnamn
         LD   BC,8
         CALL 0:11      Skriv namn
         PUSH HL
         LD   HL,LIB22
         LD   C,1       Obs att B=0
         CALL 0:11      Skriv punkt
         POP  HL
         LD   C,3
         CALL 0:11      Skriv extension
         INC  (IY-34)   \ka mark|rkolumn
         POP  HL        Filbeskrivning
         POP  BC        R{knare
         LD   A,(255:220) Ska filstorlek
         AND  A           visas ?
         JRNZ LIB17     Nej, hoppa
         PUSH HL        Spara filbeskr
         LD   D,(HL)    Sp}r segmrecord
         INC  HL
         LD   E,(HL)
         CALL LIBL[S    L{s segmrecord
         POP  HL        Filbeskrivning
         POP  DE        ]terst{ll stack
         RETNZ          Felkod > 0
         PUSH DE        Spara sektor
         PUSH BC        Spara r{knare
         PUSH HL        Spara filbeskr
         LD   DE,245:4  Segmbeskrivning
         LD   HL,0      R{knare f|r
         LD   B,L       filstorleken
LIB13    LD   A,(DE)
         INC  A         Fler segment ?
         JRZ  LIB14     Nej, hoppa
         INC  DE        Skippa sp}radr
         LD   A,(DE)
         INC  DE
         AND  31        Maska fram antal
         INC  A         sektorer i segm
         LD   C,A
         ADD  HL,BC     \ka r{knare
         JR   LIB13     N{sta segment
LIB14    AND  A
         SLA  L
         RL   H
         SLA  L
         RL   H
         LD   A,H
         AND  A         Tal > 255 ?
         JRNZ LIB16     Ja, hoppa
         LD   A,L
         CP   100       Tal >= 100 ?
         JRNC LIB16     Ja, hoppa
         PUSH HL        Spara talet
         LD   HL,LIB25  Mellanslag
         LD   BC,2
         CP   10        Tal < 10 ?
         JRC  LIB15     Ja, hoppa
         DEC  C
LIB15    CALL 0:11      Skriv space
         POP  HL        ]terst{ll tal
LIB16    CALL SKRIVTAX  Skriv storlek
         LD   HL,LIB25  Mellanslag
         LD   C,3       Obs att B=0
         CALL 0:11      Skriv space
         POP  HL        Filbeskrivning
         POP  BC        R{knare

LIB17    LD   A,L
         ADD  16        N{sta fil i
         LD   L,A       biblioteket
         AND  A         Sektor slut ?
         JPNZ LIB10     Ja, tag ny
LIB18    POP  DE        Sektor-nummer
         PUSH DE
         JR   C,LIB18A
         BIT  0,E
         JR   Z,LIB18A
         LD   HL,TEXTCR
         LD   BC,17
         CALL 0:11      Skriv tryck ret
         CALL 0:2       Getch
         LD   HL,LIB21
         LD   BC,1
         CALL 0:11
LIB18A   POP  DE
         INC  DE
         LD   A,E
         CP   16         Sektorer slut ?
         JP   C,LIB9    Nej, l{s n{sta
         CALL 7:66      Skriv CR+LF
         CALL 7:66      En g}ng till
         LD   HL,(255:202)
         CALL SKRIVTAX  Skriv lediga
         LD   HL,LIB23
         LD   C,LIB24-LIB23
         CALL 0:11      Skriv " av "
         LD   HL,(255:200)
         CALL SKRIVTAX  Skriv totala
         LD   HL,LIB24
         LD   C,LIB25-LIB24
         CALL 0:11
         XOR  A         Felkod noll
         RET

LIB19    DEFB 12,27,61,32+3,32+0
         DEFM "LIB",13,10
         DEFM "====="
         DEFB 27,61,32+7,32+0
         DEFM "Drive: "
LIB20    DEFM "x"
LIB21    DEFM 13,10,"Volym: "
LIB22    DEFM "."
LIB23    DEFM " av "
LIB24    DEFM " sektorer kvar.",10,13
LIB25    DEFM "   "

CUX      LD   B,0
         PUSH HL
         PUSH BC
         LD   C,8
         LD   HL,CUX1
         CALL 0:11
         POP  BC
         POP  HL
         CALL 0:11
         RET
CUX1     DEFB 7,27,61,32+23,32+0
         DEFM "*  "

SKRIVTAX LD   DE,BUFF3
         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
         CALL 0:11      Skriv ut str{ng
         RET
MODER    DEFS 6
TEXTCR   DEFM 13,10,"Tryck -Return- "
TEXTSC   DEFM 13,10,"Libsector "
LIBEND   EQU  $
         END
