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 0654597..0000000 --- a/documentation/README.html +++ /dev/null @@ -1,517 +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. The library was subsequently updated to offer functionality defined in -ISO/IEC 9899:1999, also known as C99.

- -

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.

- -

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 it 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. 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 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 [at] 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 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 a -GNUmakefile.68k for the 68k platform and a GNUmakefile.os4 for the AmigaOS4 -PowerPC version.

- -

5.1 Floating point math and functions (scanf(), printf(), etc.)

- -

The plain libc.a, which your software would be linked against by default, does not contain -any floating point support code. This means, for example, that printf("%f",...) will not produce -the desired output and that scanf("%f",...) may not read any data at all. If your -program needs functions such as these or atod() then you must link against libm.a or -the equivalent.

- -

To link the floating point support code with your software, use the -lm compiler option. Careful! -The order in which you specify the libraries to link against is important here. Thus, gcc -o test test.c -lm -lc -would correctly link the program test against the proper floating point math library, but -gcc -o test test.c -lc -lm would not.

- -

5.2 The thread-safe library

- -

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.

- -

The library code is supposed to be thread-safe if built with the __THREAD_SAFE -preprocesssor symbol 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 problematic because the -underlying bsdsocket.library 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 -__can_share_socket_library_base will be set to a non-zero value.

- -

Errors reported by the socket I/O functions which modify the global variables -errno and h_errno may be directed to call the __set_errno() -and __set_h_errno() functions instead, if the TCP/IP stack supports this feature. The global -variable __thread_safe_errno_h_errno will be set to a non-zero value if it does.

- -

A much more serious problem resides with the exit(), abort(), -assert() and raise() functions, and how the SIGINT signal is -processed. In the thread-safe library only the main() function may directly -or indirectly call the exit() 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 exit() will clean up after all memory allocations -and files currently in use. Functions such as abort() and raise() may -call the exit() function indirectly. And the raise() function may -be invoked as part of the Control+C checking. You should make sure that the -signal handling does not affect any child processes. This can be done by replacing the -__check_abort() function or by disabling SIGINT processing altogether, -such as through a signal(SIGINT,SIG_IGN) call.

- -

Also take care with file I/O involving the stdin/stdout/stderr -streams; read/write operations on these streams will be mapped to the Input()/Output()/ErrorOutput() -file handles of the process performing these operations. Since only this small set of -operations is mapped, functions such as fcntl() or select() will not -work on the stdin/stdout/stderr streams and the corresponding -file descriptors STDIN_FILENO/STDOUT_FILENO/STDERR_FILENO. -It is therefore strongly recommended to use the thread-safe library only for applications -which can cope with the limitations described above.

- -

5.3 Using gmon (PowerPC only)

- -

To use profiling, two steps are required. First of all, your program must be compiled with -the gcc command line option -pg. This instructs the compiler to generate special -profiling code in the prologue and epilogue of each function. Additionally, the program -must be linked with libprofile.a. To do this, either manually add --lprofile 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 lib:): -

-lib:
---start-group -lc --end-group
-
-You will have to modify this to look like this: -
-lib:
-%{pg: -lprofile} --start-group -lc --end-group
-
-

Normally, the specs file is located at the compilers installation directory. For cross-compilers, -this is /usr/local/amiga/lib/gcc/ppc-amigaos/compiler-version/specs. For a native compiler, -it's in gcc:lib/gcc/ppc-amigaos/compiler-version/specs. Most likely, your compiler will already have this added to it's specs file.

- -

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 603e, and -embedded versions of the PowerPC like the 405 and 440 series. Consult the manual -of the appropriate chip for more information.

- -

5.4 Implementation defined behaviour

- -

5.4.1. 'C' language

- -
5.4.1.1. Environment
- -

The main(int argc,char **argv); function may be called with an argc value of 0, -in which case the argv variable will contain a pointer to the Amiga Workbench startup -message, which is of type struct WBStartup *, and is defined in the Amiga system header -file <workbench/startup.h>.

- -
5.4.1.2. Characters
- -

The current locale is derived from the current Amiga operating system locale settings. The -setlocale("") function call will choose the current Amiga operating system locale settings. -Any other name passed to the setlocale() function, with the exception of "C", -which selects the 'C' locale, must be a locale name, as used by the Amiga operating system -function OpenLocale() in locale.library.

- -
5.4.1.3. Floating-point
- -

The 68k version of clib2 supports single and double precision floating point numbers, -according to the IEEE 754 standard. The software floating point number support is built upon the Amiga -operating system libraries mathieeesingbas.library, mathieeedoubbas.library -and mathieeedoubtrans.library. The hardware floating point number support uses -the M68881/M68882/M68040/M68060 floating point unit intead.

- -

The PowerPC version of clib2 supports only double precision floating point numbers, according to -the IEEE 754 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 C99 -data type long double is identical to the double data type. Because there is no -difference between these two, the library omits support for C99 functions specifically designed -to operate on long double data types, such as rintl().

- -

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 sqrt(). These functions come from -Sun Microsystems fdlibm 5.3 library.

- -

Unless your software is linked against libm.a 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 -lm -lc to the linker command line.

- -

The exception handling is currently entirely out of control of the developer -and solely subject to the rules imposed by the operating system itself.

- -

The fmod() function returns the value of the x parameter and -sets errno to EDOM if the y parameter value is 0.

- -

5.4.2. Library functions

- -
5.4.2.1. NULL
- -

The NULL pointer constant is defined in the <stddef.h> header and -will expand to ((void *)0L) if the 'C' compiler is used. For a C++ compiler the constant -will expand to 0L instead.

- -
5.4.2.2. assert() diagnostic messages
- -

The diagnostic messages printed by the assert() function take the following form:

- -
[program name] file:line: failed assertion "condition".
- -

where:

- - - - - -
program nameOptional program name; if the program name is not yet known, then the -entire text enclosed in square brackets will be omitted.
fileThe value of the __FILE__ symbol at the location of the assert() call.
lineThe value of the __LINE__ symbol at the location of the assert() call.
conditionThe condition passed to the assert() function.
- -

If available, the diagnostic messages will be sent to stderr.

- -

If the program was launched from Workbench or if the global variable __no_standard_io 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:

- -
Assertion of condition "condition" failed in file "file", line line.
- -

The name of the program, if it is know at that time, will be displayed in the requester window title.

- -
5.4.2.3. Signal handling
- -

Only the minimum of required signals are supported by this library. These are SIGABRT, SIGFPE, -SIGILL, SIGINT, SIGSEGV and SIGTERM.

- -

As of this writing SIGFPE is never called by the floating point library functions.

- -

The Ctrl+C event is translated into SIGINT. 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 Ctrl+C event unless special code -is added which tests for the presence of the signal and calls the __check_abort() all on its own.

- -

Processing of the Ctrl+C event involves the internal __check_abort() function which -polls for the presence of the event and which will call raise(SIGINT);. The __check_abort() -function may be replaced by user code.

- -
5.4.2.4. Files
- -

No new line characters are written unless specifically requested.

- -

Space characters in a text stream before a new line character are read in and not discarded.

- -

When data is read from a file, the last character does not have to be a new line character.

- -

No NUL byte will be appended to data written to a binary stream.

- -

There is no difference between text and binary streams.

- -

Writing to a text or binary stream does not truncate the associated file. A stream may be -truncated by the initial fopen() call if the mode parameter starts with -the letter w.

- -

The file position indicator is initially set to the end of an append mode stream.

- -
5.4.2.5. printf() family
- -

The %p conversion is the hexadecimal representation of the pointer, and -it is preceded by the string 0x.

- -

The %a, %e, %f, %g, %A, -%E, %F and %G specifiers will produce the string inf -for infinity.

- -
5.4.2.6. scanf() family
- -

The input for the %p conversion must be a hexadecimal number, -preceded by either the string 0x or 0X.

- -

In the %[ conversion a - (dash) character that is neither the -first nor the last character in the scanset indicates that a subrange of -characters should be used. Thus %[a-d] is equivalent to %[abcd].

- -

The period (.) is the decimal-point character. The locale specific decimal-point -character is accepted as an alternative to the period (.).

- -
5.4.2.7. malloc(), realloc() and calloc()
- -

In the standard libc.a implementation any request to allocate -0 (zero) bytes will fail. A result value of NULL will be returned and -the global errno variable will be set to EINVAL.

- -

In the libunix.a 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.

- -
5.4.2.8. rename()
- -

In the standard libc.a implementation the rename() function -will fail if there already is a file or directory by the new name to be used.

- -

In the libunix.a implementation the rename() function will -delete any existing file or directory by the new name.

- -
5.4.2.9. remove()
- -

In the standard libc.a implementation the remove() function -will fail if the file is protected by deletion or currently in use.

- -

In the libunix.a implementation the remove() function -will remove the file when the program exits or the file is closed.

- -
5.4.2.10. abort()
- -

The abort() function will flush all buffered files, -close all the files currently open and delete temporary files.

- -
5.4.2.11. exit() and _Exit()
- -

The value passed to the exit() function will be passed to the -Amiga operating system. The value of EXIT_FAILURE is equivalent -to RETURN_FAIL as defined in the Amiga system header file -<dos/dos.h>; this value maps to the number 20. The value -of EXIT_SUCCESS is equivalent to RETURN_OK as defined in -the Amiga system header file <dos/dos.h>; this value maps to -the number 0.

- -

The _Exit() function will flush all buffered files, -close all the files currently open and delete temporary files.

- -
5.4.2.12. getenv()
- -

Environment data is retrieved from the global Amiga operating system environment -storage area through the dos.library/GetEnv() function. Global variables are -stored in files in the ENV: directory.

- -
5.4.2.13. system()
- -

If the command parameter is not NULL and the system() 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 dos.library/System(). -A return value of 0 typically indicates successful execution and a value > 0 -typically indicates failure.

- -
5.4.2.14. Time
- -

The default time zone is derived from the Amiga operating system locale -settings and takes the form GMT+hh or GMT-hh, -respectively, in which hh stands for the difference between the local -time zone and Greenwich Mean Time.

- -

The clock_t and time_t types are unsigned 32 bit integers. -The time_t epoch starts with midnight January 1st, 1970.

- -

Daylight savings time is not supported.

- -

The reference point used by the clock() function is the time -when the program was started.

- -

5.4.3. Locale specific behaviour

- -

The direction of printing is from left to right.

- -

The period (.) is the decimal-point character.

- -

The strftime() behaviour follows the Amiga operating system locale -settings. If the 'C' locale is in effect, then the output generated by the -%Z takes the form GMT+hh or GMT-hh, -respectively, in which hh stands for the difference between the local -time zone and Greenwich Mean Time.

- -

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().

- -

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.

- - -

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.

- -

It is recommended to browse the contents of the include directory. The -header files contain information on library behaviour and not just data type and -function prototype definitions. Specifically, the <dos.h> header file -contains documentation about special libraries and global variables which may be -used or replaced by user code.

- - -

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 [at] sourcery.han.de

- - diff --git a/documentation/specs b/documentation/specs deleted file mode 100644 index 6bafdb4..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} - -*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*} - }}}}}} - diff --git a/test_programs/GNUmakefile.68k b/test_programs/GNUmakefile.68k deleted file mode 100644 index 130dc2d..0000000 --- a/test_programs/GNUmakefile.68k +++ /dev/null @@ -1,136 +0,0 @@ -# -# $Id: GNUmakefile.68k,v 1.11 2006-04-05 06:35:42 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 -fwritable-strings -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 = -ggdb - -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 \ - fstat_stdout_test simple_sprintf date_test sscanf_64 factorial \ - setlocale - -clean: - $(DELETE) #?.o #?.map test fgets_test iotest sscanf_test printf_test \ - sprintf_test stack_size_test translate_test strtok_test uname \ - simple fstat_stdout_test simple_sprintf date_test sscanf_64 \ - factorial setlocale - -############################################################################## - -setlocale : setlocale.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ setlocale.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -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 - -fstat_stdout_test : fstat_stdout_test.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ fstat_stdout_test.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -simple_sprintf : simple_sprintf.o - @echo "Linking $@" - $(CC) -nostdlib $(CFLAGS) -o $@ simple_sprintf.o -lc -Wl,--cref,-M,-Map=$@.map - -date_test : date_test.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ date_test.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -sscanf_64 : sscanf_64.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ sscanf_64.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -factorial : factorial.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ factorial.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 cd766a6..0000000 --- a/test_programs/GNUmakefile.os4 +++ /dev/null @@ -1,120 +0,0 @@ -# -# $Id: GNUmakefile.os4,v 1.12 2006-04-05 06:35:42 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$(V)/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 -DNO_INLINE_STDARG -fno-builtin -#OPTIMIZE = -O -#OPTIMIZE = -O2 -fomit-frame-pointer -DEBUG = -ggdb - -CFLAGS = $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(CODE_TYPE) $(INCLUDE) $(LIB) - -############################################################################## - -LIBS = -lm -lc -ldebug -lgcc - -############################################################################## - -all: test fgets_test iotest sscanf_test printf_test sprintf_test \ - stack_size_test translate_test strtok_test uname simple \ - fstat_stdout_test simple_sprintf date_test sscanf_64 \ - factorial setlocale - -clean: - $(DELETE) *.o *.map test fgets_test iotest sscanf_test printf_test \ - sprintf_test stack_size_test translate_test strtok_test \ - uname simple fstat_stdout_test simple_sprintf date_test \ - sscanf_64 factorial setlocale - -############################################################################## - -setlocale : setlocale.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ setlocale.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -test : test.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ test.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -date_test : date_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 - -fstat_stdout_test : fstat_stdout_test.o - @echo "Linking $@" - $(CC) $(CFLAGS) -o $@ fstat_stdout_test.o $(LIBS) -Wl,--cref,-M,-Map=$@.map - -simple_sprintf : simple_sprintf.o - @echo "Linking $@" - $(CC) -nostdlib $(CFLAGS) -o $@ simple_sprintf.o -lc -lgcc -Wl,--cref,-M,-Map=$@.map - -sscanf_64 : sscanf_64.o - @echo "Linking $@" - $(CC) -nostdlib $(CFLAGS) -o $@ sscanf_64.o -lc -lgcc -Wl,--cref,-M,-Map=$@.map - -factorial : factorial.o - @echo "Linking $@" - $(CC) -nostdlib $(CFLAGS) -o $@ factorial.o -lc -lgcc -Wl,--cref,-M,-Map=$@.map diff --git a/test_programs/README b/test_programs/README deleted file mode 100644 index 4010fde..0000000 --- a/test_programs/README +++ /dev/null @@ -1,4 +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. 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/date_test.c b/test_programs/date_test.c deleted file mode 100755 index a538daf..0000000 --- a/test_programs/date_test.c +++ /dev/null @@ -1,22 +0,0 @@ -#include -#include -#include - -int -main(void) -{ - time_t tm; - struct tm *ptr; - char str[60]; - - setlocale(LC_ALL, "C"); - - tm = time(NULL); - ptr = localtime(&tm); - - strftime(str, sizeof(str), "%x\n", ptr); - - printf(str); - - return 0; -} diff --git a/test_programs/factorial.c b/test_programs/factorial.c deleted file mode 100644 index 1751f45..0000000 --- a/test_programs/factorial.c +++ /dev/null @@ -1,25 +0,0 @@ -#include - -/* -gcc -std=c99 -mcrt=clib2 -o factorial factorial.c -lm -output is: -16! = 20922789888 <- Wrong - -gcc -std=c99 -mcrt=newlib -o factorial factorial.c -output is: -16! = 20922789888000 <- Correct -*/ - -int -main(void) -{ - double result = 1.0; - int i; - - for ( i = 2; i < 17; ++i ) - result = result * i; - - printf("16! = %.14g\n", result); - - return 0; -} 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/fstat_stdout_test.c b/test_programs/fstat_stdout_test.c deleted file mode 100644 index ae511e7..0000000 --- a/test_programs/fstat_stdout_test.c +++ /dev/null @@ -1,36 +0,0 @@ -/* - * $Id: fstat_stdout_test.c,v 1.1 2005-05-08 16:27:25 obarthel Exp $ - * - * :ts=4 - */ - -#include - -#include - -#include -#include - -/****************************************************************************/ - -int -main(int argc,char ** argv) -{ - struct stat st; - int fd; - - fd = dup(STDOUT_FILENO); - if(fd < 0) - { - perror("dup(STDOUT_FILENO)"); - return(EXIT_FAILURE); - } - - if(fstat(fd,&st) < 0) - { - perror("fstat(fd,&st)"); - return(EXIT_FAILURE); - } - - return(EXIT_SUCCESS); -} 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 072a84e..0000000 --- a/test_programs/printf_test.c +++ /dev/null @@ -1,238 +0,0 @@ -#include -#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.2a",12.678,-12.678); - print_format_float("%010.2a",12.678,-12.678); - print_format_float("% 010.2a",12.678,-12.678); - print_format_float("%+10.2A",12.678,-12.678); - print_format_float("%+010.2A",12.678,-12.678); - print_format_float("%-10.2a",12.678,-12.678); - print_format_float("%- 10.2a",12.678,-12.678); - print_format_float("%-+10.2a",12.678,-12.678); - print_format_float("%a",12.678,-12.678); - print_format_float("%10a",12.678,-12.678); - print_format_float("%10.0a",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); - - printf("\n"); - - print_format_float("%10.2g",strtod("infinity",NULL),strtod("-infinity",NULL)); - print_format_float("%010.2g",strtod("infinity",NULL),strtod("-infinity",NULL)); - print_format_float("% 010.2g",strtod("infinity",NULL),strtod("-infinity",NULL)); - print_format_float("%+10.2G",strtod("infinity",NULL),strtod("-infinity",NULL)); - print_format_float("%+010.2G",strtod("infinity",NULL),strtod("-infinity",NULL)); - print_format_float("%-10.2g",strtod("infinity",NULL),strtod("-infinity",NULL)); - print_format_float("%- 10.2g",strtod("infinity",NULL),strtod("-infinity",NULL)); - print_format_float("%-+10.2g",strtod("infinity",NULL),strtod("-infinity",NULL)); - print_format_float("%g",strtod("infinity",NULL),strtod("-infinity",NULL)); - print_format_float("%10g",strtod("infinity",NULL),strtod("-infinity",NULL)); - print_format_float("%10.0g",strtod("infinity",NULL),strtod("-infinity",NULL)); - - printf("\n"); - - print_format_float("%10.2g",strtod("nan",NULL),strtod("-nan",NULL)); - print_format_float("%010.2g",strtod("nan",NULL),strtod("-nan",NULL)); - print_format_float("% 010.2g",strtod("nan",NULL),strtod("-nan",NULL)); - print_format_float("%+10.2G",strtod("nan",NULL),strtod("-nan",NULL)); - print_format_float("%+010.2G",strtod("nan",NULL),strtod("-nan",NULL)); - print_format_float("%-10.2g",strtod("nan",NULL),strtod("-nan",NULL)); - print_format_float("%- 10.2g",strtod("nan",NULL),strtod("-nan",NULL)); - print_format_float("%-+10.2g",strtod("nan",NULL),strtod("-nan",NULL)); - print_format_float("%g",strtod("nan",NULL),strtod("-nan",NULL)); - print_format_float("%10g",strtod("nan",NULL),strtod("-nan",NULL)); - print_format_float("%10.0g",strtod("nan",NULL),strtod("-nan",NULL)); - - return(0); -} diff --git a/test_programs/setlocale.c b/test_programs/setlocale.c deleted file mode 100755 index ad98e94..0000000 --- a/test_programs/setlocale.c +++ /dev/null @@ -1,29 +0,0 @@ -#include -#include - -/* uncomment to fix corruption -#include -BOOL __open_locale = FALSE; -*/ - -int -main(void) -{ - char *loc; - time_t t; - struct tm *m; - char buf[200]; - int len; - - loc = setlocale(LC_ALL, ""); - printf("loc=%p (%s)\n", loc, loc); - - time(&t); - m = gmtime(&t); - - len = strftime(buf, sizeof(buf), "%a %b", m); - - printf("len=%d buf=%s\n", len, buf); - - 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/simple_sprintf.c b/test_programs/simple_sprintf.c deleted file mode 100644 index 9919c0f..0000000 --- a/test_programs/simple_sprintf.c +++ /dev/null @@ -1,99 +0,0 @@ -/* - * $Id: simple_sprintf.c,v 1.2 2005-05-18 07:22:52 obarthel Exp $ - * - * :ts=4 - */ - -#include - -/****************************************************************************/ - -#define __NOLIBBASE__ -#define __USE_INLINE__ -#define __NOGLOBALIFACE__ - -/****************************************************************************/ - -#include -#include - -/****************************************************************************/ - -#include -#include -#include - -/****************************************************************************/ - -struct Library * SysBase; -struct Library * DOSBase; - -/****************************************************************************/ - -#if defined(__amigaos4__) - -struct ExecIFace * IExec; -struct DOSIFace * IDOS; - -#endif /* __amigaos4__ */ - -/****************************************************************************/ - -BOOL __check_abort_enabled = FALSE; - -/****************************************************************************/ - -int _start(void); - -/****************************************************************************/ - -int -_start(void) -{ - char string[80]; - - SysBase = *(struct Library **)4; - - #if defined(__amigaos4__) - { - IExec = (struct ExecIFace *)((struct ExecBase *)SysBase)->MainInterface; - } - #endif /* __amigaos4__ */ - - DOSBase = OpenLibrary("dos.library",37); - if(DOSBase == NULL) - goto out; - - #if defined(__amigaos4__) - { - IDOS = (struct DOSIFace *)GetInterface(DOSBase, "main", 1, 0); - if(IDOS == NULL) - goto out; - } - #endif /* __amigaos4__ */ - - sprintf(string,"a %s c\n","b"); - - Write(Output(),string,(LONG)strlen(string)); - - out: - - #if defined(__amigaos4__) - { - if(IDOS != NULL) - DropInterface((struct Interface *)IDOS); - } - #endif /* __amigaos4__ */ - - if(DOSBase != NULL) - CloseLibrary(DOSBase); - - return(0); -} - -/****************************************************************************/ - -void -__check_abort(void) -{ -} diff --git a/test_programs/smakefile b/test_programs/smakefile deleted file mode 100644 index b5c7802..0000000 --- a/test_programs/smakefile +++ /dev/null @@ -1,172 +0,0 @@ -# -# $Id: smakefile,v 1.9 2006-01-02 13:11:39 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 \ - fstat_stdout_test simple_sprintf date_test factorial \ - cleanup - -clean: - -delete \#?.o \#?.map \ - test fgets_test iotest sscanf_test printf_test sprintf_test \ - stack_size_test translate_test strtok_test uname simple \ - simple_sprintf date_test factorial - -############################################################################## - -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 - -date_test: date_test.o - @echo "Linking $@" - @slink $(LIB)startup.o date_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 - -fstat_stdout_test: fstat_stdout_test.o - @echo "Linking $@" - @slink $(LIB)startup.o fstat_stdout_test.o to $@ lib $(LIB)c.lib addsym \ - map $@.map,fhx fwidth 32 pwidth 32 swidth 32 - -simple_sprintf: simple_sprintf.o - @echo "Linking $@" - @slink simple_sprintf.o to $@ lib $(LIB)c.lib addsym \ - map $@.map,fhx fwidth 32 pwidth 32 swidth 32 - -factorial: factorial.o - @echo "Linking $@" - @slink $(LIB)startup.o factorial.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_64.c b/test_programs/sscanf_64.c deleted file mode 100755 index 5addac6..0000000 --- a/test_programs/sscanf_64.c +++ /dev/null @@ -1,22 +0,0 @@ -#include - -/*extern int __debug_level;*/ - -int -main (int argc, char **argv) -{ - long long int l; - char * arg; - - /*__debug_level = 2;*/ - - if(argc > 1) - arg = argv[1]; - else - arg = "123456789012"; - - sscanf (arg, "%lld", &l); - printf ("number = %lld = 0x%llX\n", l, l); - - return(0); -} diff --git a/test_programs/sscanf_test.c b/test_programs/sscanf_test.c deleted file mode 100644 index 428fa16..0000000 --- a/test_programs/sscanf_test.c +++ /dev/null @@ -1,135 +0,0 @@ -#include -#include -#include - -int -main(void) -{ - int first, second, third, num; - int n,a,b,c; - char str[4]; - double f; - - a = 0; - n = sscanf("060206","%x",&a); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, a = %d\n",n,a); - - 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); - - n = sscanf("1","%lf",&f); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, f = '%f' (%f)\n",n,f,atof("1")); - - n = sscanf("1234.567","%lf",&f); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, f = '%f' (%f)\n",n,f,atof("1234.567")); - - n = sscanf("inf","%lf",&f); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, f = '%f' (%f)\n",n,f,atof("inf")); - - n = sscanf("infinity","%lf",&f); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, f = '%f' (%f)\n",n,f,atof("infinity")); - - n = sscanf("nan","%lf",&f); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, f = '%f' (%f)\n",n,f,atof("nan")); - - n = sscanf("nan(23)","%lf",&f); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, f = '%f' (%f)\n",n,f,atof("nan(23)")); - - n = sscanf("0xabc.defp+101","%lf",&f); - printf("%s:%d:",__FILE__,__LINE__);printf("n = %d, f = '%f' (%f)\n",n,f,atof("0xabc.defp+101")); - - 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 82d6a6b..0000000 --- a/test_programs/test.c +++ /dev/null @@ -1,282 +0,0 @@ -/* - * $Id: test.c,v 1.6 2005-08-26 12:21:51 obarthel Exp $ - * - * :ts=4 - */ - -/****************************************************************************/ - -#define __USE_INLINE__ -#include - -#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) -{ - /*DebugPrintF("__iob = 0x%08lx\n",__iob);*/ - - 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: */ -