浏览代码

* beos support from Olivier Coursiere

git-svn-id: trunk@7443 -
peter 18 年之前
父节点
当前提交
dd3fdac68e

+ 6 - 0
fv/platform.inc

@@ -206,6 +206,12 @@ FOR FPC THESE ARE THE TRANSLATIONS
   {$DEFINE OS_UNIX}
   {$DEFINE OS_UNIX}
 {$ENDIF}
 {$ENDIF}
 
 
+{$IFDEF BEOS}
+  {$UNDEF OS_DOS}
+  {$DEFINE OS_BEOS}
+  {$DEFINE OS_UNIX}
+{$ENDIF}
+
 {------------------------------------------------}
 {------------------------------------------------}
 {  FPC Netware COMPILER changes operating system }
 {  FPC Netware COMPILER changes operating system }
 {------------------------------------------------}
 {------------------------------------------------}

+ 2 - 0
packages/base/Makefile.fpc

@@ -16,6 +16,8 @@ dirs_netbsd=gdbint libasync \
             mysql ibase postgres oracle odbc imagemagick httpd
             mysql ibase postgres oracle odbc imagemagick httpd
 dirs_openbsd=gdbint libasync \
 dirs_openbsd=gdbint libasync \
             mysql ibase postgres oracle odbc imagemagick httpd
             mysql ibase postgres oracle odbc imagemagick httpd
+dirs_beos=gdbint libasync graph \
+             mysql ibase postgres odbc sqlite pthreads imagemagick
 dirs_freebsd=gdbint libasync graph \
 dirs_freebsd=gdbint libasync graph \
              mysql ibase postgres oracle odbc sqlite pthreads imagemagick httpd
              mysql ibase postgres oracle odbc sqlite pthreads imagemagick httpd
 dirs_darwin=libasync \
 dirs_darwin=libasync \

+ 24 - 0
packages/base/gdbint/gdbint.pp

@@ -219,6 +219,30 @@ interface
   {$LINKLIB user32}
   {$LINKLIB user32}
 {$endif win32}
 {$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}
 {$ifdef go32v2}
   {$define supportexceptions}
   {$define supportexceptions}
 {$endif go32v2}
 {$endif go32v2}

+ 1 - 0
packages/base/libasync/Makefile.fpc

@@ -14,6 +14,7 @@ fpcpackage=y
 
 
 [compiler]
 [compiler]
 sourcedir_linux=unix
 sourcedir_linux=unix
+sourcedir_beos=unix
 sourcedir_freebsd=unix
 sourcedir_freebsd=unix
 sourcedir_darwin=unix
 sourcedir_darwin=unix
 sourcedir_solaris=unix
 sourcedir_solaris=unix

+ 2 - 0
packages/fcl-base/Makefile.fpc

@@ -9,6 +9,7 @@ version=2.0.0
 [require]
 [require]
 packages=paszlib hash
 packages=paszlib hash
 packages_linux=netdb libasync pthreads
 packages_linux=netdb libasync pthreads
+packages_beos=netdb libasync pthreads
 packages_freebsd=netdb libasync pthreads
 packages_freebsd=netdb libasync pthreads
 packages_darwin=netdb libasync pthreads
 packages_darwin=netdb libasync pthreads
 packages_solaris=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 \
       iostream zstream cachecls avl_tree \
       eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream \
       eventlog custapp cgiapp wformat whtml wtex rttiutils bufstream \
       streamex blowfish zipper streamio inicol pooledmm libtar streamcoll
       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_freebsd=process ssockets resolve fpasync syncobjs simpleipc dbugmsg dbugintf daemonapp
 units_darwin=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
 units_solaris=process ssockets resolve fpasync syncobjs simpleipc dbugmsg dbugintf daemonapp

+ 39 - 2
rtl/inc/lineinfo.pp

@@ -815,8 +815,45 @@ end;
 {$ifdef beos}
 {$ifdef beos}
 
 
 {$i osposixh.inc}
 {$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 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;
 function LoadElf32Beos:boolean;

+ 4 - 0
rtl/unix/initc.pp

@@ -72,6 +72,10 @@ function geterrnolocation: pcint; cdecl;external clib name '__error';
 function geterrnolocation: pcint; cdecl;external clib name '___errno';
 function geterrnolocation: pcint; cdecl;external clib name '___errno';
 {$endif}
 {$endif}
 
 
+{$ifdef beos}
+function geterrnolocation: pcint; cdecl;external 'root' name '_errnop';
+{$endif}
+
 function fpgetCerrno:cint;
 function fpgetCerrno:cint;
 
 
 begin
 begin

+ 11 - 0
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  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  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';
     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';
     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  fpgetenv  (name : pchar):pchar; cdecl; external clib name 'getenv';
     Function  FpKill       (pid : TPid; sig: cInt): cInt; cdecl; external clib name 'kill';
     Function  FpKill       (pid : TPid; sig: cInt): cInt; cdecl; external clib name 'kill';
     Function  FpGetpid  : TPid; cdecl;external clib name 'getpid';
     Function  FpGetpid  : TPid; cdecl;external clib name 'getpid';
@@ -99,7 +103,10 @@ const
 {$linklib aio}
 {$linklib aio}
     Function  FPnanosleep  (const rqtp: ptimespec; rmtp: ptimespec): cint; cdecl; external 'rt' name 'nanosleep';
     Function  FPnanosleep  (const rqtp: ptimespec; rmtp: ptimespec): cint; cdecl; external 'rt' name 'nanosleep';
 {$else solaris}
 {$else solaris}
+{$ifndef beos}
     Function  FPnanosleep  (const rqtp: ptimespec; rmtp: ptimespec): cint; cdecl; external clib name 'nanosleep';
     Function  FPnanosleep  (const rqtp: ptimespec; rmtp: ptimespec): cint; cdecl; external clib name 'nanosleep';
+{$else}
+{$endif}
 {$endif solaris}
 {$endif solaris}
     function  fpNice       (N:cint):cint; cdecl; external clib name 'nice';
     function  fpNice       (N:cint):cint; cdecl; external clib name 'nice';
     Function  fpGetPriority (Which,Who:cint):cint;      cdecl; external clib name 'getpriority';
     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  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  fpReadLink           (name,linkname:pchar;maxlen:size_t):cint;  cdecl; external clib name 'readlink';
     Function  FpUmask       (cmask : TMode): TMode; cdecl; external clib name 'umask';
     Function  FpUmask       (cmask : TMode): TMode; cdecl; external clib name 'umask';
+{$ifndef beos}    
     function  fpsettimeofday(tp:ptimeval;tzp:ptimezone):cint; cdecl; external clib name 'settimeofday';
     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';
     function FpGetRLimit(resource : cInt; rlim : PRLimit) : cInt; cdecl; external clib name 'getrlimit';
     {$ifdef HAS_UGETRLIMIT}
     {$ifdef HAS_UGETRLIMIT}
     { there is no ugetrlimit libc call, just map it to the getrlimit call in these cases }
     { there is no ugetrlimit libc call, just map it to the getrlimit call in these cases }

+ 4 - 0
rtl/unix/sockets.pp

@@ -44,10 +44,14 @@ const
   EsockEINVAL           = EsysEINVAL;
   EsockEINVAL           = EsysEINVAL;
   EsockEACCESS          = ESysEAcces;
   EsockEACCESS          = ESysEAcces;
   EsockEMFILE           = ESysEmfile;
   EsockEMFILE           = ESysEmfile;
+{$ifndef beos}
   EsockEMSGSIZE         = ESysEMsgSize;
   EsockEMSGSIZE         = ESysEMsgSize;
+{$endif beos}
   EsockENOBUFS          = ESysENoBufs;
   EsockENOBUFS          = ESysENoBufs;
   EsockENOTCONN         = ESysENotConn;
   EsockENOTCONN         = ESysENotConn;
+{$ifndef beos}  
   EsockENOTSOCK         = ESysENotSock;
   EsockENOTSOCK         = ESysENotSock;
+{$endif beos}
   EsockEPROTONOSUPPORT  = ESysEProtoNoSupport;
   EsockEPROTONOSUPPORT  = ESysEProtoNoSupport;
   EsockEWOULDBLOCK      = ESysEWouldBlock;
   EsockEWOULDBLOCK      = ESysEWouldBlock;
 
 

+ 4 - 0
rtl/unix/ttyname.inc

@@ -55,6 +55,7 @@ var
                 exit;
                 exit;
               end;
               end;
            end
            end
+{$ifndef beos}	 
           else if (ino_t(d^.d_fileno)=myino) and (st.st_dev=mydev) then
           else if (ino_t(d^.d_fileno)=myino) and (st.st_dev=mydev) then
            begin
            begin
              fpclosedir(dirstream^);
              fpclosedir(dirstream^);
@@ -62,6 +63,7 @@ var
              mysearch:=true;
              mysearch:=true;
              exit;
              exit;
            end;
            end;
+{$endif}
         end;
         end;
        d:=fpReaddir(dirstream^);
        d:=fpReaddir(dirstream^);
      end;
      end;
@@ -73,8 +75,10 @@ begin
   TTYName:='';
   TTYName:='';
   if (fpfstat(handle,st)=-1) or (isatty (handle)<>1) then
   if (fpfstat(handle,st)=-1) or (isatty (handle)<>1) then
    exit;
    exit;
+{$ifndef beos}	 
   mydev:=st.st_dev;
   mydev:=st.st_dev;
   myino:=st.st_ino;
   myino:=st.st_ino;
+{$endif}
   mysearch('/dev');
   mysearch('/dev');
 end;
 end;
 
 

+ 9 - 1
rtl/unix/unix.pp

@@ -570,13 +570,17 @@ end;
 
 
 Function fpFlock (var T : text;mode : cint) : cint;
 Function fpFlock (var T : text;mode : cint) : cint;
 begin
 begin
+{$ifndef beos}
   fpFlock:=fpFlock(TextRec(T).Handle,mode);
   fpFlock:=fpFlock(TextRec(T).Handle,mode);
+{$endif}
 end;
 end;
 
 
 
 
 Function  fpFlock (var F : File;mode : cint) :cint;
 Function  fpFlock (var F : File;mode : cint) :cint;
 begin
 begin
+{$ifndef beos}
   fpFlock:=fpFlock(FileRec(F).Handle,mode);
   fpFlock:=fpFlock(FileRec(F).Handle,mode);
+{$endif}
 end;
 end;
 
 
 Function SelectText(var T:Text;TimeOut :PTimeval):cint;
 Function SelectText(var T:Text;TimeOut :PTimeval):cint;
@@ -623,11 +627,13 @@ begin
      fpseterrno(ESysEBADF);
      fpseterrno(ESysEBADF);
      exit;
      exit;
    end;
    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);
   p^.dd_nextoff:=fplseek(p^.dd_fd,loc,seek_set);
  {$endif}
  {$endif}
+ {$if not(defined(beos))}
   p^.dd_size:=0;
   p^.dd_size:=0;
   p^.dd_loc:=0;
   p^.dd_loc:=0;
+ {$endif} 
 end;
 end;
 
 
 function TellDir(p:pdir):TOff;
 function TellDir(p:pdir):TOff;
@@ -638,7 +644,9 @@ begin
      telldir:=-1;
      telldir:=-1;
      exit;
      exit;
    end;
    end;
+ {$ifndef beos}   
   telldir:=fplseek(p^.dd_fd,0,seek_cur)
   telldir:=fplseek(p^.dd_fd,0,seek_cur)
+ {$endif}     
   { We could try to use the nextoff field here, but on my 1.2.13
   { 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
     kernel, this gives nothing... This may have to do with
     the readdir implementation of libc... I also didn't find any trace of
     the readdir implementation of libc... I also didn't find any trace of

+ 7 - 0
rtl/unix/unxdeclh.inc

@@ -18,11 +18,18 @@ type filedesarray=array[0..1] of cint;
 {$ifdef solaris}
 {$ifdef solaris}
 Function fpFlock (fd,mode : longint) : cint;{$ifdef IN_SYSTEM}forward;{$endif IN_SYSTEM}
 Function fpFlock (fd,mode : longint) : cint;{$ifdef IN_SYSTEM}forward;{$endif IN_SYSTEM}
 {$else solaris}
 {$else solaris}
+{$ifndef beos}
 Function fpFlock (fd,mode : longint) : cint; cdecl; external clib name 'flock';
 Function fpFlock (fd,mode : longint) : cint; cdecl; external clib name 'flock';
+{$endif beos}
 {$endif solaris}
 {$endif solaris}
 
 
+{$ifndef beos}
 Function fStatFS(Fd:Longint;Var Info:tstatfs):cint; cdecl; external clib name 'fstatfs';
 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';
 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';
 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 pipe (var fildes: filedesarray):cint;  cdecl; external clib name 'pipe';
 function fpgettimeofday(tp: ptimeval;tzp:ptimezone):cint;   cdecl; external clib name 'gettimeofday';
 function fpgettimeofday(tp: ptimeval;tzp:ptimezone):cint;   cdecl; external clib name 'gettimeofday';