1
0
mirror of https://github.com/adtools/clib2.git synced 2025-12-08 14:59:05 +00:00

1 Commits

Author SHA1 Message Date
Olaf Barthel
baf7257d89 This commit was manufactured by cvs2svn to create tag 'V1_168'.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/tags/V1_168@14701 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-08-07 10:24:05 +00:00
150 changed files with 4768 additions and 7526 deletions

View File

@@ -1,5 +1,5 @@
#
# $Id: GNUmakefile.68k,v 1.17 2004-11-18 09:40:37 obarthel Exp $
# $Id: GNUmakefile.68k,v 1.3 2004-08-07 09:15:32 obarthel Exp $
#
# :ts=8
#
@@ -9,7 +9,7 @@
CC = gcc
AR = ar -q
RANLIB = ranlib
COPY = copy clone buf=0
COPY = copy clone
DELETE = delete all quiet
MAKEDIR = makedir
MAKE = make -f GNUmakefile.68k
@@ -40,7 +40,7 @@ endif
.c.o:
@echo "Compiling $<"
@$(CC) -c $(CFLAGS) $<
@$(CC) -c $(CFLAGS) -DIEEE_FLOATING_POINT_SUPPORT $<
$(LIBC_OBJS)/%.o : %.c
@echo "Compiling $< [$(TYPE):c]"
@@ -106,7 +106,7 @@ INCLUDES = -Iinclude -I. -Inetinclude
OPTIONS = -DNDEBUG -fno-builtin -DNO_INLINE_STDARG
#OPTIONS = -D__MEM_DEBUG -fno-builtin
#OPTIONS = -DDEBUG -D__MEM_DEBUG -DNO_INLINE_STDARG -fno-builtin
OPTIMIZE = -O -fomit-frame-pointer -fstrength-reduce -finline-functions
OPTIMIZE = -O
#OPTIMIZE = -O2 -fomit-frame-pointer
#DEBUG = -g2
@@ -144,9 +144,9 @@ C_LIB = \
fcntl_open.o \
fcntl_read.o \
fcntl_write.o \
fcntl_get_default_file.o \
libgen_basename.o \
libgen_dirname.o \
locale_data.o \
locale_init_exit.o \
locale_localeconv.o \
locale_setlocale.o \
@@ -286,10 +286,6 @@ C_LIB = \
stdlib_modsi3.o \
stdlib_mulsi3.o \
stdlib_never_free.o \
stdlib_osliberror.o \
stdlib_oslibversion.o \
stdlib_priority.o \
stdlib_process_name.o \
stdlib_putenv.o \
stdlib_qsort.o \
stdlib_rand.o \
@@ -310,8 +306,6 @@ C_LIB = \
stdlib_startup.o \
stdlib_strtol.o \
stdlib_strtoul.o \
stdlib_strtoll.o \
stdlib_strtoull.o \
stdlib_swapstack.o \
stdlib_sysbase.o \
stdlib_system.o \
@@ -321,8 +315,8 @@ C_LIB = \
stdlib_udivsi4.o \
stdlib_umodsi3.o \
stdlib_unsetenv.o \
stdlib_usergroup.o \
stdlib_wildcard_expand.o \
stdlib_stdio_window_spec.o \
strings_strcasecmp.o \
strings_strncasecmp.o \
string_bcmp.o \
@@ -343,8 +337,6 @@ C_LIB = \
string_strcspn.o \
string_strdup.o \
string_strerror.o \
string_strlcat.o \
string_strlcpy.o \
string_strlen.o \
string_strncat.o \
string_strncmp.o \
@@ -354,29 +346,24 @@ C_LIB = \
string_strspn.o \
string_strstr.o \
string_strtok.o \
string_strtok_r.o \
string_strxfrm.o \
time_asctime.o \
time_asctime_r.o \
time_clock.o \
time_converttime.o \
time_ctime.o \
time_ctime_r.o \
time_data.o \
time_gettimeofday.o \
time_gmtime.o \
time_gmtime_r.o \
time_localtime.o \
time_localtime_r.o \
time_mktime.o \
time_numbertostring.o \
time_strftime.o \
time_time.o \
unistd_access.o \
unistd_chdir.o \
unistd_chdir_exit.o \
unistd_chown.o \
unistd_currentpathname.o \
unistd_data.o \
unistd_dup.o \
unistd_dup2.o \
unistd_fchown.o \
@@ -394,11 +381,8 @@ C_LIB = \
unistd_realpath.o \
unistd_sleep.o \
unistd_symlink.o \
unistd_timer.o \
unistd_time_delay.o \
unistd_truncate.o \
unistd_unlink.o \
unistd_usleep.o \
utime_utime.o
UNIX_LIB = \
@@ -411,7 +395,6 @@ UNIX_LIB = \
fcntl_creat.o \
fcntl_fcntl.o \
fcntl_open.o \
fcntl_get_default_file.o \
mount_convertinfo.o \
mount_statfs.o \
stat_chmod.o \
@@ -437,7 +420,6 @@ UNIX_LIB = \
stdlib_system.o \
unistd_access.o \
unistd_chdir.o \
unistd_chdir_exit.o \
unistd_chown.o \
unistd_getcwd.o \
unistd_lchown.o \
@@ -470,14 +452,12 @@ MATH_LIB = \
math_floor.o \
math_fmod.o \
math_frexp.o \
math_hypot.o \
math_init_exit.o \
math_isinf.o \
math_isnan.o \
math_ldexp.o \
math_log.o \
math_log10.o \
math_logb.o \
math_modf.o \
math_pow.o \
math_rint.o \
@@ -499,6 +479,7 @@ MATH_LIB = \
stdio_vasprintf.o \
stdio_vfprintf.o \
stdio_vfscanf.o \
stdio_vfscanf.o \
stdio_vprintf.o \
stdio_vsnprintf.o \
stdio_vsprintf.o \
@@ -689,7 +670,6 @@ AMIGA_LIB = \
amiga_newlist.o \
amiga_rangerand.o \
amiga_remtof.o \
amiga_rexxvars.o \
amiga_setsuperattrs.o \
amiga_timedelay.o \
amiga_waitbeam.o
@@ -700,6 +680,7 @@ LIBS_68K := $(LIBC_OBJS)/libc.a $(LIBSTACK_OBJS)/libstack.a $(LIBUNIX_OBJS)/libu
$(LIBNET_OBJS)/libnet.a $(LIBDEBUG_OBJS)/libdebug.a $(LIBAMIGA_OBJS)/libamiga.a \
$(LIBM_OBJS)/libm.a
LIBS_020 := $(LIBM881_OBJS)/libm881.a $(LIBS_68K)
#LIBS_020 := $(LIBS_68K)
##############################################################################
@@ -717,6 +698,11 @@ STARTUPS := nrcrt0.o nbcrt0.o nr32crt0.o nb32crt0.o ncrt0.o mainnb.o mainb.o mai
##############################################################################
all: \
lib/libm020/libm.a \
lib/libm.a \
lib/libb/libm020/libm.a \
lib/libb/libm.a \
lib/libb32/libm020/libm.a \
lib/nrcrt0.o \
lib/nbcrt0.o \
lib/ncrt0.o \
@@ -724,12 +710,7 @@ all: \
lib/n32rcrt0.o \
lib/mainnb.o \
lib/mainb.o \
lib/mainb32.o \
lib/libm020/libm.a \
lib/libm.a \
lib/libb/libm.a \
lib/libb/libm020/libm.a \
lib/libb32/libm020/libm.a
lib/mainb32.o
##############################################################################
@@ -998,3 +979,28 @@ mainb.o : stdlib_main.c
mainnb.o : stdlib_main.c
$(CC) -o mainnb.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -m68000 stdlib_main.c
##############################################################################
#test: test.o ncrt0.o libc.a libunix.a libm.a libdebug.a libamiga.a
# $(CC) -Wl,--verbose $(CFLAGS) -DIEEE_FLOATING_POINT_SUPPORT \
# -o $@ -nostdlib ncrt0.o test.o -L. -lm -lunix -ldebug -lc -lamiga
#test: test.o ncrt0.o nbcrt0.o nrcrt0.o libc.a libunix.a libm.a libdebug.a libamiga.a
# $(CC) -resident -Wl,--verbose $(CFLAGS) -DIEEE_FLOATING_POINT_SUPPORT -fbaserel32 -DSMALL_DATA \
# -o $@ -nostdlib nbcrt0.o test.o -L. -lm -lunix -ldebug -lc -lamiga
test : test.c
gcc -o test test.c -D__MEM_DEBUG -DFLOATING_POINT_SUPPORT -Llib -lunix -lm
#test: test.o ncrt0.o nbcrt0.o nrcrt0.o libc.a libunix.a libm.a libdebug.a libamiga.a
# $(CC) -resident -Wl,--verbose $(CFLAGS) -DIEEE_FLOATING_POINT_SUPPORT -fbaserel -DSMALL_DATA \
# -o $@ -nostdlib nrcrt0.o test.o -L. -lm -lunix -ldebug -lc -lamiga
##############################################################################
mkid:
mkid -v #?.(c|h|asm|i) include/#?.(c|h|asm|i) include/sys/#?.(c|h|asm|i)
update:
mkid -v -u

View File

@@ -1,5 +1,5 @@
#
# $Id: GNUmakefile.os4,v 1.15 2004-11-18 09:40:37 obarthel Exp $
# $Id: GNUmakefile.os4,v 1.3 2004-08-07 09:15:32 obarthel Exp $
#
# :ts=8
#
@@ -35,6 +35,7 @@ ifeq (,$(TYPE))
LIBC_OBJS = libc_objs
LIBUNIX_OBJS = libunix_objs
LIBM_OBJS = libm_objs
LIBSTACK_OBJS = libstack_objs
LIBNET_OBJS = libnet_objs
LIBDEBUG_OBJS = libdebug_objs
LIBAMIGA_OBJS = libamiga_objs
@@ -42,6 +43,7 @@ else
LIBC_OBJS = $(TYPE)/libc_objs
LIBUNIX_OBJS = $(TYPE)/libunix_objs
LIBM_OBJS = $(TYPE)/libm_objs
LIBSTACK_OBJS = $(TYPE)/libstack_objs
LIBNET_OBJS = $(TYPE)/libnet_objs
LIBDEBUG_OBJS = $(TYPE)/libdebug_objs
LIBAMIGA_OBJS = $(TYPE)/libamiga_objs
@@ -49,10 +51,9 @@ endif
##############################################################################
# General build rules for all object files and the individual libraries
%.o : %.c
@echo "Compiling $<"
@$(CC) -c $(CFLAGS) $<
@$(CC) -c $(CFLAGS) -DPPC_FLOATING_POINT_SUPPORT $<
$(LIBC_OBJS)/%.o : %.c
@echo "Compiling $< [$(TYPE):c]"
@@ -64,7 +65,11 @@ $(LIBUNIX_OBJS)/%.o : %.c
$(LIBM_OBJS)/%.o : %.c
@echo "Compiling $< [$(TYPE):m]"
@$(CC) -o $(LIBM_OBJS)/$*.o -c $(CFLAGS) $(FLOAT_TYPE) $<
@$(CC) -o $(LIBM_OBJS)/$*.o -c $(CFLAGS) -DPPC_FLOATING_POINT_SUPPORT $<
$(LIBSTACK_OBJS)/%.o : %.c
@echo "Compiling $< [$(TYPE):stack]"
@$(CC) -o $(LIBSTACK_OBJS)/$*.o -c $(CFLAGS) $<
$(LIBNET_OBJS)/%.o : %.c
@echo "Compiling $< [$(TYPE):net]"
@@ -80,20 +85,12 @@ $(LIBAMIGA_OBJS)/%.o : %.c
##############################################################################
# Build options for the individual libraries
ifeq (small_data,$(TYPE))
CODE_TYPE := -msdata=sysv -DSMALL_DATA
FLOAT_TYPE := -DPPC_FLOATING_POINT_SUPPORT
endif
ifeq (large_data,$(TYPE))
CODE_TYPE := -msdata=data
FLOAT_TYPE := -DPPC_FLOATING_POINT_SUPPORT
endif
ifeq (large_data_softfloat,$(TYPE))
CODE_TYPE := -msdata=data -msoft-float
FLOAT_TYPE :=
endif
##############################################################################
@@ -103,15 +100,14 @@ WARNINGS = \
-Wundef -Wbad-function-cast -Wmissing-declarations -Wconversion
INCLUDES = -Iinclude -I. -I$(SDK_INCLUDE)
OPTIONS = -DNDEBUG -DUSE_64_BIT_INTS -D__USE_INLINE__ -Wa,-mregnames
OPTIMIZE = -O -fomit-frame-pointer -funroll-loops
OPTIONS = -DNDEBUG -DUSE_64_BIT_INTS -fno-builtin -D__USE_INLINE__ -Wa,-mregnames
OPTIMIZE = -O3 -fomit-frame-pointer -funroll-loops
#DEBUG = -g
CFLAGS = $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(CODE_TYPE) $(INCLUDES)
##############################################################################
# All objects files which make up libc.a
C_LIB = \
c.lib_rev.o \
ctype_isalnum.o \
@@ -131,9 +127,9 @@ C_LIB = \
ctype_table.o \
dirent_closedir.o \
dirent_data.o \
dirent_rewinddir.o \
dirent_opendir.o \
dirent_readdir.o \
dirent_rewinddir.o \
errno_data.o \
fcntl_close.o \
fcntl_creat.o \
@@ -142,9 +138,9 @@ C_LIB = \
fcntl_open.o \
fcntl_read.o \
fcntl_write.o \
fcntl_get_default_file.o \
libgen_basename.o \
libgen_dirname.o \
locale_data.o \
locale_init_exit.o \
locale_localeconv.o \
locale_setlocale.o \
@@ -252,42 +248,41 @@ C_LIB = \
stdlib_atol.o \
stdlib_bsearch.o \
stdlib_calloc.o \
stdlib_checkdetach.o \
stdlib_constructor.o \
stdlib_constructor_begin.o \
stdlib_constructor_end.o \
stdlib_data.o \
stdlib_default_pool_size.o \
stdlib_default_puddle_size.o \
stdlib_destructor.o \
stdlib_detach.o \
stdlib_disablerequesters.o \
stdlib_div.o \
stdlib_modsi3.o \
stdlib_divsi3.o \
stdlib_divsi4.o \
stdlib_dosbase.o \
stdlib_umodsi3.o \
stdlib_udivsi3.o \
stdlib_udivsi4.o \
stdlib_exit.o \
stdlib_free.o \
stdlib_getdefstacksize.o \
stdlib_getenv.o \
stdlib_getsp.o \
stdlib_init_exit.o \
stdlib_isresident.o \
stdlib_labs.o \
stdlib_ldiv.o \
stdlib_getdefstacksize.o \
stdlib_stackargbytes.o \
stdlib_stack_usage.o \
stdlib_checkdetach.o \
stdlib_detach.o \
stdlib_isresident.o \
stdlib_sysbase.o \
stdlib_dosbase.o \
stdlib_machine_test.o \
stdlib_malloc.o \
stdlib_math.o \
stdlib_mkdtemp.o \
stdlib_mkstemp.o \
stdlib_mktemp.o \
stdlib_modsi3.o \
stdlib_mulsi3.o \
stdlib_never_free.o \
stdlib_osliberror.o \
stdlib_oslibversion.o \
stdlib_priority.o \
stdlib_process_name.o \
stdlib_putenv.o \
stdlib_qsort.o \
stdlib_rand.o \
@@ -299,28 +294,20 @@ C_LIB = \
stdlib_showerror.o \
stdlib_socket.o \
stdlib_srand.o \
stdlib_stackargbytes.o \
stdlib_stackcheck.o \
stdlib_stackoverflow.o \
stdlib_stacksafezone.o \
stdlib_stacksize.o \
stdlib_stack_usage.o \
stdlib_startup.o \
stdlib_strtol.o \
stdlib_strtoul.o \
stdlib_strtoll.o \
stdlib_strtoull.o \
stdlib_swapstack.o \
stdlib_sysbase.o \
stdlib_system.o \
stdlib_termination_message.o \
stdlib_threshold.o \
stdlib_udivsi3.o \
stdlib_udivsi4.o \
stdlib_umodsi3.o \
stdlib_unsetenv.o \
stdlib_usergroup.o \
stdlib_wildcard_expand.o \
stdlib_stdio_window_spec.o \
strings_strcasecmp.o \
strings_strncasecmp.o \
string_bcmp.o \
@@ -341,8 +328,6 @@ C_LIB = \
string_strcspn.o \
string_strdup.o \
string_strerror.o \
string_strlcat.o \
string_strlcpy.o \
string_strlen.o \
string_strncat.o \
string_strncmp.o \
@@ -352,29 +337,24 @@ C_LIB = \
string_strspn.o \
string_strstr.o \
string_strtok.o \
string_strtok_r.o \
string_strxfrm.o \
time_asctime.o \
time_asctime_r.o \
time_clock.o \
time_converttime.o \
time_ctime.o \
time_ctime_r.o \
time_data.o \
time_gettimeofday.o \
time_gmtime.o \
time_gmtime_r.o \
time_localtime.o \
time_localtime_r.o \
time_mktime.o \
time_numbertostring.o \
time_strftime.o \
time_time.o \
unistd_access.o \
unistd_chdir.o \
unistd_chdir_exit.o \
unistd_chown.o \
unistd_currentpathname.o \
unistd_data.o \
unistd_dup.o \
unistd_dup2.o \
unistd_fchown.o \
@@ -392,25 +372,21 @@ C_LIB = \
unistd_realpath.o \
unistd_sleep.o \
unistd_symlink.o \
unistd_timer.o \
unistd_time_delay.o \
unistd_truncate.o \
unistd_unlink.o \
unistd_usleep.o \
utime_utime.o
# All objects files which make up libunix.a
UNIX_LIB = \
unix.lib_rev.o \
dirent_closedir.o \
dirent_data.o \
dirent_rewinddir.o \
dirent_opendir.o \
dirent_readdir.o \
dirent_rewinddir.o \
fcntl_creat.o \
fcntl_fcntl.o \
fcntl_open.o \
fcntl_get_default_file.o \
mount_convertinfo.o \
mount_statfs.o \
stat_chmod.o \
@@ -420,12 +396,12 @@ UNIX_LIB = \
stat_rmdir.o \
stat_stat.o \
stdio_fdhookentry.o \
stdio_fflush.o \
stdio_fopen.o \
stdio_fopen.o \
stdio_init_exit.o \
stdio_locksemaphorename.o \
stdio_openiob.o \
stdio_fflush.o \
stdio_fopen.o \
stdio_fopen.o \
stdio_popen.o \
stdio_remove.o \
stdio_rename.o \
@@ -436,7 +412,6 @@ UNIX_LIB = \
stdlib_system.o \
unistd_access.o \
unistd_chdir.o \
unistd_chdir_exit.o \
unistd_chown.o \
unistd_getcwd.o \
unistd_lchown.o \
@@ -455,7 +430,6 @@ UNIX_LIB = \
unistd_wildcard_expand.o \
utime_utime.o
# All objects files which make up libm.a
MATH_LIB = \
math_acos.o \
math_asin.o \
@@ -470,14 +444,12 @@ MATH_LIB = \
math_floor.o \
math_fmod.o \
math_frexp.o \
math_hypot.o \
math_init_exit.o \
math_isnan.o \
math_isinf.o \
math_ldexp.o \
math_log.o \
math_log10.o \
math_logb.o \
math_modf.o \
math_pow.o \
math_rint.o \
@@ -505,6 +477,7 @@ MATH_LIB = \
stdio_vasprintf.o \
stdio_vfprintf.o \
stdio_vfscanf.o \
stdio_vfscanf.o \
stdio_vprintf.o \
stdio_vsnprintf.o \
stdio_vsprintf.o \
@@ -513,7 +486,48 @@ MATH_LIB = \
stdlib_strtod.o \
time_difftime.o
# All objects files which make up libnet.a
MATH_LIB_IEEE = \
m.lib_rev.o \
$(MATH_LIB) \
math_adddf3.o \
math_addsf3.o \
math_divdf3.o \
math_divsf3.o \
math_eqdf2.o \
math_eqsf2.o \
math_extendsfdf2.o \
math_fixdfsi.o \
math_fixsfsi.o \
math_fixunsdfsi.o \
math_fixunssfsi.o \
math_floatsidf.o \
math_floatsisf.o \
math_gedf2.o \
math_gesf2.o \
math_gtdf2.o \
math_gtsf2.o \
math_ledf2.o \
math_lesf2.o \
math_ltdf2.o \
math_ltsf2.o \
math_muldf3.o \
math_mulsf3.o \
math_nedf2.o \
math_negdf2.o \
math_negsf2.o \
math_nesf2.o \
math_subdf3.o \
math_subsf3.o \
math_truncdfsf2.o
STACK_LIB = \
stack.lib_rev.o \
stdlib_setjmp.o \
stdlib_stackextension.o \
stdlib_stackminframe.o \
stdlib_stackoverflow.o \
stdlib_stacksafezone.o
NET_LIB = \
net.lib_rev.o \
socket_accept.o \
@@ -557,7 +571,6 @@ NET_LIB = \
socket_socket.o \
socket_hook_entry.o \
socket_hstrerror.o \
stat_umask.o \
usergroup_crypt.o \
usergroup_data.o \
usergroup_endgrent.o \
@@ -586,12 +599,13 @@ NET_LIB = \
usergroup_setregid.o \
usergroup_setreuid.o \
usergroup_setsid.o \
usergroup_setuid.o
usergroup_setuid.o \
stat_umask.o
# All objects files which make up libdebug.a
DEBUG_LIB = \
debug.lib_rev.o \
debug.o \
debug_level.o \
debug_cmpstrexec.o \
debug_kcmpstr.o \
debug_kdofmt.o \
@@ -617,10 +631,8 @@ DEBUG_LIB = \
debug_kputstr1.o \
debug_kputstr2.o \
debug_kvprintf1.o \
debug_kvprintf2.o \
debug_level.o
debug_kvprintf2.o
# All objects files which make up libamiga.a
AMIGA_LIB = \
amiga.lib_rev.o \
amiga_acrypt.o \
@@ -629,17 +641,10 @@ AMIGA_LIB = \
amiga_argarrayinit.o \
amiga_argint.o \
amiga_argstring.o \
amiga_beginio.o \
amiga_callhooka.o \
amiga_coercemethod.o \
amiga_createextio.o \
amiga_createport.o \
amiga_createstdio.o \
amiga_createtask.o \
amiga_deleteextio.o \
amiga_deleteport.o \
amiga_deletestdio.o \
amiga_deletetask.o \
amiga_domethod.o \
amiga_dosupermethod.o \
amiga_dotimer.o \
@@ -647,62 +652,49 @@ AMIGA_LIB = \
amiga_freeievents.o \
amiga_hotkey.o \
amiga_invertstring.o \
amiga_newlist.o \
amiga_rangerand.o \
amiga_remtof.o \
amiga_rexxvars.o \
amiga_setsuperattrs.o \
amiga_timedelay.o \
amiga_waitbeam.o
##############################################################################
# The libraries to be built, prefixed by the respective path names
LIBS := \
$(LIBC_OBJS)/libc.a \
$(LIBUNIX_OBJS)/libunix.a \
$(LIBDEBUG_OBJS)/libdebug.a \
$(LIBAMIGA_OBJS)/libamiga.a \
$(LIBM_OBJS)/libm.a \
$(LIBNET_OBJS)/libnet.a
LIBS := $(LIBC_OBJS)/libc.a $(LIBSTACK_OBJS)/libstack.a $(LIBUNIX_OBJS)/libunix.a \
$(LIBDEBUG_OBJS)/libdebug.a $(LIBAMIGA_OBJS)/libamiga.a \
$(LIBM_OBJS)/libm.a $(LIBNET_OBJS)/libnet.a
##############################################################################
# The startup object files to be built
STARTUPS := bcrt0.o bcrtbegin.o bcrtend.o crt0.o crtbegin.o crtend.o mainb.o mainnb.o
##############################################################################
# This is the first target: it creates the necessary directories, then proceeds
# to build the startup object files and finally the libraries
STARTUPS := crt0.o crtbegin.o crtend.o mainnb.o
##############################################################################
all: \
lib \
lib/soft-float \
lib/small-data \
small_data \
large_data \
large_data_softfloat \
lib/bcrt0.o \
lib/bcrtbegin.o \
lib/bcrtend.o \
lib/crt0.o \
lib/crtbegin.o \
lib/crtend.o \
lib/mainb.o \
lib/mainnb.o \
lib/libm.a \
lib/small-data/libm.a \
lib/soft-float/libm.a
lib/libm.a
copy:
$(COPY) $(foreach file,$(LIBS),large_data/$(file)) lib
##############################################################################
# Delete all object files and libraries
clean:
-$(DELETE) $(STARTUPS) lib small_data large_data large_data_softfloat
-$(DELETE) $(TYPE) $(STARTUPS) \
$(LIBC_OBJS) $(LIBUNIX_OBJS) $(LIBM_OBJS) $(LIBSTACK_OBJS) $(LIBNET_OBJS) $(LIBDEBUG_OBJS) $(LIBAMIGA_OBJS)
realclean:
$(MAKE) clean
-$(DELETE) lib small_data large_data
##############################################################################
# Update the version numbers bound to the individual libraries
version:
cp c.lib_rev.rev amiga.lib_rev.rev
cp c.lib_rev.rev debug.lib_rev.rev
@@ -722,74 +714,33 @@ version:
##############################################################################
# Tag all files with a certain version number
cvs-tag:
cvs -q tag V1_`cat c.lib_rev.rev`
##############################################################################
# This target first creates a directory to store the object files in, then
# proceeds to build the libraries from the code. It is invoked by the
# individual library build targets below.
all_libraries: $(TYPE) $(LIBS)
kitchen_sink: $(TYPE) $(LIBS) $(STARTUPS)
##############################################################################
ifneq (,$(TYPE))
$(TYPE):
$(MAKEDIR) $@
endif
##############################################################################
# These create the required subdirectories to store object files and
# libraries in
lib:
-$(MAKEDIR) $@
lib/small-data: lib
-$(MAKEDIR) $@
lib/soft-float: lib
-$(MAKEDIR) $@
small_data:
-$(MAKEDIR) $@
large_data:
-$(MAKEDIR) $@
large_data_softfloat:
-$(MAKEDIR) $@
##############################################################################
# Dependencies for libm.a (large data variant with hardware floating point code
# support): this actually ends up building all the libraries rather than just
# libm.a
lib/libm.a: large_data large_data/libm.a
large_data/libm.a:
$(MAKE) TYPE=large_data all_libraries
lib/libm.a: lib
$(MAKE) TYPE=large_data kitchen_sink
$(COPY) $(foreach file,$(LIBS),large_data/$(file)) lib
##############################################################################
# Dependencies for libm.a (large data variant with software floating point code
# support): this actually ends up building all the libraries rather than just
# libm.a
lib/soft-float/libm.a: large_data_softfloat large_data_softfloat/libm.a
large_data_softfloat/libm.a:
$(MAKE) TYPE=large_data_softfloat all_libraries
$(COPY) $(foreach file,$(LIBS),large_data_softfloat/$(file)) lib/soft-float
##############################################################################
# Dependencies for libm.a (small data variant): this actually ends up building all
# the libraries rather than just libm.a
lib/small-data/libm.a: small_data small_data/libm.a
small_data/libm.a:
$(MAKE) TYPE=small_data all_libraries
lib/small-data/libm.a: lib lib/small-data
$(MAKE) TYPE=small_data kitchen_sink
$(COPY) $(foreach file,$(LIBS),small_data/$(file)) lib/small-data
##############################################################################
# Rules to build and move the startup code
lib/crt0.o : lib crt0.o
$(COPY) crt0.o lib
@@ -805,46 +756,24 @@ lib/mainnb.o : lib mainnb.o
lib/mainb.o : lib mainb.o
$(COPY) mainb.o lib
lib/bcrt0.o : lib bcrt0.o
$(COPY) bcrt0.o lib
lib/bcrtbegin.o : lib bcrtbegin.o
$(COPY) bcrtbegin.o lib
lib/bcrtend.o : lib bcrtend.o
$(COPY) bcrtend.o lib
##############################################################################
# Individual dependencies which tell make to build the object files from
# 'C' source files rather than the assembly language source files of the
# same name (e.g. stdlib_getsp.c instead of stdlib_getsp.asm).
$(LIBAMIGA_OBJS)/amiga_hookentry.o : amiga_hookentry.c
$(LIBC_OBJS)/stdlib_getsp.o : stdlib_getsp.c
$(LIBC_OBJS)/stdlib_swapstack.o : stdlib_swapstack.c
$(LIBC_OBJS)/stdlib_setjmp.o : stdlib_setjmp.c
##############################################################################
# Build rules for version information that goes into each library
$(LIBC_OBJS)/c.lib_rev.o : c.lib_rev.c c.lib_rev.h
$(LIBUNIX_OBJS)/unix.lib_rev.o : unix.lib_rev.c unix.lib_rev.h
$(LIBM_OBJS)/m.lib_rev.o : m.lib_rev.c m.lib_rev.h
$(LIBNET_OBJS)/net.lib_rev.o : net.lib_rev.c net.lib_rev.h
$(LIBDEBUG_OBJS)/debug.lib_rev.o : debug.lib_rev.c debug.lib_rev.h
$(LIBAMIGA_OBJS)/amiga.lib_rev.o : amiga.lib_rev.c amiga.lib_rev.h
$(LIBSTACK_OBJS)/stdlib_setjmp.o : stdlib_setjmp.c
##############################################################################
# Build rules for the debug version of the library which has special
# memory allocation debugging code, controlled by the contents of
# the stdlib_mem_debug.h file.
$(LIBC_OBJS)/stdlib_stacksize.o : stdlib_stacksize.c stdlib_gcc_help.h
$(LIBC_OBJS)/stdlib_shell_escape.o : stdlib_shell_escape.c stdlib_gcc_help.h
$(LIBC_OBJS)/stdlib_alloca.o : stdlib_alloca.c stdlib_mem_debug.h
$(LIBC_OBJS)/stdlib_calloc.o : stdlib_calloc.c stdlib_mem_debug.h
@@ -861,7 +790,6 @@ $(LIBC_OBJS)/stdlib_red_black.o : stdlib_red_black.c stdlib_mem_debug.h
##############################################################################
# Individual build rules for libc.a
$(LIBC_OBJS) :
$(MAKEDIR) $@
@@ -872,7 +800,6 @@ $(LIBC_OBJS)/libc.a : $(LIBC_OBJS) $(foreach file,$(C_LIB),$(LIBC_OBJS)/$(file))
##############################################################################
# Individual build rules for libunix.a
$(LIBUNIX_OBJS) :
$(MAKEDIR) $@
@@ -883,18 +810,26 @@ $(LIBUNIX_OBJS)/libunix.a : $(LIBUNIX_OBJS) $(foreach file,$(UNIX_LIB),$(LIBUNIX
##############################################################################
# Individual build rules for libm.a
$(LIBM_OBJS) :
$(MAKEDIR) $@
$(LIBM_OBJS)/libm.a : $(LIBM_OBJS) $(foreach file,$(MATH_LIB),$(LIBM_OBJS)/$(file))
$(LIBM_OBJS)/libm.a : $(LIBM_OBJS) $(foreach file,$(MATH_LIB_IEEE),$(LIBM_OBJS)/$(file))
-$(DELETE) $@
@$(AR) $@ $(foreach file,$(MATH_LIB),$(LIBM_OBJS)/$(file))
@$(AR) $@ $(foreach file,$(MATH_LIB_IEEE),$(LIBM_OBJS)/$(file))
$(RANLIB) $@
##############################################################################
$(LIBSTACK_OBJS) :
$(MAKEDIR) $@
$(LIBSTACK_OBJS)/libstack.a : $(LIBSTACK_OBJS) $(foreach file,$(STACK_LIB),$(LIBSTACK_OBJS)/$(file))
-$(DELETE) $@
@$(AR) $@ $(foreach file,$(STACK_LIB),$(LIBSTACK_OBJS)/$(file))
$(RANLIB) $@
##############################################################################
# Individual build rules for libnet.a
$(LIBNET_OBJS) :
$(MAKEDIR) $@
@@ -905,7 +840,6 @@ $(LIBNET_OBJS)/libnet.a : $(LIBNET_OBJS) $(foreach file,$(NET_LIB),$(LIBNET_OBJS
##############################################################################
# Individual build rules for libdebug.a
$(LIBDEBUG_OBJS) :
$(MAKEDIR) $@
@@ -916,7 +850,6 @@ $(LIBDEBUG_OBJS)/libdebug.a : $(LIBDEBUG_OBJS) $(foreach file,$(DEBUG_LIB),$(LIB
##############################################################################
# Individual build rules for libamiga.a
$(LIBAMIGA_OBJS) :
$(MAKEDIR) $@
@@ -927,7 +860,6 @@ $(LIBAMIGA_OBJS)/libamiga.a : $(LIBAMIGA_OBJS) $(foreach file,$(AMIGA_LIB),$(LIB
##############################################################################
# Individual build rules for the startup code.
crt0.o : crt0.S
@echo "Assembling $<"
@$(CC) -Wa,-mregnames -o crt0.o -c crt0.S
@@ -944,8 +876,11 @@ mainb.o : stdlib_main.c
@echo "Compiling $<"
@$(CC) -o mainb.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -msdata=sysv -DSMALL_DATA stdlib_main.c
bcrtbegin.o : crtbegin.c
$(CC) -o bcrtbegin.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -msdata=sysv -DSMALL_DATA crtbegin.c
##############################################################################
bcrtend.o : crtend.c
$(CC) -o bcrtend.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -msdata=sysv -DSMALL_DATA crtend.c
mkid:
# mkid -v #?.(c|h|asm|i) include/#?.(c|h|asm|i) include/sys/#?.(c|h|asm|i)
mkid *.[ch] include/*.h include/sys/*.h
update:
mkid -v -u

View File

@@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 184
#define DATE "28.11.2004"
#define VERS "amiga.lib 1.184"
#define VSTRING "amiga.lib 1.184 (28.11.2004)\r\n"
#define VERSTAG "\0$VER: amiga.lib 1.184 (28.11.2004)"
#define REVISION 168
#define DATE "7.8.2004"
#define VERS "amiga.lib 1.168"
#define VSTRING "amiga.lib 1.168 (7.8.2004)\r\n"
#define VERSTAG "\0$VER: amiga.lib 1.168 (7.8.2004)"

View File

@@ -1 +1 @@
184
168

View File

@@ -1,5 +1,5 @@
/*
* $Id: amiga_beginio.c,v 1.2 2004-11-13 12:55:39 obarthel Exp $
* $Id: amiga_beginio.c,v 1.1.1.1 2004-07-26 16:30:17 obarthel Exp $
*
* :ts=4
*
@@ -37,14 +37,6 @@
/****************************************************************************/
#include "debug.h"
/****************************************************************************/
#ifndef __PPC__
/****************************************************************************/
#if defined(__SASC)
VOID __begin_io(struct IORequest * ior);
@@ -72,6 +64,10 @@ VOID __begin_io(struct IORequest * ior);
/****************************************************************************/
#include "debug.h"
/****************************************************************************/
VOID
BeginIO(struct IORequest *ior)
{
@@ -86,35 +82,3 @@ BeginIO(struct IORequest *ior)
LEAVE();
}
/****************************************************************************/
#else
/****************************************************************************/
#include <proto/exec.h>
/****************************************************************************/
#if defined(BeginIO)
#undef BeginIO
#endif /* BeginIO */
/****************************************************************************/
VOID
BeginIO(struct IORequest *ior)
{
ENTER();
assert( ior != NULL && ior->io_Device != NULL );
IExec->BeginIO(ior);
LEAVE();
}
/****************************************************************************/
#endif /* __PPC__ */

View File

@@ -1,5 +1,5 @@
/*
* $Id: amiga_createextio.c,v 1.2 2004-11-10 14:55:30 obarthel Exp $
* $Id: amiga_createextio.c,v 1.1.1.1 2004-07-26 16:30:18 obarthel Exp $
*
* :ts=4
*
@@ -44,12 +44,6 @@
/****************************************************************************/
#if defined(CreateExtIO)
#undef CreateExtIO
#endif /* CreateExtIO */
/****************************************************************************/
struct IORequest *
CreateExtIO(CONST struct MsgPort * port, LONG io_size)
{

View File

@@ -1,5 +1,5 @@
/*
* $Id: amiga_createport.c,v 1.2 2004-11-13 12:55:39 obarthel Exp $
* $Id: amiga_createport.c,v 1.1.1.1 2004-07-26 16:30:18 obarthel Exp $
*
* :ts=4
*
@@ -44,12 +44,6 @@
/****************************************************************************/
#if defined(CreatePort)
#undef CreatePort
#endif /* CreatePort */
/****************************************************************************/
struct MsgPort *
CreatePort(CONST_STRPTR name, LONG pri)
{

View File

@@ -1,5 +1,5 @@
/*
* $Id: amiga_createstdio.c,v 1.2 2004-11-10 14:55:30 obarthel Exp $
* $Id: amiga_createstdio.c,v 1.1.1.1 2004-07-26 16:30:18 obarthel Exp $
*
* :ts=4
*
@@ -44,12 +44,6 @@
/****************************************************************************/
#if defined(CreateStdIO)
#undef CreateStdIO
#endif /* CreateStdIO */
/****************************************************************************/
struct IOStdReq *
CreateStdIO(CONST struct MsgPort * port)
{

View File

@@ -1,5 +1,5 @@
/*
* $Id: amiga_createtask.c,v 1.2 2004-11-13 12:55:39 obarthel Exp $
* $Id: amiga_createtask.c,v 1.1.1.1 2004-07-26 16:30:18 obarthel Exp $
*
* :ts=4
*
@@ -31,6 +31,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __PPC__
/****************************************************************************/
#include <exec/libraries.h>
@@ -51,10 +53,6 @@
/****************************************************************************/
#ifndef __PPC__
/****************************************************************************/
/*
* Create a task with given name, priority, and stack size.
* It will use the default exception and trap handlers for now.
@@ -193,44 +191,4 @@ CreateTask(CONST_STRPTR name,LONG pri,CONST APTR init_pc,ULONG stack_size)
/****************************************************************************/
#else
/****************************************************************************/
#if defined(CreateTask)
#undef CreateTask
#endif /* CreateTask */
/****************************************************************************/
struct Task *
CreateTask(CONST_STRPTR name,LONG pri,CONST APTR init_pc,ULONG stack_size)
{
struct Task * result = NULL;
ENTER();
SHOWSTRING(name);
SHOWVALUE(pri);
SHOWPOINTER(init_pc);
SHOWVALUE(stack_size);
assert( name != NULL && (-128 <= pri && pri <= 127) && init_pc != NULL && stack_size > 0 );
if(name == NULL || pri < -128 || pri > 127 || init_pc == NULL || stack_size == 0)
{
SHOWMSG("invalid parameters");
goto out;
}
result = IExec->CreateTask(name,pri,init_pc,stack_size,NULL);
out:
RETURN(result);
return(result);
}
/****************************************************************************/
#endif /* __PPC__ */

View File

@@ -1,5 +1,5 @@
/*
* $Id: amiga_deleteextio.c,v 1.2 2004-11-10 14:55:30 obarthel Exp $
* $Id: amiga_deleteextio.c,v 1.1.1.1 2004-07-26 16:30:18 obarthel Exp $
*
* :ts=4
*
@@ -44,12 +44,6 @@
/****************************************************************************/
#if defined(DeleteExtIO)
#undef DeleteExtIO
#endif /* DeleteExtIO */
/****************************************************************************/
VOID
DeleteExtIO(struct IORequest * io)
{

View File

@@ -1,5 +1,5 @@
/*
* $Id: amiga_deleteport.c,v 1.2 2004-11-13 12:55:39 obarthel Exp $
* $Id: amiga_deleteport.c,v 1.1.1.1 2004-07-26 16:30:19 obarthel Exp $
*
* :ts=4
*
@@ -44,12 +44,6 @@
/****************************************************************************/
#if defined(DeletePort)
#undef DeletePort
#endif /* DeletePort */
/****************************************************************************/
VOID
DeletePort(struct MsgPort * port)
{

View File

@@ -1,5 +1,5 @@
/*
* $Id: amiga_deletestdio.c,v 1.2 2004-11-10 14:55:30 obarthel Exp $
* $Id: amiga_deletestdio.c,v 1.1.1.1 2004-07-26 16:30:19 obarthel Exp $
*
* :ts=4
*
@@ -44,12 +44,6 @@
/****************************************************************************/
#if defined(DeleteStdIO)
#undef DeleteStdIO
#endif /* DeleteStdIO */
/****************************************************************************/
VOID
DeleteStdIO(struct IOStdReq * io)
{

View File

@@ -1,5 +1,5 @@
/*
* $Id: amiga_deletetask.c,v 1.2 2004-11-13 12:55:39 obarthel Exp $
* $Id: amiga_deletetask.c,v 1.1.1.1 2004-07-26 16:30:19 obarthel Exp $
*
* :ts=4
*
@@ -41,34 +41,8 @@
/****************************************************************************/
#ifndef __PPC__
/****************************************************************************/
VOID
DeleteTask(struct Task *tc)
{
RemTask(tc);
}
/****************************************************************************/
#else
/****************************************************************************/
#if defined(DeleteTask)
#undef DeleteTask
#endif /* DeleteTask */
/****************************************************************************/
VOID
DeleteTask(struct Task *tc)
{
IExec->DeleteTask(tc);
}
/****************************************************************************/
#endif /* __PPC__ */

View File

@@ -1,193 +0,0 @@
/*
* $Id: amiga_rexxvars.c,v 1.1 2004-11-14 11:06:27 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2004 by Olaf Barthel <olsen@sourcery.han.de>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Neither the name of Olaf Barthel nor the names of contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/* We don't want to pull in <clib/alib_protos.h> */
#define CLIB_ALIB_PROTOS_H
#ifndef _STDLIB_HEADERS_H
#include "stdlib_headers.h"
#endif /* _STDLIB_HEADERS_H */
/****************************************************************************/
#include <rexx/rxslib.h>
#include <rexx/errors.h>
/****************************************************************************/
#define __NOLIBBASE__
#include <proto/rexxsyslib.h>
/****************************************************************************/
STATIC struct Library * RexxSysBase;
/****************************************************************************/
#if defined(__amigaos4__)
STATIC struct RexxSysIFace * IRexxSys;
#endif /* __amigaos4__ */
/****************************************************************************/
CLIB_CONSTRUCTOR(__rexxvars_init)
{
ENTER();
RexxSysBase = OpenLibrary(RXSNAME,0);
#if defined(__amigaos4__)
{
if(RexxSysBase != NULL)
{
IRexxSys = (struct RexxSysIFace *)GetInterface(RexxSysBase, "main", 1, 0);
if(IRexxSys == NULL)
{
CloseLibrary(RexxSysBase);
RexxSysBase = NULL;
}
}
}
#endif /* __amigaos4__ */
CONSTRUCTOR_SUCCEED();
}
/****************************************************************************/
CLIB_DESTRUCTOR(__rexxvars_exit)
{
ENTER();
#if defined(__amigaos4__)
{
if(IRexxSys != NULL)
DropInterface((struct Interface *)IRexxSys);
IRexxSys = NULL;
}
#endif /* __amigaos4__ */
if(RexxSysBase != NULL)
{
CloseLibrary(RexxSysBase);
RexxSysBase = NULL;
}
LEAVE();
}
/****************************************************************************/
/* This is modeled after the original assembly language code. Except for the
fact that we compare the library base against a local, static variable
rather then opening the library for each check. */
BOOL
CheckRexxMsg(struct RexxMsg *message)
{
BOOL result = FALSE;
if(RexxSysBase == NULL)
goto out;
if(message->rm_LibBase != RexxSysBase)
goto out;
if(message->rm_TaskBlock == NULL)
goto out;
if(NOT IsRexxMsg(message))
goto out;
result = TRUE;
out:
return(result);
}
/****************************************************************************/
/* The following function works in about like the original, except that it's
not reentrant, does not fill in a pointer to the variable itself and
requires rexxsyslib.library V45. */
LONG
GetRexxVar(struct RexxMsg *message,STRPTR variable_name,STRPTR *buffer_pointer)
{
STATIC TEXT buffer[256];
LONG result;
/* The following uses a function which was added to rexxsyslib.library V45.
We therefore have a minimum library version requirement. */
if(RexxSysBase == NULL || RexxSysBase->lib_Version < 45 || NOT IsRexxMsg(message))
{
result = ERR10_010; /* invalid message packet */
goto out;
}
/* The 256 character limit isn't good. This should be done differently. */
result = GetRexxVarFromMsg(variable_name,buffer,message);
if(result != 0)
goto out;
(*buffer_pointer) = buffer;
out:
return(result);
}
/****************************************************************************/
/* The following function works in about like the original, except that it
ignores the length parameter (the value needs to be a NUL-terminated string)
and requires rexxsyslib.library V45. */
LONG
SetRexxVar(struct RexxMsg *message,STRPTR variable_name,STRPTR value,ULONG length)
{
LONG result;
/* The following uses a function which was added to rexxsyslib.library V45.
We therefore have a minimum library version requirement. */
if(RexxSysBase == NULL || RexxSysBase->lib_Version < 45 || NOT IsRexxMsg(message))
{
result = ERR10_010; /* invalid message packet */
goto out;
}
result = SetRexxVarFromMsg(variable_name,value,message);
out:
return(result);
}

View File

@@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 184
#define DATE "28.11.2004"
#define VERS "c.lib 1.184"
#define VSTRING "c.lib 1.184 (28.11.2004)\r\n"
#define VERSTAG "\0$VER: c.lib 1.184 (28.11.2004)"
#define REVISION 168
#define DATE "7.8.2004"
#define VERS "c.lib 1.168"
#define VSTRING "c.lib 1.168 (7.8.2004)\r\n"
#define VERSTAG "\0$VER: c.lib 1.168 (7.8.2004)"

View File

@@ -1 +1 @@
184
168

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
/*
* $Id: crtbegin.c,v 1.3 2004-09-29 16:54:54 obarthel Exp $
* $Id: crtbegin.c,v 1.1.1.1 2004-07-26 16:30:22 obarthel Exp $
*
* :ts=4
*

View File

@@ -1,5 +1,5 @@
/*
* $Id: debug.h,v 1.2 2004-11-14 11:06:27 obarthel Exp $
* $Id: debug.h,v 1.1.1.1 2004-07-26 16:30:26 obarthel Exp $
*
* :ts=8
*
@@ -57,17 +57,9 @@
/****************************************************************************/
#ifndef _STDLIB_H
#include <stdlib.h>
#endif /* _STDLIB_H */
#ifndef _DOS_H
#include <dos.h>
#endif /* _DOS_H */
/****************************************************************************/
extern void kprintf(const char *format,...);
extern void abort(void);
extern char * __program_name;
/****************************************************************************/

View File

@@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 184
#define DATE "28.11.2004"
#define VERS "debug.lib 1.184"
#define VSTRING "debug.lib 1.184 (28.11.2004)\r\n"
#define VERSTAG "\0$VER: debug.lib 1.184 (28.11.2004)"
#define REVISION 168
#define DATE "7.8.2004"
#define VERS "debug.lib 1.168"
#define VSTRING "debug.lib 1.168 (7.8.2004)\r\n"
#define VERSTAG "\0$VER: debug.lib 1.168 (7.8.2004)"

View File

@@ -1 +1 @@
184
168

View File

@@ -1,5 +1,5 @@
/*
* $Id: dirent_data.c,v 1.4 2004-10-24 20:03:42 obarthel Exp $
* $Id: dirent_data.c,v 1.3 2004-08-07 10:24:04 obarthel Exp $
*
* :ts=4
*
@@ -38,7 +38,7 @@
/****************************************************************************/
/* Directories being scanned whose locks need to be freed when shutting down. */
struct MinList NOCOMMON __directory_list;
struct MinList __directory_list;
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: dirent_headers.h,v 1.2 2004-10-24 20:03:42 obarthel Exp $
* $Id: dirent_headers.h,v 1.1.1.1 2004-07-26 16:30:30 obarthel Exp $
*
* :ts=4
*
@@ -42,12 +42,6 @@
/****************************************************************************/
#ifndef _MACROS_H
#include "macros.h"
#endif /* _MACROS_H */
/****************************************************************************/
struct DirectoryHandle
{
struct MinNode dh_MinNode;
@@ -62,7 +56,7 @@ struct DirectoryHandle
/****************************************************************************/
extern struct MinList NOCOMMON __directory_list;
extern struct MinList __directory_list;
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: fcntl_close.c,v 1.3 2004-11-28 10:01:26 obarthel Exp $
* $Id: fcntl_close.c,v 1.2 2004-08-07 09:15:32 obarthel Exp $
*
* :ts=4
*
@@ -135,7 +135,7 @@ __close(int file_descriptor,int * error_ptr)
SHOWMSG("resetting non-blocking access mode");
message.action = file_hook_action_set_blocking;
message.arg = 1;
message.block = 1;
assert( fd->fd_Hook != NULL );

View File

@@ -1,5 +1,5 @@
/*
* $Id: fcntl_fcntl.c,v 1.4 2004-11-28 10:01:26 obarthel Exp $
* $Id: fcntl_fcntl.c,v 1.2 2004-08-07 09:15:32 obarthel Exp $
*
* :ts=4
*
@@ -126,13 +126,10 @@ fcntl(int file_descriptor, int cmd, ... /* int arg */ )
SHOWMSG("cmd=F_GETFL");
result = 0;
if(FLAG_IS_SET(fd->fd_Flags,FDF_NON_BLOCKING))
SET_FLAG(result,O_NONBLOCK);
if(FLAG_IS_SET(fd->fd_Flags,FDF_ASYNC_IO))
SET_FLAG(result,O_ASYNC);
result = O_NONBLOCK;
else
result = 0;
break;
@@ -150,7 +147,7 @@ fcntl(int file_descriptor, int cmd, ... /* int arg */ )
(FLAG_IS_CLEAR(flags,O_NONBLOCK) && FLAG_IS_SET(fd->fd_Flags,FDF_NON_BLOCKING)))
{
message.action = file_hook_action_set_blocking;
message.arg = FLAG_IS_CLEAR(flags,O_NONBLOCK);
message.block = FLAG_IS_CLEAR(flags,O_NONBLOCK);
assert( fd->fd_Hook != NULL );
@@ -171,31 +168,6 @@ fcntl(int file_descriptor, int cmd, ... /* int arg */ )
CLEAR_FLAG(fd->fd_Flags,FDF_NON_BLOCKING);
}
if((FLAG_IS_SET(flags,O_ASYNC) && FLAG_IS_CLEAR(fd->fd_Flags,FDF_ASYNC_IO)) ||
(FLAG_IS_CLEAR(flags,O_ASYNC) && FLAG_IS_SET(fd->fd_Flags,FDF_ASYNC_IO)))
{
message.action = file_hook_action_set_async;
message.arg = FLAG_IS_SET(flags,O_ASYNC);
assert( fd->fd_Hook != NULL );
CallHookPkt(fd->fd_Hook,fd,&message);
result = message.result;
if(result < 0)
{
errno = message.error;
va_end(arg);
goto out;
}
if(FLAG_IS_SET(flags,O_ASYNC))
SET_FLAG(fd->fd_Flags,FDF_ASYNC_IO);
else
CLEAR_FLAG(fd->fd_Flags,FDF_ASYNC_IO);
}
va_end(arg);
break;

View File

@@ -1,69 +0,0 @@
/*
* $Id: fcntl_get_default_file.c,v 1.1 2004-08-25 15:27:27 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2004 by Olaf Barthel <olsen@sourcery.han.de>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Neither the name of Olaf Barthel nor the names of contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _FCNTL_HEADERS_H
#include "fcntl_headers.h"
#endif /* _FCNTL_HEADERS_H */
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
int
__get_default_file(int file_descriptor,long * file_ptr)
{
struct fd * fd;
int result = -1;
assert( file_descriptor >= 0 && file_descriptor < __num_fd );
assert( __fd[file_descriptor] != NULL );
assert( FLAG_IS_SET(__fd[file_descriptor]->fd_Flags,FDF_IN_USE) );
assert( file_ptr != NULL );
fd = __get_file_descriptor(file_descriptor);
if(fd == NULL)
{
errno = EBADF;
goto out;
}
(*file_ptr) = (long)fd->fd_DefaultFile;
result = 0;
out:
return(result);
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: assert.h,v 1.2 2004-08-25 15:27:28 obarthel Exp $
* $Id: assert.h,v 1.1.1.1 2004-07-26 16:32:49 obarthel Exp $
*
* :ts=4
*
@@ -36,12 +36,6 @@
/****************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/****************************************************************************/
#ifndef assert
/****************************************************************************/
@@ -73,10 +67,4 @@ extern void __assertion_failure(const char *file_name,int line_number,const char
/****************************************************************************/
#ifdef __cplusplus
}
#endif /* __cplusplus */
/****************************************************************************/
#endif /* _ASSERT_H */

View File

@@ -1,5 +1,5 @@
/*
* $Id: ctype.h,v 1.3 2004-08-07 10:42:04 obarthel Exp $
* $Id: ctype.h,v 1.2 2004-08-07 09:15:33 obarthel Exp $
*
* :ts=4
*
@@ -63,6 +63,12 @@ extern int toupper(int c);
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
#define isascii(c) ((unsigned)(c) <= 127)
/****************************************************************************/
/*
* If requested, reimplement the character classification functions as macros;
* note that the macro variants ignore the current locale and default to the
@@ -107,12 +113,6 @@ extern const unsigned char * const __ctype_table;
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
#define isascii(c) ((unsigned)(c) <= 127)
/****************************************************************************/
#ifdef __cplusplus
}
#endif /* __cplusplus */

View File

@@ -1,5 +1,5 @@
/*
* $Id: dos.h,v 1.4 2004-11-14 11:06:28 obarthel Exp $
* $Id: dos.h,v 1.2 2004-08-07 09:15:33 obarthel Exp $
*
* :ts=4
*
@@ -112,18 +112,6 @@ extern void __set_a4(unsigned long value);
/****************************************************************************/
/*
* Obtain the low level 'file' handle or socket ID bound to a file
* descriptor. This function returns 0 for success and non-zero
* otherwise (if, for example, the file descriptor value you
* provided is not valid; errno will be set to the appropriate
* error code, too). Put a pointer to the file handle variable you
* want to be filled in into the second parameter to this function.
*/
extern int __get_default_file(int file_descriptor,long * file_ptr);
/****************************************************************************/
/*
* This will be set to TRUE if the current program was launched from
* the internet superserver ('inetd') or an equivalent facility.
@@ -164,28 +152,6 @@ extern ULONG __free_memory_threshold;
* them initialized to certain well-defined values to get the desired effect.
*/
/*
* The minimum required operating system version number is 37, which
* corresponds to Workbench/Kickstart 2.04. You may request a higher
* version number by defining the following variable; if you do so,
* please provide a fitting error message, too. Note that you cannot
* request a minimum version number lower than 37.
*/
extern int __minimum_os_lib_version;
extern char * __minimum_os_lib_error;
/*
* If your program is launched from Workbench it will not necessarily
* have a window to send console output to and from which console
* input can be read. The startup code attempts to set up such a console
* window for you, but it uses defaults for the window specification.
* These defaults can be overridden by your program if you define a
* variable to point to the specification string. Note that if you
* request a specific window specification, this will also override
* any tool window definition stored in the program's icon.
*/
extern char * __stdio_window_specification;
/*
* If set to TRUE, your program's process->pr_WindowPtr will be set to -1
* when it starts. The process->pr_WindowPtr will be automatically restored
@@ -214,20 +180,6 @@ extern BOOL __detach;
*/
extern BOOL (* __check_detach)(void);
/*
* If this pointer is not NULL, it refers the name that will be given to
* the process which is created when the program detaches. The default
* is to reuse the program name instead.
*/
extern char * __process_name;
/*
* This variable controls the task priority of the program, when running.
* It must be in the range -128..127 to be useful. By default, the task
* priority will not be changed.
*/
extern int __priority;
/*
* This variable can be set up to contain the minimum stack size the program
* should be launched with. If the startup code finds that there is not enough

View File

@@ -1,5 +1,5 @@
/*
* $Id: fcntl.h,v 1.3 2004-11-27 12:43:12 obarthel Exp $
* $Id: fcntl.h,v 1.2 2004-08-07 09:15:33 obarthel Exp $
*
* :ts=4
*
@@ -67,7 +67,6 @@ extern "C" {
#define O_NONBLOCK (1<<6)
#define O_SYNC (0)
#define O_NOCTTY (0)
#define O_ASYNC (1<<7)
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: limits.h,v 1.3 2004-09-20 17:16:07 obarthel Exp $
* $Id: limits.h,v 1.2 2004-08-07 09:15:33 obarthel Exp $
*
* :ts=4
*
@@ -58,12 +58,6 @@
/****************************************************************************/
#define LLONG_MIN (-0x7fffffffffffffffLL-1)
#define LLONG_MAX 0x7fffffffffffffffLL
#define ULLONG_MAX 0xffffffffffffffffULL
/****************************************************************************/
#define PATH_MAX 1024
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: math.h,v 1.4 2004-08-16 09:33:13 obarthel Exp $
* $Id: math.h,v 1.2 2004-08-07 09:15:33 obarthel Exp $
*
* :ts=4
*
@@ -89,8 +89,6 @@ extern double rint(double x);
extern float rintf(float x);
extern int isinf(double x);
extern int isnan(double x);
extern double logb(double x);
extern double hypot(double x,double y);
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdarg.h,v 1.2 2004-09-09 08:25:30 obarthel Exp $
* $Id: stdarg.h,v 1.1.1.1 2004-07-26 16:32:53 obarthel Exp $
*
* :ts=4
*
@@ -57,25 +57,12 @@ typedef char * va_list;
/****************************************************************************/
#else
/****************************************************************************/
#if defined(__GNUC__)
/* Use the compiler supplied, machine specific <stdarg.h> file. */
#undef _STDARG_H
#include_next "stdarg.h"
#include <sys/amigaos-va.h>
#else
#error "Unknown compiler"
#endif /* __GNUC__ */
/****************************************************************************/
#endif /* __amigaos4__ */
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdio.h,v 1.3 2004-08-25 15:27:28 obarthel Exp $
* $Id: stdio.h,v 1.2 2004-08-07 09:15:33 obarthel Exp $
*
* :ts=4
*
@@ -62,7 +62,7 @@ extern "C" {
* correspond to a real limitation for this 'C' runtime library and is
* included solely for ISO 'C' (1994) compliance.
*/
#define FOPEN_MAX 64
#define FOPEN_MAX 8
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdlib.h,v 1.3 2004-09-20 17:16:07 obarthel Exp $
* $Id: stdlib.h,v 1.2 2004-08-07 09:15:33 obarthel Exp $
*
* :ts=4
*
@@ -151,11 +151,6 @@ extern long atol(const char *str);
/****************************************************************************/
extern long long strtoll(const char *str, char **ptr, int base);
extern unsigned long long strtoull(const char *str, char **ptr, int base);
/****************************************************************************/
#if defined(__GNUC__)
#if defined(alloca)
#undef alloca

View File

@@ -1,5 +1,5 @@
/*
* $Id: string.h,v 1.5 2004-11-17 19:07:26 obarthel Exp $
* $Id: string.h,v 1.3 2004-08-07 09:15:33 obarthel Exp $
*
* :ts=4
*
@@ -122,15 +122,6 @@ extern int bcmp(const void *a,const void *b,size_t len);
/****************************************************************************/
extern size_t strlcpy(char *dst, const char *src, size_t siz);
extern size_t strlcat(char *dst, const char *src, size_t siz);
/****************************************************************************/
extern char * strtok_r(char *str, const char *separator_set,char ** state_ptr);
/****************************************************************************/
#ifdef __cplusplus
}
#endif /* __cplusplus */

View File

@@ -1,5 +1,5 @@
/*
* $Id: time.h,v 1.7 2004-09-29 10:15:57 obarthel Exp $
* $Id: time.h,v 1.2 2004-08-07 09:15:33 obarthel Exp $
*
* :ts=4
*
@@ -52,7 +52,7 @@ extern "C" {
structure and try to get by with this definition. Sometimes it works,
sometimes it doesn't. Not sure if there really is a good solution for
this problem... */
#if !defined(__TIMEVAL_ALREADY_DEFINED) && !defined(__USE_CLIB2_TIMEVAL)
#ifndef DEVICES_TIMER_H
/****************************************************************************/
@@ -73,26 +73,11 @@ extern "C" {
/****************************************************************************/
/* This will define the 'struct timeval' */
#ifndef DEVICES_TIMER_H
#include <devices/timer.h>
#endif /* DEVICES_TIMER_H */
/* Assume that the 'struct timeval' definition is now in place. */
#define __TIMEVAL_ALREADY_DEFINED
/****************************************************************************/
#endif /* INCLUDE_VERSION */
/****************************************************************************/
#endif /* !__TIMEVAL_ALREADY_DEFINED && !__USE_CLIB2_TIMEVAL */
/****************************************************************************/
/* If the timeval is still undefined or should be defined locally,
define our own now... */
#if !defined(__TIMEVAL_ALREADY_DEFINED)
#else
/****************************************************************************/
@@ -109,7 +94,11 @@ struct timeval
/****************************************************************************/
#endif /* !__TIMEVAL_ALREADY_DEFINED */
#endif /* INCLUDE_VERSION */
/****************************************************************************/
#endif /* DEVICES_TIMER_H */
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: time.h,v 1.2 2004-11-17 19:07:26 obarthel Exp $
* $Id: time.h,v 1.1.1.1 2004-07-26 16:32:56 obarthel Exp $
*
* :ts=4
*
@@ -95,17 +95,6 @@ extern size_t strftime(char *s, size_t maxsize, const char *format,
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
extern char * asctime_r(const struct tm *tm,char * buffer);
extern char * ctime_r(const time_t *tptr,char * buffer);
extern struct tm * gmtime_r(const time_t *t,struct tm * tm_ptr);
extern struct tm * localtime_r(const time_t *t,struct tm * tm_ptr);
/****************************************************************************/
#ifdef __cplusplus
}
#endif /* __cplusplus */

View File

@@ -1,5 +1,5 @@
/*
* $Id: unistd.h,v 1.6 2004-09-29 14:17:46 obarthel Exp $
* $Id: unistd.h,v 1.4 2004-08-07 09:15:33 obarthel Exp $
*
* :ts=4
*
@@ -52,13 +52,6 @@ extern "C" {
/****************************************************************************/
/* Endianness: we assume a big endian memory layout (for 68k and PowerPC). */
#define LITTLE_ENDIAN 1234
#define BIG_ENDIAN 4321
#define BYTE_ORDER BIG_ENDIAN
/****************************************************************************/
#define STDIN_FILENO 0
#define STDOUT_FILENO 1
#define STDERR_FILENO 2
@@ -94,7 +87,6 @@ extern int symlink(const char * actual_path, const char * symbolic_path);
extern int readlink(const char * path_name, char * buffer, int buffer_size);
extern int chdir(const char * path_name);
extern unsigned int sleep(unsigned int seconds);
extern void usleep(unsigned long microseconds);
extern int getopt(int argc, char * argv[], char *opts);
extern pid_t getpid(void);
extern char *realpath(const char *file_name, char *resolved_name);
@@ -208,32 +200,28 @@ extern int h_errno;
/****************************************************************************/
typedef int socklen_t;
/****************************************************************************/
extern int accept(int sockfd,struct sockaddr *cliaddr,socklen_t *addrlen);
extern int accept(int sockfd,struct sockaddr *cliaddr,int *addrlen);
extern int bind(int sockfd,struct sockaddr *name,int namelen);
extern int connect(int sockfd,struct sockaddr *name,socklen_t namelen);
extern struct hostent * gethostbyaddr(const char *addr, socklen_t len, int type);
extern int connect(int sockfd,struct sockaddr *name,int namelen);
extern struct hostent * gethostbyaddr(const char *addr, int len, int type);
extern struct hostent * gethostbyname(const char *name);
extern int gethostname(const char *name, int namelen);
extern struct netent * getnetbyname(const char *name);
extern int getpeername(int sockfd,struct sockaddr *name,socklen_t *namelen);
extern int getsockname(int sockfd,struct sockaddr *name,socklen_t *namelen);
extern int getsockopt(int sockfd,int level,int optname,void *optval,socklen_t *optlen);
extern int getpeername(int sockfd,struct sockaddr *name,int *namelen);
extern int getsockname(int sockfd,struct sockaddr *name,int *namelen);
extern int getsockopt(int sockfd,int level,int optname,void *optval,int *optlen);
extern unsigned long inet_addr(const char *addr);
extern char * inet_ntoa(struct in_addr in);
extern int ioctl(int fd,unsigned long request, ... /* char *arg */);
extern int listen(int sockfd,int backlog);
extern int recv(int fd,void *buff,size_t nbytes,int flags);
extern int recvfrom(int sockfd,void *buff,int len,int flags,struct sockaddr *from,socklen_t *fromlen);
extern int recvfrom(int sockfd,void *buff,int len,int flags,struct sockaddr *from,int *fromlen);
extern int recvmsg(int socket,struct msghdr *msg,int flags);
extern int select(int num_fds,fd_set *read_fds,fd_set *write_fds,fd_set *except_fds,struct timeval *timeout);
extern int send(int fd,const void *buff,size_t nbytes,int flags);
extern int send(int fd,void *buff,size_t nbytes,int flags);
extern int sendmsg(int socket,struct msghdr *msg,int flags);
extern int sendto(int sockfd,const void *buff,int len,int flags,struct sockaddr *to,socklen_t tolen);
extern int setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t optlen);
extern int sendto(int sockfd,void *buff,int len,int flags,struct sockaddr *to,int tolen);
extern int setsockopt(int sockfd,int level,int optname,void *optval,int optlen);
extern int shutdown(int socket, int how);
extern int socket(int domain,int type,int protocol);
extern long gethostid(void);

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdlib_priority.c,v 1.1 2004-11-14 11:06:27 obarthel Exp $
* $Id: locale_data.c,v 1.1.1.1 2004-07-26 16:30:35 obarthel Exp $
*
* :ts=4
*
@@ -31,6 +31,15 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
/* We use an invalid priority value to indicate "do not change the program's
task priority". */
int __priority = 256;
#ifndef _LOCALE_HEADERS_H
#include "locale_headers.h"
#endif /* _LOCALE_HEADERS_H */
/****************************************************************************/
struct Locale * __default_locale;
struct Locale * __locale_table[NUM_LOCALES];
/****************************************************************************/
char __locale_name_table[NUM_LOCALES][MAX_LOCALE_NAME_LEN];

View File

@@ -1,5 +1,5 @@
/*
* $Id: locale_headers.h,v 1.2 2004-09-29 19:57:57 obarthel Exp $
* $Id: locale_headers.h,v 1.1.1.1 2004-07-26 16:30:35 obarthel Exp $
*
* :ts=4
*
@@ -69,12 +69,12 @@
/****************************************************************************/
extern struct Locale * NOCOMMON __default_locale;
extern struct Locale * NOCOMMON __locale_table[NUM_LOCALES];
extern struct Locale * __default_locale;
extern struct Locale * __locale_table[NUM_LOCALES];
/****************************************************************************/
extern char NOCOMMON __locale_name_table[NUM_LOCALES][MAX_LOCALE_NAME_LEN];
extern char __locale_name_table[NUM_LOCALES][MAX_LOCALE_NAME_LEN];
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: locale_init_exit.c,v 1.3 2004-09-29 19:57:57 obarthel Exp $
* $Id: locale_init_exit.c,v 1.1.1.1 2004-07-26 16:30:35 obarthel Exp $
*
* :ts=4
*
@@ -41,25 +41,6 @@
/****************************************************************************/
struct Library * NOCOMMON __LocaleBase;
/****************************************************************************/
#if defined(__amigaos4__)
struct LocaleIFace * NOCOMMON __ILocale;
#endif /* __amigaos4__ */
/****************************************************************************/
struct Locale * NOCOMMON __default_locale;
struct Locale * NOCOMMON __locale_table[NUM_LOCALES];
/****************************************************************************/
char NOCOMMON __locale_name_table[NUM_LOCALES][MAX_LOCALE_NAME_LEN];
/****************************************************************************/
void
__close_all_locales(void)
{
@@ -90,7 +71,8 @@ __close_all_locales(void)
/****************************************************************************/
CLIB_DESTRUCTOR(__locale_exit)
void
__locale_exit(void)
{
ENTER();
@@ -125,7 +107,8 @@ CLIB_DESTRUCTOR(__locale_exit)
/****************************************************************************/
CLIB_CONSTRUCTOR(__locale_init)
int
__locale_init(void)
{
int i;
@@ -162,6 +145,5 @@ CLIB_CONSTRUCTOR(__locale_init)
PROFILE_ON();
RETURN(OK);
CONSTRUCTOR_SUCCEED();
return(OK);
}

View File

@@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 184
#define DATE "28.11.2004"
#define VERS "m.lib 1.184"
#define VSTRING "m.lib 1.184 (28.11.2004)\r\n"
#define VERSTAG "\0$VER: m.lib 1.184 (28.11.2004)"
#define REVISION 168
#define DATE "7.8.2004"
#define VERS "m.lib 1.168"
#define VSTRING "m.lib 1.168 (7.8.2004)\r\n"
#define VERSTAG "\0$VER: m.lib 1.168 (7.8.2004)"

View File

@@ -1 +1 @@
184
168

View File

@@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 184
#define DATE "28.11.2004"
#define VERS "m881.lib 1.184"
#define VSTRING "m881.lib 1.184 (28.11.2004)\r\n"
#define VERSTAG "\0$VER: m881.lib 1.184 (28.11.2004)"
#define REVISION 168
#define DATE "7.8.2004"
#define VERS "m881.lib 1.168"
#define VSTRING "m881.lib 1.168 (7.8.2004)\r\n"
#define VERSTAG "\0$VER: m881.lib 1.168 (7.8.2004)"

View File

@@ -1 +1 @@
184
168

View File

@@ -1,5 +1,5 @@
/*
* $Id: macros.h,v 1.2 2004-09-29 19:57:57 obarthel Exp $
* $Id: macros.h,v 1.1.1.1 2004-07-26 16:30:36 obarthel Exp $
*
* :ts=4
*
@@ -148,10 +148,8 @@
#ifndef UNUSED
#ifdef __GNUC__
#define UNUSED __attribute__((unused))
#define NOCOMMON __attribute__((nocommon))
#else
#define UNUSED /* UNUSED */
#define NOCOMMON /* NOCOMMON */
#endif
#endif /* UNUSED */

View File

@@ -1,5 +1,5 @@
/*
* $Id: math_acos.c,v 1.2 2004-08-21 18:57:40 obarthel Exp $
* $Id: math_acos.c,v 1.1.1.1 2004-07-26 16:30:37 obarthel Exp $
*
* :ts=4
*
@@ -226,7 +226,7 @@ acos(double x)
}
else
{
result = 0;
result = HUGE_VAL;
errno = EDOM;
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: math_asin.c,v 1.2 2004-08-21 18:57:40 obarthel Exp $
* $Id: math_asin.c,v 1.1.1.1 2004-07-26 16:30:38 obarthel Exp $
*
* :ts=4
*
@@ -237,7 +237,7 @@ asin(double x)
}
else
{
result = 0;
result = HUGE_VAL;
errno = EDOM;
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: math_atan2.c,v 1.3 2004-08-27 11:40:49 obarthel Exp $
* $Id: math_atan2.c,v 1.1.1.1 2004-07-26 16:30:39 obarthel Exp $
*
* :ts=4
*
@@ -63,7 +63,7 @@ extern double __atan(double x);
/****************************************************************************/
INLINE static const double
__atan2(double y,double x)
__atan2(double x,double y)
{
const double pi = 3.14159265358979323846;
const double pi_over_2 = pi / 2.0;
@@ -107,7 +107,7 @@ __atan2(double y,double x)
}
else
{
result = 0;
result = HUGE_VAL;
errno = EDOM;
}
}
@@ -135,7 +135,7 @@ __atan(double x)
}
INLINE static const double
__atan2(double y,double x)
__atan2(double x,double y)
{
double pi,pi_over_2;
double result;
@@ -186,7 +186,7 @@ __atan2(double y,double x)
}
else
{
result = 0;
result = HUGE_VAL;
errno = EDOM;
}
}
@@ -201,6 +201,9 @@ __atan2(double y,double x)
#if defined(PPC_FLOATING_POINT_SUPPORT)
static const double
tiny = 1.0e-300,
zero = 0.0,
@@ -210,7 +213,7 @@ pi = 3.1415926535897931160E+00, /* 0x400921FB, 0x54442D18 */
pi_lo = 1.2246467991473531772E-16; /* 0x3CA1A626, 0x33145C07 */
INLINE static const double
__atan2(double y,double x)
__atan2(double x,double y)
{
double z;
int k,m,hx,hy,ix,iy;
@@ -319,11 +322,19 @@ __atan2(double y,double x)
/****************************************************************************/
double
atan2(double y,double x)
atan2(double x,double y)
{
double result;
result = __atan2(y,x);
if(x != 0.0 && y != 0.0)
{
result = __atan2(x,y);
}
else
{
result = HUGE_VAL;
errno = EDOM;
}
return(result);
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: math_data.c,v 1.2 2004-08-21 18:57:40 obarthel Exp $
* $Id: math_data.c,v 1.1.1.1 2004-07-26 16:30:40 obarthel Exp $
*
* :ts=4
*
@@ -48,5 +48,3 @@ struct Library * MathIeeeDoubTransBase;
/****************************************************************************/
double __huge_val;
double __not_a_number;
double __infinity;

View File

@@ -1,5 +1,5 @@
/*
* $Id: math_exp.c,v 1.2 2004-08-27 11:40:49 obarthel Exp $
* $Id: math_exp.c,v 1.1.1.1 2004-07-26 16:30:41 obarthel Exp $
*
* :ts=4
*
@@ -194,7 +194,7 @@ __exp(double x)
}
else
{
k = (int)(invln2*x+halF[xsb]);
k = invln2*x+halF[xsb];
t = k;
hi = x - t*ln2HI[0]; /* t*ln2HI is exact here */
lo = t*ln2LO[0];

View File

@@ -1,5 +1,5 @@
/*
* $Id: math_fabs.c,v 1.4 2004-09-29 14:30:03 obarthel Exp $
* $Id: math_fabs.c,v 1.1.1.1 2004-07-26 16:30:42 obarthel Exp $
*
* :ts=4
*
@@ -126,14 +126,8 @@ __fabs(double x)
/****************************************************************************/
#if defined(__PPC__)
/****************************************************************************/
#if defined(PPC_FLOATING_POINT_SUPPORT)
/****************************************************************************/
INLINE static const double
__fabs(double x)
{
@@ -147,35 +141,10 @@ __fabs(double x)
}
/****************************************************************************/
#else
/****************************************************************************/
INLINE static const double
__fabs(double x)
{
double res;
if(x < 0)
res = (-x);
else
res = x;
return res;
}
/****************************************************************************/
#endif /* PPC_FLOATING_POINT_SUPPORT */
/****************************************************************************/
#endif /* __PPC__ */
/****************************************************************************/
double
fabs(double x)
{

View File

@@ -1,5 +1,5 @@
/*
* $Id: math_fmod.c,v 1.2 2004-08-21 18:57:40 obarthel Exp $
* $Id: math_fmod.c,v 1.1.1.1 2004-07-26 16:30:44 obarthel Exp $
*
* :ts=4
*
@@ -284,7 +284,7 @@ fmod(double x,double y)
}
else
{
result = x;
result = HUGE_VAL;
errno = EDOM;
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: math_fp_support.h,v 1.2 2004-08-08 10:55:57 obarthel Exp $
* $Id: math_fp_support.h,v 1.1.1.1 2004-07-26 16:30:44 obarthel Exp $
*
* :ts=4
*
@@ -36,47 +36,9 @@
/****************************************************************************/
/* If any of the three supported floating point support flavours is
enabled, make sure that the generic 'FLOATING_POINT_SUPPORT' symbol
is defined, too.*/
#if (defined(IEEE_FLOATING_POINT_SUPPORT) || defined(M68881_FLOATING_POINT_SUPPORT) || defined(PPC_FLOATING_POINT_SUPPORT))
#define FLOATING_POINT_SUPPORT
#endif /* IEEE_FLOATING_POINT_SUPPORT || M68881_FLOATING_POINT_SUPPORT || PPC_FLOATING_POINT_SUPPORT */
/****************************************************************************/
/* This selects whether or not the 'long double' type should be used. So far,
only 'double' can be supported, and 'long double' defaults to 'double'. */
/*#define USE_LONG_DOUBLE*/
/****************************************************************************/
#if defined(USE_LONG_DOUBLE)
typedef long double __long_double_t;
#else
typedef double __long_double_t;
#endif /* USE_LONG_DOUBLE */
/****************************************************************************/
/* 'Portable' raw representations of three IEEE floating point formats. */
union ieee_long_double
{
long double value;
unsigned long raw[3];
};
union ieee_double
{
double value;
unsigned long raw[2];
};
union ieee_single
{
float value;
unsigned long raw[1];
};
#endif
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: math_headers.h,v 1.4 2004-08-27 13:49:17 obarthel Exp $
* $Id: math_headers.h,v 1.1.1.1 2004-07-26 16:30:45 obarthel Exp $
*
* :ts=4
*
@@ -38,7 +38,6 @@
#include <limits.h>
#include <errno.h>
#include <float.h>
#include <math.h>
/****************************************************************************/
@@ -148,33 +147,6 @@ do { \
(d) = sl_u.value; \
} while (0)
/* A union which permits us to convert between a float and a 32 bit
int. */
typedef union
{
float value;
unsigned int word;
} ieee_float_shape_type;
/* Get a 32 bit int from a float. */
#define GET_FLOAT_WORD(i,d) \
do { \
ieee_float_shape_type gf_u; \
gf_u.value = (d); \
(i) = gf_u.word; \
} while (0)
/* Set a float from a 32 bit int. */
#define SET_FLOAT_WORD(d,i) \
do { \
ieee_float_shape_type sf_u; \
sf_u.word = (i); \
(d) = sf_u.value; \
} while (0)
extern double __kernel_cos(double x, double y);
extern double __kernel_sin(double x, double y, int iy);
extern int __rem_pio2(double x, double *y);
@@ -192,9 +164,4 @@ extern double __scalbn(double x, int n);
/****************************************************************************/
extern double __not_a_number;
extern double __infinity;
/****************************************************************************/
#endif /* _MATH_HEADERS_H */

View File

@@ -1,171 +0,0 @@
/*
* $Id: math_hypot.c,v 1.1 2004-08-16 09:33:11 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2004 by Olaf Barthel <olsen@sourcery.han.de>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Neither the name of Olaf Barthel nor the names of contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*
* PowerPC math library based in part on work by Sun Microsystems
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
*
* Developed at SunPro, a Sun Microsystems, Inc. business.
* Permission to use, copy, modify, and distribute this
* software is freely granted, provided that this notice
* is preserved.
*/
#ifndef _MATH_HEADERS_H
#include "math_headers.h"
#endif /* _MATH_HEADERS_H */
/****************************************************************************/
#if defined(FLOATING_POINT_SUPPORT)
/****************************************************************************/
#if defined(IEEE_FLOATING_POINT_SUPPORT) || defined(M68881_FLOATING_POINT_SUPPORT)
INLINE static const double
__hypot(double x,double y)
{
double yx;
x = fabs(x);
y = fabs(y);
if ( x < y )
{
double temp = x;
x = y;
y = temp;
}
if (x == 0.)
{
return 0.;
}
else
{
yx = y/x;
return x*sqrt(1. + yx*yx);
}
}
#endif /* IEEE_FLOATING_POINT_SUPPORT || M68881_FLOATING_POINT_SUPPORT */
/****************************************************************************/
#if defined(PPC_FLOATING_POINT_SUPPORT)
static const double one = 1.0;
INLINE static const double
__hypot(double x,double y)
{
int n0;
double a=x,b=y,t1,t2,y1,y2,w;
int j,k,ha,hb;
n0 = ((*(int*)&one)>>29)^1; /* high word index */
ha = *(n0+(int*)&x)&0x7fffffff; /* high word of x */
hb = *(n0+(int*)&y)&0x7fffffff; /* high word of y */
if(hb > ha) {a=y;b=x;j=ha; ha=hb;hb=j;} else {a=x;b=y;}
*(n0+(int*)&a) = ha; /* a <- |a| */
*(n0+(int*)&b) = hb; /* b <- |b| */
if((ha-hb)>0x3c00000) {return a+b;} /* x/y > 2**60 */
k=0;
if(ha > 0x5f300000) { /* a>2**500 */
if(ha >= 0x7ff00000) { /* Inf or NaN */
w = a+b; /* for sNaN */
if(((ha&0xfffff)|*(1-n0+(int*)&a))==0) w = a;
if(((hb^0x7ff00000)|*(1-n0+(int*)&b))==0) w = b;
return w;
}
/* scale a and b by 2**-600 */
ha -= 0x25800000; hb -= 0x25800000; k += 600;
*(n0+(int*)&a) = ha;
*(n0+(int*)&b) = hb;
}
if(hb < 0x20b00000) { /* b < 2**-500 */
if(hb <= 0x000fffff) { /* subnormal b or 0 */
if((hb|(*(1-n0+(int*)&b)))==0) return a;
t1=0;
*(n0+(int*)&t1) = 0x7fd00000; /* t1=2^1022 */
b *= t1;
a *= t1;
k -= 1022;
} else { /* scale a and b by 2^600 */
ha += 0x25800000; /* a *= 2^600 */
hb += 0x25800000; /* b *= 2^600 */
k -= 600;
*(n0+(int*)&a) = ha;
*(n0+(int*)&b) = hb;
}
}
/* medium size a and b */
w = a-b;
if (w>b) {
t1 = 0;
*(n0+(int*)&t1) = ha;
t2 = a-t1;
w = sqrt(t1*t1-(b*(-b)-t2*(a+t1)));
} else {
a = a+a;
y1 = 0;
*(n0+(int*)&y1) = hb;
y2 = b - y1;
t1 = 0;
*(n0+(int*)&t1) = ha+0x00100000;
t2 = a - t1;
w = sqrt(t1*y1-(w*(-w)-(t1*y2+t2*b)));
}
if(k!=0) {
t1 = 1.0;
*(n0+(int*)&t1) += (k<<20);
return t1*w;
} else return w;
}
#endif /* PPC_FLOATING_POINT_SUPPORT */
/****************************************************************************/
double
hypot(double x,double y)
{
double result;
result = __hypot(x,y);
return(result);
}
/****************************************************************************/
#endif /* FLOATING_POINT_SUPPORT */

View File

@@ -1,5 +1,5 @@
/*
* $Id: math_init_exit.c,v 1.5 2004-09-29 19:57:57 obarthel Exp $
* $Id: math_init_exit.c,v 1.1.1.1 2004-07-26 16:30:46 obarthel Exp $
*
* :ts=4
*
@@ -53,10 +53,9 @@
/****************************************************************************/
CLIB_DESTRUCTOR(__math_exit)
void
__math_exit(void)
{
ENTER();
#if defined(IEEE_FLOATING_POINT_SUPPORT)
{
if(MathIeeeSingBasBase != NULL)
@@ -78,8 +77,6 @@ CLIB_DESTRUCTOR(__math_exit)
}
}
#endif /* IEEE_FLOATING_POINT_SUPPORT */
LEAVE();
}
/****************************************************************************/
@@ -124,87 +121,41 @@ __math_init(void)
#endif /* IEEE_FLOATING_POINT_SUPPORT */
/* Now fill in the HUGE_VAL constant, which is set to
the largest representable floating point value. */
* +Infinity.
*/
if(sizeof(__huge_val) == 4) /* single precision */
{
static const unsigned long largest_fp_value[1] =
static const unsigned long infinity[] =
{
/* Exponent = +126, Mantissa = 8,388,607 */
0x7f7fffff
0x7F800000
};
static const unsigned long not_a_number[1] =
{
/* Exponent = 255 and fraction != 0.0 */
0x7fffffff
};
assert( sizeof(infinity) == sizeof(__huge_val) );
static const unsigned long infinity[1] =
{
/* Exponent = 255 and fraction = 0.0 */
0x7f800000
};
assert( sizeof(largest_fp_value) == sizeof(__huge_val) );
memmove((void *)&__huge_val,largest_fp_value,sizeof(largest_fp_value));
memmove((void *)&__not_a_number,not_a_number,sizeof(not_a_number));
memmove((void *)&__infinity,infinity,sizeof(infinity));
memmove((void *)&__huge_val,infinity,sizeof(infinity));
}
else if (sizeof(__huge_val) == 8) /* double precision */
{
static const unsigned long largest_fp_value[2] =
static const unsigned long infinity[] =
{
/* Exponent = +1022, Mantissa = 4,503,599,627,370,495 */
0x7fefffff,0xffffffff
0x7FF00000,0x00000000
};
static const unsigned long not_a_number[2] =
{
/* Exponent = 2047 and fraction != 0.0 */
0x7fffffff,0xffffffff
};
assert( sizeof(infinity) == sizeof(__huge_val) );
static const unsigned long infinity[2] =
{
/* Exponent = 2047 and fraction = 0.0 */
0x7ff00000,0x00000000
};
assert( sizeof(largest_fp_value) == sizeof(__huge_val) );
memmove((void *)&__huge_val,largest_fp_value,sizeof(largest_fp_value));
memmove((void *)&__not_a_number,not_a_number,sizeof(not_a_number));
memmove((void *)&__infinity,infinity,sizeof(infinity));
memmove((void *)&__huge_val,infinity,sizeof(infinity));
}
#if defined(USE_LONG_DOUBLE)
else if (sizeof(__huge_val) == 12) /* extended precision */
{
static const unsigned long largest_fp_value[3] =
static const unsigned long infinity[] =
{
/* Exponent = +32766, Mantissa = 18,446,744,073,709,551,615 */
0x7ffe0000,0xffffffff,0xffffffff
0x7FFF0000,0x00000000,0x00000000
};
static const unsigned long not_a_number[3] =
{
/* Exponent = 32767 and fraction != 0.0 */
0x7fff0000,0xffffffff,0xffffffff
};
assert( sizeof(infinity) == sizeof(__huge_val) );
static const unsigned long infinity[3] =
{
/* Exponent = 32767 and fraction = 0.0 */
0x7fff0000,0x00000000,0x00000000
};
assert( sizeof(largest_fp_value) == sizeof(__huge_val) );
memmove((void *)&__huge_val,largest_fp_value,sizeof(largest_fp_value));
memmove((void *)&__not_a_number,not_a_number,sizeof(not_a_number));
memmove((void *)&__infinity,infinity,sizeof(infinity));
memmove((void *)&__huge_val,infinity,sizeof(infinity));
}
#endif /* USE_LONG_DOUBLE */
result = OK;

View File

@@ -1,5 +1,5 @@
/*
* $Id: math_isinf.c,v 1.2 2004-08-08 10:55:57 obarthel Exp $
* $Id: math_isinf.c,v 1.1 2004-08-07 09:15:32 obarthel Exp $
*
* :ts=4
*
@@ -45,6 +45,26 @@
/****************************************************************************/
union ieee_long_double
{
long double value;
unsigned long raw[3];
};
union ieee_double
{
double value;
unsigned long raw[2];
};
union ieee_single
{
float value;
unsigned long raw[1];
};
/****************************************************************************/
int
isinf(double number)
{
@@ -73,7 +93,6 @@ isinf(double number)
/* Exponent = 2047 and fraction = 0.0 */
is_infinity = (((x.raw[0] & 0x7FFFFFFF) == 0x7FF00000) && (x.raw[1] == 0));
}
#if defined(USE_LONG_DOUBLE)
else if (sizeof(number) == 12) /* extended precision */
{
union ieee_long_double x;
@@ -83,7 +102,6 @@ isinf(double number)
/* Exponent = 32767 and fraction = 0.0 */
is_infinity = (((x.raw[0] & 0x7FFF0000) == 0x7FFF0000) && (x.raw[1] & 0x7FFFFFFF) == 0 && (x.raw[2] == 0));
}
#endif /* USE_LONG_DOUBLE */
else
{
/* Can't happen */

View File

@@ -1,5 +1,5 @@
/*
* $Id: math_isnan.c,v 1.2 2004-08-08 10:55:57 obarthel Exp $
* $Id: math_isnan.c,v 1.1 2004-08-07 09:15:32 obarthel Exp $
*
* :ts=4
*
@@ -45,6 +45,26 @@
/****************************************************************************/
union ieee_long_double
{
long double value;
unsigned long raw[3];
};
union ieee_double
{
double value;
unsigned long raw[2];
};
union ieee_single
{
float value;
unsigned long raw[1];
};
/****************************************************************************/
int
isnan(double number)
{
@@ -72,17 +92,15 @@ isnan(double number)
/* Exponent = 2047 and fraction != 0.0 */
result = (((x.raw[0] & 0x7FF00000) == 0x7FF00000) && ((x.raw[0] & 0x000FFFFF) != 0 || (x.raw[1] != 0)));
}
#if defined(USE_LONG_DOUBLE)
else if (sizeof(number) == 12) /* extended precision */
{
union ieee_long_double x;
x.value = number;
/* Exponent = 32766 and fraction != 0.0 */
/* Exponent = 32767 and fraction != 0.0 */
result = (((x.raw[0] & 0x7FFF0000) == 0x7FFF0000) && ((x.raw[1] & 0x7FFFFFFF) != 0 || x.raw[2] != 0));
}
#endif /* USE_LONG_DOUBLE */
else
{
/* Can't happen */

View File

@@ -1,5 +1,5 @@
/*
* $Id: math_kernel_tan.c,v 1.2 2004-08-27 11:40:49 obarthel Exp $
* $Id: math_kernel_tan.c,v 1.1.1.1 2004-07-26 16:30:48 obarthel Exp $
*
* :ts=4
*
@@ -82,21 +82,7 @@ double __kernel_tan(double x, double y, int iy)
unsigned int low;
GET_LOW_WORD(low,x);
if(((ix|low)|(iy+1))==0) return one/fabs(x);
else {
if (iy == 1)
return x;
else { /* compute -1 / (x+y) carefully */
double a, t;
z = w = x + y;
SET_LOW_WORD(z,0);
v = y - (z - x);
t = a = -one / w;
SET_LOW_WORD(t,0);
s = one + t * z;
return t + a * (s + t * v);
}
}
else return (iy==1)? x: -one/x;
}
}
if(ix>=0x3FE59428) { /* |x|>=0.6744 */

View File

@@ -1,5 +1,5 @@
/*
* $Id: math_log.c,v 1.2 2004-09-27 15:06:19 tfrieden Exp $
* $Id: math_log.c,v 1.1.1.1 2004-07-26 16:30:49 obarthel Exp $
*
* :ts=4
*
@@ -135,7 +135,7 @@ __log(double x)
/****************************************************************************/
#if defined(__PPC__)
#if defined(PPC_FLOATING_POINT_SUPPORT)
static const double
ln2_hi = 6.93147180369123816490e-01, /* 3fe62e42 fee00000 */

View File

@@ -1,136 +0,0 @@
/*
* $Id: math_logb.c,v 1.2 2004-08-14 11:11:01 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2004 by Olaf Barthel <olsen@sourcery.han.de>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Neither the name of Olaf Barthel nor the names of contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*
* PowerPC math library based in part on work by Sun Microsystems
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
*
* Developed at SunPro, a Sun Microsystems, Inc. business.
* Permission to use, copy, modify, and distribute this
* software is freely granted, provided that this notice
* is preserved.
*/
#ifndef _MATH_HEADERS_H
#include "math_headers.h"
#endif /* _MATH_HEADERS_H */
/****************************************************************************/
#if defined(FLOATING_POINT_SUPPORT)
/****************************************************************************/
#if defined(IEEE_FLOATING_POINT_SUPPORT) || defined(M68881_FLOATING_POINT_SUPPORT)
/****************************************************************************/
INLINE static const double
__logb(double x)
{
double result;
result = log(x) / log((double)FLT_RADIX);
return(result);
}
#endif /* IEEE_FLOATING_POINT_SUPPORT || M68881_FLOATING_POINT_SUPPORT */
/****************************************************************************/
#if defined(PPC_FLOATING_POINT_SUPPORT)
INLINE static const double
__logb(double x)
{
unsigned int lx,ix;
EXTRACT_WORDS(ix,lx,x);
ix &= 0x7fffffff; /* high |x| */
if((ix|lx)==0)
return -1.0/fabs(x);
if(ix>=0x7ff00000)
return x*x;
if((ix>>=20)==0) /* IEEE 754 logb */
return -1022.0;
else
return (double) (ix-1023);
}
#endif /* PPC_FLOATING_POINT_SUPPORT */
/****************************************************************************/
double
logb(double x)
{
double result;
int sign;
if(x == 0.0)
{
result = -HUGE_VAL;
goto out;
}
if(isnan(x))
{
result = x;
goto out;
}
sign = isinf(x);
if(sign != 0)
{
if(sign < 0)
result = (-x);
else
result = x;
goto out;
}
result = __logb(x);
out:
return(result);
}
/****************************************************************************/
#endif /* FLOATING_POINT_SUPPORT */

View File

@@ -1,5 +1,5 @@
/*
* $Id: math_modf.c,v 1.2 2004-09-27 15:06:19 tfrieden Exp $
* $Id: math_modf.c,v 1.1.1.1 2004-07-26 16:30:50 obarthel Exp $
*
* :ts=4
*
@@ -109,7 +109,7 @@ __modf(double x,double *nptr)
/****************************************************************************/
#if defined(__PPC__)
#if defined(PPC_FLOATING_POINT_SUPPORT)
INLINE static const double
__modf(double x,double *nptr)

View File

@@ -1,5 +1,5 @@
/*
* $Id: math_pow.c,v 1.3 2004-09-27 15:06:19 tfrieden Exp $
* $Id: math_pow.c,v 1.1.1.1 2004-07-26 16:30:52 obarthel Exp $
*
* :ts=4
*
@@ -171,7 +171,7 @@ __pow(double x,double y)
/****************************************************************************/
#if defined(__PPC__)
#if defined(PPC_FLOATING_POINT_SUPPORT)
/****************************************************************************/
@@ -286,12 +286,11 @@ __pow(double x,double y)
}
/* (x<0)**(non-int) is NaN */
n = ((unsigned int)hx>>31)+1;
if((n|yisint)==0) return (x-x)/(x-x);
s = one; /* s (sign of result -ve**odd) = -1 else = 1 */
if((n|(yisint-1))==0)
s = -one;/* (-ve)**(odd int) */
/* REDHAT LOCAL: This used to be
if((((hx>>31)+1)|yisint)==0) return (x-x)/(x-x);
but ANSI C says a right shift of a signed negative quantity is
implementation defined. */
if(((((unsigned int)hx>>31)-1)|yisint)==0) return (x-x)/(x-x);
/* |y| is huge */
if(iy>0x41e00000) { /* if |y| > 2**31 */
@@ -300,11 +299,11 @@ __pow(double x,double y)
if(ix>=0x3ff00000) return (hy>0)? huge*huge:tiny*tiny;
}
/* over/underflow if x is not close to one */
if(ix<0x3fefffff) return (hy<0)? s*huge*huge:s*tiny*tiny;
if(ix>0x3ff00000) return (hy>0)? s*huge*huge:s*tiny*tiny;
if(ix<0x3fefffff) return (hy<0)? huge*huge:tiny*tiny;
if(ix>0x3ff00000) return (hy>0)? huge*huge:tiny*tiny;
/* now |1-x| is tiny <= 2**-20, suffice to compute
log(x) by x-x^2/2+x^3/3-x^4/4 */
t = ax-one; /* t has 20 trailing zeros */
t = ax-1; /* t has 20 trailing zeros */
w = (t*t)*(0.5-t*(0.3333333333333333333333-t*0.25));
u = ivln2_h*t; /* ivln2_h has 21 sig. bits */
v = t*ivln2_l-w*ivln2;
@@ -312,7 +311,7 @@ __pow(double x,double y)
SET_LOW_WORD(t1,0);
t2 = v-(t1-u);
} else {
double ss,s2,s_h,s_l,t_h,t_l;
double s2,s_h,s_l,t_h,t_l;
n = 0;
/* take care subnormal number */
if(ix<0x00100000)
@@ -326,11 +325,11 @@ __pow(double x,double y)
else {k=0;n+=1;ix -= 0x00100000;}
SET_HIGH_WORD(ax,ix);
/* compute ss = s_h+s_l = (x-1)/(x+1) or (x-1.5)/(x+1.5) */
/* compute s = s_h+s_l = (x-1)/(x+1) or (x-1.5)/(x+1.5) */
u = ax-bp[k]; /* bp[0]=1.0, bp[1]=1.5 */
v = one/(ax+bp[k]);
ss = u*v;
s_h = ss;
s = u*v;
s_h = s;
SET_LOW_WORD(s_h,0);
/* t_h=ax+bp[k] High */
t_h = zero;
@@ -338,29 +337,33 @@ __pow(double x,double y)
t_l = ax - (t_h-bp[k]);
s_l = v*((u-s_h*t_h)-s_h*t_l);
/* compute log(ax) */
s2 = ss*ss;
s2 = s*s;
r = s2*s2*(L1+s2*(L2+s2*(L3+s2*(L4+s2*(L5+s2*L6)))));
r += s_l*(s_h+ss);
r += s_l*(s_h+s);
s2 = s_h*s_h;
t_h = 3.0+s2+r;
SET_LOW_WORD(t_h,0);
t_l = r-((t_h-3.0)-s2);
/* u+v = ss*(1+...) */
/* u+v = s*(1+...) */
u = s_h*t_h;
v = s_l*t_h+t_l*ss;
/* 2/(3log2)*(ss+...) */
v = s_l*t_h+t_l*s;
/* 2/(3log2)*(s+...) */
p_h = u+v;
SET_LOW_WORD(p_h,0);
p_l = v-(p_h-u);
z_h = cp_h*p_h; /* cp_h+cp_l = 2/(3*log2) */
z_l = cp_l*p_h+p_l*cp+dp_l[k];
/* log2(ax) = (ss+..)*2/(3*log2) = n + dp_h + z_h + z_l */
/* log2(ax) = (s+..)*2/(3*log2) = n + dp_h + z_h + z_l */
t = (double)n;
t1 = (((z_h+z_l)+dp_h[k])+t);
SET_LOW_WORD(t1,0);
t2 = z_l-(((t1-t)-dp_h[k])-z_h);
}
s = one; /* s (sign of result -ve**odd) = -1 else = 1 */
if(((((unsigned int)hx>>31)-1)|(yisint-1))==0)
s = -one;/* (-ve)**(odd int) */
/* split up y into y1+y2 and compute (y1+y2)*(t1+t2) */
y1 = y;
SET_LOW_WORD(y1,0);

View File

@@ -1,5 +1,5 @@
/*
* $Id: math_rint.c,v 1.3 2004-08-27 13:49:17 obarthel Exp $
* $Id: math_rint.c,v 1.2 2004-08-07 09:15:32 obarthel Exp $
*
* :ts=4
*
@@ -54,10 +54,6 @@
/****************************************************************************/
#if defined(IEEE_FLOATING_POINT_SUPPORT) || defined(M68881_FLOATING_POINT_SUPPORT)
/****************************************************************************/
double
rint(double x)
{
@@ -66,71 +62,5 @@ rint(double x)
/****************************************************************************/
#endif /* IEEE_FLOATING_POINT_SUPPORT || M68881_FLOATING_POINT_SUPPORT */
/****************************************************************************/
#if defined(PPC_FLOATING_POINT_SUPPORT)
/****************************************************************************/
static const double
TWO52[2]={
4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */
-4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */
};
double
rint(double x)
{
int i0,j0,sx;
unsigned i,i1;
double w,t;
GET_HIGH_WORD(i0,x);
sx = (i0>>31)&1;
GET_LOW_WORD(i1,x);
j0 = ((i0>>20)&0x7ff)-0x3ff;
if(j0<20) {
if(j0<0) {
if(((i0&0x7fffffff)|i1)==0) return x;
i1 |= (i0&0x0fffff);
i0 &= 0xfffe0000;
i0 |= ((i1|-i1)>>12)&0x80000;
SET_HIGH_WORD(x,i0);
w = TWO52[sx]+x;
t = w-TWO52[sx];
GET_HIGH_WORD(i0,t);
SET_HIGH_WORD(t,(i0&0x7fffffff)|(sx<<31));
return t;
} else {
i = (0x000fffff)>>j0;
if(((i0&i)|i1)==0) return x; /* x is integral */
i>>=1;
if(((i0&i)|i1)!=0) {
if(j0==19) i1 = 0x40000000; else
i0 = (i0&(~i))|((0x20000)>>j0);
}
}
} else if (j0>51) {
if(j0==0x400) return x+x; /* inf or NaN */
else return x; /* x is integral */
} else {
i = ((unsigned)(0xffffffff))>>(j0-20);
if((i1&i)==0) return x; /* x is integral */
i>>=1;
if((i1&i)!=0) i1 = (i1&(~i))|((0x40000000)>>(j0-20));
}
SET_HIGH_WORD(x,i0);
SET_LOW_WORD(x,i1);
w = TWO52[sx]+x;
return w-TWO52[sx];
}
/****************************************************************************/
#endif /* PPC_FLOATING_POINT_SUPPORT */
/****************************************************************************/
#endif /* FLOATING_POINT_SUPPORT */

View File

@@ -1,5 +1,5 @@
/*
* $Id: math_rintf.c,v 1.2 2004-08-27 13:49:17 obarthel Exp $
* $Id: math_rintf.c,v 1.1 2004-08-07 09:15:32 obarthel Exp $
*
* :ts=4
*
@@ -54,10 +54,6 @@
/****************************************************************************/
#if defined(IEEE_FLOATING_POINT_SUPPORT) || defined(M68881_FLOATING_POINT_SUPPORT)
/****************************************************************************/
float
rintf(float x)
{
@@ -66,64 +62,5 @@ rintf(float x)
/****************************************************************************/
#endif /* IEEE_FLOATING_POINT_SUPPORT || M68881_FLOATING_POINT_SUPPORT */
/****************************************************************************/
#if defined(PPC_FLOATING_POINT_SUPPORT)
/****************************************************************************/
/* Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. */
/****************************************************************************/
static const float
TWO23[2]={
8.3886080000e+06, /* 0x4b000000 */
-8.3886080000e+06, /* 0xcb000000 */
};
float
rintf(float x)
{
int i0,j0,sx;
unsigned int i,i1;
float w,t;
GET_FLOAT_WORD(i0,x);
sx = (i0>>31)&1;
j0 = ((i0>>23)&0xff)-0x7f;
if(j0<23) {
if(j0<0) {
if((i0&0x7fffffff)==0) return x;
i1 = (i0&0x07fffff);
i0 &= 0xfff00000;
i0 |= ((i1|-i1)>>9)&0x400000;
SET_FLOAT_WORD(x,i0);
w = TWO23[sx]+x;
t = w-TWO23[sx];
GET_FLOAT_WORD(i0,t);
SET_FLOAT_WORD(t,(i0&0x7fffffff)|(sx<<31));
return t;
} else {
i = (0x007fffff)>>j0;
if((i0&i)==0) return x; /* x is integral */
i>>=1;
if((i0&i)!=0) i0 = (i0&(~i))|((0x100000)>>j0);
}
} else {
if(j0==0x80) return x+x; /* inf or NaN */
else return x; /* x is integral */
}
SET_FLOAT_WORD(x,i0);
w = TWO23[sx]+x;
return w-TWO23[sx];
}
/****************************************************************************/
#endif /* PPC_FLOATING_POINT_SUPPORT */
/****************************************************************************/
#endif /* FLOATING_POINT_SUPPORT */

View File

@@ -1,5 +1,5 @@
/*
* $Id: math_sqrt.c,v 1.3 2004-09-27 15:06:19 tfrieden Exp $
* $Id: math_sqrt.c,v 1.1.1.1 2004-07-26 16:30:53 obarthel Exp $
*
* :ts=4
*
@@ -135,7 +135,7 @@ __sqrt(double x)
/****************************************************************************/
#ifdef __PPC__
#if defined(PPC_FLOATING_POINT_SUPPORT)
static const double one = 1.0, tiny=1.0e-300;
@@ -236,7 +236,7 @@ __sqrt(double x)
return z;
}
#endif
#endif /* PPC_FLOATING_POINT_SUPPORT */
/****************************************************************************/
@@ -251,7 +251,7 @@ sqrt(double x)
}
else
{
result = 0;
result = HUGE_VAL;
errno = EDOM;
}

View File

@@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 184
#define DATE "28.11.2004"
#define VERS "net.lib 1.184"
#define VSTRING "net.lib 1.184 (28.11.2004)\r\n"
#define VERSTAG "\0$VER: net.lib 1.184 (28.11.2004)"
#define REVISION 168
#define DATE "7.8.2004"
#define VERS "net.lib 1.168"
#define VSTRING "net.lib 1.168 (7.8.2004)\r\n"
#define VERSTAG "\0$VER: net.lib 1.168 (7.8.2004)"

View File

@@ -1 +1 @@
184
168

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
/*
* $Id: signal_headers.h,v 1.2 2004-11-14 11:06:27 obarthel Exp $
* $Id: signal_headers.h,v 1.1.1.1 2004-07-26 16:31:05 obarthel Exp $
*
* :ts=4
*
@@ -68,20 +68,20 @@ typedef void (*signal_handler_t)(int sig);
/****************************************************************************/
extern signal_handler_t NOCOMMON __signal_handler_table[NUM_SIGNALS];
extern signal_handler_t __signal_handler_table[NUM_SIGNALS];
/****************************************************************************/
extern int NOCOMMON __signals_blocked;
extern int __signals_blocked;
/****************************************************************************/
extern BOOL NOCOMMON __termination_message_printed;
extern BOOL NOCOMMON __termination_message_disabled;
extern BOOL __termination_message_printed;
extern BOOL __termination_message_disabled;
/****************************************************************************/
extern const char NOCOMMON __abnormal_program_termination[];
extern const char __abnormal_program_termination[];
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
#
# $Id: smakefile,v 1.12 2004-11-18 09:40:37 obarthel Exp $
# $Id: smakefile,v 1.4 2004-08-07 09:15:32 obarthel Exp $
#
# :ts=8
#
@@ -88,7 +88,6 @@ AMIGA_OBJ = \
amiga_newlist.o \
amiga_rangerand.o \
amiga_remtof.o \
amiga_rexxvars.o \
amiga_setsuperattrs.o \
amiga_timedelay.o \
amiga_waitbeam.o \
@@ -164,14 +163,14 @@ FCNTL_OBJ = \
fcntl_lseek.o \
fcntl_open.o \
fcntl_read.o \
fcntl_write.o \
fcntl_get_default_file.o
fcntl_write.o
LIBGEN_OBJ = \
libgen_basename.o \
libgen_dirname.o
LOCALE_OBJ = \
locale_data.o \
locale_init_exit.o \
locale_localeconv.o \
locale_setlocale.o
@@ -190,14 +189,12 @@ MATH_OBJ = \
math_floor.o \
math_fmod.o \
math_frexp.o \
math_hypot.o \
math_init_exit.o \
math_isinf.o \
math_isnan.o \
math_ldexp.o \
math_log.o \
math_log10.o \
math_logb.o \
math_modf.o \
math_pow.o \
math_rint.o \
@@ -395,10 +392,6 @@ STDLIB_OBJ = \
stdlib_mkstemp.o \
stdlib_mktemp.o \
stdlib_never_free.o \
stdlib_osliberror.o \
stdlib_oslibversion.o \
stdlib_priority.o \
stdlib_process_name.o \
stdlib_putenv.o \
stdlib_qsort.o \
stdlib_rand.o \
@@ -419,13 +412,10 @@ STDLIB_OBJ = \
stdlib_strtod.o \
stdlib_strtol.o \
stdlib_strtoul.o \
stdlib_strtoll.o \
stdlib_strtoull.o \
stdlib_swapstack.o \
stdlib_system.o \
stdlib_unsetenv.o \
stdlib_wildcard_expand.o \
stdlib_stdio_window_spec.o
stdlib_wildcard_expand.o
STRING_OBJ = \
string_bcmp.o \
@@ -446,8 +436,6 @@ STRING_OBJ = \
string_strcspn.o \
string_strdup.o \
string_strerror.o \
string_strlcat.o \
string_strlcpy.o \
string_strlen.o \
string_strncat.o \
string_strncmp.o \
@@ -457,7 +445,6 @@ STRING_OBJ = \
string_strspn.o \
string_strstr.o \
string_strtok.o \
string_strtok_r.o \
string_strxfrm.o
STRINGS_OBJ = \
@@ -466,18 +453,14 @@ STRINGS_OBJ = \
TIME_OBJ = \
time_asctime.o \
time_asctime_r.o \
time_clock.o \
time_converttime.o \
time_ctime.o \
time_ctime_r.o \
time_data.o \
time_difftime.o \
time_gettimeofday.o \
time_gmtime.o \
time_gmtime_r.o \
time_localtime.o \
time_localtime_r.o \
time_mktime.o \
time_numbertostring.o \
time_strftime.o \
@@ -486,9 +469,9 @@ TIME_OBJ = \
UNISTD_OBJ = \
unistd_access.o \
unistd_chdir.o \
unistd_chdir_exit.o \
unistd_chown.o \
unistd_currentpathname.o \
unistd_data.o \
unistd_dup.o \
unistd_dup2.o \
unistd_fchown.o \
@@ -509,15 +492,12 @@ UNISTD_OBJ = \
unistd_sleep.o \
unistd_strip_double_slash.o \
unistd_symlink.o \
unistd_time_delay.o \
unistd_timer.o \
unistd_translatea2u.o \
unistd_translaterel.o \
unistd_translateu2a.o \
unistd_truncate.o \
unistd_unix_path_semantics.o \
unistd_unlink.o \
unistd_usleep.o
unistd_unlink.o
# \
# unistd_wildcard_expand.o

View File

@@ -1,5 +1,5 @@
/*
* $Id: socket_data.c,v 1.3 2004-11-14 11:06:27 obarthel Exp $
* $Id: socket_data.c,v 1.2 2004-07-28 15:50:45 obarthel Exp $
*
* :ts=4
*
@@ -46,7 +46,9 @@ struct Library * __SocketBase;
/****************************************************************************/
#if defined(__amigaos4__)
struct SocketIFace *__ISocket;
#endif /* __amigaos4__ */
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: socket_headers.h,v 1.3 2004-11-14 11:06:27 obarthel Exp $
* $Id: socket_headers.h,v 1.2 2004-07-28 15:50:45 obarthel Exp $
*
* :ts=4
*
@@ -48,19 +48,19 @@
/****************************************************************************/
extern struct Library * NOCOMMON __SocketBase;
extern struct Library * __SocketBase;
/****************************************************************************/
#if defined(__amigaos4__)
extern struct SocketIFace * NOCOMMON __ISocket;
extern struct SocketIFace *__ISocket;
#endif /* __amigaos4__ */
/****************************************************************************/
extern int NOCOMMON h_errno;
extern int h_errno;
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: socket_hook_entry.c,v 1.3 2004-11-28 10:01:26 obarthel Exp $
* $Id: socket_hook_entry.c,v 1.1.1.1 2004-07-26 16:31:14 obarthel Exp $
*
* :ts=4
*
@@ -41,10 +41,6 @@
/****************************************************************************/
#include <sys/ioctl.h>
/****************************************************************************/
void
__socket_hook_entry(
struct Hook * UNUSED unused_hook,
@@ -53,7 +49,6 @@ __socket_hook_entry(
{
struct FileInfoBlock * fib;
int error = OK;
int param;
int result;
assert( message != NULL && fd != NULL );
@@ -134,28 +129,6 @@ __socket_hook_entry(
break;
case file_hook_action_set_blocking:
SHOWMSG("file_hook_action_set_blocking");
param = (int)(message->arg == 0);
result = __IoctlSocket(fd->fd_DefaultFile,FIONBIO,&param);
error = errno;
break;
case file_hook_action_set_async:
SHOWMSG("file_hook_action_set_async");
param = (int)(message->arg != 0);
result = __IoctlSocket(fd->fd_DefaultFile,FIOASYNC,&param);
error = errno;
break;
case file_hook_action_examine:
SHOWMSG("file_hook_action_examine");

View File

@@ -1,5 +1,5 @@
/*
* $Id: socket_init_exit.c,v 1.5 2004-11-14 11:06:27 obarthel Exp $
* $Id: socket_init_exit.c,v 1.2 2004-07-28 15:50:45 obarthel Exp $
*
* :ts=4
*
@@ -39,16 +39,16 @@
#include "socket_headers.h"
#endif /* _SOCKET_HEADERS_H */
#ifndef _SIGNAL_HEADERS_H
#include "signal_headers.h"
#endif /* _SIGNAL_HEADERS_H */
/****************************************************************************/
#include "stdlib_protos.h"
/****************************************************************************/
extern BOOL __detach;
/****************************************************************************/
/* Code value. */
#define SBTB_CODE 1
#define SBTS_CODE 0x3FFF
@@ -78,7 +78,22 @@ struct DaemonMessage
/****************************************************************************/
CLIB_DESTRUCTOR(__socket_exit)
extern BOOL __termination_message_disabled;
extern char * __program_name;
extern BOOL __is_daemon;
/****************************************************************************/
extern void __show_error(const char * message);
/****************************************************************************/
extern void __socket_hook_entry(struct Hook * hook,struct fd * fd,struct file_hook_message * message);
/****************************************************************************/
void
__socket_exit(void)
{
ENTER();
@@ -101,7 +116,16 @@ CLIB_DESTRUCTOR(__socket_exit)
* does not happen, the stdio cleanup function will
* crash (with bells on).
*/
__close_all_files();
if(__fd != NULL)
{
int i;
for(i = 0 ; i < __num_fd ; i++)
{
if(FLAG_IS_SET(__fd[i]->fd_Flags,FDF_IS_SOCKET) && FLAG_IS_SET(__fd[i]->fd_Flags,FDF_IN_USE))
close(i);
}
}
#if defined(__amigaos4__)
{
@@ -182,7 +206,7 @@ __socket_init(void)
/* Wire the library's h_errno variable to our local h_errno. */
tags[3].ti_Tag = SBTM_SETVAL(SBTC_HERRNOLONGPTR);
tags[3].ti_Data = (ULONG)&h_errno;
tags[3].ti_Data = (ULONG)&errno;
tags[4].ti_Tag = TAG_END;

View File

@@ -1,5 +1,5 @@
/*
* $Id: socket_ioctl.c,v 1.3 2004-11-28 10:01:26 obarthel Exp $
* $Id: socket_ioctl.c,v 1.1.1.1 2004-07-26 16:31:16 obarthel Exp $
*
* :ts=4
*
@@ -47,10 +47,6 @@
/****************************************************************************/
#include <sys/ioctl.h>
/****************************************************************************/
int
ioctl(int sockfd,unsigned long request, ... /* char *arg */)
{
@@ -85,26 +81,6 @@ ioctl(int sockfd,unsigned long request, ... /* char *arg */)
result = __IoctlSocket((LONG)fd->fd_DefaultFile,request,param);
PROFILE_ON();
if(result == OK)
{
int * option = (int *)param;
if(request == FIONBIO)
{
if((*option) != 0)
SET_FLAG(fd->fd_Flags,FDF_NON_BLOCKING);
else
CLEAR_FLAG(fd->fd_Flags,FDF_NON_BLOCKING);
}
else if (request == FIOASYNC)
{
if((*option) != 0)
SET_FLAG(fd->fd_Flags,FDF_ASYNC_IO);
else
CLEAR_FLAG(fd->fd_Flags,FDF_ASYNC_IO);
}
}
va_end(arg);
out:

View File

@@ -1,5 +1,5 @@
/*
* $Id: socket_send.c,v 1.2 2004-09-29 14:31:57 obarthel Exp $
* $Id: socket_send.c,v 1.1.1.1 2004-07-26 16:31:19 obarthel Exp $
*
* :ts=4
*
@@ -48,7 +48,7 @@
/****************************************************************************/
int
send(int sockfd,const void *buff,size_t nbytes,int flags)
send(int sockfd,void *buff,size_t nbytes,int flags)
{
struct fd * fd;
int result = -1;

View File

@@ -1,5 +1,5 @@
/*
* $Id: socket_sendto.c,v 1.2 2004-09-29 14:31:57 obarthel Exp $
* $Id: socket_sendto.c,v 1.1.1.1 2004-07-26 16:31:20 obarthel Exp $
*
* :ts=4
*
@@ -48,7 +48,7 @@
/****************************************************************************/
int
sendto(int sockfd,const void *buff,int len,int flags,struct sockaddr *to,int tolen)
sendto(int sockfd,void *buff,int len,int flags,struct sockaddr *to,int tolen)
{
struct fd * fd;
int result = -1;

View File

@@ -1,5 +1,5 @@
/*
* $Id: socket_setsockopt.c,v 1.2 2004-09-29 14:31:57 obarthel Exp $
* $Id: socket_setsockopt.c,v 1.1.1.1 2004-07-26 16:31:20 obarthel Exp $
*
* :ts=4
*
@@ -48,7 +48,7 @@
/****************************************************************************/
int
setsockopt(int sockfd,int level,int optname,const void *optval,int optlen)
setsockopt(int sockfd,int level,int optname,void *optval,int optlen)
{
struct fd * fd;
int result = -1;

View File

@@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 184
#define DATE "28.11.2004"
#define VERS "stack.lib 1.184"
#define VSTRING "stack.lib 1.184 (28.11.2004)\r\n"
#define VERSTAG "\0$VER: stack.lib 1.184 (28.11.2004)"
#define REVISION 168
#define DATE "7.8.2004"
#define VERS "stack.lib 1.168"
#define VSTRING "stack.lib 1.168 (7.8.2004)\r\n"
#define VERSTAG "\0$VER: stack.lib 1.168 (7.8.2004)"

View File

@@ -1 +1 @@
184
168

View File

@@ -1,5 +1,5 @@
/*
* $Id: stat_headers.h,v 1.2 2004-11-14 11:06:27 obarthel Exp $
* $Id: stat_headers.h,v 1.1.1.1 2004-07-26 16:31:22 obarthel Exp $
*
* :ts=4
*
@@ -42,7 +42,7 @@
/****************************************************************************/
extern mode_t NOCOMMON __current_umask;
extern mode_t __current_umask;
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdio_fdhookentry.c,v 1.2 2004-11-28 10:01:26 obarthel Exp $
* $Id: stdio_fdhookentry.c,v 1.1.1.1 2004-07-26 16:31:28 obarthel Exp $
*
* :ts=4
*
@@ -1829,7 +1829,7 @@ __fd_hook_entry(
SHOWMSG("changing the mode");
if(message->arg != 0)
if(message->block)
mode = 0; /* buffered mode */
else
mode = 1; /* single character mode */

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdio_headers.h,v 1.5 2004-11-28 10:01:26 obarthel Exp $
* $Id: stdio_headers.h,v 1.2 2004-08-07 09:15:32 obarthel Exp $
*
* :ts=4
*
@@ -252,8 +252,6 @@ struct iob
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). */
/****************************************************************************/
@@ -308,8 +306,7 @@ enum file_hook_action_t
file_hook_action_info,
file_hook_action_duplicate_fd,
file_hook_action_seek_and_extend,
file_hook_action_is_interactive,
file_hook_action_set_async
file_hook_action_is_interactive
};
/****************************************************************************/
@@ -327,7 +324,7 @@ struct file_hook_message
struct flock * lock; /* Record locking request */
int command; /* What kind of locking command was sent */
int arg; /* Whether or not this file should
int block; /* Whether or not this file should
be set non-blocking */
uid_t owner;
@@ -350,22 +347,22 @@ struct file_hook_message
/****************************************************************************/
/* The file handle table. */
extern struct iob ** NOCOMMON __iob;
extern int NOCOMMON __num_iob;
extern struct iob ** __iob;
extern int __num_iob;
/****************************************************************************/
/* The file descriptor table. */
extern struct fd ** NOCOMMON __fd;
extern int NOCOMMON __num_fd;
extern struct fd ** __fd;
extern int __num_fd;
/****************************************************************************/
extern char * NOCOMMON __file_lock_semaphore_name;
extern char * __file_lock_semaphore_name;
/****************************************************************************/
extern BOOL NOCOMMON __no_standard_io;
extern BOOL __no_standard_io;
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdio_init_exit.c,v 1.2 2004-09-29 14:17:44 obarthel Exp $
* $Id: stdio_init_exit.c,v 1.1.1.1 2004-07-26 16:31:36 obarthel Exp $
*
* :ts=4
*
@@ -52,7 +52,7 @@
/****************************************************************************/
void
__close_all_files(void)
__stdio_exit(void)
{
int i;
@@ -60,7 +60,7 @@ __close_all_files(void)
__check_abort_enabled = FALSE;
if(__iob != NULL && __num_iob > 0)
if(__iob != NULL)
{
for(i = 0 ; i < __num_iob ; i++)
{
@@ -72,7 +72,7 @@ __close_all_files(void)
__iob = NULL;
}
if(__fd != NULL && __num_fd > 0)
if(__fd != NULL)
{
for(i = 0 ; i < __num_fd ; i++)
{
@@ -89,17 +89,6 @@ __close_all_files(void)
/****************************************************************************/
CLIB_DESTRUCTOR(__stdio_exit)
{
ENTER();
__close_all_files();
LEAVE();
}
/****************************************************************************/
int
__stdio_init(void)
{

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdio_openiob.c,v 1.3 2004-11-03 15:39:04 obarthel Exp $
* $Id: stdio_openiob.c,v 1.1.1.1 2004-07-26 16:31:37 obarthel Exp $
*
* :ts=4
*
@@ -48,7 +48,9 @@ __open_iob(const char *filename, const char *mode, int file_descriptor, int slot
{
ULONG file_flags;
int result = -1;
char actual_mode[8];
int open_mode;
size_t mode_len,len,i;
struct fd * fd = NULL;
STRPTR buffer = NULL;
STRPTR aligned_buffer;
@@ -84,49 +86,78 @@ __open_iob(const char *filename, const char *mode, int file_descriptor, int slot
}
}
/* The first character selects the access mode: read, write or append. */
switch(mode[0])
/* Options can follow the mode string, separated by a comma.
* We don't support any of those.
*/
len = mode_len = strlen(mode);
for(i = 0 ; i < len ; i++)
{
case 'r':
if(mode[i] == ',')
{
mode_len = i;
break;
}
}
SHOWMSG("read mode");
/* Keep only the first few letters of the mode string. */
if(mode_len > sizeof(actual_mode)-1)
mode_len = sizeof(actual_mode)-1;
memmove(actual_mode,mode,mode_len);
actual_mode[mode_len] = '\0';
SHOWSTRING(actual_mode);
if(strcmp(actual_mode,"r") == SAME || strcmp(actual_mode,"rb") == SAME)
{
SHOWMSG("read-only");
open_mode = O_RDONLY;
break;
case 'w':
SHOWMSG("write mode");
file_flags = IOBF_READ;
}
else if (strcmp(actual_mode,"w") == SAME || strcmp(actual_mode,"wb") == SAME)
{
SHOWMSG("write-only");
open_mode = O_WRONLY | O_CREAT | O_TRUNC;
break;
case 'a':
SHOWMSG("append mode");
file_flags = IOBF_WRITE;
}
else if (strcmp(actual_mode,"a") == SAME || strcmp(actual_mode,"ab") == SAME)
{
SHOWMSG("write-only; append");
open_mode = O_WRONLY | O_CREAT | O_APPEND;
break;
file_flags = IOBF_WRITE;
}
else if (strcmp(actual_mode,"r+") == SAME || strcmp(actual_mode,"rb+") == SAME || strcmp(actual_mode,"r+b") == SAME)
{
SHOWMSG("read/write; don't overwrite");
default:
open_mode = O_RDWR;
file_flags = IOBF_READ | IOBF_WRITE;
}
else if (strcmp(actual_mode,"w+") == SAME || strcmp(actual_mode,"wb+") == SAME || strcmp(actual_mode,"w+b") == SAME)
{
SHOWMSG("read/write; overwrite");
D(("unsupported file open mode '%lc'",mode[0]));
open_mode = O_RDWR | O_CREAT | O_TRUNC;
file_flags = IOBF_READ | IOBF_WRITE;
}
else if (strcmp(actual_mode,"a+") == SAME || strcmp(actual_mode,"ab+") == SAME || strcmp(actual_mode,"a+b") == SAME)
{
SHOWMSG("read/write; append; don't overwrite");
open_mode = O_RDWR | O_CREAT | O_APPEND;
file_flags = IOBF_READ | IOBF_WRITE;
}
else
{
SHOWMSG("unsupported file open mode");
errno = EINVAL;
goto out;
}
/* If the second or third character is a '+', switch to read/write mode. */
if((mode[1] == '+') || (mode[1] != '\0' && mode[2] == '+'))
{
SHOWMSG("read/write access");
CLEAR_FLAG(open_mode,O_RDONLY);
CLEAR_FLAG(open_mode,O_WRONLY);
SET_FLAG(open_mode,O_RDWR);
}
SHOWMSG("allocating file buffer");
/* Allocate a little more memory than necessary. */
@@ -162,21 +193,12 @@ __open_iob(const char *filename, const char *mode, int file_descriptor, int slot
CLEAR_FLAG(fd->fd_Flags,FDF_APPEND);
}
/* Figure out the buffered file access mode by looking at the open mode. */
file_flags = IOBF_IN_USE | IOBF_NO_NUL;
if(FLAG_IS_SET(open_mode,O_RDONLY) || FLAG_IS_SET(open_mode,O_RDWR))
SET_FLAG(file_flags,IOBF_READ);
if(FLAG_IS_SET(open_mode,O_WRONLY) || FLAG_IS_SET(open_mode,O_RDWR))
SET_FLAG(file_flags,IOBF_WRITE);
__initialize_iob(file,(HOOKFUNC)__iob_hook_entry,
buffer,
aligned_buffer,BUFSIZ,
file_descriptor,
slot_number,
file_flags);
IOBF_IN_USE | file_flags | IOBF_NO_NUL);
buffer = NULL;

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdio_popen.c,v 1.3 2004-11-28 09:33:19 obarthel Exp $
* $Id: stdio_popen.c,v 1.2 2004-08-07 09:15:32 obarthel Exp $
*
* :ts=4
*
@@ -94,6 +94,20 @@ pclose(FILE *stream)
/****************************************************************************/
#define SET_TAG(t,v,d) \
do \
{ \
(t)->ti_Tag = (Tag)(v); \
(t)->ti_Data = (ULONG)(d); \
(t)++; \
} \
while(0)
#define END_TAG(t) \
(void)((t)->ti_Tag = TAG_END)
/****************************************************************************/
FILE *
popen(const char *command, const char *type)
{
@@ -104,10 +118,14 @@ popen(const char *command, const char *type)
BPTR input = ZERO;
BPTR output = ZERO;
char pipe_file_name[40];
struct TagItem tags[5];
struct TagItem * tag;
FILE * result = NULL;
LONG status;
unsigned long task_address;
time_t now;
size_t type_len;
char actual_type[8];
int i;
ENTER();
@@ -132,36 +150,6 @@ popen(const char *command, const char *type)
if(__check_abort_enabled)
__check_abort();
/* The first character selects the access mode: read or write. We don't
support anything else. */
switch(type[0])
{
case 'r':
SHOWMSG("read mode");
break;
case 'w':
SHOWMSG("write mode");
break;
default:
D(("unsupported access mode '%lc'",type[0]));
errno = EINVAL;
goto out;
}
/* The current PIPE: device only supports unidirectional connections. */
if((type[1] == '+') || (type[1] != '\0' && type[2] == '+'))
{
D(("unsupported access mode '%s'",type));
errno = EINVAL;
goto out;
}
#if defined(UNIX_PATH_SEMANTICS)
{
if(__unix_path_semantics)
@@ -249,10 +237,33 @@ popen(const char *command, const char *type)
}
#endif /* UNIX_PATH_SEMANTICS */
/* Build a (hopefully) unique name for the pipe stream to open. We
construct it from the current process address, converted into
an octal number, followed by the current time (in seconds),
converted into another octal number. */
/* Skip any options following the comma. */
type_len = strlen(type);
for(i = 0 ; i < (int)type_len ; i++)
{
if(type[i] == ',')
{
type_len = i;
break;
}
}
/* Keep only the first few letters of the type string. */
if(type_len > sizeof(actual_type)-1)
type_len = sizeof(actual_type)-1;
memmove(actual_type,type,type_len);
actual_type[type_len] = '\0';
/* The current PIPE: device only supports unidirectional connections. */
if(strcmp(actual_type,"r+") == SAME)
{
SHOWMSG("unsupported access mode");
errno = EINVAL;
goto out;
}
strcpy(pipe_file_name,"PIPE:");
task_address = (unsigned long)FindTask(NULL);
@@ -279,27 +290,26 @@ popen(const char *command, const char *type)
PROFILE_OFF();
/* Now open the input and output streams for the program to launch. */
if(type[0] == 'r')
if(strcmp(actual_type,"r") == SAME)
{
/* Read mode: we want to read the output of the program; the program
should read from "NIL:". */
input = Open("NIL:",MODE_NEWFILE);
if(input != ZERO)
output = Open(pipe_file_name,MODE_NEWFILE);
}
else
else if (strcmp(actual_type,"w") == SAME)
{
/* Write mode: we want to send data to the program; the program
should write to "NIL:". */
input = Open(pipe_file_name,MODE_NEWFILE);
if(input != ZERO)
output = Open("NIL:",MODE_NEWFILE);
}
else
{
errno = EINVAL;
goto out;
}
PROFILE_ON();
/* Check if both I/O streams could be opened. */
if(input == ZERO || output == ZERO)
{
SHOWMSG("couldn't open the streams");
@@ -308,20 +318,18 @@ popen(const char *command, const char *type)
goto out;
}
tag = tags;
SET_TAG(tag,SYS_Input, input);
SET_TAG(tag,SYS_Output, output);
SET_TAG(tag,SYS_Asynch, TRUE);
SET_TAG(tag,SYS_UserShell, TRUE);
END_TAG(tag);
PROFILE_OFF();
/* Now try to launch the program. */
status = SystemTags((STRPTR)command,
SYS_Input, input,
SYS_Output, output,
SYS_Asynch, TRUE,
SYS_UserShell, TRUE,
TAG_END);
status = SystemTagList((STRPTR)command,tags);
PROFILE_ON();
/* If launching the program returned -1 then it could not be started.
We'll need to close the I/O streams we opened above. */
if(status == -1)
{
SHOWMSG("SystemTagList() failed");
@@ -330,11 +338,8 @@ popen(const char *command, const char *type)
goto out;
}
/* OK, the program is running. Once it terminates, it will automatically
shut down the streams we opened for it. */
input = output = ZERO;
/* Now try to open the pipe we will use to exchange data with the program. */
result = fopen(pipe_file_name,type);
out:

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdio_protos.h,v 1.3 2004-09-29 14:17:44 obarthel Exp $
* $Id: stdio_protos.h,v 1.1.1.1 2004-07-26 16:31:39 obarthel Exp $
*
* :ts=4
*
@@ -65,11 +65,6 @@ struct fd;
/****************************************************************************/
/* stdio_init_exit.c */
void __close_all_files(void);
/****************************************************************************/
/* stdio_translateioerror.c */
extern void __translate_io_error_to_errno(LONG io_error,int * errno_ptr);
extern void __translate_access_io_error_to_errno(LONG io_error,int * errno_ptr);
@@ -205,4 +200,22 @@ extern void __duplicate_fd(struct fd * duplicate_fd,struct fd * original_fd);
/****************************************************************************/
#if defined(FLOATING_POINT_SUPPORT)
/****************************************************************************/
/* stdio_isnotanumber.c */
extern int __is_not_a_number(long double number);
/****************************************************************************/
/* stdio_isinfinity.c */
extern int __is_infinity(long double number);
/****************************************************************************/
#endif /* FLOATING_POINT_SUPPORT */
/****************************************************************************/
#endif /* _STDIO_PROTOS_H */

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdio_puts.c,v 1.2 2004-09-10 07:39:19 obarthel Exp $
* $Id: stdio_puts.c,v 1.1.1.1 2004-07-26 16:31:40 obarthel Exp $
*
* :ts=4
*
@@ -94,7 +94,7 @@ puts(const char *s)
out:
/* Note: if buffering is disabled for this stream, then we still
/* Note: if buffering is disabled for this stdout, then we still
may have buffered data around, queued to be printed right now.
This is intended to improve performance as it takes more effort
to write a single character to a file than to write a bunch. */

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdio_vfprintf.c,v 1.6 2004-10-23 16:38:18 obarthel Exp $
* $Id: stdio_vfprintf.c,v 1.2 2004-08-07 09:15:32 obarthel Exp $
*
* :ts=4
*
@@ -72,7 +72,7 @@
/****************************************************************************/
static int
get_num_leading_digits(__long_double_t v)
get_num_leading_digits(long double v)
{
int num_digits;
@@ -262,6 +262,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
if(arg == NULL)
{
errno = EFAULT;
result = EOF;
goto out;
}
}
@@ -343,6 +344,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
if(arg == NULL)
{
errno = EFAULT;
result = EOF;
goto out;
}
}
@@ -564,6 +566,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
if(arg == NULL)
{
errno = EFAULT;
result = EOF;
goto out;
}
}
@@ -620,6 +623,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
if(arg == NULL)
{
errno = EFAULT;
result = EOF;
goto out;
}
}
@@ -630,26 +634,25 @@ vfprintf(FILE * stream,const char * format, va_list arg)
const char * buffer_stop = &buffer[sizeof(buffer)-1];
char * buffer_start = buffer;
__long_double_t v;
int sign;
long double v;
output_buffer = buffer_start;
D(("sizeof(long double) == %ld",sizeof(v)));
if(parameter_size == parameter_size_long_double)
v = va_arg(arg, __long_double_t);
v = va_arg(arg, long double);
else
v = va_arg(arg, double);
if((sign = isinf(v)) != 0)
if(isinf(v) != 0)
{
SHOWMSG("infinity");
strcpy(output_buffer,"Inf");
output_len = 3;
if(sign < 0)
if(v < 0.0)
SET_FLAG(format_flags,FORMATF_IsNegative);
fill_character = ' ';
@@ -673,7 +676,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
else
{
BOOL strip_trailing_zeroes = FALSE;
__long_double_t roundoff_fudge = 0.0;
long double roundoff_fudge = 0.0;
int max_digits = -1;
int exponent = 0;
int digit;
@@ -710,7 +713,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
/* Figure out whether 'e' or 'f' format should be used. */
if(conversion_type == 'g' || conversion_type == 'e')
{
__long_double_t local_v = v;
long double local_v = v;
int local_exponent = 0;
/* Put one single digit in front of the decimal point. */
@@ -975,12 +978,19 @@ vfprintf(FILE * stream,const char * format, va_list arg)
/* Remove the parameter from the argument vector and
don't produce any output. */
if(parameter_size == parameter_size_long_double)
(void)va_arg(arg, __long_double_t);
(void)va_arg(arg, long double);
else
(void)va_arg(arg, double);
minimum_field_width = 0;
format_flags = 0;
#ifndef NDEBUG
{
output_buffer = "*FLOATING POINT NUMBER*";
output_len = strlen(output_buffer);
}
#endif /* NDEBUG */
CLEAR_FLAG(format_flags,FORMATF_ProduceSign);
CLEAR_FLAG(format_flags,FORMATF_ProduceSpace);
}
#endif /* FLOATING_POINT_SUPPORT */
}
@@ -1002,6 +1012,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
if(arg == NULL)
{
errno = EFAULT;
result = EOF;
goto out;
}
}
@@ -1156,6 +1167,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
if(arg == NULL)
{
errno = EFAULT;
result = EOF;
goto out;
}
}
@@ -1211,6 +1223,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
if(arg == NULL)
{
errno = EFAULT;
result = EOF;
goto out;
}
}
@@ -1229,6 +1242,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
if(short_ptr == NULL)
{
errno = EFAULT;
result = EOF;
goto out;
}
}
@@ -1253,6 +1267,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
if(int_ptr == NULL)
{
errno = EFAULT;
result = EOF;
goto out;
}
}
@@ -1273,6 +1288,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
if(int_ptr == NULL)
{
errno = EFAULT;
result = EOF;
goto out;
}
}
@@ -1294,6 +1310,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
if(int_ptr == NULL)
{
errno = EFAULT;
result = EOF;
goto out;
}
}
@@ -1506,7 +1523,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
may have buffered data around, queued to be printed right now.
This is intended to improve performance as it takes more effort
to write a single character to a file than to write a bunch. */
if(result != EOF && (iob->iob_Flags & IOBF_BUFFER_MODE) == IOBF_BUFFER_MODE_NONE)
if(result > 0 && (iob->iob_Flags & IOBF_BUFFER_MODE) == IOBF_BUFFER_MODE_NONE)
{
if(__iob_write_buffer_is_valid(iob) && __flush_iob_write_buffer(iob) < 0)
result = EOF;

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdio_vfscanf.c,v 1.6 2004-11-08 17:57:52 obarthel Exp $
* $Id: stdio_vfscanf.c,v 1.1.1.1 2004-07-26 16:31:48 obarthel Exp $
*
* :ts=4
*
@@ -105,12 +105,24 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
if(isspace(c))
{
BOOL finished = FALSE;
/* Skip all blank spaces in the stream. */
format++;
while((c = __getc(stream)) != EOF)
while(TRUE)
{
if(isspace(c))
c = __getc(stream);
if(c == EOF)
{
/* Hit the end of the stream. Due to an error? */
if(num_conversions == 0 || ferror(stream))
goto out;
finished = TRUE;
break;
}
else if (isspace(c))
{
total_num_chars_read++;
}
@@ -127,17 +139,8 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
}
}
if(c == EOF)
{
SHOWMSG("end of file");
/* Hit the end of the stream? */
if(num_conversions == 0)
goto out;
/* Finished... */
if(finished)
break;
}
/* Resume scanning. */
continue;
@@ -156,8 +159,8 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
{
SHOWMSG("end of file");
/* Hit the end of the stream. */
if(num_conversions == 0)
/* Hit the end of the stream. Due to an error? */
if(num_conversions == 0 || ferror(stream))
goto out;
break;
@@ -302,11 +305,9 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
break;
/* It's a floating point number. */
case 'e':
case 'E':
case 'f':
case 'e':
case 'g':
case 'G':
conversion_type = 'f';
format++;
@@ -320,7 +321,6 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
case 's': /* string */
case 'u': /* unsigned integer */
case 'x': /* unsigned integer in hexadecimal format */
case 'X': /* unsigned integer in hexadecimal format */
case '%': /* the % character */
case '[': /* a range of characters */
@@ -339,9 +339,21 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
conversion_type != 'n' &&
conversion_type != '[')
{
while((c = __getc(stream)) != EOF)
BOOL finished = FALSE;
while(TRUE)
{
if(isspace(c))
c = __getc(stream);
if(c == EOF)
{
/* Hit the end of the stream. Due to an error? */
if(num_conversions == 0 || ferror(stream))
goto out;
finished = TRUE;
break;
}
else if (isspace(c))
{
total_num_chars_read++;
}
@@ -357,6 +369,9 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
break;
}
}
if(finished)
break;
}
num_chars_processed = 0;
@@ -413,8 +428,8 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
c = __getc(stream);
if(c == EOF)
{
/* Bail out if we hit the end of the stream. */
if(num_conversions == 0)
/* Bail out if we hit the end of the stream or an error occured. */
if(num_conversions == 0 || ferror(stream))
goto out;
break;
@@ -441,8 +456,8 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
{
#if defined(FLOATING_POINT_SUPPORT)
{
__long_double_t sum = 0.0;
__long_double_t new_sum;
long double sum = 0.0;
long double new_sum;
BOOL is_negative = FALSE;
BOOL decimal_point_matches = FALSE;
BOOL have_exponent = FALSE;
@@ -480,7 +495,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
{
SHOWMSG("extended format (long double)");
next_parameter = va_arg(arg,__long_double_t *);
next_parameter = va_arg(arg,long double *);
}
assert( next_parameter != NULL );
@@ -505,7 +520,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
}
else
{
*((__long_double_t *)next_parameter) = 0;
*((long double *)next_parameter) = 0;
}
}
@@ -594,7 +609,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
maximum_field_width--;
}
if(c == EOF && num_chars_processed == 0 && num_conversions == 0)
if(c == EOF && ((num_chars_processed == 0 && num_conversions == 0) || ferror(stream)))
goto out;
}
@@ -854,7 +869,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
}
else
{
*((__long_double_t *)next_parameter) = sum;
*((long double *)next_parameter) = sum;
}
num_assignments++;
@@ -897,7 +912,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
{
SHOWMSG("extended format (long double)");
next_parameter = va_arg(arg,__long_double_t *);
next_parameter = va_arg(arg,long double *);
}
assert( next_parameter != NULL );
@@ -1001,10 +1016,6 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
}
}
/* Chose a base according to the conversion to be
expected. For the 'x' and 'i' we examine the
incoming data rather than commit ourselves to
a peculiar data format now. */
if(conversion_type == 'd' || conversion_type == 'u')
base = 10;
else if (conversion_type == 'o')
@@ -1049,11 +1060,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
* '0x' prefix or just a zero.
*/
c = __getc(stream);
/* This takes care of the '0x' prefix for hexadecimal
numbers ('%x') and also picks the right type of
data for the '%i' type. */
if ((c == 'x' || c == 'X') && (conversion_type == 'x' || conversion_type == 'i'))
if (c == 'x' || c == 'X')
{
/* It's the hex prefix. */
base = 16;
@@ -1068,7 +1075,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
if(maximum_field_width > 0)
maximum_field_width--;
}
else if (isdigit(c) && (conversion_type == 'i')) /* This could be the octal prefix for the '%i' format. */
else if (isdigit(c))
{
/* The preceding '0' was part of the
octal prefix. So we don't really know
@@ -1185,7 +1192,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
}
}
if(c == EOF && num_chars_processed == 0 && num_conversions == 0)
if(c == EOF && ((num_chars_processed == 0 && num_conversions == 0) || ferror(stream)))
goto out;
}
@@ -1291,8 +1298,8 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
/* The conversion is considered to have failed if an EOF was
encountered before any non-whitespace characters could be
converted. */
if(c == EOF && num_chars_processed == 0 && num_conversions == 0)
converted. We also bail out if we hit an error. */
if(c == EOF && (num_chars_processed == 0 || ferror(stream)))
goto out;
}
@@ -1415,8 +1422,8 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
{
SHOWMSG("end of file");
/* Hit the end of the stream. */
if(num_conversions == 0)
/* Hit the end of the stream. Due to an error? */
if(num_conversions == 0 || ferror(stream))
goto out;
break;
@@ -1548,7 +1555,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
maximum_field_width--;
}
if(c == EOF && num_chars_processed == 0 && num_conversions == 0)
if(c == EOF && ((num_chars_processed == 0 && num_conversions == 0) || ferror(stream)))
goto out;
}
@@ -1562,6 +1569,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
}
}
if(num_conversions > 0)
result = num_assignments;
out:

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdlib_constructor_begin.c,v 1.2 2004-09-29 19:57:57 obarthel Exp $
* $Id: stdlib_constructor_begin.c,v 1.1.1.1 2004-07-26 16:31:52 obarthel Exp $
*
* :ts=4
*
@@ -42,7 +42,80 @@
/****************************************************************************/
#if defined(__SASC)
#if defined(__amigaos4__)
/****************************************************************************/
/*
* Dummy constructor and destructor array. The linker script will put these at the
* very beginning of section ".ctors" and ".dtors". crtend.o contains a similar entry
* with a NULL pointer entry and is put at the end of the sections. This way, the init
* code can find the global constructor/destructor pointers
*/
static void (*__CTOR_LIST__[1]) (void) __attribute__((section(".ctors"))) = { (void *)-1 };
static void (*__DTOR_LIST__[1]) (void) __attribute__((section(".dtors"))) = { (void *)-1 };
/****************************************************************************/
static void
_do_ctors(void)
{
void (**pFuncPtr)(void);
/* Skip the first entry in the list (it's -1 anyway) */
pFuncPtr = __CTOR_LIST__ + 1;
/* Call all constructors in forward order */
while (*pFuncPtr != NULL)
(**pFuncPtr++)();
}
/****************************************************************************/
static void
_do_dtors(void)
{
static ULONG i = ~0UL;
void (**pFuncPtr)(void);
if(i == ~0UL)
{
ULONG j = (ULONG)__DTOR_LIST__[0];
if(j == ~0UL)
{
/* Find the end of the destructors list. */
j = 1;
while(__DTOR_LIST__[j] != NULL)
j++;
/* We're at the NULL entry now. Go back by one. */
j--;
}
i = j;
}
/* If one of the destructors drops into
* exit(), processing will continue with
* the next following destructor.
*/
(void)setjmp(__exit_jmp_buf);
/* Call all destructors in reverse order. */
pFuncPtr = &__DTOR_LIST__[i];
while(i > 0)
{
i--;
(**pFuncPtr--)();
}
}
/****************************************************************************/
#elif defined(__SASC)
/****************************************************************************/
@@ -128,23 +201,11 @@ _do_ctors(void)
ULONG nptrs = (ULONG)__CTOR_LIST__[0];
ULONG i;
ENTER();
D(("there are %ld constructors to be called",nptrs));
/* Call all constructors in forward order */
for(i = 0 ; i < nptrs ; i++)
{
D(("calling constructor #%ld, 0x%08lx",i,__CTOR_LIST__[1+i]));
__CTOR_LIST__[1+i]();
}
SHOWMSG("all done.");
LEAVE();
}
/****************************************************************************/
static void
@@ -155,10 +216,6 @@ _do_dtors(void)
ULONG nptrs = (ULONG)__DTOR_LIST__[0];
static ULONG i;
ENTER();
D(("there are %ld destructors to be called",nptrs));
/* If one of the destructors drops into
* exit(), processing will continue with
* the next following destructor.
@@ -167,17 +224,9 @@ _do_dtors(void)
/* Call all destructors in reverse order */
while(i++ < nptrs)
{
D(("calling destructor #%ld, 0x%08lx",i,__DTOR_LIST__[1+nptrs - i]));
__DTOR_LIST__[1+nptrs - i]();
}
SHOWMSG("all done.");
LEAVE();
}
/****************************************************************************/
#endif /*__amigaos4__ */

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdlib_data.c,v 1.3 2004-11-14 11:06:27 obarthel Exp $
* $Id: stdlib_data.c,v 1.1.1.1 2004-07-26 16:31:53 obarthel Exp $
*
* :ts=4
*
@@ -84,18 +84,22 @@ ULONG __stk_extensions;
/****************************************************************************/
struct Library * __UtilityBase;
struct Library * __LocaleBase;
/****************************************************************************/
#if defined(__amigaos4__)
struct UtilityIFace * __IUtility;
struct LocaleIFace * __ILocale;
#endif /* __amigaos4__ */
/****************************************************************************/
#if defined(__SASC)
UBYTE * __base;
#endif /* __SASC */
/****************************************************************************/
struct Library * __UtilityBase;
/****************************************************************************/
#if defined(__amigaos4__)
struct UtilityIFace * __IUtility;
#endif /* __amigaos4__ */

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdlib_exit.c,v 1.2 2004-11-14 11:06:27 obarthel Exp $
* $Id: stdlib_exit.c,v 1.1.1.1 2004-07-26 16:31:54 obarthel Exp $
*
* :ts=4
*
@@ -42,6 +42,10 @@ int __exit_value = RETURN_FAIL;
/****************************************************************************/
extern void __exit_trap_trigger(void);
/****************************************************************************/
void
_exit(int return_code)
{

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdlib_headers.h,v 1.2 2004-11-14 11:06:27 obarthel Exp $
* $Id: stdlib_headers.h,v 1.1.1.1 2004-07-26 16:31:56 obarthel Exp $
*
* :ts=4
*
@@ -157,79 +157,81 @@ struct LocalVariable
/****************************************************************************/
extern struct LocalVariable * NOCOMMON __lv_root;
extern struct LocalVariable * __lv_root;
/****************************************************************************/
extern unsigned NOCOMMON __random_seed;
extern unsigned __random_seed;
/****************************************************************************/
extern struct MemoryTree NOCOMMON __memory_tree;
extern struct MinList NOCOMMON __memory_list;
extern APTR NOCOMMON __memory_pool;
extern struct MemoryTree __memory_tree;
extern struct MinList __memory_list;
extern APTR __memory_pool;
/****************************************************************************/
extern struct MinList NOCOMMON __alloca_memory_list;
extern struct MinList __alloca_memory_list;
/****************************************************************************/
extern unsigned long NOCOMMON __maximum_memory_allocated;
extern unsigned long NOCOMMON __current_memory_allocated;
extern unsigned long NOCOMMON __maximum_num_memory_chunks_allocated;
extern unsigned long NOCOMMON __current_num_memory_chunks_allocated;
extern unsigned long __maximum_memory_allocated;
extern unsigned long __current_memory_allocated;
extern unsigned long __maximum_num_memory_chunks_allocated;
extern unsigned long __current_num_memory_chunks_allocated;
/****************************************************************************/
extern jmp_buf NOCOMMON __exit_jmp_buf;
extern int NOCOMMON __exit_value;
extern jmp_buf __exit_jmp_buf;
extern int __exit_value;
/****************************************************************************/
extern unsigned int NOCOMMON (* __get_default_stack_size)(void);
extern unsigned int (* __get_default_stack_size)(void);
/****************************************************************************/
extern unsigned int NOCOMMON __stack_size;
extern BOOL NOCOMMON __stack_overflow;
extern UBYTE * NOCOMMON __stk_limit;
extern UBYTE * NOCOMMON __base;
extern unsigned int __stack_size;
extern BOOL __stack_overflow;
extern UBYTE * __stk_limit;
/*extern UBYTE ** __stackborders;*/
/*extern UBYTE * __SaveSP;*/
extern UBYTE * __base;
/****************************************************************************/
extern ULONG NOCOMMON __stk_argbytes;
extern ULONG NOCOMMON __stk_safezone;
extern ULONG NOCOMMON __stk_maxsize;
extern ULONG NOCOMMON __stk_size;
extern ULONG NOCOMMON __stk_extensions;
extern ULONG NOCOMMON __stk_minframe;
extern ULONG __stk_argbytes;
extern ULONG __stk_safezone;
extern ULONG __stk_maxsize;
extern ULONG __stk_size;
extern ULONG __stk_extensions;
extern ULONG __stk_minframe;
/****************************************************************************/
extern BOOL NOCOMMON __is_resident;
extern BOOL __is_resident;
/****************************************************************************/
extern BOOL NOCOMMON __free_program_name;
extern BOOL __free_program_name;
/****************************************************************************/
extern UBYTE NOCOMMON __shell_escape_character;
extern UBYTE __shell_escape_character;
/****************************************************************************/
extern char ** NOCOMMON __argv;
extern int NOCOMMON __argc;
extern char ** __argv;
extern int __argc;
/****************************************************************************/
extern UBYTE * NOCOMMON __quote_vector;
extern UBYTE * __quote_vector;
/****************************************************************************/
extern int NOCOMMON __default_pool_size;
extern int NOCOMMON __default_puddle_size;
extern int __default_pool_size;
extern int __default_puddle_size;
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdlib_locale_utility.h,v 1.2 2004-09-29 19:57:58 obarthel Exp $
* $Id: stdlib_locale_utility.h,v 1.1.1.1 2004-07-26 16:31:57 obarthel Exp $
*
* :ts=4
*
@@ -49,14 +49,8 @@
/****************************************************************************/
#ifndef _MACROS_H
#include "macros.h"
#endif /* _MACROS_H */
/****************************************************************************/
extern struct Library * NOCOMMON __UtilityBase;
extern struct Library * NOCOMMON __LocaleBase;
extern struct Library * __UtilityBase;
extern struct Library * __LocaleBase;
/****************************************************************************/
@@ -64,8 +58,8 @@ extern struct Library * NOCOMMON __LocaleBase;
/****************************************************************************/
extern struct UtilityIFace NOCOMMON * __IUtility;
extern struct LocaleIFace NOCOMMON * __ILocale;
extern struct UtilityIFace * __IUtility;
extern struct LocaleIFace * __ILocale;
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdlib_main.c,v 1.7 2004-11-14 11:43:30 obarthel Exp $
* $Id: stdlib_main.c,v 1.1.1.1 2004-07-26 16:31:58 obarthel Exp $
*
* :ts=4
*
@@ -64,10 +64,7 @@ extern int main(int arg_c,char ** arg_v);
/****************************************************************************/
/* The SAS/C profiling hooks can be used to track call chains. Neat
trick, but not always necessary. Don't enable this unless you know
what you're doing... */
#if defined(__USE_SAS_PROFILING_FOR_MONITORING)
#if 0
/****************************************************************************/
@@ -103,7 +100,7 @@ _EPILOG(REG(a0,char * id))
/****************************************************************************/
#endif /* __USE_SAS_PROFILING_FOR_MONITORING */
#endif
/****************************************************************************/
@@ -111,8 +108,9 @@ static int
call_main(void)
{
/* Initialization functions; must be called exactly in this
order because there are dependencies between the
individual functions. */
* order because there are dependencies between the
* individual functions.
*/
static init_func_ptr init_functions[] =
{
__stdlib_init,
@@ -121,18 +119,31 @@ call_main(void)
__stdio_init,
__machine_test,
__math_init,
__locale_init,
__unistd_init,
__socket_init,
__usergroup_init,
__wildcard_expand_init,
NULL
};
/* Finalization functions; these may be called
essentially in any order. But this one makes the
most sense (roll-back of the corresponding
initialization functions). */
* essentially in any order. But this one makes the
* most sense (roll-back of the corresponding
* initialization functions).
*/
static exit_func_ptr exit_functions[] =
{
__wildcard_expand_exit,
__usergroup_exit,
__socket_exit,
__unistd_exit,
__locale_exit,
__math_exit,
__stdio_exit,
__startup_exit,
__stk_exit,
__stdlib_exit,
NULL
@@ -140,65 +151,41 @@ call_main(void)
static size_t i;
ENTER();
/* This plants the return buffer for _exit(). */
if(setjmp(__exit_jmp_buf) != 0)
goto out;
SHOWMSG("calling init functions");
for(i = 0 ; init_functions[i] != NULL ; i++)
{
D(("calling init function #%ld",i));
if((*init_functions[i])() != OK)
{
SHOWMSG("that didn't work");
goto out;
}
}
SHOWMSG("now invoking the constructors");
/* Go through the constructor list */
_init();
SHOWMSG("done.");
/* If the SAS/C profiling code is set up for printing function
call chains, switch it on now. */
#if defined(__USE_SAS_PROFILING_FOR_MONITORING)
{
show_profile_names = TRUE;
}
#endif /* __USE_SAS_PROFILING_FOR_MONITORING */
//show_profile_names = TRUE;
/* After all these preparations, get this show on the road... */
exit(main((int)__argc,(char **)__argv));
out:
/* Switch off function name printing, if it was enabled. */
#if defined(__USE_SAS_PROFILING_FOR_MONITORING)
{
show_profile_names = FALSE;
}
#endif /* __USE_SAS_PROFILING_FOR_MONITORING */
//show_profile_names = FALSE;
/* If we end up here with the __stack_overflow variable
set then the stack overflow handler dropped into
longjmp() and _exit() did not get called. This
means that we will have to show the error message
and invoke _exit() all on our own. */
* set then the stack overflow handler dropped into
* longjmp() and _exit() did not get called. This
* means that we will have to show the error message
* and invoke _exit() all on our own.
*/
if(__stack_overflow)
{
SHOWMSG("we have a stack overflow");
/* Dump whatever is waiting to be written to the
standard I/O streams, and make sure that no
break signal is about to make things any more
complicated than they already are. */
* standard I/O streams, and make sure that no
* break signal is about to make things any more
* complicated than they already are.
*/
__check_abort_enabled = FALSE;
if(stdout != NULL)
@@ -216,28 +203,20 @@ call_main(void)
/* If necessary, print stack size usage information. */
__stack_usage_exit();
SHOWMSG("invoking the destructors");
/* Go through the destructor list */
_fini();
SHOWMSG("done.");
SHOWMSG("calling the exit functions");
/* Any of the following cleanup routines may call
_exit() by way of abort() or through a hook
function. Which is why we redirect the exit
return procedure. */
* _exit() by way of abort() or through a hook
* function. Which is why we redirect the exit
* return procedure.
*/
for(i = 0 ; exit_functions[i] != NULL ; i++)
{
D(("calling exit function #%ld",i));
if(setjmp(__exit_jmp_buf) == 0)
(*exit_functions[i])();
}
RETURN(__exit_value);
return(__exit_value);
}
@@ -260,12 +239,13 @@ detach_cleanup(REG(d0, LONG UNUSED unused_return_code),REG(d1, BPTR segment_list
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. */
* 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);
@@ -310,7 +290,6 @@ _main(void)
int return_code = RETURN_FAIL;
ULONG current_stack_size;
APTR old_window_pointer;
int os_version;
SysBase = *(struct Library **)4;
@@ -344,26 +323,13 @@ _main(void)
__WBenchMsg = startup_message;
/* Check which minimum operating system version we actually require. */
os_version = 37;
if(__minimum_os_lib_version > 37)
os_version = __minimum_os_lib_version;
/* We will need dos.library V37 and utility.library V37. */
DOSBase = (struct Library *)OpenLibrary("dos.library",os_version);
__UtilityBase = OpenLibrary("utility.library",os_version);
DOSBase = (struct Library *)OpenLibrary("dos.library",37);
__UtilityBase = OpenLibrary("utility.library",37);
if(DOSBase == NULL || __UtilityBase == NULL)
{
char * error_message;
/* If available, use the error message provided by the client. */
if(__minimum_os_lib_error != NULL)
error_message = __minimum_os_lib_error;
else
error_message = "This program requires AmigaOS 2.04 or higher.";
__show_error(error_message);
__show_error("This program requires AmigaOS 2.04 or higher.");
goto out;
}
@@ -381,9 +347,13 @@ _main(void)
}
#endif /* __amigaos4__ */
/* Remember when this program was started. */
DateStamp(&__start_time);
/* If a callback was provided which can fill us in on which
minimum stack size should be used, invoke it now and
store its result in the global __stack_size variable. */
* minimum stack size should be used, invoke it now and
* store its result in the global __stack_size variable.
*/
if(__get_default_stack_size != NULL)
{
unsigned int size;
@@ -397,8 +367,9 @@ _main(void)
current_stack_size = get_stack_size(&this_process->pr_Task);
/* If this is a resident program, don't allow for the detach
code to run. Same goes for launching the program from
Workbench. */
* code to run. Same goes for launching the program from
* Workbench.
*/
if(__is_resident || startup_message != NULL)
{
__detach = FALSE;
@@ -410,51 +381,44 @@ _main(void)
}
/* The following code will be executed if the program is to keep
running in the shell or was launched from Workbench. */
* running in the shell or was launched from Workbench.
*/
if(DO_NOT __detach)
{
int old_priority = this_process->pr_Task.tc_Node.ln_Pri;
/* Change the task priority, if requested. */
if(-128 <= __priority && __priority <= 127)
SetTaskPri((struct Task *)this_process,__priority);
/* Was a minimum stack size requested and do we
need more stack space than was provided for? */
* need more stack space than was provided for?
*/
if(__stack_size > 0 && current_stack_size < (ULONG)__stack_size)
{
struct StackSwapStruct * stk;
unsigned int stack_size;
APTR new_stack;
ULONG lower,upper;
/* Make the stack size a multiple of 32 bytes. */
stack_size = 32 + ((__stack_size + 31UL) & ~31UL);
/* Make the stack size a multiple of 16 bytes. */
stack_size = (__stack_size + 15UL) & ~15UL;
/* Allocate the stack swapping data structure
and the stack space separately. */
stk = AllocVec(sizeof(*stk),MEMF_PUBLIC|MEMF_ANY);
/* We allocate a little more memory so that we can align
the stack to a 128 bit boundary. */
stk = AllocVec(sizeof(*stk) + 15 + stack_size,MEMF_PUBLIC|MEMF_ANY);
if(stk == NULL)
goto out;
new_stack = AllocMem(stack_size,MEMF_PUBLIC|MEMF_ANY);
if(new_stack == NULL)
{
FreeVec(stk);
goto out;
}
/* Align the lower stack bound to a 128 bit boundary, then
fix up the upper bound, which is guaranteed to be on
a 128 bit boundary, too, on account of the stack size
having being rounded to that boundary. */
lower = (((ULONG)(stk+1)) + 15UL) & ~15UL;
upper = lower + stack_size;
/* Fill in the lower and upper bounds, then take care of
the stack pointer itself. */
stk->stk_Lower = new_stack;
stk->stk_Upper = (ULONG)(new_stack) + stack_size;
stk->stk_Pointer = (APTR)(stk->stk_Upper - 32);
stk->stk_Lower = (APTR)lower;
stk->stk_Upper = upper;
stk->stk_Pointer = (APTR)upper;
/* If necessary, set up for stack size usage measurement. */
__stack_usage_init(stk);
return_code = __swap_stack_and_call(stk,(APTR)call_main);
FreeMem(new_stack, stack_size);
FreeVec(stk);
}
else
@@ -462,21 +426,19 @@ _main(void)
/* We have enough room to make the call or just don't care. */
return_code = call_main();
}
/* Restore the task priority. */
SetTaskPri((struct Task *)this_process,old_priority);
}
else
{
struct CommandLineInterface * cli = Cli();
struct TagItem tags[12];
struct TagItem tags[11];
UBYTE program_name[256];
unsigned int stack_size;
int i;
/* Now for the interesting part: detach from the shell we're
currently executing in. This works only if the program is
not reentrant and has not been launched from Workbench. */
* currently executing in. This works only if the program is
* not reentrant and has not been launched from Workbench.
*/
stack_size = __stack_size;
@@ -495,9 +457,9 @@ _main(void)
tags[i]. ti_Tag = NP_StackSize;
tags[i++]. ti_Data = stack_size;
tags[i]. ti_Tag = NP_Name;
tags[i++]. ti_Data = (ULONG)(__process_name != NULL ? (UBYTE *)__process_name : FilePart(program_name));
tags[i++]. ti_Data = (ULONG)program_name;
tags[i]. ti_Tag = NP_CommandName;
tags[i++]. ti_Data = (ULONG)FilePart(program_name);
tags[i++]. ti_Data = (ULONG)program_name;
tags[i]. ti_Tag = NP_Cli;
tags[i++]. ti_Data = TRUE;
tags[i]. ti_Tag = NP_Arguments;
@@ -507,13 +469,6 @@ _main(void)
tags[i]. ti_Tag = NP_ExitData;
tags[i++]. ti_Data = (ULONG)cli->cli_Module;
/* Use a predefined task priority, if requested. */
if(-128 <= __priority && __priority <= 127)
{
tags[i]. ti_Tag = NP_Priority;
tags[i++]. ti_Data = (ULONG)__priority;
}
/* dos.library V50 will free the segment list upon exit. */
if(((struct Library *)DOSBase)->lib_Version >= 50)
{
@@ -600,10 +555,11 @@ _main(void)
/****************************************************************************/
/* The following is automatically called by the main() function through code
inserted by GCC. In theory, this could be removed by updating the machine
definition, but for now we'll just keep this stub around. It is intended
to call the constructor functions, but we do this in our own _main()
anyway. */
* inserted by GCC. In theory, this could be removed by updating the machine
* definition, but for now we'll just keep this stub around. It is intended
* to call the constructor functions, but we do this in our own _main()
* anyway.
*/
#if defined(__GNUC__)

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdlib_math.c,v 1.2 2004-09-29 14:17:44 obarthel Exp $
* $Id: stdlib_math.c,v 1.1.1.1 2004-07-26 16:31:59 obarthel Exp $
*
* :ts=4
*
@@ -41,6 +41,13 @@
/****************************************************************************/
void
__math_exit(void)
{
}
/****************************************************************************/
int
__math_init(void)
{

Some files were not shown because too many files have changed in this diff Show More