home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_progs / prog-asm / assemtls.lzh / ASSEMTOOLS / ASOURCE / DIR.ASM < prev    next >
Encoding:
Assembly Source File  |  1991-08-16  |  3.4 KB  |  149 lines

  1.  
  2. ; Directoryn latausohjelma (C) 1988 by TM
  3.  
  4.  
  5.     include    "jmplibs.i"
  6.     include    "numeric.i"
  7.     include    "exec/types.i"
  8.     include    "dos.i"
  9.     include    "exec.xref"
  10.     include    "dos.xref"
  11.  
  12. BUFFER    equ    16384            ;Puskurin koko
  13. FIB    equ    260            ;FileInfoBlockin koko
  14.  
  15.  
  16. ; Pääohjelma
  17.  
  18. begin    openlib    Dos,clean        ;Avaa Dos
  19.  
  20.     move.l    #BUFFER+FIB,d0        ;Tavumäärä
  21.     moveq    #0,d1            ;Tyyppi
  22.     lib    Exec,AllocMem        ;Varaa muistia
  23.     move.l    d0,mem            ;Tallenna osoite
  24.     beq    clean            ;Ei muistia: virhe
  25.  
  26.     move.l    mem(pc),a0        ;Jaa muisti
  27.     move.l    a0,buffer        ; nimipuskurin
  28.     lea    BUFFER(a0),a0        ; ja
  29.     move.l    a0,fib            ; FileInfoBlockin kesken
  30.  
  31.     bsr    asknam            ;Kysy hakemiston nimi
  32.     bsr    loaddir            ;Lataa hakemisto
  33.     bsr    typedir            ;Tulosta hakemisto
  34.  
  35. clean    move.l    mem(pc),d0
  36.     beq    clean1            ;Muistia ei oltu saatu; ei vapauteta
  37.     move.l    d0,a1            ;Osoitin
  38.     move.l    #BUFFER+FIB,d0        ;Tavumäärä
  39.     lib    Exec,FreeMem        ;Vapauta muisti
  40.     clr.l    buffer
  41.  
  42. clean1    closlib    Dos            ;Sulje Dos
  43.     moveq    #0,d0
  44.     rts                ;Poistu
  45.  
  46.  
  47. ; Aliohjelmat
  48.  
  49. asknam    print    <'Hakemiston nimi: '>    ;Tulosta kysymys
  50.     lib    Dos,Input        ;Input File Handle
  51.     move.l    d0,d1            ;-> d1
  52.     lea    inpbuf(pc),a0        ;Puskurin osoite
  53.     move.l    a0,d2            ;-> d2
  54.     moveq    #40,d3            ;Maksimipituus -> d3
  55.     lib    Dos,Read
  56.     move.l    d2,a0
  57.     clr.b    -1(a0,d0.l)        ;Loppuun NULL
  58.     rts
  59.  
  60. print10    push    all            ;Tämä tulostaa 10-järjestelmän
  61.     lea    inpbuf(pc),a0        ; luvun D0:sta.
  62.     numlib    put10
  63.     lea    inpbuf(pc),a0
  64.     printa    a0
  65.     pull    all
  66.     rts
  67.  
  68. loaddir    move.l    buffer(pc),a2        ;Puskurin osoite
  69.     clr.b    (a2)
  70.     moveq.l    #0,d7            ;Nollataan yhteispituus
  71.     lea    inpbuf(pc),a0        ;Nimen osoite
  72.     move.l    a0,d1            ;-> d1
  73.     moveq    #ACCESS_READ,d2
  74.     lib    Dos,Lock        ;Lockataan hakemisto
  75.     move.l    d0,lock
  76.     bne    lddir1            ;Ei virhettä
  77.     print    <'Ei onnistu!',10>    ;Virhe, valita
  78.     rts
  79. lddir1    move.l    lock(pc),d1        ;Lock
  80.     move.l    fib(pc),d2        ;FileInfoBlock
  81.     lib    Dos,Examine        ;Saadaan hakemiston tiedot
  82.     move.l    d2,a0            ;fib -> a0
  83.     tst.l    fib_DirEntryType(a0)    ;Nimen tyyppi
  84.     bpl    lddir2            ;Directory, jatketaan
  85.     print    <'Tämähän on tiedosto!',10>
  86.     bra    lddir6            ;tämä on tiedosto -> poistutaan
  87.  
  88. lddir2    move.l    lock(pc),d1        ;Lock
  89.     move.l    fib(pc),d2        ;FileInfoBlock
  90.     lib    Dos,ExNext        ;Ensimmäinen nimi
  91.     tst.l    d0
  92.     beq    lddir6            ;->Nimet loppuivat
  93.     move.l    d2,a0            ;fib -> a0
  94.     add.l    fib_Size(a0),d7        ;lisätään yhteispituuteen
  95.     lea    fib_FileName(a0),a1    ;Nimen osoite -> a1
  96. lddir3    move.b    (a1)+,(a2)+        ;Nimi puskuriin
  97.     bne    lddir3
  98.     tst.l    fib_DirEntryType(a0)    ;Nimen tyyppi
  99.     bmi    lddir5            ;Ei directory, lis. vain rivinvaihto
  100.     subq.l    #1,a2            ;Nimi ei lopukaan
  101.     lea    text1(pc),a1
  102. lddir4    move.b    (a1)+,(a2)+        ;Lisää nimeen " (dir)"
  103.     bne    lddir4
  104. lddir5    move.b    #10,-1(a2)        ;Lisää nimen loppuun rivinvaihto...
  105.     clr.b    (a2)+            ; ja nolla
  106.     bra    lddir2            ;Seuraava nimi
  107. lddir6    clr.b    (a2)            ;Lisää puskurin loppuun ylim. NULL
  108.     move.l    lock(pc),d1
  109.     lib    Dos,UnLock        ;Vapauta Lock
  110.     move.l    d7,len            ;Tallenna yhteispituus
  111.     rts
  112.  
  113. typedir    move.l    buffer(pc),a2        ;Puskurin alkuosoite
  114. typdir1    move.l    a2,a0
  115.     tst.b    (a0)            ;Lisää nimiä?
  116.     beq    typdir3            ;Ei, lopeta
  117.     printa    a0            ;Tulosta teksti
  118. typdir2    tst.b    (a2)+            ;Etsi nimen loppu
  119.     bne    typdir2
  120.     bra    typdir1            ;Seuraava
  121. typdir3    print    <10,'Tiedostojen yhteispituus on '>
  122.     move.l    len(pc),d0
  123.     bsr    print10
  124.     print    <' tavua.',10>
  125.     rts
  126.  
  127.     numlib                ;luvuntulostusrutiinikirjasto
  128.  
  129. ; Muuttujat
  130.  
  131. mem    dc.l    0    ;varatun muistin alku
  132. buffer    dc.l    0    ;nimipuskurin osoite
  133. fib    dc.l    0    ;FileInfoBlock-osoitin
  134. lock    dc.l    0    ;Lock-osoitin
  135. len    dc.l    0    ;yhteispituus
  136.  
  137. inpbuf    ds.b    44    ;väliaikainen puskuri
  138.  
  139.  
  140. ; Tekstit
  141.  
  142. text1    dc.b    ' (dir)',0
  143. text2    dc.b    10,0
  144.  
  145.     libnames
  146.     end
  147.  
  148.  
  149.