home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / CLIPPER / MISC / ISDIR87.ZIP / FISDIR.ASM next >
Encoding:
Assembly Source File  |  1988-02-10  |  2.8 KB  |  110 lines

  1. ;**************************************
  2. ;Filename: fisdir.asm,.obj
  3. ;Purpose: To check to see if a specified directory path is valid
  4. ;Usage: ISDIR(expc)
  5. ;       where expc is a variable or literal string containing
  6. ;       a directory path
  7. ;Returns: Logical true if the directory exists or false if it does not.
  8. ;Notes: The program receives a parameter from a Clipper program containing
  9. ;       the directory path to be validated. It saves that segment:offset
  10. ;       pair in ES and CX. It then gets the current directory path and saves
  11. ;       it to the dir_buff. An attempt is made to change to the directory
  12. ;       path being validated. If it is successful a true value is passed back
  13. ;       to the Clipper program and the program changes back to the original
  14. ;       directory. Otherwise, it returns false.
  15. ;**************************************
  16.  
  17.  
  18. PUBLIC          ISDIR
  19.  
  20. EXTRN           __PARC:FAR
  21. EXTRN           __RETL:FAR
  22.  
  23.  
  24. CODESEG          SEGMENT BYTE    'CODE' ;PROG IS THE REQUIRED CLASS CODE
  25.                  ASSUME  CS:CODESEG     ;     FOR AUTUMN 86 CLIPPER
  26.  
  27. ISDIR   PROC    FAR
  28.  
  29. ;INITIALIZATION PROCEDURE OF SAVING THE BASE POINTER AND REGISTERS
  30.         PUSH    BP
  31.         MOV     BP,SP
  32.  
  33.         PUSH    DS
  34.         PUSH    ES
  35.         PUSH    SI
  36.                                 PUSH    DI
  37.  
  38. ;GET PASSED PARAMETER
  39.         MOV     AX,1
  40.         PUSH    AX
  41.         CALL    __parc
  42.         ADD     SP,2
  43.  
  44. ;SAVE ADDRESS IN ES:CX REGISTER PAIR
  45.         MOV     ES,DX
  46.         MOV     CX,AX
  47.  
  48. ;GET CURRENT DRIVE AND SAVE INTO DRV
  49.         MOV     AH,19H
  50.         INT     21H
  51.         MOV     BL,AL
  52.         XOR     BH,BH
  53.         MOV     AL,CS:DRV_TABLE[BX]
  54.         MOV     CS:DRV,AL
  55.  
  56. ;GET CURRENT DIRECTORY PATH NAME AND SAVE TO DIR_BUFF
  57.         MOV     AH,47H
  58.         MOV     DL,0
  59.         MOV     SI,SEG DIR_BUFF
  60.         MOV     DS,SI
  61.         MOV     SI,OFFSET DIR_BUFF
  62.         INT     21H
  63.  
  64. ; ATTEMPT TO CHANGE TO NEW DIRECTORY
  65.         PUSH    ES
  66.         POP     DS
  67.         MOV     DX,CX
  68.         MOV     AH,3BH
  69.         INT     21H
  70.  
  71.         MOV     CX,0    ;SET RETURN VALUE TO DEFAULT OF FALSE
  72.         JC      NOPATH
  73.  
  74. ; IF NEW DIRECTORY EXISTS SET RETURN VALUE TO TRUE AND RETURN TO ORIGINAL
  75. ; DIRECTORY
  76.         MOV     CX,1
  77.         MOV     AH,3BH
  78.         PUSH    CS
  79.         POP     DS
  80.         MOV     DX,OFFSET DRV
  81.         INT     21H
  82.  
  83. ;TERMINATION PROCEDURE
  84. NOPATH:
  85.                                 POP     DI
  86.         POP     SI
  87.         POP     ES
  88.         POP     DS
  89.         POP     BP
  90.  
  91. ;RETURN LOGICAL TRUE OR FALSE
  92.         MOV     AX,CX
  93.         PUSH    AX
  94.         CALL    __retL
  95.         POP     AX
  96.         RET
  97. ISDIR           ENDP
  98.  
  99. DRV_TABLE       DB      "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  100. DRV             DB      ?
  101. COLON           DB      ':'
  102. BK_SLASH        DB      '\'
  103. DIR_BUFF        DB      65 DUP(0)
  104.  
  105.  
  106. CODESEG         ENDS
  107.                 END
  108.  
  109.  
  110.