home *** CD-ROM | disk | FTP | other *** search
-
- ; Directoryn latausohjelma (C) 1988 by TM
-
-
- include "jmplibs.i"
- include "numeric.i"
- include "exec/types.i"
- include "dos.i"
- include "exec.xref"
- include "dos.xref"
-
- BUFFER equ 16384 ;Puskurin koko
- FIB equ 260 ;FileInfoBlockin koko
-
-
- ; Pääohjelma
-
- begin openlib Dos,clean ;Avaa Dos
-
- move.l #BUFFER+FIB,d0 ;Tavumäärä
- moveq #0,d1 ;Tyyppi
- lib Exec,AllocMem ;Varaa muistia
- move.l d0,mem ;Tallenna osoite
- beq clean ;Ei muistia: virhe
-
- move.l mem(pc),a0 ;Jaa muisti
- move.l a0,buffer ; nimipuskurin
- lea BUFFER(a0),a0 ; ja
- move.l a0,fib ; FileInfoBlockin kesken
-
- bsr asknam ;Kysy hakemiston nimi
- bsr loaddir ;Lataa hakemisto
- bsr typedir ;Tulosta hakemisto
-
- clean move.l mem(pc),d0
- beq clean1 ;Muistia ei oltu saatu; ei vapauteta
- move.l d0,a1 ;Osoitin
- move.l #BUFFER+FIB,d0 ;Tavumäärä
- lib Exec,FreeMem ;Vapauta muisti
- clr.l buffer
-
- clean1 closlib Dos ;Sulje Dos
- moveq #0,d0
- rts ;Poistu
-
-
- ; Aliohjelmat
-
- asknam print <'Hakemiston nimi: '> ;Tulosta kysymys
- lib Dos,Input ;Input File Handle
- move.l d0,d1 ;-> d1
- lea inpbuf(pc),a0 ;Puskurin osoite
- move.l a0,d2 ;-> d2
- moveq #40,d3 ;Maksimipituus -> d3
- lib Dos,Read
- move.l d2,a0
- clr.b -1(a0,d0.l) ;Loppuun NULL
- rts
-
- print10 push all ;Tämä tulostaa 10-järjestelmän
- lea inpbuf(pc),a0 ; luvun D0:sta.
- numlib put10
- lea inpbuf(pc),a0
- printa a0
- pull all
- rts
-
- loaddir move.l buffer(pc),a2 ;Puskurin osoite
- clr.b (a2)
- moveq.l #0,d7 ;Nollataan yhteispituus
- lea inpbuf(pc),a0 ;Nimen osoite
- move.l a0,d1 ;-> d1
- moveq #ACCESS_READ,d2
- lib Dos,Lock ;Lockataan hakemisto
- move.l d0,lock
- bne lddir1 ;Ei virhettä
- print <'Ei onnistu!',10> ;Virhe, valita
- rts
- lddir1 move.l lock(pc),d1 ;Lock
- move.l fib(pc),d2 ;FileInfoBlock
- lib Dos,Examine ;Saadaan hakemiston tiedot
- move.l d2,a0 ;fib -> a0
- tst.l fib_DirEntryType(a0) ;Nimen tyyppi
- bpl lddir2 ;Directory, jatketaan
- print <'Tämähän on tiedosto!',10>
- bra lddir6 ;tämä on tiedosto -> poistutaan
-
- lddir2 move.l lock(pc),d1 ;Lock
- move.l fib(pc),d2 ;FileInfoBlock
- lib Dos,ExNext ;Ensimmäinen nimi
- tst.l d0
- beq lddir6 ;->Nimet loppuivat
- move.l d2,a0 ;fib -> a0
- add.l fib_Size(a0),d7 ;lisätään yhteispituuteen
- lea fib_FileName(a0),a1 ;Nimen osoite -> a1
- lddir3 move.b (a1)+,(a2)+ ;Nimi puskuriin
- bne lddir3
- tst.l fib_DirEntryType(a0) ;Nimen tyyppi
- bmi lddir5 ;Ei directory, lis. vain rivinvaihto
- subq.l #1,a2 ;Nimi ei lopukaan
- lea text1(pc),a1
- lddir4 move.b (a1)+,(a2)+ ;Lisää nimeen " (dir)"
- bne lddir4
- lddir5 move.b #10,-1(a2) ;Lisää nimen loppuun rivinvaihto...
- clr.b (a2)+ ; ja nolla
- bra lddir2 ;Seuraava nimi
- lddir6 clr.b (a2) ;Lisää puskurin loppuun ylim. NULL
- move.l lock(pc),d1
- lib Dos,UnLock ;Vapauta Lock
- move.l d7,len ;Tallenna yhteispituus
- rts
-
- typedir move.l buffer(pc),a2 ;Puskurin alkuosoite
- typdir1 move.l a2,a0
- tst.b (a0) ;Lisää nimiä?
- beq typdir3 ;Ei, lopeta
- printa a0 ;Tulosta teksti
- typdir2 tst.b (a2)+ ;Etsi nimen loppu
- bne typdir2
- bra typdir1 ;Seuraava
- typdir3 print <10,'Tiedostojen yhteispituus on '>
- move.l len(pc),d0
- bsr print10
- print <' tavua.',10>
- rts
-
- numlib ;luvuntulostusrutiinikirjasto
-
- ; Muuttujat
-
- mem dc.l 0 ;varatun muistin alku
- buffer dc.l 0 ;nimipuskurin osoite
- fib dc.l 0 ;FileInfoBlock-osoitin
- lock dc.l 0 ;Lock-osoitin
- len dc.l 0 ;yhteispituus
-
- inpbuf ds.b 44 ;väliaikainen puskuri
-
-
- ; Tekstit
-
- text1 dc.b ' (dir)',0
- text2 dc.b 10,0
-
- libnames
- end
-
-
-