mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 03:39:40 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			121 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
{
 | 
						|
    This file is part of the Free Pascal run time library.
 | 
						|
    Copyright (c) 1999-2005 by Florian Klaempfl and Pavel Ozerski
 | 
						|
    member of the Free Pascal development team.
 | 
						|
 | 
						|
    Low level directory functions for MacOS
 | 
						|
 | 
						|
    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
 | 
						|
*****************************************************************************}
 | 
						|
 | 
						|
procedure mkdir(const s:string);[IOCheck];
 | 
						|
var
 | 
						|
  spec: FSSpec;
 | 
						|
  createdDirID: Longint;
 | 
						|
  err: OSErr;
 | 
						|
  res: Integer;
 | 
						|
begin
 | 
						|
  If (s='') or (InOutRes <> 0) then
 | 
						|
    exit;
 | 
						|
 | 
						|
  res:= PathArgToFSSpec(s, spec);
 | 
						|
  if (res = 0) or (res = 2) then
 | 
						|
    begin
 | 
						|
      err:= FSpDirCreate(spec, smSystemScript, createdDirID);
 | 
						|
      OSErr2InOutRes(err);
 | 
						|
    end
 | 
						|
  else
 | 
						|
    InOutRes:=res;
 | 
						|
end;
 | 
						|
 | 
						|
procedure rmdir(const s:string);[IOCheck];
 | 
						|
 | 
						|
var
 | 
						|
  spec: FSSpec;
 | 
						|
  err: OSErr;
 | 
						|
  res: Integer;
 | 
						|
 | 
						|
begin
 | 
						|
  If (s='') or (InOutRes <> 0) then
 | 
						|
    exit;
 | 
						|
 | 
						|
  res:= PathArgToFSSpec(s, spec);
 | 
						|
 | 
						|
  if (res = 0) then
 | 
						|
    begin
 | 
						|
      if IsDirectory(spec) then
 | 
						|
        begin
 | 
						|
          err:= FSpDelete(spec);
 | 
						|
          OSErr2InOutRes(err);
 | 
						|
        end
 | 
						|
      else
 | 
						|
        InOutRes:= 20;
 | 
						|
    end
 | 
						|
  else
 | 
						|
    InOutRes:=res;
 | 
						|
end;
 | 
						|
 | 
						|
procedure chdir(const s:string);[IOCheck];
 | 
						|
var
 | 
						|
  spec, newDirSpec: FSSpec;
 | 
						|
  err: OSErr;
 | 
						|
  res: Integer;
 | 
						|
begin
 | 
						|
  if (s='') or (InOutRes <> 0) then
 | 
						|
    exit;
 | 
						|
 | 
						|
  res:= PathArgToFSSpec(s, spec);
 | 
						|
  if (res = 0) or (res = 2) then
 | 
						|
    begin
 | 
						|
      { The fictive file x is appended to the directory name to make
 | 
						|
        FSMakeFSSpec return a FSSpec to a file in the directory.
 | 
						|
        Then by clearing the name, the FSSpec then
 | 
						|
        points to the directory. It doesn't matter whether x exists or not.}
 | 
						|
      err:= FSMakeFSSpec (spec.vRefNum, spec.parID, ':'+spec.name+':x', newDirSpec);
 | 
						|
      if (err = noErr) or (err = fnfErr) then
 | 
						|
        begin
 | 
						|
          workingDirectorySpec:= newDirSpec;
 | 
						|
          workingDirectorySpec.name:='';
 | 
						|
          InOutRes:= 0;
 | 
						|
        end
 | 
						|
      else
 | 
						|
        begin
 | 
						|
          {E g if the directory doesn't exist.}
 | 
						|
          OSErr2InOutRes(err);
 | 
						|
        end;
 | 
						|
    end
 | 
						|
  else
 | 
						|
    InOutRes:=res;
 | 
						|
end;
 | 
						|
 | 
						|
procedure getDir (DriveNr: byte; var Dir: ShortString);
 | 
						|
 | 
						|
var
 | 
						|
  fullPath: AnsiString;
 | 
						|
  pathHandleSize: Longint;
 | 
						|
 | 
						|
begin
 | 
						|
  if FSpGetFullPath(workingDirectorySpec, fullPath, false) <> noErr then
 | 
						|
    Halt(3);  {exit code 3 according to MPW}
 | 
						|
 | 
						|
  if Length(fullPath) <= 255 then {because dir is ShortString}
 | 
						|
    InOutRes := 0
 | 
						|
  else
 | 
						|
    InOutRes := 1; //TODO Exchange to something better
 | 
						|
 | 
						|
  dir:= fullPath;
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
 |