From b35f5e0fdbd0eba14de838d8df29f1cbbd6a94a7 Mon Sep 17 00:00:00 2001 From: Olaf Barthel Date: Fri, 11 Mar 2005 11:35:32 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create tag 'BEFORE_CONSTRUCTOR_CHANGE'. git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/tags/BEFORE_CONSTRUCTOR_CHANGE@14881 87f5fb63-7c3d-0410-a384-fd976d0f7a62 --- CVSROOT/checkoutlist | 13 -- CVSROOT/commitinfo | 15 -- CVSROOT/config | 21 -- CVSROOT/cvswrappers | 19 -- CVSROOT/editinfo | 21 -- CVSROOT/loginfo | 27 --- CVSROOT/modules | 26 --- CVSROOT/notify | 12 -- CVSROOT/rcsinfo | 13 -- CVSROOT/taginfo | 20 -- CVSROOT/verifymsg | 21 -- documentation/BUILDING.html | 30 --- documentation/GCC-68K.html | 67 ------- documentation/README.html | 250 ------------------------ documentation/specs | 64 ------- test_programs/GNUmakefile.68k | 108 ----------- test_programs/GNUmakefile.os4 | 92 --------- test_programs/README | 5 - test_programs/clib-bug.c | 74 ------- test_programs/fgets_test.c | 41 ---- test_programs/iotest.c | 44 ----- test_programs/printf_g_test.c | 12 -- test_programs/printf_test.c | 195 ------------------- test_programs/simple.c | 13 -- test_programs/smakefile | 147 -------------- test_programs/sprintf_test.c | 25 --- test_programs/sscanf_test.c | 108 ----------- test_programs/stack_extension_test.c | 31 --- test_programs/stack_size_test.c | 15 -- test_programs/strtok_test.c | 35 ---- test_programs/test.c | 277 --------------------------- test_programs/translate_test.c | 39 ---- test_programs/uname.c | 56 ------ 33 files changed, 1936 deletions(-) delete mode 100644 CVSROOT/checkoutlist delete mode 100644 CVSROOT/commitinfo delete mode 100644 CVSROOT/config delete mode 100644 CVSROOT/cvswrappers delete mode 100644 CVSROOT/editinfo delete mode 100644 CVSROOT/loginfo delete mode 100644 CVSROOT/modules delete mode 100644 CVSROOT/notify delete mode 100644 CVSROOT/rcsinfo delete mode 100644 CVSROOT/taginfo delete mode 100644 CVSROOT/verifymsg delete mode 100644 documentation/BUILDING.html delete mode 100644 documentation/GCC-68K.html delete mode 100644 documentation/README.html delete mode 100644 documentation/specs delete mode 100644 test_programs/GNUmakefile.68k delete mode 100644 test_programs/GNUmakefile.os4 delete mode 100644 test_programs/README delete mode 100644 test_programs/clib-bug.c delete mode 100644 test_programs/fgets_test.c delete mode 100644 test_programs/iotest.c delete mode 100644 test_programs/printf_g_test.c delete mode 100644 test_programs/printf_test.c delete mode 100644 test_programs/simple.c delete mode 100644 test_programs/smakefile delete mode 100644 test_programs/sprintf_test.c delete mode 100644 test_programs/sscanf_test.c delete mode 100644 test_programs/stack_extension_test.c delete mode 100644 test_programs/stack_size_test.c delete mode 100644 test_programs/strtok_test.c delete mode 100644 test_programs/test.c delete mode 100644 test_programs/translate_test.c delete mode 100644 test_programs/uname.c diff --git a/CVSROOT/checkoutlist b/CVSROOT/checkoutlist deleted file mode 100644 index 2921bff..0000000 --- a/CVSROOT/checkoutlist +++ /dev/null @@ -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: -# -# [][] -# -# comment lines begin with '#' diff --git a/CVSROOT/commitinfo b/CVSROOT/commitinfo deleted file mode 100644 index b19e7b7..0000000 --- a/CVSROOT/commitinfo +++ /dev/null @@ -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". diff --git a/CVSROOT/config b/CVSROOT/config deleted file mode 100644 index 92c150b..0000000 --- a/CVSROOT/config +++ /dev/null @@ -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 diff --git a/CVSROOT/cvswrappers b/CVSROOT/cvswrappers deleted file mode 100644 index e989b75..0000000 --- a/CVSROOT/cvswrappers +++ /dev/null @@ -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' diff --git a/CVSROOT/editinfo b/CVSROOT/editinfo deleted file mode 100644 index d78886c..0000000 --- a/CVSROOT/editinfo +++ /dev/null @@ -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. diff --git a/CVSROOT/loginfo b/CVSROOT/loginfo deleted file mode 100644 index 537607d..0000000 --- a/CVSROOT/loginfo +++ /dev/null @@ -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 diff --git a/CVSROOT/modules b/CVSROOT/modules deleted file mode 100644 index cb9e9ef..0000000 --- a/CVSROOT/modules +++ /dev/null @@ -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. diff --git a/CVSROOT/notify b/CVSROOT/notify deleted file mode 100644 index 74ae6f9..0000000 --- a/CVSROOT/notify +++ /dev/null @@ -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 diff --git a/CVSROOT/rcsinfo b/CVSROOT/rcsinfo deleted file mode 100644 index 49e59f4..0000000 --- a/CVSROOT/rcsinfo +++ /dev/null @@ -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". diff --git a/CVSROOT/taginfo b/CVSROOT/taginfo deleted file mode 100644 index 274a46d..0000000 --- a/CVSROOT/taginfo +++ /dev/null @@ -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". diff --git a/CVSROOT/verifymsg b/CVSROOT/verifymsg deleted file mode 100644 index 86f747c..0000000 --- a/CVSROOT/verifymsg +++ /dev/null @@ -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. diff --git a/documentation/BUILDING.html b/documentation/BUILDING.html deleted file mode 100644 index 7138427..0000000 --- a/documentation/BUILDING.html +++ /dev/null @@ -1,30 +0,0 @@ - - - -Notes on building the library - - -

Notes on building the library

- -

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 netinclude which has to sit in the same directory as -the source code and the include 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.

- -

The SAS/C flavour (smakefile) 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 (startup.o) and doesn't tinker with A4 relative data -addressing (and how this may be set up).

- -

There are two makefiles for GCC, each a different flavour. There is GNUmakefile.68k, -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 (GNUmakefile.os4). 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.

- - - diff --git a/documentation/GCC-68K.html b/documentation/GCC-68K.html deleted file mode 100644 index 43d0200..0000000 --- a/documentation/GCC-68K.html +++ /dev/null @@ -1,67 +0,0 @@ - - - -Notes on using the library with Amiga GCC (68k) - - -

Notes on using the library with Amiga GCC (68k)

- -

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 specs 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.

- -

Please read the following description before you follow the instructions. The -changes suggested may have unexpected side-effects!

- -

I have provided a working specs file with this documentation file. To switch -over an existing Amiga 68k port of GCC to use clib2, you would proceed as -follows:

- -
    -
  • Locate the directory within which GCC is installed. For example, this -could be within a directory to which the name ADE:, GG: or GCC: -is assigned. For the sake of simplicity, the following notes assume -that the assignment name is GCC: - -
  • Make backup copies of the following directories and files: -
      -
    1. GCC:lib/gcc-lib/amigaos/2.95.3/specs
      - -

      (NOTE: Check the directory called GCC:lib/gcc-lib/amigaos -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!)

      - -
    2. GCC:include -
    3. GCC:lib - -
    - -
  • Now you can proceed to install clib2; just copy the include and lib -directories over, like this: -
      -
    1. Copy include GCC:include all quiet -
    2. Copy lib GCC:lib all quiet -
    - -
  • Finally, replace the specs file with the one provided: -
      - -
    1. Copy specs GCC:lib/gcc-lib/amigaos/2.95.3/specs
      - -

      (NOTE: Check the directory called GCC:lib/gcc-lib/amigaos -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!)

      -
    -
- -

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!

- - diff --git a/documentation/README.html b/documentation/README.html deleted file mode 100644 index 2194982..0000000 --- a/documentation/README.html +++ /dev/null @@ -1,250 +0,0 @@ - - - -An ISO 'C' (1994) compliant runtime library for the Amiga - - -

An ISO 'C' (1994) compliant runtime library for the Amiga

- -

1. What is this?

- -

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.

- -

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.

- - -

2. What does it do?

- -

Using 'C' - A reference manual (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.

- -

Because Samba needs a few POSIX-like routines to be supported, the library -functionality is complemented by a set of routines described in Advanced -programming in the Unix environent.

- -

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.

- -

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 IEEE_FLOATING_POINT_SUPPORT preprocessor symbol to activate IEEE math -code and the M68881_FLOATING_POINT_SUPPORT symbol for M68881 inline math.

- -

For the PowerPC platform, the library uses code borrowed from fdlibm 5.3, -which is a portable library of arithmetic functions developed by Sun -Microsystems which, for example, is also used within the Java platform.

- -

Not unlike SAS/C, you can configure a minimum stack size the program is to use -when it starts up. This is controlled via the __stack_size variable (see -stdlib_main.c).

- -

I added some amiga.lib and debug.lib functionality to the library, but don't -count on it to be complete.

- -

The library code is supposed to be thread-safe if built with the __THREAD_SAFE -preprocesssor symbold defined. Note that 'thread-safe' does not mean -'reentrant'. Multiple callers for certain library functions are permitted, but -not for all of them. For example, mkdtemp() is not thread-safe, and neither is -rand() or localtime(). But as per POSIX 1003.1c-1995 there are thread-safe -variants of rand() and localtime() called rand_r(), localtime_r(), and others. -The use of the socket I/O functions is still problematic because the -underlying bsdsocket.library API is not supposed to be used by any process -other than the one that opened it. Also yet unsolved is the issue of reading -error codes from the errno variable which currently always contains the -error code left by the last caller.

- -

Take care: 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 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.

- - -

3. What does it not do?

- -

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.

- -

There is very little support for amiga.lib functionality. There is NewList(), -HookEntry(), CallHook(), CallHookA(), the DoMethod() 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 amiga.lib, you really shouldn't need in in the first place.

- - -

4. Where does the source code come from?

- -

I originally thought that it might be helpful to piece this library together -from various sources, such as the BSD libc. 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 bcopy() as an alias for memcpy(), and -unlike memcpy() is documented to, bcopy() supports overlapping copies.

- -

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 setjmp/longjmp -routines and the startup code. The M68881 inline math code comes from the -<math-68881.h> file written by Matthew Self (self@bayes.arc.nasa.gov).

- - -

5. Limitations and caveats

- -

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.

- -

The code is currently plastered with assertions and debug code. It is -therefore much larger than it ought to be and runs much slower than it ought -to be. For example, the malloc() routine will set the contents of the memory -allocated to a 'dirty' bit pattern which is likely to break software which -makes assumptions about its contents. Likewise, the free() routine will trash -the memory to deallocate with a different 'dirty' bit pattern to turn up reuse -of memory after deallocation. All these debugging features can be disabled by -defining the NDEBUG preprocessor symbol at compile time (see <assert.h>).

- -

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.

- -

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 data=faronly option to compile the -library and the programs.

- -

Different build makefiles are supplied for use with GCC. There is -GNUmakefile.68k for the 68k platform and GNUmakefile.os4 for the AmigaOS4 -PowerPC version.

- - -

6. Conventions and design issues

- -

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 unistd_lchown.c contains the definition of -the lchown() routine, which has its prototype defined in the <unistd.h> header -file.

- -

Internal function and variables which need to be visible across several -modules have names prefixed with two underscores, as in __stdio_init().

- -

All routines attempt to do error checking on their parameters. They will -either drop into an assert() or set an errno value and refuse to go any -further. This cuts performance but should help to catch the simple bugs quite -easily (NULL pointers).

- -

Just like any halfway sane Amiga 'C' runtime library, this one performs its ^C -checking in the I/O routines. Typically once upon entry and in every iteration -of the loop there might be it will quickly poll the ^C signal and drop into -raise(SIGINT) in case the signal is set. This is just about the safest method -to solve the problem and should be much more robust than the ixemul approach -of 'interrupt anywhere - crash anywhere' using the task switch/launch hooks to -test for signals.

- -

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, unlink() will by default operate like DeleteFile() and rename() -will return with an error code set if the name of the file/directory to be -renamed would collide with an existing directory entry. However, your program -can set a global variable __unix_semantics which will cause some routines to -perform like their Unix counterparts. This is necessary for Samba to work but -not a generally desirable feature. You have some Unix-like behaviour, but the -environment itself is not completely Unix- or POSIX-compliant. And it -shouldn't be. Don't make the mistake of trying to mold the environment into a -POSIX emulation. It doesn't work; AmigaOS is not Unix.

- - -

7. The startup code

- -

There are three program startup files provided. The most simplistic is in -startup.c which I use for SAS/C. It just invokes the setup routine which -eventually calls main() and drops straight into exit().

- -

The ncrt0.S file was adapted from the libnix startup code which sets up the -base relative data area, if necessary (the SMALL_DATA preprocessor symbol must -be defined).

- -

The nrcrt0.S 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 -geta4() stub is missing here; it wouldn't work in a resident program anyway.

- -

The ncrt0.S and nrcrt0.S 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 stdlib_main.c file rather than in -assembly language.

- - -

8. Documentation

- -

Well, you're reading it. There isn't anything much yet. You can consult the book -'C' - A reference manual and you could look at the -Open Group's Single Unix -Specification.

- - -

9. Legal status

- -

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.

- -

The PowerPC math library is 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.
-====================================================
-
- -

10. Contacting the author

- -

The basic work was done by Olaf Barthel during two weeks in July 2002. You -can reach me at:

- -

Olaf Barthel
- Gneisenaustr. 43
- D-31275 Lehrte

- -

Or via e-mail:

- -

olsen@sourcery.han.de

- - diff --git a/documentation/specs b/documentation/specs deleted file mode 100644 index bc1591b..0000000 --- a/documentation/specs +++ /dev/null @@ -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} %{m68881:-fl libm881} - -*lib: -%{mstackextend:-lstack} -lc -lamiga -ldebug -lgcc -lc - -*libgcc: - - -*startfile: -%{resident32:nr32crt0.o%s mainb32.o%s}%{!resident32:%{fbaserel32:nb32crt0.o%s mainb32.o%s}%{!fbaserel32:%{resident:nrcrt0.o%s mainb.o%s}%{!resident:%{fbaserel:nbcrt0.o%s mainb.o%s}%{!fbaserel:ncrt0.o%s mainnb.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*} - }}}}}} - diff --git a/test_programs/GNUmakefile.68k b/test_programs/GNUmakefile.68k deleted file mode 100644 index c4a37ca..0000000 --- a/test_programs/GNUmakefile.68k +++ /dev/null @@ -1,108 +0,0 @@ -# -# $Id: GNUmakefile.68k,v 1.5 2005-03-03 15:12:18 obarthel Exp $ -# -# :ts=8 -# - -############################################################################## - -CC = gcc -DELETE = delete all quiet - -############################################################################## - -.c.o: - @echo "Compiling $<" - @$(CC) -c $(CFLAGS) $< - -############################################################################## - -#CODE_TYPE := -fbaserel -DSMALL_DATA -m68020-60 -DM68020 -#CODE_TYPE := -fbaserel -DSMALL_DATA -m68000 -#CODE_TYPE := -fbaserel32 -DSMALL_DATA32 -m68020-60 -DM68020 - CODE_TYPE := -m68020-60 -DM68020 -#CODE_TYPE := -m68000 - -############################################################################## - -WARNINGS = \ - -Wall -W -Wshadow -Wpointer-arith -Wsign-compare -Wmissing-prototypes \ - -Wundef -Wbad-function-cast -Wmissing-declarations -Wconversion - -INCLUDE = -I../library/include -LIB = -L../library/lib - OPTIONS = -DNDEBUG -fno-builtin -DNO_INLINE_STDARG -DIEEE_FLOATING_POINT_SUPPORT -#OPTIONS = -D__MEM_DEBUG -fno-builtin -#OPTIONS = -DDEBUG -D__MEM_DEBUG -DNO_INLINE_STDARG -fno-builtin - OPTIMIZE = -O -#OPTIMIZE = -O2 -fomit-frame-pointer -#DEBUG = -g2 - -CFLAGS = $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(CODE_TYPE) $(INCLUDE) $(LIB) - -############################################################################## - -LIBS = -lm -lc -lgcc - -############################################################################## - -all: test fgets_test iotest sscanf_test printf_test sprintf_test stack_size_test \ - translate_test strtok_test uname simple - -clean: - $(DELETE) #?.o #?.map test fgets_test iotest sscanf_test printf_test sprintf_test \ - stack_size_test translate_test strtok_test uname simple - -############################################################################## - -test : test.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ test.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -fgets_test : fgets_test.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ fgets_test.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -strtok_test : strtok_test.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ strtok_test.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -iotest : iotest.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ iotest.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -sscanf_test : sscanf_test.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ sscanf_test.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -printf_test : printf_test.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ printf_test.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -sprintf_test : sprintf_test.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ sprintf_test.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -stack_size_test : stack_size_test.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ stack_size_test.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -translate_test : translate_test.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ translate_test.o -lunix $(LIBS) -Wl,--cref,-M,-Map=$@.map - -uname : uname.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ uname.o -lunix $(LIBS) -Wl,--cref,-M,-Map=$@.map - -simple : simple.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ simple.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -############################################################################## - -mkid: - mkid -v #?.(c|h|asm|i) - -update: - mkid -v -u diff --git a/test_programs/GNUmakefile.os4 b/test_programs/GNUmakefile.os4 deleted file mode 100644 index ce74bbe..0000000 --- a/test_programs/GNUmakefile.os4 +++ /dev/null @@ -1,92 +0,0 @@ -# -# $Id: GNUmakefile.os4,v 1.5 2005-03-03 15:12:18 obarthel Exp $ -# -# :ts=8 -# - -############################################################################## - -CC = ppc-amigaos-gcc -DELETE = rm -r - -############################################################################## - -.c.o: - @echo "Compiling $<" - @$(CC) -c $(CFLAGS) $< - -############################################################################## - -WARNINGS = \ - -Wall -W -Wshadow -Wpointer-arith -Wsign-compare -Wmissing-prototypes \ - -Wundef -Wbad-function-cast -Wmissing-declarations -Wconversion - -INCLUDE = -I../library/include -I$(V)/include -LIB = -L../library/lib -#OPTIONS = -DNDEBUG -fno-builtin -DNO_INLINE_STDARG -DIEEE_FLOATING_POINT_SUPPORT -#OPTIONS = -D__MEM_DEBUG -fno-builtin -#OPTIONS = -DDEBUG -D__MEM_DEBUG -DNO_INLINE_STDARG -fno-builtin - OPTIMIZE = -O -#OPTIMIZE = -O2 -fomit-frame-pointer -#DEBUG = -g2 - -CFLAGS = $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(CODE_TYPE) $(INCLUDE) $(LIB) - -############################################################################## - -LIBS = -lm -lc - -############################################################################## - -all: test fgets_test iotest sscanf_test printf_test sprintf_test stack_size_test \ - translate_test strtok_test uname simple - -clean: - $(DELETE) *.o *.map test fgets_test iotest sscanf_test printf_test sprintf_test \ - stack_size_test translate_test strtok_test uname simple - -############################################################################## - -test : test.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ test.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -fgets_test : fgets_test.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ fgets_test.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -strtok_test : strtok_test.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ strtok_test.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -iotest : iotest.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ iotest.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -sscanf_test : sscanf_test.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ sscanf_test.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -printf_test : printf_test.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ printf_test.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -sprintf_test : sprintf_test.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ sprintf_test.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -stack_size_test : stack_size_test.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ stack_size_test.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -translate_test : translate_test.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ translate_test.o -lunix $(LIBS) -Wl,--cref,-M,-Map=$@.map - -uname : uname.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ uname.o -lunix $(LIBS) -Wl,--cref,-M,-Map=$@.map - -simple : simple.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ simple.o $(LIBS) -Wl,--cref,-M,-Map=$@.map diff --git a/test_programs/README b/test_programs/README deleted file mode 100644 index be6967b..0000000 --- a/test_programs/README +++ /dev/null @@ -1,5 +0,0 @@ -This is a collection of programs I'm using to test the library. These -are functional tests: the library is supposed to do something, and produce -a particular result. For example, "printf_test" exercises a bunch of -output formatting rules. Currently, there is only an smakefile for SAS/C -to build these programs with. diff --git a/test_programs/clib-bug.c b/test_programs/clib-bug.c deleted file mode 100644 index c3a554d..0000000 --- a/test_programs/clib-bug.c +++ /dev/null @@ -1,74 +0,0 @@ -#include -#include - -#define LINEBUFLENGTH 180 - -#define STRIP_LF(str) (str[strlen(str)-1]=0) -void invert_str(char * in) -{ -char t; -while(t=*in) - { - *in++=~t; - } -} - -int main(int i, char *c[]) -{ -char dest_fname[80], in_linebuffer[LINEBUFLENGTH]; -FILE * fileout, * filein; - -if(i>1) - { - sprintf(dest_fname, "%s.c", c[1]); - - fileout=fopen(dest_fname, "w"); - filein =fopen(c[1], "r"); - - if(fileout && filein) - { - fgets(in_linebuffer, LINEBUFLENGTH, filein); - STRIP_LF(in_linebuffer); - invert_str(in_linebuffer); - fputs("char *s_leading=\"", fileout); - fputs(in_linebuffer, fileout); - fputs("\";\n", fileout); - - fputs("char *s_messages[]={\n", fileout); - - while(fgets(in_linebuffer, LINEBUFLENGTH, filein)) - { - STRIP_LF(in_linebuffer); - invert_str(in_linebuffer); - - fputs("\"", fileout); - fputs(in_linebuffer, fileout); - fputs("\",\n", fileout); - } - fputs("};\n", fileout); - fputs("unsigned s_mess_num = sizeof(s_messages)/sizeof(char *);\n", fileout); - fclose(filein); - fclose(fileout); - } - } -return 0; -} - -/* -What's this stuff for ? I use it in SP_Engine to hide the usual bunch of "secret -messages". As you can see, the strings are simply not'ed . -This source shows both flaws: fgets() and the missing buffer flush. You can -change the while() statement with - -while(!feof(filein)) - { - fgets(in_linebuffer, LINEBUFLENGTH, filein); -.... - -This way you'll workaround the first problem. -The second issue manifests itself this way: the last two fputs() followed by the -fclose() don't do anything: no "};\n" and no "unsigned....." lines are output to -'fileout'. With SAS, it works perfectly. Converting the source to dos.library -calls also works perfectly. I wonder if there's some kind of strange interaction -with the dos/shell updates. -*/ diff --git a/test_programs/fgets_test.c b/test_programs/fgets_test.c deleted file mode 100644 index 7190b8d..0000000 --- a/test_programs/fgets_test.c +++ /dev/null @@ -1,41 +0,0 @@ -/* - * $Id: fgets_test.c,v 1.1.1.1 2004-07-26 16:36:07 obarthel Exp $ - * - * :ts=4 - */ - -/****************************************************************************/ - -#include -#include - -/****************************************************************************/ - -int -main(int argc,char ** argv) -{ - char line[256]; - size_t len; - FILE * in; - int i; - - for(i = 1 ; i < argc ; i++) - { - in = fopen(argv[i],"rb"); - if(in != NULL) - { - while(fgets(line,sizeof(line),in) != NULL) - { - len = strlen(line); - while(len > 0 && (line[len-1] == '\n' || line[len-1] == '\r')) - line[--len] = '\0'; - - printf("%s\n",line); - } - - fclose(in); - } - } - - return(0); -} diff --git a/test_programs/iotest.c b/test_programs/iotest.c deleted file mode 100644 index 8f5c269..0000000 --- a/test_programs/iotest.c +++ /dev/null @@ -1,44 +0,0 @@ -#include -#include -#include - -#define FILE_SIZE 2048 -#define WRITE_SIZE 32 - -char FileData[FILE_SIZE]; - -void CreateFile(char *filename) -{ - FILE *file; - - if (file = fopen(filename,"w")) { - memset(FileData,'0',FILE_SIZE); - memset(FileData,'-',WRITE_SIZE); - fwrite(FileData,1,FILE_SIZE,file); - fclose(file); - } -} - -void ReadWriteFile(char *filename) -{ - FILE *file; - - if (file = fopen(filename,"r+")) { - fseek(file,0,SEEK_SET); - fread(FileData,1,FILE_SIZE,file); - fseek(file,0,SEEK_SET); - memset(FileData,'1',WRITE_SIZE); - fwrite(FileData,1,WRITE_SIZE,file); - fclose(file); - } -} - -int main(int argc, char **argv) -{ - if (argc > 1) { - CreateFile(argv[1]); - ReadWriteFile(argv[1]); - } - - return 0; -} diff --git a/test_programs/printf_g_test.c b/test_programs/printf_g_test.c deleted file mode 100644 index 0a9edcb..0000000 --- a/test_programs/printf_g_test.c +++ /dev/null @@ -1,12 +0,0 @@ -#include - -int __debug_level = 2; - -int main(void) -{ - double val = 0.0001; - - printf("%g\n", val); - - return(0); -} diff --git a/test_programs/printf_test.c b/test_programs/printf_test.c deleted file mode 100644 index ddab456..0000000 --- a/test_programs/printf_test.c +++ /dev/null @@ -1,195 +0,0 @@ -#include -#include - -double x; - -void -print_format_int(const char * format_string,int parameter1,int parameter2) -{ - printf("\""); - printf(format_string,parameter1); - printf("\"\t"); - - printf("Value = % d, Format = \"%s\"\n",parameter1,format_string); - - printf("\""); - printf(format_string,parameter2); - printf("\"\t"); - - printf("Value = % d, Format = \"%s\"\n",parameter2,format_string); -} - -void -print_format_char(const char * format_string,char parameter) -{ - printf("\""); - printf(format_string,parameter); - printf("\"\t"); - - printf("Value = '%c', Format = \"%s\"\n",parameter,format_string); -} - -void -print_format_string(const char * format_string,const char *parameter1,const char *parameter2) -{ - printf("\""); - printf(format_string,parameter1); - printf("\"\t"); - - printf("Value = \"%s\", Format = \"%s\"\n",parameter1,format_string); - - printf("\""); - printf(format_string,parameter2); - printf("\"\t"); - - printf("Value = \"%s\", Format = \"%s\"\n",parameter2,format_string); -} - -void -print_format_float(const char * format_string,double parameter1,double parameter2) -{ - printf("\""); - printf(format_string,parameter1); - printf("\"\t"); - - printf("Value = % f, Format = \"%s\"\n",parameter1,format_string); - - printf("\""); - printf(format_string,parameter2); - printf("\"\t"); - - printf("Value = % f, Format = \"%s\"\n",parameter2,format_string); -} - -int -main(void) -{ - /* - unsigned long foo[2] = { 0x41f00000, 0 }; - - memcpy(&x,foo,sizeof(x)); - - printf("%.20g\n",x); - */ - - print_format_int("%12d",45,-45); - print_format_int("%012d",45,-45); - print_format_int("% 012d",45,-45); - print_format_int("%+12d",45,-45); - print_format_int("%+012d",45,-45); - print_format_int("%-12d",45,-45); - print_format_int("%- 12d",45,-45); - print_format_int("%-+12d",45,-45); - print_format_int("%12.4d",45,-45); - print_format_int("%-12.4d",45,-45); - print_format_int("%12.0d",45,-45); - - printf("\n"); - - print_format_int("%14u",45,-45); - print_format_int("%014u",45,-45); - print_format_int("%#14u",45,-45); - print_format_int("%#014u",45,-45); - print_format_int("%-14u",45,-45); - print_format_int("%-#14u",45,-45); - print_format_int("%14.4u",45,-45); - print_format_int("%-14.4u",45,-45); - print_format_int("%14.0u",45,-45); - - printf("\n"); - - print_format_int("%14o",45,-45); - print_format_int("%014o",45,-45); - print_format_int("%#14o",45,-45); - print_format_int("%#014o",45,-45); - print_format_int("%-14o",45,-45); - print_format_int("%-#14o",45,-45); - print_format_int("%14.4o",45,-45); - print_format_int("%-14.4o",45,-45); - print_format_int("%14.0o",45,-45); - - printf("\n"); - - print_format_int("%12x",45,-45); - print_format_int("%012x",45,-45); - print_format_int("%#12X",45,-45); - print_format_int("%#012X",45,-45); - print_format_int("%-12x",45,-45); - print_format_int("%-#12x",45,-45); - print_format_int("%12.4x",45,-45); - print_format_int("%-12.4x",45,-45); - print_format_int("%12.0x",45,-45); - - printf("\n"); - - print_format_char("%12c",'*'); - print_format_char("%012c",'*'); - print_format_char("%-12c",'*'); - print_format_char("%12.0c",'*'); - - printf("\n"); - - print_format_string("%12s","zap","longish"); - print_format_string("%12.5s","zap","longish"); - print_format_string("%012s","zap","longish"); - print_format_string("%-12s","zap","longish"); - print_format_string("%12.0s","zap","longish"); - - printf("\n"); - - print_format_float("%10.2f",12.678,-12.678); - print_format_float("%010.2f",12.678,-12.678); - print_format_float("% 010.2f",12.678,-12.678); - print_format_float("%+10.2f",12.678,-12.678); - print_format_float("%+010.2f",12.678,-12.678); - print_format_float("%-10.2f",12.678,-12.678); - print_format_float("%- 10.2f",12.678,-12.678); - print_format_float("%-+10.4f",12.678,-12.678); - print_format_float("%f",12.678,-12.678); - print_format_float("%10f",12.678,-12.678); - print_format_float("%10.0f",12.678,-12.678); - - printf("\n"); - - print_format_float("%10.2e",12.678,-12.678); - print_format_float("%010.2e",12.678,-12.678); - print_format_float("% 010.2e",12.678,-12.678); - print_format_float("%+10.2E",12.678,-12.678); - print_format_float("%+010.2E",12.678,-12.678); - print_format_float("%-10.2e",12.678,-12.678); - print_format_float("%- 10.2e",12.678,-12.678); - print_format_float("%-+10.2e",12.678,-12.678); - print_format_float("%e",12.678,-12.678); - print_format_float("%10e",12.678,-12.678); - print_format_float("%10.0e",12.678,-12.678); - - printf("\n"); - - print_format_float("%10.2g",12.678,-12.678); - print_format_float("%010.2g",12.678,-12.678); - print_format_float("% 010.2g",12.678,-12.678); - print_format_float("%+10.2G",12.678,-12.678); - print_format_float("%+010.2G",12.678,-12.678); - print_format_float("%-10.2g",12.678,-12.678); - print_format_float("%- 10.2g",12.678,-12.678); - print_format_float("%-+10.2g",12.678,-12.678); - print_format_float("%g",12.678,-12.678); - print_format_float("%10g",12.678,-12.678); - print_format_float("%10.0g",12.678,-12.678); - - printf("\n"); - - print_format_float("%10.2g",0.678,-0.678); - print_format_float("%010.2g",0.678,-0.678); - print_format_float("% 010.2g",0.678,-0.678); - print_format_float("%+10.2G",0.678,-0.678); - print_format_float("%+010.2G",0.678,-0.678); - print_format_float("%-10.2g",0.678,-0.678); - print_format_float("%- 10.2g",0.678,-0.678); - print_format_float("%-+10.2g",0.678,-0.678); - print_format_float("%g",0.678,-0.678); - print_format_float("%10g",0.678,-0.678); - print_format_float("%10.0g",0.678,-0.678); - - return(0); -} diff --git a/test_programs/simple.c b/test_programs/simple.c deleted file mode 100644 index 4b38c53..0000000 --- a/test_programs/simple.c +++ /dev/null @@ -1,13 +0,0 @@ -/* - * $Id: simple.c,v 1.1 2005-03-03 15:12:18 obarthel Exp $ - * - * :ts=4 - */ - -/****************************************************************************/ - -int -main(int argc,char ** argv) -{ - return(0); -} diff --git a/test_programs/smakefile b/test_programs/smakefile deleted file mode 100644 index 08407d8..0000000 --- a/test_programs/smakefile +++ /dev/null @@ -1,147 +0,0 @@ -# -# $Id: smakefile,v 1.5 2005-03-03 15:12:18 obarthel Exp $ -# -# :ts=8 -# - -############################################################################## - -.c.o: - @echo "Compiling $<" - @sc nover $(CFLAGS) $< - -.asm.o: - @echo "Assembling $<" - @asm $(AFLAGS) $< - -############################################################################## - -# You might want to change this to the directory where your operating system -# header files are stored. On my system, that's "V:include", but you might -# get lucky with "sc:include" instead, which is the default for SAS/C. -INCLUDE_DIR = V:include -#INCLUDE_DIR = sc:include - -############################################################################## - -# This is where the header files, the startup code and the c.lib files are -# stored; see below how this prefix is used. -LIB = /library/ - -############################################################################## - - OPTIMIZE = optimize opttime optschedule optinline -#DEBUG = debug=line noopt define=CHECK_FOR_NULL_POINTERS -#DEBUG = debug=line -#DEBUG = debug=line define=NDEBUG - DEBUG = debug=sf noopt -#DEBUG = debug=sf noopt define=CHECK_FOR_NULL_POINTERS -#PROFILE = profile - DATA = data=faronly -#CODE = code=far - CPU = cpu=060 -MATH = define=IEEE_FLOATING_POINT_SUPPORT math=IEEE -SUPPORT = define=UNIX_PATH_SEMANTICS define=SOCKET_SUPPORT define=USERGROUP_SUPPORT \ - define=__C_MACROS__ - -############################################################################## - -CFLAGS = \ - resopt \ - nover \ - memorysize=huge \ - idlen=64 \ - commentnest \ - nostackcheck \ - stringmerge \ - errorrexx \ - $(PROFILE) $(OPTIMIZE) $(CODE) $(DATA) $(CPU) $(MATH) \ - $(SUPPORT) $(DEBUG) - -AFLAGS = \ - -d -m2 - -############################################################################## - -all: \ - setup \ - test fgets_test iotest sscanf_test printf_test sprintf_test stack_size_test translate_test strtok_test uname simple \ - cleanup - -clean: - -delete \#?.o \#?.map test fgets_test iotest sscanf_test printf_test sprintf_test stack_size_test translate_test strtok_test uname simple - -############################################################################## - -setup: - @echo "Setting up include: assignment" - @assign include: $(LIB)include V:include - -cleanup: - @echo "Cleaning up include: assignment" - @assign include: sc:include - -############################################################################## - -test: test.o - @echo "Linking $@" - @slink $(LIB)startup.o test.o to $@ lib $(LIB)c.lib addsym \ - map $@.map,fhx fwidth 32 pwidth 32 swidth 32 - -fgets_test: fgets_test.o - @echo "Linking $@" - @slink $(LIB)startup.o fgets_test.o to $@ lib $(LIB)c.lib addsym \ - map $@.map,fhx fwidth 32 pwidth 32 swidth 32 - -strtok_test: strtok_test.o - @echo "Linking $@" - @slink $(LIB)startup.o strtok_test.o to $@ lib $(LIB)c.lib addsym \ - map $@.map,fhx fwidth 32 pwidth 32 swidth 32 - -iotest: iotest.o - @echo "Linking $@" - @slink $(LIB)startup.o iotest.o to $@ lib $(LIB)c.lib addsym \ - map $@.map,fhx fwidth 32 pwidth 32 swidth 32 - -sscanf_test: sscanf_test.o - @echo "Linking $@" - @slink $(LIB)startup.o sscanf_test.o to $@ lib $(LIB)c.lib addsym \ - map $@.map,fhx fwidth 32 pwidth 32 swidth 32 - -printf_test: printf_test.o - @echo "Linking $@" - @slink $(LIB)startup.o printf_test.o to $@ lib $(LIB)c.lib addsym \ - map $@.map,fhx fwidth 32 pwidth 32 swidth 32 - -sprintf_test: sprintf_test.o - @echo "Linking $@" - @slink $(LIB)startup.o sprintf_test.o to $@ lib $(LIB)c.lib addsym \ - map $@.map,fhx fwidth 32 pwidth 32 swidth 32 - -stack_size_test: stack_size_test.o - @echo "Linking $@" - @slink $(LIB)startup.o stack_size_test.o to $@ lib $(LIB)c.lib addsym \ - map $@.map,fhx fwidth 32 pwidth 32 swidth 32 - -translate_test: translate_test.o - @echo "Linking $@" - @slink $(LIB)startup.o translate_test.o to $@ lib $(LIB)c.lib addsym \ - map $@.map,fhx fwidth 32 pwidth 32 swidth 32 - -uname: uname.o - @echo "Linking $@" - @slink $(LIB)startup.o uname.o to $@ lib $(LIB)c.lib addsym \ - map $@.map,fhx fwidth 32 pwidth 32 swidth 32 - -simple: simple.o - @echo "Linking $@" - @slink $(LIB)startup.o simple.o to $@ lib $(LIB)c.lib addsym \ - map $@.map,fhx fwidth 32 pwidth 32 swidth 32 - -############################################################################## - -mkid: - mkid \#?.(c|h|asm|i) include/\#?.(c|h|asm|i) include/sys/\#?.(c|h|asm|i) - -update: - mkid -v -u diff --git a/test_programs/sprintf_test.c b/test_programs/sprintf_test.c deleted file mode 100644 index 40e92a1..0000000 --- a/test_programs/sprintf_test.c +++ /dev/null @@ -1,25 +0,0 @@ -#include -#include - -static char buf[256]; - -void addsomething(void) -{ - char *p = &buf[strlen(buf)]; - sprintf(p, "yeah"); -} - -int main(void) -{ - buf[0] = '\0'; - - addsomething(); - printf("1: [%s]\n", buf); - - sprintf(buf, ""); - - addsomething(); - printf("2: [%s]\n", buf); - - return (0); -} diff --git a/test_programs/sscanf_test.c b/test_programs/sscanf_test.c deleted file mode 100644 index 39ff61d..0000000 --- a/test_programs/sscanf_test.c +++ /dev/null @@ -1,108 +0,0 @@ -#include -#include - -int -main(void) -{ - int first, second, third, num; - int n,a,b,c; - char str[4]; - - num = sscanf("day-month-year", "%d-%d-%d", &first, &second, &third); - - printf("%s:%d:",__FILE__,__LINE__);printf("%d %d %d %d\n", num, first, second, third); - - num = sscanf("8-11-2004", "%d-%d-%d", &first, &second, &third); - - printf("%s:%d:",__FILE__,__LINE__);printf("%d %d %d %d\n", num, first, second, third); - - num = sscanf("", "%d-%d-%d", &first, &second, &third); - - printf("%s:%d:",__FILE__,__LINE__);printf("%d %d %d %d\n", num, first, second, third); - - num = sscanf("6", "%d %d", &first, &second); - - printf("%s:%d:",__FILE__,__LINE__);printf("%d %d\n", num, first); - - a = b = c = 0; - n = sscanf("","%*d,%d,%d",&a,&b,&c); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, a = %d, b = %d, c = %d\n",n,a,b,c); - - a = b = c = 0; - n = sscanf("1,2,3","%*d,%d,%d",&a,&b,&c); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, a = %d, b = %d, c = %d\n",n,a,b,c); - - a = b = c = 0; - n = sscanf("1,2","%*d,%d,%d",&a,&b,&c); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, a = %d, b = %d, c = %d\n",n,a,b,c); - - a = b = c = 0; - n = sscanf("asdf","*d,d,d",&a,&b,&c); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, a = %d, b = %d, c = %d\n",n,a,b,c); - - memset(str,0,sizeof(str)); - n = sscanf("asdf","%[abc]",str); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, str = '%s'\n",n,str); - - memset(str,0,sizeof(str)); - n = sscanf("asdbbfc","%[abc]",str); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, str = '%s'\n",n,str); - - memset(str,0,sizeof(str)); - n = sscanf("","%[abc]",str); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, str = '%s'\n",n,str); - - memset(str,0,sizeof(str)); - n = sscanf("abcdef","%[abc]",str); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, str = '%s'\n",n,str); - - a = b = c = 0; - n = sscanf("-","%d",&a); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, a = %d\n",n,a); - - a = b = c = 0; - n = sscanf("-4,-","%d,%d",&a,&b); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, a = %d, b = %d\n",n,a,b); - - memset(str,0,sizeof(str)); - n = sscanf("1 abc","%d %4c",&a,str); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, a = %d, str = '%s'\n",n,a,str); - - memset(str,0,sizeof(str)); - n = sscanf("abc","%4c",&a,str); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, str = '%s'\n",n,str); - - a = 0; - n = sscanf("17","%i",&a); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, a = %d\n",n,a); - - a = 0; - n = sscanf("017","%i",&a); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, a = %d\n",n,a); - - a = 0; - n = sscanf("0x17","%i",&a); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, a = %d\n",n,a); - - a = 0; - n = sscanf("0x017","%i",&a); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, a = %d\n",n,a); - - a = 0; - n = sscanf("0x017","%x",&a); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, a = %d\n",n,a); - - a = 0; - n = sscanf("0017","%x",&a); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, a = %d\n",n,a); - - a = 0; - n = sscanf("0x80000000","%i",&a); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, a = %u\n",n,a); - - memset(str,0,sizeof(str)); - n = sscanf("1,e","%*d,%[abc]",str); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, str = '%s'\n",n,str); - - return(0); -} diff --git a/test_programs/stack_extension_test.c b/test_programs/stack_extension_test.c deleted file mode 100644 index 589dbb2..0000000 --- a/test_programs/stack_extension_test.c +++ /dev/null @@ -1,31 +0,0 @@ -/* gcc -mstackextend -o stack_extension_test stack_extension_test.c */ - -#include -#include - -void -recursive_function(char *data,int data_size,int level) -{ - char local_data[10000]; - char line[10]; - int c; - - data_size += sizeof(local_data); - level++; - - printf("recursion level=%d, size=%d; continue? ",level,data_size); - - fgets(line,sizeof(line),stdin); - c = toupper(line[0]); - - if(c == 'Y') - recursive_function(local_data,data_size,level); -} - -int -main(int argc,char ** argv) -{ - recursive_function(NULL,0,0); - - return(0); -} diff --git a/test_programs/stack_size_test.c b/test_programs/stack_size_test.c deleted file mode 100644 index eac5df5..0000000 --- a/test_programs/stack_size_test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include - -int __stack_size = 60000; - -int -main(void) -{ - int first, second, num; - - num = sscanf("6", "%d %d", &first, &second); - - printf("%d %d\n", num, first); - - return(0); -} diff --git a/test_programs/strtok_test.c b/test_programs/strtok_test.c deleted file mode 100644 index e684a34..0000000 --- a/test_programs/strtok_test.c +++ /dev/null @@ -1,35 +0,0 @@ -/* - * $Id: strtok_test.c,v 1.1 2004-10-25 19:50:33 obarthel Exp $ - * - * :ts=4 - */ - -/****************************************************************************/ - -#include -#include - -/****************************************************************************/ - -int -main(int argc,char ** argv) -{ - char test[256]; - char * one; - char * two; - char * three; - - strcpy(test," one two three"); - - strtok(test," "); - - one = strtok(NULL," "); - two = strtok(NULL," "); - three = strtok(NULL," "); - - printf("one = %p '%s'\n",one,one); - printf("two = %p '%s'\n",two,two); - printf("three = %p '%s'\n",three,three); - - return(0); -} diff --git a/test_programs/test.c b/test_programs/test.c deleted file mode 100644 index 74e3594..0000000 --- a/test_programs/test.c +++ /dev/null @@ -1,277 +0,0 @@ -/* - * $Id: test.c,v 1.4 2005-01-30 10:23:26 obarthel Exp $ - * - * :ts=4 - */ - -/****************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include - -/****************************************************************************/ - -/*int __stack_size = 20000;*/ - -/****************************************************************************/ - -#if defined(__GNUC__) - -void __attribute__ ((constructor)) -constructor_test1(void) -{ - fprintf(stderr,"constructor #1 called\n"); -} - -void __attribute__ ((constructor)) -constructor_test2(void) -{ - fprintf(stderr,"constructor #2 called\n"); -} - -void __attribute__ ((destructor)) -destructor_test1(void) -{ - fprintf(stderr,"destructor #1 called\n"); -} - -void __attribute__ ((destructor)) -destructor_test2(void) -{ - fprintf(stderr,"destructor #2 called\n"); -} - -void __attribute__ ((destructor)) -destructor_test3(void) -{ - fprintf(stderr,"destructor #3 called\n"); -} - -#endif /* __GNUC__ */ - -/****************************************************************************/ - -int foo = 3; -int bar = 9; - -/****************************************************************************/ - -#if 1 -int -main(int argc,char ** argv) -{ - struct timeval tv; - time_t now; - struct tm tm; - int i,j,k; - long n,r; - char time_buffer[100]; - - for(i = 0 ; i < argc ; i++) - printf("%2d) \"%s\"\n",i,argv[i]); - - printf("div %d mod %d\n",foo / 2,bar % 4); - - time(&now); - printf("%s",ctime(&now)); - - tm = (*localtime(&now)); - strftime(time_buffer,sizeof(time_buffer),"%c",&tm); - printf("local time = %s\n",time_buffer); - - tm = (*gmtime(&now)); - strftime(time_buffer,sizeof(time_buffer),"%c",&tm); - printf("gmt = %s\n",time_buffer); - - tm = (*gmtime(&now)); - strftime(time_buffer,sizeof(time_buffer),"%c %U %W %j",&tm); - printf("%s\n",time_buffer); - - tm.tm_year = 105; - tm.tm_mon = 0; - tm.tm_mday = 25; - tm.tm_hour = 12; - tm.tm_min = 3; - tm.tm_sec = 53; - tm.tm_isdst = -1; - - now = mktime(&tm); - - tm = (*localtime(&now)); - strftime(time_buffer,sizeof(time_buffer),"%c",&tm); - printf("2005-01-25 12:03:53 -> local time = %s\n",time_buffer); - - tm = (*gmtime(&now)); - strftime(time_buffer,sizeof(time_buffer),"%c",&tm); - printf("2005-01-25 12:03:53 -> gmt = %s\n",time_buffer); - - #if defined(IEEE_FLOATING_POINT_SUPPORT) || defined(M68881_FLOATING_POINT_SUPPORT) - { - const double pi = 3.14159265358979323846; - const double ten = 10.0; - const double quarter = 0.25; - const double thousand = 1000.0; - const double foo = 4 * atan((double)1); - float f1; - double d1; - - printf("pi=%3.1f (float)\n",pi); - printf("pi=%.21e (exponential)\n",pi); - printf("pi=%g (float/exponential)\n",pi); - - printf("ten=%f (float)\n",ten); - printf("ten=%.21e (exponential)\n",ten); - printf("ten=%g (float/exponential)\n",ten); - - printf("thousand=%f (float)\n",thousand); - printf("thousand=%.21e (exponential)\n",thousand); - printf("thousand=%g (float/exponential)\n",thousand); - - printf("quarter=%f (float)\n",quarter); - printf("quarter=%.21e (exponential)\n",quarter); - printf("quarter=%g (float/exponential)\n",quarter); - - printf("foo=%f (float)\n",foo); - printf("foo=%.21e (exponential)\n",foo); - printf("foo=%g (float/exponential)\n",foo); - - printf("32 bit float = %f\n",4294967295.0); - printf("32+1 bit float = %f\n",-4294967295.0); - printf("big float on the edge = %f\n",4294967296.0); - printf("big float = %f\n",429496729654321.0); - printf("small float = %f\n",-429496729654321.0); - - f1 = d1 = 9; - - r = sscanf("13.24 1.324","%f %lf",&f1,&d1); - printf("r = %ld, f1 = %f, d1 = %f\n",r,f1,d1); - } - #endif - - #ifndef NDEBUG - { - char * allocation; - - allocation = malloc(4); - if(allocation != NULL) - { - strcpy(allocation,"....FOO"); - strcpy(allocation-3,"bar"); - } - } - #endif /* NDEBUG */ - - printf("hex 0x%08x\n",1); - printf("hex 0x%08x\n",1); - printf("hex 0x%08x\n",2); - printf("big int %d\n",0x80000000L); - printf("converted big int %d\n",atoi("-2147483648")); - - r = sscanf("1324","%lx",&n); - printf("r = %ld, n = %ld\n",r,n); - - r = sscanf("1234567890","%4d%3d%3d",&i,&j,&k); - printf("r = %ld, i = %d, j = %d, k = %d\n",r,i,j,k); - - /*#if defined(IEEE_FLOATING_POINT_SUPPORT) || defined(M68881_FLOATING_POINT_SUPPORT) - { - const char *arg = "100x100"; - float xres = 0, yres = 0; - - printf("%d: ", sscanf(arg, "%fx%f", &xres, &yres)); - printf("%.02fx%.02f\n", xres, yres); - } - #endif*/ - - gettimeofday(&tv,0); - printf("time = %d.%06d\n",tv.tv_sec,tv.tv_usec); - - if(argc > 1) - { - DIR * dir; - - dir = opendir(argv[1]); - if(dir != NULL) - { - struct dirent *d; - struct stat st; - - chdir(argv[1]); - - while((d = readdir(dir)) != NULL) - { - if(stat(d->d_name,&st) == 0) - printf("%s%s\n",d->d_name,S_ISDIR(st.st_mode) ? " (dir)" : ""); - } - - closedir(dir); - } - } - - return(0); -} -#endif - -/****************************************************************************/ - -#if 0 - -#define LINEBUFLENGTH 180 - -#define STRIP_LF(str) (str[strlen(str)-1]=0) -void invert_str(char * in) -{ -char t; -while(t=*in) - { - *in++=~t; - } -} - -int main(int i, char *c[]) -{ -char dest_fname[80], in_linebuffer[LINEBUFLENGTH]; -FILE * fileout, * filein; - -if(i>1) - { - sprintf(dest_fname, "%s.c", c[1]); - - fileout=fopen(dest_fname, "w"); - filein =fopen(c[1], "r"); - - if(fileout && filein) - { - fgets(in_linebuffer, LINEBUFLENGTH, filein); - STRIP_LF(in_linebuffer); - invert_str(in_linebuffer); - fputs("char *s_leading=\"", fileout); - fputs(in_linebuffer, fileout); - fputs("\";\n", fileout); - - fputs("char *s_messages[]={\n", fileout); - - while(fgets(in_linebuffer, LINEBUFLENGTH, filein)) - { - STRIP_LF(in_linebuffer); - invert_str(in_linebuffer); - - fputs("\"", fileout); - fputs(in_linebuffer, fileout); - fputs("\",\n", fileout); - } - fputs("};\n", fileout); - fputs("unsigned s_mess_num = sizeof(s_messages)/sizeof(char *);\n", fileout); - fclose(filein); - fclose(fileout); - } - } -return 0; -} - -#endif diff --git a/test_programs/translate_test.c b/test_programs/translate_test.c deleted file mode 100644 index 9bf7c7e..0000000 --- a/test_programs/translate_test.c +++ /dev/null @@ -1,39 +0,0 @@ -/* - * $Id: translate_test.c,v 1.1.1.1 2004-07-26 16:36:08 obarthel Exp $ - * - * :ts=4 - */ - -#include -#include -#include -#include - -extern char __current_path_name[]; - -int -main(int argc,char ** argv) -{ - struct name_translation_info nti; - char * name; - int error; - int i; - - /*strcpy(__current_path_name,"/absolute_path_name/whatever");*/ - - for(i = 1 ; i < argc ; i++) - { - name = argv[i]; - - printf("'%s' -> ",name); - - error = __translate_unix_to_amiga_path_name(&name,&nti); - /*error = __translate_amiga_to_unix_path_name(&name,&nti);*/ - if(error == 0) - printf("'%s'\n",name); - else - printf("%s\n",strerror(error)); - } - - return(0); -} diff --git a/test_programs/uname.c b/test_programs/uname.c deleted file mode 100644 index 2b72438..0000000 --- a/test_programs/uname.c +++ /dev/null @@ -1,56 +0,0 @@ -/* - * $Id: uname.c,v 1.2 2005-03-03 15:12:18 obarthel Exp $ - * - * :ts=4 - */ - -/****************************************************************************/ - -#include -#include -#include -#include - -int main(int cnt,char *arg[]) -{ -struct utsname uinfo; -int Ret=EXIT_SUCCESS; - -if(cnt>1 && (!strcmp(arg[1],"-h") || !strcmp(arg[1],"--help"))) { - printf( - " -a\tPrint all information.\n" - " -m\tPrint the machine type.\n" - " -n\tPrint the node (host) name.\n" - " -r\tPrint the OS release.\n" - " -s\tPrint the OS name.\n" - " -v\tPrint the OS version.\n\n" - " -h or --help displays this message.\n\n" - ); -} else { - if(!uname(&uinfo)) { - if(cnt<2 || !strcmp(arg[1],"-s")) { - printf("%s\n",uinfo.sysname); - } else if(!strcmp(arg[1],"-a")) { - printf("%s %s %s %s %s\n",uinfo.sysname,uinfo.version,uinfo.release,uinfo.nodename,uinfo.machine); - } else if(!strcmp(arg[1],"-m")) { - printf("%s\n",uinfo.machine); - } else if(!strcmp(arg[1],"-n")) { - printf("%s\n",uinfo.nodename); - } else if(!strcmp(arg[1],"-r")) { - printf("%s\n",uinfo.release); - } else if(!strcmp(arg[1],"-v")) { - printf("%s\n",uinfo.version); - } else { - printf("Unknown option \"%s\"!\nTry -h or --help.\n",arg[1]); - Ret=EXIT_FAILURE; - } - } else { - printf("Unknown error!\n"); - } -} - -return(Ret); -} - -/* vi:set ts=3: */ -