gno/bin/purge/purge.asm
gdr-ftp 784e3de7cd Initial checkin of aroff, binprint, center, less, ls, make, makemake,
passwd, ps, purge, shutdown, stty, upper, and vi.  These sources are
for the versions of the utils shipped with GNO v2.0.4.
1998-03-09 08:30:21 +00:00

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