aboutsummaryrefslogtreecommitdiff
path: root/lang/gnat/files/5fosinte.adb
diff options
context:
space:
mode:
Diffstat (limited to 'lang/gnat/files/5fosinte.adb')
-rw-r--r--lang/gnat/files/5fosinte.adb139
1 files changed, 139 insertions, 0 deletions
diff --git a/lang/gnat/files/5fosinte.adb b/lang/gnat/files/5fosinte.adb
new file mode 100644
index 000000000000..33d4bcfd2b89
--- /dev/null
+++ b/lang/gnat/files/5fosinte.adb
@@ -0,0 +1,139 @@
+------------------------------------------------------------------------------
+-- --
+-- GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS --
+-- --
+-- S Y S T E M . O S _ I N T E R F A C E --
+-- --
+-- B o d y --
+-- (Version for new GNARL) --
+-- --
+-- $Revision: 1.2 $ --
+-- --
+-- Copyright (C) 1991,1992,1993,1994,1995,1996 Florida State University --
+-- --
+-- GNARL is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 2, or (at your option) any later ver- --
+-- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
+-- for more details. You should have received a copy of the GNU General --
+-- Public License distributed with GNARL; see file COPYING. If not, write --
+-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
+-- MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+-- --
+-- GNARL was developed by the GNARL team at Florida State University. It is --
+-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
+-- State University (http://www.gnat.com). --
+-- --
+------------------------------------------------------------------------------
+
+-- This is the FreeBSD THREADS version of this package
+
+-- This is only a first approximation.
+-- It should be autogenerated by the m4 macro processor.
+-- Contributed by Daniel M. Eischen (deischen@iworks.InterWorks.org)
+
+-- DO NOT EDIT this file.
+-- It was automatically generated from another file by the m4 macro processor.
+-- The name of the file you should edit is the same as this one, but with
+-- ".ads" replaced by ".sm4", or
+-- ".adb" replaced by ".bm4", or
+-- ".c" replaced by ".cm4", or
+-- ".dat" replaced by ".tm4"
+
+-- Local options selected:
+-- __TARGET = i386-unknown-freebsd
+-- __ARCH = I386
+-- __OS = FREEBSD
+-- __HAS_SIGCONTEXT = 1
+-- __HAS_UCONTEXT = 0
+-- __THREADS = POSIX_THREADS
+-- __THREAD_VARIANT = ??
+-- __HAS_TIMESPEC = 1
+-- __HAS_NANOSLEEP = 1
+-- __HAS_CLOCK_GETTIME = 0
+-- __HAS_GETTIMEOFDAY = 1
+-- __POSIX_THREAD_PRIO_PROTECT = 0
+-- __POSIX_THREAD_PRIO_INHERIT = 0
+-- __POSIX_THREAD_ATTR_STACKADDR = 1
+-- __POSIX_THREAD_ATTR_STACKSIZE = 1
+-- __POSIX_THREAD_PRIORITY_SCHEDULING = 0
+
+-- This package encapsulates all direct interfaces to OS services
+-- that are needed by children of System.
+
+-- This version is for POSIX-like operating systems
+-- The original file "s-osinte.ads_m4" contains conditional
+-- macro calls that allow selection of various options.
+
+with Interfaces.C; use Interfaces.C;
+package body System.OS_Interface is
+
+ -----------------
+ -- To_Duration --
+ -----------------
+
+ function To_Duration (TS : timespec) return Duration is
+ begin
+ return Duration (TS.ts_sec) + Duration (TS.ts_nsec) / 10#1#E9;
+ end To_Duration;
+
+ -----------------
+ -- To_Timespec --
+ -----------------
+
+ function To_Timespec (D : Duration) return timespec is
+ S : time_t;
+ F : Duration;
+ begin
+ S := time_t (Long_Long_Integer (D));
+ F := D - Duration (S);
+
+ -- If F has negative value due to a round-up, adjust for positive F
+ -- value.
+ if F < 0.0 then S := S - 1; F := F + 1.0; end if;
+ return timespec' (ts_sec => S,
+ ts_nsec => long (Long_Long_Integer (F * 10#1#E9)));
+ end To_Timespec;
+
+
+ function To_Duration (TV : struct_timeval) return Duration is
+ begin
+ return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6;
+ end To_Duration;
+
+ function To_Timeval (D : Duration) return struct_timeval is
+ S : long;
+ F : Duration;
+ begin
+ S := long (Long_Long_Integer (D));
+ F := D - Duration (S);
+
+ -- If F has negative value due to a round-up, adjust for positive F
+ -- value.
+ if F < 0.0 then S := S - 1; F := F + 1.0; end if;
+ return struct_timeval' (tv_sec => S,
+ tv_usec => long (Long_Long_Integer (F * 10#1#E6)));
+ end To_Timeval;
+
+ -- FreeBSD Pthreads has pthread_yield and it is imported as
+ -- sched_yield in 5fosinte.ads. The FreeBSD pthread_yield does
+ -- not have any parameters, so the import may be used directly
+ -- without the need for a wrapper as shown below.
+-- function sched_yield return int is
+-- procedure sched_yield_base (arg : System.Address);
+-- pragma Import (C, sched_yield_base, "pthread_yield");
+-- begin
+-- sched_yield_base (System.Null_Address);
+-- return 0;
+-- end sched_yield;
+
+end System.OS_Interface;