home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / wp_dtp / xdme1821.lha / XDME / wildcmp.a < prev    next >
Text File  |  1992-11-30  |  2KB  |  109 lines

  1.  
  2.         section text,code
  3.  
  4.         ;WILDCMP(wild:D0, name:D1)
  5.         ;
  6.         ;   Handles * and ?
  7.         ;
  8.         ;result:  D0, 0 = no match, 1 = match
  9.         ;
  10.         ;auto:
  11.         ;   D2    bi
  12.         ;   A2    wildcard string
  13.         ;   A3    name     string
  14.         ;   A4    back-array (of size MAXB * 2 * 4)
  15.  
  16. MAXB        EQU    8
  17. MAXB28        EQU    128    /*  MAXB*2*8    */
  18.  
  19.         xdef    _WildCmp
  20.         xdef    @WildCmp
  21.  
  22. _WildCmp:    movem.l 4(sp),D0/D1
  23. @WildCmp:    movem.l D2/A2-A4,-(sp)
  24.         move.l    D0,A2
  25.         move.l    D1,A3
  26.         sub.l    #MAXB28,sp
  27.         move.l    sp,A4
  28.  
  29.         moveq.l #0,D2
  30.  
  31. xwcloop     moveq.l #1,D0
  32.         move.b    (A2),D1
  33.         bne    xw1
  34.         tst.b    (A3)
  35.         beq    xwcdone
  36.  
  37. xw1        cmp.b    #$2A,D1     ; '*'
  38.         bne    xw10
  39.         cmp.w    #MAXB,D2
  40.         bne    xw2
  41.         moveq.l #-1,D0        ; error
  42.         bra    xwcdone
  43. xw2        move.w    D2,D0        ; back[bi][0] = w  i.e. back+bi*8
  44.         asl.w    #3,D0        ; back[bi][1] = n
  45.         move.l    A2,0(A4,D0.w)
  46.         move.l    A3,4(A4,D0.w)
  47.         addq.w    #1,D2
  48.         addq.l    #1,A2
  49.         bra    xwcloop
  50.  
  51. xwgoback    subq.w    #1,D2
  52.         bmi    xw5
  53.         move.w    D2,D0
  54.         asl.w    #3,D0
  55.         move.l    4(A4,D0.w),A0
  56.         tst.b    (A0)
  57.         beq    xwgoback
  58. xw5        tst.w    D2
  59.         bmi    xwcret0
  60.         move.w    D2,D0
  61.         asl.w    #3,D0
  62.         move.l    0(A4,D0.w),A2
  63.         addq.l    #1,A2
  64.         add.l    #1,4(A4,D0.w)
  65.         move.l    4(A4,D0.w),A3
  66.         addq.l    #1,D2
  67.         bra    xwcloop
  68.  
  69. xw10        cmp.b    #$3F,D1     ; '?'
  70.         bne    xw20
  71.         tst.b    (A3)
  72.         bne    xwcbreak
  73.         tst.w    D2
  74.         bne    xwgoback
  75.         bra    xwcret0
  76.  
  77. xw20        move.b    (A3),D0
  78.         cmp.b    #$51,D0
  79.         bcs    xw21
  80.         cmp.b    #$5A,D0
  81.         bhi    xw21
  82.         or.b    #$20,D0
  83. xw21        move.b    (A2),D1
  84.         cmp.b    #$41,D1
  85.         bcs    xw22
  86.         cmp.b    #$5A,D1
  87.         bhi    xw22
  88.         or.b    #$20,D1
  89. xw22        cmp.b    D0,D1
  90.         beq    xwcbreak
  91.         tst.w    D2
  92.         bne    xwgoback
  93.         bra    xwcret0
  94.  
  95. xwcbreak    tst.b    (A2)+
  96.         bne    xwcb1
  97.         subq.l    #1,A2
  98. xwcb1        tst.b    (A3)+
  99.         bne    xwcb2
  100.         subq.l    #1,A3
  101. xwcb2        bra    xwcloop
  102.  
  103. xwcret0     moveq.l #0,D0
  104. xwcdone     add.l    #MAXB28,sp
  105.         movem.l (sp)+,D2/A2-A4
  106.         rts
  107.  
  108.         END
  109.