From dd3fdac68e20cc038c6f7c3452f2bc48e5cdb98e Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 24 May 2007 07:16:17 +0000 Subject: [PATCH] * beos support from Olivier Coursiere git-svn-id: trunk@7443 - --- fv/platform.inc | 6 +++++ packages/base/Makefile.fpc | 2 ++ packages/base/gdbint/gdbint.pp | 24 +++++++++++++++++ packages/base/libasync/Makefile.fpc | 1 + packages/fcl-base/Makefile.fpc | 2 ++ rtl/inc/lineinfo.pp | 41 +++++++++++++++++++++++++++-- rtl/unix/initc.pp | 4 +++ rtl/unix/oscdeclh.inc | 11 ++++++++ rtl/unix/sockets.pp | 4 +++ rtl/unix/ttyname.inc | 4 +++ rtl/unix/unix.pp | 10 ++++++- rtl/unix/unxdeclh.inc | 7 +++++ 12 files changed, 113 insertions(+), 3 deletions(-) diff --git a/fv/platform.inc b/fv/platform.inc index 719f91ad2a..4e35ffa59d 100644 --- a/fv/platform.inc +++ b/fv/platform.inc @@ -206,6 +206,12 @@ FOR FPC THESE ARE THE TRANSLATIONS {$DEFINE OS_UNIX} {$ENDIF} +{$IFDEF BEOS} + {$UNDEF OS_DOS} + {$DEFINE OS_BEOS} + {$DEFINE OS_UNIX} +{$ENDIF} + {------------------------------------------------} { FPC Netware COMPILER changes operating system } {------------------------------------------------} diff --git a/packages/base/Makefile.fpc b/packages/base/Makefile.fpc index 68037b1591..659e418e28 100644 --- a/packages/base/Makefile.fpc +++ b/packages/base/Makefile.fpc @@ -16,6 +16,8 @@ dirs_netbsd=gdbint libasync \ mysql ibase postgres oracle odbc imagemagick httpd dirs_openbsd=gdbint libasync \ mysql ibase postgres oracle odbc imagemagick httpd +dirs_beos=gdbint libasync graph \ + mysql ibase postgres odbc sqlite pthreads imagemagick dirs_freebsd=gdbint libasync graph \ mysql ibase postgres oracle odbc sqlite pthreads imagemagick httpd dirs_darwin=libasync \ diff --git a/packages/base/gdbint/gdbint.pp b/packages/base/gdbint/gdbint.pp index 25ced072e4..3e4f09e292 100644 --- a/packages/base/gdbint/gdbint.pp +++ b/packages/base/gdbint/gdbint.pp @@ -219,6 +219,30 @@ interface {$LINKLIB user32} {$endif win32} +{$ifdef beos} + { still need some work... stollen from netbsd} + {$undef NotImplemented} + {$LINKLIB gdb} + {$ifdef GDB_HAS_SIM} + {$LINKLIB sim} + {$endif GDB_HAS_SIM} + {$LINKLIB bfd} + {$LINKLIB readline} + {$LINKLIB opcodes} + {$LINKLIB history} + {$LINKLIB iberty} + {$LINKLIB ncurses} + {$LINKLIB m} + {$LINKLIB iberty} + {$LINKLIB intl} + {$ifdef GDB_USES_EXPAT_LIB} + {$LINKLIB expat} + {$endif GDB_USES_EXPAT_LIB} + { does not seem to exist on netbsd LINKLIB dl} + {$LINKLIB c} + {$LINKLIB gcc} +{$endif beos} + {$ifdef go32v2} {$define supportexceptions} {$endif go32v2} diff --git a/packages/base/libasync/Makefile.fpc b/packages/base/libasync/Makefile.fpc index 24b4691db7..5b8ad2eb8a 100644 --- a/packages/base/libasync/Makefile.fpc +++ b/packages/base/libasync/Makefile.fpc @@ -14,6 +14,7 @@ fpcpackage=y [compiler] sourcedir_linux=unix +sourcedir_beos=unix sourcedir_freebsd=unix sourcedir_darwin=unix sourcedir_solaris=unix diff --git a/packages/fcl-base/Makefile.fpc b/packages/fcl-base/Makefile.fpc index ec8cb7a5b6..e876787379 100644 --- a/packages/fcl-base/Makefile.fpc +++ b/packages/fcl-base/Makefile.fpc @@ -9,6 +9,7 @@ version=2.0.0 [require] packages=paszlib hash packages_linux=netdb libasync pthreads +packages_beos=netdb libasync pthreads packages_freebsd=netdb libasync pthreads packages_darwin=netdb libasync pthreads packages_solaris=netdb libasync pthreads @@ -34,6 +35,7 @@ units=contnrs inifiles ezcgi pipes rtfpars idea base64 gettext \ iostream zstream cachecls avl_tree \ eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream \ streamex blowfish zipper streamio inicol pooledmm libtar streamcoll +units_beos=process ssockets resolve fpasync syncobjs simpleipc dbugmsg dbugintf units_freebsd=process ssockets resolve fpasync syncobjs simpleipc dbugmsg dbugintf daemonapp units_darwin=process ssockets resolve fpasync syncobjs simpleipc dbugmsg dbugintf daemonapp units_solaris=process ssockets resolve fpasync syncobjs simpleipc dbugmsg dbugintf daemonapp diff --git a/rtl/inc/lineinfo.pp b/rtl/inc/lineinfo.pp index 908820bde4..f1f935c57e 100644 --- a/rtl/inc/lineinfo.pp +++ b/rtl/inc/lineinfo.pp @@ -815,8 +815,45 @@ end; {$ifdef beos} {$i osposixh.inc} -{$i syscall.inc} -{$i beos.inc} + +{ ------------------------- Images --------------------------- } + +type + // Descriptive formats + status_t = Longint; + team_id = Longint; + image_id = Longint; + + { image types } +const + B_APP_IMAGE = 1; + B_LIBRARY_IMAGE = 2; + B_ADD_ON_IMAGE = 3; + B_SYSTEM_IMAGE = 4; + +type + image_info = packed record + id : image_id; + _type : longint; + sequence: longint; + init_order: longint; + init_routine: pointer; + term_routine: pointer; + device: dev_t; + node: ino_t; + name: array[0..MAXPATHLEN-1] of char; +{ name: string[255]; + name2: string[255]; + name3: string[255]; + name4: string[255]; + name5: string[5]; +} + text: pointer; + data: pointer; + text_size: longint; + data_size: longint; + end; + function get_next_image_info(team: team_id; var cookie:longint; var info:image_info; size: size_t) : status_t;cdecl; external 'root' name '_get_next_image_info'; function LoadElf32Beos:boolean; diff --git a/rtl/unix/initc.pp b/rtl/unix/initc.pp index a469e9b0b4..05061da03c 100644 --- a/rtl/unix/initc.pp +++ b/rtl/unix/initc.pp @@ -72,6 +72,10 @@ function geterrnolocation: pcint; cdecl;external clib name '__error'; function geterrnolocation: pcint; cdecl;external clib name '___errno'; {$endif} +{$ifdef beos} +function geterrnolocation: pcint; cdecl;external 'root' name '_errnop'; +{$endif} + function fpgetCerrno:cint; begin diff --git a/rtl/unix/oscdeclh.inc b/rtl/unix/oscdeclh.inc index 0555d08fdb..bd8960cdf5 100644 --- a/rtl/unix/oscdeclh.inc +++ b/rtl/unix/oscdeclh.inc @@ -75,7 +75,11 @@ const function fpmmap (addr:pointer;len:size_t;prot:cint;flags:cint;fd:cint;ofs:off_t):pointer; cdecl; external clib name 'mmap'+suffix64bit; function fpmunmap (addr:pointer;len:size_t):cint; cdecl; external clib name 'munmap'; function FpIOCtl (Handle:cint;Ndx: culong;Data: Pointer):cint; cdecl; external clib name 'ioctl'; +{$ifdef beos} + Function FPSelect (N:cint;readfds,writefds,exceptfds:pfdSet;TimeOut:PTimeVal):cint; cdecl; external 'net' name 'select'; +{$else} Function FPSelect (N:cint;readfds,writefds,exceptfds:pfdSet;TimeOut:PTimeVal):cint; cdecl; external clib name 'select'; +{$endif} function fpgetenv (name : pchar):pchar; cdecl; external clib name 'getenv'; Function FpKill (pid : TPid; sig: cInt): cInt; cdecl; external clib name 'kill'; Function FpGetpid : TPid; cdecl;external clib name 'getpid'; @@ -99,7 +103,10 @@ const {$linklib aio} Function FPnanosleep (const rqtp: ptimespec; rmtp: ptimespec): cint; cdecl; external 'rt' name 'nanosleep'; {$else solaris} +{$ifndef beos} Function FPnanosleep (const rqtp: ptimespec; rmtp: ptimespec): cint; cdecl; external clib name 'nanosleep'; +{$else} +{$endif} {$endif solaris} function fpNice (N:cint):cint; cdecl; external clib name 'nice'; Function fpGetPriority (Which,Who:cint):cint; cdecl; external clib name 'getpriority'; @@ -107,7 +114,11 @@ const Function fpSymlink (oldname,newname:pchar):cint; cdecl; external clib name 'symlink'; Function fpReadLink (name,linkname:pchar;maxlen:size_t):cint; cdecl; external clib name 'readlink'; Function FpUmask (cmask : TMode): TMode; cdecl; external clib name 'umask'; +{$ifndef beos} function fpsettimeofday(tp:ptimeval;tzp:ptimezone):cint; cdecl; external clib name 'settimeofday'; +{$else} +// function fpsettimeofday(tp:ptimeval;tzp:ptimezone):cint; +{$endif} function FpGetRLimit(resource : cInt; rlim : PRLimit) : cInt; cdecl; external clib name 'getrlimit'; {$ifdef HAS_UGETRLIMIT} { there is no ugetrlimit libc call, just map it to the getrlimit call in these cases } diff --git a/rtl/unix/sockets.pp b/rtl/unix/sockets.pp index 9f22f6767d..845237521c 100644 --- a/rtl/unix/sockets.pp +++ b/rtl/unix/sockets.pp @@ -44,10 +44,14 @@ const EsockEINVAL = EsysEINVAL; EsockEACCESS = ESysEAcces; EsockEMFILE = ESysEmfile; +{$ifndef beos} EsockEMSGSIZE = ESysEMsgSize; +{$endif beos} EsockENOBUFS = ESysENoBufs; EsockENOTCONN = ESysENotConn; +{$ifndef beos} EsockENOTSOCK = ESysENotSock; +{$endif beos} EsockEPROTONOSUPPORT = ESysEProtoNoSupport; EsockEWOULDBLOCK = ESysEWouldBlock; diff --git a/rtl/unix/ttyname.inc b/rtl/unix/ttyname.inc index b5d9e6a36e..6bce39db2b 100644 --- a/rtl/unix/ttyname.inc +++ b/rtl/unix/ttyname.inc @@ -55,6 +55,7 @@ var exit; end; end +{$ifndef beos} else if (ino_t(d^.d_fileno)=myino) and (st.st_dev=mydev) then begin fpclosedir(dirstream^); @@ -62,6 +63,7 @@ var mysearch:=true; exit; end; +{$endif} end; d:=fpReaddir(dirstream^); end; @@ -73,8 +75,10 @@ begin TTYName:=''; if (fpfstat(handle,st)=-1) or (isatty (handle)<>1) then exit; +{$ifndef beos} mydev:=st.st_dev; myino:=st.st_ino; +{$endif} mysearch('/dev'); end; diff --git a/rtl/unix/unix.pp b/rtl/unix/unix.pp index a173f1e8b9..0e48b73f56 100644 --- a/rtl/unix/unix.pp +++ b/rtl/unix/unix.pp @@ -570,13 +570,17 @@ end; Function fpFlock (var T : text;mode : cint) : cint; begin +{$ifndef beos} fpFlock:=fpFlock(TextRec(T).Handle,mode); +{$endif} end; Function fpFlock (var F : File;mode : cint) :cint; begin +{$ifndef beos} fpFlock:=fpFlock(FileRec(F).Handle,mode); +{$endif} end; Function SelectText(var T:Text;TimeOut :PTimeval):cint; @@ -623,11 +627,13 @@ begin fpseterrno(ESysEBADF); exit; end; - {$if not(defined(bsd)) and not(defined(solaris)) } + {$if not(defined(bsd)) and not(defined(solaris)) and not(defined(beos)) } p^.dd_nextoff:=fplseek(p^.dd_fd,loc,seek_set); {$endif} + {$if not(defined(beos))} p^.dd_size:=0; p^.dd_loc:=0; + {$endif} end; function TellDir(p:pdir):TOff; @@ -638,7 +644,9 @@ begin telldir:=-1; exit; end; + {$ifndef beos} telldir:=fplseek(p^.dd_fd,0,seek_cur) + {$endif} { We could try to use the nextoff field here, but on my 1.2.13 kernel, this gives nothing... This may have to do with the readdir implementation of libc... I also didn't find any trace of diff --git a/rtl/unix/unxdeclh.inc b/rtl/unix/unxdeclh.inc index d00e5ad71a..54867eeed7 100644 --- a/rtl/unix/unxdeclh.inc +++ b/rtl/unix/unxdeclh.inc @@ -18,11 +18,18 @@ type filedesarray=array[0..1] of cint; {$ifdef solaris} Function fpFlock (fd,mode : longint) : cint;{$ifdef IN_SYSTEM}forward;{$endif IN_SYSTEM} {$else solaris} +{$ifndef beos} Function fpFlock (fd,mode : longint) : cint; cdecl; external clib name 'flock'; +{$endif beos} {$endif solaris} +{$ifndef beos} Function fStatFS(Fd:Longint;Var Info:tstatfs):cint; cdecl; external clib name 'fstatfs'; +{$endif beos} + Function fsync (fd : cint) : cint; cdecl; external clib name 'fsync'; +{$ifndef beos} Function StatFS (Path:pchar;Var Info:tstatfs):cint; cdecl; external clib name 'statfs'; +{$endif beos} function pipe (var fildes: filedesarray):cint; cdecl; external clib name 'pipe'; function fpgettimeofday(tp: ptimeval;tzp:ptimezone):cint; cdecl; external clib name 'gettimeofday';