home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1993 #2 / Image.iso / clipper / snip0693.zip / FISDIR2.ASM < prev    next >
Assembly Source File  |  1993-03-17  |  3KB  |  109 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. ;Copyright (c) 1988 Nantucket Corporation.
  16. ;**************************************
  17.  
  18.  
  19. PUBLIC          ISDIR
  20.  
  21. EXTRN           __PARC:FAR
  22. EXTRN           __RETL:FAR
  23.  
  24.  
  25. CODESEG          SEGMENT BYTE    'CODE' ;PROG IS THE REQUIRED CLASS CODE
  26.                  ASSUME  CS:CODESEG     ;     FOR AUTUMN 86 CLIPPER
  27.  
  28. ISDIR   PROC    FAR
  29.  
  30. ; INITIALIZATION PROCEDURE OF SAVING THE BASE POINTER AND REGISTERS
  31.         PUSH    BP
  32.         MOV     BP,SP
  33.  
  34.         PUSH    DS
  35.         PUSH    ES
  36.         PUSH    SI
  37.         PUSH    DI
  38.  
  39. ; GET PASSED PARAMETER
  40.         MOV     AX,1
  41.         PUSH    AX
  42.         CALL    __parc
  43.         ADD     SP,2
  44.  
  45. ; SAVE ADDRESS IN ES:CX REGISTER PAIR
  46.         MOV     ES,DX
  47.         MOV     CX,AX
  48.  
  49. ; GET CURRENT DRIVE AND SAVE INTO DRV
  50.         MOV     AH,19H
  51.         INT     21H
  52.         MOV     BL,AL
  53.         XOR     BH,BH
  54.         MOV     AL,CS:DRV_TABLE[BX]
  55.         MOV     CS:DRV,AL
  56.  
  57. ; GET CURRENT DIRECTORY PATH NAME AND SAVE TO DIR_BUFF
  58.         MOV     AH,47H
  59.         MOV     DL,0
  60.         MOV     SI,SEG DIR_BUFF
  61.         MOV     DS,SI
  62.         MOV     SI,OFFSET DIR_BUFF
  63.         INT     21H
  64.  
  65. ; ATTEMPT TO CHANGE TO NEW DIRECTORY
  66.         PUSH    ES
  67.         POP     DS
  68.         MOV     DX,CX
  69.         MOV     AH,3BH
  70.         INT     21H
  71.  
  72.         MOV     CX,0    ;SET RETURN VALUE TO DEFAULT OF FALSE
  73.         JC      NOPATH
  74.  
  75. ; IF NEW DIRECTORY EXISTS SET RETURN VALUE TO TRUE AND RETURN TO ; ORIGINAL
  76. ; DIRECTORY
  77.         MOV     CX,1
  78.         MOV     AH,3BH
  79.         PUSH    CS
  80.         POP     DS
  81.         MOV     DX,OFFSET DRV
  82.         INT     21H
  83.  
  84. ; TERMINATION PROCEDURE
  85. NOPATH:
  86.         POP     DI
  87.         POP     SI
  88.         POP     ES
  89.         POP     DS
  90.         POP     BP
  91.  
  92. ; RETURN LOGICAL TRUE OR FALSE
  93.         MOV     AX,CX
  94.         PUSH    AX
  95.         CALL    __retL
  96.         POP     AX
  97.         RET
  98. ISDIR           ENDP
  99.  
  100. DRV_TABLE       DB      "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  101. DRV             DB      ?
  102. COLON           DB      ':'
  103. BK_SLASH        DB      '\'
  104. DIR_BUFF        DB      65 DUP(0)
  105.  
  106.  
  107. CODESEG         ENDS
  108.                 END
  109.