home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
389.lha
/
dme_v1.40
/
src
/
wildcmp.asm
< prev
Wrap
Assembly Source File
|
1990-07-03
|
2KB
|
108 lines
section text,code
;WILDCMP(wild:D0, name:D1)
;
; Handles * and ?
;
;result: D0, 0 = no match, 1 = match
;
;auto:
; D2 bi
; A2 wildcard string
; A3 name string
; A4 back-array (of size MAXB * 2 * 4)
MAXB EQU 8
xdef _WildCmp
_WildCmp: movem.l 4(sp),D0/D1
movem.l D2/A2-A4,-(sp)
move.l D0,A2
move.l D1,A3
sub.l #MAXB*2*8,sp
move.l sp,A4
moveq.l #0,D2
.wcloop moveq.l #1,D0
move.b (A2),D1
bne .w1
tst.b (A3)
beq .wcdone
.w1 cmp.b #'*',D1
bne .w10
cmp.w #MAXB,D2
bne .w2
moveq.l #-1,D0 ; error
bra .wcdone
.w2 move.w D2,D0 ; back[bi][0] = w i.e. back+bi*8
asl.w #3,D0 ; back[bi][1] = n
move.l A2,0(A4,D0.w)
move.l A3,4(A4,D0.w)
addq.w #1,D2
addq.l #1,A2
bra .wcloop
.wgoback subq.w #1,D2
bmi .w5
move.w D2,D0
asl.w #3,D0
move.l 4(A4,D0.w),A0
tst.b (A0)
beq .wgoback
.w5 tst.w D2
bmi .wcret0
move.w D2,D0
asl.w #3,D0
move.l 0(A4,D0.w),A2
addq.l #1,A2
add.l #1,4(A4,D0.w)
move.l 4(A4,D0.w),A3
addq.l #1,D2
bra .wcloop
.w10 cmp.b #'?',D1
bne .w20
tst.b (A3)
bne .wcbreak
tst.w D2
bne .wgoback
bra .wcret0
.w20 move.b (A3),D0
cmp.b #'A',D0
bcs .w21
cmp.b #'Z',D0
bhi .w21
or.b #$20,D0
.w21 move.b (A2),D1
cmp.b #'A',D1
bcs .w22
cmp.b #'Z',D1
bhi .w22
or.b #$20,D1
.w22 cmp.b D0,D1
beq .wcbreak
tst.w D2
bne .wgoback
bra .wcret0
.wcbreak tst.b (A2)+
bne .wcb1
subq.l #1,A2
.wcb1 tst.b (A3)+
bne .wcb2
subq.l #1,A3
.wcb2 bra .wcloop
.wcret0 moveq.l #0,D0
.wcdone add.l #MAXB*2*8,sp
movem.l (sp)+,D2/A2-A4
rts
END