home *** CD-ROM | disk | FTP | other *** search
/ Frostbyte's 1980s DOS Shareware Collection / floppyshareware.zip / floppyshareware / BUERG / NMOVE586.ZIP / PARSE.ASM < prev    next >
Assembly Source File  |  1986-01-01  |  3KB  |  194 lines

  1.     TITLE    PARSE
  2.  
  3.  
  4.  
  5. ;Routines
  6.  
  7.     public    PARSE,COPYNAME    
  8.  
  9. G    GROUP    CODE
  10. CODE    SEGMENT    PUBLIC
  11.     ASSUME    CS:G, DS:G, ES:G, SS:G
  12.  
  13. ;--------------------------------------------------------------------
  14.         
  15. PARSE        PROC
  16. ; This procedure will parse a filename parameter, which may contain wild card
  17. ; characters, and place the result at a location specified.
  18. ; call: bx -> replacement filename
  19. ;    si -> full path name to parse which may have wild card characters
  20. ;          in the last position
  21. ;    di -> destination of the parsed path name
  22. ; return: carry = 1 if an error occurs
  23.  
  24. ;           filenam1.ext00       D:\path2\path3\fil??am2.ext0
  25. ;          ^                    ^
  26. ;           bx             si
  27.  
  28. STRING        EQU    1
  29. PATTERN        EQU    0
  30. P        EQU     BX
  31. S        EQU    SI
  32. D        EQU    DI
  33. NULL        EQU    0
  34.  
  35.         
  36. OUTCHARFROM    MACRO    X, INST1, INST2
  37.         IFE X
  38.         MOV AH, [P]
  39.         ENDIF
  40.         
  41.         MOV [D], AH
  42.         INC D
  43.         
  44.         IFNB <INST1>
  45.         INST1
  46.         ENDIF
  47.         
  48.         IFNB <INST2>
  49.         INST2
  50.         ENDIF
  51.         
  52.         ENDM
  53.  
  54.     CLD
  55.     MOV CX, P
  56.                 
  57. START:
  58.     MOV AH, [S]
  59.     CMP AH, "*"
  60.     JNE S1
  61.         OUTCHARFROM PATTERN, <INC P>
  62.         JMP WILD
  63.    S1:
  64.     CMP AH, "\"
  65.     JNE S2
  66.         OUTCHARFROM STRING, <INC S>
  67.         MOV P, CX
  68.         JMP SPECIAL
  69.    S2:
  70.     CMP AH, NULL
  71.     JNE S3
  72.         MOV S, P
  73.         CALL COPYNAME
  74.         JMP DONE
  75.     S3:
  76.     CMP AH, "?"
  77.     JNE S4
  78.         OUTCHARFROM PATTERN, <INC P>, <INC S>
  79.         JMP NORMAL
  80.     S4:
  81.     OUTCHARFROM STRING, <INC P>, <INC S>
  82.     JMP NORMAL
  83.  
  84. NORMAL:
  85.     MOV AH, [S]
  86.     CMP AH, "\"
  87.     JNE N1
  88.         OUTCHARFROM STRING, <INC S>
  89.         MOV P, CX
  90.         JMP SPECIAL
  91.     N1:
  92.     CMP AH, "?"
  93.     JNE N2
  94.         OUTCHARFROM PATTERN, <INC P>, <INC S>
  95.         JMP NORMAL
  96.     N2:
  97.     CMP AH, NULL
  98.     JNE N3
  99.         OUTCHARFROM STRING
  100.         JMP DONE
  101.     N3:
  102.     CMP AH, ":"
  103.     JNE N4
  104.         INC CX
  105.         CMP P, CX
  106.         JNE ERROR
  107.         DEC CX
  108.         OUTCHARFROM STRING, <INC S>
  109.         MOV P, CX
  110.         JMP SPECIAL
  111.     N4:
  112.     CMP AH, "*"
  113.     JNE N5
  114.         OUTCHARFROM PATTERN, <INC P>
  115.         JMP WILD
  116.     N5:
  117.     CMP AH, "."
  118.     JNE N6
  119.         OUTCHARFROM STRING, <INC S>
  120.         MOV P, CX
  121.     N5LOOP:
  122.         MOV AH, [P]                ; move the P pointer two after the last char. or 
  123.         INC P                ; one after the last "."
  124.         CMP AH, "."
  125.         JE NORMAL
  126.         CMP AH, NULL
  127.         JE NORMAL
  128.         JMP N5LOOP
  129.     N6:
  130.     OUTCHARFROM STRING, <INC P>, <INC S>
  131.     JMP NORMAL
  132.     
  133. WILD:
  134.     MOV AH, [P]
  135.     CMP AH, "."
  136.     JNE W1
  137.         INC S
  138.         JMP NORMAL
  139.     W1:
  140.     CMP AH, NULL
  141.     JNE W2
  142.         OUTCHARFROM STRING
  143.         JMP DONE
  144.     W2:
  145.     OUTCHARFROM STRING, <INC P>
  146.     JMP WILD
  147.     
  148. SPECIAL:
  149.     MOV AH, [S]
  150.     CMP AH, NULL
  151.     JNE SP1
  152.         MOV S, CX
  153.         CALL COPYNAME
  154.         JMP DONE
  155.     SP1:
  156.     JMP NORMAL
  157.         
  158. ERROR:
  159.     STC
  160.     MOV AL, 4
  161.     RET
  162.     
  163. DONE:
  164.     CLC            ; Clear the carry flag
  165.     RET    
  166.     
  167.     
  168. PARSE    ENDP
  169.  
  170. ;--------------------------------------------------------------------
  171.  
  172. COPYNAME    PROC
  173. ; Copy characters to the given location until after a null has been
  174. ; copied.
  175. ; call: si -> to the name to be moved
  176. ;    di -> location to put the name
  177. ;    cld (up direction)
  178. ; returned: si -> one character after the name
  179. ;        di ->  "      "       "    "  location
  180.  
  181.     MOVSB
  182.     CMP    [SI-1], BYTE PTR NULL
  183.     JNZ    COPYNAME
  184.  
  185.     RET
  186. COPYNAME    ENDP
  187.  
  188. ;--------------------------------------------------------------------
  189.  
  190. CODE    ENDS
  191.     END
  192.  
  193.  
  194.