mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-10-31 02:11:30 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			174 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			174 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| {
 | |
|   System independent filecontrol interface for linux
 | |
| 
 | |
|   $Id$
 | |
| }
 | |
| uses
 | |
|   Linux;
 | |
| 
 | |
| function OpenFileStr(FName: PChar; Flags: Longint): TFileHandle; [ alias: 'OpenFile' ];
 | |
| var
 | |
|   RC : longint;
 | |
|   Todo: TErrorHandlerReturnValue;
 | |
| begin
 | |
|   repeat
 | |
|     OpenFileStr:=fdOpen(FName, Flags, FilePerms);
 | |
|     RC:=LinuxError;
 | |
|     if (RC > 0) then
 | |
|       Todo := ErrorHandler(RC, FName);
 | |
|   until (RC <= 0) or (Todo <> errRetry);
 | |
| end;
 | |
| 
 | |
| function CreateFileStr(FName: PChar): TFileHandle; [ alias: 'CreateFile' ];
 | |
| const
 | |
|   O_RDONLY = 0;
 | |
|   O_WRONLY = 1;
 | |
|   O_RDWR   = 2;
 | |
|   O_CREATE = 64;
 | |
|   O_EXCL   = 128;
 | |
|   O_NOCTTY = 256;
 | |
|   O_TRUNC  = 512;
 | |
|   O_APPEND = 1024;
 | |
| begin
 | |
|   CreateFileStr := OpenFileStr(FName, O_RDWR+O_CREATE+O_TRUNC);
 | |
| end;
 | |
| 
 | |
| procedure CloseFile(Handle: TFileHandle);
 | |
| var
 | |
|   RC: Longint;
 | |
|   Todo: TErrorHandlerReturnValue;
 | |
| begin
 | |
|   repeat
 | |
|     fdClose(Handle);
 | |
|     RC := LinuxError;
 | |
|     if (RC > 0) then
 | |
|       Todo := ErrorHandler(RC, nil);
 | |
|   until (RC <= 0) or (Todo <> errRetry);
 | |
| end;
 | |
| 
 | |
| function SeekFile(Handle: TFileHandle; Pos: TFileInt; SeekType: Word): TFileInt;
 | |
| var
 | |
|   RC: Longint;
 | |
|   Todo: TErrorHandlerReturnValue;
 | |
| begin
 | |
|   repeat
 | |
|     RC := -fdSeek(Handle, Pos, SeekType);
 | |
|     if (RC > 0) then
 | |
|       Todo := ErrorHandler(RC, nil);
 | |
|   until (RC <= 0) or (Todo <> errRetry);
 | |
|   SeekFile := -RC;
 | |
| end;
 | |
| 
 | |
| procedure DeleteFileStr(FName: PChar); [ alias: 'DeleteFile' ];
 | |
| var
 | |
|   RC: Longint;
 | |
|   Todo: TErrorHandlerReturnValue;
 | |
| begin
 | |
|   repeat
 | |
|     UnLink(FName);
 | |
|     RC:=LinuxError;
 | |
|     if (RC > 0) then
 | |
|       Todo := ErrorHandler(RC, nil);
 | |
|   until (RC <= 0) or (Todo <> errRetry);
 | |
| end;
 | |
| 
 | |
| function ReadFile(Handle: TFileHandle; var Buff; Count: CPUWord): CPUWord;
 | |
| var
 | |
|   RC: Longint;
 | |
|   BytesRead: LongInt;
 | |
|   Todo: TErrorHandlerReturnValue;
 | |
| begin
 | |
|   repeat
 | |
|     BytesRead := fdRead(Handle, Buff, Count);
 | |
|     RC:=LinuxError;
 | |
|     if (RC > 0) then
 | |
|       Todo := ErrorHandler(RC, nil);
 | |
|   until (RC <= 0) or (Todo <> errRetry);
 | |
|   if (RC > 0) then
 | |
|     ReadFile := 0
 | |
|    else
 | |
|     ReadFile := BytesRead;
 | |
| end;
 | |
| 
 | |
| 
 | |
| function WriteFile(Handle: TFileHandle; var Buff; Count: CPUWord): CPUWord;
 | |
| var
 | |
|   RC: Longint;
 | |
|   BytesWritten: LongInt;
 | |
|   Todo: TErrorHandlerReturnValue;
 | |
| begin
 | |
|   repeat
 | |
|     BytesWritten := fdWrite(Handle, Buff, Count);
 | |
|     RC:=LinuxError;
 | |
|     if (RC > 0) then
 | |
|       Todo := ErrorHandler(RC, nil);
 | |
|   until (RC <= 0) or (Todo <> errRetry);
 | |
|   if (RC > 0) then
 | |
|     WriteFile := 0
 | |
|    else
 | |
|     WriteFile := BytesWritten;
 | |
| end;
 | |
| 
 | |
| { The following two routines should go to syscalls... }
 | |
| 
 | |
| procedure FlushFile(Handle: TFileHandle);
 | |
| var
 | |
|   RC: Longint;
 | |
|   Todo: TErrorHandlerReturnValue;
 | |
| begin
 | |
|   repeat
 | |
|     fdFlush(Handle);
 | |
|     RC:=LinuxError;
 | |
|     if (RC > 0) then
 | |
|       Todo := ErrorHandler(RC, nil);
 | |
|   until (RC <= 0) or (Todo <> errRetry);
 | |
| end;
 | |
| 
 | |
| procedure TruncateFile(Handle: TFileHandle);
 | |
| var
 | |
|   RC: Longint;
 | |
|   Todo: TErrorHandlerReturnValue;
 | |
| begin
 | |
|   repeat
 | |
|     fdTruncate(Handle,0);
 | |
|     RC:=LinuxError;
 | |
|     if (RC > 0) then
 | |
|       Todo := ErrorHandler(RC, nil);
 | |
|   until (RC <= 0) or (Todo <> errRetry);
 | |
| end;
 | |
| 
 | |
| function EndOfFile(Handle: TFileHandle): Boolean;
 | |
| begin
 | |
|   EndOfFile := FilePos(Handle) >= FileSize(Handle);
 | |
| end;
 | |
| 
 | |
| function FilePos(Handle: TFileHandle): TFileInt;
 | |
| begin
 | |
|   FilePos := SeekFile(Handle, 0, skCur);
 | |
| end;
 | |
| 
 | |
| function FileSize(Handle: TFileHandle): TFileInt;
 | |
| var
 | |
|   L: Longint;
 | |
| begin
 | |
|   L := FilePos(Handle);
 | |
|   FileSize := SeekFile(Handle, 0, skEnd);
 | |
|   SeekFile(Handle, L, skBeg);
 | |
| end;
 | |
| 
 | |
| {
 | |
|   $Log$
 | |
|   Revision 1.1  2000-01-06 01:20:31  peter
 | |
|     * moved out of packages/ back to topdir
 | |
| 
 | |
|   Revision 1.1  1999/11/24 23:36:38  peter
 | |
|     * moved to packages dir
 | |
| 
 | |
|   Revision 1.1  1998/12/04 12:48:30  peter
 | |
|     * moved some dirs
 | |
| 
 | |
|   Revision 1.1  1998/10/26 11:31:47  peter
 | |
|     + inital include files
 | |
| 
 | |
| }
 | 
