home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l040 / 13.ddi / RTLSYS.ZIP / DIRH.ASM < prev    next >
Encoding:
Assembly Source File  |  1992-10-28  |  2.5 KB  |  197 lines

  1.  
  2. ; *******************************************************
  3. ; *                            *
  4. ; *     Turbo Pascal Run-time Library                   *
  5. ; *    Directory Handling Routines            *
  6. ; *                            *
  7. ; *     Copyright (c) 1988,92 Borland International     *
  8. ; *                            *
  9. ; *******************************************************
  10.  
  11.     TITLE    DIRH
  12.  
  13.     INCLUDE    SE.ASM
  14.  
  15. DATA    SEGMENT    WORD PUBLIC
  16.  
  17. ; Externals
  18.  
  19.     EXTRN    InOutRes:WORD
  20.  
  21. DATA    ENDS
  22.  
  23.     IF WindowsVersion
  24.  
  25. ; Windows entry points
  26.  
  27.     EXTRN    AnsiToOem:FAR,OemToAnsi:FAR
  28.  
  29.     ENDIF
  30.  
  31. CODE    SEGMENT    BYTE PUBLIC
  32.  
  33.     ASSUME    CS:CODE,DS:DATA
  34.  
  35. ; Publics
  36.  
  37.     PUBLIC    DirGet,DirSet,DirCreate,DirRemove
  38.  
  39. ; GetDir standard procedure
  40.  
  41. DirGet:
  42.  
  43.     ARG    Drive,BYTE,2
  44.     ARG    StrP,DWORD,1
  45.     ARG    StrLen,WORD,1
  46.     LOC    Path,BYTE,128
  47.  
  48.     ENTRY    FAR
  49.     PUSH    DS
  50.     LEA    SI,Path
  51.     PUSH    SS
  52.     POP    DS
  53.     MOV    AL,Drive
  54.     OR    AL,AL
  55.     JNZ    @@1
  56.     MOV    AH,dosGetDrive
  57.     INT    DOS
  58.     INC    AL
  59. @@1:    MOV    DL,AL
  60.     ADD    AL,'A'-1
  61.     MOV    [SI],AL
  62.     INC    SI
  63.     MOV    WORD PTR [SI],'\:'
  64.     INC    SI
  65.     INC    SI
  66.     MOV    AH,dosGetDir
  67.     INT    DOS
  68.     JNC    @@2
  69.     MOV    BYTE PTR [SI],0
  70. @@2:    LEA    SI,Path
  71.     IF WindowsVersion
  72.     PUSH    DS
  73.     PUSH    SI
  74.     PUSH    DS
  75.     PUSH    SI
  76.     CALL    OemToAnsi
  77.     ENDIF
  78.     LES    DI,StrP
  79.     MOV    CX,StrLen
  80.     XOR    BX,BX
  81.     CLD
  82. @@3:    LODSB
  83.     OR    AL,AL
  84.     JE    @@4
  85.     INC    BX
  86.     MOV    ES:[DI+BX],AL
  87.     LOOP    @@3
  88. @@4:    MOV    ES:[DI],BL
  89.     POP    DS
  90.     EXIT
  91.  
  92. ; ChDir standard procedure
  93.  
  94. DirSet:
  95.  
  96.     ARG    StrP,DWORD,1
  97.     LOC    Path,BYTE,128
  98.  
  99.     ENTRY    FAR
  100.     CALL    GetPath
  101.     MOV    AX,Path.w0
  102.     OR    AL,AL
  103.     JE    @@3
  104.     CMP    AH,':'
  105.     JNE    @@2
  106.     AND    AL,NOT ' '
  107.     SUB    AL,'A'
  108.     MOV    DL,AL
  109.     MOV    AH,dosSetDrive
  110.     INT    DOS
  111.     MOV    AH,dosGetDrive
  112.     INT    DOS
  113.     CMP    AL,DL
  114.     JE    @@1
  115.     MOV    InOutRes,15
  116.     JMP    SHORT @@3
  117. @@1:    CMP    Path[2],0
  118.     JE    @@3
  119. @@2:    MOV    AH,dosSetDir
  120.     CALL    DosPath
  121. @@3:    EXIT
  122.  
  123. ; MkDir standard procedure
  124.  
  125. DirCreate:
  126.  
  127.     ARG    StrP,DWORD,1
  128.     LOC    Path,BYTE,128
  129.  
  130.     ENTRY    FAR
  131.     CALL    GetPath
  132.     MOV    AH,dosCreateDir
  133.     CALL    DosPath
  134.     EXIT
  135.  
  136. ; RmDir standard procedure
  137.  
  138. DirRemove:
  139.  
  140.     ARG    StrP,DWORD,1
  141.     LOC    Path,BYTE,128
  142.  
  143.     ENTRY    FAR
  144.     CALL    GetPath
  145.     MOV    AH,dosRemoveDir
  146.     CALL    DosPath
  147.     EXIT
  148.  
  149. ; Copy string to zero terminated path
  150.  
  151. GetPath:
  152.  
  153.     PUSH    DS
  154.     LDS    SI,[BP+6]
  155.     LEA    DI,[BP-128]
  156.     PUSH    SS
  157.     POP    ES
  158.     IF WindowsVersion
  159.     PUSH    ES
  160.     PUSH    DI
  161.     PUSH    ES
  162.     PUSH    DI
  163.     ENDIF
  164.     CLD
  165.     LODSB
  166.     CMP    AL,127
  167.     JB    @@1
  168.     MOV    AL,127
  169. @@1:    CBW
  170.     MOV    CX,AX
  171.     REP    MOVSB
  172.     XOR    AL,AL
  173.     STOSB
  174.     IF WindowsVersion
  175.     CALL    AnsiToOem
  176.     ENDIF
  177.     POP    DS
  178.     RET
  179.  
  180. ; Do DOS function on path
  181.  
  182. DosPath:
  183.  
  184.     PUSH    DS
  185.     LEA    DX,[BP-128]
  186.     PUSH    SS
  187.     POP    DS
  188.     INT    DOS
  189.     POP    DS
  190.     JNC    @@1
  191.     MOV    InOutRes,AX
  192. @@1:    RET
  193.  
  194. CODE    ENDS
  195.  
  196.     END
  197.