home *** CD-ROM | disk | FTP | other *** search
-
- ; *******************************************************
- ; * *
- ; * Turbo Pascal Run-time Library *
- ; * Directory Handling Routines *
- ; * *
- ; * Copyright (c) 1988,92 Borland International *
- ; * *
- ; *******************************************************
-
- TITLE DIRH
-
- INCLUDE SE.ASM
-
- DATA SEGMENT WORD PUBLIC
-
- ; Externals
-
- EXTRN InOutRes:WORD
-
- DATA ENDS
-
- IF WindowsVersion
-
- ; Windows entry points
-
- EXTRN AnsiToOem:FAR,OemToAnsi:FAR
-
- ENDIF
-
- CODE SEGMENT BYTE PUBLIC
-
- ASSUME CS:CODE,DS:DATA
-
- ; Publics
-
- PUBLIC DirGet,DirSet,DirCreate,DirRemove
-
- ; GetDir standard procedure
-
- DirGet:
-
- ARG Drive,BYTE,2
- ARG StrP,DWORD,1
- ARG StrLen,WORD,1
- LOC Path,BYTE,128
-
- ENTRY FAR
- PUSH DS
- LEA SI,Path
- PUSH SS
- POP DS
- MOV AL,Drive
- OR AL,AL
- JNZ @@1
- MOV AH,dosGetDrive
- INT DOS
- INC AL
- @@1: MOV DL,AL
- ADD AL,'A'-1
- MOV [SI],AL
- INC SI
- MOV WORD PTR [SI],'\:'
- INC SI
- INC SI
- MOV AH,dosGetDir
- INT DOS
- JNC @@2
- MOV BYTE PTR [SI],0
- @@2: LEA SI,Path
- IF WindowsVersion
- PUSH DS
- PUSH SI
- PUSH DS
- PUSH SI
- CALL OemToAnsi
- ENDIF
- LES DI,StrP
- MOV CX,StrLen
- XOR BX,BX
- CLD
- @@3: LODSB
- OR AL,AL
- JE @@4
- INC BX
- MOV ES:[DI+BX],AL
- LOOP @@3
- @@4: MOV ES:[DI],BL
- POP DS
- EXIT
-
- ; ChDir standard procedure
-
- DirSet:
-
- ARG StrP,DWORD,1
- LOC Path,BYTE,128
-
- ENTRY FAR
- CALL GetPath
- MOV AX,Path.w0
- OR AL,AL
- JE @@3
- CMP AH,':'
- JNE @@2
- AND AL,NOT ' '
- SUB AL,'A'
- MOV DL,AL
- MOV AH,dosSetDrive
- INT DOS
- MOV AH,dosGetDrive
- INT DOS
- CMP AL,DL
- JE @@1
- MOV InOutRes,15
- JMP SHORT @@3
- @@1: CMP Path[2],0
- JE @@3
- @@2: MOV AH,dosSetDir
- CALL DosPath
- @@3: EXIT
-
- ; MkDir standard procedure
-
- DirCreate:
-
- ARG StrP,DWORD,1
- LOC Path,BYTE,128
-
- ENTRY FAR
- CALL GetPath
- MOV AH,dosCreateDir
- CALL DosPath
- EXIT
-
- ; RmDir standard procedure
-
- DirRemove:
-
- ARG StrP,DWORD,1
- LOC Path,BYTE,128
-
- ENTRY FAR
- CALL GetPath
- MOV AH,dosRemoveDir
- CALL DosPath
- EXIT
-
- ; Copy string to zero terminated path
-
- GetPath:
-
- PUSH DS
- LDS SI,[BP+6]
- LEA DI,[BP-128]
- PUSH SS
- POP ES
- IF WindowsVersion
- PUSH ES
- PUSH DI
- PUSH ES
- PUSH DI
- ENDIF
- CLD
- LODSB
- CMP AL,127
- JB @@1
- MOV AL,127
- @@1: CBW
- MOV CX,AX
- REP MOVSB
- XOR AL,AL
- STOSB
- IF WindowsVersion
- CALL AnsiToOem
- ENDIF
- POP DS
- RET
-
- ; Do DOS function on path
-
- DosPath:
-
- PUSH DS
- LEA DX,[BP-128]
- PUSH SS
- POP DS
- INT DOS
- POP DS
- JNC @@1
- MOV InOutRes,AX
- @@1: RET
-
- CODE ENDS
-
- END
-