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


BUFF2    EQU  254:224

         ORG  248:0     DOS-buffert fyra

         DEFM "4  LIB       " 13 tkn
         JP   LIBD1

LIBD1    LD   HL,LIBD5
         LD   C,LIBD6-LIBD5
         CALL CUR       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:212),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 CUR       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:32*7 Sp}r 0 sektor 7
         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,8
         ADD  HL,DE     \ka antalet
         EX   DE,HL     sektorer med 8
         POP  HL
LIB2     DJNZ LIB1      Upprepa
         LD   (255:200),DE Ant sektorer
         LD   DE,0:32*6 Sp}r 0 sektor 6
         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
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,8        biblioteket
         LDIR            som {r anv{nda
         LD   E,C       DE <-- noll
         LD   D,C       Sp}r 0 sektor 0
         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,245:135
         LD   BC,120:0  Max 120 tecken
LIB6     LD   A,(HL)
         INC  HL
         CP   10        Volymnamn slut ?
         JRZ  LIB7      Ja, hoppa
         CP   13
         JRZ  LIB7      Ja, hoppa
         CP   32        Finns volymnamn?
         JRC  LIB8      Nej, hoppa
         CP   128
         JRNC LIB8      Nej, hoppa
         INC  C         \ka r{knare
         DJNZ LIB6      Upprepa om fler
LIB7     LD   A,C
         AND  A         Fanns volymnamn?
         JRZ  LIB8      Nej, hoppa
         LD   B,0
         PUSH BC        BC=l{ngd p} text
         LD   HL,LIB21
         LD   C,LIB22-LIB21
         CALL 0:11      Skriv "Volym:"
         POP  BC
         LD   HL,245:135
         CALL 0:11      Skriv volymnamn
LIB8     CALL 7:66      Skriv CR+LF
         LD   DE,2:0    Sp}r 2 sektor 0
         LD   B,1       Fil p} ny rad
LIB9     PUSH DE        Spara sektor-nr
         LD   HL,255:204
         SRL  E         Dela E med 32
         SRL  E
         SRL  E
         SRL  E
         SRL  E
         LD   D,0
         ADD  HL,DE     Sl} i tabell
         LD   A,(HL)    [r sektorn
         CP   2         anv{nd ?
         JPC  LIB18     Nej, tag n{sta
         POP  DE
         CALL LIBL[S    L{s sektor
         RETNZ          Felkod > 0
         PUSH DE        Spara sektor-nr
         PUSH BC        Spara r{knare
         LD   HL,245:16 Biblioteket
         LD   DE,252:16 Kassettbuffer 2
         LD   BC,240
         PUSH DE        Kopiera denna
         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
         LD   A,(HL)
         AND  A         Finns fil ?
         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:212)
         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:212) Ska filstorlek
         AND  A           visas ?
         JRNZ LIB17     Nej, hoppa
         PUSH HL        Spara filbeskr
         LD   D,(HL)    Sp}r segmrecord
         INC  HL
         LD   A,(HL)
         AND  224       Ta bort status
         LD   E,A       Sektor*32
         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    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 SKRIVTAL  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
         LD   A,E
         ADD  32        N{sta sektor
         LD   E,A       p} sp}r tv}
         AND  A         Sektorer slut ?
         JPNZ LIB9      Nej, l{s n{sta
         CALL 7:66      Skriv CR+LF
         CALL 7:66      En g}ng till
         LD   HL,(255:202)
         CALL SKRIVTAL  Skriv lediga
         LD   HL,LIB23
         LD   C,LIB24-LIB23
         CALL 0:11      Skriv " av "
         LD   HL,(255:200)
         CALL SKRIVTAL  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 "   "

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

SKRIVTAL 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
         CALL 0:11      Skriv ut str{ng
         RET

LIBEND   EQU  $
