home *** CD-ROM | disk | FTP | other *** search
- .ttl ERASE WITH SINGLE FILE QUERY
-
-
- * os interface
-
- dconio equ 6
- srch1st equ 17
- srchnxt equ 18
- erafile equ 19
- setdma equ 26
-
-
- * base page offsets
-
- deffcb1 equ $5c * 1st parsed fcb
-
-
- * registers
-
- dmabfptr equ a4 * ^dma buffer
- wkfcbptr equ a5 * ^work fcb
- nmsbfptr equ a6 * ^names buffer
-
-
- * ascii characters
-
- ctrl_c equ $03
- lf equ $0a
- cr equ $0d
-
-
- * misc. constants
-
- extlen equ 3
- fnamelen equ 8
- fspeclen equ 12
- sectsize equ 128
- eobuf equ $ff
- cnstatrq equ $00fe
- inprequ equ $00ff
-
-
- .text
-
- start:
- move.l 4(sp),a0 * ^base page
- lea deffcb1(a0),a0 * ^default fcb 1
- lea workfcb,wkfcbptr * ^work fcb
- lea dmabuf,dmabfptr * ^dma buffer
- lea namesbuf,nmsbfptr * ^found names buffer
-
- move.l wkfcbptr,a1 * ^work fcb
- moveq #fspeclen-1,d0 * length count
- xferlp1:
- move.b (a0)+,(a1)+ * xfer search name
- dbf d0,xferlp1
-
- move.l dmabfptr,d1 * ^dma buffer
- moveq #setdma,d0
- bsr bdos * set dma address
-
- move.l wkfcbptr,d1 * ^work fcb
- moveq #srch1st,d0
- bsr bdos * search for first
- tst.b d0 * file found?
- bmi exit * no
-
-
- cpytonms:
- ext.l d0 * clear hi word
- mulu #32,d0 * offset into dma buffer
- add.l dmabfptr,d0 * ^found filename
- move.l d0,a0
- addq.l #1,a0 * skip user #
- move.b (wkfcbptr),(nmsbfptr)+ * insert drive #
- moveq #fspeclen-2,d2 * length count
- cpynmslp:
- move.b (a0)+,(nmsbfptr)+ * copy name to names buffer
- dbf d2,cpynmslp
-
- move.l wkfcbptr,d1
- moveq #srchnxt,d0
- bsr bdos * search for next
- tst.b d0 * file found?
- bpl cpytonms * yes
-
- move.b #eobuf,(nmsbfptr) * write end of buffer mark
- lea namesbuf,nmsbfptr * reset pointer
- move.l nmsbfptr,a0 * duplicate
- showname:
- move.b (a0)+,d1
- cmp.b #eobuf,d1 * end of names buffer
- beq exit * yes
- add.b #'A'-1,d1 * get drive name
- bsr dodconio * print it
- move.b #':',d1
- bsr dodconio * print ':'
- moveq #fnamelen-1,d2 * length count
- shownme1:
- move.b (a0)+,d1
- bsr dodconio * print file name
- dbf d2,shownme1 * (8 chars)
- move.b #'.',d1
- bsr dodconio * print '.'
- moveq #extlen-1,d2 * length count
- shownme2:
- move.b (a0)+,d1
- bsr dodconio * print file type
- dbf d2,shownme2 * (3 chars)
- lea yesnotxt,a1 * ^msg
- bsr pstringz * print it
- querase:
- move.w #cnstatrq,d1
- bsr dodconio * get con: status
- tst.b d0 * con: ready?
- beq querase * not yet
- move.w #inprequ,d1
- bsr dodconio * get con: char
- and.b #$5f,d0 * fold to upper case
- cmp.b #ctrl_c,d0 * abort?
- beq exit * yes
- cmp.b #'Y',d0 * erase?
- bne querase2 * no
- move.l wkfcbptr,a1 * ^fcb
- move.l nmsbfptr,a0 * filename
- moveq #fspeclen-1,d2 * length count
- querase1:
- move.b (a0)+,(a1)+ * copy filespec to wkfcb
- dbf d2,querase1
-
- move.l wkfcbptr,d1
- moveq #erafile,d0
- bsr bdos * erase file
-
- lea eratxt,a1 * ^msg
- bsr pstringz * confirm erase
- bra updnmptr
-
- querase2:
- cmp.b #'N',d0
- bne querase * invalid reply
- lea crlf,a1
- bsr pstringz * print cr/lf
-
- updnmptr:
- move.l a0,nmsbfptr * ^next name
- bra showname * process next file
-
-
- exit:
- rts * return to ccp
-
-
- bdos:
- movem.l d1-d7/a0-a6,-(sp)
- trap #2
- movem.l (sp)+,d1-d7/a0-a6
- rts
-
-
- dodconio:
- moveq #dconio,d0
- bsr bdos * perform direct console i/o
- rts
-
-
- pstringz:
- movem.l d1/a1,-(sp) * print 0 terminated string
- moveq #0,d1 * pointed to by a1
- pstrz1:
- move.b (a1)+,d1 * fetch char
- beq expstrz * end of string
- bsr dodconio * print char
- bra pstrz1 * loop for next char
- expstrz:
- movem.l (sp)+,d1/a1
- rts
-
-
-
-
- .data
-
- workfcb:
- dc.b 0 * drive code
- dc.b 'filename' * file name
- dc.b 'ext' * file type
- dc.b 0 * extent #
- dc.b 0 * s1, reserved
- dc.b 0 * s2, reserved
- dc.b 0 * rc, reserved
- ds.b 16 * d0-dn, reserved
- dc.b 0 * current sequ. record
- dc.b 0,0,0 * r0,r1,r2 (r. access)
-
-
- eratxt:
- dc.b 'erased.'
- crlf:
- dc.b cr,lf,0
-
-
- yesnotxt:
- dc.b ' (Y/N) '
- dc.b 0
-
- .even
-
-
- .bss
-
- dmabuf:
- ds.b sectsize
-
- namesbuf:
- ds.b fspeclen*4096
-
-
- .end
-