mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-07 10:48:30 +02:00
111 lines
2.9 KiB
PHP
111 lines
2.9 KiB
PHP
{
|
|
This file is part of the Free Pascal run time library.
|
|
Copyright (c) 1999-2000 by Florian Klaempfl and Pavel Ozerski
|
|
member of the Free Pascal development team.
|
|
|
|
FPC Pascal system unit for the Win32 API.
|
|
|
|
See the file COPYING.FPC, included in this distribution,
|
|
for details about the copyright.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
**********************************************************************}
|
|
|
|
{*****************************************************************************
|
|
Directory Handling
|
|
*****************************************************************************}
|
|
type
|
|
TDirFnType=function(name:pointer):longbool;stdcall;
|
|
|
|
procedure dirfn(afunc : TDirFnType;s:pchar;len:integer);
|
|
begin
|
|
DoDirSeparators(s);
|
|
if not aFunc(s) then
|
|
begin
|
|
errno:=GetLastError;
|
|
Errno2InoutRes;
|
|
end;
|
|
end;
|
|
|
|
function CreateDirectoryTrunc(name:pointer):longbool;stdcall;
|
|
begin
|
|
CreateDirectoryTrunc:=CreateDirectory(name,nil);
|
|
end;
|
|
|
|
Procedure MkDir(s: pchar;len:sizeuint);[IOCheck, public, alias : 'FPC_SYS_MKDIR'];
|
|
begin
|
|
If not assigned(s) or (len=0) or (InOutRes <> 0) then
|
|
exit;
|
|
dirfn(TDirFnType(@CreateDirectoryTrunc),s,len);
|
|
end;
|
|
|
|
Procedure RmDir(s: pchar;len:sizeuint);[IOCheck, public, alias : 'FPC_SYS_RMDIR'];
|
|
|
|
begin
|
|
if (len=1) and (s^ ='.') then
|
|
InOutRes := 16;
|
|
If not assigned(s) or (len=0) or (InOutRes <> 0) then
|
|
exit;
|
|
{$ifdef WINCE}
|
|
if (len=2) and (s[0]='.') and (s[1]='.') then
|
|
InOutRes := 5;
|
|
{$endif WINCE}
|
|
dirfn(TDirFnType(@RemoveDirectory),s,len);
|
|
{$ifdef WINCE}
|
|
if (Inoutres=3) and (Pos(DirectorySeparator, s)<2) then
|
|
Inoutres:=2;
|
|
{$endif WINCE}
|
|
end;
|
|
|
|
Procedure ChDir(s: pchar;len:sizeuint);[IOCheck, public, alias : 'FPC_SYS_CHDIR'];
|
|
|
|
begin
|
|
{$ifndef WINCE}
|
|
If not assigned(s) or (len=0) or (InOutRes <> 0) then
|
|
exit;
|
|
dirfn(TDirFnType(@SetCurrentDirectory),s,len);
|
|
if Inoutres=2 then
|
|
Inoutres:=3;
|
|
{$else WINCE}
|
|
InOutRes:=3;
|
|
{$endif WINCE}
|
|
end;
|
|
|
|
procedure GetDir (DriveNr: byte; var Dir: ShortString);
|
|
{$ifndef WINCE}
|
|
const
|
|
Drive:array[0..3]of char=(#0,':',#0,#0);
|
|
var
|
|
defaultdrive:boolean;
|
|
DirBuf,SaveBuf:array[0..259] of Char;
|
|
{$endif WINCE}
|
|
begin
|
|
{$ifndef WINCE}
|
|
defaultdrive:=drivenr=0;
|
|
if not defaultdrive then
|
|
begin
|
|
byte(Drive[0]):=Drivenr+64;
|
|
GetCurrentDirectory(SizeOf(SaveBuf),SaveBuf);
|
|
if not SetCurrentDirectory(@Drive) then
|
|
begin
|
|
errno := word (GetLastError);
|
|
Errno2InoutRes;
|
|
Dir := char (DriveNr + 64) + ':\';
|
|
SetCurrentDirectory(@SaveBuf);
|
|
Exit;
|
|
end;
|
|
end;
|
|
GetCurrentDirectory(SizeOf(DirBuf),DirBuf);
|
|
if not defaultdrive then
|
|
SetCurrentDirectory(@SaveBuf);
|
|
dir:=strpas(DirBuf);
|
|
if not FileNameCaseSensitive then
|
|
dir:=upcase(dir);
|
|
{$else WINCE}
|
|
Dir:='\';
|
|
{$endif WINCE}
|
|
end;
|