home *** CD-ROM | disk | FTP | other *** search
-
- 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
-