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   
Assembly Source File  |  1990-07-03  |  2KB  |  108 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.  
  18.         xdef    _WildCmp
  19.  
  20. _WildCmp:    movem.l 4(sp),D0/D1
  21.         movem.l D2/A2-A4,-(sp)
  22.         move.l    D0,A2
  23.         move.l    D1,A3
  24.         sub.l    #MAXB*2*8,sp
  25.         move.l    sp,A4
  26.  
  27.         moveq.l #0,D2
  28.  
  29. .wcloop     moveq.l #1,D0
  30.         move.b    (A2),D1
  31.         bne    .w1
  32.         tst.b    (A3)
  33.         beq    .wcdone
  34.  
  35. .w1        cmp.b    #'*',D1
  36.         bne    .w10
  37.         cmp.w    #MAXB,D2
  38.         bne    .w2
  39.         moveq.l #-1,D0        ; error
  40.         bra    .wcdone
  41. .w2        move.w    D2,D0        ; back[bi][0] = w  i.e. back+bi*8
  42.         asl.w    #3,D0        ; back[bi][1] = n
  43.         move.l    A2,0(A4,D0.w)
  44.         move.l    A3,4(A4,D0.w)
  45.         addq.w    #1,D2
  46.         addq.l    #1,A2
  47.         bra    .wcloop
  48.  
  49. .wgoback    subq.w    #1,D2
  50.         bmi    .w5
  51.         move.w    D2,D0
  52.         asl.w    #3,D0
  53.         move.l    4(A4,D0.w),A0
  54.         tst.b    (A0)
  55.         beq    .wgoback
  56. .w5        tst.w    D2
  57.         bmi    .wcret0
  58.         move.w    D2,D0
  59.         asl.w    #3,D0
  60.         move.l    0(A4,D0.w),A2
  61.         addq.l    #1,A2
  62.         add.l    #1,4(A4,D0.w)
  63.         move.l    4(A4,D0.w),A3
  64.         addq.l    #1,D2
  65.         bra    .wcloop
  66.  
  67. .w10        cmp.b    #'?',D1
  68.         bne    .w20
  69.         tst.b    (A3)
  70.         bne    .wcbreak
  71.         tst.w    D2
  72.         bne    .wgoback
  73.         bra    .wcret0
  74.  
  75. .w20        move.b    (A3),D0
  76.         cmp.b    #'A',D0
  77.         bcs    .w21
  78.         cmp.b    #'Z',D0
  79.         bhi    .w21
  80.         or.b    #$20,D0
  81. .w21        move.b    (A2),D1
  82.         cmp.b    #'A',D1
  83.         bcs    .w22
  84.         cmp.b    #'Z',D1
  85.         bhi    .w22
  86.         or.b    #$20,D1
  87. .w22        cmp.b    D0,D1
  88.         beq    .wcbreak
  89.         tst.w    D2
  90.         bne    .wgoback
  91.         bra    .wcret0
  92.  
  93. .wcbreak    tst.b    (A2)+
  94.         bne    .wcb1
  95.         subq.l    #1,A2
  96. .wcb1        tst.b    (A3)+
  97.         bne    .wcb2
  98.         subq.l    #1,A3
  99. .wcb2        bra    .wcloop
  100.  
  101. .wcret0     moveq.l #0,D0
  102. .wcdone     add.l    #MAXB*2*8,sp
  103.         movem.l (sp)+,D2/A2-A4
  104.         rts
  105.  
  106.  
  107.         END
  108.