gno/bin/purge/purge.asm

207 lines
4.3 KiB
NASM

**************************************************************************
*
* GNO Purge 3.0
*
* Written by Tim Meekins, Procyon, Inc.
* Based on code originally written by Mike Westerfield.
*
* This program is public domain. enjoy it.
*
* Parts of this program are dependent on GNOlib and the ByteWorks SYSlib.
*
**************************************************************************
keep purge
mcopy purge.mac
Purge START
handle equ 0
location equ 0
nextHandle equ 4
argv equ 8
argc equ 12
verbosity equ 14
arg equ 16
;
; memory manager record
;
attributes equ 4
userID equ 6
length equ 8
last equ 12
next equ 16
phk
plb
sta ~USER_ID
sty commandline
stx commandline+2
stz verbosity
jsl ~MM_INIT
ph4 commandline
clc
tdc
adc #argv
pea 0
pha
jsl GNO_PARSEARG
sta argc
dec a
beq start
dec a
beq doopt
showusage WriteCString #Usage
jmp done
doopt ldy #4
lda [argv],y
sta arg
iny2
lda [argv],y
sta arg+2
lda [arg]
and #$FF
cmp #'-'
bne showusage
ldy #1
lda [arg],y
cmp #'v' ;the 0 too..
bne doopt
inc verbosity
start FreeMem before
FindHandle #Purge,handle
lb1 ldy #last
lda [handle],y
tax
iny2
ora [handle],y
beq lb1a
lda [handle],y
sta handle+2
stx handle
bra lb1
lb1a lda verbosity
beq lb2
WriteCString #msg1
lb2 ora2 handle,handle+2,@a
jeq lb4
ldy #next
lda [handle],y
sta nextHandle
iny2
lda [handle],y
sta nextHandle+2
ldy #attributes
lda [handle],y
jmi lb3
and #$0300
jeq lb3
lda verbosity
jeq dopurge
WriteChar #'$'
ldx handle+2
lda handle
jsr PrintHex4
WriteString #msg2
ldy #2
lda [handle],y
tax
lda [handle]
jsr PrintHex4
WriteString #msg2
ldy #attributes
lda [handle],y
jsr PrintHex2
WriteString #msg2
ldy #userID
lda [handle],y
jsr PrintHex2
WriteString #msg2
ldy #length+2
lda [handle],y
tax
dey2
lda [handle],y
jsr PrintHex4
WriteChar #' '
stz ref
apploop ldy #userID
lda [handle],y
and #%1111000011111111
LGetPathname (@a,ref),@yx
if2 @a,eq,#0,appput
inc ref
if2 ref,cc,#128,apploop
bra oops
appput WriteString @xy
oops WriteLine #empty
dopurge PurgeHandle handle
lb3 mv4 nextHandle,handle
jmp lb2
lb4 CompactMem
TotalMem @yx
NewHandle (@xy,~USER_ID,#$0000,#0),handle
ora2 handle,handle+2,@a
beq showstat
DisposeHandle handle
showstat lda verbosity
beq Done
FreeMem After
WriteCString #beforestr
ldx before+2
lda before
jsr PrintHex4
WriteCString #leftstr
WriteCString #afterstr
ldx after+2
lda after
jsr PrintHex4
WriteCString #leftstr
Done lda #0
rtl
empty str ''
ref ds 2
commandline ds 4
before ds 4
after ds 4
msg1 dc c'GNO Purge 3.0',h'0d0a0a'
dc c'Handle Ptr Attr User Length App',h'0d0a00'
msg2 str ' $'
Usage dc c'Usage: purge [-v]',h'0d0a00'
beforestr dc h'0d0a',c'Before: $',h'00'
afterstr dc c'After: $',h'00'
leftstr dc c' bytes free',h'0d0a00'
PrintHex1 Int2Hex (@a,#hex1str+1,#2)
WriteString #hex1str
rts
hex1str str '00'
PrintHex4 pha
txa
jsr PrintHex1
pla
PrintHex2 Int2Hex (@a,#hex2str+1,#4)
WriteString #hex2str
rts
hex2str str '0000'
END