home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 1
/
GoldFishApril1994_CD1.img
/
d1xx
/
d162
/
cli_utilities
/
tree
/
tree.s
< prev
Wrap
Text File
|
1988-10-02
|
8KB
|
397 lines
; ********************************************************************
; * *
; * Tree V1.3 (C) 1988 by M.Stoll & M.Zepf & H.E.Stöffler *
; * --------- *
; * Program is placed in PUBLIC DOMAIN and may be *
; * freely distributed with sourcecode and docu- *
; * mentation. *
; * Files included in Achive: *
; * Use Seka-Assembler. - Tree.S *
; * - Tree.Doc *
; * To contact us: - Write to: Matthias Zepf - Tree *
; * Riegeläckerstr. 27 *
; * D-7250 Leonberg *
; * West Germany *
; * *
; * - Call: (+49) 7152 41917 (West Germany) *
; * *
; * - Electronic Mail: (+49) 7031 44788 (ELIAS) *
; * (+49) 7031 36339 (dateMail) *
; * (+49) 0711 813480 (microTalk/FNet) *
; * *
; * - UUCP: Smart: Agnus@Aragon.UUCP *
; * Domain: ...!{uunet!mcvax}!unido!altger!aragon!agnus *
; * *
; * Bitte zuerst Tree.doc lesen! Please read Tree.doc first! *
; * *
; ********************************************************************
openlib = -408
output = -60
input = -54
read = -42
write = -48
exit = -144
lock = -84
unlock = -90
waitforchar = -204
currentdir = -126
examine = -102
exnext = -108
allocmem = -198
freemem = -210
parentdir = -210
findtask = -294
Setsignal = -306
move.l a0,adresse
move.l d0,comlang
move.l 4,a6
lea dosname,a1
jsr openlib(a6)
move.l d0,dosbase
move.l d0,a6
jsr output(a6)
move.l d0,outhandle
jsr input(a6)
move.l d0,inhandle
clr.l d1
move.l adresse,a0
cmp.l #0,a0
beq fehler1
move.l comlang,d0
cmp.l #1,d0
beq Current
lab1: cmp.b #" ",(a0)+
bne lab3
subq.l #1,d0
bne lab1
bra fehler1
lab3: sub.l #1,a0
cmp.b #"?",(a0)
beq fehler2
lea name,a1
lab2: move.b (a0)+,(a1)+
cmp.b #":",-1(a1)
beq lab4
subq.l #1,d0
bne lab2
bra fehler1
lab4: clr.b (a1)
lea name,a1
move.l a1,d1
move.l #-2,d2
move.l dosbase,a6
jsr lock(a6)
tst.l d0
beq fehler3
move.l d0,actlock
lab_weiter:
move.w #1,lockcount
move.l #270,d0
move.l #$10001,d1
move.l 4,a6
jsr allocmem(a6)
move.l d0,actpuff
move.l d0,d2
move.l actlock,d1
move.l dosbase,a6
jsr examine(a6)
jsr infoname
lea name,a0
lea zeile,a1
lea Pfad,a2
su1: move.b (a0)+,(a1)+
move.b -1(a0),(a2)+
bne su1
move.b #":",-1(a1)
move.b #":",-1(a2)
clr.b (a1)
clr.b (a2)
jsr gebaus
schleife:
move.l actlock,d1
move.l actpuff,d2
move.l dosbase,a6
jsr exnext(a6)
stop: tst.l d0
beq pop
move.l actpuff,a0
tst.l 4(a0)
bmi schleife
push: add.w #1,lockcount
jsr appendname
jsr zeilaus
sub.w #1,lockcount
pushi: move.l actlock,d1
move.l actpuff,d2
move.l dosbase,a6
jsr exnext(a6)
move.l d0,success
tst.l d0
beq push_setbit
move.l actpuff,a0
tst.l 4(a0)
bmi pushi
clr.l d0
move.w lockcount,d0
clr.l d1
bset d0,d1
not.l d1
and.l d1,bitter
bra pushwei
push_setbit:
clr.l d0
move.w lockcount,d0
clr.l d1
bset d0,d1
or.l d1,bitter
pushwei:
add.w #1,lockcount
move.l actlock,-(a7)
move.l actpuff,-(a7)
move.l success,-(a7)
move.l #Pfad,d1
move.l #-2,d2
move.l dosbase,a6
jsr lock(a6)
move.l d0,actlock
move.l #270,d0
move.l #$10001,d1
move.l 4,a6
jsr allocmem(a6)
move.l d0,actpuff
move.l d0,d2
move.l actlock,d1
move.l dosbase,a6
jsr examine(a6)
clr.l d0
clr.l d1
move.l 4,a6
jsr SetSignal(a6)
btst #12,d0
bne unlockall
bra schleife
pop: move.l actpuff,a1
move.l #270,d0
move.l 4,a6
jsr freemem(a6)
tst.w unlockflag
beq unlockes
cmp.w #1,lockcount
beq ende
unlockes:
move.l actlock,d1
move.l dosbase,a6
jsr unlock(a6)
sub.w #1,lockcount
beq ende
move.l (a7)+,success
move.l (a7)+,actpuff
move.l (a7)+,actlock
jsr removename
tst.l success
beq pop
bra push
Current:move.w #"CU",unlockflag
sub.l a1,a1
move.l 4,a6
jsr findtask(a6)
move.l d0,a0
move.l 152(a0),d1
move.l d1,actlock
move.l dosbase,a6
cu_loop:jsr parentdir(a6)
tst.l d0
beq cu_end
tst.l userlock
beq cu_nix
move.l d0,-(a7)
move.l userlock,d1
jsr unlock(a6)
move.l (a7)+,d0
cu_nix: clr.w unlockflag
move.l d0,d1
move.l d0,actlock
move.l d0,userlock
bra cu_loop
cu_end: bra lab_weiter
infoname:
move.l actpuff,a0
lea 8(a0),a0
lea name,a1
inf1: move.b (a0)+,(a1)+
bne inf1
rts
leerzeile:
lea zeile,a0
move.w #$0a00,(a0)
gebaus: lea zeile,a0
allgaus:move.l outhandle,d1
move.l a0,d2
clr.l d3
lab7: addq.l #1,d3
tst.b (a0)+
bne lab7
move.b #10,-1(a0)
move.l dosbase,a6
jmp write(a6)
unlockall:
move.l actpuff,a1
move.l #270,d0
move.l 4,a6
jsr freemem(a6)
tst.w unlockflag
beq un1_all
cmp.w #1,lockcount
beq endeI
un1_all:move.l actlock,d1
move.l dosbase,a6
jsr unlock(a6)
sub.w #1,lockcount
beq endeI
unlocki:move.l (a7)+,a1
move.l (a7)+,a1
move.l #270,d0
move.l 4,a6
jsr freemem(a6)
move.l (a7)+,d1
tst.w unlockflag
beq un2_all
cmp.w #1,lockcount
beq endeI
un2_all:move.l dosbase,a6
jsr unlock(a6)
sub.w #1,lockcount
bne unlocki
endeI: move.l outhandle,d1
move.l #break,d2
move.l #breakend-break,d3
move.l dosbase,a6
jsr write(a6)
ende: clr.l d0
clr.l d1
move.l dosbase,a6
jmp exit(a6)
getend: lea pfad,a0
ge_1: tst.b (a0)+
bne ge_1
sub.l #1,a0
rts
appendname:
jsr getend
cmp.b #":",-1(a0)
beq an_1
move.b #"/",(a0)+
an_1: move.l actpuff,a1
lea 8(a1),a1
lea name,a2
an_2: move.b (a1)+,(a0)+
move.b -1(a1),(a2)+
bne an_2
rts
removename:
jsr getend
rem_2: cmp.b #"/",-1(a0)
beq rem_3
cmp.b #":",-1(a0)
beq rem_1
clr.b -(a0)
bra rem_2
rem_3: clr.b -(a0)
rem_1: rts
spaces: move.b #" ",(a0)+
bra Zeil_ll
zeilaus:lea zeile,a0
lea name,a1
move.b #" ",(a0)+
move.w lockcount,d0
sub.w #1,d0
beq zeil_end
sub.w #1,d0
beq keinspc
clr.l d2
zeil_loop:
add.l #1,d2
clr.l d3
bset d2,d3
move.l bitter,d4
and.l d3,d4
bne spaces
move.b #"|",(a0)+
zeil_ll:move.b #" ",(a0)+
move.b #" ",(a0)+
sub.w #1,d0
bne zeil_loop
keinspc:move.b #"+",(a0)+
move.b #"-",(a0)+
z_loop2:move.b (a1)+,(a0)+
bne z_loop2
jsr gebaus
zeil_end:
rts
Fehler1:move.l #Fehlerm1,d2
move.l #Fehlerm1end-Fehlerm1,d3
bra fehlerallg
Fehler2:move.l #Fehlerm2,d2
move.l #F2ende-Fehlerm2,d3
bra fehlerallg
Fehler3:move.l #Fehlerm3,d2
move.l #Fehlerm3end-Fehlerm3,d3
bra fehlerallg
fehlerallg:
move.l outhandle,d1
move.l dosbase,a6
jsr write(a6)
bra ende
; ---------------------------------------------------------------------
dosname: dc.b 'dos.library',0
even
Fehlerm1: dc.b "**Kein Device angegeben. [device missing]",10,0
Fehlerm1end:
even
Fehlerm2: dc.b 10,$9b,"7;31;40",$6d," Tree V1.3 ",$9b,"0;31;40"
dc.b $6d," © 1988 by "
dc.b $9b,"1;31;40",$6d,"M.Stoll & M.Zepf &"
dc.b " H.E.Stöffler ",$9b,"0;31;40",$6d,10
dc.b "Dieses Programm darf frei kopiert werden. Es "
dc.b "handelt sich dabei um PUBLIC-",10
dc.b "DOMAIN-Software. [This program may be "
dc.b "freely distributed. It is placed in",10
dc.b "the PUBLIC DOMAIN.]",10,10
dc.b "Benutzung: Tree <Device>",10,10,0
F2ende:
even
break: dc.b "**Abbruch! [Break!]",10,0
breakend:
even
Fehlerm3: dc.b "**Ungültiges Device angegeben. [device invalid]",10,0
Fehlerm3end:
even
dosbase: dc.l 0
adresse: dc.l 0
inhandle: dc.l 0
outhandle: dc.l 0
tre_getr: dc.l 0
comlang: dc.l 0
userlock: dc.l 0
actlock: dc.l 0
actpuff: dc.l 0
lockcount: dc.l 0
success: dc.l 0
unlockflag: dc.w 0
Bitter: dc.l 0
dummy: dc.w 0
even
name: blk.b 120
even
zeile: blk.b 256
even
Pfad: blk.b 1024
even
dospuff: blk.b 20
even