mirror of
https://github.com/adtools/clib2.git
synced 2025-12-08 14:59:05 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
baf7257d89 |
@@ -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
|
# :ts=8
|
||||||
#
|
#
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
CC = gcc
|
CC = gcc
|
||||||
AR = ar -q
|
AR = ar -q
|
||||||
RANLIB = ranlib
|
RANLIB = ranlib
|
||||||
COPY = copy clone buf=0
|
COPY = copy clone
|
||||||
DELETE = delete all quiet
|
DELETE = delete all quiet
|
||||||
MAKEDIR = makedir
|
MAKEDIR = makedir
|
||||||
MAKE = make -f GNUmakefile.68k
|
MAKE = make -f GNUmakefile.68k
|
||||||
@@ -40,7 +40,7 @@ endif
|
|||||||
|
|
||||||
.c.o:
|
.c.o:
|
||||||
@echo "Compiling $<"
|
@echo "Compiling $<"
|
||||||
@$(CC) -c $(CFLAGS) $<
|
@$(CC) -c $(CFLAGS) -DIEEE_FLOATING_POINT_SUPPORT $<
|
||||||
|
|
||||||
$(LIBC_OBJS)/%.o : %.c
|
$(LIBC_OBJS)/%.o : %.c
|
||||||
@echo "Compiling $< [$(TYPE):c]"
|
@echo "Compiling $< [$(TYPE):c]"
|
||||||
@@ -106,7 +106,7 @@ INCLUDES = -Iinclude -I. -Inetinclude
|
|||||||
OPTIONS = -DNDEBUG -fno-builtin -DNO_INLINE_STDARG
|
OPTIONS = -DNDEBUG -fno-builtin -DNO_INLINE_STDARG
|
||||||
#OPTIONS = -D__MEM_DEBUG -fno-builtin
|
#OPTIONS = -D__MEM_DEBUG -fno-builtin
|
||||||
#OPTIONS = -DDEBUG -D__MEM_DEBUG -DNO_INLINE_STDARG -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
|
#OPTIMIZE = -O2 -fomit-frame-pointer
|
||||||
#DEBUG = -g2
|
#DEBUG = -g2
|
||||||
|
|
||||||
@@ -144,9 +144,9 @@ C_LIB = \
|
|||||||
fcntl_open.o \
|
fcntl_open.o \
|
||||||
fcntl_read.o \
|
fcntl_read.o \
|
||||||
fcntl_write.o \
|
fcntl_write.o \
|
||||||
fcntl_get_default_file.o \
|
|
||||||
libgen_basename.o \
|
libgen_basename.o \
|
||||||
libgen_dirname.o \
|
libgen_dirname.o \
|
||||||
|
locale_data.o \
|
||||||
locale_init_exit.o \
|
locale_init_exit.o \
|
||||||
locale_localeconv.o \
|
locale_localeconv.o \
|
||||||
locale_setlocale.o \
|
locale_setlocale.o \
|
||||||
@@ -286,10 +286,6 @@ C_LIB = \
|
|||||||
stdlib_modsi3.o \
|
stdlib_modsi3.o \
|
||||||
stdlib_mulsi3.o \
|
stdlib_mulsi3.o \
|
||||||
stdlib_never_free.o \
|
stdlib_never_free.o \
|
||||||
stdlib_osliberror.o \
|
|
||||||
stdlib_oslibversion.o \
|
|
||||||
stdlib_priority.o \
|
|
||||||
stdlib_process_name.o \
|
|
||||||
stdlib_putenv.o \
|
stdlib_putenv.o \
|
||||||
stdlib_qsort.o \
|
stdlib_qsort.o \
|
||||||
stdlib_rand.o \
|
stdlib_rand.o \
|
||||||
@@ -310,8 +306,6 @@ C_LIB = \
|
|||||||
stdlib_startup.o \
|
stdlib_startup.o \
|
||||||
stdlib_strtol.o \
|
stdlib_strtol.o \
|
||||||
stdlib_strtoul.o \
|
stdlib_strtoul.o \
|
||||||
stdlib_strtoll.o \
|
|
||||||
stdlib_strtoull.o \
|
|
||||||
stdlib_swapstack.o \
|
stdlib_swapstack.o \
|
||||||
stdlib_sysbase.o \
|
stdlib_sysbase.o \
|
||||||
stdlib_system.o \
|
stdlib_system.o \
|
||||||
@@ -321,8 +315,8 @@ C_LIB = \
|
|||||||
stdlib_udivsi4.o \
|
stdlib_udivsi4.o \
|
||||||
stdlib_umodsi3.o \
|
stdlib_umodsi3.o \
|
||||||
stdlib_unsetenv.o \
|
stdlib_unsetenv.o \
|
||||||
|
stdlib_usergroup.o \
|
||||||
stdlib_wildcard_expand.o \
|
stdlib_wildcard_expand.o \
|
||||||
stdlib_stdio_window_spec.o \
|
|
||||||
strings_strcasecmp.o \
|
strings_strcasecmp.o \
|
||||||
strings_strncasecmp.o \
|
strings_strncasecmp.o \
|
||||||
string_bcmp.o \
|
string_bcmp.o \
|
||||||
@@ -343,8 +337,6 @@ C_LIB = \
|
|||||||
string_strcspn.o \
|
string_strcspn.o \
|
||||||
string_strdup.o \
|
string_strdup.o \
|
||||||
string_strerror.o \
|
string_strerror.o \
|
||||||
string_strlcat.o \
|
|
||||||
string_strlcpy.o \
|
|
||||||
string_strlen.o \
|
string_strlen.o \
|
||||||
string_strncat.o \
|
string_strncat.o \
|
||||||
string_strncmp.o \
|
string_strncmp.o \
|
||||||
@@ -354,29 +346,24 @@ C_LIB = \
|
|||||||
string_strspn.o \
|
string_strspn.o \
|
||||||
string_strstr.o \
|
string_strstr.o \
|
||||||
string_strtok.o \
|
string_strtok.o \
|
||||||
string_strtok_r.o \
|
|
||||||
string_strxfrm.o \
|
string_strxfrm.o \
|
||||||
time_asctime.o \
|
time_asctime.o \
|
||||||
time_asctime_r.o \
|
|
||||||
time_clock.o \
|
time_clock.o \
|
||||||
time_converttime.o \
|
time_converttime.o \
|
||||||
time_ctime.o \
|
time_ctime.o \
|
||||||
time_ctime_r.o \
|
|
||||||
time_data.o \
|
time_data.o \
|
||||||
time_gettimeofday.o \
|
time_gettimeofday.o \
|
||||||
time_gmtime.o \
|
time_gmtime.o \
|
||||||
time_gmtime_r.o \
|
|
||||||
time_localtime.o \
|
time_localtime.o \
|
||||||
time_localtime_r.o \
|
|
||||||
time_mktime.o \
|
time_mktime.o \
|
||||||
time_numbertostring.o \
|
time_numbertostring.o \
|
||||||
time_strftime.o \
|
time_strftime.o \
|
||||||
time_time.o \
|
time_time.o \
|
||||||
unistd_access.o \
|
unistd_access.o \
|
||||||
unistd_chdir.o \
|
unistd_chdir.o \
|
||||||
unistd_chdir_exit.o \
|
|
||||||
unistd_chown.o \
|
unistd_chown.o \
|
||||||
unistd_currentpathname.o \
|
unistd_currentpathname.o \
|
||||||
|
unistd_data.o \
|
||||||
unistd_dup.o \
|
unistd_dup.o \
|
||||||
unistd_dup2.o \
|
unistd_dup2.o \
|
||||||
unistd_fchown.o \
|
unistd_fchown.o \
|
||||||
@@ -394,11 +381,8 @@ C_LIB = \
|
|||||||
unistd_realpath.o \
|
unistd_realpath.o \
|
||||||
unistd_sleep.o \
|
unistd_sleep.o \
|
||||||
unistd_symlink.o \
|
unistd_symlink.o \
|
||||||
unistd_timer.o \
|
|
||||||
unistd_time_delay.o \
|
|
||||||
unistd_truncate.o \
|
unistd_truncate.o \
|
||||||
unistd_unlink.o \
|
unistd_unlink.o \
|
||||||
unistd_usleep.o \
|
|
||||||
utime_utime.o
|
utime_utime.o
|
||||||
|
|
||||||
UNIX_LIB = \
|
UNIX_LIB = \
|
||||||
@@ -411,7 +395,6 @@ UNIX_LIB = \
|
|||||||
fcntl_creat.o \
|
fcntl_creat.o \
|
||||||
fcntl_fcntl.o \
|
fcntl_fcntl.o \
|
||||||
fcntl_open.o \
|
fcntl_open.o \
|
||||||
fcntl_get_default_file.o \
|
|
||||||
mount_convertinfo.o \
|
mount_convertinfo.o \
|
||||||
mount_statfs.o \
|
mount_statfs.o \
|
||||||
stat_chmod.o \
|
stat_chmod.o \
|
||||||
@@ -437,7 +420,6 @@ UNIX_LIB = \
|
|||||||
stdlib_system.o \
|
stdlib_system.o \
|
||||||
unistd_access.o \
|
unistd_access.o \
|
||||||
unistd_chdir.o \
|
unistd_chdir.o \
|
||||||
unistd_chdir_exit.o \
|
|
||||||
unistd_chown.o \
|
unistd_chown.o \
|
||||||
unistd_getcwd.o \
|
unistd_getcwd.o \
|
||||||
unistd_lchown.o \
|
unistd_lchown.o \
|
||||||
@@ -470,14 +452,12 @@ MATH_LIB = \
|
|||||||
math_floor.o \
|
math_floor.o \
|
||||||
math_fmod.o \
|
math_fmod.o \
|
||||||
math_frexp.o \
|
math_frexp.o \
|
||||||
math_hypot.o \
|
|
||||||
math_init_exit.o \
|
math_init_exit.o \
|
||||||
math_isinf.o \
|
math_isinf.o \
|
||||||
math_isnan.o \
|
math_isnan.o \
|
||||||
math_ldexp.o \
|
math_ldexp.o \
|
||||||
math_log.o \
|
math_log.o \
|
||||||
math_log10.o \
|
math_log10.o \
|
||||||
math_logb.o \
|
|
||||||
math_modf.o \
|
math_modf.o \
|
||||||
math_pow.o \
|
math_pow.o \
|
||||||
math_rint.o \
|
math_rint.o \
|
||||||
@@ -499,6 +479,7 @@ MATH_LIB = \
|
|||||||
stdio_vasprintf.o \
|
stdio_vasprintf.o \
|
||||||
stdio_vfprintf.o \
|
stdio_vfprintf.o \
|
||||||
stdio_vfscanf.o \
|
stdio_vfscanf.o \
|
||||||
|
stdio_vfscanf.o \
|
||||||
stdio_vprintf.o \
|
stdio_vprintf.o \
|
||||||
stdio_vsnprintf.o \
|
stdio_vsnprintf.o \
|
||||||
stdio_vsprintf.o \
|
stdio_vsprintf.o \
|
||||||
@@ -689,7 +670,6 @@ AMIGA_LIB = \
|
|||||||
amiga_newlist.o \
|
amiga_newlist.o \
|
||||||
amiga_rangerand.o \
|
amiga_rangerand.o \
|
||||||
amiga_remtof.o \
|
amiga_remtof.o \
|
||||||
amiga_rexxvars.o \
|
|
||||||
amiga_setsuperattrs.o \
|
amiga_setsuperattrs.o \
|
||||||
amiga_timedelay.o \
|
amiga_timedelay.o \
|
||||||
amiga_waitbeam.o
|
amiga_waitbeam.o
|
||||||
@@ -699,7 +679,8 @@ AMIGA_LIB = \
|
|||||||
LIBS_68K := $(LIBC_OBJS)/libc.a $(LIBSTACK_OBJS)/libstack.a $(LIBUNIX_OBJS)/libunix.a \
|
LIBS_68K := $(LIBC_OBJS)/libc.a $(LIBSTACK_OBJS)/libstack.a $(LIBUNIX_OBJS)/libunix.a \
|
||||||
$(LIBNET_OBJS)/libnet.a $(LIBDEBUG_OBJS)/libdebug.a $(LIBAMIGA_OBJS)/libamiga.a \
|
$(LIBNET_OBJS)/libnet.a $(LIBDEBUG_OBJS)/libdebug.a $(LIBAMIGA_OBJS)/libamiga.a \
|
||||||
$(LIBM_OBJS)/libm.a
|
$(LIBM_OBJS)/libm.a
|
||||||
LIBS_020 := $(LIBM881_OBJS)/libm881.a $(LIBS_68K)
|
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: \
|
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/nrcrt0.o \
|
||||||
lib/nbcrt0.o \
|
lib/nbcrt0.o \
|
||||||
lib/ncrt0.o \
|
lib/ncrt0.o \
|
||||||
@@ -724,12 +710,7 @@ all: \
|
|||||||
lib/n32rcrt0.o \
|
lib/n32rcrt0.o \
|
||||||
lib/mainnb.o \
|
lib/mainnb.o \
|
||||||
lib/mainb.o \
|
lib/mainb.o \
|
||||||
lib/mainb32.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
|
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
@@ -998,3 +979,28 @@ mainb.o : stdlib_main.c
|
|||||||
|
|
||||||
mainnb.o : stdlib_main.c
|
mainnb.o : stdlib_main.c
|
||||||
$(CC) -o mainnb.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -m68000 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
|
||||||
|
|||||||
@@ -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
|
# :ts=8
|
||||||
#
|
#
|
||||||
@@ -35,6 +35,7 @@ ifeq (,$(TYPE))
|
|||||||
LIBC_OBJS = libc_objs
|
LIBC_OBJS = libc_objs
|
||||||
LIBUNIX_OBJS = libunix_objs
|
LIBUNIX_OBJS = libunix_objs
|
||||||
LIBM_OBJS = libm_objs
|
LIBM_OBJS = libm_objs
|
||||||
|
LIBSTACK_OBJS = libstack_objs
|
||||||
LIBNET_OBJS = libnet_objs
|
LIBNET_OBJS = libnet_objs
|
||||||
LIBDEBUG_OBJS = libdebug_objs
|
LIBDEBUG_OBJS = libdebug_objs
|
||||||
LIBAMIGA_OBJS = libamiga_objs
|
LIBAMIGA_OBJS = libamiga_objs
|
||||||
@@ -42,6 +43,7 @@ else
|
|||||||
LIBC_OBJS = $(TYPE)/libc_objs
|
LIBC_OBJS = $(TYPE)/libc_objs
|
||||||
LIBUNIX_OBJS = $(TYPE)/libunix_objs
|
LIBUNIX_OBJS = $(TYPE)/libunix_objs
|
||||||
LIBM_OBJS = $(TYPE)/libm_objs
|
LIBM_OBJS = $(TYPE)/libm_objs
|
||||||
|
LIBSTACK_OBJS = $(TYPE)/libstack_objs
|
||||||
LIBNET_OBJS = $(TYPE)/libnet_objs
|
LIBNET_OBJS = $(TYPE)/libnet_objs
|
||||||
LIBDEBUG_OBJS = $(TYPE)/libdebug_objs
|
LIBDEBUG_OBJS = $(TYPE)/libdebug_objs
|
||||||
LIBAMIGA_OBJS = $(TYPE)/libamiga_objs
|
LIBAMIGA_OBJS = $(TYPE)/libamiga_objs
|
||||||
@@ -49,10 +51,9 @@ endif
|
|||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
# General build rules for all object files and the individual libraries
|
|
||||||
%.o : %.c
|
%.o : %.c
|
||||||
@echo "Compiling $<"
|
@echo "Compiling $<"
|
||||||
@$(CC) -c $(CFLAGS) $<
|
@$(CC) -c $(CFLAGS) -DPPC_FLOATING_POINT_SUPPORT $<
|
||||||
|
|
||||||
$(LIBC_OBJS)/%.o : %.c
|
$(LIBC_OBJS)/%.o : %.c
|
||||||
@echo "Compiling $< [$(TYPE):c]"
|
@echo "Compiling $< [$(TYPE):c]"
|
||||||
@@ -64,7 +65,11 @@ $(LIBUNIX_OBJS)/%.o : %.c
|
|||||||
|
|
||||||
$(LIBM_OBJS)/%.o : %.c
|
$(LIBM_OBJS)/%.o : %.c
|
||||||
@echo "Compiling $< [$(TYPE):m]"
|
@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
|
$(LIBNET_OBJS)/%.o : %.c
|
||||||
@echo "Compiling $< [$(TYPE):net]"
|
@echo "Compiling $< [$(TYPE):net]"
|
||||||
@@ -80,20 +85,12 @@ $(LIBAMIGA_OBJS)/%.o : %.c
|
|||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
# Build options for the individual libraries
|
|
||||||
ifeq (small_data,$(TYPE))
|
ifeq (small_data,$(TYPE))
|
||||||
CODE_TYPE := -msdata=sysv -DSMALL_DATA
|
CODE_TYPE := -msdata=sysv -DSMALL_DATA
|
||||||
FLOAT_TYPE := -DPPC_FLOATING_POINT_SUPPORT
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq (large_data,$(TYPE))
|
ifeq (large_data,$(TYPE))
|
||||||
CODE_TYPE := -msdata=data
|
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
|
endif
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
@@ -103,15 +100,14 @@ WARNINGS = \
|
|||||||
-Wundef -Wbad-function-cast -Wmissing-declarations -Wconversion
|
-Wundef -Wbad-function-cast -Wmissing-declarations -Wconversion
|
||||||
|
|
||||||
INCLUDES = -Iinclude -I. -I$(SDK_INCLUDE)
|
INCLUDES = -Iinclude -I. -I$(SDK_INCLUDE)
|
||||||
OPTIONS = -DNDEBUG -DUSE_64_BIT_INTS -D__USE_INLINE__ -Wa,-mregnames
|
OPTIONS = -DNDEBUG -DUSE_64_BIT_INTS -fno-builtin -D__USE_INLINE__ -Wa,-mregnames
|
||||||
OPTIMIZE = -O -fomit-frame-pointer -funroll-loops
|
OPTIMIZE = -O3 -fomit-frame-pointer -funroll-loops
|
||||||
#DEBUG = -g
|
#DEBUG = -g
|
||||||
|
|
||||||
CFLAGS = $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(CODE_TYPE) $(INCLUDES)
|
CFLAGS = $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(CODE_TYPE) $(INCLUDES)
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
# All objects files which make up libc.a
|
|
||||||
C_LIB = \
|
C_LIB = \
|
||||||
c.lib_rev.o \
|
c.lib_rev.o \
|
||||||
ctype_isalnum.o \
|
ctype_isalnum.o \
|
||||||
@@ -131,9 +127,9 @@ C_LIB = \
|
|||||||
ctype_table.o \
|
ctype_table.o \
|
||||||
dirent_closedir.o \
|
dirent_closedir.o \
|
||||||
dirent_data.o \
|
dirent_data.o \
|
||||||
dirent_rewinddir.o \
|
|
||||||
dirent_opendir.o \
|
dirent_opendir.o \
|
||||||
dirent_readdir.o \
|
dirent_readdir.o \
|
||||||
|
dirent_rewinddir.o \
|
||||||
errno_data.o \
|
errno_data.o \
|
||||||
fcntl_close.o \
|
fcntl_close.o \
|
||||||
fcntl_creat.o \
|
fcntl_creat.o \
|
||||||
@@ -142,9 +138,9 @@ C_LIB = \
|
|||||||
fcntl_open.o \
|
fcntl_open.o \
|
||||||
fcntl_read.o \
|
fcntl_read.o \
|
||||||
fcntl_write.o \
|
fcntl_write.o \
|
||||||
fcntl_get_default_file.o \
|
|
||||||
libgen_basename.o \
|
libgen_basename.o \
|
||||||
libgen_dirname.o \
|
libgen_dirname.o \
|
||||||
|
locale_data.o \
|
||||||
locale_init_exit.o \
|
locale_init_exit.o \
|
||||||
locale_localeconv.o \
|
locale_localeconv.o \
|
||||||
locale_setlocale.o \
|
locale_setlocale.o \
|
||||||
@@ -252,42 +248,41 @@ C_LIB = \
|
|||||||
stdlib_atol.o \
|
stdlib_atol.o \
|
||||||
stdlib_bsearch.o \
|
stdlib_bsearch.o \
|
||||||
stdlib_calloc.o \
|
stdlib_calloc.o \
|
||||||
stdlib_checkdetach.o \
|
|
||||||
stdlib_constructor.o \
|
|
||||||
stdlib_constructor_begin.o \
|
|
||||||
stdlib_constructor_end.o \
|
|
||||||
stdlib_data.o \
|
stdlib_data.o \
|
||||||
stdlib_default_pool_size.o \
|
stdlib_default_pool_size.o \
|
||||||
stdlib_default_puddle_size.o \
|
stdlib_default_puddle_size.o \
|
||||||
stdlib_destructor.o \
|
stdlib_destructor.o \
|
||||||
stdlib_detach.o \
|
|
||||||
stdlib_disablerequesters.o \
|
stdlib_disablerequesters.o \
|
||||||
stdlib_div.o \
|
stdlib_div.o \
|
||||||
|
stdlib_modsi3.o \
|
||||||
stdlib_divsi3.o \
|
stdlib_divsi3.o \
|
||||||
stdlib_divsi4.o \
|
stdlib_divsi4.o \
|
||||||
stdlib_dosbase.o \
|
stdlib_umodsi3.o \
|
||||||
|
stdlib_udivsi3.o \
|
||||||
|
stdlib_udivsi4.o \
|
||||||
stdlib_exit.o \
|
stdlib_exit.o \
|
||||||
stdlib_free.o \
|
stdlib_free.o \
|
||||||
stdlib_getdefstacksize.o \
|
|
||||||
stdlib_getenv.o \
|
stdlib_getenv.o \
|
||||||
stdlib_getsp.o \
|
stdlib_getsp.o \
|
||||||
stdlib_init_exit.o \
|
stdlib_init_exit.o \
|
||||||
stdlib_isresident.o \
|
|
||||||
stdlib_labs.o \
|
stdlib_labs.o \
|
||||||
stdlib_ldiv.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_machine_test.o \
|
||||||
stdlib_malloc.o \
|
stdlib_malloc.o \
|
||||||
stdlib_math.o \
|
stdlib_math.o \
|
||||||
stdlib_mkdtemp.o \
|
stdlib_mkdtemp.o \
|
||||||
stdlib_mkstemp.o \
|
stdlib_mkstemp.o \
|
||||||
stdlib_mktemp.o \
|
stdlib_mktemp.o \
|
||||||
stdlib_modsi3.o \
|
|
||||||
stdlib_mulsi3.o \
|
stdlib_mulsi3.o \
|
||||||
stdlib_never_free.o \
|
stdlib_never_free.o \
|
||||||
stdlib_osliberror.o \
|
|
||||||
stdlib_oslibversion.o \
|
|
||||||
stdlib_priority.o \
|
|
||||||
stdlib_process_name.o \
|
|
||||||
stdlib_putenv.o \
|
stdlib_putenv.o \
|
||||||
stdlib_qsort.o \
|
stdlib_qsort.o \
|
||||||
stdlib_rand.o \
|
stdlib_rand.o \
|
||||||
@@ -299,28 +294,20 @@ C_LIB = \
|
|||||||
stdlib_showerror.o \
|
stdlib_showerror.o \
|
||||||
stdlib_socket.o \
|
stdlib_socket.o \
|
||||||
stdlib_srand.o \
|
stdlib_srand.o \
|
||||||
stdlib_stackargbytes.o \
|
|
||||||
stdlib_stackcheck.o \
|
stdlib_stackcheck.o \
|
||||||
stdlib_stackoverflow.o \
|
stdlib_stackoverflow.o \
|
||||||
stdlib_stacksafezone.o \
|
stdlib_stacksafezone.o \
|
||||||
stdlib_stacksize.o \
|
stdlib_stacksize.o \
|
||||||
stdlib_stack_usage.o \
|
|
||||||
stdlib_startup.o \
|
stdlib_startup.o \
|
||||||
stdlib_strtol.o \
|
stdlib_strtol.o \
|
||||||
stdlib_strtoul.o \
|
stdlib_strtoul.o \
|
||||||
stdlib_strtoll.o \
|
|
||||||
stdlib_strtoull.o \
|
|
||||||
stdlib_swapstack.o \
|
stdlib_swapstack.o \
|
||||||
stdlib_sysbase.o \
|
|
||||||
stdlib_system.o \
|
stdlib_system.o \
|
||||||
stdlib_termination_message.o \
|
stdlib_termination_message.o \
|
||||||
stdlib_threshold.o \
|
stdlib_threshold.o \
|
||||||
stdlib_udivsi3.o \
|
|
||||||
stdlib_udivsi4.o \
|
|
||||||
stdlib_umodsi3.o \
|
|
||||||
stdlib_unsetenv.o \
|
stdlib_unsetenv.o \
|
||||||
|
stdlib_usergroup.o \
|
||||||
stdlib_wildcard_expand.o \
|
stdlib_wildcard_expand.o \
|
||||||
stdlib_stdio_window_spec.o \
|
|
||||||
strings_strcasecmp.o \
|
strings_strcasecmp.o \
|
||||||
strings_strncasecmp.o \
|
strings_strncasecmp.o \
|
||||||
string_bcmp.o \
|
string_bcmp.o \
|
||||||
@@ -341,8 +328,6 @@ C_LIB = \
|
|||||||
string_strcspn.o \
|
string_strcspn.o \
|
||||||
string_strdup.o \
|
string_strdup.o \
|
||||||
string_strerror.o \
|
string_strerror.o \
|
||||||
string_strlcat.o \
|
|
||||||
string_strlcpy.o \
|
|
||||||
string_strlen.o \
|
string_strlen.o \
|
||||||
string_strncat.o \
|
string_strncat.o \
|
||||||
string_strncmp.o \
|
string_strncmp.o \
|
||||||
@@ -352,29 +337,24 @@ C_LIB = \
|
|||||||
string_strspn.o \
|
string_strspn.o \
|
||||||
string_strstr.o \
|
string_strstr.o \
|
||||||
string_strtok.o \
|
string_strtok.o \
|
||||||
string_strtok_r.o \
|
|
||||||
string_strxfrm.o \
|
string_strxfrm.o \
|
||||||
time_asctime.o \
|
time_asctime.o \
|
||||||
time_asctime_r.o \
|
|
||||||
time_clock.o \
|
time_clock.o \
|
||||||
time_converttime.o \
|
time_converttime.o \
|
||||||
time_ctime.o \
|
time_ctime.o \
|
||||||
time_ctime_r.o \
|
|
||||||
time_data.o \
|
time_data.o \
|
||||||
time_gettimeofday.o \
|
time_gettimeofday.o \
|
||||||
time_gmtime.o \
|
time_gmtime.o \
|
||||||
time_gmtime_r.o \
|
|
||||||
time_localtime.o \
|
time_localtime.o \
|
||||||
time_localtime_r.o \
|
|
||||||
time_mktime.o \
|
time_mktime.o \
|
||||||
time_numbertostring.o \
|
time_numbertostring.o \
|
||||||
time_strftime.o \
|
time_strftime.o \
|
||||||
time_time.o \
|
time_time.o \
|
||||||
unistd_access.o \
|
unistd_access.o \
|
||||||
unistd_chdir.o \
|
unistd_chdir.o \
|
||||||
unistd_chdir_exit.o \
|
|
||||||
unistd_chown.o \
|
unistd_chown.o \
|
||||||
unistd_currentpathname.o \
|
unistd_currentpathname.o \
|
||||||
|
unistd_data.o \
|
||||||
unistd_dup.o \
|
unistd_dup.o \
|
||||||
unistd_dup2.o \
|
unistd_dup2.o \
|
||||||
unistd_fchown.o \
|
unistd_fchown.o \
|
||||||
@@ -392,25 +372,21 @@ C_LIB = \
|
|||||||
unistd_realpath.o \
|
unistd_realpath.o \
|
||||||
unistd_sleep.o \
|
unistd_sleep.o \
|
||||||
unistd_symlink.o \
|
unistd_symlink.o \
|
||||||
unistd_timer.o \
|
|
||||||
unistd_time_delay.o \
|
|
||||||
unistd_truncate.o \
|
unistd_truncate.o \
|
||||||
unistd_unlink.o \
|
unistd_unlink.o \
|
||||||
unistd_usleep.o \
|
utime_utime.o
|
||||||
utime_utime.o
|
|
||||||
|
|
||||||
# All objects files which make up libunix.a
|
|
||||||
UNIX_LIB = \
|
UNIX_LIB = \
|
||||||
unix.lib_rev.o \
|
unix.lib_rev.o \
|
||||||
dirent_closedir.o \
|
dirent_closedir.o \
|
||||||
dirent_data.o \
|
dirent_data.o \
|
||||||
dirent_rewinddir.o \
|
|
||||||
dirent_opendir.o \
|
dirent_opendir.o \
|
||||||
dirent_readdir.o \
|
dirent_readdir.o \
|
||||||
|
dirent_rewinddir.o \
|
||||||
fcntl_creat.o \
|
fcntl_creat.o \
|
||||||
fcntl_fcntl.o \
|
fcntl_fcntl.o \
|
||||||
fcntl_open.o \
|
fcntl_open.o \
|
||||||
fcntl_get_default_file.o \
|
|
||||||
mount_convertinfo.o \
|
mount_convertinfo.o \
|
||||||
mount_statfs.o \
|
mount_statfs.o \
|
||||||
stat_chmod.o \
|
stat_chmod.o \
|
||||||
@@ -420,12 +396,12 @@ UNIX_LIB = \
|
|||||||
stat_rmdir.o \
|
stat_rmdir.o \
|
||||||
stat_stat.o \
|
stat_stat.o \
|
||||||
stdio_fdhookentry.o \
|
stdio_fdhookentry.o \
|
||||||
stdio_fflush.o \
|
|
||||||
stdio_fopen.o \
|
|
||||||
stdio_fopen.o \
|
|
||||||
stdio_init_exit.o \
|
stdio_init_exit.o \
|
||||||
stdio_locksemaphorename.o \
|
stdio_locksemaphorename.o \
|
||||||
stdio_openiob.o \
|
stdio_openiob.o \
|
||||||
|
stdio_fflush.o \
|
||||||
|
stdio_fopen.o \
|
||||||
|
stdio_fopen.o \
|
||||||
stdio_popen.o \
|
stdio_popen.o \
|
||||||
stdio_remove.o \
|
stdio_remove.o \
|
||||||
stdio_rename.o \
|
stdio_rename.o \
|
||||||
@@ -436,7 +412,6 @@ UNIX_LIB = \
|
|||||||
stdlib_system.o \
|
stdlib_system.o \
|
||||||
unistd_access.o \
|
unistd_access.o \
|
||||||
unistd_chdir.o \
|
unistd_chdir.o \
|
||||||
unistd_chdir_exit.o \
|
|
||||||
unistd_chown.o \
|
unistd_chown.o \
|
||||||
unistd_getcwd.o \
|
unistd_getcwd.o \
|
||||||
unistd_lchown.o \
|
unistd_lchown.o \
|
||||||
@@ -455,7 +430,6 @@ UNIX_LIB = \
|
|||||||
unistd_wildcard_expand.o \
|
unistd_wildcard_expand.o \
|
||||||
utime_utime.o
|
utime_utime.o
|
||||||
|
|
||||||
# All objects files which make up libm.a
|
|
||||||
MATH_LIB = \
|
MATH_LIB = \
|
||||||
math_acos.o \
|
math_acos.o \
|
||||||
math_asin.o \
|
math_asin.o \
|
||||||
@@ -470,14 +444,12 @@ MATH_LIB = \
|
|||||||
math_floor.o \
|
math_floor.o \
|
||||||
math_fmod.o \
|
math_fmod.o \
|
||||||
math_frexp.o \
|
math_frexp.o \
|
||||||
math_hypot.o \
|
|
||||||
math_init_exit.o \
|
math_init_exit.o \
|
||||||
math_isnan.o \
|
math_isnan.o \
|
||||||
math_isinf.o \
|
math_isinf.o \
|
||||||
math_ldexp.o \
|
math_ldexp.o \
|
||||||
math_log.o \
|
math_log.o \
|
||||||
math_log10.o \
|
math_log10.o \
|
||||||
math_logb.o \
|
|
||||||
math_modf.o \
|
math_modf.o \
|
||||||
math_pow.o \
|
math_pow.o \
|
||||||
math_rint.o \
|
math_rint.o \
|
||||||
@@ -505,6 +477,7 @@ MATH_LIB = \
|
|||||||
stdio_vasprintf.o \
|
stdio_vasprintf.o \
|
||||||
stdio_vfprintf.o \
|
stdio_vfprintf.o \
|
||||||
stdio_vfscanf.o \
|
stdio_vfscanf.o \
|
||||||
|
stdio_vfscanf.o \
|
||||||
stdio_vprintf.o \
|
stdio_vprintf.o \
|
||||||
stdio_vsnprintf.o \
|
stdio_vsnprintf.o \
|
||||||
stdio_vsprintf.o \
|
stdio_vsprintf.o \
|
||||||
@@ -513,7 +486,48 @@ MATH_LIB = \
|
|||||||
stdlib_strtod.o \
|
stdlib_strtod.o \
|
||||||
time_difftime.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 = \
|
||||||
net.lib_rev.o \
|
net.lib_rev.o \
|
||||||
socket_accept.o \
|
socket_accept.o \
|
||||||
@@ -557,7 +571,6 @@ NET_LIB = \
|
|||||||
socket_socket.o \
|
socket_socket.o \
|
||||||
socket_hook_entry.o \
|
socket_hook_entry.o \
|
||||||
socket_hstrerror.o \
|
socket_hstrerror.o \
|
||||||
stat_umask.o \
|
|
||||||
usergroup_crypt.o \
|
usergroup_crypt.o \
|
||||||
usergroup_data.o \
|
usergroup_data.o \
|
||||||
usergroup_endgrent.o \
|
usergroup_endgrent.o \
|
||||||
@@ -586,12 +599,13 @@ NET_LIB = \
|
|||||||
usergroup_setregid.o \
|
usergroup_setregid.o \
|
||||||
usergroup_setreuid.o \
|
usergroup_setreuid.o \
|
||||||
usergroup_setsid.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 = \
|
||||||
debug.lib_rev.o \
|
debug.lib_rev.o \
|
||||||
debug.o \
|
debug.o \
|
||||||
|
debug_level.o \
|
||||||
debug_cmpstrexec.o \
|
debug_cmpstrexec.o \
|
||||||
debug_kcmpstr.o \
|
debug_kcmpstr.o \
|
||||||
debug_kdofmt.o \
|
debug_kdofmt.o \
|
||||||
@@ -617,10 +631,8 @@ DEBUG_LIB = \
|
|||||||
debug_kputstr1.o \
|
debug_kputstr1.o \
|
||||||
debug_kputstr2.o \
|
debug_kputstr2.o \
|
||||||
debug_kvprintf1.o \
|
debug_kvprintf1.o \
|
||||||
debug_kvprintf2.o \
|
debug_kvprintf2.o
|
||||||
debug_level.o
|
|
||||||
|
|
||||||
# All objects files which make up libamiga.a
|
|
||||||
AMIGA_LIB = \
|
AMIGA_LIB = \
|
||||||
amiga.lib_rev.o \
|
amiga.lib_rev.o \
|
||||||
amiga_acrypt.o \
|
amiga_acrypt.o \
|
||||||
@@ -629,17 +641,10 @@ AMIGA_LIB = \
|
|||||||
amiga_argarrayinit.o \
|
amiga_argarrayinit.o \
|
||||||
amiga_argint.o \
|
amiga_argint.o \
|
||||||
amiga_argstring.o \
|
amiga_argstring.o \
|
||||||
amiga_beginio.o \
|
|
||||||
amiga_callhooka.o \
|
amiga_callhooka.o \
|
||||||
amiga_coercemethod.o \
|
amiga_coercemethod.o \
|
||||||
amiga_createextio.o \
|
|
||||||
amiga_createport.o \
|
|
||||||
amiga_createstdio.o \
|
amiga_createstdio.o \
|
||||||
amiga_createtask.o \
|
|
||||||
amiga_deleteextio.o \
|
|
||||||
amiga_deleteport.o \
|
|
||||||
amiga_deletestdio.o \
|
amiga_deletestdio.o \
|
||||||
amiga_deletetask.o \
|
|
||||||
amiga_domethod.o \
|
amiga_domethod.o \
|
||||||
amiga_dosupermethod.o \
|
amiga_dosupermethod.o \
|
||||||
amiga_dotimer.o \
|
amiga_dotimer.o \
|
||||||
@@ -647,62 +652,49 @@ AMIGA_LIB = \
|
|||||||
amiga_freeievents.o \
|
amiga_freeievents.o \
|
||||||
amiga_hotkey.o \
|
amiga_hotkey.o \
|
||||||
amiga_invertstring.o \
|
amiga_invertstring.o \
|
||||||
amiga_newlist.o \
|
|
||||||
amiga_rangerand.o \
|
amiga_rangerand.o \
|
||||||
amiga_remtof.o \
|
amiga_remtof.o \
|
||||||
amiga_rexxvars.o \
|
|
||||||
amiga_setsuperattrs.o \
|
amiga_setsuperattrs.o \
|
||||||
amiga_timedelay.o \
|
amiga_timedelay.o \
|
||||||
amiga_waitbeam.o
|
amiga_waitbeam.o
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
# The libraries to be built, prefixed by the respective path names
|
LIBS := $(LIBC_OBJS)/libc.a $(LIBSTACK_OBJS)/libstack.a $(LIBUNIX_OBJS)/libunix.a \
|
||||||
LIBS := \
|
$(LIBDEBUG_OBJS)/libdebug.a $(LIBAMIGA_OBJS)/libamiga.a \
|
||||||
$(LIBC_OBJS)/libc.a \
|
$(LIBM_OBJS)/libm.a $(LIBNET_OBJS)/libnet.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
|
STARTUPS := crt0.o crtbegin.o crtend.o mainnb.o
|
||||||
# to build the startup object files and finally the libraries
|
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
all: \
|
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/crt0.o \
|
||||||
lib/crtbegin.o \
|
lib/crtbegin.o \
|
||||||
lib/crtend.o \
|
lib/crtend.o \
|
||||||
lib/mainb.o \
|
|
||||||
lib/mainnb.o \
|
lib/mainnb.o \
|
||||||
lib/libm.a \
|
lib/libm.a
|
||||||
lib/small-data/libm.a \
|
|
||||||
lib/soft-float/libm.a
|
copy:
|
||||||
|
$(COPY) $(foreach file,$(LIBS),large_data/$(file)) lib
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
# Delete all object files and libraries
|
|
||||||
clean:
|
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:
|
version:
|
||||||
cp c.lib_rev.rev amiga.lib_rev.rev
|
cp c.lib_rev.rev amiga.lib_rev.rev
|
||||||
cp c.lib_rev.rev debug.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-tag:
|
||||||
cvs -q tag V1_`cat c.lib_rev.rev`
|
cvs -q tag V1_`cat c.lib_rev.rev`
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
# This target first creates a directory to store the object files in, then
|
kitchen_sink: $(TYPE) $(LIBS) $(STARTUPS)
|
||||||
# proceeds to build the libraries from the code. It is invoked by the
|
|
||||||
# individual library build targets below.
|
##############################################################################
|
||||||
all_libraries: $(TYPE) $(LIBS)
|
|
||||||
|
ifneq (,$(TYPE))
|
||||||
|
$(TYPE):
|
||||||
|
$(MAKEDIR) $@
|
||||||
|
endif
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
# These create the required subdirectories to store object files and
|
|
||||||
# libraries in
|
|
||||||
lib:
|
lib:
|
||||||
-$(MAKEDIR) $@
|
-$(MAKEDIR) $@
|
||||||
|
|
||||||
lib/small-data: lib
|
lib/libm.a: lib
|
||||||
-$(MAKEDIR) $@
|
$(MAKE) TYPE=large_data kitchen_sink
|
||||||
|
|
||||||
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
|
|
||||||
$(COPY) $(foreach file,$(LIBS),large_data/$(file)) lib
|
$(COPY) $(foreach file,$(LIBS),large_data/$(file)) lib
|
||||||
|
|
||||||
##############################################################################
|
lib/small-data/libm.a: lib lib/small-data
|
||||||
|
$(MAKE) TYPE=small_data kitchen_sink
|
||||||
# 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
|
|
||||||
$(COPY) $(foreach file,$(LIBS),small_data/$(file)) lib/small-data
|
$(COPY) $(foreach file,$(LIBS),small_data/$(file)) lib/small-data
|
||||||
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
# Rules to build and move the startup code
|
|
||||||
lib/crt0.o : lib crt0.o
|
lib/crt0.o : lib crt0.o
|
||||||
$(COPY) crt0.o lib
|
$(COPY) crt0.o lib
|
||||||
|
|
||||||
@@ -805,46 +756,24 @@ lib/mainnb.o : lib mainnb.o
|
|||||||
lib/mainb.o : lib mainb.o
|
lib/mainb.o : lib mainb.o
|
||||||
$(COPY) mainb.o lib
|
$(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
|
$(LIBAMIGA_OBJS)/amiga_hookentry.o : amiga_hookentry.c
|
||||||
# 'C' source files rather than the assembly language source files of the
|
|
||||||
# same name (e.g. stdlib_getsp.c instead of stdlib_getsp.asm).
|
|
||||||
$(LIBC_OBJS)/stdlib_getsp.o : stdlib_getsp.c
|
$(LIBC_OBJS)/stdlib_getsp.o : stdlib_getsp.c
|
||||||
|
|
||||||
$(LIBC_OBJS)/stdlib_swapstack.o : stdlib_swapstack.c
|
$(LIBC_OBJS)/stdlib_swapstack.o : stdlib_swapstack.c
|
||||||
|
|
||||||
$(LIBC_OBJS)/stdlib_setjmp.o : stdlib_setjmp.c
|
$(LIBC_OBJS)/stdlib_setjmp.o : stdlib_setjmp.c
|
||||||
|
|
||||||
##############################################################################
|
$(LIBSTACK_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
|
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
# Build rules for the debug version of the library which has special
|
$(LIBC_OBJS)/stdlib_stacksize.o : stdlib_stacksize.c stdlib_gcc_help.h
|
||||||
# memory allocation debugging code, controlled by the contents of
|
|
||||||
# the stdlib_mem_debug.h file.
|
$(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_alloca.o : stdlib_alloca.c stdlib_mem_debug.h
|
||||||
|
|
||||||
$(LIBC_OBJS)/stdlib_calloc.o : stdlib_calloc.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) :
|
$(LIBC_OBJS) :
|
||||||
$(MAKEDIR) $@
|
$(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) :
|
$(LIBUNIX_OBJS) :
|
||||||
$(MAKEDIR) $@
|
$(MAKEDIR) $@
|
||||||
|
|
||||||
@@ -883,18 +810,26 @@ $(LIBUNIX_OBJS)/libunix.a : $(LIBUNIX_OBJS) $(foreach file,$(UNIX_LIB),$(LIBUNIX
|
|||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
# Individual build rules for libm.a
|
|
||||||
$(LIBM_OBJS) :
|
$(LIBM_OBJS) :
|
||||||
$(MAKEDIR) $@
|
$(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) $@
|
-$(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) $@
|
$(RANLIB) $@
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
# Individual build rules for libnet.a
|
|
||||||
$(LIBNET_OBJS) :
|
$(LIBNET_OBJS) :
|
||||||
$(MAKEDIR) $@
|
$(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) :
|
$(LIBDEBUG_OBJS) :
|
||||||
$(MAKEDIR) $@
|
$(MAKEDIR) $@
|
||||||
|
|
||||||
@@ -916,7 +850,6 @@ $(LIBDEBUG_OBJS)/libdebug.a : $(LIBDEBUG_OBJS) $(foreach file,$(DEBUG_LIB),$(LIB
|
|||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
# Individual build rules for libamiga.a
|
|
||||||
$(LIBAMIGA_OBJS) :
|
$(LIBAMIGA_OBJS) :
|
||||||
$(MAKEDIR) $@
|
$(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
|
crt0.o : crt0.S
|
||||||
@echo "Assembling $<"
|
@echo "Assembling $<"
|
||||||
@$(CC) -Wa,-mregnames -o crt0.o -c crt0.S
|
@$(CC) -Wa,-mregnames -o crt0.o -c crt0.S
|
||||||
@@ -944,8 +876,11 @@ mainb.o : stdlib_main.c
|
|||||||
@echo "Compiling $<"
|
@echo "Compiling $<"
|
||||||
@$(CC) -o mainb.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -msdata=sysv -DSMALL_DATA stdlib_main.c
|
@$(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
|
mkid:
|
||||||
$(CC) -o bcrtend.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -msdata=sysv -DSMALL_DATA crtend.c
|
# 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
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#define VERSION 1
|
#define VERSION 1
|
||||||
#define REVISION 184
|
#define REVISION 168
|
||||||
#define DATE "28.11.2004"
|
#define DATE "7.8.2004"
|
||||||
#define VERS "amiga.lib 1.184"
|
#define VERS "amiga.lib 1.168"
|
||||||
#define VSTRING "amiga.lib 1.184 (28.11.2004)\r\n"
|
#define VSTRING "amiga.lib 1.168 (7.8.2004)\r\n"
|
||||||
#define VERSTAG "\0$VER: amiga.lib 1.184 (28.11.2004)"
|
#define VERSTAG "\0$VER: amiga.lib 1.168 (7.8.2004)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
184
|
168
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -37,14 +37,6 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#include "debug.h"
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
#ifndef __PPC__
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
#if defined(__SASC)
|
#if defined(__SASC)
|
||||||
|
|
||||||
VOID __begin_io(struct IORequest * ior);
|
VOID __begin_io(struct IORequest * ior);
|
||||||
@@ -72,6 +64,10 @@ VOID __begin_io(struct IORequest * ior);
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
BeginIO(struct IORequest *ior)
|
BeginIO(struct IORequest *ior)
|
||||||
{
|
{
|
||||||
@@ -86,35 +82,3 @@ BeginIO(struct IORequest *ior)
|
|||||||
|
|
||||||
LEAVE();
|
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__ */
|
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -44,12 +44,6 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#if defined(CreateExtIO)
|
|
||||||
#undef CreateExtIO
|
|
||||||
#endif /* CreateExtIO */
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
struct IORequest *
|
struct IORequest *
|
||||||
CreateExtIO(CONST struct MsgPort * port, LONG io_size)
|
CreateExtIO(CONST struct MsgPort * port, LONG io_size)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -44,12 +44,6 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#if defined(CreatePort)
|
|
||||||
#undef CreatePort
|
|
||||||
#endif /* CreatePort */
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
struct MsgPort *
|
struct MsgPort *
|
||||||
CreatePort(CONST_STRPTR name, LONG pri)
|
CreatePort(CONST_STRPTR name, LONG pri)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -44,12 +44,6 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#if defined(CreateStdIO)
|
|
||||||
#undef CreateStdIO
|
|
||||||
#endif /* CreateStdIO */
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
struct IOStdReq *
|
struct IOStdReq *
|
||||||
CreateStdIO(CONST struct MsgPort * port)
|
CreateStdIO(CONST struct MsgPort * port)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -31,6 +31,8 @@
|
|||||||
* POSSIBILITY OF SUCH DAMAGE.
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef __PPC__
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#include <exec/libraries.h>
|
#include <exec/libraries.h>
|
||||||
@@ -51,10 +53,6 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#ifndef __PPC__
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create a task with given name, priority, and stack size.
|
* Create a task with given name, priority, and stack size.
|
||||||
* It will use the default exception and trap handlers for now.
|
* 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__ */
|
#endif /* __PPC__ */
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -44,12 +44,6 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#if defined(DeleteExtIO)
|
|
||||||
#undef DeleteExtIO
|
|
||||||
#endif /* DeleteExtIO */
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
DeleteExtIO(struct IORequest * io)
|
DeleteExtIO(struct IORequest * io)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -44,12 +44,6 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#if defined(DeletePort)
|
|
||||||
#undef DeletePort
|
|
||||||
#endif /* DeletePort */
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
DeletePort(struct MsgPort * port)
|
DeletePort(struct MsgPort * port)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -44,12 +44,6 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#if defined(DeleteStdIO)
|
|
||||||
#undef DeleteStdIO
|
|
||||||
#endif /* DeleteStdIO */
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
DeleteStdIO(struct IOStdReq * io)
|
DeleteStdIO(struct IOStdReq * io)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -41,34 +41,8 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#ifndef __PPC__
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
DeleteTask(struct Task *tc)
|
DeleteTask(struct Task *tc)
|
||||||
{
|
{
|
||||||
RemTask(tc);
|
RemTask(tc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
#if defined(DeleteTask)
|
|
||||||
#undef DeleteTask
|
|
||||||
#endif /* DeleteTask */
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
VOID
|
|
||||||
DeleteTask(struct Task *tc)
|
|
||||||
{
|
|
||||||
IExec->DeleteTask(tc);
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
#endif /* __PPC__ */
|
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
#define VERSION 1
|
#define VERSION 1
|
||||||
#define REVISION 184
|
#define REVISION 168
|
||||||
#define DATE "28.11.2004"
|
#define DATE "7.8.2004"
|
||||||
#define VERS "c.lib 1.184"
|
#define VERS "c.lib 1.168"
|
||||||
#define VSTRING "c.lib 1.184 (28.11.2004)\r\n"
|
#define VSTRING "c.lib 1.168 (7.8.2004)\r\n"
|
||||||
#define VERSTAG "\0$VER: c.lib 1.184 (28.11.2004)"
|
#define VERSTAG "\0$VER: c.lib 1.168 (7.8.2004)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
184
|
168
|
||||||
|
|||||||
3321
library/changes
3321
library/changes
File diff suppressed because it is too large
Load Diff
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -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
|
* :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 kprintf(const char *format,...);
|
||||||
|
extern void abort(void);
|
||||||
|
extern char * __program_name;
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#define VERSION 1
|
#define VERSION 1
|
||||||
#define REVISION 184
|
#define REVISION 168
|
||||||
#define DATE "28.11.2004"
|
#define DATE "7.8.2004"
|
||||||
#define VERS "debug.lib 1.184"
|
#define VERS "debug.lib 1.168"
|
||||||
#define VSTRING "debug.lib 1.184 (28.11.2004)\r\n"
|
#define VSTRING "debug.lib 1.168 (7.8.2004)\r\n"
|
||||||
#define VERSTAG "\0$VER: debug.lib 1.184 (28.11.2004)"
|
#define VERSTAG "\0$VER: debug.lib 1.168 (7.8.2004)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
184
|
168
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
/* Directories being scanned whose locks need to be freed when shutting down. */
|
/* Directories being scanned whose locks need to be freed when shutting down. */
|
||||||
struct MinList NOCOMMON __directory_list;
|
struct MinList __directory_list;
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -42,12 +42,6 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#ifndef _MACROS_H
|
|
||||||
#include "macros.h"
|
|
||||||
#endif /* _MACROS_H */
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
struct DirectoryHandle
|
struct DirectoryHandle
|
||||||
{
|
{
|
||||||
struct MinNode dh_MinNode;
|
struct MinNode dh_MinNode;
|
||||||
@@ -62,7 +56,7 @@ struct DirectoryHandle
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
extern struct MinList NOCOMMON __directory_list;
|
extern struct MinList __directory_list;
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -135,7 +135,7 @@ __close(int file_descriptor,int * error_ptr)
|
|||||||
SHOWMSG("resetting non-blocking access mode");
|
SHOWMSG("resetting non-blocking access mode");
|
||||||
|
|
||||||
message.action = file_hook_action_set_blocking;
|
message.action = file_hook_action_set_blocking;
|
||||||
message.arg = 1;
|
message.block = 1;
|
||||||
|
|
||||||
assert( fd->fd_Hook != NULL );
|
assert( fd->fd_Hook != NULL );
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -126,13 +126,10 @@ fcntl(int file_descriptor, int cmd, ... /* int arg */ )
|
|||||||
|
|
||||||
SHOWMSG("cmd=F_GETFL");
|
SHOWMSG("cmd=F_GETFL");
|
||||||
|
|
||||||
result = 0;
|
|
||||||
|
|
||||||
if(FLAG_IS_SET(fd->fd_Flags,FDF_NON_BLOCKING))
|
if(FLAG_IS_SET(fd->fd_Flags,FDF_NON_BLOCKING))
|
||||||
SET_FLAG(result,O_NONBLOCK);
|
result = O_NONBLOCK;
|
||||||
|
else
|
||||||
if(FLAG_IS_SET(fd->fd_Flags,FDF_ASYNC_IO))
|
result = 0;
|
||||||
SET_FLAG(result,O_ASYNC);
|
|
||||||
|
|
||||||
break;
|
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)))
|
(FLAG_IS_CLEAR(flags,O_NONBLOCK) && FLAG_IS_SET(fd->fd_Flags,FDF_NON_BLOCKING)))
|
||||||
{
|
{
|
||||||
message.action = file_hook_action_set_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 );
|
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);
|
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);
|
va_end(arg);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
|
||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -36,12 +36,6 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif /* __cplusplus */
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
#ifndef assert
|
#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 */
|
#endif /* _ASSERT_H */
|
||||||
|
|||||||
@@ -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
|
* :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;
|
* If requested, reimplement the character classification functions as macros;
|
||||||
* note that the macro variants ignore the current locale and default to the
|
* 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
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|||||||
@@ -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
|
* :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
|
* This will be set to TRUE if the current program was launched from
|
||||||
* the internet superserver ('inetd') or an equivalent facility.
|
* 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.
|
* 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
|
* 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
|
* when it starts. The process->pr_WindowPtr will be automatically restored
|
||||||
@@ -214,20 +180,6 @@ extern BOOL __detach;
|
|||||||
*/
|
*/
|
||||||
extern BOOL (* __check_detach)(void);
|
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
|
* 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
|
* should be launched with. If the startup code finds that there is not enough
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -67,7 +67,6 @@ extern "C" {
|
|||||||
#define O_NONBLOCK (1<<6)
|
#define O_NONBLOCK (1<<6)
|
||||||
#define O_SYNC (0)
|
#define O_SYNC (0)
|
||||||
#define O_NOCTTY (0)
|
#define O_NOCTTY (0)
|
||||||
#define O_ASYNC (1<<7)
|
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -58,12 +58,6 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#define LLONG_MIN (-0x7fffffffffffffffLL-1)
|
|
||||||
#define LLONG_MAX 0x7fffffffffffffffLL
|
|
||||||
#define ULLONG_MAX 0xffffffffffffffffULL
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
#define PATH_MAX 1024
|
#define PATH_MAX 1024
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -89,8 +89,6 @@ extern double rint(double x);
|
|||||||
extern float rintf(float x);
|
extern float rintf(float x);
|
||||||
extern int isinf(double x);
|
extern int isinf(double x);
|
||||||
extern int isnan(double x);
|
extern int isnan(double x);
|
||||||
extern double logb(double x);
|
|
||||||
extern double hypot(double x,double y);
|
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -57,25 +57,12 @@ typedef char * va_list;
|
|||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
#if defined(__GNUC__)
|
||||||
/****************************************************************************/
|
#undef _STDARG_H
|
||||||
|
#include_next "stdarg.h"
|
||||||
#if defined(__GNUC__)
|
#else
|
||||||
|
#error "Unknown compiler"
|
||||||
/* Use the compiler supplied, machine specific <stdarg.h> file. */
|
#endif /* __GNUC__ */
|
||||||
#undef _STDARG_H
|
|
||||||
#include_next "stdarg.h"
|
|
||||||
|
|
||||||
#include <sys/amigaos-va.h>
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#error "Unknown compiler"
|
|
||||||
|
|
||||||
#endif /* __GNUC__ */
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
#endif /* __amigaos4__ */
|
#endif /* __amigaos4__ */
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -62,7 +62,7 @@ extern "C" {
|
|||||||
* correspond to a real limitation for this 'C' runtime library and is
|
* correspond to a real limitation for this 'C' runtime library and is
|
||||||
* included solely for ISO 'C' (1994) compliance.
|
* included solely for ISO 'C' (1994) compliance.
|
||||||
*/
|
*/
|
||||||
#define FOPEN_MAX 64
|
#define FOPEN_MAX 8
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :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(__GNUC__)
|
||||||
#if defined(alloca)
|
#if defined(alloca)
|
||||||
#undef alloca
|
#undef alloca
|
||||||
|
|||||||
@@ -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
|
* :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
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -52,7 +52,7 @@ extern "C" {
|
|||||||
structure and try to get by with this definition. Sometimes it works,
|
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
|
sometimes it doesn't. Not sure if there really is a good solution for
|
||||||
this problem... */
|
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' */
|
/* This will define the 'struct timeval' */
|
||||||
#ifndef DEVICES_TIMER_H
|
|
||||||
#include <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 */
|
#else
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
#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)
|
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
@@ -109,7 +94,11 @@ struct timeval
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#endif /* !__TIMEVAL_ALREADY_DEFINED */
|
#endif /* INCLUDE_VERSION */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#endif /* DEVICES_TIMER_H */
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :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
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|||||||
@@ -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
|
* :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 STDIN_FILENO 0
|
||||||
#define STDOUT_FILENO 1
|
#define STDOUT_FILENO 1
|
||||||
#define STDERR_FILENO 2
|
#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 readlink(const char * path_name, char * buffer, int buffer_size);
|
||||||
extern int chdir(const char * path_name);
|
extern int chdir(const char * path_name);
|
||||||
extern unsigned int sleep(unsigned int seconds);
|
extern unsigned int sleep(unsigned int seconds);
|
||||||
extern void usleep(unsigned long microseconds);
|
|
||||||
extern int getopt(int argc, char * argv[], char *opts);
|
extern int getopt(int argc, char * argv[], char *opts);
|
||||||
extern pid_t getpid(void);
|
extern pid_t getpid(void);
|
||||||
extern char *realpath(const char *file_name, char *resolved_name);
|
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,int *addrlen);
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
extern int accept(int sockfd,struct sockaddr *cliaddr,socklen_t *addrlen);
|
|
||||||
extern int bind(int sockfd,struct sockaddr *name,int namelen);
|
extern int bind(int sockfd,struct sockaddr *name,int namelen);
|
||||||
extern int connect(int sockfd,struct sockaddr *name,socklen_t namelen);
|
extern int connect(int sockfd,struct sockaddr *name,int namelen);
|
||||||
extern struct hostent * gethostbyaddr(const char *addr, socklen_t len, int type);
|
extern struct hostent * gethostbyaddr(const char *addr, int len, int type);
|
||||||
extern struct hostent * gethostbyname(const char *name);
|
extern struct hostent * gethostbyname(const char *name);
|
||||||
extern int gethostname(const char *name, int namelen);
|
extern int gethostname(const char *name, int namelen);
|
||||||
extern struct netent * getnetbyname(const char *name);
|
extern struct netent * getnetbyname(const char *name);
|
||||||
extern int getpeername(int sockfd,struct sockaddr *name,socklen_t *namelen);
|
extern int getpeername(int sockfd,struct sockaddr *name,int *namelen);
|
||||||
extern int getsockname(int sockfd,struct sockaddr *name,socklen_t *namelen);
|
extern int getsockname(int sockfd,struct sockaddr *name,int *namelen);
|
||||||
extern int getsockopt(int sockfd,int level,int optname,void *optval,socklen_t *optlen);
|
extern int getsockopt(int sockfd,int level,int optname,void *optval,int *optlen);
|
||||||
extern unsigned long inet_addr(const char *addr);
|
extern unsigned long inet_addr(const char *addr);
|
||||||
extern char * inet_ntoa(struct in_addr in);
|
extern char * inet_ntoa(struct in_addr in);
|
||||||
extern int ioctl(int fd,unsigned long request, ... /* char *arg */);
|
extern int ioctl(int fd,unsigned long request, ... /* char *arg */);
|
||||||
extern int listen(int sockfd,int backlog);
|
extern int listen(int sockfd,int backlog);
|
||||||
extern int recv(int fd,void *buff,size_t nbytes,int flags);
|
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 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 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 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 sendto(int sockfd,void *buff,int len,int flags,struct sockaddr *to,int tolen);
|
||||||
extern int setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t optlen);
|
extern int setsockopt(int sockfd,int level,int optname,void *optval,int optlen);
|
||||||
extern int shutdown(int socket, int how);
|
extern int shutdown(int socket, int how);
|
||||||
extern int socket(int domain,int type,int protocol);
|
extern int socket(int domain,int type,int protocol);
|
||||||
extern long gethostid(void);
|
extern long gethostid(void);
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -31,6 +31,15 @@
|
|||||||
* POSSIBILITY OF SUCH DAMAGE.
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* We use an invalid priority value to indicate "do not change the program's
|
#ifndef _LOCALE_HEADERS_H
|
||||||
task priority". */
|
#include "locale_headers.h"
|
||||||
int __priority = 256;
|
#endif /* _LOCALE_HEADERS_H */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
struct Locale * __default_locale;
|
||||||
|
struct Locale * __locale_table[NUM_LOCALES];
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
char __locale_name_table[NUM_LOCALES][MAX_LOCALE_NAME_LEN];
|
||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -69,12 +69,12 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
extern struct Locale * NOCOMMON __default_locale;
|
extern struct Locale * __default_locale;
|
||||||
extern struct Locale * NOCOMMON __locale_table[NUM_LOCALES];
|
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];
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :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
|
void
|
||||||
__close_all_locales(void)
|
__close_all_locales(void)
|
||||||
{
|
{
|
||||||
@@ -90,7 +71,8 @@ __close_all_locales(void)
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
CLIB_DESTRUCTOR(__locale_exit)
|
void
|
||||||
|
__locale_exit(void)
|
||||||
{
|
{
|
||||||
ENTER();
|
ENTER();
|
||||||
|
|
||||||
@@ -125,7 +107,8 @@ CLIB_DESTRUCTOR(__locale_exit)
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
CLIB_CONSTRUCTOR(__locale_init)
|
int
|
||||||
|
__locale_init(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -162,6 +145,5 @@ CLIB_CONSTRUCTOR(__locale_init)
|
|||||||
PROFILE_ON();
|
PROFILE_ON();
|
||||||
|
|
||||||
RETURN(OK);
|
RETURN(OK);
|
||||||
|
return(OK);
|
||||||
CONSTRUCTOR_SUCCEED();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#define VERSION 1
|
#define VERSION 1
|
||||||
#define REVISION 184
|
#define REVISION 168
|
||||||
#define DATE "28.11.2004"
|
#define DATE "7.8.2004"
|
||||||
#define VERS "m.lib 1.184"
|
#define VERS "m.lib 1.168"
|
||||||
#define VSTRING "m.lib 1.184 (28.11.2004)\r\n"
|
#define VSTRING "m.lib 1.168 (7.8.2004)\r\n"
|
||||||
#define VERSTAG "\0$VER: m.lib 1.184 (28.11.2004)"
|
#define VERSTAG "\0$VER: m.lib 1.168 (7.8.2004)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
184
|
168
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#define VERSION 1
|
#define VERSION 1
|
||||||
#define REVISION 184
|
#define REVISION 168
|
||||||
#define DATE "28.11.2004"
|
#define DATE "7.8.2004"
|
||||||
#define VERS "m881.lib 1.184"
|
#define VERS "m881.lib 1.168"
|
||||||
#define VSTRING "m881.lib 1.184 (28.11.2004)\r\n"
|
#define VSTRING "m881.lib 1.168 (7.8.2004)\r\n"
|
||||||
#define VERSTAG "\0$VER: m881.lib 1.184 (28.11.2004)"
|
#define VERSTAG "\0$VER: m881.lib 1.168 (7.8.2004)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
184
|
168
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -148,10 +148,8 @@
|
|||||||
#ifndef UNUSED
|
#ifndef UNUSED
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#define UNUSED __attribute__((unused))
|
#define UNUSED __attribute__((unused))
|
||||||
#define NOCOMMON __attribute__((nocommon))
|
|
||||||
#else
|
#else
|
||||||
#define UNUSED /* UNUSED */
|
#define UNUSED /* UNUSED */
|
||||||
#define NOCOMMON /* NOCOMMON */
|
|
||||||
#endif
|
#endif
|
||||||
#endif /* UNUSED */
|
#endif /* UNUSED */
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -226,7 +226,7 @@ acos(double x)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result = 0;
|
result = HUGE_VAL;
|
||||||
errno = EDOM;
|
errno = EDOM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -237,7 +237,7 @@ asin(double x)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result = 0;
|
result = HUGE_VAL;
|
||||||
errno = EDOM;
|
errno = EDOM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -63,7 +63,7 @@ extern double __atan(double x);
|
|||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
INLINE static const double
|
INLINE static const double
|
||||||
__atan2(double y,double x)
|
__atan2(double x,double y)
|
||||||
{
|
{
|
||||||
const double pi = 3.14159265358979323846;
|
const double pi = 3.14159265358979323846;
|
||||||
const double pi_over_2 = pi / 2.0;
|
const double pi_over_2 = pi / 2.0;
|
||||||
@@ -107,7 +107,7 @@ __atan2(double y,double x)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result = 0;
|
result = HUGE_VAL;
|
||||||
errno = EDOM;
|
errno = EDOM;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -135,7 +135,7 @@ __atan(double x)
|
|||||||
}
|
}
|
||||||
|
|
||||||
INLINE static const double
|
INLINE static const double
|
||||||
__atan2(double y,double x)
|
__atan2(double x,double y)
|
||||||
{
|
{
|
||||||
double pi,pi_over_2;
|
double pi,pi_over_2;
|
||||||
double result;
|
double result;
|
||||||
@@ -186,7 +186,7 @@ __atan2(double y,double x)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result = 0;
|
result = HUGE_VAL;
|
||||||
errno = EDOM;
|
errno = EDOM;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -201,6 +201,9 @@ __atan2(double y,double x)
|
|||||||
|
|
||||||
#if defined(PPC_FLOATING_POINT_SUPPORT)
|
#if defined(PPC_FLOATING_POINT_SUPPORT)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static const double
|
static const double
|
||||||
tiny = 1.0e-300,
|
tiny = 1.0e-300,
|
||||||
zero = 0.0,
|
zero = 0.0,
|
||||||
@@ -210,7 +213,7 @@ pi = 3.1415926535897931160E+00, /* 0x400921FB, 0x54442D18 */
|
|||||||
pi_lo = 1.2246467991473531772E-16; /* 0x3CA1A626, 0x33145C07 */
|
pi_lo = 1.2246467991473531772E-16; /* 0x3CA1A626, 0x33145C07 */
|
||||||
|
|
||||||
INLINE static const double
|
INLINE static const double
|
||||||
__atan2(double y,double x)
|
__atan2(double x,double y)
|
||||||
{
|
{
|
||||||
double z;
|
double z;
|
||||||
int k,m,hx,hy,ix,iy;
|
int k,m,hx,hy,ix,iy;
|
||||||
@@ -319,11 +322,19 @@ __atan2(double y,double x)
|
|||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
double
|
double
|
||||||
atan2(double y,double x)
|
atan2(double x,double y)
|
||||||
{
|
{
|
||||||
double result;
|
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);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -48,5 +48,3 @@ struct Library * MathIeeeDoubTransBase;
|
|||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
double __huge_val;
|
double __huge_val;
|
||||||
double __not_a_number;
|
|
||||||
double __infinity;
|
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -194,7 +194,7 @@ __exp(double x)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
k = (int)(invln2*x+halF[xsb]);
|
k = invln2*x+halF[xsb];
|
||||||
t = k;
|
t = k;
|
||||||
hi = x - t*ln2HI[0]; /* t*ln2HI is exact here */
|
hi = x - t*ln2HI[0]; /* t*ln2HI is exact here */
|
||||||
lo = t*ln2LO[0];
|
lo = t*ln2LO[0];
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -126,14 +126,8 @@ __fabs(double x)
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#if defined(__PPC__)
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
#if defined(PPC_FLOATING_POINT_SUPPORT)
|
#if defined(PPC_FLOATING_POINT_SUPPORT)
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
INLINE static const double
|
INLINE static const double
|
||||||
__fabs(double x)
|
__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_FLOATING_POINT_SUPPORT */
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#endif /* __PPC__ */
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
double
|
double
|
||||||
fabs(double x)
|
fabs(double x)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -284,7 +284,7 @@ fmod(double x,double y)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result = x;
|
result = HUGE_VAL;
|
||||||
errno = EDOM;
|
errno = EDOM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :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))
|
#if (defined(IEEE_FLOATING_POINT_SUPPORT) || defined(M68881_FLOATING_POINT_SUPPORT) || defined(PPC_FLOATING_POINT_SUPPORT))
|
||||||
#define FLOATING_POINT_SUPPORT
|
#define FLOATING_POINT_SUPPORT
|
||||||
#endif /* IEEE_FLOATING_POINT_SUPPORT || M68881_FLOATING_POINT_SUPPORT || PPC_FLOATING_POINT_SUPPORT */
|
#endif
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
/* 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];
|
|
||||||
};
|
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -38,7 +38,6 @@
|
|||||||
|
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <float.h>
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
@@ -148,33 +147,6 @@ do { \
|
|||||||
(d) = sl_u.value; \
|
(d) = sl_u.value; \
|
||||||
} while (0)
|
} 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_cos(double x, double y);
|
||||||
extern double __kernel_sin(double x, double y, int iy);
|
extern double __kernel_sin(double x, double y, int iy);
|
||||||
extern int __rem_pio2(double x, double *y);
|
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 */
|
#endif /* _MATH_HEADERS_H */
|
||||||
|
|||||||
@@ -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 */
|
|
||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -53,10 +53,9 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
CLIB_DESTRUCTOR(__math_exit)
|
void
|
||||||
|
__math_exit(void)
|
||||||
{
|
{
|
||||||
ENTER();
|
|
||||||
|
|
||||||
#if defined(IEEE_FLOATING_POINT_SUPPORT)
|
#if defined(IEEE_FLOATING_POINT_SUPPORT)
|
||||||
{
|
{
|
||||||
if(MathIeeeSingBasBase != NULL)
|
if(MathIeeeSingBasBase != NULL)
|
||||||
@@ -78,8 +77,6 @@ CLIB_DESTRUCTOR(__math_exit)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* IEEE_FLOATING_POINT_SUPPORT */
|
#endif /* IEEE_FLOATING_POINT_SUPPORT */
|
||||||
|
|
||||||
LEAVE();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
@@ -124,87 +121,41 @@ __math_init(void)
|
|||||||
#endif /* IEEE_FLOATING_POINT_SUPPORT */
|
#endif /* IEEE_FLOATING_POINT_SUPPORT */
|
||||||
|
|
||||||
/* Now fill in the HUGE_VAL constant, which is set to
|
/* 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 */
|
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 */
|
0x7F800000
|
||||||
0x7f7fffff
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const unsigned long not_a_number[1] =
|
assert( sizeof(infinity) == sizeof(__huge_val) );
|
||||||
{
|
|
||||||
/* Exponent = 255 and fraction != 0.0 */
|
|
||||||
0x7fffffff
|
|
||||||
};
|
|
||||||
|
|
||||||
static const unsigned long infinity[1] =
|
memmove((void *)&__huge_val,infinity,sizeof(infinity));
|
||||||
{
|
|
||||||
/* 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));
|
|
||||||
}
|
}
|
||||||
else if (sizeof(__huge_val) == 8) /* double precision */
|
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 */
|
0x7FF00000,0x00000000
|
||||||
0x7fefffff,0xffffffff
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const unsigned long not_a_number[2] =
|
assert( sizeof(infinity) == sizeof(__huge_val) );
|
||||||
{
|
|
||||||
/* Exponent = 2047 and fraction != 0.0 */
|
|
||||||
0x7fffffff,0xffffffff
|
|
||||||
};
|
|
||||||
|
|
||||||
static const unsigned long infinity[2] =
|
memmove((void *)&__huge_val,infinity,sizeof(infinity));
|
||||||
{
|
|
||||||
/* 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));
|
|
||||||
}
|
}
|
||||||
#if defined(USE_LONG_DOUBLE)
|
|
||||||
else if (sizeof(__huge_val) == 12) /* extended precision */
|
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 */
|
0x7FFF0000,0x00000000,0x00000000
|
||||||
0x7ffe0000,0xffffffff,0xffffffff
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const unsigned long not_a_number[3] =
|
assert( sizeof(infinity) == sizeof(__huge_val) );
|
||||||
{
|
|
||||||
/* Exponent = 32767 and fraction != 0.0 */
|
|
||||||
0x7fff0000,0xffffffff,0xffffffff
|
|
||||||
};
|
|
||||||
|
|
||||||
static const unsigned long infinity[3] =
|
memmove((void *)&__huge_val,infinity,sizeof(infinity));
|
||||||
{
|
|
||||||
/* 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));
|
|
||||||
}
|
}
|
||||||
#endif /* USE_LONG_DOUBLE */
|
|
||||||
|
|
||||||
result = OK;
|
result = OK;
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :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
|
int
|
||||||
isinf(double number)
|
isinf(double number)
|
||||||
{
|
{
|
||||||
@@ -73,7 +93,6 @@ isinf(double number)
|
|||||||
/* Exponent = 2047 and fraction = 0.0 */
|
/* Exponent = 2047 and fraction = 0.0 */
|
||||||
is_infinity = (((x.raw[0] & 0x7FFFFFFF) == 0x7FF00000) && (x.raw[1] == 0));
|
is_infinity = (((x.raw[0] & 0x7FFFFFFF) == 0x7FF00000) && (x.raw[1] == 0));
|
||||||
}
|
}
|
||||||
#if defined(USE_LONG_DOUBLE)
|
|
||||||
else if (sizeof(number) == 12) /* extended precision */
|
else if (sizeof(number) == 12) /* extended precision */
|
||||||
{
|
{
|
||||||
union ieee_long_double x;
|
union ieee_long_double x;
|
||||||
@@ -83,7 +102,6 @@ isinf(double number)
|
|||||||
/* Exponent = 32767 and fraction = 0.0 */
|
/* Exponent = 32767 and fraction = 0.0 */
|
||||||
is_infinity = (((x.raw[0] & 0x7FFF0000) == 0x7FFF0000) && (x.raw[1] & 0x7FFFFFFF) == 0 && (x.raw[2] == 0));
|
is_infinity = (((x.raw[0] & 0x7FFF0000) == 0x7FFF0000) && (x.raw[1] & 0x7FFFFFFF) == 0 && (x.raw[2] == 0));
|
||||||
}
|
}
|
||||||
#endif /* USE_LONG_DOUBLE */
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Can't happen */
|
/* Can't happen */
|
||||||
|
|||||||
@@ -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
|
* :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
|
int
|
||||||
isnan(double number)
|
isnan(double number)
|
||||||
{
|
{
|
||||||
@@ -72,17 +92,15 @@ isnan(double number)
|
|||||||
/* Exponent = 2047 and fraction != 0.0 */
|
/* Exponent = 2047 and fraction != 0.0 */
|
||||||
result = (((x.raw[0] & 0x7FF00000) == 0x7FF00000) && ((x.raw[0] & 0x000FFFFF) != 0 || (x.raw[1] != 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 */
|
else if (sizeof(number) == 12) /* extended precision */
|
||||||
{
|
{
|
||||||
union ieee_long_double x;
|
union ieee_long_double x;
|
||||||
|
|
||||||
x.value = number;
|
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));
|
result = (((x.raw[0] & 0x7FFF0000) == 0x7FFF0000) && ((x.raw[1] & 0x7FFFFFFF) != 0 || x.raw[2] != 0));
|
||||||
}
|
}
|
||||||
#endif /* USE_LONG_DOUBLE */
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Can't happen */
|
/* Can't happen */
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -82,21 +82,7 @@ double __kernel_tan(double x, double y, int iy)
|
|||||||
unsigned int low;
|
unsigned int low;
|
||||||
GET_LOW_WORD(low,x);
|
GET_LOW_WORD(low,x);
|
||||||
if(((ix|low)|(iy+1))==0) return one/fabs(x);
|
if(((ix|low)|(iy+1))==0) return one/fabs(x);
|
||||||
else {
|
else return (iy==1)? x: -one/x;
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(ix>=0x3FE59428) { /* |x|>=0.6744 */
|
if(ix>=0x3FE59428) { /* |x|>=0.6744 */
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -135,7 +135,7 @@ __log(double x)
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#if defined(__PPC__)
|
#if defined(PPC_FLOATING_POINT_SUPPORT)
|
||||||
|
|
||||||
static const double
|
static const double
|
||||||
ln2_hi = 6.93147180369123816490e-01, /* 3fe62e42 fee00000 */
|
ln2_hi = 6.93147180369123816490e-01, /* 3fe62e42 fee00000 */
|
||||||
|
|||||||
@@ -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 */
|
|
||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -109,7 +109,7 @@ __modf(double x,double *nptr)
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#if defined(__PPC__)
|
#if defined(PPC_FLOATING_POINT_SUPPORT)
|
||||||
|
|
||||||
INLINE static const double
|
INLINE static const double
|
||||||
__modf(double x,double *nptr)
|
__modf(double x,double *nptr)
|
||||||
|
|||||||
@@ -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
|
* :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 */
|
/* (x<0)**(non-int) is NaN */
|
||||||
n = ((unsigned int)hx>>31)+1;
|
/* REDHAT LOCAL: This used to be
|
||||||
if((n|yisint)==0) return (x-x)/(x-x);
|
if((((hx>>31)+1)|yisint)==0) return (x-x)/(x-x);
|
||||||
|
but ANSI C says a right shift of a signed negative quantity is
|
||||||
s = one; /* s (sign of result -ve**odd) = -1 else = 1 */
|
implementation defined. */
|
||||||
if((n|(yisint-1))==0)
|
if(((((unsigned int)hx>>31)-1)|yisint)==0) return (x-x)/(x-x);
|
||||||
s = -one;/* (-ve)**(odd int) */
|
|
||||||
|
|
||||||
/* |y| is huge */
|
/* |y| is huge */
|
||||||
if(iy>0x41e00000) { /* if |y| > 2**31 */
|
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;
|
if(ix>=0x3ff00000) return (hy>0)? huge*huge:tiny*tiny;
|
||||||
}
|
}
|
||||||
/* over/underflow if x is not close to one */
|
/* over/underflow if x is not close to one */
|
||||||
if(ix<0x3fefffff) 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)? s*huge*huge:s*tiny*tiny;
|
if(ix>0x3ff00000) return (hy>0)? huge*huge:tiny*tiny;
|
||||||
/* now |1-x| is tiny <= 2**-20, suffice to compute
|
/* now |1-x| is tiny <= 2**-20, suffice to compute
|
||||||
log(x) by x-x^2/2+x^3/3-x^4/4 */
|
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));
|
w = (t*t)*(0.5-t*(0.3333333333333333333333-t*0.25));
|
||||||
u = ivln2_h*t; /* ivln2_h has 21 sig. bits */
|
u = ivln2_h*t; /* ivln2_h has 21 sig. bits */
|
||||||
v = t*ivln2_l-w*ivln2;
|
v = t*ivln2_l-w*ivln2;
|
||||||
@@ -312,7 +311,7 @@ __pow(double x,double y)
|
|||||||
SET_LOW_WORD(t1,0);
|
SET_LOW_WORD(t1,0);
|
||||||
t2 = v-(t1-u);
|
t2 = v-(t1-u);
|
||||||
} else {
|
} else {
|
||||||
double ss,s2,s_h,s_l,t_h,t_l;
|
double s2,s_h,s_l,t_h,t_l;
|
||||||
n = 0;
|
n = 0;
|
||||||
/* take care subnormal number */
|
/* take care subnormal number */
|
||||||
if(ix<0x00100000)
|
if(ix<0x00100000)
|
||||||
@@ -326,11 +325,11 @@ __pow(double x,double y)
|
|||||||
else {k=0;n+=1;ix -= 0x00100000;}
|
else {k=0;n+=1;ix -= 0x00100000;}
|
||||||
SET_HIGH_WORD(ax,ix);
|
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 */
|
u = ax-bp[k]; /* bp[0]=1.0, bp[1]=1.5 */
|
||||||
v = one/(ax+bp[k]);
|
v = one/(ax+bp[k]);
|
||||||
ss = u*v;
|
s = u*v;
|
||||||
s_h = ss;
|
s_h = s;
|
||||||
SET_LOW_WORD(s_h,0);
|
SET_LOW_WORD(s_h,0);
|
||||||
/* t_h=ax+bp[k] High */
|
/* t_h=ax+bp[k] High */
|
||||||
t_h = zero;
|
t_h = zero;
|
||||||
@@ -338,29 +337,33 @@ __pow(double x,double y)
|
|||||||
t_l = ax - (t_h-bp[k]);
|
t_l = ax - (t_h-bp[k]);
|
||||||
s_l = v*((u-s_h*t_h)-s_h*t_l);
|
s_l = v*((u-s_h*t_h)-s_h*t_l);
|
||||||
/* compute log(ax) */
|
/* compute log(ax) */
|
||||||
s2 = ss*ss;
|
s2 = s*s;
|
||||||
r = s2*s2*(L1+s2*(L2+s2*(L3+s2*(L4+s2*(L5+s2*L6)))));
|
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;
|
s2 = s_h*s_h;
|
||||||
t_h = 3.0+s2+r;
|
t_h = 3.0+s2+r;
|
||||||
SET_LOW_WORD(t_h,0);
|
SET_LOW_WORD(t_h,0);
|
||||||
t_l = r-((t_h-3.0)-s2);
|
t_l = r-((t_h-3.0)-s2);
|
||||||
/* u+v = ss*(1+...) */
|
/* u+v = s*(1+...) */
|
||||||
u = s_h*t_h;
|
u = s_h*t_h;
|
||||||
v = s_l*t_h+t_l*ss;
|
v = s_l*t_h+t_l*s;
|
||||||
/* 2/(3log2)*(ss+...) */
|
/* 2/(3log2)*(s+...) */
|
||||||
p_h = u+v;
|
p_h = u+v;
|
||||||
SET_LOW_WORD(p_h,0);
|
SET_LOW_WORD(p_h,0);
|
||||||
p_l = v-(p_h-u);
|
p_l = v-(p_h-u);
|
||||||
z_h = cp_h*p_h; /* cp_h+cp_l = 2/(3*log2) */
|
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];
|
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;
|
t = (double)n;
|
||||||
t1 = (((z_h+z_l)+dp_h[k])+t);
|
t1 = (((z_h+z_l)+dp_h[k])+t);
|
||||||
SET_LOW_WORD(t1,0);
|
SET_LOW_WORD(t1,0);
|
||||||
t2 = z_l-(((t1-t)-dp_h[k])-z_h);
|
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) */
|
/* split up y into y1+y2 and compute (y1+y2)*(t1+t2) */
|
||||||
y1 = y;
|
y1 = y;
|
||||||
SET_LOW_WORD(y1,0);
|
SET_LOW_WORD(y1,0);
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -54,10 +54,6 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#if defined(IEEE_FLOATING_POINT_SUPPORT) || defined(M68881_FLOATING_POINT_SUPPORT)
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
double
|
double
|
||||||
rint(double x)
|
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 */
|
#endif /* FLOATING_POINT_SUPPORT */
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -54,10 +54,6 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#if defined(IEEE_FLOATING_POINT_SUPPORT) || defined(M68881_FLOATING_POINT_SUPPORT)
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
float
|
float
|
||||||
rintf(float x)
|
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 */
|
#endif /* FLOATING_POINT_SUPPORT */
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :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;
|
static const double one = 1.0, tiny=1.0e-300;
|
||||||
|
|
||||||
@@ -236,7 +236,7 @@ __sqrt(double x)
|
|||||||
return z;
|
return z;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif /* PPC_FLOATING_POINT_SUPPORT */
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
@@ -251,7 +251,7 @@ sqrt(double x)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result = 0;
|
result = HUGE_VAL;
|
||||||
errno = EDOM;
|
errno = EDOM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#define VERSION 1
|
#define VERSION 1
|
||||||
#define REVISION 184
|
#define REVISION 168
|
||||||
#define DATE "28.11.2004"
|
#define DATE "7.8.2004"
|
||||||
#define VERS "net.lib 1.184"
|
#define VERS "net.lib 1.168"
|
||||||
#define VSTRING "net.lib 1.184 (28.11.2004)\r\n"
|
#define VSTRING "net.lib 1.168 (7.8.2004)\r\n"
|
||||||
#define VERSTAG "\0$VER: net.lib 1.184 (28.11.2004)"
|
#define VERSTAG "\0$VER: net.lib 1.168 (7.8.2004)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
184
|
168
|
||||||
|
|||||||
3074
library/releasenotes
3074
library/releasenotes
File diff suppressed because it is too large
Load Diff
@@ -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
|
* :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 __termination_message_printed;
|
||||||
extern BOOL NOCOMMON __termination_message_disabled;
|
extern BOOL __termination_message_disabled;
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
extern const char NOCOMMON __abnormal_program_termination[];
|
extern const char __abnormal_program_termination[];
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
# :ts=8
|
||||||
#
|
#
|
||||||
@@ -88,7 +88,6 @@ AMIGA_OBJ = \
|
|||||||
amiga_newlist.o \
|
amiga_newlist.o \
|
||||||
amiga_rangerand.o \
|
amiga_rangerand.o \
|
||||||
amiga_remtof.o \
|
amiga_remtof.o \
|
||||||
amiga_rexxvars.o \
|
|
||||||
amiga_setsuperattrs.o \
|
amiga_setsuperattrs.o \
|
||||||
amiga_timedelay.o \
|
amiga_timedelay.o \
|
||||||
amiga_waitbeam.o \
|
amiga_waitbeam.o \
|
||||||
@@ -164,14 +163,14 @@ FCNTL_OBJ = \
|
|||||||
fcntl_lseek.o \
|
fcntl_lseek.o \
|
||||||
fcntl_open.o \
|
fcntl_open.o \
|
||||||
fcntl_read.o \
|
fcntl_read.o \
|
||||||
fcntl_write.o \
|
fcntl_write.o
|
||||||
fcntl_get_default_file.o
|
|
||||||
|
|
||||||
LIBGEN_OBJ = \
|
LIBGEN_OBJ = \
|
||||||
libgen_basename.o \
|
libgen_basename.o \
|
||||||
libgen_dirname.o
|
libgen_dirname.o
|
||||||
|
|
||||||
LOCALE_OBJ = \
|
LOCALE_OBJ = \
|
||||||
|
locale_data.o \
|
||||||
locale_init_exit.o \
|
locale_init_exit.o \
|
||||||
locale_localeconv.o \
|
locale_localeconv.o \
|
||||||
locale_setlocale.o
|
locale_setlocale.o
|
||||||
@@ -190,14 +189,12 @@ MATH_OBJ = \
|
|||||||
math_floor.o \
|
math_floor.o \
|
||||||
math_fmod.o \
|
math_fmod.o \
|
||||||
math_frexp.o \
|
math_frexp.o \
|
||||||
math_hypot.o \
|
|
||||||
math_init_exit.o \
|
math_init_exit.o \
|
||||||
math_isinf.o \
|
math_isinf.o \
|
||||||
math_isnan.o \
|
math_isnan.o \
|
||||||
math_ldexp.o \
|
math_ldexp.o \
|
||||||
math_log.o \
|
math_log.o \
|
||||||
math_log10.o \
|
math_log10.o \
|
||||||
math_logb.o \
|
|
||||||
math_modf.o \
|
math_modf.o \
|
||||||
math_pow.o \
|
math_pow.o \
|
||||||
math_rint.o \
|
math_rint.o \
|
||||||
@@ -395,10 +392,6 @@ STDLIB_OBJ = \
|
|||||||
stdlib_mkstemp.o \
|
stdlib_mkstemp.o \
|
||||||
stdlib_mktemp.o \
|
stdlib_mktemp.o \
|
||||||
stdlib_never_free.o \
|
stdlib_never_free.o \
|
||||||
stdlib_osliberror.o \
|
|
||||||
stdlib_oslibversion.o \
|
|
||||||
stdlib_priority.o \
|
|
||||||
stdlib_process_name.o \
|
|
||||||
stdlib_putenv.o \
|
stdlib_putenv.o \
|
||||||
stdlib_qsort.o \
|
stdlib_qsort.o \
|
||||||
stdlib_rand.o \
|
stdlib_rand.o \
|
||||||
@@ -419,13 +412,10 @@ STDLIB_OBJ = \
|
|||||||
stdlib_strtod.o \
|
stdlib_strtod.o \
|
||||||
stdlib_strtol.o \
|
stdlib_strtol.o \
|
||||||
stdlib_strtoul.o \
|
stdlib_strtoul.o \
|
||||||
stdlib_strtoll.o \
|
|
||||||
stdlib_strtoull.o \
|
|
||||||
stdlib_swapstack.o \
|
stdlib_swapstack.o \
|
||||||
stdlib_system.o \
|
stdlib_system.o \
|
||||||
stdlib_unsetenv.o \
|
stdlib_unsetenv.o \
|
||||||
stdlib_wildcard_expand.o \
|
stdlib_wildcard_expand.o
|
||||||
stdlib_stdio_window_spec.o
|
|
||||||
|
|
||||||
STRING_OBJ = \
|
STRING_OBJ = \
|
||||||
string_bcmp.o \
|
string_bcmp.o \
|
||||||
@@ -446,8 +436,6 @@ STRING_OBJ = \
|
|||||||
string_strcspn.o \
|
string_strcspn.o \
|
||||||
string_strdup.o \
|
string_strdup.o \
|
||||||
string_strerror.o \
|
string_strerror.o \
|
||||||
string_strlcat.o \
|
|
||||||
string_strlcpy.o \
|
|
||||||
string_strlen.o \
|
string_strlen.o \
|
||||||
string_strncat.o \
|
string_strncat.o \
|
||||||
string_strncmp.o \
|
string_strncmp.o \
|
||||||
@@ -457,7 +445,6 @@ STRING_OBJ = \
|
|||||||
string_strspn.o \
|
string_strspn.o \
|
||||||
string_strstr.o \
|
string_strstr.o \
|
||||||
string_strtok.o \
|
string_strtok.o \
|
||||||
string_strtok_r.o \
|
|
||||||
string_strxfrm.o
|
string_strxfrm.o
|
||||||
|
|
||||||
STRINGS_OBJ = \
|
STRINGS_OBJ = \
|
||||||
@@ -466,18 +453,14 @@ STRINGS_OBJ = \
|
|||||||
|
|
||||||
TIME_OBJ = \
|
TIME_OBJ = \
|
||||||
time_asctime.o \
|
time_asctime.o \
|
||||||
time_asctime_r.o \
|
|
||||||
time_clock.o \
|
time_clock.o \
|
||||||
time_converttime.o \
|
time_converttime.o \
|
||||||
time_ctime.o \
|
time_ctime.o \
|
||||||
time_ctime_r.o \
|
|
||||||
time_data.o \
|
time_data.o \
|
||||||
time_difftime.o \
|
time_difftime.o \
|
||||||
time_gettimeofday.o \
|
time_gettimeofday.o \
|
||||||
time_gmtime.o \
|
time_gmtime.o \
|
||||||
time_gmtime_r.o \
|
|
||||||
time_localtime.o \
|
time_localtime.o \
|
||||||
time_localtime_r.o \
|
|
||||||
time_mktime.o \
|
time_mktime.o \
|
||||||
time_numbertostring.o \
|
time_numbertostring.o \
|
||||||
time_strftime.o \
|
time_strftime.o \
|
||||||
@@ -486,9 +469,9 @@ TIME_OBJ = \
|
|||||||
UNISTD_OBJ = \
|
UNISTD_OBJ = \
|
||||||
unistd_access.o \
|
unistd_access.o \
|
||||||
unistd_chdir.o \
|
unistd_chdir.o \
|
||||||
unistd_chdir_exit.o \
|
|
||||||
unistd_chown.o \
|
unistd_chown.o \
|
||||||
unistd_currentpathname.o \
|
unistd_currentpathname.o \
|
||||||
|
unistd_data.o \
|
||||||
unistd_dup.o \
|
unistd_dup.o \
|
||||||
unistd_dup2.o \
|
unistd_dup2.o \
|
||||||
unistd_fchown.o \
|
unistd_fchown.o \
|
||||||
@@ -509,15 +492,12 @@ UNISTD_OBJ = \
|
|||||||
unistd_sleep.o \
|
unistd_sleep.o \
|
||||||
unistd_strip_double_slash.o \
|
unistd_strip_double_slash.o \
|
||||||
unistd_symlink.o \
|
unistd_symlink.o \
|
||||||
unistd_time_delay.o \
|
|
||||||
unistd_timer.o \
|
|
||||||
unistd_translatea2u.o \
|
unistd_translatea2u.o \
|
||||||
unistd_translaterel.o \
|
unistd_translaterel.o \
|
||||||
unistd_translateu2a.o \
|
unistd_translateu2a.o \
|
||||||
unistd_truncate.o \
|
unistd_truncate.o \
|
||||||
unistd_unix_path_semantics.o \
|
unistd_unix_path_semantics.o \
|
||||||
unistd_unlink.o \
|
unistd_unlink.o
|
||||||
unistd_usleep.o
|
|
||||||
# \
|
# \
|
||||||
# unistd_wildcard_expand.o
|
# unistd_wildcard_expand.o
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -46,7 +46,9 @@ struct Library * __SocketBase;
|
|||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#if defined(__amigaos4__)
|
#if defined(__amigaos4__)
|
||||||
|
|
||||||
struct SocketIFace *__ISocket;
|
struct SocketIFace *__ISocket;
|
||||||
|
|
||||||
#endif /* __amigaos4__ */
|
#endif /* __amigaos4__ */
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -48,19 +48,19 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
extern struct Library * NOCOMMON __SocketBase;
|
extern struct Library * __SocketBase;
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#if defined(__amigaos4__)
|
#if defined(__amigaos4__)
|
||||||
|
|
||||||
extern struct SocketIFace * NOCOMMON __ISocket;
|
extern struct SocketIFace *__ISocket;
|
||||||
|
|
||||||
#endif /* __amigaos4__ */
|
#endif /* __amigaos4__ */
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
extern int NOCOMMON h_errno;
|
extern int h_errno;
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -41,10 +41,6 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
void
|
void
|
||||||
__socket_hook_entry(
|
__socket_hook_entry(
|
||||||
struct Hook * UNUSED unused_hook,
|
struct Hook * UNUSED unused_hook,
|
||||||
@@ -53,7 +49,6 @@ __socket_hook_entry(
|
|||||||
{
|
{
|
||||||
struct FileInfoBlock * fib;
|
struct FileInfoBlock * fib;
|
||||||
int error = OK;
|
int error = OK;
|
||||||
int param;
|
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
assert( message != NULL && fd != NULL );
|
assert( message != NULL && fd != NULL );
|
||||||
@@ -134,28 +129,6 @@ __socket_hook_entry(
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case file_hook_action_set_blocking:
|
|
||||||
|
|
||||||
SHOWMSG("file_hook_action_set_blocking");
|
|
||||||
|
|
||||||
param = (int)(message->arg == 0);
|
|
||||||
|
|
||||||
result = __IoctlSocket(fd->fd_DefaultFile,FIONBIO,¶m);
|
|
||||||
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,¶m);
|
|
||||||
error = errno;
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case file_hook_action_examine:
|
case file_hook_action_examine:
|
||||||
|
|
||||||
SHOWMSG("file_hook_action_examine");
|
SHOWMSG("file_hook_action_examine");
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -39,16 +39,16 @@
|
|||||||
#include "socket_headers.h"
|
#include "socket_headers.h"
|
||||||
#endif /* _SOCKET_HEADERS_H */
|
#endif /* _SOCKET_HEADERS_H */
|
||||||
|
|
||||||
#ifndef _SIGNAL_HEADERS_H
|
|
||||||
#include "signal_headers.h"
|
|
||||||
#endif /* _SIGNAL_HEADERS_H */
|
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#include "stdlib_protos.h"
|
#include "stdlib_protos.h"
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
extern BOOL __detach;
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
/* Code value. */
|
/* Code value. */
|
||||||
#define SBTB_CODE 1
|
#define SBTB_CODE 1
|
||||||
#define SBTS_CODE 0x3FFF
|
#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();
|
ENTER();
|
||||||
|
|
||||||
@@ -101,7 +116,16 @@ CLIB_DESTRUCTOR(__socket_exit)
|
|||||||
* does not happen, the stdio cleanup function will
|
* does not happen, the stdio cleanup function will
|
||||||
* crash (with bells on).
|
* 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__)
|
#if defined(__amigaos4__)
|
||||||
{
|
{
|
||||||
@@ -182,7 +206,7 @@ __socket_init(void)
|
|||||||
|
|
||||||
/* Wire the library's h_errno variable to our local h_errno. */
|
/* Wire the library's h_errno variable to our local h_errno. */
|
||||||
tags[3].ti_Tag = SBTM_SETVAL(SBTC_HERRNOLONGPTR);
|
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;
|
tags[4].ti_Tag = TAG_END;
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -47,10 +47,6 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
int
|
int
|
||||||
ioctl(int sockfd,unsigned long request, ... /* char *arg */)
|
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);
|
result = __IoctlSocket((LONG)fd->fd_DefaultFile,request,param);
|
||||||
PROFILE_ON();
|
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);
|
va_end(arg);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
int
|
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;
|
struct fd * fd;
|
||||||
int result = -1;
|
int result = -1;
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
int
|
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;
|
struct fd * fd;
|
||||||
int result = -1;
|
int result = -1;
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
int
|
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;
|
struct fd * fd;
|
||||||
int result = -1;
|
int result = -1;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#define VERSION 1
|
#define VERSION 1
|
||||||
#define REVISION 184
|
#define REVISION 168
|
||||||
#define DATE "28.11.2004"
|
#define DATE "7.8.2004"
|
||||||
#define VERS "stack.lib 1.184"
|
#define VERS "stack.lib 1.168"
|
||||||
#define VSTRING "stack.lib 1.184 (28.11.2004)\r\n"
|
#define VSTRING "stack.lib 1.168 (7.8.2004)\r\n"
|
||||||
#define VERSTAG "\0$VER: stack.lib 1.184 (28.11.2004)"
|
#define VERSTAG "\0$VER: stack.lib 1.168 (7.8.2004)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
184
|
168
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
extern mode_t NOCOMMON __current_umask;
|
extern mode_t __current_umask;
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -1829,7 +1829,7 @@ __fd_hook_entry(
|
|||||||
|
|
||||||
SHOWMSG("changing the mode");
|
SHOWMSG("changing the mode");
|
||||||
|
|
||||||
if(message->arg != 0)
|
if(message->block)
|
||||||
mode = 0; /* buffered mode */
|
mode = 0; /* buffered mode */
|
||||||
else
|
else
|
||||||
mode = 1; /* single character mode */
|
mode = 1; /* single character mode */
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -252,8 +252,6 @@ struct iob
|
|||||||
to have its protection bits updated after
|
to have its protection bits updated after
|
||||||
it has been closed */
|
it has been closed */
|
||||||
#define FDF_CACHE_POSITION (1UL<<9) /* Cache the file position. */
|
#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_info,
|
||||||
file_hook_action_duplicate_fd,
|
file_hook_action_duplicate_fd,
|
||||||
file_hook_action_seek_and_extend,
|
file_hook_action_seek_and_extend,
|
||||||
file_hook_action_is_interactive,
|
file_hook_action_is_interactive
|
||||||
file_hook_action_set_async
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
@@ -327,7 +324,7 @@ struct file_hook_message
|
|||||||
struct flock * lock; /* Record locking request */
|
struct flock * lock; /* Record locking request */
|
||||||
int command; /* What kind of locking command was sent */
|
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 */
|
be set non-blocking */
|
||||||
|
|
||||||
uid_t owner;
|
uid_t owner;
|
||||||
@@ -350,22 +347,22 @@ struct file_hook_message
|
|||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
/* The file handle table. */
|
/* The file handle table. */
|
||||||
extern struct iob ** NOCOMMON __iob;
|
extern struct iob ** __iob;
|
||||||
extern int NOCOMMON __num_iob;
|
extern int __num_iob;
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
/* The file descriptor table. */
|
/* The file descriptor table. */
|
||||||
extern struct fd ** NOCOMMON __fd;
|
extern struct fd ** __fd;
|
||||||
extern int NOCOMMON __num_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;
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -52,7 +52,7 @@
|
|||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
void
|
void
|
||||||
__close_all_files(void)
|
__stdio_exit(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -60,7 +60,7 @@ __close_all_files(void)
|
|||||||
|
|
||||||
__check_abort_enabled = FALSE;
|
__check_abort_enabled = FALSE;
|
||||||
|
|
||||||
if(__iob != NULL && __num_iob > 0)
|
if(__iob != NULL)
|
||||||
{
|
{
|
||||||
for(i = 0 ; i < __num_iob ; i++)
|
for(i = 0 ; i < __num_iob ; i++)
|
||||||
{
|
{
|
||||||
@@ -72,7 +72,7 @@ __close_all_files(void)
|
|||||||
__iob = NULL;
|
__iob = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(__fd != NULL && __num_fd > 0)
|
if(__fd != NULL)
|
||||||
{
|
{
|
||||||
for(i = 0 ; i < __num_fd ; i++)
|
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
|
int
|
||||||
__stdio_init(void)
|
__stdio_init(void)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -48,7 +48,9 @@ __open_iob(const char *filename, const char *mode, int file_descriptor, int slot
|
|||||||
{
|
{
|
||||||
ULONG file_flags;
|
ULONG file_flags;
|
||||||
int result = -1;
|
int result = -1;
|
||||||
|
char actual_mode[8];
|
||||||
int open_mode;
|
int open_mode;
|
||||||
|
size_t mode_len,len,i;
|
||||||
struct fd * fd = NULL;
|
struct fd * fd = NULL;
|
||||||
STRPTR buffer = NULL;
|
STRPTR buffer = NULL;
|
||||||
STRPTR aligned_buffer;
|
STRPTR aligned_buffer;
|
||||||
@@ -84,47 +86,76 @@ __open_iob(const char *filename, const char *mode, int file_descriptor, int slot
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The first character selects the access mode: read, write or append. */
|
/* Options can follow the mode string, separated by a comma.
|
||||||
switch(mode[0])
|
* We don't support any of those.
|
||||||
|
*/
|
||||||
|
len = mode_len = strlen(mode);
|
||||||
|
for(i = 0 ; i < len ; i++)
|
||||||
{
|
{
|
||||||
case 'r':
|
if(mode[i] == ',')
|
||||||
|
{
|
||||||
SHOWMSG("read mode");
|
mode_len = i;
|
||||||
|
|
||||||
open_mode = O_RDONLY;
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case 'w':
|
|
||||||
|
|
||||||
SHOWMSG("write mode");
|
|
||||||
|
|
||||||
open_mode = O_WRONLY | O_CREAT | O_TRUNC;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'a':
|
|
||||||
|
|
||||||
SHOWMSG("append mode");
|
|
||||||
|
|
||||||
open_mode = O_WRONLY | O_CREAT | O_APPEND;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
|
|
||||||
D(("unsupported file open mode '%lc'",mode[0]));
|
|
||||||
|
|
||||||
errno = EINVAL;
|
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If the second or third character is a '+', switch to read/write mode. */
|
/* Keep only the first few letters of the mode string. */
|
||||||
if((mode[1] == '+') || (mode[1] != '\0' && mode[2] == '+'))
|
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/write access");
|
SHOWMSG("read-only");
|
||||||
|
|
||||||
CLEAR_FLAG(open_mode,O_RDONLY);
|
open_mode = O_RDONLY;
|
||||||
CLEAR_FLAG(open_mode,O_WRONLY);
|
file_flags = IOBF_READ;
|
||||||
|
}
|
||||||
|
else if (strcmp(actual_mode,"w") == SAME || strcmp(actual_mode,"wb") == SAME)
|
||||||
|
{
|
||||||
|
SHOWMSG("write-only");
|
||||||
|
|
||||||
SET_FLAG(open_mode,O_RDWR);
|
open_mode = O_WRONLY | O_CREAT | O_TRUNC;
|
||||||
|
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;
|
||||||
|
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");
|
||||||
|
|
||||||
|
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");
|
||||||
|
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
SHOWMSG("allocating file buffer");
|
SHOWMSG("allocating file buffer");
|
||||||
@@ -162,21 +193,12 @@ __open_iob(const char *filename, const char *mode, int file_descriptor, int slot
|
|||||||
CLEAR_FLAG(fd->fd_Flags,FDF_APPEND);
|
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,
|
__initialize_iob(file,(HOOKFUNC)__iob_hook_entry,
|
||||||
buffer,
|
buffer,
|
||||||
aligned_buffer,BUFSIZ,
|
aligned_buffer,BUFSIZ,
|
||||||
file_descriptor,
|
file_descriptor,
|
||||||
slot_number,
|
slot_number,
|
||||||
file_flags);
|
IOBF_IN_USE | file_flags | IOBF_NO_NUL);
|
||||||
|
|
||||||
buffer = NULL;
|
buffer = NULL;
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :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 *
|
FILE *
|
||||||
popen(const char *command, const char *type)
|
popen(const char *command, const char *type)
|
||||||
{
|
{
|
||||||
@@ -104,10 +118,14 @@ popen(const char *command, const char *type)
|
|||||||
BPTR input = ZERO;
|
BPTR input = ZERO;
|
||||||
BPTR output = ZERO;
|
BPTR output = ZERO;
|
||||||
char pipe_file_name[40];
|
char pipe_file_name[40];
|
||||||
|
struct TagItem tags[5];
|
||||||
|
struct TagItem * tag;
|
||||||
FILE * result = NULL;
|
FILE * result = NULL;
|
||||||
LONG status;
|
LONG status;
|
||||||
unsigned long task_address;
|
unsigned long task_address;
|
||||||
time_t now;
|
time_t now;
|
||||||
|
size_t type_len;
|
||||||
|
char actual_type[8];
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
ENTER();
|
ENTER();
|
||||||
@@ -132,36 +150,6 @@ popen(const char *command, const char *type)
|
|||||||
if(__check_abort_enabled)
|
if(__check_abort_enabled)
|
||||||
__check_abort();
|
__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 defined(UNIX_PATH_SEMANTICS)
|
||||||
{
|
{
|
||||||
if(__unix_path_semantics)
|
if(__unix_path_semantics)
|
||||||
@@ -249,10 +237,33 @@ popen(const char *command, const char *type)
|
|||||||
}
|
}
|
||||||
#endif /* UNIX_PATH_SEMANTICS */
|
#endif /* UNIX_PATH_SEMANTICS */
|
||||||
|
|
||||||
/* Build a (hopefully) unique name for the pipe stream to open. We
|
/* Skip any options following the comma. */
|
||||||
construct it from the current process address, converted into
|
type_len = strlen(type);
|
||||||
an octal number, followed by the current time (in seconds),
|
for(i = 0 ; i < (int)type_len ; i++)
|
||||||
converted into another octal number. */
|
{
|
||||||
|
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:");
|
strcpy(pipe_file_name,"PIPE:");
|
||||||
|
|
||||||
task_address = (unsigned long)FindTask(NULL);
|
task_address = (unsigned long)FindTask(NULL);
|
||||||
@@ -279,27 +290,26 @@ popen(const char *command, const char *type)
|
|||||||
|
|
||||||
PROFILE_OFF();
|
PROFILE_OFF();
|
||||||
|
|
||||||
/* Now open the input and output streams for the program to launch. */
|
if(strcmp(actual_type,"r") == SAME)
|
||||||
if(type[0] == 'r')
|
|
||||||
{
|
{
|
||||||
/* Read mode: we want to read the output of the program; the program
|
|
||||||
should read from "NIL:". */
|
|
||||||
input = Open("NIL:",MODE_NEWFILE);
|
input = Open("NIL:",MODE_NEWFILE);
|
||||||
if(input != ZERO)
|
if(input != ZERO)
|
||||||
output = Open(pipe_file_name,MODE_NEWFILE);
|
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);
|
input = Open(pipe_file_name,MODE_NEWFILE);
|
||||||
if(input != ZERO)
|
if(input != ZERO)
|
||||||
output = Open("NIL:",MODE_NEWFILE);
|
output = Open("NIL:",MODE_NEWFILE);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
errno = EINVAL;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
PROFILE_ON();
|
PROFILE_ON();
|
||||||
|
|
||||||
/* Check if both I/O streams could be opened. */
|
|
||||||
if(input == ZERO || output == ZERO)
|
if(input == ZERO || output == ZERO)
|
||||||
{
|
{
|
||||||
SHOWMSG("couldn't open the streams");
|
SHOWMSG("couldn't open the streams");
|
||||||
@@ -308,20 +318,18 @@ popen(const char *command, const char *type)
|
|||||||
goto out;
|
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();
|
PROFILE_OFF();
|
||||||
|
status = SystemTagList((STRPTR)command,tags);
|
||||||
/* Now try to launch the program. */
|
|
||||||
status = SystemTags((STRPTR)command,
|
|
||||||
SYS_Input, input,
|
|
||||||
SYS_Output, output,
|
|
||||||
SYS_Asynch, TRUE,
|
|
||||||
SYS_UserShell, TRUE,
|
|
||||||
TAG_END);
|
|
||||||
|
|
||||||
PROFILE_ON();
|
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)
|
if(status == -1)
|
||||||
{
|
{
|
||||||
SHOWMSG("SystemTagList() failed");
|
SHOWMSG("SystemTagList() failed");
|
||||||
@@ -330,11 +338,8 @@ popen(const char *command, const char *type)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* OK, the program is running. Once it terminates, it will automatically
|
|
||||||
shut down the streams we opened for it. */
|
|
||||||
input = output = ZERO;
|
input = output = ZERO;
|
||||||
|
|
||||||
/* Now try to open the pipe we will use to exchange data with the program. */
|
|
||||||
result = fopen(pipe_file_name,type);
|
result = fopen(pipe_file_name,type);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -65,11 +65,6 @@ struct fd;
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
/* stdio_init_exit.c */
|
|
||||||
void __close_all_files(void);
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
/* stdio_translateioerror.c */
|
/* stdio_translateioerror.c */
|
||||||
extern void __translate_io_error_to_errno(LONG io_error,int * errno_ptr);
|
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);
|
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 */
|
#endif /* _STDIO_PROTOS_H */
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -94,7 +94,7 @@ puts(const char *s)
|
|||||||
|
|
||||||
out:
|
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.
|
may have buffered data around, queued to be printed right now.
|
||||||
This is intended to improve performance as it takes more effort
|
This is intended to improve performance as it takes more effort
|
||||||
to write a single character to a file than to write a bunch. */
|
to write a single character to a file than to write a bunch. */
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -72,7 +72,7 @@
|
|||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
static int
|
static int
|
||||||
get_num_leading_digits(__long_double_t v)
|
get_num_leading_digits(long double v)
|
||||||
{
|
{
|
||||||
int num_digits;
|
int num_digits;
|
||||||
|
|
||||||
@@ -262,6 +262,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
if(arg == NULL)
|
if(arg == NULL)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
|
result = EOF;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -343,6 +344,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
if(arg == NULL)
|
if(arg == NULL)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
|
result = EOF;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -564,6 +566,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
if(arg == NULL)
|
if(arg == NULL)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
|
result = EOF;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -620,6 +623,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
if(arg == NULL)
|
if(arg == NULL)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
|
result = EOF;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -630,26 +634,25 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
const char * buffer_stop = &buffer[sizeof(buffer)-1];
|
const char * buffer_stop = &buffer[sizeof(buffer)-1];
|
||||||
char * buffer_start = buffer;
|
char * buffer_start = buffer;
|
||||||
|
|
||||||
__long_double_t v;
|
long double v;
|
||||||
int sign;
|
|
||||||
|
|
||||||
output_buffer = buffer_start;
|
output_buffer = buffer_start;
|
||||||
|
|
||||||
D(("sizeof(long double) == %ld",sizeof(v)));
|
D(("sizeof(long double) == %ld",sizeof(v)));
|
||||||
|
|
||||||
if(parameter_size == parameter_size_long_double)
|
if(parameter_size == parameter_size_long_double)
|
||||||
v = va_arg(arg, __long_double_t);
|
v = va_arg(arg, long double);
|
||||||
else
|
else
|
||||||
v = va_arg(arg, double);
|
v = va_arg(arg, double);
|
||||||
|
|
||||||
if((sign = isinf(v)) != 0)
|
if(isinf(v) != 0)
|
||||||
{
|
{
|
||||||
SHOWMSG("infinity");
|
SHOWMSG("infinity");
|
||||||
|
|
||||||
strcpy(output_buffer,"Inf");
|
strcpy(output_buffer,"Inf");
|
||||||
output_len = 3;
|
output_len = 3;
|
||||||
|
|
||||||
if(sign < 0)
|
if(v < 0.0)
|
||||||
SET_FLAG(format_flags,FORMATF_IsNegative);
|
SET_FLAG(format_flags,FORMATF_IsNegative);
|
||||||
|
|
||||||
fill_character = ' ';
|
fill_character = ' ';
|
||||||
@@ -673,7 +676,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
BOOL strip_trailing_zeroes = FALSE;
|
BOOL strip_trailing_zeroes = FALSE;
|
||||||
__long_double_t roundoff_fudge = 0.0;
|
long double roundoff_fudge = 0.0;
|
||||||
int max_digits = -1;
|
int max_digits = -1;
|
||||||
int exponent = 0;
|
int exponent = 0;
|
||||||
int digit;
|
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. */
|
/* Figure out whether 'e' or 'f' format should be used. */
|
||||||
if(conversion_type == 'g' || conversion_type == 'e')
|
if(conversion_type == 'g' || conversion_type == 'e')
|
||||||
{
|
{
|
||||||
__long_double_t local_v = v;
|
long double local_v = v;
|
||||||
int local_exponent = 0;
|
int local_exponent = 0;
|
||||||
|
|
||||||
/* Put one single digit in front of the decimal point. */
|
/* 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
|
/* Remove the parameter from the argument vector and
|
||||||
don't produce any output. */
|
don't produce any output. */
|
||||||
if(parameter_size == parameter_size_long_double)
|
if(parameter_size == parameter_size_long_double)
|
||||||
(void)va_arg(arg, __long_double_t);
|
(void)va_arg(arg, long double);
|
||||||
else
|
else
|
||||||
(void)va_arg(arg, double);
|
(void)va_arg(arg, double);
|
||||||
|
|
||||||
minimum_field_width = 0;
|
#ifndef NDEBUG
|
||||||
format_flags = 0;
|
{
|
||||||
|
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 */
|
#endif /* FLOATING_POINT_SUPPORT */
|
||||||
}
|
}
|
||||||
@@ -1002,6 +1012,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
if(arg == NULL)
|
if(arg == NULL)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
|
result = EOF;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1156,6 +1167,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
if(arg == NULL)
|
if(arg == NULL)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
|
result = EOF;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1211,6 +1223,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
if(arg == NULL)
|
if(arg == NULL)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
|
result = EOF;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1229,6 +1242,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
if(short_ptr == NULL)
|
if(short_ptr == NULL)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
|
result = EOF;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1253,6 +1267,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
if(int_ptr == NULL)
|
if(int_ptr == NULL)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
|
result = EOF;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1273,6 +1288,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
if(int_ptr == NULL)
|
if(int_ptr == NULL)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
|
result = EOF;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1294,6 +1310,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
if(int_ptr == NULL)
|
if(int_ptr == NULL)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
|
result = EOF;
|
||||||
goto out;
|
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.
|
may have buffered data around, queued to be printed right now.
|
||||||
This is intended to improve performance as it takes more effort
|
This is intended to improve performance as it takes more effort
|
||||||
to write a single character to a file than to write a bunch. */
|
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)
|
if(__iob_write_buffer_is_valid(iob) && __flush_iob_write_buffer(iob) < 0)
|
||||||
result = EOF;
|
result = EOF;
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -105,12 +105,24 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
|||||||
|
|
||||||
if(isspace(c))
|
if(isspace(c))
|
||||||
{
|
{
|
||||||
|
BOOL finished = FALSE;
|
||||||
|
|
||||||
/* Skip all blank spaces in the stream. */
|
/* Skip all blank spaces in the stream. */
|
||||||
format++;
|
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++;
|
total_num_chars_read++;
|
||||||
}
|
}
|
||||||
@@ -127,17 +139,8 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(c == EOF)
|
if(finished)
|
||||||
{
|
|
||||||
SHOWMSG("end of file");
|
|
||||||
|
|
||||||
/* Hit the end of the stream? */
|
|
||||||
if(num_conversions == 0)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
/* Finished... */
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
/* Resume scanning. */
|
/* Resume scanning. */
|
||||||
continue;
|
continue;
|
||||||
@@ -156,8 +159,8 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
|||||||
{
|
{
|
||||||
SHOWMSG("end of file");
|
SHOWMSG("end of file");
|
||||||
|
|
||||||
/* Hit the end of the stream. */
|
/* Hit the end of the stream. Due to an error? */
|
||||||
if(num_conversions == 0)
|
if(num_conversions == 0 || ferror(stream))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -302,11 +305,9 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
/* It's a floating point number. */
|
/* It's a floating point number. */
|
||||||
case 'e':
|
|
||||||
case 'E':
|
|
||||||
case 'f':
|
case 'f':
|
||||||
|
case 'e':
|
||||||
case 'g':
|
case 'g':
|
||||||
case 'G':
|
|
||||||
|
|
||||||
conversion_type = 'f';
|
conversion_type = 'f';
|
||||||
format++;
|
format++;
|
||||||
@@ -320,7 +321,6 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
|||||||
case 's': /* string */
|
case 's': /* string */
|
||||||
case 'u': /* unsigned integer */
|
case 'u': /* unsigned integer */
|
||||||
case 'x': /* unsigned integer in hexadecimal format */
|
case 'x': /* unsigned integer in hexadecimal format */
|
||||||
case 'X': /* unsigned integer in hexadecimal format */
|
|
||||||
case '%': /* the % character */
|
case '%': /* the % character */
|
||||||
case '[': /* a range of characters */
|
case '[': /* a range of characters */
|
||||||
|
|
||||||
@@ -339,9 +339,21 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
|||||||
conversion_type != 'n' &&
|
conversion_type != 'n' &&
|
||||||
conversion_type != '[')
|
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++;
|
total_num_chars_read++;
|
||||||
}
|
}
|
||||||
@@ -357,6 +369,9 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(finished)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
num_chars_processed = 0;
|
num_chars_processed = 0;
|
||||||
@@ -413,8 +428,8 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
|||||||
c = __getc(stream);
|
c = __getc(stream);
|
||||||
if(c == EOF)
|
if(c == EOF)
|
||||||
{
|
{
|
||||||
/* Bail out if we hit the end of the stream. */
|
/* Bail out if we hit the end of the stream or an error occured. */
|
||||||
if(num_conversions == 0)
|
if(num_conversions == 0 || ferror(stream))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -441,8 +456,8 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
|||||||
{
|
{
|
||||||
#if defined(FLOATING_POINT_SUPPORT)
|
#if defined(FLOATING_POINT_SUPPORT)
|
||||||
{
|
{
|
||||||
__long_double_t sum = 0.0;
|
long double sum = 0.0;
|
||||||
__long_double_t new_sum;
|
long double new_sum;
|
||||||
BOOL is_negative = FALSE;
|
BOOL is_negative = FALSE;
|
||||||
BOOL decimal_point_matches = FALSE;
|
BOOL decimal_point_matches = FALSE;
|
||||||
BOOL have_exponent = FALSE;
|
BOOL have_exponent = FALSE;
|
||||||
@@ -480,7 +495,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
|||||||
{
|
{
|
||||||
SHOWMSG("extended format (long double)");
|
SHOWMSG("extended format (long double)");
|
||||||
|
|
||||||
next_parameter = va_arg(arg,__long_double_t *);
|
next_parameter = va_arg(arg,long double *);
|
||||||
}
|
}
|
||||||
|
|
||||||
assert( next_parameter != NULL );
|
assert( next_parameter != NULL );
|
||||||
@@ -505,7 +520,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
|||||||
}
|
}
|
||||||
else
|
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--;
|
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;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -854,7 +869,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*((__long_double_t *)next_parameter) = sum;
|
*((long double *)next_parameter) = sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
num_assignments++;
|
num_assignments++;
|
||||||
@@ -897,7 +912,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
|||||||
{
|
{
|
||||||
SHOWMSG("extended format (long double)");
|
SHOWMSG("extended format (long double)");
|
||||||
|
|
||||||
next_parameter = va_arg(arg,__long_double_t *);
|
next_parameter = va_arg(arg,long double *);
|
||||||
}
|
}
|
||||||
|
|
||||||
assert( next_parameter != NULL );
|
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')
|
if(conversion_type == 'd' || conversion_type == 'u')
|
||||||
base = 10;
|
base = 10;
|
||||||
else if (conversion_type == 'o')
|
else if (conversion_type == 'o')
|
||||||
@@ -1049,11 +1060,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
|||||||
* '0x' prefix or just a zero.
|
* '0x' prefix or just a zero.
|
||||||
*/
|
*/
|
||||||
c = __getc(stream);
|
c = __getc(stream);
|
||||||
|
if (c == 'x' || c == 'X')
|
||||||
/* 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'))
|
|
||||||
{
|
{
|
||||||
/* It's the hex prefix. */
|
/* It's the hex prefix. */
|
||||||
base = 16;
|
base = 16;
|
||||||
@@ -1068,7 +1075,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
|||||||
if(maximum_field_width > 0)
|
if(maximum_field_width > 0)
|
||||||
maximum_field_width--;
|
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
|
/* The preceding '0' was part of the
|
||||||
octal prefix. So we don't really know
|
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;
|
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
|
/* The conversion is considered to have failed if an EOF was
|
||||||
encountered before any non-whitespace characters could be
|
encountered before any non-whitespace characters could be
|
||||||
converted. */
|
converted. We also bail out if we hit an error. */
|
||||||
if(c == EOF && num_chars_processed == 0 && num_conversions == 0)
|
if(c == EOF && (num_chars_processed == 0 || ferror(stream)))
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1415,8 +1422,8 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
|||||||
{
|
{
|
||||||
SHOWMSG("end of file");
|
SHOWMSG("end of file");
|
||||||
|
|
||||||
/* Hit the end of the stream. */
|
/* Hit the end of the stream. Due to an error? */
|
||||||
if(num_conversions == 0)
|
if(num_conversions == 0 || ferror(stream))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -1548,7 +1555,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
|||||||
maximum_field_width--;
|
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;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1562,7 +1569,8 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
result = num_assignments;
|
if(num_conversions > 0)
|
||||||
|
result = num_assignments;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :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,21 +201,9 @@ _do_ctors(void)
|
|||||||
ULONG nptrs = (ULONG)__CTOR_LIST__[0];
|
ULONG nptrs = (ULONG)__CTOR_LIST__[0];
|
||||||
ULONG i;
|
ULONG i;
|
||||||
|
|
||||||
ENTER();
|
|
||||||
|
|
||||||
D(("there are %ld constructors to be called",nptrs));
|
|
||||||
|
|
||||||
/* Call all constructors in forward order */
|
/* Call all constructors in forward order */
|
||||||
for(i = 0 ; i < nptrs ; i++)
|
for(i = 0 ; i < nptrs ; i++)
|
||||||
{
|
|
||||||
D(("calling constructor #%ld, 0x%08lx",i,__CTOR_LIST__[1+i]));
|
|
||||||
|
|
||||||
__CTOR_LIST__[1+i]();
|
__CTOR_LIST__[1+i]();
|
||||||
}
|
|
||||||
|
|
||||||
SHOWMSG("all done.");
|
|
||||||
|
|
||||||
LEAVE();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
@@ -155,10 +216,6 @@ _do_dtors(void)
|
|||||||
ULONG nptrs = (ULONG)__DTOR_LIST__[0];
|
ULONG nptrs = (ULONG)__DTOR_LIST__[0];
|
||||||
static ULONG i;
|
static ULONG i;
|
||||||
|
|
||||||
ENTER();
|
|
||||||
|
|
||||||
D(("there are %ld destructors to be called",nptrs));
|
|
||||||
|
|
||||||
/* If one of the destructors drops into
|
/* If one of the destructors drops into
|
||||||
* exit(), processing will continue with
|
* exit(), processing will continue with
|
||||||
* the next following destructor.
|
* the next following destructor.
|
||||||
@@ -167,15 +224,7 @@ _do_dtors(void)
|
|||||||
|
|
||||||
/* Call all destructors in reverse order */
|
/* Call all destructors in reverse order */
|
||||||
while(i++ < nptrs)
|
while(i++ < nptrs)
|
||||||
{
|
|
||||||
D(("calling destructor #%ld, 0x%08lx",i,__DTOR_LIST__[1+nptrs - i]));
|
|
||||||
|
|
||||||
__DTOR_LIST__[1+nptrs - i]();
|
__DTOR_LIST__[1+nptrs - i]();
|
||||||
}
|
|
||||||
|
|
||||||
SHOWMSG("all done.");
|
|
||||||
|
|
||||||
LEAVE();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|||||||
@@ -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
|
* :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)
|
#if defined(__SASC)
|
||||||
|
|
||||||
UBYTE * __base;
|
UBYTE * __base;
|
||||||
|
|
||||||
#endif /* __SASC */
|
#endif /* __SASC */
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
struct Library * __UtilityBase;
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
#if defined(__amigaos4__)
|
|
||||||
struct UtilityIFace * __IUtility;
|
|
||||||
#endif /* __amigaos4__ */
|
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -42,6 +42,10 @@ int __exit_value = RETURN_FAIL;
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
extern void __exit_trap_trigger(void);
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
void
|
void
|
||||||
_exit(int return_code)
|
_exit(int return_code)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
* :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 MemoryTree __memory_tree;
|
||||||
extern struct MinList NOCOMMON __memory_list;
|
extern struct MinList __memory_list;
|
||||||
extern APTR NOCOMMON __memory_pool;
|
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 __maximum_memory_allocated;
|
||||||
extern unsigned long NOCOMMON __current_memory_allocated;
|
extern unsigned long __current_memory_allocated;
|
||||||
extern unsigned long NOCOMMON __maximum_num_memory_chunks_allocated;
|
extern unsigned long __maximum_num_memory_chunks_allocated;
|
||||||
extern unsigned long NOCOMMON __current_num_memory_chunks_allocated;
|
extern unsigned long __current_num_memory_chunks_allocated;
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
extern jmp_buf NOCOMMON __exit_jmp_buf;
|
extern jmp_buf __exit_jmp_buf;
|
||||||
extern int NOCOMMON __exit_value;
|
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 unsigned int __stack_size;
|
||||||
extern BOOL NOCOMMON __stack_overflow;
|
extern BOOL __stack_overflow;
|
||||||
extern UBYTE * NOCOMMON __stk_limit;
|
extern UBYTE * __stk_limit;
|
||||||
extern UBYTE * NOCOMMON __base;
|
/*extern UBYTE ** __stackborders;*/
|
||||||
|
/*extern UBYTE * __SaveSP;*/
|
||||||
|
extern UBYTE * __base;
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
extern ULONG NOCOMMON __stk_argbytes;
|
extern ULONG __stk_argbytes;
|
||||||
extern ULONG NOCOMMON __stk_safezone;
|
extern ULONG __stk_safezone;
|
||||||
extern ULONG NOCOMMON __stk_maxsize;
|
extern ULONG __stk_maxsize;
|
||||||
extern ULONG NOCOMMON __stk_size;
|
extern ULONG __stk_size;
|
||||||
extern ULONG NOCOMMON __stk_extensions;
|
extern ULONG __stk_extensions;
|
||||||
extern ULONG NOCOMMON __stk_minframe;
|
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 char ** __argv;
|
||||||
extern int NOCOMMON __argc;
|
extern int __argc;
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
extern UBYTE * NOCOMMON __quote_vector;
|
extern UBYTE * __quote_vector;
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
extern int NOCOMMON __default_pool_size;
|
extern int __default_pool_size;
|
||||||
extern int NOCOMMON __default_puddle_size;
|
extern int __default_puddle_size;
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -49,14 +49,8 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#ifndef _MACROS_H
|
extern struct Library * __UtilityBase;
|
||||||
#include "macros.h"
|
extern struct Library * __LocaleBase;
|
||||||
#endif /* _MACROS_H */
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
extern struct Library * NOCOMMON __UtilityBase;
|
|
||||||
extern struct Library * NOCOMMON __LocaleBase;
|
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
@@ -64,8 +58,8 @@ extern struct Library * NOCOMMON __LocaleBase;
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
extern struct UtilityIFace NOCOMMON * __IUtility;
|
extern struct UtilityIFace * __IUtility;
|
||||||
extern struct LocaleIFace NOCOMMON * __ILocale;
|
extern struct LocaleIFace * __ILocale;
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :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
|
#if 0
|
||||||
trick, but not always necessary. Don't enable this unless you know
|
|
||||||
what you're doing... */
|
|
||||||
#if defined(__USE_SAS_PROFILING_FOR_MONITORING)
|
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
@@ -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)
|
call_main(void)
|
||||||
{
|
{
|
||||||
/* Initialization functions; must be called exactly in this
|
/* Initialization functions; must be called exactly in this
|
||||||
order because there are dependencies between the
|
* order because there are dependencies between the
|
||||||
individual functions. */
|
* individual functions.
|
||||||
|
*/
|
||||||
static init_func_ptr init_functions[] =
|
static init_func_ptr init_functions[] =
|
||||||
{
|
{
|
||||||
__stdlib_init,
|
__stdlib_init,
|
||||||
@@ -121,18 +119,31 @@ call_main(void)
|
|||||||
__stdio_init,
|
__stdio_init,
|
||||||
__machine_test,
|
__machine_test,
|
||||||
__math_init,
|
__math_init,
|
||||||
|
__locale_init,
|
||||||
|
__unistd_init,
|
||||||
__socket_init,
|
__socket_init,
|
||||||
|
__usergroup_init,
|
||||||
__wildcard_expand_init,
|
__wildcard_expand_init,
|
||||||
|
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Finalization functions; these may be called
|
/* Finalization functions; these may be called
|
||||||
essentially in any order. But this one makes the
|
* essentially in any order. But this one makes the
|
||||||
most sense (roll-back of the corresponding
|
* most sense (roll-back of the corresponding
|
||||||
initialization functions). */
|
* initialization functions).
|
||||||
|
*/
|
||||||
static exit_func_ptr exit_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,
|
__stdlib_exit,
|
||||||
|
|
||||||
NULL
|
NULL
|
||||||
@@ -140,65 +151,41 @@ call_main(void)
|
|||||||
|
|
||||||
static size_t i;
|
static size_t i;
|
||||||
|
|
||||||
ENTER();
|
|
||||||
|
|
||||||
/* This plants the return buffer for _exit(). */
|
/* This plants the return buffer for _exit(). */
|
||||||
if(setjmp(__exit_jmp_buf) != 0)
|
if(setjmp(__exit_jmp_buf) != 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
SHOWMSG("calling init functions");
|
|
||||||
|
|
||||||
for(i = 0 ; init_functions[i] != NULL ; i++)
|
for(i = 0 ; init_functions[i] != NULL ; i++)
|
||||||
{
|
{
|
||||||
D(("calling init function #%ld",i));
|
|
||||||
|
|
||||||
if((*init_functions[i])() != OK)
|
if((*init_functions[i])() != OK)
|
||||||
{
|
|
||||||
SHOWMSG("that didn't work");
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SHOWMSG("now invoking the constructors");
|
|
||||||
|
|
||||||
/* Go through the constructor list */
|
/* Go through the constructor list */
|
||||||
_init();
|
_init();
|
||||||
|
|
||||||
SHOWMSG("done.");
|
//show_profile_names = TRUE;
|
||||||
|
|
||||||
/* 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 */
|
|
||||||
|
|
||||||
/* After all these preparations, get this show on the road... */
|
/* After all these preparations, get this show on the road... */
|
||||||
exit(main((int)__argc,(char **)__argv));
|
exit(main((int)__argc,(char **)__argv));
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
/* Switch off function name printing, if it was enabled. */
|
//show_profile_names = FALSE;
|
||||||
#if defined(__USE_SAS_PROFILING_FOR_MONITORING)
|
|
||||||
{
|
|
||||||
show_profile_names = FALSE;
|
|
||||||
}
|
|
||||||
#endif /* __USE_SAS_PROFILING_FOR_MONITORING */
|
|
||||||
|
|
||||||
/* If we end up here with the __stack_overflow variable
|
/* If we end up here with the __stack_overflow variable
|
||||||
set then the stack overflow handler dropped into
|
* set then the stack overflow handler dropped into
|
||||||
longjmp() and _exit() did not get called. This
|
* longjmp() and _exit() did not get called. This
|
||||||
means that we will have to show the error message
|
* means that we will have to show the error message
|
||||||
and invoke _exit() all on our own. */
|
* and invoke _exit() all on our own.
|
||||||
|
*/
|
||||||
if(__stack_overflow)
|
if(__stack_overflow)
|
||||||
{
|
{
|
||||||
SHOWMSG("we have a stack overflow");
|
|
||||||
|
|
||||||
/* Dump whatever is waiting to be written to the
|
/* Dump whatever is waiting to be written to the
|
||||||
standard I/O streams, and make sure that no
|
* standard I/O streams, and make sure that no
|
||||||
break signal is about to make things any more
|
* break signal is about to make things any more
|
||||||
complicated than they already are. */
|
* complicated than they already are.
|
||||||
|
*/
|
||||||
__check_abort_enabled = FALSE;
|
__check_abort_enabled = FALSE;
|
||||||
|
|
||||||
if(stdout != NULL)
|
if(stdout != NULL)
|
||||||
@@ -216,28 +203,20 @@ call_main(void)
|
|||||||
/* If necessary, print stack size usage information. */
|
/* If necessary, print stack size usage information. */
|
||||||
__stack_usage_exit();
|
__stack_usage_exit();
|
||||||
|
|
||||||
SHOWMSG("invoking the destructors");
|
|
||||||
|
|
||||||
/* Go through the destructor list */
|
/* Go through the destructor list */
|
||||||
_fini();
|
_fini();
|
||||||
|
|
||||||
SHOWMSG("done.");
|
|
||||||
|
|
||||||
SHOWMSG("calling the exit functions");
|
|
||||||
|
|
||||||
/* Any of the following cleanup routines may call
|
/* Any of the following cleanup routines may call
|
||||||
_exit() by way of abort() or through a hook
|
* _exit() by way of abort() or through a hook
|
||||||
function. Which is why we redirect the exit
|
* function. Which is why we redirect the exit
|
||||||
return procedure. */
|
* return procedure.
|
||||||
|
*/
|
||||||
for(i = 0 ; exit_functions[i] != NULL ; i++)
|
for(i = 0 ; exit_functions[i] != NULL ; i++)
|
||||||
{
|
{
|
||||||
D(("calling exit function #%ld",i));
|
|
||||||
|
|
||||||
if(setjmp(__exit_jmp_buf) == 0)
|
if(setjmp(__exit_jmp_buf) == 0)
|
||||||
(*exit_functions[i])();
|
(*exit_functions[i])();
|
||||||
}
|
}
|
||||||
|
|
||||||
RETURN(__exit_value);
|
|
||||||
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)
|
if(((struct Library *)DOSBase)->lib_Version < 50)
|
||||||
{
|
{
|
||||||
/* Now for the slightly shady part. We need to unload the segment
|
/* Now for the slightly shady part. We need to unload the segment
|
||||||
list this program was originally loaded with. We have to close
|
* list this program was originally loaded with. We have to close
|
||||||
dos.library, though, which means that either we can close the
|
* dos.library, though, which means that either we can close the
|
||||||
library or unload the code, but not both. But there's a loophole
|
* 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
|
* in that we can enter Forbid(), unload the code, close the library
|
||||||
and exit and nobody will be able to allocate this program's
|
* and exit and nobody will be able to allocate this program's
|
||||||
memory until after the process has been terminated. */
|
* memory until after the process has been terminated.
|
||||||
|
*/
|
||||||
Forbid();
|
Forbid();
|
||||||
|
|
||||||
UnLoadSeg(segment_list);
|
UnLoadSeg(segment_list);
|
||||||
@@ -310,7 +290,6 @@ _main(void)
|
|||||||
int return_code = RETURN_FAIL;
|
int return_code = RETURN_FAIL;
|
||||||
ULONG current_stack_size;
|
ULONG current_stack_size;
|
||||||
APTR old_window_pointer;
|
APTR old_window_pointer;
|
||||||
int os_version;
|
|
||||||
|
|
||||||
SysBase = *(struct Library **)4;
|
SysBase = *(struct Library **)4;
|
||||||
|
|
||||||
@@ -344,26 +323,13 @@ _main(void)
|
|||||||
|
|
||||||
__WBenchMsg = startup_message;
|
__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. */
|
/* We will need dos.library V37 and utility.library V37. */
|
||||||
DOSBase = (struct Library *)OpenLibrary("dos.library",os_version);
|
DOSBase = (struct Library *)OpenLibrary("dos.library",37);
|
||||||
__UtilityBase = OpenLibrary("utility.library",os_version);
|
__UtilityBase = OpenLibrary("utility.library",37);
|
||||||
|
|
||||||
if(DOSBase == NULL || __UtilityBase == NULL)
|
if(DOSBase == NULL || __UtilityBase == NULL)
|
||||||
{
|
{
|
||||||
char * error_message;
|
__show_error("This program requires AmigaOS 2.04 or higher.");
|
||||||
|
|
||||||
/* 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);
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -381,9 +347,13 @@ _main(void)
|
|||||||
}
|
}
|
||||||
#endif /* __amigaos4__ */
|
#endif /* __amigaos4__ */
|
||||||
|
|
||||||
|
/* Remember when this program was started. */
|
||||||
|
DateStamp(&__start_time);
|
||||||
|
|
||||||
/* If a callback was provided which can fill us in on which
|
/* If a callback was provided which can fill us in on which
|
||||||
minimum stack size should be used, invoke it now and
|
* minimum stack size should be used, invoke it now and
|
||||||
store its result in the global __stack_size variable. */
|
* store its result in the global __stack_size variable.
|
||||||
|
*/
|
||||||
if(__get_default_stack_size != NULL)
|
if(__get_default_stack_size != NULL)
|
||||||
{
|
{
|
||||||
unsigned int size;
|
unsigned int size;
|
||||||
@@ -397,8 +367,9 @@ _main(void)
|
|||||||
current_stack_size = get_stack_size(&this_process->pr_Task);
|
current_stack_size = get_stack_size(&this_process->pr_Task);
|
||||||
|
|
||||||
/* If this is a resident program, don't allow for the detach
|
/* If this is a resident program, don't allow for the detach
|
||||||
code to run. Same goes for launching the program from
|
* code to run. Same goes for launching the program from
|
||||||
Workbench. */
|
* Workbench.
|
||||||
|
*/
|
||||||
if(__is_resident || startup_message != NULL)
|
if(__is_resident || startup_message != NULL)
|
||||||
{
|
{
|
||||||
__detach = FALSE;
|
__detach = FALSE;
|
||||||
@@ -410,51 +381,44 @@ _main(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* The following code will be executed if the program is to keep
|
/* 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)
|
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
|
/* 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)
|
if(__stack_size > 0 && current_stack_size < (ULONG)__stack_size)
|
||||||
{
|
{
|
||||||
struct StackSwapStruct * stk;
|
struct StackSwapStruct * stk;
|
||||||
unsigned int stack_size;
|
unsigned int stack_size;
|
||||||
APTR new_stack;
|
ULONG lower,upper;
|
||||||
|
|
||||||
/* Make the stack size a multiple of 32 bytes. */
|
/* Make the stack size a multiple of 16 bytes. */
|
||||||
stack_size = 32 + ((__stack_size + 31UL) & ~31UL);
|
stack_size = (__stack_size + 15UL) & ~15UL;
|
||||||
|
|
||||||
/* Allocate the stack swapping data structure
|
/* We allocate a little more memory so that we can align
|
||||||
and the stack space separately. */
|
the stack to a 128 bit boundary. */
|
||||||
stk = AllocVec(sizeof(*stk),MEMF_PUBLIC|MEMF_ANY);
|
stk = AllocVec(sizeof(*stk) + 15 + stack_size,MEMF_PUBLIC|MEMF_ANY);
|
||||||
if(stk == NULL)
|
if(stk == NULL)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
new_stack = AllocMem(stack_size,MEMF_PUBLIC|MEMF_ANY);
|
/* Align the lower stack bound to a 128 bit boundary, then
|
||||||
if(new_stack == NULL)
|
fix up the upper bound, which is guaranteed to be on
|
||||||
{
|
a 128 bit boundary, too, on account of the stack size
|
||||||
FreeVec(stk);
|
having being rounded to that boundary. */
|
||||||
goto out;
|
lower = (((ULONG)(stk+1)) + 15UL) & ~15UL;
|
||||||
}
|
upper = lower + stack_size;
|
||||||
|
|
||||||
/* Fill in the lower and upper bounds, then take care of
|
stk->stk_Lower = (APTR)lower;
|
||||||
the stack pointer itself. */
|
stk->stk_Upper = upper;
|
||||||
stk->stk_Lower = new_stack;
|
stk->stk_Pointer = (APTR)upper;
|
||||||
stk->stk_Upper = (ULONG)(new_stack) + stack_size;
|
|
||||||
stk->stk_Pointer = (APTR)(stk->stk_Upper - 32);
|
|
||||||
|
|
||||||
/* If necessary, set up for stack size usage measurement. */
|
/* If necessary, set up for stack size usage measurement. */
|
||||||
__stack_usage_init(stk);
|
__stack_usage_init(stk);
|
||||||
|
|
||||||
return_code = __swap_stack_and_call(stk,(APTR)call_main);
|
return_code = __swap_stack_and_call(stk,(APTR)call_main);
|
||||||
|
|
||||||
FreeMem(new_stack, stack_size);
|
|
||||||
FreeVec(stk);
|
FreeVec(stk);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -462,21 +426,19 @@ _main(void)
|
|||||||
/* We have enough room to make the call or just don't care. */
|
/* We have enough room to make the call or just don't care. */
|
||||||
return_code = call_main();
|
return_code = call_main();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Restore the task priority. */
|
|
||||||
SetTaskPri((struct Task *)this_process,old_priority);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
struct CommandLineInterface * cli = Cli();
|
struct CommandLineInterface * cli = Cli();
|
||||||
struct TagItem tags[12];
|
struct TagItem tags[11];
|
||||||
UBYTE program_name[256];
|
UBYTE program_name[256];
|
||||||
unsigned int stack_size;
|
unsigned int stack_size;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* Now for the interesting part: detach from the shell we're
|
/* Now for the interesting part: detach from the shell we're
|
||||||
currently executing in. This works only if the program is
|
* currently executing in. This works only if the program is
|
||||||
not reentrant and has not been launched from Workbench. */
|
* not reentrant and has not been launched from Workbench.
|
||||||
|
*/
|
||||||
|
|
||||||
stack_size = __stack_size;
|
stack_size = __stack_size;
|
||||||
|
|
||||||
@@ -495,9 +457,9 @@ _main(void)
|
|||||||
tags[i]. ti_Tag = NP_StackSize;
|
tags[i]. ti_Tag = NP_StackSize;
|
||||||
tags[i++]. ti_Data = stack_size;
|
tags[i++]. ti_Data = stack_size;
|
||||||
tags[i]. ti_Tag = NP_Name;
|
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_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_Tag = NP_Cli;
|
||||||
tags[i++]. ti_Data = TRUE;
|
tags[i++]. ti_Data = TRUE;
|
||||||
tags[i]. ti_Tag = NP_Arguments;
|
tags[i]. ti_Tag = NP_Arguments;
|
||||||
@@ -507,13 +469,6 @@ _main(void)
|
|||||||
tags[i]. ti_Tag = NP_ExitData;
|
tags[i]. ti_Tag = NP_ExitData;
|
||||||
tags[i++]. ti_Data = (ULONG)cli->cli_Module;
|
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. */
|
/* dos.library V50 will free the segment list upon exit. */
|
||||||
if(((struct Library *)DOSBase)->lib_Version >= 50)
|
if(((struct Library *)DOSBase)->lib_Version >= 50)
|
||||||
{
|
{
|
||||||
@@ -600,10 +555,11 @@ _main(void)
|
|||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
/* The following is automatically called by the main() function through code
|
/* The following is automatically called by the main() function through code
|
||||||
inserted by GCC. In theory, this could be removed by updating the machine
|
* 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
|
* 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()
|
* to call the constructor functions, but we do this in our own _main()
|
||||||
anyway. */
|
* anyway.
|
||||||
|
*/
|
||||||
|
|
||||||
#if defined(__GNUC__)
|
#if defined(__GNUC__)
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -41,6 +41,13 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
void
|
||||||
|
__math_exit(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
int
|
int
|
||||||
__math_init(void)
|
__math_init(void)
|
||||||
{
|
{
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user