home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / xbase / library / clipper / rettig / source / _tr_func.asm < prev    next >
Assembly Source File  |  1990-10-21  |  7KB  |  257 lines

  1. ; _TR_FUNC.ASM
  2. ;
  3. ; by Leonard Zerman, Ralph Davis
  4. ; modified by Rick Spence
  5. ;
  6. ; Placed in the public domain by Tom Rettig Associates, 10/22/1990.
  7. ;
  8.  
  9.          PUBLIC  _GET_DRIVE, _GET_DIR, _SET_DRIVE, _SET_DIR
  10.          PUBLIC  _FIND_FIRST, _FIND_NEXT, __TR_MKDIR, _GET_DIR2
  11.  
  12. DGROUP   GROUP   _DATA
  13. ;********************************************************
  14. _DATA  SEGMENT WORD PUBLIC 'DATA'
  15.  
  16. CURR_DIR  DB     '\',63 DUP (?),0; Storage area for current directory
  17.  
  18. DTA       DB     30 DUP (?)         ; Disk Transfer Area for DOS INT 21H
  19. FILENAME  DB     13 DUP (?)         ; Name of file returned by 
  20.                                     ;   function call 4EH
  21. _DATA  ENDS
  22. ;********************************************************
  23.  
  24. ;********************************************************
  25. _TR_FUNC_TEXT SEGMENT  BYTE PUBLIC 'CODE'
  26.          ASSUME   CS:_TR_FUNC_TEXT, DS:_DATA
  27. ;------------------------------------------
  28. ; get_drive()
  29. ;
  30. ; Returns current drive as integer
  31. ;
  32. ; c = get_drive();
  33. ;
  34. ; int get_drive();
  35. ; int c;
  36. ;------------------
  37. _GET_DRIVE PROC   FAR
  38.         MOV     AH,19H
  39.         INT     21H
  40.         XOR     AH,AH
  41.         RET
  42. _GET_DRIVE ENDP
  43.  
  44. ;------------------------------------------
  45. ; __TR_MKDIR()
  46. ;
  47. ; Creates a directory
  48. ; Returns 0 if sucessful else -1;
  49. ; status = _tr_mkdir();
  50. ; char *ptr;
  51. ;------------------
  52. __TR_MKDIR    PROC FAR
  53.        PUSH   BP
  54.        MOV    BP,SP
  55.        PUSH   DS 
  56.        MOV    AH,39h
  57.        LDS    DX,[BP+6]
  58.        INT    21H
  59.        POP    DS 
  60.        JC     ERROR 
  61.        XOR    AX,AX
  62.        JMP    EXIT
  63. ERROR:
  64.        MOV     AX,-1
  65. EXIT:
  66.        POP    BP
  67.        RET    
  68. __TR_MKDIR    ENDP
  69.  
  70. ;------------------------------------------
  71. ; get_dir()
  72. ;
  73. ; Returns current directory as char *
  74. ;
  75. ; dir = get_dir();
  76. ;
  77. ; char *get_dir();
  78. ; char *dir;
  79. ;------------------
  80. _GET_DIR   PROC   FAR
  81.         PUSH    SI
  82.         PUSH    DS
  83.         MOV     AX,SEG CURR_DIR
  84.         MOV     DS,AX
  85.         MOV     AH,47H        ; Get current directory
  86.         MOV     SI,OFFSET DS:CURR_DIR+1  ; Address of return buffer
  87.         MOV     DL,0          ; Current default drive
  88.         INT     21H
  89.         MOV     DX,DS         ; Place segment address of directory
  90.                               ;   in DX
  91.         MOV     AX,SI         ; AX now points to directory string
  92.                               ;   without '\'
  93.         DEC     AX            ; AX now points to '\', which is
  94.         POP     DS 
  95.         POP     SI
  96.         RET
  97. _GET_DIR ENDP 
  98.  
  99. ;------------------------------------------
  100. ; get_dir2()
  101. ;
  102. ; Returns current directory as char *
  103. ;
  104. ; dir = get_dir2(drivenbr);
  105. ;
  106. ; char *get_dir2();
  107. ; char *dir;
  108. ; int drivenbr;
  109. ;------------------
  110. _GET_DIR2  PROC   FAR
  111.         PUSH    BP
  112.         MOV     BP,SP
  113.         PUSH    SI
  114.         PUSH    DS
  115.         MOV     AX,SEG CURR_DIR
  116.         MOV     DS,AX
  117.         MOV     AH,47H        ; Get current directory
  118.         MOV     SI,OFFSET DS:CURR_DIR+1  ; Address of return buffer
  119.         MOV     DX,[BP+6]     ; Pick up number of desired drive
  120.         INC     DX
  121.         INT     21H
  122.         JC      GD2ERROR
  123.         MOV     DX,DS         ; Place segment address of directory
  124.                               ;   in DX
  125.         MOV     AX,SI         ; AX now points to directory string
  126.                               ;   without '\'
  127.         DEC     AX            ; AX now points to '\', which is
  128.         JMP     GD2EXIT
  129. GD2ERROR:
  130.         XOR     DX,DX         ; RETURN NULL PTR
  131.         XOR     AX,AX
  132. GD2EXIT:
  133.         POP     DS 
  134.         POP     SI
  135.         POP     BP
  136.         RET
  137. _GET_DIR2 ENDP 
  138.  
  139. ;-------------------------------------------
  140. ; set_drive();
  141. ;
  142. ; logs onto requested drive
  143. ;
  144. ; status = set_drive( drive );
  145. ;
  146. ; int set_drive();
  147. ; int status;
  148. ; int drive;
  149. ;------------------
  150. _SET_DRIVE PROC   FAR
  151.         PUSH    BP
  152.         MOV     BP,SP
  153.         MOV     DX,[BP+6]     ; Pick up number of desired drive
  154.         MOV     AH,0EH        ; Select Disk function call
  155.         INT     21H
  156.         XOR     AX,AX         ; Return 0
  157.         POP     BP
  158.         RET
  159. _SET_DRIVE ENDP
  160.  
  161. ;-------------------------------------------
  162. ; set_dir();
  163. ;
  164. ; changes to requested directory
  165. ;
  166. ; status = set_dir( directory );
  167. ;
  168. ; int set_dir();
  169. ; int status;
  170. ; char *directory;
  171. ;------------------
  172. _SET_DIR PROC    FAR
  173.         PUSH    BP
  174.         MOV     BP,SP
  175.         PUSH    DS
  176.         LDS     DX,[BP+6]    ; Pick up pointer to desired directory
  177.         MOV     AH,3BH       ; Change directory 
  178.         INT     21H
  179.         JNC     SD2
  180.         MOV     AX,-1         ; Return -1 for error
  181.         JMP     SHORT SD3
  182. SD2:
  183.         XOR     AX,AX         ; Return 0 for success
  184. SD3:
  185.         POP     DS
  186.         POP     BP
  187.         RET
  188. _SET_DIR ENDP
  189.  
  190. ;--------------------------------------------
  191. ; find_first();
  192. ;
  193. ; filename = find_first();
  194. ;
  195. ; char *find_first();
  196. ; char *filename;
  197. ;------------------
  198. _FIND_FIRST PROC   FAR
  199.         PUSH    BP
  200.         MOV     BP,SP
  201.         PUSH    DS           ; Save DS
  202.         CALL    _SET_DTA     ; DTA must be set before calling INT 21H
  203.         MOV     AH,4EH       ; Find first matching file
  204.         XOR     CX,CX        ; 0 attribute means all attributes OK
  205.         LDS     DX,[BP+6]    ; Pick up pointer to filename
  206.         INT     21H
  207.         POP     DS           ; Restore DS
  208.         JNC     FF2          ; Carry means error
  209.  
  210.         XOR     AX,AX        ; Return null pointer if no file found
  211.         XOR     DX,DX
  212.         JMP     SHORT FF3
  213.  
  214. FF2:    MOV     DX,DS        ; Return pointer to filename
  215.         MOV     AX,OFFSET _DATA:FILENAME
  216. FF3:
  217.         POP     BP
  218.         RET
  219. _FIND_FIRST ENDP
  220. ;------------------------------------------------
  221.  
  222. _FIND_NEXT PROC   FAR
  223.         PUSH    BP
  224.         MOV     BP,SP
  225.         MOV     DX,OFFSET _DATA:DTA  ; DTA already set by FIND_FIRST
  226.         MOV     AH,4FH                ; Find next matching file
  227.         INT     21H
  228.         JNC     FN2                   ; Carry means error
  229.  
  230.         XOR     AX,AX        ; Return null pointer for error
  231.         XOR     DX,DX
  232.         JMP     SHORT FN3
  233.  
  234. FN2:    MOV     DX,DS        ; Return pointer to filename
  235.         MOV     AX,OFFSET _DATA:FILENAME
  236.  
  237. FN3:    POP     BP        
  238.         RET
  239. _FIND_NEXT ENDP
  240.  
  241. ;--------------------------------------------
  242. _SET_DTA PROC   NEAR
  243.         PUSH    AX
  244.         PUSH    DX
  245.         MOV     DX,OFFSET _DATA:DTA  ; Point to our disk transfer area
  246.         MOV     AH,1AH                ; Set DTA function
  247.         INT     21H
  248.         POP     DX
  249.         POP     AX
  250.         RET
  251. _SET_DTA ENDP
  252. ;---------------------------------------------
  253. _TR_FUNC_TEXT  ENDS
  254. ;*******************************************************
  255.        END
  256.  
  257.