From 057577639574c695981686d1a01de450c8207ccc Mon Sep 17 00:00:00 2001 From: marco Date: Fri, 3 Jan 2003 15:45:21 +0000 Subject: [PATCH] * Renamed to bunxtype.inc (from osposixh.inc), some minor changes (as introduced going from posix unit to baseunix) --- rtl/bsd/bunxtype.inc | 202 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 rtl/bsd/bunxtype.inc diff --git a/rtl/bsd/bunxtype.inc b/rtl/bsd/bunxtype.inc new file mode 100644 index 0000000000..8998a263fa --- /dev/null +++ b/rtl/bsd/bunxtype.inc @@ -0,0 +1,202 @@ +{ + $Id$ + This file is part of the Free Pascal run time library. + Copyright (c) 2001 by Free Pascal development team + + Types and structures for baseunix unit, also used in system. + + This file implements all the types/constants which must + be defined to port FPC to a new POSIX compliant OS. + + 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. + + **********************************************************************} + +{***********************************************************************} +{ POSIX STRUCTURES } +{***********************************************************************} + +{$i ptypes.inc} + +// CONST SYS_NMLN=65; + +// Can't find these two in Posix and in FreeBSD +//CONST +// _UTSNAME_LENGTH = ; +// _UTSNAME_NODENAME_LENGTH = ; + +TYPE + { system information services } + utsname = record + sysname : Array[0..SYS_NMLN-1] OF Char; // Name of this OS + nodename: Array[0..SYS_NMLN-1] OF Char; // Name of this network node. + release : Array[0..SYS_NMLN-1] OF Char; // Release level. + version : Array[0..SYS_NMLN-1] OF Char; // Version level. + machine : Array[0..SYS_NMLN-1] OF Char; // Hardware type. + end; + TUtsName= utsname; + pUtsName= ^utsname; + + { file characteristics services } + stat = record { the types are real} + st_dev : dev_t; // inode's device + st_ino : ino_t; // inode's number + st_mode : mode_t; // inode protection mode + st_nlink : nlink_t; // number of hard links + st_uid : uid_t; // user ID of the file's owner + st_gid : gid_t; // group ID of the file's group + st_rdev : dev_t; // device type + st_atime : time_t; // time of last access + st_atimensec : clong; // nsec of last access + st_mtime : time_t; // time of last data modification + st_mtimensec : clong; // nsec of last data modification + st_ctime : time_t; // time of last file status change + st_ctimensec : clong; // nsec of last file status change + st_size : off_t; // file size, in bytes + st_blocks : cint64; // blocks allocated for file + st_blksize : cuint32; // optimal blocksize for I/O + st_flags : cuint32; // user defined flags for file + st_gen : cuint32; // file generation number +{$ifndef NetBSD} + st_lspare : cint32; +{$endif} + st_qspare : array[0..1] Of cint64; + end; + TStat = stat; + pStat = ^stat; + + { directory services } + dirent = record + d_fileno : cuint32; // file number of entry + d_reclen : cuint16; // length of this record + d_type : cuint8; // file type, see below + d_namlen : cuint8; // length of string in d_name + d_name : array[0..(255 + 1)-1] of char; // name must be no longer than this + end; + TDirent = dirent; + pDirent = ^dirent; + + dir = packed record + dd_fd : cint; // file descriptor associated with directory + dd_loc : clong; // offset in current buffer + dd_size : clong; // amount of data returned by getdirentries + dd_buf : pchar; // data buffer + dd_len : cint; // size of data buffer + dd_seek : clong; // magic cookie returned by getdirentries + dd_rewind : clong; // magic cookie for rewinding + dd_flags : cint; // flags for readdir + end; + TDir = dir; + pDir = ^dir; + + utimbuf = record + actime : time_t; + modtime : time_t; + end; + TUtimBuf = utimbuf; + putimbuf = ^utimbuf; + + flock = record + l_start : off_t; { starting offset } + l_len : off_t; { len = 0 means until end of file } + l_pid : pid_t; { lock owner } + l_type : cshort; { lock type: read/write, etc. } + l_whence: cshort; { type of l_start } + end; + TFlock = flock; + pFlock = ^flock; + + tms = packed record + tms_utime : clock_t; { User CPU time } + tms_stime : clock_t; { System CPU time } + tms_cutime : clock_t; { User CPU time of terminated child procs } + tms_cstime : clock_t; { System CPU time of terminated child procs } + end; + TTms= tms; + pTms= ^tms; + +{***********************************************************************} +{ POSIX CONSTANT ROUTINE DEFINITIONS } +{***********************************************************************} +CONST + { access routine - these maybe OR'ed together } + F_OK = 0; { test for existence of file } + R_OK = 4; { test for read permission on file } + W_OK = 2; { test for write permission on file } + X_OK = 1; { test for execute or search permission } + { seek routine } + SEEK_SET = 0; { seek from beginning of file } + SEEK_CUR = 1; { seek from current position } + SEEK_END = 2; { seek from end of file } + { open routine } + { File access modes for `open' and `fcntl'. } + O_RDONLY = 0; { Open read-only. } + O_WRONLY = 1; { Open write-only. } + O_RDWR = 2; { Open read/write. } + { Bits OR'd into the second argument to open. } + O_CREAT = $200; { Create file if it doesn't exist. } + O_EXCL = $800; { Fail if file already exists. } + O_TRUNC = $400; { Truncate file to zero length. } + O_NOCTTY = $8000; { Don't assign a controlling terminal. } + { File status flags for `open' and `fcntl'. } + O_APPEND = 8; { Writes append to the file. } + O_NONBLOCK = 4; { Non-blocking I/O. } + + { mode_t possible values } + S_IRUSR = %0100000000; { Read permission for owner } + S_IWUSR = %0010000000; { Write permission for owner } + S_IXUSR = %0001000000; { Exec permission for owner } + S_IRGRP = %0000100000; { Read permission for group } + S_IWGRP = %0000010000; { Write permission for group } + S_IXGRP = %0000001000; { Exec permission for group } + S_IROTH = %0000000100; { Read permission for world } + S_IWOTH = %0000000010; { Write permission for world } + S_IXOTH = %0000000001; { Exec permission for world } + + { Used for waitpid } + WNOHANG = 1; { don't block waiting } + WUNTRACED = 2; { report status of stopped children } + + + {*************************************************************************} + { SIGNALS } + {*************************************************************************} + +{$i signal.inc} + +// function geterrno:longint; +// procedure seterrno(i:longint); + +{ + $Log$ + Revision 1.1 2003-01-03 15:45:21 marco + * Renamed to bunxtype.inc (from osposixh.inc), some minor changes + (as introduced going from posix unit to baseunix) + + Revision 1.6 2002/10/27 17:21:29 marco + * Only "difficult" functions + execvp + termios + rewinddir left to do + + Revision 1.5 2002/10/27 11:58:30 marco + * Modifications from Saturday. + + Revision 1.4 2002/09/07 16:01:17 peter + * old logs removed and tabs fixed + + Revision 1.3 2002/08/21 07:03:16 marco + * Fixes from Tuesday. + + Revision 1.2 2002/08/19 12:29:11 marco + * First working POSIX *BSD system unit. + + Revision 1.1 2002/08/03 19:34:19 marco + * Initial *BSD versions. Seems that OpenBSD doesn't need much change, + NetBSD may need some fixes to stat record and ftruncate and lseek. + It is all close together, and it should be doable to have just one copy + of these for *BSD. + +}