1 REM Ins{nd av J|rgen Westman <5074>    1989-08-31 19.25.34 (KERMIT)
; TED8UFD
; TEXT-EDITOR                       8/8
; Anders Franz`n <5258>
; Stockholm april 1985
; Uppdaterad juli 1985
; [ndrad f|r UFD 830-850 drive 1989-08-31 <5074> J.Westman
; Visning av ufd drive = 4
; Val av drive typ = D + 0,1,2 eller 3
; 0 = 830
; 1 = 832
; 2 = 838
; 3 = 850

         TITLE UFDLIB 830-50

BUFF2    EQU  254:224

         ORG  248:0     DOS-buffert fyra

         DEFM "4  LIB"
MEL      DEFM "       " 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,5
         CPIR           Siffra 0-4 ?
         JRZ  LIBD3     Ja, hoppa
         LD   C,5
         CPIR           Shift + siffra ?
         jr   z,libd21
         and  223
         cp   'D'
         ret  nz
         call 2
         ld   hl,libd9+1
         ld   c,4
         cpir
         RETNZ          Nej, fel
         ld   hl,drvtab-48
         ld   e,a
         ld   d,b
         add  hl,de
         ld   a,(hl)
         call droff
         dec  hl
         ld   (hl),a
         jr   libd1

libd21   XOR  A         Filstorlek visas
LIBD3    LD   (SFLG),A  Spara flagga
         LD   E,C       Vald drive
         CALL LIB       Visa LIB
         JRZ  LIBD1     Hoppa om okey
         LD   HL,LIBD6
         LD   BC,LIBD8-LIBD6
         BIT  7,A
         JRNZ 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."
LIBD8    DEFM "FEL P] SKIVAN."
LIBD9    DEFM '43210'
         DEFM '$#"!='

drvtab   DB   12
         DB   8
         DB   16
         DB   4

; 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   C,A
         CALL DRVSEL    Selektera drive
         RET  NZ
         LD   A,C
         ADD  48        G|r ASCII
         LD   (LIB20),A L{gg i textrad
         LD   DE,(BITMAP) H{mta bitmap
         LD   D,0
         CALL LIBL[S    L{s sektor
         RETNZ          Felkod >0
         LD   HL,245:0  Inl{st sektor
         LD   C,L       Antal bytes i cluster map
LIB1     LD   A,(HL)    Tag byte
         INC  HL
         INC  C
         AND  A         Inneh}llet = 0 ?
         JRNZ LIB1      Nej, forts{tt
         DEC  C         Justera r{knaren
LIB2     LD   A,(HL)
         INC  HL
         INC  C
         AND  A         Inneh}llet = 0 ?
         JRZ  LIB2      Ja, forts{tt
         LD   A,C
         LD   (CLUBYTE),A Spara antal cluster bytes i map
         PUSH DE        Spara bitmap sektor
         CALL SEKTFREE
         LD   (TSEKT),HL Totalt antal sektorer
         POP  DE
         DEC  DE        Peka p} map
         CALL LIBL[S    L{s sektor
         RETNZ          Felkod >0
         CALL SEKTFREE
         LD   (LSEKT),HL Lediga sektorer
         CALL LIBSCNT   R{kna och s{tt antal anv{nda lib sektorer
         LD   DE,0      Sp}r 0 sektor 0
         CALL LIBL[S    L{s sektor
         RETNZ          Felkod > 0
         LD   HL,LIB19
         LD   BC,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
         LD   C,B       Nollst{ll om inte CR eller LF
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,(UFDLIB) L{s f|rsta LIB sektor till DE
         LD   B,1       Fil p} ny rad
LIB9     CALL LIBL[S    L{s sektor
         RETNZ          Felkod > 0
         PUSH DE        Spara sektor
         LD   HL,245:4  Biblioteket f|rsta eventuella filnamn
LIB10    LD   A,(254:7)
         AND  A         CTRL-C ?
         LD   A,0
         JPNZ 0:18      Ja, stopp
         LD   A,(HL)
         AND  A         Finns fil ?
         JRZ  LIB17     Nej, hoppa
         INC  A
         JRZ  LIB17

         DJNZ LIB12     Raden ej full
         CALL 7:66      Skriv CR+LF
         LD   A,(1:216)
         CP   40        40-tknsk{rm ?
         LD   A,(SFLG)
         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 filnamnpos
         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,(SFLG)  Ska filstorlek
         AND  A         visas ?
         JRNZ LIB17     Nej, hoppa

         PUSH BC        R{knare
         PUSH HL        Spara filnamnpos
         DEC  HL
         LD   D,(HL)    L{ngd
         DEC  HL
         LD   E,(HL)
         EX   DE,HL     -> HL

LIB16    LD   A,5       5 teckens utfyllnad
         CALL SKRTALFI  Skriv storlek
         LD   HL,MEL    Mellanslag
         LD   C,1       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
         CP   4         Sektor slut ?
         JRNZ LIB10     Ja, tag ny

         POP  DE        Sektor-nummer
         INC  DE        N{sta sektor
         LD   HL,LIBSEKTS
         DEC  (HL)
         JPNZ LIB9      Nej, l{s n{sta
         CALL 7:66      Skriv CR+LF
         CALL 7:66      En g}ng till
         LD   HL,(LSEKT)
         CALL SKRIVTAL  Skriv lediga
         LD   HL,LIB23
         LD   C,LIB24-LIB23
         CALL 0:11      Skriv " av "
         LD   HL,(TSEKT)
         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

SEKTFREE LD   HL,245:0  Inl{st sektor
         LD   E,L
         LD   D,L       DE <-- noll
         LD   A,(CLUBYTE)
         LD   C,A       Antal bytes
SEKTF    LD   B,8       ]tta bitar
SEKTF1   RR   (HL)      Testa bit
         JRC  SEKTF2    Upptagen
         INC  DE        \ka r{knare
SEKTF2   DJNZ SEKTF1    Repetera
         INC  HL        N{sta byte
         DEC  C         Slut ?
         JRNZ SEKTF     Nej, upprepa
         EX   DE,HL     HL inneh}ller antal tomma sektorer

         PUSH HL
         CALL DROFF     E {r DR offset
         LD   A,(253:1)
         AND  11100b
         LD   E,A
         ADD  HL,DE     Peka p} cluster storlek
         LD   A,(HL)
         AND  111111b   Maska bort addressering
         POP  HL
SEKTF3   RET  Z
         ADD  HL,HL
         DEC  A
         JR   SEKTF3

LIBSCNT  LD   HL,245:255 Sista ev anv{nda lib + 1
         LD   B,17      Max antal anv{nda lib + 1
LIBSC1   DEC  HL
         DEC  B
         LD   A,(HL)
         AND  A
         JR   Z,LIBSC1  Inget d{r, backa ett steg
         LD   A,B
         LD   (LIBSEKTS),A
         RET

DRVSEL   LD   HL,16
         LD   (UFDLIB),HL
         PUSH AF
         LD   A,L
         LD   (LIBSEKTS),A
         POP  AF
         CP   4         Kolla om UFD vald
         JR   Z,DRVUFD
         CALL DROFF
         ADD  E         Add offset
DRVSEL1  LD   (253:1),A V{lj drive
         LD   HL,BITMAP S{tt bitmap till 15, alla utom 830
         LD   (HL),15
         AND  11100b    Maska fram drive bas
         CP   12        Kolla om MOX drive
         JR   NZ,DRVSEL2 Nej bitmap {r 15
         LD   (HL),7    S{tt till 7 f|r 830
DRVSEL2  XOR  A         Flagga f|r succe
         RET

DRVUFD   LD   HL,606Dh  L{s UFD offset
         CALL PTRVAL
         LD   A,D       Kolla om n}got offset
         OR   E
         JR   NZ,DRVUFD1
         LD   A,128     Skivan ej klar
         OR   A
         RET

DRVUFD1  LD   (UFDLIB),DE
         INC  HL
         LD   A,(HL)    A inneh}ller UFD drive
         JR   DRVSEL1


DROFF    LD   HL,606Bh  L{s DR offset
PTRVAL   LD   E,(HL)
         INC  HL
         LD   D,(HL)
         EX   DE,HL     HL pekar p} v{rde
         LD   E,(HL)
         INC  HL
         LD   D,(HL)    DE inneh}ller eventuell v{rde
         RET

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 XOR  A         Skriv utan utfyllnad
SKRTALFI PUSH AF        Spara antal tecken
         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     HL pekar p} str{ng
         POP  AF        Tillbaks med l{ngd
         AND  A         Nollst{ll flaggor
         PUSH HL        Spara str{ng
         PUSH BC        Spara l{ngd
         SUB  C         Tecken att fylla ut med
         JR   C,SKRT1   Str{ng l{ngre {n givet
         JR   Z,SKRT1   Noll l{ngd
         LD   C,A
         LD   HL,MEL
         CALL 0:11      Skriv ut
SKRT1    POP  BC
         POP  HL
         CALL 0:11      Skriv ut str{ng
         RET

CLUBYTE  DS   1
TSEKT    DS   2
LSEKT    DS   2
SFLG     DS   1
BITMAP   DS   1
LIBSEKTS DS   1
UFDLIB   DS   2

LIBEND   EQU  $
