mirror of
https://github.com/adtools/clib2.git
synced 2025-12-08 14:59:05 +00:00
Compare commits
94 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2c1084a975 | ||
|
|
f727c0f4c4 | ||
|
|
6a149abc57 | ||
|
|
e3bde26409 | ||
|
|
bbc98790fe | ||
|
|
e7258bf939 | ||
|
|
4444438e8f | ||
|
|
6c50657673 | ||
|
|
7dcc410d0c | ||
|
|
f0503cd915 | ||
|
|
ca20eeab97 | ||
|
|
6148d06dca | ||
|
|
6578b303f7 | ||
|
|
6801a4fcf0 | ||
|
|
fa4223c544 | ||
|
|
91ccaa5ba9 | ||
|
|
234a17cc07 | ||
|
|
a41212e575 | ||
|
|
2591e249d7 | ||
|
|
5ea68e3265 | ||
|
|
0f3791a9a4 | ||
|
|
e5a2a2b451 | ||
|
|
ca1fc13792 | ||
|
|
3a0324e4ff | ||
|
|
77279e3224 | ||
|
|
75b0a762ef | ||
|
|
c635fb3ffe | ||
|
|
70d1e4b7a3 | ||
|
|
e9659f46d6 | ||
|
|
acc795df55 | ||
|
|
66303e9ba2 | ||
|
|
7e1d5d6f6a | ||
|
|
e789564429 | ||
|
|
350ffdb790 | ||
|
|
6809a5dd5b | ||
|
|
591ee2250e | ||
|
|
2b9d624d1d | ||
|
|
bf4d3b763c | ||
|
|
9984a37cb4 | ||
|
|
0b833b8680 | ||
|
|
b8ba11b158 | ||
|
|
872b2b335b | ||
|
|
b1f56b1bbe | ||
|
|
9ce2ba234f | ||
|
|
d5bfee3917 | ||
|
|
9f37f76b01 | ||
|
|
2f3de1dcd6 | ||
|
|
74b2838663 | ||
|
|
2c450a1e48 | ||
|
|
828e36f2d7 | ||
|
|
502d1aaab7 | ||
|
|
d6e18a9266 | ||
|
|
3fe72eaa44 | ||
|
|
3541b011a6 | ||
|
|
7b903355a7 | ||
|
|
36c33073a5 | ||
|
|
fba16b67fd | ||
|
|
5c29f84a0d | ||
|
|
aa3240972a | ||
|
|
8aeb5072ab | ||
|
|
42dba39aef | ||
|
|
927407de1b | ||
|
|
f3dcdfe1ce | ||
|
|
ead90dee0d | ||
|
|
1721b10610 | ||
|
|
05ef0d30bc | ||
|
|
3a7ac52248 | ||
|
|
2c81be592c | ||
|
|
e158a3fe18 | ||
|
|
40d64e1413 | ||
|
|
62d0c2dc81 | ||
|
|
940b8295c0 | ||
|
|
a91cb96b1b | ||
|
|
864a0e703e | ||
|
|
5828c6cdab | ||
|
|
cdfe0dad6f | ||
|
|
85122893ff | ||
|
|
9caa5b7ec4 | ||
|
|
6cf4cc5b4a | ||
|
|
42acda07f3 | ||
|
|
8633c3a77b | ||
|
|
5f42fb06f9 | ||
|
|
4e1c4967e6 | ||
|
|
2d48db0ce0 | ||
|
|
e2cadc9ea5 | ||
|
|
bde4d37a64 | ||
|
|
c3d55e94ec | ||
|
|
a1dc5e8e6e | ||
|
|
75a85db1a7 | ||
|
|
d4528b2862 | ||
|
|
b043a1ac1f | ||
|
|
83543472f1 | ||
|
|
601caa5708 | ||
|
|
2cf92a6395 |
@@ -1,13 +0,0 @@
|
||||
# The "checkoutlist" file is used to support additional version controlled
|
||||
# administrative files in $CVSROOT/CVSROOT, such as template files.
|
||||
#
|
||||
# The first entry on a line is a filename which will be checked out from
|
||||
# the corresponding RCS file in the $CVSROOT/CVSROOT directory.
|
||||
# The remainder of the line is an error message to use if the file cannot
|
||||
# be checked out.
|
||||
#
|
||||
# File format:
|
||||
#
|
||||
# [<whitespace>]<filename>[<whitespace><error message>]<end-of-line>
|
||||
#
|
||||
# comment lines begin with '#'
|
||||
@@ -1,15 +0,0 @@
|
||||
# The "commitinfo" file is used to control pre-commit checks.
|
||||
# The filter on the right is invoked with the repository and a list
|
||||
# of files to check. A non-zero exit of the filter program will
|
||||
# cause the commit to be aborted.
|
||||
#
|
||||
# The first entry on a line is a regular expression which is tested
|
||||
# against the directory that the change is being committed to, relative
|
||||
# to the $CVSROOT. For the first match that is found, then the remainder
|
||||
# of the line is the name of the filter to run.
|
||||
#
|
||||
# If the repository name does not match any of the regular expressions in this
|
||||
# file, the "DEFAULT" line is used, if it is specified.
|
||||
#
|
||||
# If the name "ALL" appears as a regular expression it is always used
|
||||
# in addition to the first matching regex or "DEFAULT".
|
||||
@@ -1,21 +0,0 @@
|
||||
# Set this to "no" if pserver shouldn't check system users/passwords
|
||||
#SystemAuth=no
|
||||
|
||||
# Put CVS lock files in this directory rather than directly in the repository.
|
||||
#LockDir=/var/lock/cvs
|
||||
|
||||
# Set `TopLevelAdmin' to `yes' to create a CVS directory at the top
|
||||
# level of the new working directory when using the `cvs checkout'
|
||||
# command.
|
||||
#TopLevelAdmin=no
|
||||
|
||||
# Set `LogHistory' to `all' or `TOEFWUPCGMAR' to log all transactions to the
|
||||
# history file, or a subset as needed (ie `TMAR' logs all write operations)
|
||||
#LogHistory=TOEFWUPCGMAR
|
||||
|
||||
# Set `RereadLogAfterVerify' to `always' (the default) to allow the verifymsg
|
||||
# script to change the log message. Set it to `stat' to force CVS to verify# that the file has changed before reading it (this can take up to an extra
|
||||
# second per directory being committed, so it is not recommended for large
|
||||
# repositories. Set it to `never' (the previous CVS behavior) to prevent
|
||||
# verifymsg scripts from changing the log message.
|
||||
#RereadLogAfterVerify=always
|
||||
@@ -1,19 +0,0 @@
|
||||
# This file affects handling of files based on their names.
|
||||
#
|
||||
# The -m option specifies whether CVS attempts to merge files.
|
||||
#
|
||||
# The -k option specifies keyword expansion (e.g. -kb for binary).
|
||||
#
|
||||
# Format of wrapper file ($CVSROOT/CVSROOT/cvswrappers or .cvswrappers)
|
||||
#
|
||||
# wildcard [option value][option value]...
|
||||
#
|
||||
# where option is one of
|
||||
# -f from cvs filter value: path to filter
|
||||
# -t to cvs filter value: path to filter
|
||||
# -m update methodology value: MERGE or COPY
|
||||
# -k expansion mode value: b, o, kkv, &c
|
||||
#
|
||||
# and value is a single-quote delimited value.
|
||||
# For example:
|
||||
#*.gif -k 'b'
|
||||
@@ -1,21 +0,0 @@
|
||||
# The "editinfo" file is used to allow verification of logging
|
||||
# information. It works best when a template (as specified in the
|
||||
# rcsinfo file) is provided for the logging procedure. Given a
|
||||
# template with locations for, a bug-id number, a list of people who
|
||||
# reviewed the code before it can be checked in, and an external
|
||||
# process to catalog the differences that were code reviewed, the
|
||||
# following test can be applied to the code:
|
||||
#
|
||||
# Making sure that the entered bug-id number is correct.
|
||||
# Validating that the code that was reviewed is indeed the code being
|
||||
# checked in (using the bug-id number or a seperate review
|
||||
# number to identify this particular code set.).
|
||||
#
|
||||
# If any of the above test failed, then the commit would be aborted.
|
||||
#
|
||||
# Actions such as mailing a copy of the report to each reviewer are
|
||||
# better handled by an entry in the loginfo file.
|
||||
#
|
||||
# One thing that should be noted is the the ALL keyword is not
|
||||
# supported. There can be only one entry that matches a given
|
||||
# repository.
|
||||
@@ -1,27 +0,0 @@
|
||||
# The "loginfo" file controls where "cvs commit" log information
|
||||
# is sent. The first entry on a line is a regular expression which must match
|
||||
# the directory that the change is being made to, relative to the
|
||||
# $CVSROOT. If a match is found, then the remainder of the line is a filter
|
||||
# program that should expect log information on its standard input.
|
||||
#
|
||||
# If the repository name does not match any of the regular expressions in this
|
||||
# file, the "DEFAULT" line is used, if it is specified.
|
||||
#
|
||||
# If the name ALL appears as a regular expression it is always used
|
||||
# in addition to the first matching regex or DEFAULT.
|
||||
#
|
||||
# You may specify a format string as part of the
|
||||
# filter. The string is composed of a `%' followed
|
||||
# by a single format character, or followed by a set of format
|
||||
# characters surrounded by `{' and `}' as separators. The format
|
||||
# characters are:
|
||||
#
|
||||
# s = file name
|
||||
# V = old version number (pre-checkin)
|
||||
# v = new version number (post-checkin)
|
||||
# t = tag or branch name
|
||||
#
|
||||
# For example:
|
||||
#DEFAULT (echo ""; id; echo %s; date; cat) >> $CVSROOT/CVSROOT/commitlog
|
||||
# or
|
||||
#DEFAULT (echo ""; id; echo %{sVv}; date; cat) >> $CVSROOT/CVSROOT/commitlog
|
||||
@@ -1,26 +0,0 @@
|
||||
# Three different line formats are valid:
|
||||
# key -a aliases...
|
||||
# key [options] directory
|
||||
# key [options] directory files...
|
||||
#
|
||||
# Where "options" are composed of:
|
||||
# -i prog Run "prog" on "cvs commit" from top-level of module.
|
||||
# -o prog Run "prog" on "cvs checkout" of module.
|
||||
# -e prog Run "prog" on "cvs export" of module.
|
||||
# -t prog Run "prog" on "cvs rtag" of module.
|
||||
# -u prog Run "prog" on "cvs update" of module.
|
||||
# -d dir Place module in directory "dir" instead of module name.
|
||||
# -l Top-level directory only -- do not recurse.
|
||||
#
|
||||
# NOTE: If you change any of the "Run" options above, you'll have to
|
||||
# release and re-checkout any working directories of these modules.
|
||||
#
|
||||
# And "directory" is a path to a directory relative to $CVSROOT.
|
||||
#
|
||||
# The "-a" option specifies an alias. An alias is interpreted as if
|
||||
# everything on the right of the "-a" had been typed on the command line.
|
||||
#
|
||||
# You can encode a module within a module by using the special '&'
|
||||
# character to interpose another module into the current module. This
|
||||
# can be useful for creating a module that consists of many directories
|
||||
# spread out over the entire source repository.
|
||||
@@ -1,12 +0,0 @@
|
||||
# The "notify" file controls where notifications from watches set by
|
||||
# "cvs watch add" or "cvs edit" are sent. The first entry on a line is
|
||||
# a regular expression which is tested against the directory that the
|
||||
# change is being made to, relative to the $CVSROOT. If it matches,
|
||||
# then the remainder of the line is a filter program that should contain
|
||||
# one occurrence of %s for the user to notify, and information on its
|
||||
# standard input.
|
||||
#
|
||||
# "ALL" or "DEFAULT" can be used in place of the regular expression.
|
||||
#
|
||||
# For example:
|
||||
#ALL mail -s "CVS notification" %s
|
||||
@@ -1,13 +0,0 @@
|
||||
# The "rcsinfo" file is used to control templates with which the editor
|
||||
# is invoked on commit and import.
|
||||
#
|
||||
# The first entry on a line is a regular expression which is tested
|
||||
# against the directory that the change is being made to, relative to the
|
||||
# $CVSROOT. For the first match that is found, then the remainder of the
|
||||
# line is the name of the file that contains the template.
|
||||
#
|
||||
# If the repository name does not match any of the regular expressions in this
|
||||
# file, the "DEFAULT" line is used, if it is specified.
|
||||
#
|
||||
# If the name "ALL" appears as a regular expression it is always used
|
||||
# in addition to the first matching regex or "DEFAULT".
|
||||
@@ -1,20 +0,0 @@
|
||||
# The "taginfo" file is used to control pre-tag checks.
|
||||
# The filter on the right is invoked with the following arguments:
|
||||
#
|
||||
# $1 -- tagname
|
||||
# $2 -- operation "add" for tag, "mov" for tag -F, and "del" for tag -d
|
||||
# $3 -- repository
|
||||
# $4-> file revision [file revision ...]
|
||||
#
|
||||
# A non-zero exit of the filter program will cause the tag to be aborted.
|
||||
#
|
||||
# The first entry on a line is a regular expression which is tested
|
||||
# against the directory that the change is being committed to, relative
|
||||
# to the $CVSROOT. For the first match that is found, then the remainder
|
||||
# of the line is the name of the filter to run.
|
||||
#
|
||||
# If the repository name does not match any of the regular expressions in this
|
||||
# file, the "DEFAULT" line is used, if it is specified.
|
||||
#
|
||||
# If the name "ALL" appears as a regular expression it is always used
|
||||
# in addition to the first matching regex or "DEFAULT".
|
||||
@@ -1,21 +0,0 @@
|
||||
# The "verifymsg" file is used to allow verification of logging
|
||||
# information. It works best when a template (as specified in the
|
||||
# rcsinfo file) is provided for the logging procedure. Given a
|
||||
# template with locations for, a bug-id number, a list of people who
|
||||
# reviewed the code before it can be checked in, and an external
|
||||
# process to catalog the differences that were code reviewed, the
|
||||
# following test can be applied to the code:
|
||||
#
|
||||
# Making sure that the entered bug-id number is correct.
|
||||
# Validating that the code that was reviewed is indeed the code being
|
||||
# checked in (using the bug-id number or a seperate review
|
||||
# number to identify this particular code set.).
|
||||
#
|
||||
# If any of the above test failed, then the commit would be aborted.
|
||||
#
|
||||
# Actions such as mailing a copy of the report to each reviewer are
|
||||
# better handled by an entry in the loginfo file.
|
||||
#
|
||||
# One thing that should be noted is the the ALL keyword is not
|
||||
# supported. There can be only one entry that matches a given
|
||||
# repository.
|
||||
@@ -1,30 +0,0 @@
|
||||
<!DOCTYPE html public "-//W3C//DTD HTML 3.2 Final//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>Notes on building the library</title>
|
||||
<body>
|
||||
|
||||
<h1>Notes on building the library</h1>
|
||||
|
||||
<p>In order to build the library, you need a 'C' compiler (obvious, isn't it?) and
|
||||
a set of header files for the networking API definitions. The networking header
|
||||
files go into a directory <tt>netinclude</tt> which has to sit in the same directory as
|
||||
the source code and the <tt>include</tt> directory you find in there. I'm not currently
|
||||
supplying these header files here. Drop me a line, and I'll take care of that.</p>
|
||||
|
||||
<p>The SAS/C flavour (<tt>smakefile</tt>) should get the library built using the "large data"
|
||||
model. This rules out the use of residentable programs as the startup code I'm
|
||||
using is very primitive (<tt>startup.o</tt>) and doesn't tinker with A4 relative data
|
||||
addressing (and how this may be set up).</p>
|
||||
|
||||
<p>There are two makefiles for GCC, each a different flavour. There is <tt>GNUmakefile.68k</tt>,
|
||||
which will build the library for GCC on the 68k platform ("classic" Amiga). This
|
||||
builds all variants of the library, for large data, small data, resident, whatever
|
||||
model. It's a lot of work and I don't recommend you do this on a plain 68k machine.
|
||||
It will literally (!) take hours. The other makefile flavour is for AmigaOS4 using
|
||||
the PowerPC hosted GCC system (<tt>GNUmakefile.os4</tt>). This builds only the large data
|
||||
version of the library, but this is usually all you need. Small data support is
|
||||
currently not implemented but might follow in the future.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,67 +0,0 @@
|
||||
<!DOCTYPE html public "-//W3C//DTD HTML 3.2 Final//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>Notes on using the library with Amiga GCC (68k)</title>
|
||||
<body>
|
||||
|
||||
<h1>Notes on using the library with Amiga GCC (68k)</h1>
|
||||
|
||||
<p>You can use the 68k build of clib2 with the existing Amiga 68k ports of the
|
||||
GNU 'C' compiler. In order to do so, you need to modify the <tt>specs</tt> file which
|
||||
controls how the compiler(s) and the linker interact, and where the linker
|
||||
will look for the program startup code and library files. Also, you will need
|
||||
to copy the header files, startup code and library files to the locations
|
||||
where the 'C' compiler and linker expects them.</p>
|
||||
|
||||
<p>Please read the following description before you follow the instructions. The
|
||||
changes suggested may have unexpected side-effects!</p>
|
||||
|
||||
<p>I have provided a working <tt>specs</tt> file with this documentation file. To switch
|
||||
over an existing Amiga 68k port of GCC to use clib2, you would proceed as
|
||||
follows:</p>
|
||||
|
||||
<ul>
|
||||
<li> Locate the directory within which GCC is installed. For example, this
|
||||
could be within a directory to which the name <tt>ADE:</tt>, <tt>GG:</tt> or <tt>GCC:</tt>
|
||||
is assigned. For the sake of simplicity, the following notes assume
|
||||
that the assignment name is <tt>GCC:</tt>
|
||||
|
||||
<li> Make backup copies of the following directories and files:
|
||||
<ol>
|
||||
<li> <tt>GCC:lib/gcc-lib/amigaos/2.95.3/specs</tt><br>
|
||||
|
||||
<p>(NOTE: Check the directory called <tt>GCC:lib/gcc-lib/amigaos</tt>
|
||||
first; the "2.95.3" quoted above refers to the version,
|
||||
revision and patch number of the GCC installed and your
|
||||
version number may differ!)</p>
|
||||
|
||||
<li> <tt>GCC:include</tt>
|
||||
<li> <tt>GCC:lib</tt>
|
||||
|
||||
</ol>
|
||||
|
||||
<li> Now you can proceed to install clib2; just copy the <tt>include</tt> and <tt>lib</tt>
|
||||
directories over, like this:
|
||||
<ol>
|
||||
<li><kbd>Copy include GCC:include all quiet</kbd>
|
||||
<li><kbd>Copy lib GCC:lib all quiet</kbd>
|
||||
</ol>
|
||||
|
||||
<li> Finally, replace the <tt>specs</tt> file with the one provided:
|
||||
<ol>
|
||||
|
||||
<li> <kbd>Copy specs GCC:lib/gcc-lib/amigaos/2.95.3/specs</kbd><br>
|
||||
|
||||
<p>(NOTE: Check the directory called <tt>GCC:lib/gcc-lib/amigaos</tt>
|
||||
first; the "2.95.3" quoted above refers to the version,
|
||||
revision and patch number of the GCC installed and your
|
||||
version number may differ!)</p>
|
||||
</ol>
|
||||
</ul>
|
||||
|
||||
<p>Once you have completed these steps you should be able to build programs using
|
||||
the 68k build of clib2 and you currently installed GCC. Note that these
|
||||
changes may have the effect of rendering your C++ compiler unusable, so make
|
||||
sure that you've made backup copies of all files and directories first!</p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,517 +0,0 @@
|
||||
<!DOCTYPE html public "-//W3C//DTD HTML 3.2 Final//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>An ISO 'C' (1994) compliant runtime library for the Amiga</title>
|
||||
<body>
|
||||
|
||||
<h1>An ISO 'C' (1994) compliant runtime library for the Amiga</h1>
|
||||
|
||||
<h2>1. What is this?</h2>
|
||||
|
||||
<p>This is my attempt to get Samba 2.2.x ported to the Amiga. My first Amiga
|
||||
port required SAS/C and a number of strange tricks had to be pulled to get
|
||||
it to support the kind of environment Samba needed. But with the
|
||||
introduction of Samba 2.2.x many of those tricks did not work any more,
|
||||
which is why I decided to attack the problem at the root, namely the
|
||||
runtime library.</p>
|
||||
|
||||
<p>Because it was no longer possible to build Samba with SAS/C on the new
|
||||
Amiga platform, the idea came up to move development to the GNU 'C'
|
||||
compiler. This turned out to be a challenge due to its somewhat
|
||||
underdeveloped runtime library and header files. Eventually, I decided to
|
||||
rewrite that library from scratch.</p>
|
||||
|
||||
|
||||
<h2>2. What does it do?</h2>
|
||||
|
||||
<p>Using <i>'C' - A reference manual</i> (4th edition) as a reference I wrote a set of
|
||||
header files, then proceeded to implement each single function referenced in
|
||||
them. With few exceptions in the area of wide character support, the result
|
||||
should be a feature complete implementation of the ISO 'C' (1994) runtime
|
||||
library. The library was subsequently updated to offer functionality defined in
|
||||
<i>ISO/IEC 9899:1999</i>, also known as <i>C99</i>.</p>
|
||||
|
||||
<p>Because Samba needs a few POSIX-like routines to be supported, the library
|
||||
functionality is complemented by a set of routines described in <i>Advanced
|
||||
programming in the Unix environent</i>.</p>
|
||||
|
||||
<p>This is not a portable implementation of the library in the sense that you
|
||||
could move it from one 'C' compiler on one operating system to another.
|
||||
This is an Amiga specific implementation.</p>
|
||||
|
||||
<p>The library supports floating point math, which, for the 68k platform, is
|
||||
limited to IEEE single and double precision or M68881 inline math. There is no
|
||||
support for the fast floating point (FFP) format or exclusive IEEE single
|
||||
precision. You either get double precision (IEEE math) or extended precision
|
||||
(M68881 inline math). What it is that you get is determined at compile time.
|
||||
Use the <tt>IEEE_FLOATING_POINT_SUPPORT</tt> preprocessor symbol to activate IEEE math
|
||||
code and the <tt>M68881_FLOATING_POINT_SUPPORT</tt> symbol for M68881 inline math.</p>
|
||||
|
||||
<p>For the PowerPC platform, the library uses code borrowed from <i>fdlibm 5.3</i>,
|
||||
which is a portable library of arithmetic functions developed by Sun
|
||||
Microsystems which, for example, is also used within the Java platform.</p>
|
||||
|
||||
<h2>3. What does it not do?</h2>
|
||||
|
||||
<p>This library is a departure from the typical 'C' runtime environments of the
|
||||
past which had to run on all AmigaOS releases, down to Kickstart 1.1. This
|
||||
very library was designed to take advantage of the routines available since
|
||||
Kickstart 2.04 was introduced and virtually nobody ever put to use. This helps
|
||||
to cut the code size, and it also helps to keep bugs out of the library by
|
||||
falling back onto well-tested implementations. However, the catch is that the
|
||||
code won't run under Kickstart 1.3 and below. But then these operating system
|
||||
releases have been obsolete for more than a decade, and you can always go back
|
||||
to a compiler environment which supports them.</p>
|
||||
|
||||
<p>There is very little support for <tt>amiga.lib</tt> functionality. There is <tt>NewList()</tt>,
|
||||
<tt>HookEntry()</tt>, <tt>CallHook()</tt>, <tt>CallHookA()</tt>, the <tt>DoMethod()</tt> family, the RexxVars
|
||||
family, but that's all. If you need more, you would have to implement it
|
||||
yourself. Put another way, if you absolutely need functionality that is only
|
||||
found in <tt>amiga.lib</tt>, you really shouldn't need it in the first place.</p>
|
||||
|
||||
|
||||
<h2>4. Where does the source code come from?</h2>
|
||||
|
||||
<p>I originally thought that it might be helpful to piece this library together
|
||||
from various sources, such as the BSD libc. It turned out that this code was so
|
||||
'portable' that it became much more complex than it ought to be. Also, some
|
||||
side-effects were present which considerably changed the behaviour of the
|
||||
library. For example, the BSD libc uses <tt>bcopy()</tt> as an alias for <tt>memcpy()</tt>, and
|
||||
unlike <tt>memcpy()</tt> is documented to, <tt>bcopy()</tt> supports overlapping copies.</p>
|
||||
|
||||
<p>Eventually, I wrote virtually all the code myself, borrowing algorithmic ideas
|
||||
from the BSD libc and the Manx Aztec 'C' runtime library. Because I don't know
|
||||
much about the environment GCC expects, I borrowed code snippets from libnix,
|
||||
which was written by Matthias Fleischer and Gunther Nikl. This in particular
|
||||
concerns the integer and floating point math support, the <tt>setjmp</tt>/<tt>longjmp</tt>
|
||||
routines and the startup code. The M68881 inline math code comes from the
|
||||
<tt><math-68881.h></tt> file written by Matthew Self <tt>(self [at] bayes.arc.nasa.gov)</tt>.</p>
|
||||
|
||||
|
||||
<h2>5. Limitations and caveats</h2>
|
||||
|
||||
<p>There is hardly any documentation on the code I wrote. In part this is due to
|
||||
the fact that the code itself is very simple in design. It should speak for
|
||||
itself. However, to make a usable runtime library you have to have a user
|
||||
documentation as in man pages or AutoDocs. We will eventually have to have
|
||||
autodocs for this library.</p>
|
||||
|
||||
<p>The exception handling in the math code is not particularly effective. For one
|
||||
part this is due to the fact that there is no exception handler installed by
|
||||
the runtime library when it starts up which could catch and process the error
|
||||
conditions the CPU or FPU generates. The idea was to provide for a portable
|
||||
runtime library with little to no assembly language involved. To make the
|
||||
exception handling complete, such code would be necessary.</p>
|
||||
|
||||
<p>The library currently builds under SAS/C, but because the 'normal' program
|
||||
startup code is not utilized, the base relative (A4) addressing does not work.
|
||||
If you are going to test it, use the <tt>data=faronly</tt> option to compile the
|
||||
library and the programs.</p>
|
||||
|
||||
<p>Different build makefiles are supplied for use with GCC. There is a
|
||||
<tt>GNUmakefile.68k</tt> for the 68k platform and a <tt>GNUmakefile.os4</tt> for the AmigaOS4
|
||||
PowerPC version.</p>
|
||||
|
||||
<h3>5.1 Floating point math and functions (<tt>scanf()</tt>, <tt>printf()</tt>, etc.) </h3>
|
||||
|
||||
<p>The plain <tt>libc.a</tt>, which your software would be linked against by default, does not contain
|
||||
any floating point support code. This means, for example, that <tt>printf("%f",...)</tt> will not produce
|
||||
the desired output and that <tt>scanf("%f",...)</tt> may not read any data at all. If your
|
||||
program needs functions such as these or <tt>atod()</tt> then you must link against <tt>libm.a</tt> or
|
||||
the equivalent.</p>
|
||||
|
||||
<p>To link the floating point support code with your software, use the <tt>-lm</tt> compiler option. <em>Careful!</em>
|
||||
The order in which you specify the libraries to link against is important here. Thus, <tt>gcc -o test test.c -lm -lc</tt>
|
||||
would correctly link the program <tt>test</tt> against the proper floating point math library, but
|
||||
<tt>gcc -o test test.c -lc -lm</tt> would not.</p>
|
||||
|
||||
<h3>5.2 The thread-safe library</h3>
|
||||
|
||||
<p>Thread-safety does not imply that you can have multiple callers
|
||||
access and close the same file. There is no resource tracking to that degree
|
||||
yet. All that the thread-safety tries to afford you is not to get into big trouble
|
||||
if simultaneous and overlapping accesses to files, memory allocation and other
|
||||
resources are taking place.</p>
|
||||
|
||||
<p>The library code is supposed to be thread-safe if built with the <tt>__THREAD_SAFE</tt>
|
||||
preprocesssor symbol defined. Note that 'thread-safe' does <em>not</em> mean
|
||||
'reentrant'. Multiple callers for certain library functions are permitted, but
|
||||
not for all of them. For example, <tt>mkdtemp()</tt> is not thread-safe, and neither is
|
||||
<tt>rand()</tt> or <tt>localtime()</tt>. But as per <i>POSIX 1003.1c-1995</i> there are thread-safe
|
||||
variants of <tt>rand()</tt> and <tt>localtime()</tt> called <tt>rand_r()</tt>, <tt>localtime_r()</tt>, and others.</p>
|
||||
|
||||
<p>The use of the socket I/O functions is problematic because the
|
||||
underlying <tt>bsdsocket.library</tt> API is not supposed to be used by any process
|
||||
other than the one which opened it. While one TCP/IP stack (my own "Roadshow") allows you
|
||||
to share the library base among different processes, if so configured, it is the
|
||||
exception. No other TCP/IP stack available for the Amiga robustly supports a similar
|
||||
feature. If the TCP/IP stack supports this feature, then the global variable
|
||||
<tt>__can_share_socket_library_base</tt> will be set to a non-zero value.</p>
|
||||
|
||||
<p>Errors reported by the socket I/O functions which modify the global variables
|
||||
<tt>errno</tt> and <tt>h_errno</tt> may be directed to call the <tt>__set_errno()</tt>
|
||||
and <tt>__set_h_errno()</tt> functions instead, if the TCP/IP stack supports this feature. The global
|
||||
variable <tt>__thread_safe_errno_h_errno</tt> will be set to a non-zero value if it does.</p>
|
||||
|
||||
<p>A much more serious problem resides with the <tt>exit()</tt>, <tt>abort()</tt>,
|
||||
<tt>assert()</tt> and <tt>raise()</tt> functions, and how the <tt>SIGINT</tt> signal is
|
||||
processed. In the thread-safe library only the <tt>main()</tt> function may directly
|
||||
or indirectly call the <tt>exit()</tt> function. No child process may do so, since this
|
||||
would wreck its stack context, crashing it instantly; the main program would be very
|
||||
likely to crash, too, because <tt>exit()</tt> will clean up after all memory allocations
|
||||
and files currently in use. Functions such as <tt>abort()</tt> and <tt>raise()</tt> may
|
||||
call the <tt>exit()</tt> function indirectly. And the <tt>raise()</tt> function may
|
||||
be invoked as part of the <tt>Control+C</tt> checking. You should make sure that the
|
||||
signal handling does not affect any child processes. This can be done by replacing the
|
||||
<tt>__check_abort()</tt> function or by disabling <tt>SIGINT</tt> processing altogether,
|
||||
such as through a <tt>signal(SIGINT,SIG_IGN)</tt> call.</p>
|
||||
|
||||
<p> Also take care with file I/O involving the <tt>stdin</tt>/<tt>stdout</tt>/<tt>stderr</tt>
|
||||
streams; read/write operations on these streams will be mapped to the <tt>Input()</tt>/<tt>Output()</tt>/<tt>ErrorOutput()</tt>
|
||||
file handles of the process performing these operations. Since only this small set of
|
||||
operations is mapped, functions such as <tt>fcntl()</tt> or <tt>select()</tt> will not
|
||||
work on the <tt>stdin</tt>/<tt>stdout</tt>/<tt>stderr</tt> streams and the corresponding
|
||||
file descriptors <tt>STDIN_FILENO</tt>/<tt>STDOUT_FILENO</tt>/<tt>STDERR_FILENO</tt>.
|
||||
It is therefore strongly recommended to use the thread-safe library only for applications
|
||||
which can cope with the limitations described above.</p>
|
||||
|
||||
<h3>5.3 Using gmon (PowerPC only)</h3>
|
||||
|
||||
<p>To use profiling, two steps are required. First of all, your program must be compiled with
|
||||
the gcc command line option <tt>-pg</tt>. This instructs the compiler to generate special
|
||||
profiling code in the prologue and epilogue of each function. Additionally, the program
|
||||
must be linked with <tt>libprofile.a</tt>. To do this, either manually add
|
||||
<tt>-lprofile</tt> to the linker command line, or modify the specs file as follows.
|
||||
Find the lines that look like this (it may actually differ silghtily from your specs file,
|
||||
but the important thing is that the line before the line to be modified reads <tt>lib:</tt>):
|
||||
<pre>
|
||||
lib:
|
||||
--start-group -lc --end-group
|
||||
</pre>
|
||||
You will have to modify this to look like this:
|
||||
<pre>
|
||||
lib:
|
||||
%{pg: -lprofile} --start-group -lc --end-group
|
||||
</pre>
|
||||
<p>Normally, the specs file is located at the compilers installation directory. For cross-compilers,
|
||||
this is <tt>/usr/local/amiga/lib/gcc/ppc-amigaos/<i>compiler-version</i>/specs</tt>. For a native compiler,
|
||||
it's in <tt>gcc:lib/gcc/ppc-amigaos/<i>compiler-version</i>/specs</tt>. Most likely, your compiler will already have this added to it's specs file.</p>
|
||||
|
||||
<p>Profiling makes use of a special PowerPC facility called the Performance Monitor. It
|
||||
allows to "mark" tasks and count only during while a marked task is running. This allows
|
||||
performance analysis to be made independant of the actual system load. The Performace Monitor
|
||||
is available on all PowerPC models supported by AmigaOS 4 except for the <tt>603e</tt>, and
|
||||
embedded versions of the PowerPC like the <tt>405</tt> and <tt>440</tt> series. Consult the manual
|
||||
of the appropriate chip for more information.</p>
|
||||
|
||||
<h3>5.4 Implementation defined behaviour</h3>
|
||||
|
||||
<h4>5.4.1. 'C' language</h4>
|
||||
|
||||
<h5>5.4.1.1. Environment</h5>
|
||||
|
||||
<p>The <tt>main(int argc,char **argv);</tt> function may be called with an <tt>argc</tt> value of 0,
|
||||
in which case the <tt>argv</tt> variable will contain a pointer to the Amiga Workbench startup
|
||||
message, which is of type <tt>struct WBStartup *</tt>, and is defined in the Amiga system header
|
||||
file <tt><workbench/startup.h></tt>.</p>
|
||||
|
||||
<h5>5.4.1.2. Characters</h5>
|
||||
|
||||
<p>The current locale is derived from the current Amiga operating system locale settings. The
|
||||
<tt>setlocale("")</tt> function call will choose the current Amiga operating system locale settings.
|
||||
Any other name passed to the <tt>setlocale()</tt> function, with the exception of <tt>"C"</tt>,
|
||||
which selects the 'C' locale, must be a locale name, as used by the Amiga operating system
|
||||
function <tt>OpenLocale()</tt> in <tt>locale.library</tt>.</p>
|
||||
|
||||
<h5>5.4.1.3. Floating-point</h5>
|
||||
|
||||
<p>The 68k version of clib2 supports single and double precision floating point numbers,
|
||||
according to the <i>IEEE 754</i> standard. The software floating point number support is built upon the Amiga
|
||||
operating system libraries <tt>mathieeesingbas.library</tt>, <tt>mathieeedoubbas.library</tt>
|
||||
and <tt>mathieeedoubtrans.library</tt>. The hardware floating point number support uses
|
||||
the M68881/M68882/M68040/M68060 floating point unit intead.</p>
|
||||
|
||||
<p>The PowerPC version of clib2 supports only double precision floating point numbers, according to
|
||||
the <i>IEEE 754</i> standard, because that is exactly what the PowerPC CPU supports. Single precision
|
||||
numbers may be implicitly converted to double precision numbers. This also means that the <i>C99</i>
|
||||
data type <tt>long double</tt> is identical to the <tt>double</tt> data type. Because there is no
|
||||
difference between these two, the library omits support for <i>C99</i> functions specifically designed
|
||||
to operate on <tt>long double</tt> data types, such as <tt>rintl()</tt>.</p>
|
||||
|
||||
<p>Both the 68k and the PowerPC versions of clib2 may call software floating point support
|
||||
routines in order to perform double and single precision operations that go beyond
|
||||
simple addition and multiplication, such as <tt>sqrt()</tt>. These functions come from
|
||||
Sun Microsystems <i>fdlibm 5.3</i> library.</p>
|
||||
|
||||
<p>Unless your software is linked against <tt>libm.a</tt> no floating point functions will
|
||||
be available to it, possibly causing a linker error. When using the GNU 'C' compiler, you will
|
||||
want to add the option <tt>-lm -lc</tt> to the linker command line.</p>
|
||||
|
||||
<p>The exception handling is currently entirely out of control of the developer
|
||||
and solely subject to the rules imposed by the operating system itself.</p>
|
||||
|
||||
<p>The <tt>fmod()</tt> function returns the value of the <tt>x</tt> parameter and
|
||||
sets <tt>errno</tt> to <tt>EDOM</tt> if the <tt>y</tt> parameter value is 0.</p>
|
||||
|
||||
<h4>5.4.2. Library functions</h4>
|
||||
|
||||
<h5>5.4.2.1. <tt>NULL</tt></h5>
|
||||
|
||||
<p>The <tt>NULL</tt> pointer constant is defined in the <tt><stddef.h></tt> header and
|
||||
will expand to <tt>((void *)0L)</tt> if the 'C' compiler is used. For a C++ compiler the constant
|
||||
will expand to <tt>0L</tt> instead.</p>
|
||||
|
||||
<h5>5.4.2.2. <tt>assert()</tt> diagnostic messages</h5>
|
||||
|
||||
<p>The diagnostic messages printed by the <tt>assert()</tt> function take the following form:</p>
|
||||
|
||||
<blockquote><tt>[<i>program name</i>] <i>file</i>:<i>line</i>: failed assertion "<i>condition</i>".</tt></blockquote>
|
||||
|
||||
<p>where:</p>
|
||||
<table border=0>
|
||||
<tr><th align=right>program name</th><td>Optional program name; if the program name is not yet known, then the
|
||||
entire text enclosed in square brackets will be omitted.</td></tr>
|
||||
<tr><th align=right>file</th><td>The value of the <tt>__FILE__</tt> symbol at the location of the <tt>assert()</tt> call.</td></tr>
|
||||
<tr><th align=right>line</th><td>The value of the <tt>__LINE__</tt> symbol at the location of the <tt>assert()</tt> call.</td></tr>
|
||||
<tr><th align=right>condition</th><td>The condition passed to the <tt>assert()</tt> function.</td></tr>
|
||||
</table>
|
||||
|
||||
<p>If available, the diagnostic messages will be sent to <tt>stderr</tt>.</p>
|
||||
|
||||
<p>If the program was launched from Workbench or if the global variable <tt>__no_standard_io</tt> is set
|
||||
to a non-zero value, then the assertion failure message will not be displayed in the shell window, but
|
||||
in a requester window. The diagnostic message shown in this window will take the following form:</p>
|
||||
|
||||
<blockquote><tt>Assertion of condition "<i>condition</i>" failed in file "<i>file</i>", line <i>line</i>.</tt></blockquote>
|
||||
|
||||
<p>The name of the program, if it is know at that time, will be displayed in the requester window title.</p>
|
||||
|
||||
<h5>5.4.2.3. Signal handling</h5>
|
||||
|
||||
<p>Only the minimum of required signals are supported by this library. These are <tt>SIGABRT</tt>, <tt>SIGFPE</tt>,
|
||||
<tt>SIGILL</tt>, <tt>SIGINT</tt>, <tt>SIGSEGV</tt> and <tt>SIGTERM</tt>.</p>
|
||||
|
||||
<p>As of this writing <tt>SIGFPE</tt> is never called by the floating point library functions.</p>
|
||||
|
||||
<p>The <tt>Ctrl+C</tt> event is translated into <tt>SIGINT</tt>. Signal delivery may be delayed
|
||||
until a library function which polls for the signal examines it. This means, for example, that
|
||||
a runaway program caught in an infinite loop cannot be aborted by sending it a <tt>Ctrl+C</tt> event unless special code
|
||||
is added which tests for the presence of the signal and calls the <tt>__check_abort()</tt> all on its own.</p>
|
||||
|
||||
<p>Processing of the <tt>Ctrl+C</tt> event involves the internal <tt>__check_abort()</tt> function which
|
||||
polls for the presence of the event and which will call <tt>raise(SIGINT);</tt>. The <tt>__check_abort()</tt>
|
||||
function may be replaced by user code.</p>
|
||||
|
||||
<h5>5.4.2.4. Files</h5>
|
||||
|
||||
<p>No new line characters are written unless specifically requested.</p>
|
||||
|
||||
<p>Space characters in a text stream before a new line character are read in and not discarded.</p>
|
||||
|
||||
<p>When data is read from a file, the last character does not have to be a new line character.</p>
|
||||
|
||||
<p>No NUL byte will be appended to data written to a binary stream.</p>
|
||||
|
||||
<p>There is no difference between text and binary streams.</p>
|
||||
|
||||
<p>Writing to a text or binary stream does not truncate the associated file. A stream may be
|
||||
truncated by the initial <tt>fopen()</tt> call if the <tt>mode</tt> parameter starts with
|
||||
the letter <tt>w</tt>.</p>
|
||||
|
||||
<p>The file position indicator is initially set to the end of an append mode stream.</p>
|
||||
|
||||
<h5>5.4.2.5. <tt>printf()</tt> family</h5>
|
||||
|
||||
<p>The <tt>%p</tt> conversion is the hexadecimal representation of the pointer, and
|
||||
it is preceded by the string <tt>0x</tt>.</p>
|
||||
|
||||
<p>The <tt>%a</tt>, <tt>%e</tt>, <tt>%f</tt>, <tt>%g</tt>, <tt>%A</tt>,
|
||||
<tt>%E</tt>, <tt>%F</tt> and <tt>%G</tt> specifiers will produce the string <tt>inf</tt>
|
||||
for infinity.</p>
|
||||
|
||||
<h5>5.4.2.6. <tt>scanf()</tt> family</h5>
|
||||
|
||||
<p>The input for the <tt>%p</tt> conversion must be a hexadecimal number,
|
||||
preceded by either the string <tt>0x</tt> or <tt>0X</tt>.</p>
|
||||
|
||||
<p>In the <tt>%[</tt> conversion a <tt>-</tt> (dash) character that is neither the
|
||||
first nor the last character in the scanset indicates that a subrange of
|
||||
characters should be used. Thus <tt>%[a-d]</tt> is equivalent to <tt>%[abcd]</tt>.</p>
|
||||
|
||||
<p>The period (.) is the decimal-point character. The locale specific decimal-point
|
||||
character is accepted as an alternative to the period (.).</p>
|
||||
|
||||
<h5>5.4.2.7. <tt>malloc()</tt>, <tt>realloc()</tt> and <tt>calloc()</tt></h5>
|
||||
|
||||
<p>In the standard <tt>libc.a</tt> implementation any request to allocate
|
||||
0 (zero) bytes will fail. A result value of <tt>NULL</tt> will be returned and
|
||||
the global <tt>errno</tt> variable will be set to <tt>EINVAL</tt>.</p>
|
||||
|
||||
<p>In the <tt>libunix.a</tt> implementation a request to allocate
|
||||
0 (zero) bytes will result in an allocation of at least 4 bytes, which will
|
||||
be set to zero. Each zero length allocation will return a different
|
||||
memory address.</p>
|
||||
|
||||
<h5>5.4.2.8. <tt>rename()</tt></h5>
|
||||
|
||||
<p>In the standard <tt>libc.a</tt> implementation the <tt>rename()</tt> function
|
||||
will fail if there already is a file or directory by the new name to be used.</p>
|
||||
|
||||
<p>In the <tt>libunix.a</tt> implementation the <tt>rename()</tt> function will
|
||||
delete any existing file or directory by the new name.</p>
|
||||
|
||||
<h5>5.4.2.9. <tt>remove()</tt></h5>
|
||||
|
||||
<p>In the standard <tt>libc.a</tt> implementation the <tt>remove()</tt> function
|
||||
will fail if the file is protected by deletion or currently in use.</p>
|
||||
|
||||
<p>In the <tt>libunix.a</tt> implementation the <tt>remove()</tt> function
|
||||
will remove the file when the program exits or the file is closed.</p>
|
||||
|
||||
<h5>5.4.2.10. <tt>abort()</tt></h5>
|
||||
|
||||
<p>The <tt>abort()</tt> function will flush all buffered files,
|
||||
close all the files currently open and delete temporary files.</p>
|
||||
|
||||
<h5>5.4.2.11. <tt>exit()</tt> and <tt>_Exit()</tt></h5>
|
||||
|
||||
<p>The value passed to the <tt>exit()</tt> function will be passed to the
|
||||
Amiga operating system. The value of <tt>EXIT_FAILURE</tt> is equivalent
|
||||
to <tt>RETURN_FAIL</tt> as defined in the Amiga system header file
|
||||
<tt><dos/dos.h></tt>; this value maps to the number 20. The value
|
||||
of <tt>EXIT_SUCCESS</tt> is equivalent to <tt>RETURN_OK</tt> as defined in
|
||||
the Amiga system header file <tt><dos/dos.h></tt>; this value maps to
|
||||
the number 0.</p>
|
||||
|
||||
<p>The <tt>_Exit()</tt> function will flush all buffered files,
|
||||
close all the files currently open and delete temporary files.</p>
|
||||
|
||||
<h5>5.4.2.12. <tt>getenv()</tt></h5>
|
||||
|
||||
<p>Environment data is retrieved from the global Amiga operating system environment
|
||||
storage area through the <tt>dos.library/GetEnv()</tt> function. Global variables are
|
||||
stored in files in the <tt>ENV:</tt> directory.</p>
|
||||
|
||||
<h5>5.4.2.13. <tt>system()</tt></h5>
|
||||
|
||||
<p>If the <tt>command</tt> parameter is not NULL and the <tt>system()</tt> function returns, then the result will
|
||||
be equivalent to the exit code of the program invoked, or -1 if the program could not be started.
|
||||
This follows the behaviour of the Amiga operating system function <tt>dos.library/System()</tt>.
|
||||
A return value of 0 typically indicates successful execution and a value > 0
|
||||
typically indicates failure.</p>
|
||||
|
||||
<h5>5.4.2.14. Time</h5>
|
||||
|
||||
<p>The default time zone is derived from the Amiga operating system locale
|
||||
settings and takes the form <tt>GMT+<i>hh</i></tt> or <tt>GMT-<i>hh</i></tt>,
|
||||
respectively, in which <i>hh</i> stands for the difference between the local
|
||||
time zone and Greenwich Mean Time.</p>
|
||||
|
||||
<p>The <tt>clock_t</tt> and <tt>time_t</tt> types are unsigned 32 bit integers.
|
||||
The <tt>time_t</tt> epoch starts with midnight January 1st, 1970.</p>
|
||||
|
||||
<p>Daylight savings time is not supported.</p>
|
||||
|
||||
<p>The reference point used by the <tt>clock()</tt> function is the time
|
||||
when the program was started.</p>
|
||||
|
||||
<h4>5.4.3. Locale specific behaviour</h4>
|
||||
|
||||
<p>The direction of printing is from left to right.</p>
|
||||
|
||||
<p>The period (.) is the decimal-point character.</p>
|
||||
|
||||
<p>The <tt>strftime()</tt> behaviour follows the Amiga operating system locale
|
||||
settings. If the 'C' locale is in effect, then the output generated by the
|
||||
<tt>%Z</tt> takes the form <tt>GMT+<i>hh</i></tt> or <tt>GMT-<i>hh</i></tt>,
|
||||
respectively, in which <i>hh</i> stands for the difference between the local
|
||||
time zone and Greenwich Mean Time.</p>
|
||||
|
||||
<h2>6. Conventions and design issues</h2>
|
||||
|
||||
<p>You will have noticed the 330+ files in this directory. This is not the best
|
||||
way to organize a runtime library, but at least all the bits and pieces are in
|
||||
plain sight. Each file stands for the one or two routines it contains. The
|
||||
name indicates what routine(s) that might be. Each file name is prefixed by
|
||||
the name of the header file in which the corresponding routine is defined. So,
|
||||
for example, you will find that <tt>unistd_lchown.c</tt> contains the definition of
|
||||
the <tt>lchown()</tt> routine, which has its prototype defined in the <tt><unistd.h></tt> header
|
||||
file.</p>
|
||||
|
||||
<p>Internal function and variables which need to be visible across several
|
||||
modules have names prefixed with two underscores, as in <tt>__stdio_init()</tt>.</p>
|
||||
|
||||
<p>By default all library routines follow the ISO 'C' conventions in that where
|
||||
implementation defined behaviour is permitted, the AmigaOS rules are followed.
|
||||
For example, <tt>unlink()</tt> will by default operate like <tt>DeleteFile()</tt> and <tt>rename()</tt>
|
||||
will return with an error code set if the name of the file/directory to be
|
||||
renamed would collide with an existing directory entry.</p>
|
||||
|
||||
|
||||
<h2>7. The startup code</h2>
|
||||
|
||||
<p>There are three program startup files provided. The most simplistic is in
|
||||
<tt>startup.c</tt> which I use for SAS/C. It just invokes the setup routine which
|
||||
eventually calls <tt>main()</tt> and drops straight into <tt>exit()</tt>.</p>
|
||||
|
||||
<p>The <tt>ncrt0.S</tt> file was adapted from the libnix startup code which sets up the
|
||||
base relative data area, if necessary (the <tt>SMALL_DATA</tt> preprocessor symbol must
|
||||
be defined).</p>
|
||||
|
||||
<p>The <tt>nrcrt0.S</tt> file was adapted from libnix startup code, too, and sets up the
|
||||
base relative data area for programs to be made resident. Note that the
|
||||
<tt>geta4()</tt> stub is missing here; it wouldn't work in a resident program anyway.</p>
|
||||
|
||||
<p>The <tt>ncrt0.S</tt> and <tt>nrcrt0.S</tt> files are considerably smaller and less complex than
|
||||
the libnix code they are based on. This is because in this library design all
|
||||
the more complex tasks are performed in the <tt>stdlib_main.c</tt> file rather than in
|
||||
assembly language.</p>
|
||||
|
||||
|
||||
<h2>8. Documentation</h2>
|
||||
|
||||
<p>Well, you're reading it. There isn't anything much yet. You can consult the book
|
||||
<i>'C' - A reference manual</i> and you could look at the
|
||||
<a href="http://www.opengroup.org/onlinepubs/007904975">Open Group's Single Unix
|
||||
Specification</a>.</p>
|
||||
|
||||
<p>It is recommended to browse the contents of the <tt>include</tt> directory. The
|
||||
header files contain information on library behaviour and not just data type and
|
||||
function prototype definitions. Specifically, the <tt><dos.h></tt> header file
|
||||
contains documentation about special libraries and global variables which may be
|
||||
used or replaced by user code.</p>
|
||||
|
||||
|
||||
<h2>9. Legal status</h2>
|
||||
|
||||
<p>Because this library is in part based upon free software it would be
|
||||
uncourteous not to make it free software itself. The BSD license would
|
||||
probably be appropriate here.</p>
|
||||
|
||||
<p>The PowerPC math library is based in part on work by Sun Microsystems:</p>
|
||||
|
||||
<pre>
|
||||
====================================================
|
||||
Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
|
||||
Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
Permission to use, copy, modify, and distribute this
|
||||
software is freely granted, provided that this notice
|
||||
is preserved.
|
||||
====================================================
|
||||
</pre>
|
||||
|
||||
<h2>10. Contacting the author</h2>
|
||||
|
||||
<p>The basic work was done by Olaf Barthel during two weeks in July 2002. You
|
||||
can reach me at:</p>
|
||||
|
||||
<p>Olaf Barthel<br>
|
||||
Gneisenaustr. 43<br>
|
||||
D-31275 Lehrte<br></p>
|
||||
|
||||
<p>Or via e-mail:</p>
|
||||
|
||||
<p>olsen [at] sourcery.han.de</p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,64 +0,0 @@
|
||||
*asm:
|
||||
%{m68000:-mc68010} %{mc68000:-mc68010} %{m68020:-mc68020} %{mc68020:-mc68020} %{m68030:-mc68030} %{m68040:-mc68040} %{m68060:-mc68060} %{m68020-40:-mc68020} %{m68020-60:-mc68020} %{!mc68000:%{!m68000:%{!mc68020:%{!m68020:%{!m68030:%{!m68040:%{!m68060:%{!m68020-40:%{!m68020-60:-mc68010}}}}}}}}} %{msmall-code:-sc}
|
||||
|
||||
*asm_final:
|
||||
|
||||
|
||||
*cpp:
|
||||
%{m68881:-D__HAVE_68881__} %{!ansi:%{m68020:-Dmc68020} %{mc68020:-Dmc68020} %{m68020-40:-Dmc68020} %{m68020-60:-Dmc68020} %{m68030:-Dmc68030} %{m68040:-Dmc68040} %{m68060:-Dmc68060}} %{m68020:-D__mc68020__ -D__mc68020} %{mc68020:-D__mc68020__ -D__mc68020} %{m68020-40:-D__mc68020__ -D__mc68020} %{m68020-60:-D__mc68020__ -D__mc68020} %{m68030:-D__mc68030__ -D__mc68030} %{m68040:-D__mc68040__ -D__mc68040} %{m68060:-D__mc68060__ -D__mc68060}
|
||||
|
||||
*cc1:
|
||||
%{resident:-fbaserel} %{resident32:-fbaserel32} %{msmall-code:-fno-function-cse}
|
||||
|
||||
*cc1plus:
|
||||
|
||||
|
||||
*endfile:
|
||||
|
||||
|
||||
*link:
|
||||
%{fbaserel:%{!resident:-m amiga_bss -fl libb}} %{resident:-m amiga_bss -amiga-datadata-reloc -fl libb} %{fbaserel32:%{!resident32:-m amiga_bss -fl libb32}} %{resident32:-m amiga_bss -amiga-datadata-reloc -fl libb32} %{g:-amiga-debug-hunk} %{m68020:-fl libm020} %{mc68020:-fl libm020} %{m68030:-fl libm020} %{m68040:-fl libm020} %{m68060:-fl libm020} %{m68020-40:-fl libm020} %{m68020-60:-fl libm020}
|
||||
|
||||
*lib:
|
||||
%{mstackextend:-lstack} -lc -lamiga -ldebug -lgcc -lc
|
||||
|
||||
*libgcc:
|
||||
|
||||
|
||||
*startfile:
|
||||
%{resident32:nr32crt0.o%s}%{!resident32:%{fbaserel32:nb32crt0.o%s}%{!fbaserel32:%{resident:nrcrt0.o%s}%{!resident:%{fbaserel:nbcrt0.o%s}%{!fbaserel:ncrt0.o%s}}}}
|
||||
|
||||
*switches_need_spaces:
|
||||
|
||||
|
||||
*signed_char:
|
||||
%{funsigned-char:-D__CHAR_UNSIGNED__}
|
||||
|
||||
*predefines:
|
||||
-Dmc68000 -Damiga -Damigaos -DMCH_AMIGA -DAMIGA -D__chip=__attribute__((__chip__)) -D__saveds=__attribute__((__saveds__)) -D__interrupt=__attribute__((__interrupt__)) -D__stackext=__attribute__((__stackext__)) -D__regargs=__attribute__((__regparm__)) -D__stdargs=__attribute__((__stkparm__)) -D__aligned=__attribute__((__aligned__(4))) -Asystem(amigaos) -Acpu(m68k) -Amachine(m68k)
|
||||
|
||||
*cross_compile:
|
||||
0
|
||||
|
||||
*version:
|
||||
2.95.3
|
||||
|
||||
*multilib:
|
||||
. ;
|
||||
|
||||
*multilib_defaults:
|
||||
|
||||
|
||||
*multilib_extra:
|
||||
|
||||
|
||||
*multilib_matches:
|
||||
|
||||
|
||||
*linker:
|
||||
collect2
|
||||
|
||||
*link_command:
|
||||
%{!fsyntax-only: %{!c:%{!M:%{!MM:%{!E:%{!S:%(linker) %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r} %{s} %{t} %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}} %{static:} %{L*} %D %o %{!nostdlib:%{!nodefaultlibs:%G %L %G}} %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*}
|
||||
}}}}}}
|
||||
|
||||
@@ -1,11 +1,19 @@
|
||||
#
|
||||
# $Id: GNUmakefile.68k,v 1.84 2006-04-05 08:39:45 obarthel Exp $
|
||||
# $Id: GNUmakefile.68k,v 1.106 2008-04-16 07:38:10 obarthel Exp $
|
||||
#
|
||||
# :ts=8
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
|
||||
############################################
|
||||
# find out the HOST operating system
|
||||
# on which this makefile is run (default to AmigaOS)
|
||||
HOST ?= $(shell uname)
|
||||
ifeq ($(HOST),)
|
||||
HOST = AmigaOS
|
||||
endif
|
||||
|
||||
CC = gcc
|
||||
AR = ar -q
|
||||
RANLIB = ranlib
|
||||
@@ -14,6 +22,16 @@ DELETE = delete all quiet
|
||||
MAKEDIR = makedir
|
||||
MAKE = $(MAKE_COMMAND) -f GNUmakefile.68k
|
||||
|
||||
# override certain things for non-native builds
|
||||
ifneq ($(HOST), AmigaOS)
|
||||
CC = m68k-amigaos-gcc
|
||||
AR = m68k-amigaos-ar -q
|
||||
RANLIB = m68k-amigaos-ranlib
|
||||
COPY = cp
|
||||
DELETE = rm -rf
|
||||
MAKEDIR = mkdir -p
|
||||
endif
|
||||
|
||||
##############################################################################
|
||||
|
||||
ifeq (,$(TYPE))
|
||||
@@ -50,11 +68,11 @@ $(LIBUNIX_OBJS)/%.o : %.c
|
||||
|
||||
$(LIBM_OBJS)/%.o : %.c
|
||||
@echo "Compiling $< [$(TYPE):m]"
|
||||
@$(CC) -o $(LIBM_OBJS)/$*.o -c $(CFLAGS) -DIEEE_FLOATING_POINT_SUPPORT $<
|
||||
@$(CC) -o $(LIBM_OBJS)/$*.o -c $(CFLAGS) -msoft-float -DIEEE_FLOATING_POINT_SUPPORT $<
|
||||
|
||||
$(LIBM881_OBJS)/%.o : %.c
|
||||
@echo "Compiling $< [$(TYPE):m881]"
|
||||
@$(CC) -o $(LIBM881_OBJS)/$*.o -c $(CFLAGS) -DM68881_FLOATING_POINT_SUPPORT -m68881 $<
|
||||
@$(CC) -o $(LIBM881_OBJS)/$*.o -c $(CFLAGS) -m68881 -DM68881_FLOATING_POINT_SUPPORT $<
|
||||
|
||||
$(LIBNET_OBJS)/%.o : %.c
|
||||
@echo "Compiling $< [$(TYPE):net]"
|
||||
@@ -109,13 +127,14 @@ INCLUDES = -Iinclude -I. -Inetinclude
|
||||
#OPTIONS = -fno-builtin -fno-common -DNDEBUG -D__THREAD_SAFE
|
||||
#OPTIONS = -fno-builtin -fno-common -D__MEM_DEBUG
|
||||
#OPTIONS = -fno-builtin -fno-common -DDEBUG -D__MEM_DEBUG -DNO_INLINE_STDARG
|
||||
#OPTIMIZE = -O3 -fomit-frame-pointer -funroll-loops -finline-functions
|
||||
OPTIMIZE = -O -fomit-frame-pointer -fstrength-reduce -finline-functions
|
||||
#OPTIMIZE = -O2 -fomit-frame-pointer
|
||||
#DEBUG = -g
|
||||
|
||||
CFLAGS = \
|
||||
$(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) \
|
||||
$(CODE_FLAGS) $(CODE_TYPE) $(INCLUDES)
|
||||
$(CODE_FLAGS) $(INCLUDES) $(CODE_TYPE)
|
||||
|
||||
##############################################################################
|
||||
|
||||
@@ -183,11 +202,14 @@ C_LIB = \
|
||||
stat_fchmod.o \
|
||||
stat_fstat.o \
|
||||
stat_lstat.o \
|
||||
stat_lock.o \
|
||||
stat_mkdir.o \
|
||||
stat_rmdir.o \
|
||||
stat_stat.o \
|
||||
stat_umask.o \
|
||||
stdio_asprintf.o \
|
||||
stdio_change_fd_action.o \
|
||||
stdio_change_fd_user_data.o \
|
||||
stdio_clearerr.o \
|
||||
stdio_dropiobreadbuffer.o \
|
||||
stdio_duplicate_fd.o \
|
||||
@@ -227,6 +249,7 @@ C_LIB = \
|
||||
stdio_getchar.o \
|
||||
stdio_getchar_unlocked.o \
|
||||
stdio_gets.o \
|
||||
stdio_get_fd.o \
|
||||
stdio_get_file_descriptor.o \
|
||||
stdio_growfdtable.o \
|
||||
stdio_growiobtable.o \
|
||||
@@ -252,6 +275,7 @@ C_LIB = \
|
||||
stdio_remove.o \
|
||||
stdio_remove_fd_alias.o \
|
||||
stdio_rename.o \
|
||||
stdio_resolve_fd_file.o \
|
||||
stdio_rewind.o \
|
||||
stdio_scanf.o \
|
||||
stdio_setbuf.o \
|
||||
@@ -388,6 +412,7 @@ C_LIB = \
|
||||
string_strcspn.o \
|
||||
string_strdup.o \
|
||||
string_strerror.o \
|
||||
string_strerror_r.o \
|
||||
string_strlcat.o \
|
||||
string_strlcpy.o \
|
||||
string_strlen.o \
|
||||
@@ -423,6 +448,7 @@ C_LIB = \
|
||||
time_weekday.o \
|
||||
uio_readv.o \
|
||||
uio_writev.o \
|
||||
ulimit_ulimit.o \
|
||||
unistd_access.o \
|
||||
unistd_chdir.o \
|
||||
unistd_chdir_exit.o \
|
||||
@@ -453,6 +479,7 @@ C_LIB = \
|
||||
unistd_time_delay.o \
|
||||
unistd_truncate.o \
|
||||
unistd_unlink.o \
|
||||
unistd_unlink_retries.o \
|
||||
unistd_usleep.o \
|
||||
utime_utime.o \
|
||||
utsname_uname.o
|
||||
@@ -470,9 +497,12 @@ UNIX_LIB = \
|
||||
getopt_getopt_long.o \
|
||||
mount_convertinfo.o \
|
||||
mount_statfs.o \
|
||||
resource_getrlimit.o \
|
||||
resource_setrlimit.o \
|
||||
stat_chmod.o \
|
||||
stat_fstat.o \
|
||||
stat_lstat.o \
|
||||
stat_lock.o \
|
||||
stat_mkdir.o \
|
||||
stat_rmdir.o \
|
||||
stat_stat.o \
|
||||
@@ -492,6 +522,8 @@ UNIX_LIB = \
|
||||
stdlib_alloca_cleanup.o \
|
||||
stdlib_alloca_trap.o \
|
||||
stdlib_arg.o \
|
||||
stdlib_expand_wildcard.o \
|
||||
stdlib_expand_wildcard_check.o \
|
||||
stdlib_getmemstats.o \
|
||||
stdlib_main.o \
|
||||
stdlib_main_stub.o \
|
||||
@@ -502,6 +534,7 @@ UNIX_LIB = \
|
||||
stdlib_realloc.o \
|
||||
stdlib_resetmemstats.o \
|
||||
stdlib_system.o \
|
||||
systeminfo_sysinfo.o \
|
||||
termios_cfgetispeed.o \
|
||||
termios_cfgetospeed.o \
|
||||
termios_cfmakeraw.o \
|
||||
@@ -514,16 +547,32 @@ UNIX_LIB = \
|
||||
termios_tcgetattr.o \
|
||||
termios_tcsendbreak.o \
|
||||
termios_tcsetattr.o \
|
||||
timeb_ftime.o \
|
||||
uio_readv.o \
|
||||
uio_writev.o \
|
||||
unistd_access.o \
|
||||
unistd_chdir.o \
|
||||
unistd_chdir_exit.o \
|
||||
unistd_chown.o \
|
||||
unistd_common_pathconf.o \
|
||||
unistd_def_path.o \
|
||||
unistd_def_path_delimiter.o \
|
||||
unistd_environ.o \
|
||||
unistd_execl.o \
|
||||
unistd_execle.o \
|
||||
unistd_execlp.o \
|
||||
unistd_execv.o \
|
||||
unistd_execve.o \
|
||||
unistd_execve_env_exit.o \
|
||||
unistd_execve_env_init.o \
|
||||
unistd_execve_exit.o \
|
||||
unistd_execvp.o \
|
||||
unistd_fpathconf.o \
|
||||
unistd_getcwd.o \
|
||||
unistd_lchown.o \
|
||||
unistd_link.o \
|
||||
unistd_lockf.o \
|
||||
unistd_pathconf.o \
|
||||
unistd_readlink.o \
|
||||
unistd_realpath.o \
|
||||
unistd_restorepathname.o \
|
||||
@@ -601,10 +650,16 @@ MATH_LIB = \
|
||||
math_expm1f.o \
|
||||
math_fabs.o \
|
||||
math_fabsf.o \
|
||||
math_fdim.o \
|
||||
math_fdimf.o \
|
||||
math_floor.o \
|
||||
math_floorf.o \
|
||||
math_fma.o \
|
||||
math_fmaf.o \
|
||||
math_fmax.o \
|
||||
math_fmaxf.o \
|
||||
math_fmin.o \
|
||||
math_fminf.o \
|
||||
math_fmod.o \
|
||||
math_fmodf.o \
|
||||
math_fpclassify.o \
|
||||
@@ -628,6 +683,7 @@ MATH_LIB = \
|
||||
math_ldexpf.o \
|
||||
math_lgamma.o \
|
||||
math_lgammaf.o \
|
||||
math_llrint.o \
|
||||
math_log.o \
|
||||
math_log10.o \
|
||||
math_log10f.o \
|
||||
@@ -788,6 +844,7 @@ NET_LIB = \
|
||||
socket_get_h_errno.o \
|
||||
socket_set_h_errno.o \
|
||||
stat_umask.o \
|
||||
systeminfo_sysinfo.o \
|
||||
usergroup_crypt.o \
|
||||
usergroup_data.o \
|
||||
usergroup_endgrent.o \
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 200
|
||||
#define DATE "17.4.2006"
|
||||
#define VERS "amiga.lib 1.200"
|
||||
#define VSTRING "amiga.lib 1.200 (17.4.2006)\r\n"
|
||||
#define VERSTAG "\0$VER: amiga.lib 1.200 (17.4.2006)"
|
||||
#define REVISION 203
|
||||
#define DATE "28.4.2008"
|
||||
#define VERS "amiga.lib 1.203"
|
||||
#define VSTRING "amiga.lib 1.203 (28.4.2008)\r\n"
|
||||
#define VERSTAG "\0$VER: amiga.lib 1.203 (28.4.2008)"
|
||||
|
||||
@@ -1 +1 @@
|
||||
200
|
||||
203
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: amiga_acrypt.c,v 1.4 2006-01-08 12:04:22 obarthel Exp $
|
||||
* $Id: amiga_acrypt.c,v 1.5 2006-09-25 15:12:47 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -49,6 +49,10 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
UBYTE * ACrypt(UBYTE * buffer, const UBYTE * password, const UBYTE * user);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
UBYTE *
|
||||
ACrypt(UBYTE * buffer, const UBYTE * password, const UBYTE * user)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: amiga_argarraydone.c,v 1.3 2006-01-08 12:04:22 obarthel Exp $
|
||||
* $Id: amiga_argarraydone.c,v 1.4 2006-09-25 14:05:31 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -48,7 +48,7 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern char **CXLIB_argarray;
|
||||
extern const unsigned char **CXLIB_argarray;
|
||||
|
||||
extern struct DiskObject * CXLIB_disko;
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: amiga_argarrayinit.c,v 1.4 2006-01-08 12:04:22 obarthel Exp $
|
||||
* $Id: amiga_argarrayinit.c,v 1.6 2006-09-22 09:02:51 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -75,9 +75,9 @@ ArgArrayInit(LONG argc, CONST_STRPTR * argv)
|
||||
goto out;
|
||||
|
||||
for(i = 1 ; i < argc ; i++)
|
||||
CXLIB_argarray[i-1] = argv[i];
|
||||
CXLIB_argarray[i-1] = (unsigned char *)argv[i];
|
||||
|
||||
result = (unsigned char **)CXLIB_argarray;
|
||||
result = (STRPTR *)CXLIB_argarray;
|
||||
}
|
||||
else if (IconBase != NULL)
|
||||
{
|
||||
@@ -90,7 +90,7 @@ ArgArrayInit(LONG argc, CONST_STRPTR * argv)
|
||||
if(CXLIB_disko == NULL)
|
||||
goto out;
|
||||
|
||||
result = (unsigned char **)CXLIB_disko->do_ToolTypes;
|
||||
result = (STRPTR *)CXLIB_disko->do_ToolTypes;
|
||||
}
|
||||
|
||||
out:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: amiga_beginio.c,v 1.4 2006-01-08 12:04:22 obarthel Exp $
|
||||
* $Id: amiga_beginio.c,v 1.5 2006-09-25 15:12:47 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -103,6 +103,10 @@ BeginIO(struct IORequest *ior)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
VOID BeginIO(struct IORequest *ior);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
VOID
|
||||
BeginIO(struct IORequest *ior)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: amiga_createextio.c,v 1.4 2006-01-08 12:04:22 obarthel Exp $
|
||||
* $Id: amiga_createextio.c,v 1.5 2006-09-25 15:12:47 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -50,6 +50,10 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
struct IORequest * CreateExtIO(CONST struct MsgPort * port, LONG io_size);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
struct IORequest *
|
||||
CreateExtIO(CONST struct MsgPort * port, LONG io_size)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: amiga_createport.c,v 1.4 2006-01-08 12:04:22 obarthel Exp $
|
||||
* $Id: amiga_createport.c,v 1.5 2006-09-25 15:12:47 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -50,6 +50,10 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
struct MsgPort * CreatePort(CONST_STRPTR name, LONG pri);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
struct MsgPort *
|
||||
CreatePort(CONST_STRPTR name, LONG pri)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: amiga_createstdio.c,v 1.4 2006-01-08 12:04:22 obarthel Exp $
|
||||
* $Id: amiga_createstdio.c,v 1.5 2006-09-25 15:12:47 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -50,6 +50,10 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
struct IOStdReq * CreateStdIO(CONST struct MsgPort * port);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
struct IOStdReq *
|
||||
CreateStdIO(CONST struct MsgPort * port)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: amiga_createtask.c,v 1.5 2006-01-08 12:04:22 obarthel Exp $
|
||||
* $Id: amiga_createtask.c,v 1.6 2006-09-25 15:12:47 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -209,6 +209,10 @@ CreateTask(CONST_STRPTR name,LONG pri,CONST APTR init_pc,ULONG stack_size)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
struct Task * CreateTask(CONST_STRPTR name,LONG pri,CONST APTR init_pc,ULONG stack_size);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
struct Task *
|
||||
CreateTask(CONST_STRPTR name,LONG pri,CONST APTR init_pc,ULONG stack_size)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: amiga_deleteextio.c,v 1.4 2006-01-08 12:04:22 obarthel Exp $
|
||||
* $Id: amiga_deleteextio.c,v 1.5 2006-09-25 15:12:47 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -50,6 +50,10 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
VOID DeleteExtIO(struct IORequest * io);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
VOID
|
||||
DeleteExtIO(struct IORequest * io)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: amiga_deleteport.c,v 1.4 2006-01-08 12:04:22 obarthel Exp $
|
||||
* $Id: amiga_deleteport.c,v 1.5 2006-09-25 15:12:47 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -50,6 +50,10 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
VOID DeletePort(struct MsgPort * port);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
VOID
|
||||
DeletePort(struct MsgPort * port)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: amiga_deletestdio.c,v 1.4 2006-01-08 12:04:22 obarthel Exp $
|
||||
* $Id: amiga_deletestdio.c,v 1.5 2006-09-25 15:12:47 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -50,6 +50,10 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
VOID DeleteStdIO(struct IOStdReq * io);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
VOID
|
||||
DeleteStdIO(struct IOStdReq * io)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: amiga_deletetask.c,v 1.4 2006-01-08 12:04:22 obarthel Exp $
|
||||
* $Id: amiga_deletetask.c,v 1.5 2006-09-25 15:12:47 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -63,6 +63,10 @@ DeleteTask(struct Task *tc)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
VOID DeleteTask(struct Task *tc);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
VOID
|
||||
DeleteTask(struct Task *tc)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: amiga_newlist.c,v 1.3 2006-01-08 12:04:22 obarthel Exp $
|
||||
* $Id: amiga_newlist.c,v 1.4 2006-09-25 15:12:47 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -43,6 +43,10 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
VOID NewList(struct List *lh);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
VOID
|
||||
NewList(struct List *lh)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: amiga_rexxvars.c,v 1.7 2006-01-08 12:04:22 obarthel Exp $
|
||||
* $Id: amiga_rexxvars.c,v 1.19 2008-04-18 10:11:59 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -53,6 +53,12 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* This is used by the stub function prototypes. The ARexx header files
|
||||
do not define it, though. */
|
||||
struct Environment;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define __NOLIBBASE__
|
||||
#include <proto/rexxsyslib.h>
|
||||
|
||||
@@ -68,6 +74,12 @@ static struct RexxSysIFace * IRexxSys;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
BOOL CheckRexxMsg(struct RexxMsg *message);
|
||||
LONG GetRexxVar(struct RexxMsg *message,STRPTR variable_name,STRPTR *buffer_pointer);
|
||||
LONG SetRexxVar(struct RexxMsg *message,STRPTR variable_name,STRPTR value,LONG length);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
CLIB_CONSTRUCTOR(rexxvars_init)
|
||||
{
|
||||
ENTER();
|
||||
@@ -148,29 +160,412 @@ CheckRexxMsg(struct RexxMsg *message)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* The following function works in about like the original, except that it's
|
||||
not reentrant, does not fill in a pointer to the variable itself and
|
||||
requires rexxsyslib.library V45. */
|
||||
LONG
|
||||
GetRexxVar(struct RexxMsg *message,STRPTR variable_name,STRPTR *buffer_pointer)
|
||||
{
|
||||
static UBYTE buffer[256];
|
||||
LONG result;
|
||||
#if defined(__amigaos4__)
|
||||
|
||||
/* The following uses a function which was added to rexxsyslib.library V45.
|
||||
We therefore have a minimum library version requirement. */
|
||||
if(RexxSysBase == NULL || RexxSysBase->lib_Version < 45 || NOT IsRexxMsg(message))
|
||||
/****************************************************************************/
|
||||
|
||||
#include <exec/emulation.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
STATIC VOID
|
||||
_FreeSpace(struct Environment * env,APTR mem,LONG size)
|
||||
{
|
||||
result = ERR10_010; /* invalid message packet */
|
||||
goto out;
|
||||
STATIC CONST UWORD code[] = { 0x4EAE,0xFF88,0x4E75 }; /* jsr -120(a6) ; rts */
|
||||
|
||||
EmulateTags(code,
|
||||
ET_RegisterA0,env,
|
||||
ET_RegisterA1,mem,
|
||||
ET_RegisterD0,size,
|
||||
ET_RegisterA6,RexxSysBase,
|
||||
TAG_END);
|
||||
}
|
||||
|
||||
/* The 256 character limit isn't good. This should be done differently. */
|
||||
result = GetRexxVarFromMsg(variable_name,buffer,message);
|
||||
if(result != 0)
|
||||
STATIC APTR
|
||||
_GetSpace(struct Environment * env,LONG size)
|
||||
{
|
||||
STATIC CONST UWORD code[] = { 0x4EAE,0xFF8E,0x4E75 }; /* jsr -114(a6) ; rts */
|
||||
APTR result;
|
||||
|
||||
result = (APTR)EmulateTags(code,
|
||||
ET_RegisterA0,env,
|
||||
ET_RegisterD0,size,
|
||||
ET_RegisterA6,RexxSysBase,
|
||||
TAG_END);
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
STATIC LONG
|
||||
_IsSymbol(STRPTR name,LONG * symbol_length_ptr)
|
||||
{
|
||||
STATIC CONST UWORD code[] = { 0x4EAE,0xFF9A,0x2481,0x4E75 }; /* jsr -102(a6) ; move.l d1,(a2) ; rts */
|
||||
LONG result;
|
||||
|
||||
result = (LONG)EmulateTags(code,
|
||||
ET_RegisterA0,name,
|
||||
ET_RegisterA2,symbol_length_ptr,
|
||||
ET_RegisterA6,RexxSysBase,
|
||||
TAG_END);
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
STATIC VOID
|
||||
_CurrentEnv(struct RexxTask *task,struct Environment ** environment_ptr)
|
||||
{
|
||||
STATIC CONST UWORD code[] = { 0x4EAE,0xFF94,0x2488,0x4E75 }; /* jsr -108(a6) ; move.l a0,(a2) ; rts */
|
||||
|
||||
EmulateTags(code,
|
||||
ET_RegisterA0,task,
|
||||
ET_RegisterA2,environment_ptr,
|
||||
ET_RegisterA6,RexxSysBase,
|
||||
TAG_END);
|
||||
}
|
||||
|
||||
STATIC struct Node *
|
||||
_FetchValue(struct Environment * env,struct NexxStr * stem,struct NexxStr * compound,struct Node *symbol_table_node,LONG * is_literal_ptr,struct NexxStr ** value_ptr)
|
||||
{
|
||||
STATIC CONST UWORD code[] = { 0x4EAE,0xFFB8,0x2488,0x2681,0x4E75 }; /* jsr -72(a6) ; move.l a0,(a2) ; move.l d1,(a3) ; rts */
|
||||
struct Node * result;
|
||||
|
||||
result = (struct Node *)EmulateTags(code,
|
||||
ET_RegisterA0,env,
|
||||
ET_RegisterA1,stem,
|
||||
ET_RegisterD0,compound,
|
||||
ET_RegisterD1,symbol_table_node,
|
||||
ET_RegisterA2,is_literal_ptr,
|
||||
ET_RegisterA3,value_ptr,
|
||||
ET_RegisterA6,RexxSysBase,
|
||||
TAG_END);
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
STATIC struct Node *
|
||||
_EnterSymbol(struct Environment * env,struct NexxStr * stem,struct NexxStr * compound)
|
||||
{
|
||||
STATIC CONST UWORD code[] = { 0x4EAE,0xFFBE,0x4E75 }; /* jsr -66(a6) ; rts */
|
||||
struct Node * result;
|
||||
|
||||
result = (struct Node *)EmulateTags(code,
|
||||
ET_RegisterA0,env,
|
||||
ET_RegisterA1,stem,
|
||||
ET_RegisterD0,compound,
|
||||
ET_RegisterA6,RexxSysBase,
|
||||
TAG_END);
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
STATIC VOID
|
||||
_SetValue(struct Environment * env,struct NexxStr * value,struct Node * symbol_table_node)
|
||||
{
|
||||
STATIC CONST UWORD code[] = { 0x4EAE,0xFFAC,0x4E75 }; /* jsr -84(a6) ; rts */
|
||||
struct Node * result;
|
||||
|
||||
result = (struct Node *)EmulateTags(code,
|
||||
ET_RegisterA0,env,
|
||||
ET_RegisterA1,value,
|
||||
ET_RegisterD0,symbol_table_node,
|
||||
ET_RegisterA6,RexxSysBase,
|
||||
TAG_END);
|
||||
}
|
||||
|
||||
STATIC ULONG
|
||||
_StrcpyN(STRPTR destination,STRPTR source,LONG length)
|
||||
{
|
||||
STATIC CONST UWORD code[] = { 0x4EAE,0xFEF2,0x4E75 }; /* jsr -270(a6) ; rts */
|
||||
ULONG result;
|
||||
|
||||
result = (ULONG)EmulateTags(code,
|
||||
ET_RegisterA0,destination,
|
||||
ET_RegisterA1,source,
|
||||
ET_RegisterD0,length,
|
||||
ET_RegisterA6,RexxSysBase,
|
||||
TAG_END);
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#elif defined(__GNUC__) && !defined(__amigaos4__)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* A selection of lovingly hand-crafted 68k stub functions which call
|
||||
into rexxsyslib.library LVOs that still used to be documented back
|
||||
in 1987. */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#if defined(SMALL_DATA)
|
||||
#define A4(x) "a4@(" #x ":W)"
|
||||
#elif defined(SMALL_DATA32)
|
||||
#define A4(x) "a4@(" #x ":L)"
|
||||
#else
|
||||
#define A4(x) #x
|
||||
#endif /* SMALL_DATA */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* struct Environment * a0,APTR block a1,LONG d0 */
|
||||
asm("
|
||||
|
||||
.text
|
||||
.even
|
||||
|
||||
.globl __FreeSpace
|
||||
|
||||
__FreeSpace:
|
||||
|
||||
moveal sp@(4),a0
|
||||
moveal sp@(8),a1
|
||||
movel sp@(12),d0
|
||||
|
||||
movel a6,sp@-
|
||||
moveal "A4(_RexxSysBase)",a6
|
||||
jsr a6@(-120)
|
||||
moveal sp@+,a6
|
||||
|
||||
rts
|
||||
|
||||
");
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* struct Environment * a0,LONG d0 : APTR d0 */
|
||||
asm("
|
||||
|
||||
.text
|
||||
.even
|
||||
|
||||
.globl __GetSpace
|
||||
|
||||
__GetSpace:
|
||||
|
||||
moveal sp@(4),a0
|
||||
movel sp@(8),d0
|
||||
|
||||
movel a6,sp@-
|
||||
moveal "A4(_RexxSysBase)",a6
|
||||
jsr a6@(-114)
|
||||
moveal sp@+,a6
|
||||
|
||||
rts
|
||||
|
||||
");
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* STRPTR a0 : LONG d0, LONG d1 */
|
||||
asm("
|
||||
|
||||
.text
|
||||
.even
|
||||
|
||||
.globl __IsSymbol
|
||||
|
||||
__IsSymbol:
|
||||
|
||||
moveal sp@(4),a0
|
||||
|
||||
movel a6,sp@-
|
||||
moveal "A4(_RexxSysBase)",a6
|
||||
jsr a6@(-102)
|
||||
moveal sp@+,a6
|
||||
|
||||
moveal sp@(8),a1
|
||||
movel d1,a1@
|
||||
|
||||
rts
|
||||
|
||||
");
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* struct RexxTask * a0 : struct Environment * a0 */
|
||||
asm("
|
||||
|
||||
.text
|
||||
.even
|
||||
|
||||
.globl __CurrentEnv
|
||||
|
||||
__CurrentEnv:
|
||||
|
||||
moveal sp@(4),a0
|
||||
|
||||
movel a6,sp@-
|
||||
moveal "A4(_RexxSysBase)",a6
|
||||
jsr a6@(-108)
|
||||
moveal sp@+,a6
|
||||
|
||||
moveal sp@(8),a1
|
||||
movel a0,a1@
|
||||
|
||||
rts
|
||||
|
||||
");
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* struct Environment * a0,struct NexxStr * a1,struct NexxStr * d0,struct Node * d1 : struct NexxStr * a0, LONG d1 */
|
||||
asm("
|
||||
|
||||
.text
|
||||
.even
|
||||
|
||||
.globl __FetchValue
|
||||
|
||||
__FetchValue:
|
||||
|
||||
moveal sp@(4),a0
|
||||
moveal sp@(8),a1
|
||||
movel sp@(12),d0
|
||||
movel sp@(16),d1
|
||||
|
||||
movel a6,sp@-
|
||||
moveal "A4(_RexxSysBase)",a6
|
||||
jsr a6@(-72)
|
||||
moveal sp@+,a6
|
||||
|
||||
moveal sp@(20),a1
|
||||
movel a0,a1@
|
||||
moveal sp@(24),a1
|
||||
movel d1,a1@
|
||||
|
||||
rts
|
||||
|
||||
");
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* struct Environment a0, struct NexxStr *a1, struct NexxStr * d0 : struct Node * d0 */
|
||||
asm("
|
||||
|
||||
.text
|
||||
.even
|
||||
|
||||
.globl __EnterSymbol
|
||||
|
||||
__EnterSymbol:
|
||||
|
||||
moveal sp@(4),a0
|
||||
moveal sp@(8),a1
|
||||
movel sp@(12),d0
|
||||
|
||||
movel a6,sp@-
|
||||
moveal "A4(_RexxSysBase)",a6
|
||||
jsr a6@(-66)
|
||||
moveal sp@+,a6
|
||||
|
||||
rts
|
||||
|
||||
");
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* struct Environment *a0, struct NexxStr *a1, struct Node * d0 */
|
||||
asm("
|
||||
|
||||
.text
|
||||
.even
|
||||
|
||||
.globl __SetValue
|
||||
|
||||
__SetValue:
|
||||
|
||||
moveal sp@(4),a0
|
||||
moveal sp@(8),a1
|
||||
movel sp@(12),d0
|
||||
|
||||
movel a6,sp@-
|
||||
moveal "A4(_RexxSysBase)",a6
|
||||
jsr a6@(-84)
|
||||
moveal sp@+,a6
|
||||
|
||||
rts
|
||||
|
||||
");
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* STRPTR a0,STRPTR a1,LONG d0 : ULONG d0 */
|
||||
asm("
|
||||
|
||||
.text
|
||||
.even
|
||||
|
||||
.globl __StrcpyN
|
||||
|
||||
__StrcpyN:
|
||||
|
||||
moveal sp@(4),a0
|
||||
moveal sp@(8),a1
|
||||
movel sp@(12),d0
|
||||
|
||||
movel a6,sp@-
|
||||
moveal "A4(_RexxSysBase)",a6
|
||||
jsr a6@(-270)
|
||||
moveal sp@+,a6
|
||||
|
||||
rts
|
||||
|
||||
");
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Function prototypes for the 68k stubs. */
|
||||
extern VOID _FreeSpace(struct Environment * env,APTR mem,LONG size);
|
||||
extern APTR _GetSpace(struct Environment * env,LONG size);
|
||||
extern LONG _IsSymbol(STRPTR name,LONG * symbol_length_ptr);
|
||||
extern VOID _CurrentEnv(struct RexxTask *task,struct Environment ** environment_ptr);
|
||||
extern struct Node * _FetchValue(struct Environment * env,struct NexxStr * stem,struct NexxStr * compound,struct Node *symbol_table_node,LONG * is_literal_ptr,struct NexxStr ** value_ptr);
|
||||
extern struct Node * _EnterSymbol(struct Environment * env,struct NexxStr * stem,struct NexxStr * compound);
|
||||
extern VOID _SetValue(struct Environment * env,struct NexxStr * value,struct Node * symbol_table_node);
|
||||
extern ULONG _StrcpyN(STRPTR destination,STRPTR source,LONG length);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* __GNUC__ && !__amigaos4__ */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Releases a string structure, if it's not owned at the time. */
|
||||
STATIC VOID
|
||||
FreeString(struct Environment * environment,struct NexxStr * ns)
|
||||
{
|
||||
/* Not currently owned? */
|
||||
if(!(ns->ns_Flags & NSF_KEEP))
|
||||
_FreeSpace(environment,ns,sizeof(*ns) + ns->ns_Length + 1);
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Allocates and initializes a string structure. */
|
||||
STATIC struct NexxStr *
|
||||
MakeString(struct Environment * environment,STRPTR value,LONG length)
|
||||
{
|
||||
struct NexxStr * result = NULL;
|
||||
struct NexxStr * ns;
|
||||
|
||||
/* Allocate memory for the NexxStr and the NUL-terminated string itself. */
|
||||
ns = _GetSpace(environment,sizeof(*ns) + length + 1);
|
||||
if(ns == NULL)
|
||||
goto out;
|
||||
|
||||
(*buffer_pointer) = buffer;
|
||||
/* Fill in the NexxStr structure, copy the string and remember the hash value for it. */
|
||||
ns->ns_Ivalue = 0;
|
||||
ns->ns_Length = length;
|
||||
ns->ns_Flags = NSF_STRING;
|
||||
ns->ns_Hash = _StrcpyN((STRPTR)ns->ns_Buff,value,length);
|
||||
|
||||
/* Copying the string did not NUL-terminate it. */
|
||||
ns->ns_Buff[length] = '\0';
|
||||
|
||||
result = ns;
|
||||
|
||||
out:
|
||||
|
||||
@@ -179,25 +574,169 @@ GetRexxVar(struct RexxMsg *message,STRPTR variable_name,STRPTR *buffer_pointer)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* The following function works in about like the original, except that it
|
||||
ignores the length parameter (the value needs to be a NUL-terminated string)
|
||||
and requires rexxsyslib.library V45. */
|
||||
LONG
|
||||
SetRexxVar(struct RexxMsg *message,STRPTR variable_name,STRPTR value,ULONG length)
|
||||
/* Classifies a symbol and returns the stem and compound parts. */
|
||||
STATIC LONG
|
||||
TypeString(STRPTR variable_name,struct Environment * environment,struct NexxStr ** compound_ptr,struct NexxStr ** stem_ptr)
|
||||
{
|
||||
LONG result;
|
||||
struct NexxStr * compound;
|
||||
struct NexxStr * stem = NULL;
|
||||
LONG error = ERR10_003; /* no memory available */
|
||||
LONG stem_length;
|
||||
LONG symbol_length;
|
||||
STRPTR dot;
|
||||
|
||||
/* The following uses a function which was added to rexxsyslib.library V45.
|
||||
We therefore have a minimum library version requirement. */
|
||||
if(RexxSysBase == NULL || RexxSysBase->lib_Version < 45 || NOT IsRexxMsg(message))
|
||||
(*compound_ptr) = NULL;
|
||||
(*stem_ptr) = NULL;
|
||||
|
||||
/* The 'compound' part is the entire variable name, including all dots and
|
||||
what's in between them. */
|
||||
compound = MakeString(environment,variable_name,strlen(variable_name));
|
||||
if(compound == NULL)
|
||||
goto out;
|
||||
|
||||
/* Find the first dot in the variable name. Everything in front of it
|
||||
and including the dot constitutes the 'stem' part. If there is no dot
|
||||
in the name, then the 'compound' and 'stem' parts are identical. */
|
||||
dot = memchr(compound->ns_Buff,'.',compound->ns_Length);
|
||||
if(dot != NULL)
|
||||
stem_length = ((char *)dot - (char *)compound->ns_Buff) + 1;
|
||||
else
|
||||
stem_length = compound->ns_Length;
|
||||
|
||||
/* Make a copy of the 'stem' part. */
|
||||
stem = MakeString(environment,variable_name,stem_length);
|
||||
if(stem == NULL)
|
||||
goto out;
|
||||
|
||||
/* Figure out if this is a symbol after all. */
|
||||
_IsSymbol((STRPTR)stem->ns_Buff,&symbol_length);
|
||||
|
||||
/* The entire name must match the stem part. */
|
||||
if(symbol_length != stem->ns_Length)
|
||||
{
|
||||
result = ERR10_010; /* invalid message packet */
|
||||
error = ERR10_040; /* invalid variable name */
|
||||
goto out;
|
||||
}
|
||||
|
||||
result = SetRexxVarFromMsg(variable_name,value,message);
|
||||
(*compound_ptr) = compound;
|
||||
(*stem_ptr) = stem;
|
||||
|
||||
error = 0;
|
||||
|
||||
out:
|
||||
|
||||
return(result);
|
||||
if(error != 0)
|
||||
{
|
||||
if(compound != NULL)
|
||||
FreeString(environment,compound);
|
||||
|
||||
if(stem != NULL)
|
||||
FreeString(environment,stem);
|
||||
}
|
||||
|
||||
return(error);
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Retrieves the value of a variable from the current storage environment. */
|
||||
LONG
|
||||
GetRexxVar(struct RexxMsg *context,STRPTR variable_name,STRPTR * return_value)
|
||||
{
|
||||
struct Environment * environment;
|
||||
struct NexxStr * ns;
|
||||
struct NexxStr * compound_string;
|
||||
struct NexxStr * stem_string;
|
||||
LONG is_literal;
|
||||
LONG error;
|
||||
|
||||
(*return_value) = NULL;
|
||||
|
||||
if(!CheckRexxMsg(context))
|
||||
{
|
||||
error = ERR10_010; /* invalid message packet */
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Find the current storage environment. */
|
||||
_CurrentEnv(context->rm_TaskBlock,&environment);
|
||||
|
||||
/* Create the stem and component parts. */
|
||||
error = TypeString(variable_name,environment,&compound_string,&stem_string);
|
||||
if(error != 0)
|
||||
goto out;
|
||||
|
||||
/* Look up the value. NOTE: _FetchValue() will free the two 'struct NexxStr *' provided. */
|
||||
_FetchValue(environment,stem_string,compound_string,NULL,&is_literal,&ns);
|
||||
|
||||
/* If this is not a literal, return a pointer to the string. */
|
||||
if(!is_literal)
|
||||
(*return_value) = (STRPTR)ns->ns_Buff;
|
||||
|
||||
error = 0;
|
||||
|
||||
out:
|
||||
|
||||
return(error);
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Assigns a value to a variable in the current storage environment. */
|
||||
LONG
|
||||
SetRexxVar(struct RexxMsg *context,STRPTR variable_name,STRPTR value,LONG length)
|
||||
{
|
||||
struct Environment * environment;
|
||||
struct NexxStr * compound_string;
|
||||
struct NexxStr * stem_string;
|
||||
struct Node * symbol_table_node;
|
||||
struct NexxStr *value_string;
|
||||
LONG error;
|
||||
|
||||
/* Make sure the value string is not too long */
|
||||
if(length > 65535)
|
||||
{
|
||||
error = ERR10_009; /* symbol or string too long */
|
||||
goto out;
|
||||
}
|
||||
|
||||
if(!CheckRexxMsg(context))
|
||||
{
|
||||
error = ERR10_010; /* invalid message packet */
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Find the current storage environment. */
|
||||
_CurrentEnv(context->rm_TaskBlock,&environment);
|
||||
|
||||
/* Create the stem and compound parts */
|
||||
error = TypeString(variable_name,environment,&compound_string,&stem_string);
|
||||
if(error != 0)
|
||||
goto out;
|
||||
|
||||
/* Locate or create the symbol node. NOTE: _EnterSymbol() will put the two 'struct NexxStr *' into
|
||||
the symbol table. It is not nececessary to free them. */
|
||||
symbol_table_node = _EnterSymbol(environment,stem_string,compound_string);
|
||||
if(symbol_table_node == NULL)
|
||||
{
|
||||
error = ERR10_003; /* no memory available */
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Create the value string. */
|
||||
value_string = MakeString(environment,value,length);
|
||||
if(value_string == NULL)
|
||||
{
|
||||
error = ERR10_003; /* no memory available */
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Install the value string. */
|
||||
_SetValue(environment,value_string,symbol_table_node);
|
||||
|
||||
error = 0;
|
||||
|
||||
out:
|
||||
|
||||
return(error);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 200
|
||||
#define DATE "17.4.2006"
|
||||
#define VERS "c.lib 1.200"
|
||||
#define VSTRING "c.lib 1.200 (17.4.2006)\r\n"
|
||||
#define VERSTAG "\0$VER: c.lib 1.200 (17.4.2006)"
|
||||
#define REVISION 203
|
||||
#define DATE "28.4.2008"
|
||||
#define VERS "c.lib 1.203"
|
||||
#define VSTRING "c.lib 1.203 (28.4.2008)\r\n"
|
||||
#define VERSTAG "\0$VER: c.lib 1.203 (28.4.2008)"
|
||||
|
||||
@@ -1 +1 @@
|
||||
200
|
||||
203
|
||||
|
||||
224
library/changes
224
library/changes
@@ -1,3 +1,227 @@
|
||||
c.lib 1.203 (28.4.2008)
|
||||
|
||||
- Added 68k stubs to amiga_rexxvars.c for the OS4 build to use. The new code now
|
||||
works just about exactly like the amiga.lib RVI code used to do, which means
|
||||
that there is no artificial length limit for the number of characters a string
|
||||
retrieved may have, and the code is largely reentrant.
|
||||
|
||||
- To work around a bug in the Roadshow TCP/IP stack (since fixed), the waitselect()
|
||||
function now substitutes a 10 microsecond timeout for a zero length timeout.
|
||||
|
||||
- isatty() no longer crashes if passed a socket rather than a file.
|
||||
|
||||
- Rewrote the GetRexxVar()/SetRexxVar() functions (mostly) in 'C', using available
|
||||
code as a reference. The 68k stubs currently only work for the 68k version of
|
||||
the library, and a solution for the OS4 build still needs to be found. The code
|
||||
is currently untested, but it should be complete.
|
||||
|
||||
- The printf() family now ignores argument specifications, as in "%2$d %1$d",
|
||||
which are used for localization on some platforms. This is a non-standard
|
||||
feature and the way clib2 treats it for now is just intended to avoid
|
||||
trouble while performing the conversion.
|
||||
|
||||
- [tboeckel]: when compiling amiga_rexxvars.c for m68k/OS3 the GetRexxVarFromMsg()
|
||||
and SetRexxVarFromMsg() can no longer cause linkage errors if the header files
|
||||
predate the SDK for OS 3.5.
|
||||
|
||||
- [jlangner]: the log() and log10() functions always returned -inf() even if the
|
||||
arguments was within the valid range for a log() function. Using DBL_EPSILON as
|
||||
the threshold was not correct as EPSILON is 2.2204460492503131E-16 whereas
|
||||
values like 1E-200 are still valid double values for a log().
|
||||
|
||||
|
||||
c.lib 1.202 (16.1.2007)
|
||||
|
||||
- Added llrint() function contributed by Henning Nielsen Lund. Thank you
|
||||
very much!
|
||||
|
||||
- <unistd.h> now also include <stdio.h>, so that the SEEK_SET, etc. macros
|
||||
are defined for lseek() to use.
|
||||
|
||||
- Added a wrapper function which handles the thread-safe stdio stream
|
||||
resolution.
|
||||
|
||||
- In tcflush() a break signal can no longer cause the read flush loop
|
||||
to be quit with two semaphores still locked.
|
||||
|
||||
- In __obtain_daemon_message() the test to verify if the bsdsocket.library API
|
||||
would support the server API functionality checked the wrong feature. Fixed.
|
||||
|
||||
- Switched over the fd->fd_DefaultFile references to fd->fd_Socket where
|
||||
sockets are used rather than file handles.
|
||||
|
||||
- Added functions which modify the callback function and the userdata pointer
|
||||
stored in a low level unbuffered file/socket data structure. These function
|
||||
perform the proper locking and are thus safe to use in a thread-safe environment.
|
||||
|
||||
- The low level unbuffered file/socket now has a public equivalent, which
|
||||
is defined (along with the typedefs and flags) in <sys/clib2_io.h>. Functions
|
||||
for tinkering with it are still to come.
|
||||
|
||||
- The math kernel code no longer uses its own private scalbn() function.
|
||||
|
||||
- Added a function prototype for the _exit() function. Note that _exit() is
|
||||
not an ISO 'C' function.
|
||||
|
||||
- Corrected the getopt() function prototype, as prompted by Henning Nielsen Lund.
|
||||
|
||||
- The printf() family no longer adds a 0 or 0x prefix if the alternate
|
||||
conversion modifier is present for the %o and %x conversions and the
|
||||
value to be converted is 0 already. Put another way, printf("%#x %#o",0,0);
|
||||
now prints "0 0". This required another change so that %p always includes
|
||||
the 0x prefix even if the pointer involved is a NULL pointer.
|
||||
|
||||
- readlink() no longer sort-of-works for files and directories. It now only
|
||||
works for soft linked objects and returns an error for everything else.
|
||||
This is based upon a fix by Peter Bengtsson. Thank you very much!
|
||||
|
||||
- Moved the lstat() local Lock() function into its own separate file.
|
||||
|
||||
- uname() now returns correct and robust information for OS version
|
||||
numbers > 36. This integrates a fix by Peter Bengtsson. Thank you
|
||||
very much!
|
||||
|
||||
- Moved the crtbegin.o/crtend.o files out of the link libraries. Moving
|
||||
them in was intended to work as a fix for the shared library build, but
|
||||
now it seems that this has to be done at the link stage through the
|
||||
GCC specs file...
|
||||
|
||||
- Integrated a fix for __rem_pio2() which affects sin(), tan() and cos(),
|
||||
contributed by Steven Solie. Thank you very much!
|
||||
|
||||
- The internal 'struct fd' file descriptor table entry data structure
|
||||
now has a user data field entry.
|
||||
|
||||
- Rearranged the contents of the 'struct fd' file descriptor table entry
|
||||
data structure in preparation for making it public. Also added a version
|
||||
field so that user code can handle changes to it gracefully. The default
|
||||
file is no longer a BCPL pointer to a file handle by default, but
|
||||
both a BPTR and a socket identifier, wrapped into a union.
|
||||
|
||||
- Added experimental tilde expansion in Unix path names. This still needs
|
||||
some more work.
|
||||
|
||||
- __get_default_file() called __fd_unlock() without having called
|
||||
__fd_lock() first. Ouch.
|
||||
|
||||
- Removed an unnecessary pair of __fd_lock()..__fd_unlock() calls from
|
||||
ttyname_r().
|
||||
|
||||
- The libunix.a unlink() function is now reentrant, or at least thread-safe.
|
||||
|
||||
- You can now make unlink() stop after a failed deletion attempt which
|
||||
failed because the object to be deleted was reported as being "in use".
|
||||
The libunix.a variant defaults to report the deletion to have succeeded
|
||||
under these circumstances and later tries to delete the files marked
|
||||
for deletion. See <dos.h> for a brief documentation of how to change
|
||||
the behaviour.
|
||||
|
||||
- basename() and dirname() can no longer return NULL. They truncate the
|
||||
resulting path name instead. This is done so because some code that
|
||||
calls basename() or dirname() does not check if the function's return
|
||||
value is NULL.
|
||||
|
||||
- The SetOwner() fall-back code for Kickstart 2.04 was passing the wrong
|
||||
parameters to the file system. The first (dp_Arg1) should have been
|
||||
zero. Ouch.
|
||||
|
||||
- basename() is not supposed to modify the string it is passed and should
|
||||
return a pointer to a string which can be modified. Now it does. Same
|
||||
thing for dirname().
|
||||
|
||||
- asctime_r() now returns NULL if the buffer is too short to hold even a single
|
||||
byte of data.
|
||||
|
||||
- ttyname() now calls ttyname_r(). Also, the libunix.a version of ttyname_r()
|
||||
will produce "/CONSOLE" rather than "CONSOLE:".
|
||||
|
||||
|
||||
c.lib 1.201 (21.9.2006)
|
||||
|
||||
- If defined, the local environment variable "DISABLE_COMMANDLINE_WILDCARD_EXPANSION"
|
||||
will disable expansion of wildcard patterns passed on the command line.
|
||||
Note that if the variable is not set then the global variable
|
||||
'__expand_wildcard_args' will provide the defaults for the switch that
|
||||
controls whether the wildcard expansion takes place. And after the
|
||||
environment variable has been checked, the '__expand_wildcard_args_check'
|
||||
function pointer can still be used to override the switch.
|
||||
|
||||
- fstat() now works with "NIL:" and "/dev/null", respectively. Not that
|
||||
it returns much useful information, though.
|
||||
|
||||
- The _PC_MAX_INPUT query for file handles now returns the default
|
||||
buffer size.
|
||||
|
||||
- Integrated the new OS4 build makefile collection, as contributed by
|
||||
Steven Solie. Thank you very much!
|
||||
|
||||
- Added the missing strerror_r() function.
|
||||
|
||||
- fpathconf() should work with the stdio streams, even in the thread-safe
|
||||
library version, again.
|
||||
|
||||
- Updated m68k specs file in /documentation to contain an own __CLIB2__
|
||||
define so that existing m68k compilers also have this define. In addition,
|
||||
the common "-noixemul" option can now also be specified but will do a NOP
|
||||
so that Makefiles sharing multiple runtime lib setups work without
|
||||
a warning.
|
||||
|
||||
- Added a new callback function which can be used in programs which want
|
||||
to avoid that the command line wildcard expansion takes place.
|
||||
|
||||
- __get_default_file() now dynamically fills in file handles for the
|
||||
stdin/stdout/stderr streams if it's part of the thread-safe library.
|
||||
|
||||
- fpathconf() now checks if the file descriptor is really referring to a file.
|
||||
|
||||
- The termios hook entry code could file descriptor's embedded file handle
|
||||
rather than what the thread safe library had dynamically bound to the
|
||||
stdin/stdout/stderr streams.
|
||||
|
||||
- execve() now finds commands in the current directory again, even if you
|
||||
omit the leading "./" path name.
|
||||
|
||||
- The execve() code that looks for the command/script file now begins by
|
||||
checking if the file name includes path separators. If it does not,
|
||||
then the search for the command begins with the resident command list;
|
||||
otherwise the local directories are checked. The new code also properly
|
||||
cleans up after itself (a FreeDeviceProc() was missing) and the "PROGDIR:"
|
||||
lock now always refers to the directory in which the command/script
|
||||
file is found.
|
||||
|
||||
- Added the missing fdim() and fdimf() functions to the build
|
||||
makefiles. The OS4 build makefile was missing lrint() and
|
||||
lrintf(). Ouch.
|
||||
|
||||
- Added the POSIX exec() family functions, based upon code contributed
|
||||
by Henning Nielsen Lund. Thank you very much!
|
||||
|
||||
- atoll() no longer sets 'errno' directly but now calls __set_errno()
|
||||
instead.
|
||||
|
||||
- Added pathconf(), fpathconf(), sysinfo(), ftime(), ulimit(), getrlimit()
|
||||
and setrlimit() as contributed by Peter Bengtsson. Thank you very much!
|
||||
|
||||
- Added the missing S_ISSOCKET() macro to <sys/stat.h>. Note that this
|
||||
is not actually a POSIX feature.
|
||||
|
||||
- Added fmin(), fminf(), fmax() and fmaxf() to the build makefiles.
|
||||
Somehow I must have forgotten about them :-(
|
||||
|
||||
- select() and waitselect() can now be called without any file descriptor
|
||||
sets to work with, as some software does which uses select() in place
|
||||
of sleep().
|
||||
|
||||
- The <sys/ioctl.h> header file now includes both <sys/select.h> and
|
||||
<sys/filio.h> for better compatibility with the TCP/IP stack header
|
||||
files.
|
||||
|
||||
- Added the global variable __expand_wildcard_args which can be used
|
||||
to disable wildcard pattern expansion of command line parameters when
|
||||
linked against "libunix.a". Note that this has no effect on the "regular"
|
||||
libc.a behaviour.
|
||||
|
||||
|
||||
c.lib 1.200 (17.4.2006)
|
||||
|
||||
- The default break signal mask (SIGBREAKF_CTRL_C) is no longer
|
||||
|
||||
3
library/contrib/README
Normal file
3
library/contrib/README
Normal file
@@ -0,0 +1,3 @@
|
||||
This directory contains contributions which have not yet been integrated
|
||||
with the clib2 library build but which should be in the CVS repository
|
||||
both for safekeeping and for you to look at and adapt.
|
||||
183
library/contrib/byteswap/byteswap.h
Normal file
183
library/contrib/byteswap/byteswap.h
Normal file
@@ -0,0 +1,183 @@
|
||||
|
||||
#ifndef __BYTESWAP_H
|
||||
#define __BYTESWAP_H
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#if defined(__GNUC__)
|
||||
#define __CONST_FUNC __attribute__((const))
|
||||
#else
|
||||
#define __CONST_FUNC /* Nothing */
|
||||
#endif
|
||||
|
||||
/* Single value byteswap functions. */
|
||||
|
||||
extern __CONST_FUNC uint16_t bswap16(uint16_t);
|
||||
extern __CONST_FUNC uint32_t bswap24(uint32_t);
|
||||
extern __CONST_FUNC uint32_t bswap32(uint32_t);
|
||||
|
||||
#ifdef INT64_MIN
|
||||
extern __CONST_FUNC uint64_t bswap64(uint64_t);
|
||||
#endif
|
||||
|
||||
/* Block byteswap functions. The swab() function usually resides in unistd.h, so perhaps it should be moved there? */
|
||||
/* NOTE: Contrary to the standard swab(), this version returns the "to" pointer and the pointers are not restrict
|
||||
* qualified - so swapping buffer-contents in-place is supported.
|
||||
* Also, swab24(), swab32() and swab64() are non-standard functions.
|
||||
*/
|
||||
|
||||
extern void *swab(void *from,void *to,ssize_t nbytes);
|
||||
extern void *swab24(void *from,void *to,ssize_t nbytes); /* Same as swab(), but operates on 24-bit words instead. */
|
||||
extern void *swab32(void *from,void *to,ssize_t nbytes); /* Same as swab(), but operates on 32-bit words instead. */
|
||||
extern void *swab64(void *from,void *to,ssize_t nbytes); /* Same as swab(), but operates on 64-bit words instead. */
|
||||
|
||||
#define swab16(x) swab(x)
|
||||
|
||||
/*
|
||||
* Optimized inline-versions for the single-value functions follow.
|
||||
* Only GCC+PPC and GCC+m68k support for now.
|
||||
*/
|
||||
|
||||
#if defined(__GNUC__)
|
||||
|
||||
/* Select implementation. */
|
||||
|
||||
#define bswap16(x) (__builtin_constant_p(x))?__const_swap16(x):__swap16(x)
|
||||
#define bswap24(x) (__builtin_constant_p(x))?__const_swap24(x):__swap24(x)
|
||||
#define bswap32(x) (__builtin_constant_p(x))?__const_swap32(x):__swap32(x)
|
||||
#define bswap64(x) (__builtin_constant_p(x))?__const_swap64(x):__swap64(x)
|
||||
|
||||
/* Assembler implementations */
|
||||
|
||||
#if defined(__PPC__)
|
||||
|
||||
static __inline__ __CONST_FUNC uint16_t __swap16(uint16_t u16) {
|
||||
uint_fast16_t result;
|
||||
__asm__("\
|
||||
rlwinm %[result],%[u16],8,16,24\n\
|
||||
rlwimi %[result],%[u16],24,24,31\n\
|
||||
":[result]"=&r"(result):[u16]"r"(u16));
|
||||
return(result);
|
||||
}
|
||||
|
||||
static __inline__ __CONST_FUNC uint32_t __swap24(uint32_t u32) {
|
||||
uint_fast32_t result;
|
||||
__asm__("\
|
||||
rlwinm %[result],%[u32],16,8,31\n\
|
||||
rlwimi %[result],%[u32],0,16,24\n\
|
||||
":[result]"=&r"(result):[u32]"r"(u32));
|
||||
return(result);
|
||||
}
|
||||
|
||||
static __inline__ __CONST_FUNC uint32_t __swap32(uint32_t u32) {
|
||||
uint_fast32_t result;
|
||||
__asm__("\
|
||||
rlwinm %[result],%[u32],8,8,31\n\
|
||||
rlwimi %[result],%[u32],24,0,7\n\
|
||||
rlwimi %[result],%[u32],24,16,23\n\
|
||||
":[result]"=&r"(result):[u32]"r"(u32));
|
||||
return(result);
|
||||
}
|
||||
|
||||
/*
|
||||
* Note: __swap64() might perhaps be optimized a bit more by scheduling the
|
||||
* instructions to alternate register-use, but this instead means there
|
||||
* are two less registers free since "u64" and "result" may no longer overlap.
|
||||
* Decisions, decisions....
|
||||
*/
|
||||
|
||||
static __inline__ __CONST_FUNC uint64_t __swap64(uint64_t u64) {
|
||||
uint_fast64_t result;
|
||||
uint_fast32_t tmp;
|
||||
__asm__("\
|
||||
rlwinm %[tmp],%[u64],8,8,31\n\
|
||||
rlwimi %[tmp],%[u64],24,0,7\n\
|
||||
rlwimi %[tmp],%[u64],24,16,23\n\
|
||||
rlwinm %[result],%L[u64],8,8,31\n\
|
||||
rlwimi %[result],%L[u64],24,0,7\n\
|
||||
rlwimi %[result],%L[u64],24,16,23\n\
|
||||
or %L[result],%[tmp],%[tmp]\n\
|
||||
":[result]"=r"(result),[tmp]"=&r"(tmp):[u64]"r"(u64));
|
||||
return(result);
|
||||
}
|
||||
|
||||
#elif defined(__mc68020__)
|
||||
|
||||
static __inline__ __CONST_FUNC uint16_t __swap16(uint16_t u16) {
|
||||
__asm__("\
|
||||
rol.w #8,%[u16]\n\
|
||||
":[u16]"+d"(u16)::"cc");
|
||||
return(u16);
|
||||
}
|
||||
|
||||
static __inline__ __CONST_FUNC uint32_t __swap24(uint32_t u32) {
|
||||
__asm__("\
|
||||
rol.w #8,%[u32]\n\
|
||||
swap %[u32]\n\
|
||||
rol.w #8,%[u32]\n\
|
||||
ror.l #8,%[u32]\n\
|
||||
":[u32]"+d"(u32)::"cc");
|
||||
return(u32);
|
||||
}
|
||||
|
||||
static __inline__ __CONST_FUNC uint32_t __swap32(uint32_t u32) {
|
||||
__asm__("\
|
||||
rol.w #8,%[u32]\n\
|
||||
swap %[u32]\n\
|
||||
rol.w #8,%[u32]\n\
|
||||
":[u32]"+d"(u32)::"cc");
|
||||
return(u32);
|
||||
}
|
||||
|
||||
static __inline__ __CONST_FUNC uint64_t __swap64(uint64_t u64) {
|
||||
__asm__("\
|
||||
rol.w #8,%[u64]\n\
|
||||
rol.w #8,%L[u64]\n\
|
||||
swap %[u64]\n\
|
||||
swap %L[u64]\n\
|
||||
rol.w #8,%[u64]\n\
|
||||
rol.w #8,%L[u64]\n\
|
||||
exg %[u64],L%[u64]\n\
|
||||
":[u64]"+d"(u64)::"cc");
|
||||
return(u64);
|
||||
}
|
||||
|
||||
#else
|
||||
/* Unknown or undefined architecture. Perhaps compiling with "-strict -ansi", but should not use this header then anyway. */
|
||||
#undef bswap16
|
||||
#undef bswap24
|
||||
#undef bswap32
|
||||
#undef bswap64
|
||||
#define bswap16(x) (__builtin_constant_p(x))?__const_swap16(x):bswap16(x)
|
||||
#define bswap24(x) (__builtin_constant_p(x))?__const_swap24(x):bswap24(x)
|
||||
#define bswap32(x) (__builtin_constant_p(x))?__const_swap32(x):bswap32(x)
|
||||
#define bswap64(x) (__builtin_constant_p(x))?__const_swap64(x):bswap64(x)
|
||||
#endif
|
||||
|
||||
/* C implementations for constant values */
|
||||
|
||||
static __inline__ uint16_t __const_swap16(uint16_t u16) {
|
||||
return(u16>>8|u16<<8);
|
||||
}
|
||||
|
||||
static __inline__ uint32_t __const_swap24(uint32_t u32) {
|
||||
return(((u32&0xff)<<16)|((u32&0xff00))|((u32&0xff0000)>>16));
|
||||
}
|
||||
|
||||
static __inline__ uint32_t __const_swap32(uint32_t u32) {
|
||||
return(((u32&0xff)<<24)|((u32&0xff00)<<8)|((u32&0xff0000)>>8)|((u32&0xff000000)>>24));
|
||||
}
|
||||
|
||||
static __inline__ uint64_t __const_swap64(uint64_t u64) {
|
||||
return(((u64&0xffLL)<<56)|((u64&0xff00LL)<<40)|((u64&0xff0000LL)<<24)|((u64&0xff000000LL)<<8)|
|
||||
((u64&0xff00000000LL)>>8)|((u64&0xff0000000000LL)>>24)|((u64&0xff000000000000LL)>>40)|((u64&0xff00000000000000LL)>>56));
|
||||
}
|
||||
|
||||
#endif /* __GNUC__ */
|
||||
|
||||
|
||||
#endif /* __BYTESWAP_H */
|
||||
|
||||
/* vi:set ts=3: */
|
||||
|
||||
28
library/contrib/byteswap/byteswap_bswap16.c
Normal file
28
library/contrib/byteswap/byteswap_bswap16.c
Normal file
@@ -0,0 +1,28 @@
|
||||
|
||||
#if defined(__PPC__) && defined(__GNUC__)
|
||||
|
||||
asm("\
|
||||
.text\n\
|
||||
.align 2\n\
|
||||
.globl bswap16\n\
|
||||
.type bswap16, @function\n\
|
||||
bswap16:\n\
|
||||
# rlwinm %r4,%r3,8,16,24\n\
|
||||
# rlwimi %r4,%r3,24,24,31\n\
|
||||
# or %r3,%r4,%r4\n\
|
||||
rlwimi %r3,%r3,16,8,15\n\
|
||||
srwi %r3,%r3,8\n\
|
||||
blr\n\
|
||||
");
|
||||
|
||||
#else
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
uint16_t bswap16(uint16_t u16)
|
||||
{
|
||||
return(u16>>8|u16<<8);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
29
library/contrib/byteswap/byteswap_bswap24.c
Normal file
29
library/contrib/byteswap/byteswap_bswap24.c
Normal file
@@ -0,0 +1,29 @@
|
||||
|
||||
#if defined(__PPC__) && defined(__GNUC__)
|
||||
|
||||
asm(" .text\n\
|
||||
.align 2\n\
|
||||
.globl bswap24\n\
|
||||
.type bswap24, @function\n\
|
||||
bswap32:\n\
|
||||
rlwinm %r4,%r3,16,8,31\n\
|
||||
rlwimi %r4,%r3,0,16,24\n\
|
||||
or %r3,%r4,%r4\n\
|
||||
blr\n\
|
||||
");
|
||||
|
||||
#else
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
uint32_t bswap24(uint32_t u32)
|
||||
{
|
||||
return(
|
||||
((u32&0xff)<<16)|
|
||||
((u32&0xff00))|
|
||||
((u32&0xff0000)>>16)
|
||||
);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
31
library/contrib/byteswap/byteswap_bswap32.c
Normal file
31
library/contrib/byteswap/byteswap_bswap32.c
Normal file
@@ -0,0 +1,31 @@
|
||||
|
||||
#if defined(__PPC__) && defined(__GNUC__)
|
||||
|
||||
asm(" .text\n\
|
||||
.align 2\n\
|
||||
.globl bswap32\n\
|
||||
.type bswap32, @function\n\
|
||||
bswap32:\n\
|
||||
rlwinm %r4,%r3,8,8,31\n\
|
||||
rlwimi %r4,%r3,24,0,7\n\
|
||||
rlwimi %r4,%r3,24,16,23\n\
|
||||
or %r3,%r4,%r4\n\
|
||||
blr\n\
|
||||
");
|
||||
|
||||
#else
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
uint32_t bswap32(uint32_t u32)
|
||||
{
|
||||
return(
|
||||
((u32&0xff)<<24)|
|
||||
((u32&0xff00)<<8)|
|
||||
((u32&0xff0000)>>8)|
|
||||
((u32&0xff000000)>>24)
|
||||
);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
48
library/contrib/byteswap/byteswap_bswap64.c
Normal file
48
library/contrib/byteswap/byteswap_bswap64.c
Normal file
@@ -0,0 +1,48 @@
|
||||
|
||||
#if defined(USE_64_BIT_INTS)
|
||||
|
||||
#if defined(__PPC__) && defined(__GNUC__)
|
||||
|
||||
asm(" .text\n\
|
||||
.align 2\n\
|
||||
.globl bswap64\n\
|
||||
.type bswap64, @function\n\
|
||||
bswap64:\n\
|
||||
rlwinm %r5,%r3,8,8,31\n\
|
||||
rlwimi %r5,%r3,24,0,7\n\
|
||||
rlwimi %r5,%r3,24,16,23\n\
|
||||
rlwinm %r3,%r4,8,8,31\n\
|
||||
rlwimi %r3,%r4,24,0,7\n\
|
||||
rlwimi %r3,%r4,24,16,23\n\
|
||||
or %r4,%r5,%r5\n\
|
||||
blr\n\
|
||||
");
|
||||
|
||||
#else
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
uint64_t bswap64(uint64_t u64)
|
||||
{
|
||||
union {
|
||||
uint64_t ll;
|
||||
uint32_t l[2];
|
||||
} v={.ll=u64};
|
||||
uint32_t tmp;
|
||||
tmp=v.l[0];
|
||||
v.l[0]=((v.l[1]&0xff)<<24)|
|
||||
((v.l[1]&0xff00)<<8)|
|
||||
((v.l[1]&0xff0000)>>8)|
|
||||
((v.l[1]&0xff000000)>>24);
|
||||
v.l[1]=((tmp&0xff)<<24)|
|
||||
((tmp&0xff00)<<8)|
|
||||
((tmp&0xff0000)>>8)|
|
||||
((tmp&0xff000000)>>24);
|
||||
return(v.ll);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
70
library/contrib/byteswap/byteswap_swab.c
Normal file
70
library/contrib/byteswap/byteswap_swab.c
Normal file
@@ -0,0 +1,70 @@
|
||||
|
||||
#if defined(__GNUC__) && defined(__PPC__)
|
||||
|
||||
/* r3=from, r4=to, r5=len/count, r6=index, r7=load/store/temp */
|
||||
|
||||
asm("\
|
||||
.text\n\
|
||||
.align 2\n\
|
||||
.globl swab\n\
|
||||
.type swab,@function\n\
|
||||
swab:\n\
|
||||
dcbt 0,%r3\n\
|
||||
srawi. %r5,%r5,1\n\
|
||||
bc 4,gt,.exit\n\
|
||||
andi. %r7,%r3,3 # Check if we start on an address evenly divisible by 4.\n\
|
||||
li %r6,0\n\
|
||||
bc 4,gt,.preploop\n\
|
||||
lhbrx %r7,%r6,%r3 # Fix alignment if needed.\n\
|
||||
sthx %r7,%r6,%r4\n\
|
||||
addi %r6,%r6,2\n\
|
||||
subi %r5,%r5,1\n\
|
||||
.preploop:\n\
|
||||
andi. %r7,%r5,1 # Check if even or odd number of 16-bit words.\n\
|
||||
srawi %r5,%r5,1 # Number of 32-bit words to half-swap.\n\
|
||||
mtctr %r5\n\
|
||||
bc 12,gt,.oddloop # Jump to loop for odd number of 16-bit words.\n\
|
||||
.loop: # Loop is 'unrolled' by reading/writing 32-bit words.\n\
|
||||
lwbrx %r7,%r6,%r3\n\
|
||||
rotlwi %r7,%r7,16\n\
|
||||
stwx %r7,%r6,%r4\n\
|
||||
addi %r6,%r6,4\n\
|
||||
bc 0,lt,.loop\n\
|
||||
.exit:\n\
|
||||
or %r3,%r4,%r4\n\
|
||||
blr\n\
|
||||
.oddloop:\n\
|
||||
lwbrx %r7,%r6,%r3\n\
|
||||
rotlwi %r7,%r7,16\n\
|
||||
stwx %r7,%r6,%r4\n\
|
||||
addi %r6,%r6,4\n\
|
||||
bc 0,lt,.oddloop\n\
|
||||
sub %r6,%r6,2\n\
|
||||
lhbrx %r7,%r6,%r3 # Fix last 16-bit word.\n\
|
||||
sthx %r7,%r6,%r4\n\
|
||||
or %r3,%r4,%r4\n\
|
||||
blr\n\
|
||||
");
|
||||
|
||||
#else
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <stdint.h>
|
||||
|
||||
void *swab(void *from,void *to,ssize_t len)
|
||||
{
|
||||
int i;
|
||||
uint16_t u16,*u16in=from,*u16out=to;
|
||||
|
||||
for(i=0;i<(len>>1);i++) {
|
||||
u16=u16in[i];
|
||||
u16out[i]=u16>>8|u16<<8;
|
||||
}
|
||||
|
||||
return(u16out);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
91
library/contrib/byteswap/byteswap_swab24.c
Normal file
91
library/contrib/byteswap/byteswap_swab24.c
Normal file
@@ -0,0 +1,91 @@
|
||||
|
||||
#if defined(__GNUC__) && defined(__PPC__)
|
||||
|
||||
/* r3=from, r4=to, r5=len/remaining, r6/r7=index & r7=temp, r8/r9/r10=read/write temp */
|
||||
|
||||
asm("\
|
||||
.text\n\
|
||||
.align 2\n\
|
||||
.globl swab24\n\
|
||||
.type swab24,@function\n\
|
||||
swab24:\n\
|
||||
dcbt 0,%r3\n\
|
||||
li %r7,3\n\
|
||||
divwu %r5,%r5,%r7\n\
|
||||
andi. %r7,%r5,3\n\
|
||||
srawi. %r5,%r5,2\n\
|
||||
mtctr %r5\n\
|
||||
or %r5,%r7,%r7\n\
|
||||
li %r6,0\n\
|
||||
bc 4,gt,.postfix\n\
|
||||
.loop:\n\
|
||||
lwbrx %r8,%r6,%r3\n\
|
||||
addi %r7,%r6,4\n\
|
||||
lwzx %r9,%r7,%r3\n\
|
||||
addi %r7,%r6,8\n\
|
||||
lwbrx %r10,%r7,%r3\n\
|
||||
rotlwi %r8,%r8,8\n\
|
||||
or %r7,%r9,%r9\n\
|
||||
rlwimi %r9,%r8,16,8,15\n\
|
||||
rlwimi %r9,%r10,8,16,23\n\
|
||||
rlwimi %r8,%r7,16,24,31\n\
|
||||
rotrwi %r10,%r10,8\n\
|
||||
rlwimi %r10,%r7,16,0,7\n\
|
||||
stwx %r8,%r6,%r4\n\
|
||||
addi %r6,%r6,4\n\
|
||||
stwx %r9,%r6,%r4\n\
|
||||
addi %r6,%r6,4\n\
|
||||
stwx %r10,%r6,%r4\n\
|
||||
addi %r6,%r6,4\n\
|
||||
bc 0,lt,.loop\n\
|
||||
.postfix: # Fix any remaining 24-bit words (number of remaining words in r5).\n\
|
||||
or. %r5,%r5,%r5\n\
|
||||
bc 4,gt,.exit\n\
|
||||
mtctr %r5\n\
|
||||
add %r3,%r3,%r6\n\
|
||||
add %r6,%r4,%r6\n\
|
||||
subi %r3,%r3,1\n\
|
||||
.fixloop:\n\
|
||||
lbzu %r7,1(%r3)\n\
|
||||
lbzu %r8,1(%r3)\n\
|
||||
lbzu %r9,1(%r3)\n\
|
||||
stb %r7,2(%r6)\n\
|
||||
stb %r8,1(%r6)\n\
|
||||
stb %r9,0(%r6)\n\
|
||||
addi %r6,%r6,3\n\
|
||||
bc 0,lt,.fixloop\n\
|
||||
.exit:\n\
|
||||
or %r3,%r4,%r4\n\
|
||||
blr\n\
|
||||
");
|
||||
|
||||
#else
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <stdint.h>
|
||||
|
||||
/*
|
||||
* Ugh, this is really very, very ineffiecient.
|
||||
* (But simple, understandable and safe)
|
||||
*/
|
||||
|
||||
void *swab24(void *from,void *to,ssize_t len)
|
||||
{
|
||||
uint8_t *src=from,B0,B1,B2,*dst=to;
|
||||
int i;
|
||||
|
||||
for(i=0;i<len;i+=3) {
|
||||
B0=src[i];
|
||||
B1=src[i+1];
|
||||
B2=src[i+2];
|
||||
dst[i]=B2;
|
||||
dst[i+1]=B1;
|
||||
dst[i+2]=B0;
|
||||
}
|
||||
|
||||
return(to);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
112
library/contrib/byteswap/byteswap_swab32.c
Normal file
112
library/contrib/byteswap/byteswap_swab32.c
Normal file
@@ -0,0 +1,112 @@
|
||||
|
||||
#if defined(__GNUC__) && defined(__PPC__)
|
||||
|
||||
/* r3=from, r4=to, r5=len, r6=index, r7=load/store temp */
|
||||
|
||||
asm("\
|
||||
.text\n\
|
||||
.align 2\n\
|
||||
.globl swab32\n\
|
||||
.type swab32,@function\n\
|
||||
swab32:\n\
|
||||
srawi. %r5,%r5,2\n\
|
||||
li %r6,0\n\
|
||||
bc 4,gt,.exit\n\
|
||||
mtctr %r5\n\
|
||||
.loop:\n\
|
||||
lwbrx %r7,%r6,%r3\n\
|
||||
stwx %r7,%r6,%r4\n\
|
||||
addi %r6,%r6,4\n\
|
||||
bc 0,lt,.loop\n\
|
||||
.exit:\n\
|
||||
or %r3,%r4,%r4\n\
|
||||
blr\n\
|
||||
");
|
||||
|
||||
/* r3=from, r4=to, r5=len/temp, r6=index, r7=load/store temp, r8=cache hint
|
||||
*
|
||||
* The unrolled, cache-hinting version appears to be about 4.5% faster, but
|
||||
* in this case I opted for the smaller implementation. swab64() appears to
|
||||
* gain more from cache-hinting - probably because of it using more registers
|
||||
* for intermediate storage.
|
||||
asm("\
|
||||
.text\n\
|
||||
.align 2\n\
|
||||
.globl swab32\n\
|
||||
.type swab32,@function\n\
|
||||
swab32:\n\
|
||||
dcbt 0,%r3\n\
|
||||
andi. %r8,%r5,31 # The number of bytes handled in '.pre'. Used for prefetch hint.\n\
|
||||
srawi %r5,%r5,2 # Convert bytes-># of 32-bit words\n\
|
||||
andi. %r7,%r5,7\n\
|
||||
li %r6,0\n\
|
||||
bc 4,gt,.preploop\n\
|
||||
mtctr %r7\n\
|
||||
.pre: # One 32-bit word at a time until we have (nLeft%8)==0 \n\
|
||||
lwbrx %r7,%r6,%r3\n\
|
||||
stwx %r7,%r6,%r4\n\
|
||||
addi %r6,%r6,4\n\
|
||||
bc 0,lt,.pre\n\
|
||||
.preploop:\n\
|
||||
srawi. %r5,%r5,3 # Divide by 8 again to get number of loops.\n\
|
||||
addi %r8,%r8,32 # Start address for next loop (from r3).\n\
|
||||
bc 4,gt,.exit\n\
|
||||
mtctr %r5\n\
|
||||
.loop: # Loop unrolled 8 times = 32 bytes = 1 cache-line (except on the 970).\n\
|
||||
dcbt %r8,%r3 # Cache hint (prefetch) for the next loop\n\
|
||||
lwbrx %r7,%r6,%r3\n\
|
||||
stwx %r7,%r6,%r4\n\
|
||||
addi %r6,%r6,4\n\
|
||||
lwbrx %r7,%r6,%r3\n\
|
||||
stwx %r7,%r6,%r4\n\
|
||||
addi %r6,%r6,4\n\
|
||||
lwbrx %r7,%r6,%r3\n\
|
||||
stwx %r7,%r6,%r4\n\
|
||||
addi %r6,%r6,4\n\
|
||||
lwbrx %r7,%r6,%r3\n\
|
||||
stwx %r7,%r6,%r4\n\
|
||||
addi %r6,%r6,4\n\
|
||||
lwbrx %r7,%r6,%r3\n\
|
||||
stwx %r7,%r6,%r4\n\
|
||||
addi %r6,%r6,4\n\
|
||||
lwbrx %r7,%r6,%r3\n\
|
||||
stwx %r7,%r6,%r4\n\
|
||||
addi %r6,%r6,4\n\
|
||||
lwbrx %r7,%r6,%r3\n\
|
||||
stwx %r7,%r6,%r4\n\
|
||||
addi %r6,%r6,4\n\
|
||||
lwbrx %r7,%r6,%r3\n\
|
||||
stwx %r7,%r6,%r4\n\
|
||||
addi %r6,%r6,4\n\
|
||||
addi %r8,%r8,32 # Update cache-hint offset\n\
|
||||
bc 0,lt,.loop\n\
|
||||
.exit:\n\
|
||||
or %r3,%r4,%r4\n\
|
||||
blr\n\
|
||||
");
|
||||
*/
|
||||
|
||||
#else
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <stdint.h>
|
||||
|
||||
void *swab32(void *from,void *to,ssize_t len)
|
||||
{
|
||||
int i;
|
||||
uint32_t *u32in=from,*u32out=to,tmp;
|
||||
|
||||
for(i=0;i<(len>>2);i++) {
|
||||
tmp=u32in[i];
|
||||
u32out[i]=((tmp&0xff)<<24)|
|
||||
((tmp&0xff00)<<8)|
|
||||
((tmp&0xff0000)>>8)|
|
||||
((tmp&0xff000000)>>24);
|
||||
}
|
||||
|
||||
return(to);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
101
library/contrib/byteswap/byteswap_swab64.c
Normal file
101
library/contrib/byteswap/byteswap_swab64.c
Normal file
@@ -0,0 +1,101 @@
|
||||
|
||||
#if defined(__GNUC__) && defined(__PPC__)
|
||||
|
||||
/* r3=from, r4=to, r5=len/temp, r6/r7=index, r8/r9=load/store temp, r10=cache hint */
|
||||
|
||||
/* This version is unrolled and uses cache-hinting. It appears to gain about 10%
|
||||
* over a non-unrolled, non-hinting version.
|
||||
*/
|
||||
|
||||
asm("\
|
||||
.text\n\
|
||||
.align 2\n\
|
||||
.globl swab64\n\
|
||||
.type swab64,@function\n\
|
||||
swab64:\n\
|
||||
dcbt 0,%r3\n\
|
||||
andi. %r10,%r5,31 # The number of bytes handled in '.pre'. Used for prefetch hint.\n\
|
||||
srawi %r5,%r5,3 # Convert bytes-># of 64-bit words\n\
|
||||
andi. %r7,%r5,3\n\
|
||||
li %r6,0\n\
|
||||
bc 4,gt,.preploop\n\
|
||||
mtctr %r7\n\
|
||||
.pre: # One 64-bit word at a time until we have (nLeft%4)==0 \n\
|
||||
lwbrx %r8,%r6,%r3\n\
|
||||
addi %r7,%r6,4\n\
|
||||
lwbrx %r9,%r7,%r3\n\
|
||||
stwx %r8,%r7,%r4\n\
|
||||
stwx %r9,%r6,%r4\n\
|
||||
addi %r6,%r6,8\n\
|
||||
bc 0,lt,.pre\n\
|
||||
.preploop:\n\
|
||||
srawi. %r5,%r5,2 # Divide by 4 again to get number of loops.\n\
|
||||
addi %r10,%r10,32 # Start address for next loop.\n\
|
||||
bc 4,gt,.exit\n\
|
||||
mtctr %r5\n\
|
||||
.loop: # Loop unrolled 4 times = 32 bytes = 1 cache-line (except on the 970).\n\
|
||||
dcbt %r10,%r3 # Cache hint (prefetch) for the next iteration\n\
|
||||
lwbrx %r8,%r6,%r3\n\
|
||||
addi %r7,%r6,4\n\
|
||||
lwbrx %r9,%r7,%r3\n\
|
||||
stwx %r8,%r7,%r4\n\
|
||||
stwx %r9,%r6,%r4\n\
|
||||
addi %r6,%r6,8\n\
|
||||
lwbrx %r8,%r6,%r3\n\
|
||||
addi %r7,%r6,4\n\
|
||||
lwbrx %r9,%r7,%r3\n\
|
||||
stwx %r8,%r7,%r4\n\
|
||||
stwx %r9,%r6,%r4\n\
|
||||
addi %r6,%r6,8\n\
|
||||
lwbrx %r8,%r6,%r3\n\
|
||||
addi %r7,%r6,4\n\
|
||||
lwbrx %r9,%r7,%r3\n\
|
||||
stwx %r8,%r7,%r4\n\
|
||||
stwx %r9,%r6,%r4\n\
|
||||
addi %r6,%r6,8\n\
|
||||
lwbrx %r8,%r6,%r3\n\
|
||||
addi %r7,%r6,4\n\
|
||||
lwbrx %r9,%r7,%r3\n\
|
||||
stwx %r8,%r7,%r4\n\
|
||||
stwx %r9,%r6,%r4\n\
|
||||
addi %r6,%r6,8\n\
|
||||
addi %r10,%r10,32 # Update cache-hint offset\n\
|
||||
bc 0,lt,.loop\n\
|
||||
.exit:\n\
|
||||
or %r3,%r4,%r4\n\
|
||||
blr\n\
|
||||
");
|
||||
|
||||
#else
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <stdint.h>
|
||||
|
||||
void *swab64(void *from,void *to,ssize_t len)
|
||||
{
|
||||
int i;
|
||||
struct {
|
||||
uint32_t u32[2];
|
||||
} *u64in=from,*u64out=to;
|
||||
uint32_t tmp1,tmp2;
|
||||
|
||||
for(i=0;i<(len>>3);i++) {
|
||||
tmp1=u64in[i].u32[0];
|
||||
tmp2=u64in[i].u32[1];
|
||||
u64out[i].u32[0]=((tmp2&0xff)<<24)|
|
||||
((tmp2&0xff00)<<8)|
|
||||
((tmp2&0xff0000)>>8)|
|
||||
((tmp2&0xff000000)>>24);
|
||||
u64out[i].u32[1]=((tmp1&0xff)<<24)|
|
||||
((tmp1&0xff00)<<8)|
|
||||
((tmp1&0xff0000)>>8)|
|
||||
((tmp1&0xff000000)>>24);
|
||||
}
|
||||
|
||||
return(to);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* vi:set ts=3: */
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: crtbegin.c,v 1.10 2005-03-18 12:38:22 obarthel Exp $
|
||||
* $Id: crtbegin.c,v 1.11 2006-09-22 09:02:51 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -27,6 +27,11 @@ static void (*__DTOR_LIST__[1]) (void) __attribute__(( used, section(".dtors"),
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
void _init(void);
|
||||
void _fini(void);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
void
|
||||
_init(void)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: debug.c,v 1.4 2006-01-08 12:04:22 obarthel Exp $
|
||||
* $Id: debug.c,v 1.6 2006-09-25 14:51:15 obarthel Exp $
|
||||
*
|
||||
* :ts=8
|
||||
*
|
||||
@@ -160,7 +160,7 @@ _SHOWVALUE(
|
||||
{
|
||||
if(__debug_level >= DEBUGLEVEL_Reports)
|
||||
{
|
||||
char *fmt;
|
||||
const char *fmt;
|
||||
|
||||
switch(size)
|
||||
{
|
||||
@@ -207,7 +207,7 @@ _SHOWPOINTER(
|
||||
{
|
||||
if(__debug_level >= DEBUGLEVEL_Reports)
|
||||
{
|
||||
char *fmt;
|
||||
const char *fmt;
|
||||
|
||||
_INDENT();
|
||||
|
||||
@@ -273,7 +273,7 @@ _DPRINTF(const char *fmt,...)
|
||||
va_list args;
|
||||
|
||||
va_start(args,fmt);
|
||||
KPutFmt((char *)fmt,args);
|
||||
KPutFmt(fmt,args);
|
||||
va_end(args);
|
||||
|
||||
KPrintF("\n");
|
||||
@@ -288,7 +288,7 @@ _DLOG(const char *fmt,...)
|
||||
va_list args;
|
||||
|
||||
va_start(args,fmt);
|
||||
KPutFmt((char *)fmt,args);
|
||||
KPutFmt(fmt,args);
|
||||
va_end(args);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 200
|
||||
#define DATE "17.4.2006"
|
||||
#define VERS "debug.lib 1.200"
|
||||
#define VSTRING "debug.lib 1.200 (17.4.2006)\r\n"
|
||||
#define VERSTAG "\0$VER: debug.lib 1.200 (17.4.2006)"
|
||||
#define REVISION 203
|
||||
#define DATE "28.4.2008"
|
||||
#define VERS "debug.lib 1.203"
|
||||
#define VSTRING "debug.lib 1.203 (28.4.2008)\r\n"
|
||||
#define VERSTAG "\0$VER: debug.lib 1.203 (28.4.2008)"
|
||||
|
||||
@@ -1 +1 @@
|
||||
200
|
||||
203
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: dirent_readdir.c,v 1.9 2006-01-08 12:04:22 obarthel Exp $
|
||||
* $Id: dirent_readdir.c,v 1.10 2006-09-25 14:51:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -88,7 +88,7 @@ readdir(DIR * directory_pointer)
|
||||
{
|
||||
D_S(struct FileInfoBlock,fib);
|
||||
D_S(struct bcpl_name,bcpl_name);
|
||||
UBYTE * name = bcpl_name->name;
|
||||
char * name = (char *)bcpl_name->name;
|
||||
BPTR dir_lock;
|
||||
|
||||
assert( (((ULONG)name) & 3) == 0 );
|
||||
@@ -96,7 +96,7 @@ readdir(DIR * directory_pointer)
|
||||
if(dh->dh_VolumeNode == NULL && NOT IsListEmpty((struct List *)&dh->dh_VolumeList))
|
||||
dh->dh_VolumeNode = (struct Node *)dh->dh_VolumeList.mlh_Head;
|
||||
|
||||
strcpy((char *)name,"\1:"); /* BSTR for ":" */
|
||||
strcpy(name,"\1:"); /* BSTR for ":" */
|
||||
|
||||
while(result == NULL && dh->dh_VolumeNode != NULL && dh->dh_VolumeNode->ln_Succ != NULL)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: fcntl_fcntl.c,v 1.19 2006-01-08 12:04:22 obarthel Exp $
|
||||
* $Id: fcntl_fcntl.c,v 1.20 2006-11-16 14:39:23 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -97,7 +97,7 @@ fcntl(int file_descriptor, int cmd, ... /* int arg */ )
|
||||
goto out;
|
||||
}
|
||||
|
||||
if(fd->fd_DefaultFile == ZERO)
|
||||
if(fd->fd_File == ZERO)
|
||||
{
|
||||
__set_errno(EBADF);
|
||||
goto out;
|
||||
@@ -155,7 +155,7 @@ fcntl(int file_descriptor, int cmd, ... /* int arg */ )
|
||||
SHOWMSG("cmd=F_SETFL");
|
||||
|
||||
/* If this is a file, make sure that we don't hit a zero file handle. */
|
||||
if(FLAG_IS_CLEAR(fd->fd_Flags,FDF_IS_SOCKET) && fd->fd_DefaultFile == ZERO)
|
||||
if(FLAG_IS_CLEAR(fd->fd_Flags,FDF_IS_SOCKET) && fd->fd_File == ZERO)
|
||||
{
|
||||
__set_errno(EBADF);
|
||||
goto out;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: fcntl_get_default_file.c,v 1.5 2006-01-08 12:04:22 obarthel Exp $
|
||||
* $Id: fcntl_get_default_file.c,v 1.8 2006-11-16 14:39:23 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -44,8 +44,8 @@
|
||||
int
|
||||
__get_default_file(int file_descriptor,long * file_ptr)
|
||||
{
|
||||
struct fd * fd;
|
||||
int result = ERROR;
|
||||
struct fd * fd;
|
||||
|
||||
assert( file_descriptor >= 0 && file_descriptor < __num_fd );
|
||||
assert( __fd[file_descriptor] != NULL );
|
||||
@@ -59,11 +59,15 @@ __get_default_file(int file_descriptor,long * file_ptr)
|
||||
goto out;
|
||||
}
|
||||
|
||||
(*file_ptr) = (long)fd->fd_DefaultFile;
|
||||
__fd_lock(fd);
|
||||
|
||||
(*file_ptr) = (long)__resolve_fd_file(fd);
|
||||
|
||||
result = 0;
|
||||
|
||||
out:
|
||||
|
||||
__fd_unlock(fd);
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: dos.h,v 1.19 2006-04-05 08:39:46 obarthel Exp $
|
||||
* $Id: dos.h,v 1.28 2006-09-27 09:40:06 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -470,6 +470,101 @@ extern BOOL __thread_safe_errno_h_errno;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/*
|
||||
* If you link against libunix.a then the default command line processing
|
||||
* function will attempt to expand every single wildcard parameter on the
|
||||
* command line into a series of file and directories names matching the
|
||||
* wildcards. The idea is to provide functionality which on Unix the
|
||||
* shell is responsible for. On AmigaDOS the shell commands need to perform
|
||||
* the expansion. However, if you are mixing AmigaDOS commands which expand
|
||||
* wildcard patterns with a shell that already does the job, you may run into
|
||||
* big trouble. To disable the expansion, declare the global variable named
|
||||
* "__expand_wildcard_args" in your code and have it set to FALSE. Because
|
||||
* the program startup code checks this variable early on, its value must
|
||||
* be available at that time, i.e. you cannot just set it differently in
|
||||
* your code lateron because by that time the startup code will have already
|
||||
* checked it.
|
||||
*
|
||||
* Note that the startup code will disable wildcard expansion if the local
|
||||
* shell environment variable "DISABLE_COMMANDLINE_WILDCARD_EXPANSION"
|
||||
* is set.
|
||||
*/
|
||||
extern BOOL __expand_wildcard_args;
|
||||
|
||||
/*
|
||||
* Similar to the boolean flag value __expand_wildcard_args described above,
|
||||
* a function can be called which may be used to enable/disable wildcard
|
||||
* expansion at runtime. The function is undefined by default, which means
|
||||
* that the __expand_wildcard_args value will take precedence. If you want
|
||||
* to override the effects of the __expand_wildcard_args variable, declare
|
||||
* your own check function and then assign it to the
|
||||
* __expand_wildcard_args_check pointer.
|
||||
*/
|
||||
extern BOOL (*__expand_wildcard_args_check)(void);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/*
|
||||
* Defaults for path delimiter (":") and the shell search path
|
||||
* ("/gcc/bin:/SDK/C:/SDK/Local/C:/C:.") as used by the execvp()
|
||||
* function.
|
||||
*/
|
||||
extern const char * __default_path_delimiter;
|
||||
extern const char * __default_path;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/*
|
||||
* 'environ' is the default environment variable table as used by the execl(),
|
||||
* execv() and execvp() functions. This needs to be initialized before you
|
||||
* can use it. The table has the following form:
|
||||
*
|
||||
* char ** environ =
|
||||
* {
|
||||
* "variable1=value",
|
||||
* "variable2=value",
|
||||
* NULL
|
||||
* };
|
||||
*
|
||||
* Note that if you initialize the 'environ' table you will also have to
|
||||
* provide for a function which prepares its contents in execve() for use
|
||||
* by the command to be executed. That function is called
|
||||
* __execve_environ_init(). Should program execution fail, you need to
|
||||
* clean up after what __execve_environ_init() set up. To do this, call
|
||||
* __execve_environ_exit(). There are stubs in clib2 for these functions
|
||||
* which essentially do nothing at all. You will have to implement these
|
||||
* yourself if you want to use them.
|
||||
*/
|
||||
extern char ** environ;
|
||||
|
||||
extern int __execve_environ_init(char * const envp[]);
|
||||
extern void __execve_environ_exit(char * const envp[]);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/*
|
||||
* The __execve_exit() function is called by execve() if the command
|
||||
* executed correctly and control should be returned to the shell. The
|
||||
* default behaviour is to eventually call exit(). You can, however,
|
||||
* replace __execve_exit() with a stub which does nothing at all. In
|
||||
* that case the execve() function will return control to the caller
|
||||
* instead.
|
||||
*/
|
||||
|
||||
extern void __execve_exit(int return_code);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/*
|
||||
* The unlink() and remove() functions in libunix.a may return success even
|
||||
* though deletion failed because the file/directory/link in question is still
|
||||
* reported as being "in use". This is the default behaviour. If you want the
|
||||
* deletion to fail instead, set '__unlink_retries' to FALSE.
|
||||
*/
|
||||
extern BOOL __unlink_retries;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: libgen.h,v 1.6 2006-01-08 12:06:14 obarthel Exp $
|
||||
* $Id: libgen.h,v 1.7 2006-09-25 13:29:47 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -53,8 +53,8 @@ extern "C" {
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
char * basename(char *path);
|
||||
char * dirname(char *path);
|
||||
char * basename(const char *path);
|
||||
char * dirname(const char *path);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math.h,v 1.21 2006-01-08 12:06:14 obarthel Exp $
|
||||
* $Id: math.h,v 1.22 2007-01-06 10:09:49 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -297,6 +297,7 @@ extern double hypot(double x,double y);
|
||||
extern double lgamma(double x);
|
||||
extern double log1p(double x);
|
||||
extern double logb(double x);
|
||||
extern long long int llrint(double x);
|
||||
extern long int lrint(double x);
|
||||
extern long int lround(double x);
|
||||
extern double nan(const char *tagp);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: stdlib.h,v 1.17 2006-01-08 12:06:14 obarthel Exp $
|
||||
* $Id: stdlib.h,v 1.18 2006-11-13 09:51:53 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -156,6 +156,7 @@ extern long atol(const char *str);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern void _exit(int status);
|
||||
extern int rand_r(unsigned int * seed);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: string.h,v 1.11 2006-01-08 12:06:14 obarthel Exp $
|
||||
* $Id: string.h,v 1.12 2006-09-17 17:36:42 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -106,6 +106,7 @@ extern void *memset(void *ptr, int val, size_t len);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern int strerror_r(int error,char * buffer,size_t buffer_size);
|
||||
extern char * index(const char *s, int c);
|
||||
extern char * rindex(const char *s, int c);
|
||||
|
||||
|
||||
190
library/include/sys/clib2_io.h
Normal file
190
library/include/sys/clib2_io.h
Normal file
@@ -0,0 +1,190 @@
|
||||
/*
|
||||
* $Id: clib2_io.h,v 1.4 2006-11-16 14:39:23 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
||||
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) sourcery.han.de>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Neither the name of Olaf Barthel nor the names of contributors
|
||||
* may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*****************************************************************************
|
||||
*
|
||||
* Documentation and source code for this library, and the most recent library
|
||||
* build are available from <http://sourceforge.net/projects/clib2>.
|
||||
*
|
||||
*****************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef _SYS_CLIB2_IO_H
|
||||
#define _SYS_CLIB2_IO_H
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* The following is not part of the ISO 'C' (1994) standard. */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Operations that can be performed by the file action function. */
|
||||
enum file_action_t
|
||||
{
|
||||
file_action_read,
|
||||
file_action_write,
|
||||
file_action_seek,
|
||||
file_action_close,
|
||||
file_action_set_blocking,
|
||||
file_action_set_async,
|
||||
file_action_examine
|
||||
};
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* A message sent to a file action function. */
|
||||
struct file_action_message
|
||||
{
|
||||
enum file_action_t fam_Action; /* What to do */
|
||||
char * fam_Data; /* Where to read/write the data */
|
||||
int fam_Size; /* How much data to write */
|
||||
|
||||
long int fam_Offset; /* The seek offset */
|
||||
int fam_Mode; /* The seek mode */
|
||||
|
||||
int fam_Arg; /* Action parameters, e.g. whether or not
|
||||
this file should be set non-blocking or
|
||||
use asynchronous I/O */
|
||||
|
||||
struct FileInfoBlock * fam_FileInfo; /* File information to be filled in */
|
||||
struct MsgPort * fam_FileSystem; /* File system pointer to be filled in */
|
||||
|
||||
int fam_Error; /* Error code, if any... */
|
||||
};
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* A forward declaration to make the following typedef work. */
|
||||
struct _fd;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* The file action function for unbuffered files. */
|
||||
typedef int (*_file_action_fd_t)(struct _fd * _fd,struct file_action_message * fam);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* A low level unbuffered file or socket. */
|
||||
struct _fd
|
||||
{
|
||||
int fd_Version; /* Version number of this definition
|
||||
of the '_fd' data structure (see
|
||||
below). */
|
||||
_file_action_fd_t fd_Action; /* Function to invoke to perform actions */
|
||||
void * fd_UserData; /* To be used by custom file action
|
||||
functions */
|
||||
ULONG fd_Flags; /* File properties */
|
||||
|
||||
union
|
||||
{
|
||||
BPTR fdu_File; /* A dos.library file handle */
|
||||
LONG fdu_Socket; /* A socket identifier */
|
||||
} fdu_Default;
|
||||
};
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* The version of the '_fd' data structure, covering the fields 'fd_Version'
|
||||
through 'fdu_Default' bears version number 1. */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Sneaky preprocessor tricks to make access to the file/socket IDs
|
||||
work smoothly. */
|
||||
#define fd_DefaultFile fdu_Default.fdu_File
|
||||
#define fd_File fdu_Default.fdu_File
|
||||
#define fd_Socket fdu_Default.fdu_Socket
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Flag bits that can be set in _fd->fd_Flags; not all of these may be in
|
||||
use, or can be changed. */
|
||||
#define FDF_READ (1UL<<0) /* Data can be read from this file */
|
||||
#define FDF_WRITE (1UL<<1) /* Data can be written to this file */
|
||||
#define FDF_APPEND (1UL<<2) /* Before any data is written to it,
|
||||
the file position must be set to the
|
||||
end of the file */
|
||||
#define FDF_NO_CLOSE (1UL<<3) /* Never close this file */
|
||||
#define FDF_NON_BLOCKING (1UL<<4) /* File was switched into non-blocking
|
||||
mode (console streams only) */
|
||||
#define FDF_IS_SOCKET (1UL<<5) /* This is not a disk file but a socket */
|
||||
#define FDF_IS_LOCKED (1UL<<6) /* This file has an advisory record lock set */
|
||||
#define FDF_IN_USE (1UL<<7) /* This file is in use */
|
||||
#define FDF_CREATED (1UL<<8) /* This file was newly created and may need
|
||||
to have its protection bits updated after
|
||||
it has been closed */
|
||||
#define FDF_CACHE_POSITION (1UL<<9) /* Cache the file position. */
|
||||
#define FDF_ASYNC_IO (1UL<<10) /* File was switched into asynchronous I/O
|
||||
mode (sockets only). */
|
||||
#define FDF_IS_INTERACTIVE (1UL<<11) /* File is attached to a console window or
|
||||
something like it. */
|
||||
#define FDF_STDIO (1UL<<12) /* File is to be attached to one of the
|
||||
standard input/output/error streams. */
|
||||
#define FDF_TERMIOS (1UL<<13) /* File is under termios control.
|
||||
FDF_IS_INTERACTIVE should also be set. */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Obtain a pointer to the _fd data structure associated with a file
|
||||
descriptor number. Note that this does not perform any locking, which
|
||||
means that you have to be absolutely certain that the file will not be
|
||||
closed while you are still looking at it. This function can return
|
||||
NULL if the file descriptor you provided is not valid. */
|
||||
extern struct _fd * __get_fd(int file_descriptor);
|
||||
|
||||
/* Replaces the action callback function and (optionally) returns the old
|
||||
function pointer; returns 0 for success and -1 for failure if you
|
||||
provided an invalid file descriptor. This function performs proper locking
|
||||
and is thus safe to use in a thread-safe environment. */
|
||||
extern int __change_fd_action(int file_descriptor,_file_action_fd_t new_action,_file_action_fd_t * old_action_ptr);
|
||||
|
||||
/* Replaces the user data pointer and (optionally) returns the old user
|
||||
data pointer; returns 0 for success and -1 for failure if you
|
||||
provided an invalid file descriptor. This function performs proper locking
|
||||
and is thus safe to use in a thread-safe environment. */
|
||||
extern int __change_fd_user_data(int file_descriptor,void * new_user_data,void ** old_user_data_ptr);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* _SYS_CLIB2_IO_H */
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: ioctl.h,v 1.4 2006-01-08 12:06:14 obarthel Exp $
|
||||
* $Id: ioctl.h,v 1.5 2006-06-21 15:53:55 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -47,6 +47,16 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifndef _SYS_SELECT_H
|
||||
#include <sys/select.h>
|
||||
#endif /* _SYS_SELECT_H */
|
||||
|
||||
#ifndef _SYS_FILIO_H
|
||||
#include <sys/filio.h>
|
||||
#endif /* _SYS_FILIO_H */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
99
library/include/sys/resource.h
Normal file
99
library/include/sys/resource.h
Normal file
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* $Id: resource.h,v 1.2 2006-07-28 14:02:32 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
||||
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) sourcery.han.de>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Neither the name of Olaf Barthel nor the names of contributors
|
||||
* may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*****************************************************************************
|
||||
*
|
||||
* Documentation and source code for this library, and the most recent library
|
||||
* build are available from <http://sourceforge.net/projects/clib2>.
|
||||
*
|
||||
*****************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef _SYS_RESOURCE_H
|
||||
#define _SYS_RESOURCE_H
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifndef _SYS_TYPES_H
|
||||
#include <sys/types.h> /* For the definition of rlim_t */
|
||||
#endif /* _SYS_TYPES_H */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* The following is not part of the ISO 'C' (1994) standard. */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define RLIM_INFINITY 0xffffffffUL
|
||||
#define RLIM_SAVED_MAX (RLIM_INFINITY-1)
|
||||
#define RLIM_SAVED_CUR (RLIM_INFINITY-2)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define RLIM_VMEM 1
|
||||
#define RLIM_AS RLIM_VMEM
|
||||
#define RLIM_CORE 2
|
||||
#define RLIM_CPU 3
|
||||
#define RLIM_DATA 4
|
||||
#define RLIM_FSIZE 5
|
||||
#define RLIM_NOFILE 6
|
||||
#define RLIM_OFILE RLIMIT_NOFILE
|
||||
#define RLIM_STACK 7
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
struct rlimit
|
||||
{
|
||||
rlim_t rlim_cur;
|
||||
rlim_t rlim_max;
|
||||
};
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern int getrlimit(int resource,struct rlimit *rlp);
|
||||
extern int setrlimit(int resource,const struct rlimit *rlp);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* _SYS_RESOURCE_H */
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: stat.h,v 1.9 2006-01-08 12:06:14 obarthel Exp $
|
||||
* $Id: stat.h,v 1.10 2006-07-28 13:19:12 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -112,6 +112,7 @@ extern "C" {
|
||||
#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) /* symbolic link */
|
||||
#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) /* fifo */
|
||||
#define S_ISBLK(m) (0) /* block special */
|
||||
#define S_ISSOCK(m) (((m) & S_IFSOCK) == S_IFSOCK) /* socket */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
|
||||
84
library/include/sys/systeminfo.h
Normal file
84
library/include/sys/systeminfo.h
Normal file
@@ -0,0 +1,84 @@
|
||||
/*
|
||||
* $Id: systeminfo.h,v 1.1 2006-07-28 14:02:32 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
||||
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) sourcery.han.de>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Neither the name of Olaf Barthel nor the names of contributors
|
||||
* may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*****************************************************************************
|
||||
*
|
||||
* Documentation and source code for this library, and the most recent library
|
||||
* build are available from <http://sourceforge.net/projects/clib2>.
|
||||
*
|
||||
*****************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef _SYS_SYSTEMINFO_H
|
||||
#define _SYS_SYSTEMINFO_H
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* The following is not part of the ISO 'C' (1994) standard. */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Numbers are picked to be the same as for Solaris */
|
||||
|
||||
#define SI_SYSNAME 1
|
||||
#define SI_HOSTNAME 2
|
||||
#define SI_RELEASE 3
|
||||
#define SI_VERSION 4
|
||||
#define SI_MACHINE 5
|
||||
#define SI_ARCHITECTURE 6
|
||||
#define SI_HW_SERIAL 7
|
||||
#define SI_HW_PROVIDER 8
|
||||
|
||||
#define SI_SET_HOSTNAME 258
|
||||
|
||||
#define SI_PLATFORM 513
|
||||
#define SI_ISALIST 514
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern long sysinfo(int cmd,char *buf,long buflen);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* _SYS_SYSTEMINFO_H */
|
||||
82
library/include/sys/timeb.h
Normal file
82
library/include/sys/timeb.h
Normal file
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
* $Id: timeb.h,v 1.3 2006-07-28 14:02:32 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
||||
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) sourcery.han.de>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Neither the name of Olaf Barthel nor the names of contributors
|
||||
* may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*****************************************************************************
|
||||
*
|
||||
* Documentation and source code for this library, and the most recent library
|
||||
* build are available from <http://sourceforge.net/projects/clib2>.
|
||||
*
|
||||
*****************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef _SYS_TIMEB_H
|
||||
#define _SYS_TIMEB_H
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifndef _TIME_H
|
||||
#include <time.h> /* For the definition of time_t */
|
||||
#endif /* _TIME_H */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* The following is not part of the ISO 'C' (1994) standard. */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
struct timeb
|
||||
{
|
||||
time_t time;
|
||||
unsigned short millitm;
|
||||
short timezone;
|
||||
short dstflag;
|
||||
};
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern int ftime(struct timeb *);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* _SYS_TIMEB_H */
|
||||
73
library/include/ulimit.h
Normal file
73
library/include/ulimit.h
Normal file
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* $Id: ulimit.h,v 1.2 2006-07-28 14:02:32 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
||||
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) sourcery.han.de>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Neither the name of Olaf Barthel nor the names of contributors
|
||||
* may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*****************************************************************************
|
||||
*
|
||||
* Documentation and source code for this library, and the most recent library
|
||||
* build are available from <http://sourceforge.net/projects/clib2>.
|
||||
*
|
||||
*****************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef _ULIMIT_H
|
||||
#define _ULIMIT_H
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* The following is not part of the ISO 'C' (1994) standard. */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define UL_GETFSIZE 1
|
||||
#define UL_SETFSIZE 2
|
||||
#define UL_GMEMLIM 3
|
||||
#define UL_GDESLIM 4
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern long ulimit(int cmd,long newlimit);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* _ULIMIT_H */
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: unistd.h,v 1.18 2006-01-29 09:17:00 obarthel Exp $
|
||||
* $Id: unistd.h,v 1.23 2007-01-06 10:09:49 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -51,6 +51,10 @@
|
||||
#include <fcntl.h>
|
||||
#endif /* _FCNTL_H */
|
||||
|
||||
#ifndef _STDIO_H
|
||||
#include <stdio.h>
|
||||
#endif /* _STDIO_H */
|
||||
|
||||
#if !defined(__NO_NET_API) && !defined(_SYS_SELECT_H)
|
||||
#include <sys/select.h>
|
||||
#endif /* __NO_NET_API && _SYS_SELECT_H */
|
||||
@@ -114,7 +118,7 @@ extern int chdir(const char * path_name);
|
||||
extern int lockf(int file_descriptor, int function, off_t size);
|
||||
extern unsigned int sleep(unsigned int seconds);
|
||||
extern void usleep(unsigned long microseconds);
|
||||
extern int getopt(int argc, char * argv[], char *opts);
|
||||
extern int getopt(int argc, char * const argv[], const char *opts);
|
||||
extern pid_t getpid(void);
|
||||
extern char *realpath(const char *file_name, char *resolved_name);
|
||||
extern int fsync(int file_descriptor);
|
||||
@@ -122,7 +126,12 @@ extern int fdatasync(int file_descriptor);
|
||||
extern char *ttyname(int);
|
||||
extern int ttyname_r(int file_descriptor,char *name,size_t buflen);
|
||||
extern int ttyname_t(int,char *,size_t);
|
||||
|
||||
extern int execl(const char *path,const char *arg0,...);
|
||||
extern int execle(const char *path,const char *arg0,...);
|
||||
extern int execlp(const char *path,const char *arg0,...);
|
||||
extern int execv(const char *path,char * const argv[]);
|
||||
extern int execve(const char *path,char *const argv[],char *const envp[]);
|
||||
extern int execvp(const char *command,char * const argv[]);
|
||||
extern int profil(unsigned short *buffer, size_t bufSize, size_t offset, unsigned int scale);
|
||||
|
||||
/****************************************************************************/
|
||||
@@ -167,6 +176,42 @@ extern int setuid(uid_t uid);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* The following is for use with pathconf()/fpathconf() */
|
||||
#define _PC_LINK_MAX 0
|
||||
#define _PC_MAX_CANON 1
|
||||
#define _PC_MAX_INPUT 2
|
||||
#define _PC_NAME_MAX 3
|
||||
#define _PC_PATH_MAX 4
|
||||
#define _PC_PIPE_BUF 5
|
||||
#define _PC_CHOWN_RESTRICTED 6
|
||||
#define _PC_NO_TRUNC 7
|
||||
#define _PC_VDISABLE 8
|
||||
#define _PC_SYNC_IO 9
|
||||
#define _PC_ASYNC_IO 10
|
||||
#define _PC_PRIO_IO 11
|
||||
#define _PC_SOCK_MAXBUF 12
|
||||
#define _PC_FILESIZEBITS 13
|
||||
#if 0
|
||||
#define _PC_REC_INCR_XFER_SIZE 14
|
||||
#define _PC_REC_MAX_XFER_SIZE 15
|
||||
#define _PC_REC_MIN_XFER_SIZE 16
|
||||
#define _PC_REC_XFER_ALIGN 17
|
||||
#define _PC_ALLOC_SIZE_MIN 18
|
||||
#endif
|
||||
#define _PC_SYMLINK_MAX 19
|
||||
#define _PC_XATTR_EXISTS 20
|
||||
#define _PC_XATTR_ENABLED 21
|
||||
|
||||
/* Amiga Specific */
|
||||
#define _PC_DOSTYPE 300
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern long pathconf(const char *path,int name);
|
||||
extern long fpathconf(int file_descriptor,int name);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
127
library/libamiga.gmk
Executable file
127
library/libamiga.gmk
Executable file
@@ -0,0 +1,127 @@
|
||||
#
|
||||
# $Id: libamiga.gmk,v 1.1 2006-09-17 17:37:27 obarthel Exp $
|
||||
#
|
||||
# :ts=8
|
||||
#
|
||||
# -*- mode: makefile; -*-
|
||||
|
||||
##############################################################################
|
||||
|
||||
LIBS += \
|
||||
lib/libamiga.a \
|
||||
lib/soft-float/libamiga.a \
|
||||
lib/small-data/libamiga.a \
|
||||
lib/baserel/libamiga.a \
|
||||
lib.threadsafe/libamiga.a \
|
||||
lib.threadsafe/soft-float/libamiga.a \
|
||||
lib.threadsafe/small-data/libamiga.a \
|
||||
lib.threadsafe/baserel/libamiga.a
|
||||
|
||||
##############################################################################
|
||||
|
||||
AMIGA_LIB = \
|
||||
amiga.lib_rev.o \
|
||||
amiga_acrypt.o \
|
||||
amiga_addtof.o \
|
||||
amiga_argarraydone.o \
|
||||
amiga_argarrayinit.o \
|
||||
amiga_argint.o \
|
||||
amiga_argstring.o \
|
||||
amiga_beginio.o \
|
||||
amiga_callhooka.o \
|
||||
amiga_coercemethod.o \
|
||||
amiga_createextio.o \
|
||||
amiga_createport.o \
|
||||
amiga_createstdio.o \
|
||||
amiga_createtask.o \
|
||||
amiga_deleteextio.o \
|
||||
amiga_deleteport.o \
|
||||
amiga_deletestdio.o \
|
||||
amiga_deletetask.o \
|
||||
amiga_domethod.o \
|
||||
amiga_dosupermethod.o \
|
||||
amiga_dotimer.o \
|
||||
amiga_fastrand.o \
|
||||
amiga_freeievents.o \
|
||||
amiga_hotkey.o \
|
||||
amiga_invertstring.o \
|
||||
amiga_newlist.o \
|
||||
amiga_rangerand.o \
|
||||
amiga_remtof.o \
|
||||
amiga_rexxvars.o \
|
||||
amiga_setsuperattrs.o \
|
||||
amiga_timedelay.o \
|
||||
amiga_waitbeam.o
|
||||
|
||||
##############################################################################
|
||||
|
||||
# Dependencies to rebuild if the library version changes
|
||||
|
||||
obj/libamiga/amiga.lib_rev.o : amiga.lib_rev.c amiga.lib_rev.h
|
||||
obj/soft-float/libamiga/amiga.lib_rev.o : amiga.lib_rev.c amiga.lib_rev.h
|
||||
obj/small-data/libamiga/amiga.lib_rev.o : amiga.lib_rev.c amiga.lib_rev.h
|
||||
obj/baserel/libamiga/amiga.lib_rev.o : amiga.lib_rev.c amiga.lib_rev.h
|
||||
obj.threadsafe/libamiga/amiga.lib_rev.o : amiga.lib_rev.c amiga.lib_rev.h
|
||||
obj.threadsafe/soft-float/libamiga/amiga.lib_rev.o : amiga.lib_rev.c amiga.lib_rev.h
|
||||
obj.threadsafe/small-data/libamiga/amiga.lib_rev.o : amiga.lib_rev.c amiga.lib_rev.h
|
||||
obj.threadsafe/baserel/libamiga/amiga.lib_rev.o : amiga.lib_rev.c amiga.lib_rev.h
|
||||
|
||||
##############################################################################
|
||||
|
||||
obj/libamiga/%.o : CFLAGS += $(LARGEDATA)
|
||||
obj/libamiga/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj/soft-float/libamiga/%.o : CFLAGS += $(SOFTFLOAT)
|
||||
obj/soft-float/libamiga/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj/small-data/libamiga/%.o : CFLAGS += $(SMALLDATA)
|
||||
obj/small-data/libamiga/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj/baserel/libamiga/%.o : CFLAGS += $(BASEREL)
|
||||
obj/baserel/libamiga/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/libamiga/%.o : CFLAGS += $(THREADSAFE) $(LARGEDATA)
|
||||
obj.threadsafe/libamiga/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/soft-float/libamiga/%.o : CFLAGS += $(THREADSAFE) $(SOFTFLOAT)
|
||||
obj.threadsafe/soft-float/libamiga/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/small-data/libamiga/%.o : CFLAGS += $(THREADSAFE) $(SMALLDATA)
|
||||
obj.threadsafe/small-data/libamiga/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/baserel/libamiga/%.o : CFLAGS += $(THREADSAFE) $(BASEREL)
|
||||
obj.threadsafe/baserel/libamiga/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
##############################################################################
|
||||
|
||||
lib/libamiga.a : $(addprefix obj/libamiga/,$(AMIGA_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib/soft-float/libamiga.a : $(addprefix obj/soft-float/libamiga/,$(AMIGA_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib/small-data/libamiga.a : $(addprefix obj/small-data/libamiga/,$(AMIGA_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib/baserel/libamiga.a : $(addprefix obj/baserel/libamiga/,$(AMIGA_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/libamiga.a : $(addprefix obj.threadsafe/libamiga/,$(AMIGA_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/soft-float/libamiga.a : $(addprefix obj.threadsafe/soft-float/libamiga/,$(AMIGA_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/small-data/libamiga.a : $(addprefix obj.threadsafe/small-data/libamiga/,$(AMIGA_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/baserel/libamiga.a : $(addprefix obj.threadsafe/baserel/libamiga/,$(AMIGA_LIB))
|
||||
@$(MAKELIB)
|
||||
439
library/libc.gmk
Executable file
439
library/libc.gmk
Executable file
@@ -0,0 +1,439 @@
|
||||
#
|
||||
# $Id: libc.gmk,v 1.4 2006-11-16 14:39:23 obarthel Exp $
|
||||
#
|
||||
# :ts=8
|
||||
#
|
||||
# -*- mode: makefile; -*-
|
||||
|
||||
##############################################################################
|
||||
|
||||
LIBS += \
|
||||
lib/libc.a \
|
||||
lib/soft-float/libc.a \
|
||||
lib/small-data/libc.a \
|
||||
lib/baserel/libc.a \
|
||||
lib.threadsafe/libc.a \
|
||||
lib.threadsafe/soft-float/libc.a \
|
||||
lib.threadsafe/small-data/libc.a \
|
||||
lib.threadsafe/baserel/libc.a
|
||||
|
||||
##############################################################################
|
||||
|
||||
C_LIB := \
|
||||
c.lib_rev.o \
|
||||
ctype_isalnum.o \
|
||||
ctype_isalpha.o \
|
||||
ctype_isascii.o \
|
||||
ctype_isblank.o \
|
||||
ctype_iscntrl.o \
|
||||
ctype_isdigit.o \
|
||||
ctype_isgraph.o \
|
||||
ctype_islower.o \
|
||||
ctype_isprint.o \
|
||||
ctype_ispunct.o \
|
||||
ctype_isspace.o \
|
||||
ctype_isupper.o \
|
||||
ctype_isxdigit.o \
|
||||
ctype_table.o \
|
||||
ctype_tolower.o \
|
||||
ctype_toupper.o \
|
||||
dirent_closedir.o \
|
||||
dirent_opendir.o \
|
||||
dirent_readdir.o \
|
||||
dirent_rewinddir.o \
|
||||
errno_data.o \
|
||||
fcntl_close.o \
|
||||
fcntl_creat.o \
|
||||
fcntl_fcntl.o \
|
||||
fcntl_get_default_file.o \
|
||||
fcntl_lock.o \
|
||||
fcntl_lseek.o \
|
||||
fcntl_open.o \
|
||||
fcntl_read.o \
|
||||
fcntl_write.o \
|
||||
ftw_ftw.o \
|
||||
ftw_nftw.o \
|
||||
inttypes_imaxdiv.o \
|
||||
inttypes_imaxabs.o \
|
||||
inttypes_strtoimax.o \
|
||||
inttypes_strtoumax.o \
|
||||
libgen_basename.o \
|
||||
libgen_dirname.o \
|
||||
locale_init_exit.o \
|
||||
locale_localeconv.o \
|
||||
locale_open_locale.o \
|
||||
locale_setlocale.o \
|
||||
mount_convertinfo.o \
|
||||
mount_fstatfs.o \
|
||||
mount_statfs.o \
|
||||
profile_profil.o \
|
||||
signal_checkabort.o \
|
||||
signal_data.o \
|
||||
signal_kill.o \
|
||||
signal_mask.o \
|
||||
signal_raise.o \
|
||||
signal_sigaddset.o \
|
||||
signal_sigblock.o \
|
||||
signal_sigemptyset.o \
|
||||
signal_sigmask.o \
|
||||
signal_signal.o \
|
||||
signal_sigprocmask.o \
|
||||
signal_sigsetmask.o \
|
||||
stat_chmod.o \
|
||||
stat_convertfileinfo.o \
|
||||
stat_fchmod.o \
|
||||
stat_fstat.o \
|
||||
stat_lstat.o \
|
||||
stat_lock.o \
|
||||
stat_mkdir.o \
|
||||
stat_rmdir.o \
|
||||
stat_stat.o \
|
||||
stat_umask.o \
|
||||
stdio_asprintf.o \
|
||||
stdio_change_fd_action.o \
|
||||
stdio_change_fd_user_data.o \
|
||||
stdio_clearerr.o \
|
||||
stdio_dropiobreadbuffer.o \
|
||||
stdio_duplicate_fd.o \
|
||||
stdio_examine_fh.o \
|
||||
stdio_fclose.o \
|
||||
stdio_fdhookentry.o \
|
||||
stdio_feof.o \
|
||||
stdio_ferror.o \
|
||||
stdio_fflush.o \
|
||||
stdio_fgetc.o \
|
||||
stdio_fgetpos.o \
|
||||
stdio_fgets.o \
|
||||
stdio_filliobreadbuffer.o \
|
||||
stdio_findvacantfdentry.o \
|
||||
stdio_findvacantiobentry.o \
|
||||
stdio_flockfile.o \
|
||||
stdio_flush.o \
|
||||
stdio_flush_all_files.o \
|
||||
stdio_flushiobwritebuffer.o \
|
||||
stdio_fopen.o \
|
||||
stdio_fprintf.o \
|
||||
stdio_fputc.o \
|
||||
stdio_fputs.o \
|
||||
stdio_fread.o \
|
||||
stdio_freopen.o \
|
||||
stdio_fscanf.o \
|
||||
stdio_fseek.o \
|
||||
stdio_fseeko.o \
|
||||
stdio_fsetpos.o \
|
||||
stdio_ftell.o \
|
||||
stdio_ftello.o \
|
||||
stdio_ftrylockfile.o \
|
||||
stdio_funlockfile.o \
|
||||
stdio_fwrite.o \
|
||||
stdio_getc.o \
|
||||
stdio_getc_unlocked.o \
|
||||
stdio_getchar.o \
|
||||
stdio_getchar_unlocked.o \
|
||||
stdio_gets.o \
|
||||
stdio_get_fd.o \
|
||||
stdio_get_file_descriptor.o \
|
||||
stdio_growfdtable.o \
|
||||
stdio_growiobtable.o \
|
||||
stdio_grow_file.o \
|
||||
stdio_initializefd.o \
|
||||
stdio_initializeiob.o \
|
||||
stdio_init_exit.o \
|
||||
stdio_file_init.o \
|
||||
stdio_iobhookentry.o \
|
||||
stdio_lock.o \
|
||||
stdio_locksemaphorename.o \
|
||||
stdio_nostdio.o \
|
||||
stdio_openiob.o \
|
||||
stdio_parent_of_fh.o \
|
||||
stdio_perror.o \
|
||||
stdio_popen.o \
|
||||
stdio_printf.o \
|
||||
stdio_putc.o \
|
||||
stdio_putc_unlocked.o \
|
||||
stdio_putchar.o \
|
||||
stdio_putchar_unlocked.o \
|
||||
stdio_puts.o \
|
||||
stdio_remove.o \
|
||||
stdio_remove_fd_alias.o \
|
||||
stdio_rename.o \
|
||||
stdio_resolve_fd_file.o \
|
||||
stdio_rewind.o \
|
||||
stdio_scanf.o \
|
||||
stdio_setbuf.o \
|
||||
stdio_setvbuf.o \
|
||||
stdio_snprintf.o \
|
||||
stdio_sprintf.o \
|
||||
stdio_sscanf.o \
|
||||
stdio_sscanf_hook_entry.o \
|
||||
stdio_tmpfile.o \
|
||||
stdio_tmpnam.o \
|
||||
stdio_translateioerror.o \
|
||||
stdio_ungetc.o \
|
||||
stdio_unlockfile.o \
|
||||
stdio_vasprintf.o \
|
||||
stdio_vasprintf_hook_entry.o \
|
||||
stdio_vfprintf.o \
|
||||
stdio_vfscanf.o \
|
||||
stdio_vsscanf.o \
|
||||
stdio_vscanf.o \
|
||||
stdio_vprintf.o \
|
||||
stdio_vsnprintf.o \
|
||||
stdio_vsnprintf_hook_entry.o \
|
||||
stdio_vsprintf.o \
|
||||
stdio_vsprintf_hook_entry.o \
|
||||
stdlib_abort.o \
|
||||
stdlib_abs.o \
|
||||
stdlib_alloca.o \
|
||||
stdlib_alloca_cleanup.o \
|
||||
stdlib_alloca_trap.o \
|
||||
stdlib_assertion_failure.o \
|
||||
stdlib_atexit.o \
|
||||
stdlib_atoi.o \
|
||||
stdlib_atol.o \
|
||||
stdlib_atoll.o \
|
||||
stdlib_bsearch.o \
|
||||
stdlib_calloc.o \
|
||||
stdlib_checkdetach.o \
|
||||
stdlib_constructor.o \
|
||||
stdlib_constructor_begin.o \
|
||||
stdlib_default_pool_size.o \
|
||||
stdlib_default_puddle_size.o \
|
||||
stdlib_destructor.o \
|
||||
stdlib_detach.o \
|
||||
stdlib_disablerequesters.o \
|
||||
stdlib_div.o \
|
||||
stdlib_divsi3.o \
|
||||
stdlib_divsi4.o \
|
||||
stdlib_dosbase.o \
|
||||
stdlib_exit.o \
|
||||
stdlib_free.o \
|
||||
stdlib_getdefstacksize.o \
|
||||
stdlib_getenv.o \
|
||||
stdlib_getmemstats.o \
|
||||
stdlib_getsp.o \
|
||||
stdlib_get_errno.o \
|
||||
stdlib_isresident.o \
|
||||
stdlib_labs.o \
|
||||
stdlib_llabs.o \
|
||||
stdlib_ldiv.o \
|
||||
stdlib_lldiv.o \
|
||||
stdlib_lib_main.o \
|
||||
stdlib_lib_startup.o \
|
||||
stdlib_machine_test.o \
|
||||
stdlib_main.o \
|
||||
stdlib_main_stub.o \
|
||||
stdlib_malloc.o \
|
||||
stdlib_math.o \
|
||||
stdlib_mkdtemp.o \
|
||||
stdlib_mkstemp.o \
|
||||
stdlib_mktemp.o \
|
||||
stdlib_modsi3.o \
|
||||
stdlib_mulsi3.o \
|
||||
stdlib_never_free.o \
|
||||
stdlib_osliberror.o \
|
||||
stdlib_oslibversion.o \
|
||||
stdlib_priority.o \
|
||||
stdlib_process_name.o \
|
||||
stdlib_program_name.o \
|
||||
stdlib_putenv.o \
|
||||
stdlib_qsort.o \
|
||||
stdlib_rand.o \
|
||||
stdlib_rand_r.o \
|
||||
stdlib_realloc.o \
|
||||
stdlib_red_black.o \
|
||||
stdlib_resetmemstats.o \
|
||||
stdlib_semaphore.o \
|
||||
stdlib_setenv.o \
|
||||
stdlib_setjmp.o \
|
||||
stdlib_set_errno.o \
|
||||
stdlib_set_process_window.o \
|
||||
stdlib_shell_escape.o \
|
||||
stdlib_showerror.o \
|
||||
stdlib_srand.o \
|
||||
stdlib_stackargbytes.o \
|
||||
stdlib_stackcheck.o \
|
||||
stdlib_stackoverflow.o \
|
||||
stdlib_stacksafezone.o \
|
||||
stdlib_stacksize.o \
|
||||
stdlib_stack_usage.o \
|
||||
stdlib_arg.o \
|
||||
stdlib_stdio_window_spec.o \
|
||||
stdlib_strtol.o \
|
||||
stdlib_strtoll.o \
|
||||
stdlib_strtoul.o \
|
||||
stdlib_strtoull.o \
|
||||
stdlib_swapstack.o \
|
||||
stdlib_sysbase.o \
|
||||
stdlib_system.o \
|
||||
stdlib_termination_message.o \
|
||||
stdlib_threshold.o \
|
||||
stdlib_utilitybase.o \
|
||||
stdlib_udivsi3.o \
|
||||
stdlib_udivsi4.o \
|
||||
stdlib_umodsi3.o \
|
||||
stdlib_unsetenv.o \
|
||||
strings_ffs.o \
|
||||
strings_strcasecmp.o \
|
||||
strings_strncasecmp.o \
|
||||
string_bcmp.o \
|
||||
string_bcopy.o \
|
||||
string_bzero.o \
|
||||
string_index.o \
|
||||
string_memchr.o \
|
||||
string_memcmp.o \
|
||||
string_memcpy.o \
|
||||
string_memmove.o \
|
||||
string_memset.o \
|
||||
string_rindex.o \
|
||||
string_strcat.o \
|
||||
string_strchr.o \
|
||||
string_strcmp.o \
|
||||
string_strcoll.o \
|
||||
string_strcpy.o \
|
||||
string_strcspn.o \
|
||||
string_strdup.o \
|
||||
string_strerror.o \
|
||||
string_strerror_r.o \
|
||||
string_strlcat.o \
|
||||
string_strlcpy.o \
|
||||
string_strlen.o \
|
||||
string_strncat.o \
|
||||
string_strncmp.o \
|
||||
string_strncpy.o \
|
||||
string_strpbrk.o \
|
||||
string_strrchr.o \
|
||||
string_strspn.o \
|
||||
string_strstr.o \
|
||||
string_strtok.o \
|
||||
string_strtok_r.o \
|
||||
string_strxfrm.o \
|
||||
time_asctime.o \
|
||||
time_asctime_r.o \
|
||||
time_clock.o \
|
||||
time_converttime.o \
|
||||
time_convert_datestamp.o \
|
||||
time_convert_time.o \
|
||||
time_ctime.o \
|
||||
time_ctime_r.o \
|
||||
time_data.o \
|
||||
time_days_per_date.o \
|
||||
time_gettimeofday.o \
|
||||
time_gmtime.o \
|
||||
time_gmtime_r.o \
|
||||
time_localtime.o \
|
||||
time_localtime_r.o \
|
||||
time_mktime.o \
|
||||
time_numbertostring.o \
|
||||
time_strftime.o \
|
||||
time_time.o \
|
||||
time_weekday.o \
|
||||
uio_readv.o \
|
||||
uio_writev.o \
|
||||
ulimit_ulimit.o \
|
||||
unistd_access.o \
|
||||
unistd_chdir.o \
|
||||
unistd_chdir_exit.o \
|
||||
unistd_chown.o \
|
||||
unistd_currentpathname.o \
|
||||
unistd_dup.o \
|
||||
unistd_dup2.o \
|
||||
unistd_fchown.o \
|
||||
unistd_fdatasync.o \
|
||||
unistd_fdopen.o \
|
||||
unistd_fileno.o \
|
||||
unistd_fsync.o \
|
||||
unistd_ftruncate.o \
|
||||
unistd_getcwd.o \
|
||||
unistd_getopt.o \
|
||||
unistd_getpid.o \
|
||||
unistd_init_exit.o \
|
||||
unistd_isatty.o \
|
||||
unistd_lchown.o \
|
||||
unistd_link.o \
|
||||
unistd_lockf.o \
|
||||
unistd_readlink.o \
|
||||
unistd_realpath.o \
|
||||
unistd_sleep.o \
|
||||
unistd_symlink.o \
|
||||
unistd_sync_fd.o \
|
||||
unistd_timer.o \
|
||||
unistd_time_delay.o \
|
||||
unistd_truncate.o \
|
||||
unistd_unlink.o \
|
||||
unistd_usleep.o \
|
||||
utime_utime.o \
|
||||
utsname_uname.o
|
||||
|
||||
##############################################################################
|
||||
|
||||
# Dependencies to rebuild if the library version changes
|
||||
|
||||
obj/libc/c.lib_rev.o : c.lib_rev.c c.lib_rev.h
|
||||
obj/soft-float/libc/c.lib_rev.o : c.lib_rev.c c.lib_rev.h
|
||||
obj/small-data/libc/c.lib_rev.o : c.lib_rev.c c.lib_rev.h
|
||||
obj/baserel/libc/c.lib_rev.o : c.lib_rev.c c.lib_rev.h
|
||||
obj.threadsafe/libc/c.lib_rev.o : c.lib_rev.c c.lib_rev.h
|
||||
obj.threadsafe/soft-float/libc/c.lib_rev.o : c.lib_rev.c c.lib_rev.h
|
||||
obj.threadsafe/small-data/libc/c.lib_rev.o : c.lib_rev.c c.lib_rev.h
|
||||
obj.threadsafe/baserel/libc/c.lib_rev.o : c.lib_rev.c c.lib_rev.h
|
||||
|
||||
##############################################################################
|
||||
|
||||
obj/libc/%.o : CFLAGS += $(LARGEDATA)
|
||||
obj/libc/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj/soft-float/libc/%.o : CFLAGS += $(SOFTFLOAT)
|
||||
obj/soft-float/libc/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj/small-data/libc/%.o : CFLAGS += $(SMALLDATA)
|
||||
obj/small-data/libc/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj/baserel/libc/%.o : CFLAGS += $(BASEREL)
|
||||
obj/baserel/libc/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/libc/%.o : CFLAGS += $(THREADSAFE) $(LARGEDATA)
|
||||
obj.threadsafe/libc/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/soft-float/libc/%.o : CFLAGS += $(THREADSAFE) $(SOFTFLOAT)
|
||||
obj.threadsafe/soft-float/libc/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/small-data/libc/%.o : CFLAGS += $(THREADSAFE) $(SMALLDATA)
|
||||
obj.threadsafe/small-data/libc/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/baserel/libc/%.o : CFLAGS += $(THREADSAFE) $(BASEREL)
|
||||
obj.threadsafe/baserel/libc/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
##############################################################################
|
||||
|
||||
lib/libc.a : $(addprefix obj/libc/,$(C_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib/soft-float/libc.a : $(addprefix obj/soft-float/libc/,$(C_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib/small-data/libc.a : $(addprefix obj/small-data/libc/,$(C_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib/baserel/libc.a : $(addprefix obj/baserel/libc/,$(C_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/libc.a : $(addprefix obj.threadsafe/libc/,$(C_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/soft-float/libc.a : $(addprefix obj.threadsafe/soft-float/libc/,$(C_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/small-data/libc.a : $(addprefix obj.threadsafe/small-data/libc/,$(C_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/baserel/libc.a : $(addprefix obj.threadsafe/baserel/libc/,$(C_LIB))
|
||||
@$(MAKELIB)
|
||||
125
library/libdebug.gmk
Executable file
125
library/libdebug.gmk
Executable file
@@ -0,0 +1,125 @@
|
||||
#
|
||||
# $Id: libdebug.gmk,v 1.1 2006-09-17 17:37:27 obarthel Exp $
|
||||
#
|
||||
# :ts=8
|
||||
#
|
||||
# -*- mode: makefile; -*-
|
||||
|
||||
##############################################################################
|
||||
|
||||
LIBS += \
|
||||
lib/libdebug.a \
|
||||
lib/soft-float/libdebug.a \
|
||||
lib/small-data/libdebug.a \
|
||||
lib/baserel/libdebug.a \
|
||||
lib.threadsafe/libdebug.a \
|
||||
lib.threadsafe/soft-float/libdebug.a \
|
||||
lib.threadsafe/small-data/libdebug.a \
|
||||
lib.threadsafe/baserel/libdebug.a
|
||||
|
||||
##############################################################################
|
||||
|
||||
DEBUG_LIB = \
|
||||
debug.lib_rev.o \
|
||||
debug.o \
|
||||
debug_cmpstrexec.o \
|
||||
debug_kcmpstr.o \
|
||||
debug_kdofmt.o \
|
||||
debug_kgetc.o \
|
||||
debug_kgetch1.o \
|
||||
debug_kgetch2.o \
|
||||
debug_kgetchar1.o \
|
||||
debug_kgetchar2.o \
|
||||
debug_kgetnum1.o \
|
||||
debug_kgetnum2.o \
|
||||
debug_kmaygetch.o \
|
||||
debug_kmaygetchar.o \
|
||||
debug_kprintf1.o \
|
||||
debug_kprintf2.o \
|
||||
debug_kputc.o \
|
||||
debug_kputch1.o \
|
||||
debug_kputch2.o \
|
||||
debug_kputchar1.o \
|
||||
debug_kputchar2.o \
|
||||
debug_kputfmt.o \
|
||||
debug_kputs1.o \
|
||||
debug_kputs2.o \
|
||||
debug_kputstr1.o \
|
||||
debug_kputstr2.o \
|
||||
debug_kvprintf1.o \
|
||||
debug_kvprintf2.o \
|
||||
debug_level.o
|
||||
|
||||
##############################################################################
|
||||
|
||||
# Dependencies to rebuild if the library version changes
|
||||
|
||||
obj/libdebug/debug.lib_rev.o : debug.lib_rev.c debug.lib_rev.h
|
||||
obj/soft-float/libdebug/debug.lib_rev.o : debug.lib_rev.c debug.lib_rev.h
|
||||
obj/small-data/libdebug/debug.lib_rev.o : debug.lib_rev.c debug.lib_rev.h
|
||||
obj/baserel/libdebug/debug.lib_rev.o : debug.lib_rev.c debug.lib_rev.h
|
||||
obj.threadsafe/libdebug/debug.lib_rev.o : debug.lib_rev.c debug.lib_rev.h
|
||||
obj.threadsafe/soft-float/libdebug/debug.lib_rev.o : debug.lib_rev.c debug.lib_rev.h
|
||||
obj.threadsafe/small-data/libdebug/debug.lib_rev.o : debug.lib_rev.c debug.lib_rev.h
|
||||
obj.threadsafe/baserel/libdebug/debug.lib_rev.o : debug.lib_rev.c debug.lib_rev.h
|
||||
|
||||
##############################################################################
|
||||
|
||||
|
||||
obj/libdebug/%.o : CFLAGS += $(LARGEDATA)
|
||||
obj/libdebug/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj/soft-float/libdebug/%.o : CFLAGS += $(SOFTFLOAT)
|
||||
obj/soft-float/libdebug/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj/small-data/libdebug/%.o : CFLAGS += $(SMALLDATA)
|
||||
obj/small-data/libdebug/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj/baserel/libdebug/%.o : CFLAGS += $(BASEREL)
|
||||
obj/baserel/libdebug/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/libdebug/%.o : CFLAGS += $(THREADSAFE) $(LARGEDATA)
|
||||
obj.threadsafe/libdebug/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/soft-float/libdebug/%.o : CFLAGS += $(THREADSAFE) $(SOFTFLOAT)
|
||||
obj.threadsafe/soft-float/libdebug/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/small-data/libdebug/%.o : CFLAGS += $(THREADSAFE) $(SMALLDATA)
|
||||
obj.threadsafe/small-data/libdebug/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/baserel/libdebug/%.o : CFLAGS += $(THREADSAFE) $(BASEREL)
|
||||
obj.threadsafe/baserel/libdebug/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
##############################################################################
|
||||
|
||||
lib/libdebug.a : $(addprefix obj/libdebug/,$(DEBUG_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib/soft-float/libdebug.a : $(addprefix obj/soft-float/libdebug/,$(DEBUG_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib/small-data/libdebug.a : $(addprefix obj/small-data/libdebug/,$(DEBUG_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib/baserel/libdebug.a : $(addprefix obj/baserel/libdebug/,$(DEBUG_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/libdebug.a : $(addprefix obj.threadsafe/libdebug/,$(DEBUG_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/soft-float/libdebug.a : $(addprefix obj.threadsafe/soft-float/libdebug/,$(DEBUG_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/small-data/libdebug.a : $(addprefix obj.threadsafe/small-data/libdebug/,$(DEBUG_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/baserel/libdebug.a : $(addprefix obj.threadsafe/baserel/libdebug/,$(DEBUG_LIB))
|
||||
@$(MAKELIB)
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: libgen_basename.c,v 1.4 2006-01-08 12:04:22 obarthel Exp $
|
||||
* $Id: libgen_basename.c,v 1.8 2006-10-02 07:15:37 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -33,6 +33,7 @@
|
||||
|
||||
#include <string.h>
|
||||
#include <libgen.h>
|
||||
#include <stdio.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
@@ -45,9 +46,12 @@
|
||||
/****************************************************************************/
|
||||
|
||||
char *
|
||||
basename(char *path)
|
||||
basename(const char *path)
|
||||
{
|
||||
static char new_path[MAXPATHLEN];
|
||||
const char * str;
|
||||
char * result;
|
||||
size_t len;
|
||||
|
||||
ENTER();
|
||||
|
||||
@@ -56,41 +60,63 @@ basename(char *path)
|
||||
else
|
||||
SHOWSTRING(path);
|
||||
|
||||
/* An empty path always comes out as the "current directory". */
|
||||
if(path == NULL || path[0] == '\0')
|
||||
{
|
||||
result = ".";
|
||||
str = ".";
|
||||
len = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
int len,i;
|
||||
|
||||
/* Strip all trailing slashes. */
|
||||
len = strlen(path);
|
||||
|
||||
while(len > 0 && path[len-1] == '/')
|
||||
len--;
|
||||
|
||||
/* Is there anything left? */
|
||||
if(len > 0)
|
||||
{
|
||||
result = path;
|
||||
size_t i;
|
||||
|
||||
path[len] = '\0';
|
||||
/* Return what follows the last slash in the path. That's
|
||||
usually a file or directory name. */
|
||||
str = path;
|
||||
|
||||
for(i = len-1 ; i >= 0 ; i--)
|
||||
for(i = len - 1 ; ; i--)
|
||||
{
|
||||
if(path[i] == '/')
|
||||
{
|
||||
result = &path[i+1];
|
||||
len -= i+1;
|
||||
|
||||
str = &path[i+1];
|
||||
break;
|
||||
}
|
||||
|
||||
if(i == 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
/* If the whole operation produced an empty string, then it
|
||||
means that we dealt with a string which consisted entirely
|
||||
of slashes. And that's what we will return. */
|
||||
if(len == 0)
|
||||
{
|
||||
result = "/";
|
||||
str = "/";
|
||||
len = 1;
|
||||
}
|
||||
}
|
||||
|
||||
SHOWSTRING(result);
|
||||
/* Truncate the path name we can return. This function always returns
|
||||
a valid pointer rather than NULL because some software expects it
|
||||
to do so (I blame the specifications). */
|
||||
if(len >= sizeof(new_path))
|
||||
len = sizeof(new_path)-1;
|
||||
|
||||
memcpy(new_path,str,len);
|
||||
new_path[len] = '\0';
|
||||
|
||||
result = new_path;
|
||||
|
||||
RETURN(result);
|
||||
return(result);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: libgen_dirname.c,v 1.4 2006-01-08 12:04:23 obarthel Exp $
|
||||
* $Id: libgen_dirname.c,v 1.8 2006-10-02 07:15:37 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -33,6 +33,7 @@
|
||||
|
||||
#include <string.h>
|
||||
#include <libgen.h>
|
||||
#include <stdio.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
@@ -45,9 +46,12 @@
|
||||
/****************************************************************************/
|
||||
|
||||
char *
|
||||
dirname(char *path)
|
||||
dirname(const char *path)
|
||||
{
|
||||
static char new_path[MAXPATHLEN];
|
||||
const char * str;
|
||||
char * result;
|
||||
size_t len;
|
||||
|
||||
ENTER();
|
||||
|
||||
@@ -56,42 +60,57 @@ dirname(char *path)
|
||||
else
|
||||
SHOWSTRING(path);
|
||||
|
||||
if(path == NULL || path[0] == '\0')
|
||||
{
|
||||
result = ".";
|
||||
}
|
||||
else
|
||||
{
|
||||
int len,i;
|
||||
/* An empty path always comes out as the "current directory". */
|
||||
str = ".";
|
||||
len = 1;
|
||||
|
||||
if(path != NULL && path[0] != '\0')
|
||||
{
|
||||
/* Strip all trailing slashes. */
|
||||
len = strlen(path);
|
||||
|
||||
while(len > 0 && path[len-1] == '/')
|
||||
while(len > 1 && path[len-1] == '/')
|
||||
len--;
|
||||
|
||||
/* Is there anything left? */
|
||||
if(len > 0)
|
||||
{
|
||||
result = ".";
|
||||
size_t i;
|
||||
|
||||
for(i = len-1 ; i >= 0 ; i--)
|
||||
for(i = len-1 ; ; i--)
|
||||
{
|
||||
if(path[i] == '/')
|
||||
{
|
||||
path[i] = '\0';
|
||||
/* Return everything up to, but not including
|
||||
the last slash in the path. That's usually
|
||||
the directory name. */
|
||||
str = path;
|
||||
len = i;
|
||||
|
||||
result = path;
|
||||
/* If that produces an empty string, it means
|
||||
that the entire string consists of slash
|
||||
characters. We'll return only the first. */
|
||||
if(i == 0)
|
||||
len++;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if(i == 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
result = "/";
|
||||
}
|
||||
}
|
||||
|
||||
SHOWSTRING(result);
|
||||
/* Truncate the path name we can return. This function always returns
|
||||
a valid pointer rather than NULL because some software expects it
|
||||
to do so (I blame the specifications). */
|
||||
if(len >= sizeof(new_path))
|
||||
len = sizeof(new_path)-1;
|
||||
|
||||
memcpy(new_path,str,len);
|
||||
new_path[len] = '\0';
|
||||
|
||||
result = new_path;
|
||||
|
||||
RETURN(result);
|
||||
return(result);
|
||||
|
||||
265
library/libm.gmk
Executable file
265
library/libm.gmk
Executable file
@@ -0,0 +1,265 @@
|
||||
#
|
||||
# $Id: libm.gmk,v 1.3 2007-01-06 10:09:48 obarthel Exp $
|
||||
#
|
||||
# :ts=8
|
||||
#
|
||||
# -*- mode: makefile; -*-
|
||||
|
||||
##############################################################################
|
||||
|
||||
LIBS += \
|
||||
lib/libm.a \
|
||||
lib/soft-float/libm.a \
|
||||
lib/small-data/libm.a \
|
||||
lib/baserel/libm.a \
|
||||
lib.threadsafe/libm.a \
|
||||
lib.threadsafe/soft-float/libm.a \
|
||||
lib.threadsafe/small-data/libm.a \
|
||||
lib.threadsafe/baserel/libm.a
|
||||
|
||||
##############################################################################
|
||||
|
||||
MATH_LIB := \
|
||||
complex_carg.o \
|
||||
complex_cargf.o \
|
||||
complex_cargl.o \
|
||||
complex_cimag.o \
|
||||
complex_cimagf.o \
|
||||
complex_cimagl.o \
|
||||
complex_conj.o \
|
||||
complex_conjf.o \
|
||||
complex_conjl.o \
|
||||
complex_creal.o \
|
||||
complex_crealf.o \
|
||||
complex_creall.o \
|
||||
fenv_feclearexcept.o \
|
||||
fenv_fegetenv.o \
|
||||
fenv_fegetexceptflag.o \
|
||||
fenv_fegetround.o \
|
||||
fenv_feholdexcept.o \
|
||||
fenv_feraiseexcept.o \
|
||||
fenv_fesetenv.o \
|
||||
fenv_fesetexceptflag.o \
|
||||
fenv_fetestexcept.o \
|
||||
fenv_fetestround.o \
|
||||
fenv_feupdateenv.o \
|
||||
math_acos.o \
|
||||
math_acosf.o \
|
||||
math_acosh.o \
|
||||
math_acoshf.o \
|
||||
math_asin.o \
|
||||
math_asinf.o \
|
||||
math_asinh.o \
|
||||
math_asinhf.o \
|
||||
math_atan.o \
|
||||
math_atan2.o \
|
||||
math_atan2f.o \
|
||||
math_atanf.o \
|
||||
math_atanh.o \
|
||||
math_atanhf.o \
|
||||
math_cbrt.o \
|
||||
math_cbrtf.o \
|
||||
math_ceil.o \
|
||||
math_ceilf.o \
|
||||
math_copysign.o \
|
||||
math_copysignf.o \
|
||||
math_cos.o \
|
||||
math_cosf.o \
|
||||
math_cosh.o \
|
||||
math_coshf.o \
|
||||
math_erf.o \
|
||||
math_erfc.o \
|
||||
math_erfcf.o \
|
||||
math_erff.o \
|
||||
math_exp.o \
|
||||
math_exp2.o \
|
||||
math_exp2f.o \
|
||||
math_expf.o \
|
||||
math_expm1.o \
|
||||
math_expm1f.o \
|
||||
math_fabs.o \
|
||||
math_fabsf.o \
|
||||
math_fdim.o \
|
||||
math_fdimf.o \
|
||||
math_floor.o \
|
||||
math_floorf.o \
|
||||
math_fma.o \
|
||||
math_fmaf.o \
|
||||
math_fmax.o \
|
||||
math_fmaxf.o \
|
||||
math_fmin.o \
|
||||
math_fminf.o \
|
||||
math_fmod.o \
|
||||
math_fmodf.o \
|
||||
math_fpclassify.o \
|
||||
math_frexp.o \
|
||||
math_frexpf.o \
|
||||
math_huge_val.o \
|
||||
math_huge_valf.o \
|
||||
math_hypot.o \
|
||||
math_hypotf.o \
|
||||
math_ilogb.o \
|
||||
math_ilogbf.o \
|
||||
math_inf.o \
|
||||
math_inff.o \
|
||||
math_init_exit.o \
|
||||
math_isfinite.o \
|
||||
math_isunordered.o \
|
||||
math_kernel_cos.o \
|
||||
math_kernel_cosf.o \
|
||||
math_kernel_expm1.o \
|
||||
math_kernel_rem_pio2.o \
|
||||
math_kernel_sin.o \
|
||||
math_kernel_sinf.o \
|
||||
math_kernel_tan.o \
|
||||
math_kernel_tanf.o \
|
||||
math_ldexp.o \
|
||||
math_ldexpf.o \
|
||||
math_lgamma.o \
|
||||
math_lgammaf.o \
|
||||
math_llrint.o \
|
||||
math_log.o \
|
||||
math_log10.o \
|
||||
math_log10f.o \
|
||||
math_log1p.o \
|
||||
math_log1pf.o \
|
||||
math_log2.o \
|
||||
math_log2f.o \
|
||||
math_logb.o \
|
||||
math_logbf.o \
|
||||
math_logf.o \
|
||||
math_lrint.o \
|
||||
math_lrintf.o \
|
||||
math_lround.o \
|
||||
math_lroundf.o \
|
||||
math_modf.o \
|
||||
math_modff.o \
|
||||
math_nan.o \
|
||||
math_nanf.o \
|
||||
math_nearbyint.o \
|
||||
math_nearbyintf.o \
|
||||
math_nextafter.o \
|
||||
math_nextafterf.o \
|
||||
math_pow.o \
|
||||
math_powf.o \
|
||||
math_remainder.o \
|
||||
math_remainderf.o \
|
||||
math_remquo.o \
|
||||
math_remquof.o \
|
||||
math_rem_pio2f.o \
|
||||
math_rint.o \
|
||||
math_rintf.o \
|
||||
math_round.o \
|
||||
math_roundf.o \
|
||||
math_scalbn.o \
|
||||
math_scalbnf.o \
|
||||
math_signbit.o \
|
||||
math_sin.o \
|
||||
math_sinf.o \
|
||||
math_sinh.o \
|
||||
math_sinhf.o \
|
||||
math_sqrt.o \
|
||||
math_sqrtf.o \
|
||||
math_tan.o \
|
||||
math_tanf.o \
|
||||
math_tanh.o \
|
||||
math_tanhf.o \
|
||||
math_tgamma.o \
|
||||
math_tgammaf.o \
|
||||
math_trunc.o \
|
||||
math_truncf.o \
|
||||
stdio_asprintf.o \
|
||||
stdio_flush.o \
|
||||
stdio_flush_all_files.o \
|
||||
stdio_fprintf.o \
|
||||
stdio_fscanf.o \
|
||||
stdio_printf.o \
|
||||
stdio_scanf.o \
|
||||
stdio_snprintf.o \
|
||||
stdio_sprintf.o \
|
||||
stdio_sscanf.o \
|
||||
stdio_vasprintf.o \
|
||||
stdio_vfprintf.o \
|
||||
stdio_vfscanf.o \
|
||||
stdio_vsscanf.o \
|
||||
stdio_vscanf.o \
|
||||
stdio_vprintf.o \
|
||||
stdio_vsnprintf.o \
|
||||
stdio_vsprintf.o \
|
||||
stdlib_atof.o \
|
||||
stdlib_strtod.o \
|
||||
stdlib_strtof.o \
|
||||
time_difftime.o
|
||||
|
||||
##############################################################################
|
||||
|
||||
# Dependencies to rebuild if the library version changes
|
||||
|
||||
obj/libm/m.lib_rev.o : m.lib_rev.c m.lib_rev.h
|
||||
obj/soft-float/libm/m.lib_rev.o : m.lib_rev.c m.lib_rev.h
|
||||
obj/small-data/libm/m.lib_rev.o : m.lib_rev.c m.lib_rev.h
|
||||
obj/baserel/libm/m.lib_rev.o : m.lib_rev.c m.lib_rev.h
|
||||
obj.threadsafe/libm/m.lib_rev.o : m.lib_rev.c m.lib_rev.h
|
||||
obj.threadsafe/soft-float/libm/m.lib_rev.o : m.lib_rev.c m.lib_rev.h
|
||||
obj.threadsafe/small-data/libm/m.lib_rev.o : m.lib_rev.c m.lib_rev.h
|
||||
obj.threadsafe/baserel/libm/m.lib_rev.o : m.lib_rev.c m.lib_rev.h
|
||||
|
||||
##############################################################################
|
||||
|
||||
obj/libm/%.o : CFLAGS += $(LARGEDATA) -DPPC_FLOATING_POINT_SUPPORT
|
||||
obj/libm/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj/soft-float/libm/%.o : CFLAGS += $(SOFTFLOAT)
|
||||
obj/soft-float/libm/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj/small-data/libm/%.o : CFLAGS += $(SMALLDATA) -DPPC_FLOATING_POINT_SUPPORT
|
||||
obj/small-data/libm/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj/baserel/libm/%.o : CFLAGS += $(BASEREL) -DPPC_FLOATING_POINT_SUPPORT
|
||||
obj/baserel/libm/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/libm/%.o : CFLAGS += $(THREADSAFE) $(LARGEDATA) -DPPC_FLOATING_POINT_SUPPORT
|
||||
obj.threadsafe/libm/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/soft-float/libm/%.o : CFLAGS += $(THREADSAFE) $(SOFTFLOAT)
|
||||
obj.threadsafe/soft-float/libm/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/small-data/libm/%.o : CFLAGS += $(THREADSAFE) $(SMALLDATA) -DPPC_FLOATING_POINT_SUPPORT
|
||||
obj.threadsafe/small-data/libm/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/baserel/libm/%.o : CFLAGS += $(THREADSAFE) $(BASEREL) -DPPC_FLOATING_POINT_SUPPORT
|
||||
obj.threadsafe/baserel/libm/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
##############################################################################
|
||||
|
||||
lib/libm.a : $(addprefix obj/libm/,$(MATH_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib/soft-float/libm.a : $(addprefix obj/soft-float/libm/,$(MATH_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib/small-data/libm.a : $(addprefix obj/small-data/libm/,$(MATH_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib/baserel/libm.a : $(addprefix obj/baserel/libm/,$(MATH_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/libm.a : $(addprefix obj.threadsafe/libm/,$(MATH_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/soft-float/libm.a : $(addprefix obj.threadsafe/soft-float/libm/,$(MATH_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/small-data/libm.a : $(addprefix obj.threadsafe/small-data/libm/,$(MATH_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/baserel/libm.a : $(addprefix obj.threadsafe/baserel/libm/,$(MATH_LIB))
|
||||
@$(MAKELIB)
|
||||
174
library/libnet.gmk
Executable file
174
library/libnet.gmk
Executable file
@@ -0,0 +1,174 @@
|
||||
#
|
||||
# $Id: libnet.gmk,v 1.1 2006-09-17 17:37:27 obarthel Exp $
|
||||
#
|
||||
# :ts=8
|
||||
#
|
||||
# -*- mode: makefile; -*-
|
||||
|
||||
##############################################################################
|
||||
|
||||
LIBS += \
|
||||
lib/libnet.a \
|
||||
lib/soft-float/libnet.a \
|
||||
lib/small-data/libnet.a \
|
||||
lib/baserel/libnet.a \
|
||||
lib.threadsafe/libnet.a \
|
||||
lib.threadsafe/soft-float/libnet.a \
|
||||
lib.threadsafe/small-data/libnet.a \
|
||||
lib.threadsafe/baserel/libnet.a
|
||||
|
||||
##############################################################################
|
||||
|
||||
NET_LIB := \
|
||||
net.lib_rev.o \
|
||||
socket_accept.o \
|
||||
socket_bind.o \
|
||||
socket_check_daemon.o \
|
||||
socket_connect.o \
|
||||
socket_gethostbyaddr.o \
|
||||
socket_gethostbyname.o \
|
||||
socket_gethostid.o \
|
||||
socket_gethostname.o \
|
||||
socket_getnetbyaddr.o \
|
||||
socket_getnetbyname.o \
|
||||
socket_getpeername.o \
|
||||
socket_getprotobyname.o \
|
||||
socket_getprotobynumber.o \
|
||||
socket_getservbyname.o \
|
||||
socket_getservbyport.o \
|
||||
socket_getsockname.o \
|
||||
socket_getsockopt.o \
|
||||
socket_get_descriptor.o \
|
||||
socket_inet_addr.o \
|
||||
socket_inet_aton.o \
|
||||
socket_inet_lnaof.o \
|
||||
socket_inet_makeaddr.o \
|
||||
socket_inet_netof.o \
|
||||
socket_inet_network.o \
|
||||
socket_inet_ntoa.o \
|
||||
socket_init_exit.o \
|
||||
socket_ioctl.o \
|
||||
socket_isdaemon.o \
|
||||
socket_listen.o \
|
||||
socket_obtain_daemon.o \
|
||||
socket_recv.o \
|
||||
socket_recvfrom.o \
|
||||
socket_recvmsg.o \
|
||||
socket_select_signal.o \
|
||||
socket_select.o \
|
||||
socket_wait_select.o \
|
||||
socket_send.o \
|
||||
socket_sendmsg.o \
|
||||
socket_sendto.o \
|
||||
socket_setsockopt.o \
|
||||
socket_shutdown.o \
|
||||
socket_socket.o \
|
||||
socket_hook_entry.o \
|
||||
socket_hstrerror.o \
|
||||
socket_get_h_errno.o \
|
||||
socket_set_h_errno.o \
|
||||
systeminfo_sysinfo.o \
|
||||
stat_umask.o \
|
||||
usergroup_crypt.o \
|
||||
usergroup_data.o \
|
||||
usergroup_endgrent.o \
|
||||
usergroup_endpwent.o \
|
||||
usergroup_getegid.o \
|
||||
usergroup_geteuid.o \
|
||||
usergroup_getgid.o \
|
||||
usergroup_getgrent.o \
|
||||
usergroup_getgrgid.o \
|
||||
usergroup_getgrnam.o \
|
||||
usergroup_getgroups.o \
|
||||
usergroup_getpass.o \
|
||||
usergroup_getpwent.o \
|
||||
usergroup_getpwnam.o \
|
||||
usergroup_getpwuid.o \
|
||||
usergroup_getuid.o \
|
||||
usergroup_initgroups.o \
|
||||
usergroup_init_exit.o \
|
||||
usergroup_rootmode.o \
|
||||
usergroup_setegid.o \
|
||||
usergroup_seteuid.o \
|
||||
usergroup_setgid.o \
|
||||
usergroup_setgrent.o \
|
||||
usergroup_setgroups.o \
|
||||
usergroup_setpwent.o \
|
||||
usergroup_setregid.o \
|
||||
usergroup_setreuid.o \
|
||||
usergroup_setsid.o \
|
||||
usergroup_setuid.o \
|
||||
utsname_uname.o
|
||||
|
||||
##############################################################################
|
||||
|
||||
# Dependencies to rebuild if the library version changes
|
||||
|
||||
obj/libnet/net.lib_rev.o : net.lib_rev.c net.lib_rev.h
|
||||
obj/soft-float/libnet/net.lib_rev.o : net.lib_rev.c net.lib_rev.h
|
||||
obj/small-data/libnet/net.lib_rev.o : net.lib_rev.c net.lib_rev.h
|
||||
obj/baserel/libnet/net.lib_rev.o : net.lib_rev.c net.lib_rev.h
|
||||
obj.threadsafe/libnet/net.lib_rev.o : net.lib_rev.c net.lib_rev.h
|
||||
obj.threadsafe/soft-float/libnet/net.lib_rev.o : net.lib_rev.c net.lib_rev.h
|
||||
obj.threadsafe/small-data/libnet/net.lib_rev.o : net.lib_rev.c net.lib_rev.h
|
||||
obj.threadsafe/baserel/libnet/net.lib_rev.o : net.lib_rev.c net.lib_rev.h
|
||||
|
||||
##############################################################################
|
||||
|
||||
obj/libnet/%.o : CFLAGS += $(LARGEDATA) -I$(NET_INCLUDE) -DSOCKET_SUPPORT -DUSERGROUP_SUPPORT
|
||||
obj/libnet/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj/soft-float/libnet/%.o : CFLAGS += $(SOFTFLOAT) -I$(NET_INCLUDE) -DSOCKET_SUPPORT -DUSERGROUP_SUPPORT
|
||||
obj/soft-float/libnet/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj/small-data/libnet/%.o : CFLAGS += $(SMALLDATA) -I$(NET_INCLUDE) -DSOCKET_SUPPORT -DUSERGROUP_SUPPORT
|
||||
obj/small-data/libnet/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj/baserel/libnet/%.o : CFLAGS += $(BASEREL) -I$(NET_INCLUDE) -DSOCKET_SUPPORT -DUSERGROUP_SUPPORT
|
||||
obj/baserel/libnet/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/libnet/%.o : CFLAGS += $(THREADSAFE) $(LARGEDATA) -I$(NET_INCLUDE) -DSOCKET_SUPPORT -DUSERGROUP_SUPPORT
|
||||
obj.threadsafe/libnet/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/soft-float/libnet/%.o : CFLAGS += $(THREADSAFE) $(SOFTFLOAT) -I$(NET_INCLUDE) -DSOCKET_SUPPORT -DUSERGROUP_SUPPORT
|
||||
obj.threadsafe/soft-float/libnet/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/small-data/libnet/%.o : CFLAGS += $(THREADSAFE) $(SMALLDATA) -I$(NET_INCLUDE) -DSOCKET_SUPPORT -DUSERGROUP_SUPPORT
|
||||
obj.threadsafe/small-data/libnet/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/baserel/libnet/%.o : CFLAGS += $(THREADSAFE) $(BASEREL) -I$(NET_INCLUDE) -DSOCKET_SUPPORT -DUSERGROUP_SUPPORT
|
||||
obj.threadsafe/baserel/libnet/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
##############################################################################
|
||||
|
||||
lib/libnet.a : $(addprefix obj/libnet/,$(NET_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib/soft-float/libnet.a : $(addprefix obj/soft-float/libnet/,$(NET_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib/small-data/libnet.a : $(addprefix obj/small-data/libnet/,$(NET_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib/baserel/libnet.a : $(addprefix obj/baserel/libnet/,$(NET_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/libnet.a : $(addprefix obj.threadsafe/libnet/,$(NET_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/soft-float/libnet.a : $(addprefix obj.threadsafe/soft-float/libnet/,$(NET_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/small-data/libnet.a : $(addprefix obj.threadsafe/small-data/libnet/,$(NET_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/baserel/libnet.a : $(addprefix obj.threadsafe/baserel/libnet/,$(NET_LIB))
|
||||
@$(MAKELIB)
|
||||
132
library/libprofile.gmk
Executable file
132
library/libprofile.gmk
Executable file
@@ -0,0 +1,132 @@
|
||||
#
|
||||
# $Id: libprofile.gmk,v 1.1 2006-09-17 17:37:27 obarthel Exp $
|
||||
#
|
||||
# :ts=8
|
||||
#
|
||||
# -*- mode: makefile; -*-
|
||||
|
||||
##############################################################################
|
||||
|
||||
LIBS += \
|
||||
lib/libprofile.a \
|
||||
lib/soft-float/libprofile.a \
|
||||
lib/small-data/libprofile.a \
|
||||
lib/baserel/libprofile.a \
|
||||
lib.threadsafe/libprofile.a \
|
||||
lib.threadsafe/soft-float/libprofile.a \
|
||||
lib.threadsafe/small-data/libprofile.a \
|
||||
lib.threadsafe/baserel/libprofile.a
|
||||
|
||||
##############################################################################
|
||||
|
||||
PROFILE_LIB = \
|
||||
profile__mcount.o \
|
||||
profile_gmon.o \
|
||||
profile_mcount.o
|
||||
|
||||
##############################################################################
|
||||
|
||||
# Dependencies to rebuild if the library version changes
|
||||
|
||||
obj/libprofile/profile.lib_rev.o : profile.lib_rev.c profile.lib_rev.h
|
||||
obj/soft-float/libprofile/profile.lib_rev.o : profile.lib_rev.c profile.lib_rev.h
|
||||
obj/small-data/libprofile/profile.lib_rev.o : profile.lib_rev.c profile.lib_rev.h
|
||||
obj/baserel/libprofile/profile.lib_rev.o : profile.lib_rev.c profile.lib_rev.h
|
||||
obj.threadsafe/libprofile/profile.lib_rev.o : profile.lib_rev.c profile.lib_rev.h
|
||||
obj.threadsafe/soft-float/libprofile/profile.lib_rev.o : profile.lib_rev.c profile.lib_rev.h
|
||||
obj.threadsafe/small-data/libprofile/profile.lib_rev.o : profile.lib_rev.c profile.lib_rev.h
|
||||
obj.threadsafe/baserel/libprofile/profile.lib_rev.o : profile.lib_rev.c profile.lib_rev.h
|
||||
|
||||
##############################################################################
|
||||
|
||||
obj/libprofile/%.o : AFLAGS += $(LARGEDATA)
|
||||
obj/libprofile/%.o : %.S
|
||||
@$(ASSEMBLE)
|
||||
|
||||
obj/soft-float/libprofile/%.o : AFLAGS += $(SOFTFLOAT)
|
||||
obj/soft-float/libprofile/%.o : %.S
|
||||
@$(ASSEMBLE)
|
||||
|
||||
obj/small-data/libprofile/%.o : AFLAGS += $(SMALLDATA)
|
||||
obj/small-data/libprofile/%.o : %.S
|
||||
@$(ASSEMBLE)
|
||||
|
||||
obj/baserel/libprofile/%.o : AFLAGS += $(BASEREL)
|
||||
obj/baserel/libprofile/%.o : %.S
|
||||
@$(ASSEMBLE)
|
||||
|
||||
obj.threadsafe/libprofile/%.o : AFLAGS += $(LARGEDATA)
|
||||
obj.threadsafe/libprofile/%.o : %.S
|
||||
@$(ASSEMBLE)
|
||||
|
||||
obj.threadsafe/soft-float/libprofile/%.o : AFLAGS += $(SOFTFLOAT)
|
||||
obj.threadsafe/soft-float/libprofile/%.o : %.S
|
||||
@$(ASSEMBLE)
|
||||
|
||||
obj.threadsafe/small-data/libprofile/%.o : AFLAGS += $(SMALLDATA)
|
||||
obj.threadsafe/small-data/libprofile/%.o : %.S
|
||||
@$(ASSEMBLE)
|
||||
|
||||
obj.threadsafe/baserel/libprofile/%.o : AFLAGS += $(BASEREL)
|
||||
obj.threadsafe/baserel/libprofile/%.o : %.S
|
||||
@$(ASSEMBLE)
|
||||
|
||||
##############################################################################
|
||||
|
||||
obj/libprofile/%.o : CFLAGS += $(LARGEDATA)
|
||||
obj/libprofile/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj/soft-float/libprofile/%.o : CFLAGS += $(SOFTFLOAT)
|
||||
obj/soft-float/libprofile/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj/small-data/libprofile/%.o : CFLAGS += $(SMALLDATA)
|
||||
obj/small-data/libprofile/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj/baserel/libprofile/%.o : CFLAGS += $(BASEREL)
|
||||
obj/baserel/libprofile/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/libprofile/%.o : CFLAGS += $(THREADSAFE) $(LARGEDATA)
|
||||
obj.threadsafe/libprofile/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/soft-float/libprofile/%.o : CFLAGS += $(THREADSAFE) $(SOFTFLOAT)
|
||||
obj.threadsafe/soft-float/libprofile/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/small-data/libprofile/%.o : CFLAGS += $(THREADSAFE) $(SMALLDATA)
|
||||
obj.threadsafe/small-data/libprofile/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/baserel/libprofile/%.o : CFLAGS += $(THREADSAFE) $(BASEREL)
|
||||
obj.threadsafe/baserel/libprofile/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
##############################################################################
|
||||
|
||||
lib/libprofile.a : $(addprefix obj/libprofile/,$(PROFILE_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib/soft-float/libprofile.a : $(addprefix obj/soft-float/libprofile/,$(PROFILE_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib/small-data/libprofile.a : $(addprefix obj/small-data/libprofile/,$(PROFILE_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib/baserel/libprofile.a : $(addprefix obj/baserel/libprofile/,$(PROFILE_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/libprofile.a : $(addprefix obj.threadsafe/libprofile/,$(PROFILE_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/soft-float/libprofile.a : $(addprefix obj.threadsafe/soft-float/libprofile/,$(PROFILE_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/small-data/libprofile.a : $(addprefix obj.threadsafe/small-data/libprofile/,$(PROFILE_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/baserel/libprofile.a : $(addprefix obj.threadsafe/baserel/libprofile/,$(PROFILE_LIB))
|
||||
@$(MAKELIB)
|
||||
202
library/libunix.gmk
Executable file
202
library/libunix.gmk
Executable file
@@ -0,0 +1,202 @@
|
||||
#
|
||||
# $Id: libunix.gmk,v 1.3 2006-11-13 09:25:28 obarthel Exp $
|
||||
#
|
||||
# :ts=8
|
||||
#
|
||||
# -*- mode: makefile; -*-
|
||||
|
||||
##############################################################################
|
||||
|
||||
LIBS += \
|
||||
lib/libunix.a \
|
||||
lib/soft-float/libunix.a \
|
||||
lib/small-data/libunix.a \
|
||||
lib/baserel/libunix.a \
|
||||
lib.threadsafe/libunix.a \
|
||||
lib.threadsafe/soft-float/libunix.a \
|
||||
lib.threadsafe/small-data/libunix.a \
|
||||
lib.threadsafe/baserel/libunix.a
|
||||
|
||||
##############################################################################
|
||||
|
||||
UNIX_LIB := \
|
||||
unix.lib_rev.o \
|
||||
dirent_closedir.o \
|
||||
dirent_rewinddir.o \
|
||||
dirent_opendir.o \
|
||||
dirent_readdir.o \
|
||||
fcntl_creat.o \
|
||||
fcntl_fcntl.o \
|
||||
fcntl_open.o \
|
||||
fcntl_get_default_file.o \
|
||||
getopt_getopt_long.o \
|
||||
mount_convertinfo.o \
|
||||
mount_statfs.o \
|
||||
resource_getrlimit.o \
|
||||
resource_setrlimit.o \
|
||||
stat_chmod.o \
|
||||
stat_fstat.o \
|
||||
stat_lstat.o \
|
||||
stat_lock.o \
|
||||
stat_mkdir.o \
|
||||
stat_rmdir.o \
|
||||
stat_stat.o \
|
||||
stdio_ctermid.o \
|
||||
stdio_fdhookentry.o \
|
||||
stdio_fflush.o \
|
||||
stdio_fopen.o \
|
||||
stdio_file_init.o \
|
||||
stdio_init_exit.o \
|
||||
stdio_locksemaphorename.o \
|
||||
stdio_openiob.o \
|
||||
stdio_popen.o \
|
||||
stdio_record_locking.o \
|
||||
stdio_remove.o \
|
||||
stdio_rename.o \
|
||||
stdlib_alloca.o \
|
||||
stdlib_alloca_cleanup.o \
|
||||
stdlib_alloca_trap.o \
|
||||
stdlib_arg.o \
|
||||
stdlib_expand_wildcard.o \
|
||||
stdlib_expand_wildcard_check.o \
|
||||
stdlib_getmemstats.o \
|
||||
stdlib_main.o \
|
||||
stdlib_main_stub.o \
|
||||
stdlib_mkdtemp.o \
|
||||
stdlib_mkstemp.o \
|
||||
stdlib_mktemp.o \
|
||||
stdlib_malloc.o \
|
||||
stdlib_realloc.o \
|
||||
stdlib_resetmemstats.o \
|
||||
stdlib_system.o \
|
||||
systeminfo_sysinfo.o \
|
||||
termios_cfgetispeed.o \
|
||||
termios_cfgetospeed.o \
|
||||
termios_cfmakeraw.o \
|
||||
termios_cfsetispeed.o \
|
||||
termios_cfsetospeed.o \
|
||||
termios_console_fdhookentry.o \
|
||||
termios_openserial.o \
|
||||
termios_tcdrain.o \
|
||||
termios_tcflow.o \
|
||||
termios_tcflush.o \
|
||||
termios_tcgetattr.o \
|
||||
termios_tcsendbreak.o \
|
||||
termios_tcsetattr.o \
|
||||
timeb_ftime.o \
|
||||
uio_readv.o \
|
||||
uio_writev.o \
|
||||
unistd_access.o \
|
||||
unistd_chdir.o \
|
||||
unistd_chdir_exit.o \
|
||||
unistd_chown.o \
|
||||
unistd_common_pathconf.o \
|
||||
unistd_def_path.o \
|
||||
unistd_def_path_delimiter.o \
|
||||
unistd_environ.o \
|
||||
unistd_execl.o \
|
||||
unistd_execle.o \
|
||||
unistd_execlp.o \
|
||||
unistd_execv.o \
|
||||
unistd_execve.o \
|
||||
unistd_execve_env_exit.o \
|
||||
unistd_execve_env_init.o \
|
||||
unistd_execve_exit.o \
|
||||
unistd_execvp.o \
|
||||
unistd_fpathconf.o \
|
||||
unistd_getcwd.o \
|
||||
unistd_lchown.o \
|
||||
unistd_link.o \
|
||||
unistd_lockf.o \
|
||||
unistd_pathconf.o \
|
||||
unistd_readlink.o \
|
||||
unistd_realpath.o \
|
||||
unistd_restorepathname.o \
|
||||
unistd_setcurrentpath.o \
|
||||
unistd_strip_double_slash.o \
|
||||
unistd_symlink.o \
|
||||
unistd_translatea2u.o \
|
||||
unistd_translaterel.o \
|
||||
unistd_translateu2a.o \
|
||||
unistd_truncate.o \
|
||||
unistd_ttyname.o \
|
||||
unistd_ttyname_r.o \
|
||||
unistd_unix_path_semantics.o \
|
||||
unistd_unlink.o \
|
||||
unistd_unlink_retries.o \
|
||||
unistd_wildcard_expand.o \
|
||||
utime_utime.o
|
||||
|
||||
##############################################################################
|
||||
|
||||
# Dependencies to rebuild if the library version changes
|
||||
|
||||
obj/libunix/unit.lib_rev.o : unit.lib_rev.c unit.lib_rev.h
|
||||
obj/soft-float/libunix/unit.lib_rev.o : unit.lib_rev.c unit.lib_rev.h
|
||||
obj/small-data/libunix/unit.lib_rev.o : unit.lib_rev.c unit.lib_rev.h
|
||||
obj/baserel/libunix/unit.lib_rev.o : unit.lib_rev.c unit.lib_rev.h
|
||||
obj.threadsafe/libunix/unit.lib_rev.o : unit.lib_rev.c unit.lib_rev.h
|
||||
obj.threadsafe/soft-float/libunix/unit.lib_rev.o : unit.lib_rev.c unit.lib_rev.h
|
||||
obj.threadsafe/small-data/libunix/unit.lib_rev.o : unit.lib_rev.c unit.lib_rev.h
|
||||
obj.threadsafe/baserel/libunix/unit.lib_rev.o : unit.lib_rev.c unit.lib_rev.h
|
||||
|
||||
##############################################################################
|
||||
|
||||
|
||||
obj/libunix/%.o : CFLAGS += $(LARGEDATA) -DUNIX_PATH_SEMANTICS
|
||||
obj/libunix/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj/soft-float/libunix/%.o : CFLAGS += $(SOFTFLOAT) -DUNIX_PATH_SEMANTICS
|
||||
obj/soft-float/libunix/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj/small-data/libunix/%.o : CFLAGS += $(SMALLDATA) -DUNIX_PATH_SEMANTICS
|
||||
obj/small-data/libunix/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj/baserel/libunix/%.o : CFLAGS += $(BASEREL) -DUNIX_PATH_SEMANTICS
|
||||
obj/baserel/libunix/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/libunix/%.o : CFLAGS += $(THREADSAFE) $(LARGEDATA) -DUNIX_PATH_SEMANTICS
|
||||
obj.threadsafe/libunix/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/soft-float/libunix/%.o : CFLAGS += $(THREADSAFE) $(SOFTFLOAT) -DUNIX_PATH_SEMANTICS
|
||||
obj.threadsafe/soft-float/libunix/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/small-data/libunix/%.o : CFLAGS += $(THREADSAFE) $(SMALLDATA) -DUNIX_PATH_SEMANTICS
|
||||
obj.threadsafe/small-data/libunix/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
obj.threadsafe/baserel/libunix/%.o : CFLAGS += $(THREADSAFE) $(BASEREL) -DUNIX_PATH_SEMANTICS
|
||||
obj.threadsafe/baserel/libunix/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
##############################################################################
|
||||
|
||||
lib/libunix.a : $(addprefix obj/libunix/,$(UNIX_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib/soft-float/libunix.a : $(addprefix obj/soft-float/libunix/,$(UNIX_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib/small-data/libunix.a : $(addprefix obj/small-data/libunix/,$(UNIX_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib/baserel/libunix.a : $(addprefix obj/baserel/libunix/,$(UNIX_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/libunix.a : $(addprefix obj.threadsafe/libunix/,$(UNIX_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/soft-float/libunix.a : $(addprefix obj.threadsafe/soft-float/libunix/,$(UNIX_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/small-data/libunix.a : $(addprefix obj.threadsafe/small-data/libunix/,$(UNIX_LIB))
|
||||
@$(MAKELIB)
|
||||
|
||||
lib.threadsafe/baserel/libunix.a : $(addprefix obj.threadsafe/baserel/libunix/,$(UNIX_LIB))
|
||||
@$(MAKELIB)
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: locale_localeconv.c,v 1.5 2006-01-08 12:04:23 obarthel Exp $
|
||||
* $Id: locale_localeconv.c,v 1.7 2006-09-25 14:51:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -54,18 +54,18 @@ localeconv(void)
|
||||
monetary_locale = __locale_table[LC_MONETARY];
|
||||
|
||||
/* This makes up the current locale settings from the various
|
||||
* components in use.
|
||||
*/
|
||||
loc.decimal_point = (numeric_locale != NULL) ? ((char *)numeric_locale->loc_DecimalPoint) : ".";
|
||||
loc.thousands_sep = (numeric_locale != NULL) ? ((char *)numeric_locale->loc_GroupSeparator) : "";
|
||||
loc.grouping = (numeric_locale != NULL) ? ((char *)numeric_locale->loc_Grouping) : "";
|
||||
loc.int_curr_symbol = (monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonIntCS) : "";
|
||||
loc.currency_symbol = (monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonCS) : "";
|
||||
loc.mon_decimal_point = (monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonDecimalPoint) : "";
|
||||
loc.mon_thousands_sep = (monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonGroupSeparator) : "";
|
||||
loc.mon_grouping = (monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonGrouping) : "";
|
||||
loc.positive_sign = (monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonPositiveSign) : "";
|
||||
loc.negative_sign = (monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonNegativeSign) : "";
|
||||
components in use. */
|
||||
loc.decimal_point = ((numeric_locale != NULL) ? ((char *)numeric_locale->loc_DecimalPoint) : (char *)".");
|
||||
loc.thousands_sep = ((numeric_locale != NULL) ? ((char *)numeric_locale->loc_GroupSeparator) : (char *)"");
|
||||
loc.grouping = ((numeric_locale != NULL) ? ((char *)numeric_locale->loc_Grouping) : (char *)"");
|
||||
loc.int_curr_symbol = ((monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonIntCS) : (char *)"");
|
||||
loc.currency_symbol = ((monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonCS) : (char *)"");
|
||||
loc.mon_decimal_point = ((monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonDecimalPoint) : (char *)"");
|
||||
loc.mon_thousands_sep = ((monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonGroupSeparator) : (char *)"");
|
||||
loc.mon_grouping = ((monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonGrouping) : (char *)"");
|
||||
loc.positive_sign = ((monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonPositiveSign) : (char *)"");
|
||||
loc.negative_sign = ((monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonNegativeSign) : (char *)"");
|
||||
|
||||
loc.int_frac_digits = (monetary_locale != NULL) ? monetary_locale->loc_MonIntFracDigits : CHAR_MAX;
|
||||
loc.frac_digits = (monetary_locale != NULL) ? monetary_locale->loc_MonFracDigits : CHAR_MAX;
|
||||
loc.p_cs_precedes = (monetary_locale != NULL) ? monetary_locale->loc_MonPositiveCSPos : CHAR_MAX;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 200
|
||||
#define DATE "17.4.2006"
|
||||
#define VERS "m.lib 1.200"
|
||||
#define VSTRING "m.lib 1.200 (17.4.2006)\r\n"
|
||||
#define VERSTAG "\0$VER: m.lib 1.200 (17.4.2006)"
|
||||
#define REVISION 203
|
||||
#define DATE "28.4.2008"
|
||||
#define VERS "m.lib 1.203"
|
||||
#define VSTRING "m.lib 1.203 (28.4.2008)\r\n"
|
||||
#define VERSTAG "\0$VER: m.lib 1.203 (28.4.2008)"
|
||||
|
||||
@@ -1 +1 @@
|
||||
200
|
||||
203
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 200
|
||||
#define DATE "17.4.2006"
|
||||
#define VERS "m881.lib 1.200"
|
||||
#define VSTRING "m881.lib 1.200 (17.4.2006)\r\n"
|
||||
#define VERSTAG "\0$VER: m881.lib 1.200 (17.4.2006)"
|
||||
#define REVISION 202
|
||||
#define DATE "16.1.2007"
|
||||
#define VERS "m881.lib 1.202"
|
||||
#define VSTRING "m881.lib 1.202 (16.1.2007)\r\n"
|
||||
#define VERSTAG "\0$VER: m881.lib 1.202 (16.1.2007)"
|
||||
|
||||
@@ -1 +1 @@
|
||||
200
|
||||
202
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_atan2.c,v 1.8 2006-01-08 12:04:23 obarthel Exp $
|
||||
* $Id: math_atan2.c,v 1.9 2006-09-22 07:54:24 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -225,7 +225,7 @@ __atan2(double y,double x)
|
||||
if( ((ix|((lx|-lx)>>31))>0x7ff00000) || ((iy|((ly|-ly)>>31))>0x7ff00000) ) /* x or y is NaN */
|
||||
return x+y;
|
||||
|
||||
if((hx-0x3ff00000|lx)==0)
|
||||
if(((hx-0x3ff00000)|lx)==0)
|
||||
return atan(y); /* x=1.0 */
|
||||
|
||||
m = ((hy>>31)&1)|((hx>>30)&2); /* 2*sign(x)+sign(y) */
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_exp.c,v 1.6 2006-01-08 12:04:23 obarthel Exp $
|
||||
* $Id: math_exp.c,v 1.8 2006-09-22 09:02:51 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -158,8 +158,8 @@ P5 = 4.13813679705723846039e-08; /* 0x3E663769, 0x72BEA4D0 */
|
||||
INLINE STATIC double
|
||||
__exp(double x)
|
||||
{
|
||||
double y,hi,lo,c,t;
|
||||
int k,xsb;
|
||||
double y,hi=0,lo=0,c,t;
|
||||
int k=0,xsb;
|
||||
unsigned int hx;
|
||||
|
||||
GET_HIGH_WORD(hx,x);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_headers.h,v 1.14 2006-01-08 12:04:23 obarthel Exp $
|
||||
* $Id: math_headers.h,v 1.15 2006-11-13 09:51:53 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -216,7 +216,6 @@ extern double __kernel_sin(double x, double y, int iy);
|
||||
extern int __rem_pio2(double x, double *y);
|
||||
extern double __kernel_tan(double x, double y, int iy);
|
||||
extern double __expm1(double x);
|
||||
extern double __scalbn(double x, int n);
|
||||
extern float __kernel_cosf(float x, float y);
|
||||
extern float __kernel_sinf(float x, float y, int iy);
|
||||
extern LONG __rem_pio2f(float x, float *y);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_kernel_expm1.c,v 1.3 2006-01-08 12:04:23 obarthel Exp $
|
||||
* $Id: math_kernel_expm1.c,v 1.4 2006-09-22 07:54:24 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -67,7 +67,7 @@ Q5 = -2.01099218183624371326e-07; /* BE8AFDB7 6E09C32D */
|
||||
|
||||
double __expm1(double x)
|
||||
{
|
||||
double y,hi,lo,c,t,e,hxs,hfx,r1;
|
||||
double y,hi,lo,c=0,t,e,hxs,hfx,r1;
|
||||
int k,xsb;
|
||||
unsigned int hx;
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_kernel_rem_pio2.c,v 1.5 2006-01-08 12:04:23 obarthel Exp $
|
||||
* $Id: math_kernel_rem_pio2.c,v 1.7 2006-11-13 09:51:53 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -55,7 +55,7 @@ static const double PIo2[] = {
|
||||
1.57079625129699707031e+00, /* 0x3FF921FB, 0x40000000 */
|
||||
7.54978941586159635335e-08, /* 0x3E74442D, 0x00000000 */
|
||||
5.39030252995776476554e-15, /* 0x3CF84698, 0x80000000 */
|
||||
3.28200341580791294123e422, /* 0x3B78CC51, 0x60000000 */
|
||||
3.28200341580791294123e-22, /* 0x3B78CC51, 0x60000000 */
|
||||
1.27065575308067607349e-29, /* 0x39F01B83, 0x80000000 */
|
||||
1.22933308981111328932e-36, /* 0x387A2520, 0x40000000 */
|
||||
2.73370053816464559624e-44, /* 0x36E38222, 0x80000000 */
|
||||
@@ -102,7 +102,7 @@ recompute:
|
||||
}
|
||||
|
||||
/* compute n */
|
||||
z = __scalbn(z,(int)q0); /* actual value of z */
|
||||
z = scalbn(z,(int)q0); /* actual value of z */
|
||||
z -= 8.0*floor(z*0.125); /* trim off integer >= 8 */
|
||||
n = (int) z;
|
||||
z -= (double)n;
|
||||
@@ -135,7 +135,7 @@ recompute:
|
||||
}
|
||||
if(ih==2) {
|
||||
z = one - z;
|
||||
if(carry!=0) z -= __scalbn(one,(int)q0);
|
||||
if(carry!=0) z -= scalbn(one,(int)q0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -161,7 +161,7 @@ recompute:
|
||||
jz -= 1; q0 -= 24;
|
||||
while(iq[jz]==0) { jz--; q0-=24;}
|
||||
} else { /* break z into 24-bit if necessary */
|
||||
z = __scalbn(z,-(int)q0);
|
||||
z = scalbn(z,-(int)q0);
|
||||
if(z>=two24) {
|
||||
fw = (double)((int)(twon24*z));
|
||||
iq[jz] = (int)(z-two24*fw);
|
||||
@@ -171,7 +171,7 @@ recompute:
|
||||
}
|
||||
|
||||
/* convert integer "bit" chunk to floating-point value */
|
||||
fw = __scalbn(one,(int)q0);
|
||||
fw = scalbn(one,(int)q0);
|
||||
for(i=jz;i>=0;i--) {
|
||||
q[i] = fw*(double)iq[i]; fw*=twon24;
|
||||
}
|
||||
@@ -331,7 +331,7 @@ int __rem_pio2(double x, double *y)
|
||||
}
|
||||
/* keep the compiler happy */
|
||||
z = 0;
|
||||
/* set z = __scalbn(|x|,ilogb(x)-23) */
|
||||
/* set z = scalbn(|x|,ilogb(x)-23) */
|
||||
GET_LOW_WORD(low,x);
|
||||
SET_LOW_WORD(z,low);
|
||||
e0 = (int)((ix>>20)-1046); /* e0 = ilogb(z)-23; */
|
||||
|
||||
128
library/math_llrint.c
Normal file
128
library/math_llrint.c
Normal file
@@ -0,0 +1,128 @@
|
||||
/*
|
||||
* $Id: math_llrint.c,v 1.1 2007-01-06 10:09:48 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
||||
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) sourcery.han.de>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Neither the name of Olaf Barthel nor the names of contributors
|
||||
* may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*
|
||||
* PowerPC math library based in part on work by Sun Microsystems
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
*/
|
||||
|
||||
#ifndef _MATH_HEADERS_H
|
||||
#include "math_headers.h"
|
||||
#endif /* _MATH_HEADERS_H */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#if defined(FLOATING_POINT_SUPPORT)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Adding a double, x, to 2^52 will cause the result to be rounded based on
|
||||
the fractional part of x, according to the implementation's current rounding
|
||||
mode. 2^52 is the smallest double that can be represented using all 52 significant
|
||||
digits. */
|
||||
static const double TWO52[2]={
|
||||
4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */
|
||||
-4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */
|
||||
};
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
long long int
|
||||
llrint(double x)
|
||||
{
|
||||
LONG i0,j0,sx;
|
||||
ULONG i1;
|
||||
double t;
|
||||
volatile double w;
|
||||
long long int result;
|
||||
|
||||
EXTRACT_WORDS(i0,i1,x);
|
||||
|
||||
/* Extract sign bit. */
|
||||
sx = (i0>>31)&1;
|
||||
|
||||
/* Extract exponent field. */
|
||||
j0 = ((i0 & 0x7ff00000) >> 20) - 1023;
|
||||
|
||||
if(j0 < 20)
|
||||
{
|
||||
if(j0 < -1)
|
||||
return 0;
|
||||
else
|
||||
{
|
||||
w = TWO52[sx] + x;
|
||||
t = w - TWO52[sx];
|
||||
GET_HIGH_WORD(i0, t);
|
||||
/* Detect the all-zeros representation of plus and
|
||||
minus zero, which fails the calculation below. */
|
||||
if ((i0 & ~(1 << 31)) == 0)
|
||||
return 0;
|
||||
j0 = ((i0 & 0x7ff00000) >> 20) - 1023;
|
||||
i0 &= 0x000fffff;
|
||||
i0 |= 0x00100000;
|
||||
result = i0 >> (20 - j0);
|
||||
}
|
||||
}
|
||||
else if (j0 < (int)(8 * sizeof (long long int)) - 1)
|
||||
{
|
||||
if (j0 >= 52)
|
||||
result = ((long long int) ((i0 & 0x000fffff) | 0x0010000) << (j0 - 20)) |
|
||||
(i1 << (j0 - 52));
|
||||
else
|
||||
{
|
||||
w = TWO52[sx] + x;
|
||||
t = w - TWO52[sx];
|
||||
EXTRACT_WORDS (i0, i1, t);
|
||||
j0 = ((i0 & 0x7ff00000) >> 20) - 1023;
|
||||
i0 &= 0x000fffff;
|
||||
i0 |= 0x00100000;
|
||||
result = ((long long int) i0 << (j0 - 20)) | (i1 >> (52 - j0));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return (long long int) x;
|
||||
}
|
||||
|
||||
return sx ? -result : result;
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* FLOATING_POINT_SUPPORT */
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_log.c,v 1.9 2006-01-08 12:04:23 obarthel Exp $
|
||||
* $Id: math_log.c,v 1.10 2007-11-08 11:23:53 damato Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -244,7 +244,7 @@ log(double x)
|
||||
{
|
||||
double result;
|
||||
|
||||
if(x > DBL_EPSILON)
|
||||
if(x > 0)
|
||||
{
|
||||
result = __log(x);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_log10.c,v 1.8 2006-01-08 12:04:23 obarthel Exp $
|
||||
* $Id: math_log10.c,v 1.9 2007-11-08 11:23:53 damato Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -186,7 +186,7 @@ log10(double x)
|
||||
{
|
||||
double result;
|
||||
|
||||
if(x > DBL_EPSILON)
|
||||
if(x > 0)
|
||||
{
|
||||
result = __log10(x);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_sqrt.c,v 1.8 2006-01-08 12:04:24 obarthel Exp $
|
||||
* $Id: math_sqrt.c,v 1.9 2006-09-22 07:54:24 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -143,7 +143,7 @@ INLINE STATIC double
|
||||
__sqrt(double x)
|
||||
{
|
||||
double z;
|
||||
int sign = (int)0x80000000;
|
||||
unsigned int sign = (unsigned int)0x80000000;
|
||||
unsigned int r,t1,s1,ix1,q1;
|
||||
int ix0,s0,q,m,t,i;
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: mount_convertinfo.c,v 1.6 2006-01-08 12:04:24 obarthel Exp $
|
||||
* $Id: mount_convertinfo.c,v 1.7 2008-04-16 07:38:10 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -42,6 +42,20 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifndef ID_BUSY_DISK
|
||||
#define ID_BUSY_DISK (0x42555359L) /* 'BUSY' */
|
||||
#endif /* ID_LONGNAME_DOS_DISK */
|
||||
|
||||
#ifndef ID_LONGNAME_DOS_DISK
|
||||
#define ID_LONGNAME_DOS_DISK (0x444F5306L) /* 'DOS\6' */
|
||||
#endif /* ID_LONGNAME_DOS_DISK */
|
||||
|
||||
#ifndef ID_LONGNAME_FFS_DISK
|
||||
#define ID_LONGNAME_FFS_DISK (0x444F5307L) /* 'DOS\7' */
|
||||
#endif /* ID_LONGNAME_FFS_DISK */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
void
|
||||
__convert_info_to_statfs(struct InfoData * id,struct statfs * f)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: mount_fstatfs.c,v 1.13 2006-01-08 12:04:24 obarthel Exp $
|
||||
* $Id: mount_fstatfs.c,v 1.14 2006-11-16 14:39:23 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -106,7 +106,7 @@ fstatfs(int file_descriptor, struct statfs *buf)
|
||||
}
|
||||
|
||||
PROFILE_OFF();
|
||||
parent_dir = __safe_parent_of_file_handle(fd->fd_DefaultFile);
|
||||
parent_dir = __safe_parent_of_file_handle(fd->fd_File);
|
||||
PROFILE_ON();
|
||||
|
||||
if(parent_dir == ZERO)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 200
|
||||
#define DATE "17.4.2006"
|
||||
#define VERS "net.lib 1.200"
|
||||
#define VSTRING "net.lib 1.200 (17.4.2006)\r\n"
|
||||
#define VERSTAG "\0$VER: net.lib 1.200 (17.4.2006)"
|
||||
#define REVISION 203
|
||||
#define DATE "28.4.2008"
|
||||
#define VERS "net.lib 1.203"
|
||||
#define VSTRING "net.lib 1.203 (28.4.2008)\r\n"
|
||||
#define VERSTAG "\0$VER: net.lib 1.203 (28.4.2008)"
|
||||
|
||||
@@ -1 +1 @@
|
||||
200
|
||||
203
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
|
||||
| $Id: nrcrt0.S,v 1.5 2006-01-08 12:04:24 obarthel Exp $
|
||||
| $Id: nrcrt0.S,v 1.6 2006-11-16 10:09:20 obarthel Exp $
|
||||
|
|
||||
| :ts=4
|
||||
|
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_kernel_scalbn.c,v 1.5 2006-01-08 12:04:23 obarthel Exp $
|
||||
* $Id: resource_getrlimit.c,v 1.2 2006-07-28 14:37:27 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -29,60 +29,103 @@
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*
|
||||
* PowerPC math library based in part on work by Sun Microsystems
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
*/
|
||||
|
||||
#ifndef _MATH_HEADERS_H
|
||||
#include "math_headers.h"
|
||||
#endif /* _MATH_HEADERS_H */
|
||||
#include <sys/resource.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#if defined(FLOATING_POINT_SUPPORT) && defined(PPC_FLOATING_POINT_SUPPORT)
|
||||
#ifndef _STDLIB_HEADERS_H
|
||||
#include "stdlib_headers.h"
|
||||
#endif /* _STDLIB_HEADERS_H */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
static const double
|
||||
huge = 1.0e+300,
|
||||
tiny = 1.0e-300,
|
||||
two54 = 1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
|
||||
twom54 = 5.55111512312578270212e-17; /* 0x3C900000, 0x00000000 */
|
||||
/* The following is not part of the ISO 'C' (1994) standard. */
|
||||
|
||||
double __scalbn (double x, int n)
|
||||
/****************************************************************************/
|
||||
|
||||
int
|
||||
getrlimit(int resource,struct rlimit *rlp)
|
||||
{
|
||||
int k,hx,lx;
|
||||
EXTRACT_WORDS(hx,lx,x);
|
||||
k = (hx&0x7ff00000)>>20; /* extract exponent */
|
||||
if (k==0) { /* 0 or subnormal x */
|
||||
if ((lx|(hx&0x7fffffff))==0) return x; /* +-0 */
|
||||
x *= two54;
|
||||
GET_HIGH_WORD(hx,x);
|
||||
k = ((hx&0x7ff00000)>>20) - 54;
|
||||
if (n< -50000) return tiny*x; /*underflow*/
|
||||
}
|
||||
if (k==0x7ff) return x+x; /* NaN or Inf */
|
||||
k = k+n;
|
||||
if (k > 0x7fe) return huge*copysign(huge,x); /* overflow */
|
||||
if (k > 0) /* normal result */
|
||||
{SET_HIGH_WORD(x,(hx&0x800fffff)|(k<<20)); return x;}
|
||||
if (k <= -54) {
|
||||
if (n > 50000) /* in case integer overflow in n+k */
|
||||
return huge*copysign(huge,x); /*overflow*/
|
||||
else return tiny*copysign(tiny,x); /*underflow*/
|
||||
}
|
||||
k += 54; /* subnormal result */
|
||||
SET_HIGH_WORD(x,(hx&0x800fffff)|(k<<20));
|
||||
return x*twom54;
|
||||
struct Task *self;
|
||||
int ret = -1;
|
||||
rlim_t l;
|
||||
|
||||
if(rlp == NULL)
|
||||
{
|
||||
__set_errno(EFAULT);
|
||||
goto out;
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
switch(resource)
|
||||
{
|
||||
case RLIM_VMEM:
|
||||
|
||||
#endif /* FLOATING_POINT_SUPPORT && PPC_FLOATING_POINT_SUPPORT */
|
||||
rlp->rlim_cur = RLIM_INFINITY;
|
||||
rlp->rlim_max = RLIM_INFINITY;
|
||||
break;
|
||||
|
||||
case RLIM_CORE: /* Coredumps are not supported. */
|
||||
|
||||
rlp->rlim_cur = 0;
|
||||
rlp->rlim_max = 0;
|
||||
break;
|
||||
|
||||
case RLIM_CPU:
|
||||
|
||||
rlp->rlim_cur = RLIM_INFINITY;
|
||||
rlp->rlim_max = RLIM_INFINITY;
|
||||
break;
|
||||
|
||||
case RLIM_DATA:
|
||||
|
||||
#if defined(__amigaos4__)
|
||||
{
|
||||
l = AvailMem(MEMF_TOTAL|MEMF_VIRTUAL);
|
||||
}
|
||||
#else
|
||||
{
|
||||
l = AvailMem(MEMF_TOTAL);
|
||||
}
|
||||
#endif /* __amigaos4__ */
|
||||
|
||||
rlp->rlim_cur = l;
|
||||
rlp->rlim_max = l;
|
||||
break;
|
||||
|
||||
case RLIM_FSIZE:
|
||||
|
||||
rlp->rlim_cur = RLIM_INFINITY; /* Use RLIM_INFINITY in case we have a 64-bit fs. pathconf() can be more precise. */
|
||||
rlp->rlim_max = RLIM_INFINITY;
|
||||
break;
|
||||
|
||||
case RLIM_NOFILE:
|
||||
|
||||
rlp->rlim_cur = RLIM_INFINITY;
|
||||
rlp->rlim_max = RLIM_INFINITY;
|
||||
break;
|
||||
|
||||
case RLIM_STACK: /* Return current stacksize. */
|
||||
|
||||
self = FindTask(NULL);
|
||||
|
||||
l = (char *)self->tc_SPUpper - (char *)self->tc_SPLower;
|
||||
|
||||
rlp->rlim_cur = l;
|
||||
rlp->rlim_max = RLIM_INFINITY;
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
__set_errno(EINVAL);
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
|
||||
out:
|
||||
|
||||
return(ret);
|
||||
}
|
||||
83
library/resource_setrlimit.c
Normal file
83
library/resource_setrlimit.c
Normal file
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
* $Id: resource_setrlimit.c,v 1.2 2006-07-28 14:37:27 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
||||
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) sourcery.han.de>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Neither the name of Olaf Barthel nor the names of contributors
|
||||
* may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/resource.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifndef _STDLIB_HEADERS_H
|
||||
#include "stdlib_headers.h"
|
||||
#endif /* _STDLIB_HEADERS_H */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* The following is not part of the ISO 'C' (1994) standard. */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
int
|
||||
setrlimit(int resource,const struct rlimit *rlp)
|
||||
{
|
||||
int ret = -1;
|
||||
|
||||
if(rlp == NULL)
|
||||
{
|
||||
__set_errno(EFAULT);
|
||||
goto out;
|
||||
}
|
||||
|
||||
switch(resource)
|
||||
{
|
||||
case RLIM_VMEM:
|
||||
case RLIM_CORE:
|
||||
case RLIM_CPU:
|
||||
case RLIM_DATA:
|
||||
case RLIM_FSIZE:
|
||||
case RLIM_NOFILE:
|
||||
case RLIM_STACK: /* TODO: See if it might be possible to set the stacksize here. */
|
||||
|
||||
__set_errno(EPERM);
|
||||
goto out;
|
||||
|
||||
default:
|
||||
|
||||
__set_errno(EINVAL);
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
|
||||
out:
|
||||
|
||||
return(ret);
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# $Id: GNUmakefile.os4,v 1.4 2006-01-08 12:06:14 obarthel Exp $
|
||||
# $Id: GNUmakefile.os4,v 1.5 2006-06-22 09:30:25 obarthel Exp $
|
||||
#
|
||||
# :ts=4
|
||||
#
|
||||
@@ -40,6 +40,8 @@ CPU =
|
||||
OPTIONS = -DNDEBUG -mcrt=clib2-ts
|
||||
OPTIMIZE = -O
|
||||
DEBUG = -ggdb
|
||||
CRTBEGIN = /usr/local/amiga/ppc-amigaos/clib2/lib/crtbegin.o
|
||||
CRTEND = /usr/local/amiga/ppc-amigaos/clib2/lib/crtend.o
|
||||
|
||||
###############################################################################
|
||||
|
||||
@@ -52,7 +54,7 @@ OBJS = \
|
||||
|
||||
###############################################################################
|
||||
|
||||
LIBS = -lc -lamiga
|
||||
LIBS = $(CRTBEGIN) -lc -lamiga $(CRTEND)
|
||||
|
||||
###############################################################################
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: socket_accept.c,v 1.16 2006-01-08 12:04:24 obarthel Exp $
|
||||
* $Id: socket_accept.c,v 1.17 2006-11-16 10:41:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -95,7 +95,7 @@ accept(int sockfd,struct sockaddr *cliaddr,socklen_t *addrlen)
|
||||
goto out;
|
||||
|
||||
/* Remember the socket number for later. */
|
||||
socket_fd = (LONG)fd->fd_DefaultFile;
|
||||
socket_fd = fd->fd_Socket;
|
||||
|
||||
/* Now let go of the stdio lock, so that the only locking performed
|
||||
will be done inside the accept() call. */
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: socket_bind.c,v 1.7 2006-01-08 12:04:24 obarthel Exp $
|
||||
* $Id: socket_bind.c,v 1.8 2006-11-16 10:41:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -84,7 +84,7 @@ bind(int sockfd,const struct sockaddr *name,socklen_t namelen)
|
||||
goto out;
|
||||
|
||||
PROFILE_OFF();
|
||||
result = __bind((LONG)fd->fd_DefaultFile,(struct sockaddr *)name,namelen);
|
||||
result = __bind(fd->fd_Socket,(struct sockaddr *)name,namelen);
|
||||
PROFILE_ON();
|
||||
|
||||
out:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: socket_connect.c,v 1.8 2006-01-08 12:04:24 obarthel Exp $
|
||||
* $Id: socket_connect.c,v 1.9 2006-11-16 10:41:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@@ -84,7 +84,7 @@ connect(int sockfd,const struct sockaddr *name,socklen_t namelen)
|
||||
goto out;
|
||||
|
||||
PROFILE_OFF();
|
||||
result = __connect((LONG)fd->fd_DefaultFile,(struct sockaddr *)name,namelen);
|
||||
result = __connect(fd->fd_Socket,(struct sockaddr *)name,namelen);
|
||||
PROFILE_ON();
|
||||
|
||||
out:
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user