mirror of
https://github.com/adtools/clib2.git
synced 2025-12-08 14:59:05 +00:00
Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| eca85e071b | |||
| 56b0a74c61 | |||
| d23f4318f9 | |||
| 23f70d0c53 | |||
| c6fcede4ce | |||
| 5801d000d4 | |||
| 619b64e6f4 | |||
| 5191ee5660 | |||
| 64c1175f7b | |||
| be827762de | |||
| 618299fb48 | |||
| fbc6d94840 | |||
| 5cf80326bc | |||
| e571888f4f | |||
| f519aafaca |
@ -1,13 +0,0 @@
|
||||
# The "checkoutlist" file is used to support additional version controlled
|
||||
# administrative files in $CVSROOT/CVSROOT, such as template files.
|
||||
#
|
||||
# The first entry on a line is a filename which will be checked out from
|
||||
# the corresponding RCS file in the $CVSROOT/CVSROOT directory.
|
||||
# The remainder of the line is an error message to use if the file cannot
|
||||
# be checked out.
|
||||
#
|
||||
# File format:
|
||||
#
|
||||
# [<whitespace>]<filename>[<whitespace><error message>]<end-of-line>
|
||||
#
|
||||
# comment lines begin with '#'
|
||||
@ -1,15 +0,0 @@
|
||||
# The "commitinfo" file is used to control pre-commit checks.
|
||||
# The filter on the right is invoked with the repository and a list
|
||||
# of files to check. A non-zero exit of the filter program will
|
||||
# cause the commit to be aborted.
|
||||
#
|
||||
# The first entry on a line is a regular expression which is tested
|
||||
# against the directory that the change is being committed to, relative
|
||||
# to the $CVSROOT. For the first match that is found, then the remainder
|
||||
# of the line is the name of the filter to run.
|
||||
#
|
||||
# If the repository name does not match any of the regular expressions in this
|
||||
# file, the "DEFAULT" line is used, if it is specified.
|
||||
#
|
||||
# If the name "ALL" appears as a regular expression it is always used
|
||||
# in addition to the first matching regex or "DEFAULT".
|
||||
@ -1,21 +0,0 @@
|
||||
# Set this to "no" if pserver shouldn't check system users/passwords
|
||||
#SystemAuth=no
|
||||
|
||||
# Put CVS lock files in this directory rather than directly in the repository.
|
||||
#LockDir=/var/lock/cvs
|
||||
|
||||
# Set `TopLevelAdmin' to `yes' to create a CVS directory at the top
|
||||
# level of the new working directory when using the `cvs checkout'
|
||||
# command.
|
||||
#TopLevelAdmin=no
|
||||
|
||||
# Set `LogHistory' to `all' or `TOEFWUPCGMAR' to log all transactions to the
|
||||
# history file, or a subset as needed (ie `TMAR' logs all write operations)
|
||||
#LogHistory=TOEFWUPCGMAR
|
||||
|
||||
# Set `RereadLogAfterVerify' to `always' (the default) to allow the verifymsg
|
||||
# script to change the log message. Set it to `stat' to force CVS to verify# that the file has changed before reading it (this can take up to an extra
|
||||
# second per directory being committed, so it is not recommended for large
|
||||
# repositories. Set it to `never' (the previous CVS behavior) to prevent
|
||||
# verifymsg scripts from changing the log message.
|
||||
#RereadLogAfterVerify=always
|
||||
@ -1,19 +0,0 @@
|
||||
# This file affects handling of files based on their names.
|
||||
#
|
||||
# The -m option specifies whether CVS attempts to merge files.
|
||||
#
|
||||
# The -k option specifies keyword expansion (e.g. -kb for binary).
|
||||
#
|
||||
# Format of wrapper file ($CVSROOT/CVSROOT/cvswrappers or .cvswrappers)
|
||||
#
|
||||
# wildcard [option value][option value]...
|
||||
#
|
||||
# where option is one of
|
||||
# -f from cvs filter value: path to filter
|
||||
# -t to cvs filter value: path to filter
|
||||
# -m update methodology value: MERGE or COPY
|
||||
# -k expansion mode value: b, o, kkv, &c
|
||||
#
|
||||
# and value is a single-quote delimited value.
|
||||
# For example:
|
||||
#*.gif -k 'b'
|
||||
@ -1,21 +0,0 @@
|
||||
# The "editinfo" file is used to allow verification of logging
|
||||
# information. It works best when a template (as specified in the
|
||||
# rcsinfo file) is provided for the logging procedure. Given a
|
||||
# template with locations for, a bug-id number, a list of people who
|
||||
# reviewed the code before it can be checked in, and an external
|
||||
# process to catalog the differences that were code reviewed, the
|
||||
# following test can be applied to the code:
|
||||
#
|
||||
# Making sure that the entered bug-id number is correct.
|
||||
# Validating that the code that was reviewed is indeed the code being
|
||||
# checked in (using the bug-id number or a seperate review
|
||||
# number to identify this particular code set.).
|
||||
#
|
||||
# If any of the above test failed, then the commit would be aborted.
|
||||
#
|
||||
# Actions such as mailing a copy of the report to each reviewer are
|
||||
# better handled by an entry in the loginfo file.
|
||||
#
|
||||
# One thing that should be noted is the the ALL keyword is not
|
||||
# supported. There can be only one entry that matches a given
|
||||
# repository.
|
||||
@ -1,27 +0,0 @@
|
||||
# The "loginfo" file controls where "cvs commit" log information
|
||||
# is sent. The first entry on a line is a regular expression which must match
|
||||
# the directory that the change is being made to, relative to the
|
||||
# $CVSROOT. If a match is found, then the remainder of the line is a filter
|
||||
# program that should expect log information on its standard input.
|
||||
#
|
||||
# If the repository name does not match any of the regular expressions in this
|
||||
# file, the "DEFAULT" line is used, if it is specified.
|
||||
#
|
||||
# If the name ALL appears as a regular expression it is always used
|
||||
# in addition to the first matching regex or DEFAULT.
|
||||
#
|
||||
# You may specify a format string as part of the
|
||||
# filter. The string is composed of a `%' followed
|
||||
# by a single format character, or followed by a set of format
|
||||
# characters surrounded by `{' and `}' as separators. The format
|
||||
# characters are:
|
||||
#
|
||||
# s = file name
|
||||
# V = old version number (pre-checkin)
|
||||
# v = new version number (post-checkin)
|
||||
# t = tag or branch name
|
||||
#
|
||||
# For example:
|
||||
#DEFAULT (echo ""; id; echo %s; date; cat) >> $CVSROOT/CVSROOT/commitlog
|
||||
# or
|
||||
#DEFAULT (echo ""; id; echo %{sVv}; date; cat) >> $CVSROOT/CVSROOT/commitlog
|
||||
@ -1,26 +0,0 @@
|
||||
# Three different line formats are valid:
|
||||
# key -a aliases...
|
||||
# key [options] directory
|
||||
# key [options] directory files...
|
||||
#
|
||||
# Where "options" are composed of:
|
||||
# -i prog Run "prog" on "cvs commit" from top-level of module.
|
||||
# -o prog Run "prog" on "cvs checkout" of module.
|
||||
# -e prog Run "prog" on "cvs export" of module.
|
||||
# -t prog Run "prog" on "cvs rtag" of module.
|
||||
# -u prog Run "prog" on "cvs update" of module.
|
||||
# -d dir Place module in directory "dir" instead of module name.
|
||||
# -l Top-level directory only -- do not recurse.
|
||||
#
|
||||
# NOTE: If you change any of the "Run" options above, you'll have to
|
||||
# release and re-checkout any working directories of these modules.
|
||||
#
|
||||
# And "directory" is a path to a directory relative to $CVSROOT.
|
||||
#
|
||||
# The "-a" option specifies an alias. An alias is interpreted as if
|
||||
# everything on the right of the "-a" had been typed on the command line.
|
||||
#
|
||||
# You can encode a module within a module by using the special '&'
|
||||
# character to interpose another module into the current module. This
|
||||
# can be useful for creating a module that consists of many directories
|
||||
# spread out over the entire source repository.
|
||||
@ -1,12 +0,0 @@
|
||||
# The "notify" file controls where notifications from watches set by
|
||||
# "cvs watch add" or "cvs edit" are sent. The first entry on a line is
|
||||
# a regular expression which is tested against the directory that the
|
||||
# change is being made to, relative to the $CVSROOT. If it matches,
|
||||
# then the remainder of the line is a filter program that should contain
|
||||
# one occurrence of %s for the user to notify, and information on its
|
||||
# standard input.
|
||||
#
|
||||
# "ALL" or "DEFAULT" can be used in place of the regular expression.
|
||||
#
|
||||
# For example:
|
||||
#ALL mail -s "CVS notification" %s
|
||||
@ -1,13 +0,0 @@
|
||||
# The "rcsinfo" file is used to control templates with which the editor
|
||||
# is invoked on commit and import.
|
||||
#
|
||||
# The first entry on a line is a regular expression which is tested
|
||||
# against the directory that the change is being made to, relative to the
|
||||
# $CVSROOT. For the first match that is found, then the remainder of the
|
||||
# line is the name of the file that contains the template.
|
||||
#
|
||||
# If the repository name does not match any of the regular expressions in this
|
||||
# file, the "DEFAULT" line is used, if it is specified.
|
||||
#
|
||||
# If the name "ALL" appears as a regular expression it is always used
|
||||
# in addition to the first matching regex or "DEFAULT".
|
||||
@ -1,20 +0,0 @@
|
||||
# The "taginfo" file is used to control pre-tag checks.
|
||||
# The filter on the right is invoked with the following arguments:
|
||||
#
|
||||
# $1 -- tagname
|
||||
# $2 -- operation "add" for tag, "mov" for tag -F, and "del" for tag -d
|
||||
# $3 -- repository
|
||||
# $4-> file revision [file revision ...]
|
||||
#
|
||||
# A non-zero exit of the filter program will cause the tag to be aborted.
|
||||
#
|
||||
# The first entry on a line is a regular expression which is tested
|
||||
# against the directory that the change is being committed to, relative
|
||||
# to the $CVSROOT. For the first match that is found, then the remainder
|
||||
# of the line is the name of the filter to run.
|
||||
#
|
||||
# If the repository name does not match any of the regular expressions in this
|
||||
# file, the "DEFAULT" line is used, if it is specified.
|
||||
#
|
||||
# If the name "ALL" appears as a regular expression it is always used
|
||||
# in addition to the first matching regex or "DEFAULT".
|
||||
@ -1,21 +0,0 @@
|
||||
# The "verifymsg" file is used to allow verification of logging
|
||||
# information. It works best when a template (as specified in the
|
||||
# rcsinfo file) is provided for the logging procedure. Given a
|
||||
# template with locations for, a bug-id number, a list of people who
|
||||
# reviewed the code before it can be checked in, and an external
|
||||
# process to catalog the differences that were code reviewed, the
|
||||
# following test can be applied to the code:
|
||||
#
|
||||
# Making sure that the entered bug-id number is correct.
|
||||
# Validating that the code that was reviewed is indeed the code being
|
||||
# checked in (using the bug-id number or a seperate review
|
||||
# number to identify this particular code set.).
|
||||
#
|
||||
# If any of the above test failed, then the commit would be aborted.
|
||||
#
|
||||
# Actions such as mailing a copy of the report to each reviewer are
|
||||
# better handled by an entry in the loginfo file.
|
||||
#
|
||||
# One thing that should be noted is the the ALL keyword is not
|
||||
# supported. There can be only one entry that matches a given
|
||||
# repository.
|
||||
@ -1,19 +0,0 @@
|
||||
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.
|
||||
@ -1,235 +0,0 @@
|
||||
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" 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 set is not complete, however. It
|
||||
will have to grow even further to accomodate for Samba's needs, but this is
|
||||
a good start. I specifically added hooks for integrating socket I/O at a
|
||||
later point of time.
|
||||
|
||||
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 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.
|
||||
|
||||
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.
|
||||
|
||||
|
||||
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.
|
||||
|
||||
Practically all library routines are implemented in a sort of na<6E>ve
|
||||
fashion. That is, they contain virtually no optimizations whatsoever. This
|
||||
is particularly apparent in workhorses such as memset() or memmove(). But
|
||||
then, the issue is easy testability and Amiga platform portability.
|
||||
|
||||
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.
|
||||
|
||||
If you are going to rebuild the library with SAS/C you will need to
|
||||
reassign INCLUDE: to point to the local 'include' directory or things won't
|
||||
work.
|
||||
|
||||
|
||||
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 variable names are 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'<27>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 at <http://www.opengroup.org/onlinepubs/007904975>.
|
||||
|
||||
|
||||
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
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# $Id: GNUmakefile.68k,v 1.19 2004-12-26 10:28:56 obarthel Exp $
|
||||
# $Id: GNUmakefile.68k,v 1.20 2005-01-14 09:07:16 obarthel Exp $
|
||||
#
|
||||
# :ts=8
|
||||
#
|
||||
@ -99,8 +99,10 @@ endif
|
||||
##############################################################################
|
||||
|
||||
WARNINGS = \
|
||||
-Wall -W -Wshadow -Wpointer-arith -Wsign-compare -Wmissing-prototypes \
|
||||
-Wundef -Wbad-function-cast -Wmissing-declarations -Wconversion
|
||||
-Wall -W -Wpointer-arith -Wsign-compare -Wmissing-prototypes \
|
||||
-Wundef -Wbad-function-cast -Wmissing-declarations
|
||||
|
||||
# -Wconversion -Wshadow
|
||||
|
||||
INCLUDES = -Iinclude -I. -Inetinclude
|
||||
OPTIONS = -DNDEBUG -fno-builtin
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# $Id: GNUmakefile.os4,v 1.19 2004-12-26 10:28:56 obarthel Exp $
|
||||
# $Id: GNUmakefile.os4,v 1.20 2005-01-10 00:56:15 theantony Exp $
|
||||
#
|
||||
# :ts=8
|
||||
#
|
||||
@ -15,7 +15,7 @@ NET_INCLUDE = netinclude
|
||||
CC = ppc-amigaos-gcc
|
||||
AR = ppc-amigaos-ar -q
|
||||
RANLIB = ppc-amigaos-ranlib
|
||||
COPY = cp
|
||||
COPY = cp -a
|
||||
DELETE = rm -r
|
||||
MAKEDIR = mkdir
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 185
|
||||
#define DATE "2.1.2005"
|
||||
#define VERS "amiga.lib 1.185"
|
||||
#define VSTRING "amiga.lib 1.185 (2.1.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: amiga.lib 1.185 (2.1.2005)"
|
||||
#define REVISION 186
|
||||
#define DATE "14.1.2005"
|
||||
#define VERS "amiga.lib 1.186"
|
||||
#define VSTRING "amiga.lib 1.186 (14.1.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: amiga.lib 1.186 (14.1.2005)"
|
||||
|
||||
@ -1 +1 @@
|
||||
185
|
||||
186
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: amiga_rexxvars.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
* $Id: amiga_rexxvars.c,v 1.3 2005-01-09 10:10:40 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -50,12 +50,12 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
STATIC struct Library * RexxSysBase;
|
||||
static struct Library * RexxSysBase;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#if defined(__amigaos4__)
|
||||
STATIC struct RexxSysIFace * IRexxSys;
|
||||
static struct RexxSysIFace * IRexxSys;
|
||||
#endif /* __amigaos4__ */
|
||||
|
||||
/****************************************************************************/
|
||||
@ -144,7 +144,7 @@ CheckRexxMsg(struct RexxMsg *message)
|
||||
LONG
|
||||
GetRexxVar(struct RexxMsg *message,STRPTR variable_name,STRPTR *buffer_pointer)
|
||||
{
|
||||
STATIC TEXT buffer[256];
|
||||
static UBYTE buffer[256];
|
||||
LONG result;
|
||||
|
||||
/* The following uses a function which was added to rexxsyslib.library V45.
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: amiga_setsuperattrs.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
* $Id: amiga_setsuperattrs.c,v 1.3 2005-01-09 10:10:41 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -46,7 +46,7 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
STATIC ULONG
|
||||
static ULONG
|
||||
SetSuperAttrsA(Class * cl,Object * obj,struct TagItem * tags)
|
||||
{
|
||||
ULONG result = 0;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 185
|
||||
#define DATE "2.1.2005"
|
||||
#define VERS "c.lib 1.185"
|
||||
#define VSTRING "c.lib 1.185 (2.1.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: c.lib 1.185 (2.1.2005)"
|
||||
#define REVISION 186
|
||||
#define DATE "14.1.2005"
|
||||
#define VERS "c.lib 1.186"
|
||||
#define VSTRING "c.lib 1.186 (14.1.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: c.lib 1.186 (14.1.2005)"
|
||||
|
||||
@ -1 +1 @@
|
||||
185
|
||||
186
|
||||
|
||||
@ -1,3 +1,67 @@
|
||||
c.lib 1.186 (14.1.2005)
|
||||
|
||||
- Redirecting stderr to a file no longer has the effect of showing error
|
||||
messages and assertion failure notifications as requesters. The exception
|
||||
is in redirecting stderr to NIL: which will prompt the requester use.
|
||||
|
||||
- gettimeofday() now calls GetSysTime() rather than DateStamp() to obtain
|
||||
the current system time. This resolves granularity issues since the
|
||||
DateStamp() result was only accurate by 1/50 of a second.
|
||||
|
||||
- The "ptrdiff_t" definition in <stddef.h> now defaults to type 'int' rather
|
||||
than 'long int'.
|
||||
|
||||
- The "char" limits in <limits.h> are now set up according to the current
|
||||
compiler settings, which can either default to an unsigned or
|
||||
signed definition.
|
||||
|
||||
- Changed the rules again for the use of stderr/stdout redirection when
|
||||
printing error messages. It is always safe to redirect them now and
|
||||
no requester will appear unless you specifically set the value of the
|
||||
"__no_standard_io" variable to TRUE in your program.
|
||||
|
||||
- Removed a misplaced IsInteractive() from the stdio initialization
|
||||
function. Now this could have been big trouble...
|
||||
|
||||
- Removed tests for FileHandle->fh_Type != NULL which used to precede
|
||||
all IsInterative() tests. I verified that IsInteractive() will always
|
||||
return FALSE for NIL: type file handles.
|
||||
|
||||
- Dropped the special flag variable used by the abort() function that
|
||||
tracks whether or not console output is possible. We now use the
|
||||
global "__no_standard_io" instead.
|
||||
|
||||
- Made the <ctype.h> macros more robust.
|
||||
|
||||
- Removed the "NIL:" file handle tests preceding the Open("CONSOLE:",..)
|
||||
calls. As of Kickstart 2.x and beyond these are no longer a source of
|
||||
trouble.
|
||||
|
||||
- The V37/V40 compatibility code is no longer built for the AmigaOS4
|
||||
version of the library.
|
||||
|
||||
- Switched over the last use of DeviceProc() to GetDeviceProc(), etc.
|
||||
|
||||
- open() no longer examines a file after opening it in order to figure
|
||||
out whether read/write accesses are permitted. This decision is now
|
||||
for the file system to make.
|
||||
|
||||
- Whether or not stdio console streams are blocking or non-blocking
|
||||
is now determined at initialization time. The I/O mode is restored before
|
||||
the program exits. Previously, any changes to the I/O mode would persist.
|
||||
|
||||
- Lost some more code that is not required for AmigaOS 4.x and can be
|
||||
handled conveniently through conditional compilation.
|
||||
|
||||
- close() did not reset the non-blocking file property, as it should
|
||||
have. This only worked for files which were closed anyway, but not
|
||||
for the stdio streams. Fixed.
|
||||
|
||||
- Added a missing definition to stdio_init_exit.c which is part of
|
||||
the OS4 header files, but not of the older header file distributions.
|
||||
|
||||
|
||||
|
||||
c.lib 1.185 (2.1.2005)
|
||||
|
||||
- Moved the environment variable cleanup code into a destructor function.
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: ctype_table.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
* $Id: ctype_table.c,v 1.3 2005-01-09 15:20:31 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -36,22 +36,8 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* The construction of this table is rather peculiar. The assumption is that
|
||||
the table index from which a flag value could be fetched is in the range
|
||||
-128..255 since the character to be tested could be a signed or unsigned
|
||||
8 bit value. The table access pointer (declared below) therefore points
|
||||
to the 128th byte of '__ctype_data[]'. */
|
||||
static const unsigned char __ctype_data[3 * 128] =
|
||||
const unsigned char __ctype_table[2 * 128] =
|
||||
{
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
/* 0 */ __CTYPE_CONTROL,
|
||||
/* 1 */ __CTYPE_CONTROL,
|
||||
/* 2 */ __CTYPE_CONTROL,
|
||||
@ -190,7 +176,3 @@ static const unsigned char __ctype_data[3 * 128] =
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||
};
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
const unsigned char * const __ctype_table = &__ctype_data[128];
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 185
|
||||
#define DATE "2.1.2005"
|
||||
#define VERS "debug.lib 1.185"
|
||||
#define VSTRING "debug.lib 1.185 (2.1.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: debug.lib 1.185 (2.1.2005)"
|
||||
#define REVISION 186
|
||||
#define DATE "14.1.2005"
|
||||
#define VERS "debug.lib 1.186"
|
||||
#define VSTRING "debug.lib 1.186 (14.1.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: debug.lib 1.186 (14.1.2005)"
|
||||
|
||||
@ -1 +1 @@
|
||||
185
|
||||
186
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: dirent_readdir.c,v 1.4 2005-01-02 09:07:07 obarthel Exp $
|
||||
* $Id: dirent_readdir.c,v 1.5 2005-01-09 15:58:02 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -89,7 +89,6 @@ readdir(DIR * directory_pointer)
|
||||
D_S(struct FileInfoBlock,fib);
|
||||
D_S(struct bcpl_name,bcpl_name);
|
||||
UBYTE * name = bcpl_name->name;
|
||||
struct MsgPort * port;
|
||||
BPTR dir_lock;
|
||||
|
||||
assert( (((ULONG)name) & 3) == 0 );
|
||||
@ -103,10 +102,12 @@ readdir(DIR * directory_pointer)
|
||||
{
|
||||
if(IsFileSystem(dh->dh_VolumeNode->ln_Name))
|
||||
{
|
||||
port = DeviceProc(dh->dh_VolumeNode->ln_Name);
|
||||
if(port != NULL)
|
||||
struct DevProc * dvp;
|
||||
|
||||
dvp = GetDeviceProc(dh->dh_VolumeNode->ln_Name,NULL);
|
||||
if(dvp != NULL)
|
||||
{
|
||||
dir_lock = DoPkt(port,ACTION_LOCATE_OBJECT,ZERO,MKBADDR(name),SHARED_LOCK, 0,0);
|
||||
dir_lock = DoPkt(dvp->dvp_Port,ACTION_LOCATE_OBJECT,ZERO,MKBADDR(name),SHARED_LOCK, 0,0);
|
||||
if(dir_lock != ZERO)
|
||||
{
|
||||
if(Examine(dir_lock,fib))
|
||||
@ -122,6 +123,8 @@ readdir(DIR * directory_pointer)
|
||||
|
||||
UnLock(dir_lock);
|
||||
}
|
||||
|
||||
FreeDeviceProc(dvp);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: fcntl_close.c,v 1.4 2005-01-02 09:07:07 obarthel Exp $
|
||||
* $Id: fcntl_close.c,v 1.6 2005-01-14 08:36:54 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -45,9 +45,12 @@ int
|
||||
__close(int file_descriptor,int * error_ptr)
|
||||
{
|
||||
DECLARE_UTILITYBASE();
|
||||
|
||||
struct file_hook_message message;
|
||||
struct fd * fd;
|
||||
int result = -1;
|
||||
BOOL no_close;
|
||||
BOOL is_alias;
|
||||
|
||||
ENTER();
|
||||
|
||||
@ -96,6 +99,7 @@ __close(int file_descriptor,int * error_ptr)
|
||||
}
|
||||
|
||||
no_close = TRUE;
|
||||
is_alias = TRUE;
|
||||
}
|
||||
else if (fd->fd_NextLink != NULL) /* this one has aliases attached; it is the 'original' resource */
|
||||
{
|
||||
@ -117,31 +121,36 @@ __close(int file_descriptor,int * error_ptr)
|
||||
}
|
||||
|
||||
no_close = TRUE;
|
||||
is_alias = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
no_close = FLAG_IS_SET(fd->fd_Flags,FDF_NO_CLOSE);
|
||||
is_alias = FALSE;
|
||||
}
|
||||
|
||||
(*error_ptr) = OK;
|
||||
|
||||
if(NOT no_close)
|
||||
/* Reset the console to regular buffered/unbuffered input. We don't do this
|
||||
for aliases and their like since the original stream is still in use. */
|
||||
if(NOT is_alias)
|
||||
{
|
||||
struct file_hook_message message;
|
||||
|
||||
/* Reset the console to regular buffered input. */
|
||||
if(FLAG_IS_SET(fd->fd_Flags,FDF_NON_BLOCKING))
|
||||
if((FLAG_IS_SET(fd->fd_Flags,FDF_NON_BLOCKING) && FLAG_IS_CLEAR(fd->fd_Flags,FDF_DEFAULT_NON_BLOCKING)) ||
|
||||
(FLAG_IS_CLEAR(fd->fd_Flags,FDF_NON_BLOCKING) && FLAG_IS_SET(fd->fd_Flags,FDF_DEFAULT_NON_BLOCKING)))
|
||||
{
|
||||
SHOWMSG("resetting non-blocking access mode");
|
||||
|
||||
message.action = file_hook_action_set_blocking;
|
||||
message.arg = 1;
|
||||
message.arg = FLAG_IS_SET(fd->fd_Flags,FDF_NON_BLOCKING);
|
||||
|
||||
assert( fd->fd_Hook != NULL );
|
||||
|
||||
CallHookPkt(fd->fd_Hook,fd,&message);
|
||||
}
|
||||
}
|
||||
|
||||
(*error_ptr) = OK;
|
||||
|
||||
if(NOT no_close && NOT is_alias)
|
||||
{
|
||||
SHOWMSG("shutting down");
|
||||
|
||||
message.action = file_hook_action_close;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: fcntl_open.c,v 1.4 2005-01-02 09:07:07 obarthel Exp $
|
||||
* $Id: fcntl_open.c,v 1.7 2005-01-09 16:07:27 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -53,6 +53,39 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* This is used in place of ChangeMode() in order to work around a bug in
|
||||
dos.library V40 and below: a "NIL:" file handle will crash the
|
||||
caller of the ChangeMode() function. */
|
||||
static LONG
|
||||
safe_change_mode(LONG type,BPTR file_handle,LONG mode)
|
||||
{
|
||||
LONG result = DOSFALSE;
|
||||
|
||||
#ifndef __amigaos4__
|
||||
{
|
||||
struct FileHandle * fh = (struct FileHandle *)BADDR(file_handle);
|
||||
|
||||
assert( type == CHANGE_FH );
|
||||
|
||||
if(fh == NULL || fh->fh_Type == NULL)
|
||||
{
|
||||
SetIoErr(ERROR_OBJECT_WRONG_TYPE);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
#endif /* __amigaos4__ */
|
||||
|
||||
PROFILE_OFF();
|
||||
result = ChangeMode(type,file_handle,mode);
|
||||
PROFILE_ON();
|
||||
|
||||
out:
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
int
|
||||
open(const char *path_name, int open_flag, ... /* mode_t mode */ )
|
||||
{
|
||||
@ -64,10 +97,9 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
|
||||
LONG is_file_system = FALSE;
|
||||
LONG open_mode;
|
||||
BPTR lock = ZERO;
|
||||
struct FileHandle * file_handle;
|
||||
BPTR handle = ZERO;
|
||||
BOOL create_new_file = FALSE;
|
||||
LONG is_interactive = FALSE;
|
||||
LONG is_interactive;
|
||||
int fd_slot_number;
|
||||
struct fd * fd;
|
||||
int access_mode;
|
||||
@ -294,60 +326,13 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
|
||||
goto out;
|
||||
}
|
||||
|
||||
file_handle = BADDR(handle);
|
||||
|
||||
/* NOTE: workaround for a bug in dos.library V40 and below which will
|
||||
* crash the caller if the file handle refers to "NIL:".
|
||||
*/
|
||||
if(file_handle->fh_Type != NULL)
|
||||
{
|
||||
LONG status;
|
||||
|
||||
PROFILE_OFF();
|
||||
status = ExamineFH(handle,fib);
|
||||
PROFILE_ON();
|
||||
|
||||
if(status != DOSFALSE)
|
||||
{
|
||||
BOOL operation_permitted = TRUE;
|
||||
|
||||
/* Check if the file is readable. */
|
||||
if(FLAG_IS_SET(fib->fib_Protection,FIBF_READ))
|
||||
{
|
||||
if(access_mode == O_RDONLY ||
|
||||
access_mode == O_RDWR)
|
||||
{
|
||||
operation_permitted = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check if the file can be written to. */
|
||||
if(FLAG_IS_SET(fib->fib_Protection,FIBF_WRITE))
|
||||
{
|
||||
if(access_mode == O_WRONLY)
|
||||
operation_permitted = FALSE;
|
||||
}
|
||||
|
||||
if(NOT operation_permitted)
|
||||
{
|
||||
SHOWMSG("this object must not be opened");
|
||||
|
||||
errno = EACCES;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fd = __fd[fd_slot_number];
|
||||
|
||||
__initialize_fd(fd,(HOOKFUNC)__fd_hook_entry,handle,0);
|
||||
|
||||
/* Figure out if this stream is attached to a console. */
|
||||
PROFILE_OFF();
|
||||
|
||||
if(file_handle->fh_Type != NULL)
|
||||
is_interactive = IsInteractive(handle);
|
||||
|
||||
is_interactive = IsInteractive(handle);
|
||||
PROFILE_ON();
|
||||
|
||||
if(is_interactive)
|
||||
@ -368,7 +353,7 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
|
||||
|
||||
len = 0;
|
||||
|
||||
for(i = 0 ; i < (int)strlen(path_name) ; i++)
|
||||
for(i = 0 ; path_name[i] != '\0' ; i++)
|
||||
{
|
||||
if(path_name[i] == ':')
|
||||
{
|
||||
@ -403,21 +388,11 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
|
||||
|
||||
if(is_file_system)
|
||||
{
|
||||
/* NOTE: workaround for a bug in dos.library V40 and below which will
|
||||
* crash the caller if the file handle refers to "NIL:".
|
||||
*/
|
||||
if(file_handle->fh_Type != NULL)
|
||||
{
|
||||
/* We opened the file in exclusive access mode. Switch it back
|
||||
into shared access mode so that its contents can be read
|
||||
while it's still open. */
|
||||
if(open_mode == MODE_NEWFILE)
|
||||
{
|
||||
PROFILE_OFF();
|
||||
ChangeMode(CHANGE_FH,handle,SHARED_LOCK);
|
||||
PROFILE_ON();
|
||||
}
|
||||
}
|
||||
/* We opened the file in exclusive access mode. Switch it back
|
||||
into shared access mode so that its contents can be read
|
||||
while it's still open. */
|
||||
if(open_mode == MODE_NEWFILE)
|
||||
safe_change_mode(CHANGE_FH,handle,SHARED_LOCK);
|
||||
|
||||
/* We should be able to seek in this file. */
|
||||
SET_FLAG(fd->fd_Flags,FDF_CACHE_POSITION);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: ctype.h,v 1.4 2005-01-02 09:07:21 obarthel Exp $
|
||||
* $Id: ctype.h,v 1.5 2005-01-09 15:20:33 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -66,15 +66,14 @@ extern int toupper(int c);
|
||||
/*
|
||||
* If requested, reimplement the character classification functions as macros;
|
||||
* note that the macro variants ignore the current locale and default to the
|
||||
* 'C' locale rules. Note that the characters to be tested must be either
|
||||
* signed or unsigned 8 bit values.
|
||||
* 'C' locale rules.
|
||||
*/
|
||||
|
||||
#ifdef __C_MACROS__
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern const unsigned char * const __ctype_table;
|
||||
extern const unsigned char __ctype_table[];
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
@ -89,17 +88,17 @@ extern const unsigned char * const __ctype_table;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define isalnum(c) ((__ctype_table[c] & (__CTYPE_DIGIT|__CTYPE_LOWER_CASE|__CTYPE_UPPER_CASE)) != 0)
|
||||
#define isalpha(c) ((__ctype_table[c] & (__CTYPE_LOWER_CASE|__CTYPE_UPPER_CASE)) != 0)
|
||||
#define iscntrl(c) ((__ctype_table[c] & __CTYPE_CONTROL) != 0)
|
||||
#define isdigit(c) ((__ctype_table[c] & __CTYPE_DIGIT) != 0)
|
||||
#define isxdigit(c) ((__ctype_table[c] & __CTYPE_HEX_DIGIT) != 0)
|
||||
#define isgraph(c) ((__ctype_table[c] & (__CTYPE_DIGIT|__CTYPE_PUNCTUATION|__CTYPE_LOWER_CASE|__CTYPE_UPPER_CASE)) != 0)
|
||||
#define ispunct(c) ((__ctype_table[c] & __CTYPE_PUNCTUATION) != 0)
|
||||
#define isprint(c) ((__ctype_table[c] & __CTYPE_PRINTABLE) != 0)
|
||||
#define islower(c) ((__ctype_table[c] & __CTYPE_LOWER_CASE) != 0)
|
||||
#define isupper(c) ((__ctype_table[c] & __CTYPE_UPPER_CASE) != 0)
|
||||
#define isspace(c) ((__ctype_table[c] & __CTYPE_WHITE_SPACE) != 0)
|
||||
#define isalnum(c) ((__ctype_table[(c) & 255] & (__CTYPE_DIGIT|__CTYPE_LOWER_CASE|__CTYPE_UPPER_CASE)) != 0)
|
||||
#define isalpha(c) ((__ctype_table[(c) & 255] & (__CTYPE_LOWER_CASE|__CTYPE_UPPER_CASE)) != 0)
|
||||
#define iscntrl(c) ((__ctype_table[(c) & 255] & __CTYPE_CONTROL) != 0)
|
||||
#define isdigit(c) ((__ctype_table[(c) & 255] & __CTYPE_DIGIT) != 0)
|
||||
#define isxdigit(c) ((__ctype_table[(c) & 255] & __CTYPE_HEX_DIGIT) != 0)
|
||||
#define isgraph(c) ((__ctype_table[(c) & 255] & (__CTYPE_DIGIT|__CTYPE_PUNCTUATION|__CTYPE_LOWER_CASE|__CTYPE_UPPER_CASE)) != 0)
|
||||
#define ispunct(c) ((__ctype_table[(c) & 255] & __CTYPE_PUNCTUATION) != 0)
|
||||
#define isprint(c) ((__ctype_table[(c) & 255] & __CTYPE_PRINTABLE) != 0)
|
||||
#define islower(c) ((__ctype_table[(c) & 255] & __CTYPE_LOWER_CASE) != 0)
|
||||
#define isupper(c) ((__ctype_table[(c) & 255] & __CTYPE_UPPER_CASE) != 0)
|
||||
#define isspace(c) ((__ctype_table[(c) & 255] & __CTYPE_WHITE_SPACE) != 0)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: limits.h,v 1.4 2005-01-02 09:07:21 obarthel Exp $
|
||||
* $Id: limits.h,v 1.5 2005-01-09 09:40:33 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -36,24 +36,53 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define CHAR_BIT 8
|
||||
#define CHAR_MAX 127
|
||||
#define CHAR_MIN -128
|
||||
#define INT_MAX 2147483647L
|
||||
#define INT_MIN (-2147483647L - 1)
|
||||
#define LONG_MAX 2147483647L
|
||||
#define LONG_MIN (-2147483647L - 1)
|
||||
#define SCHAR_MAX 127
|
||||
#define SCHAR_MIN -128
|
||||
#define SHRT_MAX 32767
|
||||
#define CHAR_BIT 8
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define SCHAR_MIN -128
|
||||
#define SCHAR_MAX 127
|
||||
#define UCHAR_MAX 255
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/*
|
||||
* The following defines the range a 'char' can cover by checking a
|
||||
* preprocessor symbol; we support both SAS/C and GCC here.
|
||||
*/
|
||||
|
||||
#if (defined(__GNUC__) && defined(__CHAR_UNSIGNED__)) || (defined(__SASC) && defined(_UNSCHAR))
|
||||
|
||||
#define CHAR_MIN 0
|
||||
#define CHAR_MAX 255
|
||||
|
||||
#else
|
||||
|
||||
#define CHAR_MIN -128
|
||||
#define CHAR_MAX 127
|
||||
|
||||
#endif /* (__GNUC__ && __CHAR_UNSIGNED) || (__SASC && _UNSCHAR) */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define SHRT_MIN -32768
|
||||
#define UCHAR_MAX 255
|
||||
#define UINT_MAX 4294967295UL
|
||||
#define ULONG_MAX 4294967295UL
|
||||
#define SHRT_MAX 32767
|
||||
#define USHRT_MAX 65535
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define INT_MIN (-2147483647L - 1)
|
||||
#define INT_MAX 2147483647L
|
||||
#define UINT_MAX 4294967295UL
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define LONG_MIN (-2147483647L - 1)
|
||||
#define LONG_MAX 2147483647L
|
||||
#define ULONG_MAX 4294967295UL
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* The following is not part of the ISO 'C' (1994) standard. */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: stddef.h,v 1.2 2005-01-02 09:07:21 obarthel Exp $
|
||||
* $Id: stddef.h,v 1.3 2005-01-08 10:21:28 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -52,7 +52,7 @@ extern "C" {
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
typedef long int ptrdiff_t;
|
||||
typedef int ptrdiff_t;
|
||||
typedef unsigned int size_t;
|
||||
typedef unsigned int wchar_t;
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 185
|
||||
#define DATE "2.1.2005"
|
||||
#define VERS "m.lib 1.185"
|
||||
#define VSTRING "m.lib 1.185 (2.1.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: m.lib 1.185 (2.1.2005)"
|
||||
#define REVISION 186
|
||||
#define DATE "14.1.2005"
|
||||
#define VERS "m.lib 1.186"
|
||||
#define VSTRING "m.lib 1.186 (14.1.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: m.lib 1.186 (14.1.2005)"
|
||||
|
||||
@ -1 +1 @@
|
||||
185
|
||||
186
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 185
|
||||
#define DATE "2.1.2005"
|
||||
#define VERS "m881.lib 1.185"
|
||||
#define VSTRING "m881.lib 1.185 (2.1.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: m881.lib 1.185 (2.1.2005)"
|
||||
#define REVISION 186
|
||||
#define DATE "14.1.2005"
|
||||
#define VERS "m881.lib 1.186"
|
||||
#define VSTRING "m881.lib 1.186 (14.1.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: m881.lib 1.186 (14.1.2005)"
|
||||
|
||||
@ -1 +1 @@
|
||||
185
|
||||
186
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: macros.h,v 1.4 2005-01-02 09:07:07 obarthel Exp $
|
||||
* $Id: macros.h,v 1.5 2005-01-12 09:15:50 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -64,6 +64,10 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define MILLION (1000000)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define NUM_ENTRIES(t) (sizeof(t) / sizeof(t[0]))
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 185
|
||||
#define DATE "2.1.2005"
|
||||
#define VERS "net.lib 1.185"
|
||||
#define VSTRING "net.lib 1.185 (2.1.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: net.lib 1.185 (2.1.2005)"
|
||||
#define REVISION 186
|
||||
#define DATE "14.1.2005"
|
||||
#define VERS "net.lib 1.186"
|
||||
#define VSTRING "net.lib 1.186 (14.1.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: net.lib 1.186 (14.1.2005)"
|
||||
|
||||
@ -1 +1 @@
|
||||
185
|
||||
186
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: signal_data.c,v 1.3 2005-01-02 09:07:07 obarthel Exp $
|
||||
* $Id: signal_data.c,v 1.4 2005-01-09 10:10:41 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -54,7 +54,3 @@ int __signals_blocked;
|
||||
/****************************************************************************/
|
||||
|
||||
BOOL __check_abort_enabled = TRUE;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
BOOL __termination_message_disabled;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: signal_headers.h,v 1.5 2005-01-02 09:07:07 obarthel Exp $
|
||||
* $Id: signal_headers.h,v 1.6 2005-01-09 10:10:41 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -76,10 +76,6 @@ extern int NOCOMMON __signals_blocked;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern BOOL NOCOMMON __termination_message_disabled;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifndef _STDLIB_HEADERS_H
|
||||
#include "stdlib_headers.h"
|
||||
#endif /* _STDLIB_HEADERS_H */
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: socket_init_exit.c,v 1.7 2005-01-02 09:07:08 obarthel Exp $
|
||||
* $Id: socket_init_exit.c,v 1.8 2005-01-09 10:10:41 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -244,15 +244,13 @@ __socket_init(void)
|
||||
|
||||
SHOWVALUE(daemon_socket);
|
||||
|
||||
/* Whatever happens, the following likely won't end up
|
||||
* in the console...
|
||||
*/
|
||||
__termination_message_disabled = TRUE;
|
||||
|
||||
/* Shut down the three standard I/O streams. */
|
||||
for(i = STDIN_FILENO ; i <= STDERR_FILENO ; i++)
|
||||
close(i);
|
||||
|
||||
/* The standard I/O streams are no longer attached to a console. */
|
||||
__no_standard_io = TRUE;
|
||||
|
||||
/* Put the socket into the three standard I/O streams. */
|
||||
for(i = STDIN_FILENO ; i <= STDERR_FILENO ; i++)
|
||||
{
|
||||
@ -284,9 +282,6 @@ __socket_init(void)
|
||||
|
||||
/* This program now runs as an internet superserver client (daemon). */
|
||||
__is_daemon = TRUE;
|
||||
|
||||
/* The standard I/O streams are no longer attached to a console. */
|
||||
__no_standard_io = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 185
|
||||
#define DATE "2.1.2005"
|
||||
#define VERS "stack.lib 1.185"
|
||||
#define VSTRING "stack.lib 1.185 (2.1.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: stack.lib 1.185 (2.1.2005)"
|
||||
#define REVISION 186
|
||||
#define DATE "14.1.2005"
|
||||
#define VERS "stack.lib 1.186"
|
||||
#define VSTRING "stack.lib 1.186 (14.1.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: stack.lib 1.186 (14.1.2005)"
|
||||
|
||||
@ -1 +1 @@
|
||||
185
|
||||
186
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: stdio_fdhookentry.c,v 1.5 2005-01-02 09:07:08 obarthel Exp $
|
||||
* $Id: stdio_fdhookentry.c,v 1.7 2005-01-12 09:15:50 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -59,16 +59,21 @@
|
||||
static LONG
|
||||
safe_examine_file_handle(BPTR file_handle,struct FileInfoBlock *fib)
|
||||
{
|
||||
struct FileHandle * fh = (struct FileHandle *)BADDR(file_handle);
|
||||
LONG result = DOSFALSE;
|
||||
|
||||
assert( fib != NULL );
|
||||
|
||||
if(fh == NULL || fh->fh_Type == NULL)
|
||||
#ifndef __amigaos4__
|
||||
{
|
||||
SetIoErr(ERROR_OBJECT_WRONG_TYPE);
|
||||
goto out;
|
||||
struct FileHandle * fh = (struct FileHandle *)BADDR(file_handle);
|
||||
|
||||
if(fh == NULL || fh->fh_Type == NULL)
|
||||
{
|
||||
SetIoErr(ERROR_OBJECT_WRONG_TYPE);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
#endif /* __amigaos4__ */
|
||||
|
||||
PROFILE_OFF();
|
||||
result = ExamineFH(file_handle,fib);
|
||||
@ -85,14 +90,19 @@ safe_examine_file_handle(BPTR file_handle,struct FileInfoBlock *fib)
|
||||
static BPTR
|
||||
safe_parent_of_file_handle(BPTR file_handle)
|
||||
{
|
||||
struct FileHandle * fh = (struct FileHandle *)BADDR(file_handle);
|
||||
BPTR result = ZERO;
|
||||
|
||||
if(fh == NULL || fh->fh_Type == NULL)
|
||||
#ifndef __amigaos4__
|
||||
{
|
||||
SetIoErr(ERROR_OBJECT_WRONG_TYPE);
|
||||
goto out;
|
||||
struct FileHandle * fh = (struct FileHandle *)BADDR(file_handle);
|
||||
|
||||
if(fh == NULL || fh->fh_Type == NULL)
|
||||
{
|
||||
SetIoErr(ERROR_OBJECT_WRONG_TYPE);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
#endif /* __amigaos4__ */
|
||||
|
||||
PROFILE_OFF();
|
||||
result = ParentOfFH(file_handle);
|
||||
@ -244,19 +254,27 @@ obtain_file_lock_semaphore(BOOL shared)
|
||||
|
||||
if(shared)
|
||||
{
|
||||
if(((struct Library *)SysBase)->lib_Version >= 39)
|
||||
#if defined(__amigaos4__)
|
||||
{
|
||||
ObtainSemaphoreShared((struct SignalSemaphore *)FileLockSemaphore);
|
||||
}
|
||||
else
|
||||
#else
|
||||
{
|
||||
/* Workaround for shared semaphore nesting problem. */
|
||||
if(CANNOT AttemptSemaphoreShared((struct SignalSemaphore *)FileLockSemaphore))
|
||||
if(((struct Library *)SysBase)->lib_Version >= 39)
|
||||
{
|
||||
if(CANNOT AttemptSemaphore((struct SignalSemaphore *)FileLockSemaphore))
|
||||
ObtainSemaphoreShared((struct SignalSemaphore *)FileLockSemaphore);
|
||||
ObtainSemaphoreShared((struct SignalSemaphore *)FileLockSemaphore);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Workaround for shared semaphore nesting problem. */
|
||||
if(CANNOT AttemptSemaphoreShared((struct SignalSemaphore *)FileLockSemaphore))
|
||||
{
|
||||
if(CANNOT AttemptSemaphore((struct SignalSemaphore *)FileLockSemaphore))
|
||||
ObtainSemaphoreShared((struct SignalSemaphore *)FileLockSemaphore);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* __amigaos4__ */
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1830,9 +1848,9 @@ __fd_hook_entry(
|
||||
SHOWMSG("changing the mode");
|
||||
|
||||
if(message->arg != 0)
|
||||
mode = 0; /* buffered mode */
|
||||
mode = DOSFALSE; /* buffered mode */
|
||||
else
|
||||
mode = 1; /* single character mode */
|
||||
mode = DOSTRUE; /* single character mode */
|
||||
|
||||
if(CANNOT SetMode(fd->fd_DefaultFile,mode))
|
||||
{
|
||||
@ -1885,10 +1903,8 @@ __fd_hook_entry(
|
||||
|
||||
old_current_dir = CurrentDir(parent_dir);
|
||||
|
||||
if(((struct Library *)DOSBase)->lib_Version >= 39)
|
||||
#if defined(__amigaos4__)
|
||||
{
|
||||
SHOWMSG("changing owner");
|
||||
|
||||
if(SetOwner(fib->fib_FileName,(LONG)((((ULONG)message->owner) << 16) | message->group)))
|
||||
{
|
||||
result = 0;
|
||||
@ -1900,36 +1916,55 @@ __fd_hook_entry(
|
||||
__translate_io_error_to_errno(IoErr(),&error);
|
||||
}
|
||||
}
|
||||
else
|
||||
#else
|
||||
{
|
||||
D_S(struct bcpl_name,new_name);
|
||||
struct DevProc * dvp;
|
||||
unsigned int len;
|
||||
|
||||
SHOWMSG("have to do this manually...");
|
||||
|
||||
len = strlen(fib->fib_FileName);
|
||||
|
||||
assert( len < sizeof(new_name->name) );
|
||||
|
||||
dvp = GetDeviceProc(fib->fib_FileName,NULL);
|
||||
if(dvp != NULL)
|
||||
if(((struct Library *)DOSBase)->lib_Version >= 39)
|
||||
{
|
||||
new_name->name[0] = len;
|
||||
memmove(&new_name->name[1],fib->fib_FileName,len);
|
||||
SHOWMSG("changing owner");
|
||||
|
||||
if(DoPkt(dvp->dvp_Port,ACTION_SET_OWNER,dvp->dvp_Lock,MKBADDR(new_name),(LONG)((((ULONG)message->owner) << 16) | message->group),0,0))
|
||||
if(SetOwner(fib->fib_FileName,(LONG)((((ULONG)message->owner) << 16) | message->group)))
|
||||
{
|
||||
result = 0;
|
||||
}
|
||||
else
|
||||
__translate_io_error_to_errno(IoErr(),&error);
|
||||
{
|
||||
SHOWMSG("that didn't work");
|
||||
|
||||
FreeDeviceProc(dvp);
|
||||
__translate_io_error_to_errno(IoErr(),&error);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
__translate_io_error_to_errno(IoErr(),&error);
|
||||
D_S(struct bcpl_name,new_name);
|
||||
struct DevProc * dvp;
|
||||
unsigned int len;
|
||||
|
||||
SHOWMSG("have to do this manually...");
|
||||
|
||||
len = strlen(fib->fib_FileName);
|
||||
|
||||
assert( len < sizeof(new_name->name) );
|
||||
|
||||
dvp = GetDeviceProc(fib->fib_FileName,NULL);
|
||||
if(dvp != NULL)
|
||||
{
|
||||
new_name->name[0] = len;
|
||||
memmove(&new_name->name[1],fib->fib_FileName,len);
|
||||
|
||||
if(DoPkt(dvp->dvp_Port,ACTION_SET_OWNER,dvp->dvp_Lock,MKBADDR(new_name),(LONG)((((ULONG)message->owner) << 16) | message->group),0,0))
|
||||
result = 0;
|
||||
else
|
||||
__translate_io_error_to_errno(IoErr(),&error);
|
||||
|
||||
FreeDeviceProc(dvp);
|
||||
}
|
||||
else
|
||||
{
|
||||
__translate_io_error_to_errno(IoErr(),&error);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* __amigaos4__ */
|
||||
|
||||
CurrentDir(old_current_dir);
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: stdio_headers.h,v 1.8 2005-01-02 09:07:08 obarthel Exp $
|
||||
* $Id: stdio_headers.h,v 1.9 2005-01-12 09:15:50 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -249,25 +249,27 @@ struct iob
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define FDF_READ (1UL<<0) /* Data can be read from this file */
|
||||
#define FDF_WRITE (1UL<<1) /* Data can be written to this file */
|
||||
#define FDF_APPEND (1UL<<2) /* Before any data is written to it,
|
||||
the file position must be set to the
|
||||
end of the file */
|
||||
#define FDF_NO_CLOSE (1UL<<3) /* Never close this file */
|
||||
#define FDF_NON_BLOCKING (1UL<<4) /* File was switched into non-blocking
|
||||
mode (console streams only) */
|
||||
#define FDF_IS_SOCKET (1UL<<5) /* This is not a disk file but a socket */
|
||||
#define FDF_IS_LOCKED (1UL<<6) /* This file has an advisory record lock set */
|
||||
#define FDF_IN_USE (1UL<<7) /* This file is in use */
|
||||
#define FDF_CREATED (1UL<<8) /* This file was newly created and may need
|
||||
to have its protection bits updated after
|
||||
it has been closed */
|
||||
#define FDF_CACHE_POSITION (1UL<<9) /* Cache the file position. */
|
||||
#define FDF_ASYNC_IO (1UL<<10) /* File was switched into asynchronous I/O
|
||||
mode (sockets only). */
|
||||
#define FDF_IS_INTERACTIVE (1UL<<11) /* File is attached to a console window or
|
||||
something like it. */
|
||||
#define FDF_READ (1UL<<0) /* Data can be read from this file */
|
||||
#define FDF_WRITE (1UL<<1) /* Data can be written to this file */
|
||||
#define FDF_APPEND (1UL<<2) /* Before any data is written to it,
|
||||
the file position must be set to the
|
||||
end of the file */
|
||||
#define FDF_NO_CLOSE (1UL<<3) /* Never close this file */
|
||||
#define FDF_NON_BLOCKING (1UL<<4) /* File was switched into non-blocking
|
||||
mode (console streams only) */
|
||||
#define FDF_IS_SOCKET (1UL<<5) /* This is not a disk file but a socket */
|
||||
#define FDF_IS_LOCKED (1UL<<6) /* This file has an advisory record lock set */
|
||||
#define FDF_IN_USE (1UL<<7) /* This file is in use */
|
||||
#define FDF_CREATED (1UL<<8) /* This file was newly created and may need
|
||||
to have its protection bits updated after
|
||||
it has been closed */
|
||||
#define FDF_CACHE_POSITION (1UL<<9) /* Cache the file position. */
|
||||
#define FDF_ASYNC_IO (1UL<<10) /* File was switched into asynchronous I/O
|
||||
mode (sockets only). */
|
||||
#define FDF_IS_INTERACTIVE (1UL<<11) /* File is attached to a console window or
|
||||
something like it. */
|
||||
#define FDF_DEFAULT_NON_BLOCKING (1UL<<12) /* This file defaults to non-blocking I/O
|
||||
mode. */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: stdio_init_exit.c,v 1.6 2005-01-02 09:07:08 obarthel Exp $
|
||||
* $Id: stdio_init_exit.c,v 1.13 2005-01-14 09:07:17 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -51,6 +51,12 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifndef ID_RAWCON
|
||||
#define ID_RAWCON 0x52415700L /* "RAW\0" */
|
||||
#endif /* ID_RAWCON */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
void
|
||||
__close_all_files(void)
|
||||
{
|
||||
@ -113,6 +119,8 @@ __stdio_init(void)
|
||||
|
||||
ENTER();
|
||||
|
||||
assert( num_standard_files == (STDERR_FILENO-STDIN_FILENO+1) );
|
||||
|
||||
__iob = malloc(sizeof(*__iob) * num_standard_files);
|
||||
if(__iob == NULL)
|
||||
goto out;
|
||||
@ -169,7 +177,7 @@ __stdio_init(void)
|
||||
|
||||
iob_flags = IOBF_IN_USE | IOBF_WRITE | IOBF_NO_NUL | IOBF_BUFFER_MODE_NONE;
|
||||
fd_flags = FDF_IN_USE | FDF_WRITE;
|
||||
default_file = ZERO;
|
||||
default_file = ZERO; /* NOTE: this is really initialized later; see below... */
|
||||
break;
|
||||
}
|
||||
|
||||
@ -183,13 +191,32 @@ __stdio_init(void)
|
||||
/* Check if this stream is attached to a console window. */
|
||||
if(default_file != ZERO)
|
||||
{
|
||||
struct FileHandle * fh = BADDR(default_file);
|
||||
|
||||
PROFILE_OFF();
|
||||
|
||||
if(fh->fh_Type != NULL && IsInteractive(default_file))
|
||||
if(IsInteractive(default_file))
|
||||
{
|
||||
struct FileHandle * fh;
|
||||
|
||||
SET_FLAG(fd_flags,FDF_IS_INTERACTIVE);
|
||||
|
||||
/* Try to figure out if the console is in single
|
||||
character mode. */
|
||||
fh = BADDR(default_file);
|
||||
if(fh->fh_Type != NULL)
|
||||
{
|
||||
D_S(struct InfoData,id);
|
||||
|
||||
if(DoPkt(fh->fh_Type,ACTION_DISK_INFO,MKBADDR(id),0,0,0,0))
|
||||
{
|
||||
if(id->id_DiskType == ID_RAWCON)
|
||||
{
|
||||
SET_FLAG(fd_flags,FDF_NON_BLOCKING);
|
||||
SET_FLAG(fd_flags,FDF_DEFAULT_NON_BLOCKING);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PROFILE_ON();
|
||||
}
|
||||
|
||||
@ -242,13 +269,9 @@ __stdio_init(void)
|
||||
|
||||
SET_FLAG(__fd[STDERR_FILENO]->fd_Flags,FDF_NO_CLOSE);
|
||||
}
|
||||
else if (__fd[STDOUT_FILENO]->fd_DefaultFile != ZERO)
|
||||
else
|
||||
{
|
||||
struct FileHandle * fh = (struct FileHandle *)BADDR(__fd[STDOUT_FILENO]->fd_DefaultFile);
|
||||
|
||||
/* Careful, this could be "NIL:". */
|
||||
if(fh->fh_Type != NULL)
|
||||
__fd[STDERR_FILENO]->fd_DefaultFile = Open("CONSOLE:",MODE_NEWFILE);
|
||||
__fd[STDERR_FILENO]->fd_DefaultFile = Open("CONSOLE:",MODE_NEWFILE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -257,19 +280,27 @@ __stdio_init(void)
|
||||
/* Figure out if the standard error stream is bound to a console. */
|
||||
if(__fd[STDERR_FILENO]->fd_DefaultFile != ZERO)
|
||||
{
|
||||
struct FileHandle * fh = BADDR(IsInteractive(__fd[STDERR_FILENO]->fd_DefaultFile));
|
||||
if(IsInteractive(__fd[STDERR_FILENO]->fd_DefaultFile))
|
||||
{
|
||||
struct FileHandle * fh;
|
||||
|
||||
if(fh->fh_Type != NULL && IsInteractive(__fd[STDERR_FILENO]->fd_DefaultFile))
|
||||
SET_FLAG(__fd[STDERR_FILENO]->fd_Flags,FDF_IS_INTERACTIVE);
|
||||
}
|
||||
|
||||
/* Check if the standard/error output refers to a console or must
|
||||
be considered unusable for console output. */
|
||||
if(FLAG_IS_CLEAR(__fd[STDOUT_FILENO]->fd_Flags,FDF_IS_INTERACTIVE) ||
|
||||
FLAG_IS_CLEAR(__fd[STDERR_FILENO]->fd_Flags,FDF_IS_INTERACTIVE))
|
||||
{
|
||||
/* The standard I/O streams are no longer attached to a console. */
|
||||
__no_standard_io = TRUE;
|
||||
fh = BADDR(__fd[STDERR_FILENO]->fd_DefaultFile);
|
||||
if(fh->fh_Type != NULL)
|
||||
{
|
||||
D_S(struct InfoData,id);
|
||||
|
||||
if(DoPkt(fh->fh_Type,ACTION_DISK_INFO,MKBADDR(id),0,0,0,0))
|
||||
{
|
||||
if(id->id_DiskType == ID_RAWCON)
|
||||
{
|
||||
SET_FLAG(__fd[STDERR_FILENO]->fd_Flags,FDF_NON_BLOCKING);
|
||||
SET_FLAG(__fd[STDERR_FILENO]->fd_Flags,FDF_DEFAULT_NON_BLOCKING);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PROFILE_ON();
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: stdlib_assertion_failure.c,v 1.4 2005-01-02 09:07:08 obarthel Exp $
|
||||
* $Id: stdlib_assertion_failure.c,v 1.6 2005-01-09 09:40:32 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -61,46 +61,7 @@ __assertion_failure(
|
||||
/* Don't drop into a recursion. */
|
||||
if(been_here_before++ == 0)
|
||||
{
|
||||
BOOL use_stderr = FALSE;
|
||||
|
||||
/* Figure out if the assertion failure message can be printed
|
||||
on the stderr stream. */
|
||||
if(__iob != NULL && NOT __no_standard_io)
|
||||
{
|
||||
struct iob * iob;
|
||||
|
||||
iob = (struct iob *)stderr;
|
||||
if(iob != NULL &&
|
||||
FLAG_IS_SET(iob->iob_Flags,IOBF_IN_USE) &&
|
||||
FLAG_IS_SET(iob->iob_Flags,IOBF_WRITE))
|
||||
{
|
||||
struct fd * fd;
|
||||
|
||||
fd = __get_file_descriptor(iob->iob_Descriptor);
|
||||
if(fd != NULL &&
|
||||
FLAG_IS_SET(fd->fd_Flags,FDF_IN_USE) &&
|
||||
FLAG_IS_SET(fd->fd_Flags,FDF_WRITE) &&
|
||||
FLAG_IS_SET(fd->fd_Flags,FDF_IS_INTERACTIVE))
|
||||
{
|
||||
assert( FLAG_IS_CLEAR(fd->fd_Flags,FDF_IS_SOCKET) );
|
||||
|
||||
use_stderr = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(use_stderr)
|
||||
{
|
||||
if(__program_name != NULL)
|
||||
fprintf(stderr,"[%s] ",__program_name);
|
||||
|
||||
fprintf(stderr,
|
||||
"%s:%d: failed assertion '%s'\n",
|
||||
file_name,
|
||||
line_number,
|
||||
expression);
|
||||
}
|
||||
else
|
||||
if(__no_standard_io || __WBenchMsg != NULL)
|
||||
{
|
||||
#if defined(__amigaos4__)
|
||||
struct IntuitionIFace * IIntuition = NULL;
|
||||
@ -146,6 +107,17 @@ __assertion_failure(
|
||||
CloseLibrary(IntuitionBase);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(__program_name != NULL)
|
||||
fprintf(stderr,"[%s] ",__program_name);
|
||||
|
||||
fprintf(stderr,
|
||||
"%s:%d: failed assertion '%s'\n",
|
||||
file_name,
|
||||
line_number,
|
||||
expression);
|
||||
}
|
||||
|
||||
abort();
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: stdlib_main.c,v 1.9 2005-01-02 09:07:18 obarthel Exp $
|
||||
* $Id: stdlib_main.c,v 1.10 2005-01-13 15:39:39 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -250,34 +250,32 @@ detach_cleanup(REG(d0, LONG UNUSED unused_return_code),REG(d1, BPTR segment_list
|
||||
{
|
||||
if(__IUtility != NULL)
|
||||
DropInterface((struct Interface *)__IUtility);
|
||||
|
||||
if(IDOS != NULL)
|
||||
DropInterface((struct Interface *)IDOS);
|
||||
}
|
||||
#else
|
||||
{
|
||||
/* The following trick is necessary only under dos.library V40 and below. */
|
||||
if(((struct Library *)DOSBase)->lib_Version < 50)
|
||||
{
|
||||
/* Now for the slightly shady part. We need to unload the segment
|
||||
list this program was originally loaded with. We have to close
|
||||
dos.library, though, which means that either we can close the
|
||||
library or unload the code, but not both. But there's a loophole
|
||||
in that we can enter Forbid(), unload the code, close the library
|
||||
and exit and nobody will be able to allocate this program's
|
||||
memory until after the process has been terminated. */
|
||||
Forbid();
|
||||
|
||||
UnLoadSeg(segment_list);
|
||||
}
|
||||
}
|
||||
#endif /* __amigaos4__ */
|
||||
|
||||
if(__UtilityBase != NULL)
|
||||
CloseLibrary(__UtilityBase);
|
||||
|
||||
/* The following trick is necessary only under dos.library V40 and below. */
|
||||
if(((struct Library *)DOSBase)->lib_Version < 50)
|
||||
{
|
||||
/* Now for the slightly shady part. We need to unload the segment
|
||||
list this program was originally loaded with. We have to close
|
||||
dos.library, though, which means that either we can close the
|
||||
library or unload the code, but not both. But there's a loophole
|
||||
in that we can enter Forbid(), unload the code, close the library
|
||||
and exit and nobody will be able to allocate this program's
|
||||
memory until after the process has been terminated. */
|
||||
Forbid();
|
||||
|
||||
UnLoadSeg(segment_list);
|
||||
}
|
||||
|
||||
#if defined(__amigaos4__)
|
||||
{
|
||||
if(IDOS != NULL)
|
||||
DropInterface((struct Interface *)IDOS);
|
||||
}
|
||||
#endif /* __amigaos4__ */
|
||||
|
||||
if(DOSBase != NULL)
|
||||
CloseLibrary(DOSBase);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: stdlib_malloc.c,v 1.5 2005-01-02 09:07:18 obarthel Exp $
|
||||
* $Id: stdlib_malloc.c,v 1.6 2005-01-09 15:58:02 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -275,8 +275,16 @@ __memory_init(void)
|
||||
|
||||
NewList((struct List *)&__memory_list);
|
||||
|
||||
if(((struct Library *)SysBase)->lib_Version >= 39)
|
||||
#if defined(__amigaos4__)
|
||||
{
|
||||
__memory_pool = CreatePool(MEMF_ANY,(ULONG)__default_pool_size,(ULONG)__default_puddle_size);
|
||||
}
|
||||
#else
|
||||
{
|
||||
if(((struct Library *)SysBase)->lib_Version >= 39)
|
||||
__memory_pool = CreatePool(MEMF_ANY,(ULONG)__default_pool_size,(ULONG)__default_puddle_size);
|
||||
}
|
||||
#endif /* __amigaos4__ */
|
||||
|
||||
LEAVE();
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: stdlib_setenv.c,v 1.4 2005-01-02 09:07:18 obarthel Exp $
|
||||
* $Id: stdlib_setenv.c,v 1.5 2005-01-09 10:10:41 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -61,7 +61,7 @@ struct LocalVariable
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
STATIC struct LocalVariable * __lv_root;
|
||||
static struct LocalVariable * __lv_root;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: stdlib_showerror.c,v 1.5 2005-01-02 09:07:18 obarthel Exp $
|
||||
* $Id: stdlib_showerror.c,v 1.9 2005-01-13 15:39:39 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -99,39 +99,17 @@ __show_error(const char * message)
|
||||
}
|
||||
#endif /* __amigaos4__ */
|
||||
|
||||
if(__detach || __no_standard_io || __WBenchMsg != NULL)
|
||||
/* If we can't hope to print the error message, show a requester instead. */
|
||||
if(__no_standard_io || __WBenchMsg != NULL)
|
||||
{
|
||||
if(IntuitionBase->lib_Version >= 37)
|
||||
UBYTE program_name[256];
|
||||
struct EasyStruct es;
|
||||
STRPTR title_string;
|
||||
|
||||
/* The following does not make great sense on OS4. */
|
||||
#if NOT defined(__amigaos4__)
|
||||
{
|
||||
UBYTE program_name[256];
|
||||
struct EasyStruct es;
|
||||
STRPTR title_string;
|
||||
|
||||
if(__WBenchMsg != NULL)
|
||||
{
|
||||
title_string = (STRPTR)FilePart(__WBenchMsg->sm_ArgList[0].wa_Name);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(GetProgramName(program_name,sizeof(program_name)))
|
||||
title_string = FilePart((STRPTR)program_name);
|
||||
else
|
||||
title_string = (STRPTR)"Error";
|
||||
}
|
||||
|
||||
memset(&es,0,sizeof(es));
|
||||
|
||||
es.es_StructSize = sizeof(es);
|
||||
es.es_Title = title_string;
|
||||
es.es_TextFormat = (STRPTR)message;
|
||||
es.es_GadgetFormat = (STRPTR)"Sorry";
|
||||
|
||||
EasyRequestArgs(NULL,&es,NULL,NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* The following does not make great sense on OS4. */
|
||||
#if NOT defined(__amigaos4__)
|
||||
if(IntuitionBase->lib_Version < 37)
|
||||
{
|
||||
static struct TextAttr default_font = { (STRPTR)"topaz.font",8,FS_NORMAL,FPF_ROMFONT|FPF_DESIGNED };
|
||||
static struct IntuiText sorry_text = {0,1,JAM1,6,3,(struct TextAttr *)NULL,(STRPTR)"Sorry",(struct IntuiText *)NULL};
|
||||
@ -143,18 +121,58 @@ __show_error(const char * message)
|
||||
body_text.IText = (STRPTR)message;
|
||||
|
||||
AutoRequest(NULL,&body_text,NULL,&sorry_text,0,0,37 + 8 * strlen(message),46);
|
||||
|
||||
goto out;
|
||||
}
|
||||
#endif /* __amigaos4__ */
|
||||
}
|
||||
#endif /* __amigaos4__ */
|
||||
|
||||
if(__WBenchMsg != NULL)
|
||||
{
|
||||
title_string = (STRPTR)FilePart(__WBenchMsg->sm_ArgList[0].wa_Name);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(GetProgramName(program_name,sizeof(program_name)))
|
||||
title_string = FilePart((STRPTR)program_name);
|
||||
else
|
||||
title_string = (STRPTR)"Error";
|
||||
}
|
||||
|
||||
memset(&es,0,sizeof(es));
|
||||
|
||||
es.es_StructSize = sizeof(es);
|
||||
es.es_Title = title_string;
|
||||
es.es_TextFormat = (STRPTR)message;
|
||||
es.es_GadgetFormat = (STRPTR)"Sorry";
|
||||
|
||||
EasyRequestArgs(NULL,&es,NULL,NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
BPTR output;
|
||||
|
||||
output = Output();
|
||||
#if defined(__amigaos4__)
|
||||
{
|
||||
/* Try to print the error message on the default error output stream. */
|
||||
output = ErrorOutput();
|
||||
}
|
||||
#else
|
||||
{
|
||||
struct Process * this_process = (struct Process *)FindTask(NULL);
|
||||
|
||||
Write(output,(STRPTR)message,(LONG)strlen(message));
|
||||
Write(output,"\n",1);
|
||||
output = this_process->pr_CES;
|
||||
}
|
||||
#endif /* __amigaos4__ */
|
||||
|
||||
if(output == ZERO)
|
||||
output = Output();
|
||||
|
||||
if(output != ZERO)
|
||||
{
|
||||
Write(output,(STRPTR)message,(LONG)strlen(message));
|
||||
Write(output,"\n",1);
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: stdlib_startup.c,v 1.5 2005-01-02 09:07:19 obarthel Exp $
|
||||
* $Id: stdlib_startup.c,v 1.6 2005-01-09 15:58:02 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -387,17 +387,13 @@ __startup_init(void)
|
||||
{
|
||||
struct FileHandle * fh = BADDR(input);
|
||||
|
||||
/* Careful: "NIL:" will have a NULL MsgPort in the file handle. */
|
||||
if(fh->fh_Type != NULL)
|
||||
{
|
||||
old_console_task = SetConsoleTask(fh->fh_Type);
|
||||
old_console_task = SetConsoleTask(fh->fh_Type);
|
||||
|
||||
output = Open("CONSOLE:",MODE_NEWFILE);
|
||||
if(output != ZERO)
|
||||
restore_console_task = TRUE;
|
||||
else
|
||||
SetConsoleTask((struct MsgPort *)old_console_task);
|
||||
}
|
||||
output = Open("CONSOLE:",MODE_NEWFILE);
|
||||
if(output != ZERO)
|
||||
restore_console_task = TRUE;
|
||||
else
|
||||
SetConsoleTask((struct MsgPort *)old_console_task);
|
||||
}
|
||||
|
||||
if(output == ZERO)
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: stdlib_system.c,v 1.2 2005-01-02 09:07:19 obarthel Exp $
|
||||
* $Id: stdlib_system.c,v 1.3 2005-01-09 10:10:41 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -69,7 +69,7 @@ system(const char * command)
|
||||
}
|
||||
else
|
||||
{
|
||||
STATIC const struct TagItem system_tags[2] =
|
||||
static const struct TagItem system_tags[2] =
|
||||
{
|
||||
{ SYS_UserShell, TRUE },
|
||||
{ TAG_END, 0 }
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: stdlib_termination_message.c,v 1.3 2005-01-02 09:07:19 obarthel Exp $
|
||||
* $Id: stdlib_termination_message.c,v 1.4 2005-01-09 10:10:41 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -54,7 +54,7 @@ __print_termination_message(const char * termination_message)
|
||||
{
|
||||
termination_message_printed = TRUE;
|
||||
|
||||
if(NOT __termination_message_disabled && NOT __no_standard_io)
|
||||
if(NOT __no_standard_io)
|
||||
{
|
||||
fputs((termination_message != NULL) ? termination_message : "Abnormal program termination",stderr);
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: time_gettimeofday.c,v 1.3 2005-01-02 09:07:19 obarthel Exp $
|
||||
* $Id: time_gettimeofday.c,v 1.4 2005-01-08 10:21:25 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -39,12 +39,20 @@
|
||||
#include "locale_headers.h"
|
||||
#endif /* _LOCALE_HEADERS_H */
|
||||
|
||||
#ifndef _UNISTD_HEADERS_H
|
||||
#include "unistd_headers.h"
|
||||
#endif /* _UNISTD_HEADERS_H */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#include <sys/time.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#include <proto/timer.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* The following is not part of the ISO 'C' (1994) standard. */
|
||||
|
||||
/****************************************************************************/
|
||||
@ -52,17 +60,20 @@
|
||||
int
|
||||
gettimeofday(struct timeval *tp, struct timezone *tzp)
|
||||
{
|
||||
struct Library * TimerBase = __TimerBase;
|
||||
#if defined(__amigaos4__)
|
||||
struct TimerIFace * ITimer = __ITimer;
|
||||
#endif /* __amigaos4__ */
|
||||
|
||||
ULONG seconds,microseconds;
|
||||
struct DateStamp ds;
|
||||
struct timeval tv;
|
||||
|
||||
ENTER();
|
||||
|
||||
PROFILE_OFF();
|
||||
DateStamp(&ds);
|
||||
PROFILE_ON();
|
||||
GetSysTime(&tv);
|
||||
|
||||
seconds = UNIX_TIME_OFFSET + 60 * ((ULONG)ds.ds_Minute + 24 * 60 * (ULONG)ds.ds_Days) + (ds.ds_Tick / TICKS_PER_SECOND);
|
||||
microseconds = (1000000 * (ds.ds_Tick % TICKS_PER_SECOND)) / TICKS_PER_SECOND;
|
||||
seconds = tv.tv_sec + UNIX_TIME_OFFSET;
|
||||
microseconds = tv.tv_usec;
|
||||
|
||||
if(__default_locale != NULL)
|
||||
seconds += 60 * __default_locale->loc_GMTOffset;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: unistd_chown.c,v 1.3 2005-01-02 09:07:19 obarthel Exp $
|
||||
* $Id: unistd_chown.c,v 1.4 2005-01-09 15:58:02 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -106,57 +106,59 @@ chown(const char * path_name, uid_t owner, gid_t group)
|
||||
|
||||
D(("changing owner of '%s'",path_name));
|
||||
|
||||
if(((struct Library *)DOSBase)->lib_Version >= 39)
|
||||
#if defined(__amigaos4__)
|
||||
{
|
||||
PROFILE_OFF();
|
||||
status = SetOwner((STRPTR)path_name,(LONG)((((ULONG)owner) << 16) | group));
|
||||
PROFILE_ON();
|
||||
|
||||
if(status == DOSFALSE)
|
||||
{
|
||||
__translate_io_error_to_errno(IoErr(),&errno);
|
||||
goto out;
|
||||
}
|
||||
|
||||
result = 0;
|
||||
}
|
||||
else
|
||||
#else
|
||||
{
|
||||
D_S(struct bcpl_name,new_name);
|
||||
size_t len;
|
||||
|
||||
len = strlen(path_name);
|
||||
if(len >= sizeof(new_name->name))
|
||||
if(((struct Library *)DOSBase)->lib_Version >= 39)
|
||||
{
|
||||
errno = ENAMETOOLONG;
|
||||
goto out;
|
||||
PROFILE_OFF();
|
||||
status = SetOwner((STRPTR)path_name,(LONG)((((ULONG)owner) << 16) | group));
|
||||
PROFILE_ON();
|
||||
}
|
||||
|
||||
PROFILE_OFF();
|
||||
dvp = GetDeviceProc((STRPTR)path_name,NULL);
|
||||
PROFILE_ON();
|
||||
|
||||
if(dvp == NULL)
|
||||
else
|
||||
{
|
||||
__translate_io_error_to_errno(IoErr(),&errno);
|
||||
goto out;
|
||||
D_S(struct bcpl_name,new_name);
|
||||
size_t len;
|
||||
|
||||
len = strlen(path_name);
|
||||
if(len >= sizeof(new_name->name))
|
||||
{
|
||||
errno = ENAMETOOLONG;
|
||||
goto out;
|
||||
}
|
||||
|
||||
PROFILE_OFF();
|
||||
dvp = GetDeviceProc((STRPTR)path_name,NULL);
|
||||
PROFILE_ON();
|
||||
|
||||
if(dvp == NULL)
|
||||
{
|
||||
__translate_io_error_to_errno(IoErr(),&errno);
|
||||
goto out;
|
||||
}
|
||||
|
||||
new_name->name[0] = len;
|
||||
memmove(&new_name->name[1],path_name,len);
|
||||
|
||||
PROFILE_OFF();
|
||||
status = DoPkt(dvp->dvp_Port,ACTION_SET_OWNER,dvp->dvp_Lock,MKBADDR(new_name),(LONG)((((ULONG)owner) << 16) | group),0,0);
|
||||
PROFILE_ON();
|
||||
}
|
||||
|
||||
new_name->name[0] = len;
|
||||
memmove(&new_name->name[1],path_name,len);
|
||||
|
||||
PROFILE_OFF();
|
||||
status = DoPkt(dvp->dvp_Port,ACTION_SET_OWNER,dvp->dvp_Lock,MKBADDR(new_name),(LONG)((((ULONG)owner) << 16) | group),0,0);
|
||||
PROFILE_ON();
|
||||
|
||||
if(status == DOSFALSE)
|
||||
{
|
||||
__translate_io_error_to_errno(IoErr(),&errno);
|
||||
goto out;
|
||||
}
|
||||
|
||||
result = 0;
|
||||
}
|
||||
#endif /* __amigaos4__ */
|
||||
|
||||
if(status == DOSFALSE)
|
||||
{
|
||||
__translate_io_error_to_errno(IoErr(),&errno);
|
||||
goto out;
|
||||
}
|
||||
|
||||
result = 0;
|
||||
|
||||
out:
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 185
|
||||
#define DATE "2.1.2005"
|
||||
#define VERS "unix.lib 1.185"
|
||||
#define VSTRING "unix.lib 1.185 (2.1.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: unix.lib 1.185 (2.1.2005)"
|
||||
#define REVISION 186
|
||||
#define DATE "14.1.2005"
|
||||
#define VERS "unix.lib 1.186"
|
||||
#define VSTRING "unix.lib 1.186 (14.1.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: unix.lib 1.186 (14.1.2005)"
|
||||
|
||||
@ -1 +1 @@
|
||||
185
|
||||
186
|
||||
|
||||
@ -1,100 +0,0 @@
|
||||
#
|
||||
# $Id: GNUmakefile.68k,v 1.3 2004-10-25 19:50:33 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
|
||||
|
||||
clean:
|
||||
$(DELETE) #?.o #?.map test fgets_test iotest sscanf_test printf_test sprintf_test \
|
||||
stack_size_test translate_test strtok_test
|
||||
|
||||
##############################################################################
|
||||
|
||||
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
|
||||
|
||||
##############################################################################
|
||||
|
||||
mkid:
|
||||
mkid -v #?.(c|h|asm|i)
|
||||
|
||||
update:
|
||||
mkid -v -u
|
||||
@ -1,84 +0,0 @@
|
||||
#
|
||||
# $Id: GNUmakefile.os4,v 1.2 2004-10-25 19:50:33 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
|
||||
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
|
||||
|
||||
clean:
|
||||
$(DELETE) *.o *.map test fgets_test iotest sscanf_test printf_test sprintf_test \
|
||||
stack_size_test translate_test strtok_test
|
||||
|
||||
##############################################################################
|
||||
|
||||
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
|
||||
@ -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.
|
||||
@ -1,74 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#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.
|
||||
*/
|
||||
@ -1,41 +0,0 @@
|
||||
/*
|
||||
* $Id: fgets_test.c,v 1.1.1.1 2004-07-26 16:36:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*/
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
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);
|
||||
}
|
||||
@ -1,44 +0,0 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#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;
|
||||
}
|
||||
@ -1,12 +0,0 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int __debug_level = 2;
|
||||
|
||||
int main(void)
|
||||
{
|
||||
double val = 0.0001;
|
||||
|
||||
printf("%g\n", val);
|
||||
|
||||
return(0);
|
||||
}
|
||||
@ -1,195 +0,0 @@
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
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);
|
||||
}
|
||||
@ -1,134 +0,0 @@
|
||||
#
|
||||
# $Id: smakefile,v 1.3 2004-10-25 19:50:33 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 cleanup
|
||||
|
||||
clean:
|
||||
-delete \#?.o \#?.map test fgets_test iotest sscanf_test printf_test sprintf_test stack_size_test translate_test strtok_test
|
||||
|
||||
##############################################################################
|
||||
|
||||
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
|
||||
|
||||
##############################################################################
|
||||
|
||||
mkid:
|
||||
mkid \#?.(c|h|asm|i) include/\#?.(c|h|asm|i) include/sys/\#?.(c|h|asm|i)
|
||||
|
||||
update:
|
||||
mkid -v -u
|
||||
@ -1,25 +0,0 @@
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
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);
|
||||
}
|
||||
@ -1,108 +0,0 @@
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
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);
|
||||
}
|
||||
@ -1,31 +0,0 @@
|
||||
/* gcc -mstackextend -o stack_extension_test stack_extension_test.c */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
|
||||
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);
|
||||
}
|
||||
@ -1,15 +0,0 @@
|
||||
#include <stdio.h>
|
||||
|
||||
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);
|
||||
}
|
||||
@ -1,35 +0,0 @@
|
||||
/*
|
||||
* $Id: strtok_test.c,v 1.1 2004-10-25 19:50:33 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*/
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
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);
|
||||
}
|
||||
@ -1,241 +0,0 @@
|
||||
/*
|
||||
* $Id: test.c,v 1.1.1.1 2004-07-26 16:36:08 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*/
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <dirent.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/*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)
|
||||
{
|
||||
time_t now;
|
||||
int i,j,k;
|
||||
long n,r;
|
||||
|
||||
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));
|
||||
|
||||
#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*/
|
||||
|
||||
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
|
||||
@ -1,39 +0,0 @@
|
||||
/*
|
||||
* $Id: translate_test.c,v 1.1.1.1 2004-07-26 16:36:08 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <dos.h>
|
||||
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user