summaryrefslogtreecommitdiff
path: root/newlib/libc/sys/go32
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/sys/go32')
-rw-r--r--newlib/libc/sys/go32/Makefile.am105
-rw-r--r--newlib/libc/sys/go32/Makefile.in402
-rw-r--r--newlib/libc/sys/go32/_exit.s20
-rw-r--r--newlib/libc/sys/go32/_main.c3
-rw-r--r--newlib/libc/sys/go32/abort.c8
-rw-r--r--newlib/libc/sys/go32/access.c34
-rw-r--r--newlib/libc/sys/go32/aclocal.m4282
-rw-r--r--newlib/libc/sys/go32/bdos.c12
-rw-r--r--newlib/libc/sys/go32/bdosptr.c12
-rw-r--r--newlib/libc/sys/go32/brk.s27
-rw-r--r--newlib/libc/sys/go32/chdir.s27
-rw-r--r--newlib/libc/sys/go32/chmod.c15
-rw-r--r--newlib/libc/sys/go32/chown.c15
-rw-r--r--newlib/libc/sys/go32/clock.S45
-rw-r--r--newlib/libc/sys/go32/close.s27
-rwxr-xr-xnewlib/libc/sys/go32/configure1687
-rw-r--r--newlib/libc/sys/go32/configure.in12
-rw-r--r--newlib/libc/sys/go32/copying.dj63
-rw-r--r--newlib/libc/sys/go32/creat.s19
-rw-r--r--newlib/libc/sys/go32/crlf2nl.c69
-rw-r--r--newlib/libc/sys/go32/crt0.S233
-rw-r--r--newlib/libc/sys/go32/dir.c95
-rw-r--r--newlib/libc/sys/go32/dir.h53
-rw-r--r--newlib/libc/sys/go32/djtime.h42
-rw-r--r--newlib/libc/sys/go32/dos.h107
-rw-r--r--newlib/libc/sys/go32/dosmem.S120
-rw-r--r--newlib/libc/sys/go32/dpmi.c413
-rw-r--r--newlib/libc/sys/go32/dpmi.h151
-rw-r--r--newlib/libc/sys/go32/dup.s28
-rw-r--r--newlib/libc/sys/go32/dup2.s28
-rw-r--r--newlib/libc/sys/go32/exec.c509
-rw-r--r--newlib/libc/sys/go32/fchmod.c18
-rw-r--r--newlib/libc/sys/go32/findfirs.s18
-rw-r--r--newlib/libc/sys/go32/findnext.s16
-rw-r--r--newlib/libc/sys/go32/fixpath.c155
-rw-r--r--newlib/libc/sys/go32/fstat.s19
-rw-r--r--newlib/libc/sys/go32/fsync.s27
-rw-r--r--newlib/libc/sys/go32/ftruncat.c25
-rw-r--r--newlib/libc/sys/go32/gerrno.s33
-rw-r--r--newlib/libc/sys/go32/getcwd.c37
-rw-r--r--newlib/libc/sys/go32/getdate.c11
-rw-r--r--newlib/libc/sys/go32/getdtabl.c18
-rw-r--r--newlib/libc/sys/go32/getgid.c9
-rw-r--r--newlib/libc/sys/go32/getkey.s59
-rw-r--r--newlib/libc/sys/go32/getpages.c18
-rw-r--r--newlib/libc/sys/go32/getpid.c18
-rw-r--r--newlib/libc/sys/go32/getrusag.c35
-rw-r--r--newlib/libc/sys/go32/gettime.c12
-rw-r--r--newlib/libc/sys/go32/gettimeo.c61
-rw-r--r--newlib/libc/sys/go32/gettimeo.s19
-rw-r--r--newlib/libc/sys/go32/getuid.c9
-rw-r--r--newlib/libc/sys/go32/getwd.s31
-rw-r--r--newlib/libc/sys/go32/go32.h70
-rw-r--r--newlib/libc/sys/go32/go32func.c69
-rw-r--r--newlib/libc/sys/go32/infoblk.c4
-rw-r--r--newlib/libc/sys/go32/inportb.s21
-rw-r--r--newlib/libc/sys/go32/inportl.s19
-rw-r--r--newlib/libc/sys/go32/inportsb.s25
-rw-r--r--newlib/libc/sys/go32/inportsl.s24
-rw-r--r--newlib/libc/sys/go32/inportsw.s24
-rw-r--r--newlib/libc/sys/go32/inportw.s21
-rw-r--r--newlib/libc/sys/go32/int86x.s103
-rw-r--r--newlib/libc/sys/go32/intdos.c7
-rw-r--r--newlib/libc/sys/go32/intdosx.c6
-rw-r--r--newlib/libc/sys/go32/isatty.s33
-rw-r--r--newlib/libc/sys/go32/kbhit.s51
-rw-r--r--newlib/libc/sys/go32/kill.c6
-rw-r--r--newlib/libc/sys/go32/link.s28
-rw-r--r--newlib/libc/sys/go32/longjmp.S65
-rw-r--r--newlib/libc/sys/go32/lseek.s36
-rw-r--r--newlib/libc/sys/go32/lstat.s19
-rw-r--r--newlib/libc/sys/go32/mkdir.s27
-rw-r--r--newlib/libc/sys/go32/open.s31
-rw-r--r--newlib/libc/sys/go32/outportb.s21
-rw-r--r--newlib/libc/sys/go32/outportl.s20
-rw-r--r--newlib/libc/sys/go32/outportw.s22
-rw-r--r--newlib/libc/sys/go32/outprtsb.s25
-rw-r--r--newlib/libc/sys/go32/outprtsl.s25
-rw-r--r--newlib/libc/sys/go32/outprtsw.s25
-rw-r--r--newlib/libc/sys/go32/pc.h71
-rw-r--r--newlib/libc/sys/go32/read.s30
-rw-r--r--newlib/libc/sys/go32/readv.c31
-rw-r--r--newlib/libc/sys/go32/rename.s31
-rw-r--r--newlib/libc/sys/go32/rmdir.s27
-rw-r--r--newlib/libc/sys/go32/sbrk.s27
-rw-r--r--newlib/libc/sys/go32/screen.S256
-rw-r--r--newlib/libc/sys/go32/setjmp.S61
-rw-r--r--newlib/libc/sys/go32/setmode.s19
-rw-r--r--newlib/libc/sys/go32/setstack.S70
-rw-r--r--newlib/libc/sys/go32/settimeo.s19
-rw-r--r--newlib/libc/sys/go32/sleep.c27
-rw-r--r--newlib/libc/sys/go32/stat.c151
-rw-r--r--newlib/libc/sys/go32/stat.s19
-rw-r--r--newlib/libc/sys/go32/stat_ast.s21
-rw-r--r--newlib/libc/sys/go32/sys/dir.h33
-rw-r--r--newlib/libc/sys/go32/sys/dirent.h39
-rw-r--r--newlib/libc/sys/go32/sys/dos.h57
-rw-r--r--newlib/libc/sys/go32/sys/dpmi.h151
-rw-r--r--newlib/libc/sys/go32/sys/errno.h73
-rw-r--r--newlib/libc/sys/go32/sys/fcntl.h12
-rw-r--r--newlib/libc/sys/go32/sys/file.h31
-rw-r--r--newlib/libc/sys/go32/sys/go32.h69
-rw-r--r--newlib/libc/sys/go32/sys/param.h22
-rw-r--r--newlib/libc/sys/go32/sys/pc.h56
-rw-r--r--newlib/libc/sys/go32/sys/register.h28
-rw-r--r--newlib/libc/sys/go32/sys/resource.h50
-rw-r--r--newlib/libc/sys/go32/sys/setjmp.h44
-rw-r--r--newlib/libc/sys/go32/sys/stdc.h15
-rw-r--r--newlib/libc/sys/go32/sys/uio.h23
-rw-r--r--newlib/libc/sys/go32/syserr.c38
-rw-r--r--newlib/libc/sys/go32/system.s19
-rw-r--r--newlib/libc/sys/go32/tell.s33
-rw-r--r--newlib/libc/sys/go32/time.c53
-rw-r--r--newlib/libc/sys/go32/truncate.c25
-rw-r--r--newlib/libc/sys/go32/turbo.s30
-rw-r--r--newlib/libc/sys/go32/umask.c4
-rw-r--r--newlib/libc/sys/go32/unlink.s27
-rw-r--r--newlib/libc/sys/go32/utime.c15
-rw-r--r--newlib/libc/sys/go32/utimes.c15
-rw-r--r--newlib/libc/sys/go32/write.s30
-rw-r--r--newlib/libc/sys/go32/writestub.c6
-rw-r--r--newlib/libc/sys/go32/writev.c31
122 files changed, 8027 insertions, 0 deletions
diff --git a/newlib/libc/sys/go32/Makefile.am b/newlib/libc/sys/go32/Makefile.am
new file mode 100644
index 00000000000..4ccd669da32
--- /dev/null
+++ b/newlib/libc/sys/go32/Makefile.am
@@ -0,0 +1,105 @@
+## Process this file with automake to generate Makefile.in
+
+AUTOMAKE_OPTIONS = cygnus
+
+INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
+
+noinst_LIBRARIES = lib.a
+
+lib_a_SOURCES = \
+ _exit.s \
+ _main.c \
+ abort.c \
+ access.c \
+ bdos.c \
+ bdosptr.c \
+ brk.s \
+ chdir.s \
+ chmod.c \
+ chown.c \
+ clock.S \
+ close.s \
+ creat.s \
+ crlf2nl.c \
+ dir.c \
+ dosmem.S \
+ dpmi.c \
+ dup.s \
+ dup2.s \
+ exec.c \
+ fchmod.c \
+ findfirs.s \
+ findnext.s \
+ fixpath.c \
+ fstat.s \
+ fsync.s \
+ ftruncat.c \
+ gerrno.s \
+ getcwd.c \
+ getdate.c \
+ getdtabl.c \
+ getgid.c \
+ getkey.s \
+ getpages.c \
+ getpid.c \
+ getrusag.c \
+ gettime.c \
+ gettimeo.c \
+ getuid.c \
+ getwd.s \
+ go32func.c \
+ infoblk.c \
+ inportb.s \
+ inportl.s \
+ inportsb.s \
+ inportsl.s \
+ inportsw.s \
+ inportw.s \
+ int86x.s \
+ intdos.c \
+ intdosx.c \
+ isatty.s \
+ kbhit.s \
+ kill.c \
+ link.s \
+ longjmp.S \
+ lseek.s \
+ lstat.s \
+ mkdir.s \
+ open.s \
+ outportb.s \
+ outportl.s \
+ outportw.s \
+ outprtsb.s \
+ outprtsl.s \
+ outprtsw.s \
+ read.s \
+ readv.c \
+ rename.s \
+ rmdir.s \
+ sbrk.s \
+ screen.S \
+ setjmp.S \
+ setmode.s \
+ setstack.S \
+ settimeo.s \
+ sleep.c \
+ stat.c \
+ stat_ast.s \
+ syserr.c \
+ system.s \
+ tell.s \
+ time.c \
+ truncate.c \
+ turbo.s \
+ umask.c \
+ unlink.s \
+ utime.c \
+ utimes.c \
+ write.s \
+ writev.c
+
+all: crt0.o
+
+ACLOCAL_AMFLAGS = -I ../../..
+CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host
diff --git a/newlib/libc/sys/go32/Makefile.in b/newlib/libc/sys/go32/Makefile.in
new file mode 100644
index 00000000000..eb0fb8f29d8
--- /dev/null
+++ b/newlib/libc/sys/go32/Makefile.in
@@ -0,0 +1,402 @@
+# Makefile.in generated automatically by automake 1.3 from Makefile.am
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DISTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = .
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
+AR = @AR@
+AS = @AS@
+CC = @CC@
+CPP = @CPP@
+EXEEXT = @EXEEXT@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+NEWLIB_CFLAGS = @NEWLIB_CFLAGS@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+VERSION = @VERSION@
+machine_dir = @machine_dir@
+newlib_basedir = @newlib_basedir@
+sys_dir = @sys_dir@
+
+AUTOMAKE_OPTIONS = cygnus
+
+INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
+
+noinst_LIBRARIES = lib.a
+
+lib_a_SOURCES = \
+ _exit.s \
+ _main.c \
+ abort.c \
+ access.c \
+ bdos.c \
+ bdosptr.c \
+ brk.s \
+ chdir.s \
+ chmod.c \
+ chown.c \
+ clock.S \
+ close.s \
+ creat.s \
+ crlf2nl.c \
+ dir.c \
+ dosmem.S \
+ dpmi.c \
+ dup.s \
+ dup2.s \
+ exec.c \
+ fchmod.c \
+ findfirs.s \
+ findnext.s \
+ fixpath.c \
+ fstat.s \
+ fsync.s \
+ ftruncat.c \
+ gerrno.s \
+ getcwd.c \
+ getdate.c \
+ getdtabl.c \
+ getgid.c \
+ getkey.s \
+ getpages.c \
+ getpid.c \
+ getrusag.c \
+ gettime.c \
+ gettimeo.c \
+ getuid.c \
+ getwd.s \
+ go32func.c \
+ infoblk.c \
+ inportb.s \
+ inportl.s \
+ inportsb.s \
+ inportsl.s \
+ inportsw.s \
+ inportw.s \
+ int86x.s \
+ intdos.c \
+ intdosx.c \
+ isatty.s \
+ kbhit.s \
+ kill.c \
+ link.s \
+ longjmp.S \
+ lseek.s \
+ lstat.s \
+ mkdir.s \
+ open.s \
+ outportb.s \
+ outportl.s \
+ outportw.s \
+ outprtsb.s \
+ outprtsl.s \
+ outprtsw.s \
+ read.s \
+ readv.c \
+ rename.s \
+ rmdir.s \
+ sbrk.s \
+ screen.S \
+ setjmp.S \
+ setmode.s \
+ setstack.S \
+ settimeo.s \
+ sleep.c \
+ stat.c \
+ stat_ast.s \
+ syserr.c \
+ system.s \
+ tell.s \
+ time.c \
+ truncate.c \
+ turbo.s \
+ umask.c \
+ unlink.s \
+ utime.c \
+ utimes.c \
+ write.s \
+ writev.c
+
+ACLOCAL_AMFLAGS = -I ../../..
+CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/../../../../mkinstalldirs
+CONFIG_CLEAN_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+
+
+DEFS = @DEFS@ -I. -I$(srcdir)
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+lib_a_LIBADD =
+lib_a_OBJECTS = _exit.o _main.o abort.o access.o bdos.o bdosptr.o brk.o \
+chdir.o chmod.o chown.o clock.o close.o creat.o crlf2nl.o dir.o \
+dosmem.o dpmi.o dup.o dup2.o exec.o fchmod.o findfirs.o findnext.o \
+fixpath.o fstat.o fsync.o ftruncat.o gerrno.o getcwd.o getdate.o \
+getdtabl.o getgid.o getkey.o getpages.o getpid.o getrusag.o gettime.o \
+gettimeo.o getuid.o getwd.o go32func.o infoblk.o inportb.o inportl.o \
+inportsb.o inportsl.o inportsw.o inportw.o int86x.o intdos.o intdosx.o \
+isatty.o kbhit.o kill.o link.o longjmp.o lseek.o lstat.o mkdir.o open.o \
+outportb.o outportl.o outportw.o outprtsb.o outprtsl.o outprtsw.o \
+read.o readv.o rename.o rmdir.o sbrk.o screen.o setjmp.o setmode.o \
+setstack.o settimeo.o sleep.o stat.o stat_ast.o syserr.o system.o \
+tell.o time.o truncate.o turbo.o umask.o unlink.o utime.o utimes.o \
+write.o writev.o
+CFLAGS = @CFLAGS@
+COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
+LINK = $(CC) $(CFLAGS) $(LDFLAGS) -o $@
+DIST_COMMON = Makefile.am Makefile.in aclocal.m4 configure configure.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP = --best
+SOURCES = $(lib_a_SOURCES)
+OBJECTS = $(lib_a_OBJECTS)
+
+all: Makefile $(LIBRARIES)
+
+.SUFFIXES:
+.SUFFIXES: .S .c .o .s
+$(srcdir)/Makefile.in: @MAINT@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+$(ACLOCAL_M4): @MAINT@ configure.in ../../../acinclude.m4 \
+ ../../../aclocal.m4
+ cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+$(srcdir)/configure: @MAINT@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
+ cd $(srcdir) && $(AUTOCONF)
+
+mostlyclean-noinstLIBRARIES:
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+
+distclean-noinstLIBRARIES:
+
+maintainer-clean-noinstLIBRARIES:
+
+.c.o:
+ $(COMPILE) -c $<
+
+.s.o:
+ $(COMPILE) -c $<
+
+.S.o:
+ $(COMPILE) -c $<
+
+mostlyclean-compile:
+ -rm -f *.o core *.core
+
+clean-compile:
+
+distclean-compile:
+ -rm -f *.tab.c
+
+maintainer-clean-compile:
+
+lib.a: $(lib_a_OBJECTS) $(lib_a_DEPENDENCIES)
+ -rm -f lib.a
+ $(AR) cru lib.a $(lib_a_OBJECTS) $(lib_a_LIBADD)
+ $(RANLIB) lib.a
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+ here=`pwd` && cd $(srcdir) \
+ && mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP)
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ -rm -rf $(distdir)
+ GZIP=$(GZIP) $(TAR) zxf $(distdir).tar.gz
+ mkdir $(distdir)/=build
+ mkdir $(distdir)/=inst
+ dc_install_base=`cd $(distdir)/=inst && pwd`; \
+ cd $(distdir)/=build \
+ && ../configure --srcdir=.. --prefix=$$dc_install_base \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) dist
+ -rm -rf $(distdir)
+ @echo "========================"; \
+ echo "$(distdir).tar.gz is ready for distribution"; \
+ echo "========================"
+dist: distdir
+ -chmod -R a+r $(distdir)
+ GZIP=$(GZIP) $(TAR) chozf $(distdir).tar.gz $(distdir)
+ -rm -rf $(distdir)
+dist-all: distdir
+ -chmod -R a+r $(distdir)
+ GZIP=$(GZIP) $(TAR) chozf $(distdir).tar.gz $(distdir)
+ -rm -rf $(distdir)
+distdir: $(DISTFILES)
+ -rm -rf $(distdir)
+ mkdir $(distdir)
+ -chmod 777 $(distdir)
+ @for file in $(DISTFILES); do \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file; \
+ done
+info:
+dvi:
+check:
+ $(MAKE) $(AM_MAKEFLAGS)
+installcheck:
+install-info:
+install-exec:
+ @$(NORMAL_INSTALL)
+
+install-data:
+ @$(NORMAL_INSTALL)
+
+install: install-exec install-data all
+ @:
+
+uninstall:
+
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
+installdirs:
+
+
+mostlyclean-generic:
+ -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -rm -f Makefile $(DISTCLEANFILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+mostlyclean: mostlyclean-noinstLIBRARIES mostlyclean-compile \
+ mostlyclean-tags mostlyclean-generic
+
+clean: clean-noinstLIBRARIES clean-compile clean-tags clean-generic \
+ mostlyclean
+
+distclean: distclean-noinstLIBRARIES distclean-compile distclean-tags \
+ distclean-generic clean
+ -rm -f config.status
+
+maintainer-clean: maintainer-clean-noinstLIBRARIES \
+ maintainer-clean-compile maintainer-clean-tags \
+ maintainer-clean-generic distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+ -rm -f config.status
+
+.PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \
+clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \
+mostlyclean-compile distclean-compile clean-compile \
+maintainer-clean-compile tags mostlyclean-tags distclean-tags \
+clean-tags maintainer-clean-tags distdir info dvi installcheck \
+install-info install-exec install-data install uninstall all \
+installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+all: crt0.o
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/newlib/libc/sys/go32/_exit.s b/newlib/libc/sys/go32/_exit.s
new file mode 100644
index 00000000000..8c135976e22
--- /dev/null
+++ b/newlib/libc/sys/go32/_exit.s
@@ -0,0 +1,20 @@
+# /* This is file _EXIT.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl __exit
+__exit:
+ movb 4(%esp),%al
+ movb $0x4c,%ah
+ int $0x21
diff --git a/newlib/libc/sys/go32/_main.c b/newlib/libc/sys/go32/_main.c
new file mode 100644
index 00000000000..c8c6136f76b
--- /dev/null
+++ b/newlib/libc/sys/go32/_main.c
@@ -0,0 +1,3 @@
+__main()
+{
+}
diff --git a/newlib/libc/sys/go32/abort.c b/newlib/libc/sys/go32/abort.c
new file mode 100644
index 00000000000..f2466c84ca8
--- /dev/null
+++ b/newlib/libc/sys/go32/abort.c
@@ -0,0 +1,8 @@
+
+void
+abort()
+{
+
+ exit(1);
+
+}
diff --git a/newlib/libc/sys/go32/access.c b/newlib/libc/sys/go32/access.c
new file mode 100644
index 00000000000..ad368caa1f3
--- /dev/null
+++ b/newlib/libc/sys/go32/access.c
@@ -0,0 +1,34 @@
+/* This is file ACCESS.C */
+/*
+** Copyright (C) 1993 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+int access(const char *fn, int flags)
+{
+ struct stat s;
+ if (stat(fn, &s))
+ return -1;
+ if (s.st_mode & S_IFDIR)
+ return 0;
+ if (flags & W_OK)
+ {
+ if (s.st_mode & S_IWRITE)
+ return 0;
+ return -1;
+ }
+ return 0;
+}
+
diff --git a/newlib/libc/sys/go32/aclocal.m4 b/newlib/libc/sys/go32/aclocal.m4
new file mode 100644
index 00000000000..70d48102026
--- /dev/null
+++ b/newlib/libc/sys/go32/aclocal.m4
@@ -0,0 +1,282 @@
+dnl aclocal.m4 generated automatically by aclocal 1.4
+
+dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+dnl PARTICULAR PURPOSE.
+
+dnl This provides configure definitions used by all the newlib
+dnl configure.in files.
+
+dnl Basic newlib configury. This calls basic introductory stuff,
+dnl including AM_INIT_AUTOMAKE and AC_CANONICAL_HOST. It also runs
+dnl configure.host. The only argument is the relative path to the top
+dnl newlib directory.
+
+AC_DEFUN(NEWLIB_CONFIGURE,
+[
+dnl Default to --enable-multilib
+AC_ARG_ENABLE(multilib,
+[ --enable-multilib build many library versions (default)],
+[case "${enableval}" in
+ yes) multilib=yes ;;
+ no) multilib=no ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
+ esac], [multilib=yes])dnl
+
+dnl Support --enable-target-optspace
+AC_ARG_ENABLE(target-optspace,
+[ --enable-target-optspace optimize for space],
+[case "${enableval}" in
+ yes) target_optspace=yes ;;
+ no) target_optspace=no ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for target-optspace option) ;;
+ esac], [target_optspace=])dnl
+
+dnl Support --enable-newlib-mb
+AC_ARG_ENABLE(newlib-mb,
+[ --enable-newlib-mb enable multibyte support],
+[case "${enableval}" in
+ yes) newlib_mb=yes ;;
+ no) newlib_mb=no ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for newlib-mb option) ;;
+ esac], [newlib_mb=no])dnl
+
+dnl We may get other options which we don't document:
+dnl --with-target-subdir, --with-multisrctop, --with-multisubdir
+
+test -z "[$]{with_target_subdir}" && with_target_subdir=.
+
+if test "[$]{srcdir}" = "."; then
+ if test "[$]{with_target_subdir}" != "."; then
+ newlib_basedir="[$]{srcdir}/[$]{with_multisrctop}../$1"
+ else
+ newlib_basedir="[$]{srcdir}/[$]{with_multisrctop}$1"
+ fi
+else
+ newlib_basedir="[$]{srcdir}/$1"
+fi
+AC_SUBST(newlib_basedir)
+
+AC_CANONICAL_HOST
+
+AM_INIT_AUTOMAKE(newlib, 1.8.1)
+
+# FIXME: We temporarily define our own version of AC_PROG_CC. This is
+# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We
+# are probably using a cross compiler, which will not be able to fully
+# link an executable. This should really be fixed in autoconf
+# itself.
+
+AC_DEFUN(LIB_AC_PROG_CC,
+[AC_BEFORE([$0], [AC_PROG_CPP])dnl
+AC_CHECK_PROG(CC, gcc, gcc)
+if test -z "$CC"; then
+ AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
+ test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
+fi
+
+AC_PROG_CC_GNU
+
+if test $ac_cv_prog_gcc = yes; then
+ GCC=yes
+dnl Check whether -g works, even if CFLAGS is set, in case the package
+dnl plays around with CFLAGS (such as to build both debugging and
+dnl normal versions of a library), tasteless as that idea is.
+ ac_test_CFLAGS="${CFLAGS+set}"
+ ac_save_CFLAGS="$CFLAGS"
+ CFLAGS=
+ AC_PROG_CC_G
+ if test "$ac_test_CFLAGS" = set; then
+ CFLAGS="$ac_save_CFLAGS"
+ elif test $ac_cv_prog_cc_g = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-O2"
+ fi
+else
+ GCC=
+ test "${CFLAGS+set}" = set || CFLAGS="-g"
+fi
+])
+
+LIB_AC_PROG_CC
+
+# AC_CHECK_TOOL does AC_REQUIRE (AC_CANONICAL_BUILD). If we don't
+# run it explicitly here, it will be run implicitly before
+# NEWLIB_CONFIGURE, which doesn't work because that means that it will
+# be run before AC_CANONICAL_HOST.
+AC_CANONICAL_BUILD
+
+AC_CHECK_TOOL(AS, as)
+AC_CHECK_TOOL(AR, ar)
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+
+AC_PROG_INSTALL
+
+AM_MAINTAINER_MODE
+
+# We need AC_EXEEXT to keep automake happy in cygnus mode. However,
+# at least currently, we never actually build a program, so we never
+# need to use $(EXEEXT). Moreover, the test for EXEEXT normally
+# fails, because we are probably configuring with a cross compiler
+# which can't create executables. So we include AC_EXEEXT to keep
+# automake happy, but we don't execute it, since we don't care about
+# the result.
+if false; then
+ AC_EXEEXT
+fi
+
+. [$]{newlib_basedir}/configure.host
+
+case [$]{newlib_basedir} in
+/* | [A-Za-z]:[/\\]*) newlib_flagbasedir=[$]{newlib_basedir} ;;
+*) newlib_flagbasedir='[$](top_builddir)/'[$]{newlib_basedir} ;;
+esac
+
+newlib_cflags="[$]{newlib_cflags} -I"'[$](top_builddir)'"/$1/targ-include -I[$]{newlib_flagbasedir}/libc/include"
+case "${host}" in
+ *-*-cygwin*)
+ newlib_cflags="[$]{newlib_cflags} -I[$]{newlib_flagbasedir}/../winsup/cygwin/include -I[$]{newlib_flagbasedir}/../winsup/w32api/include"
+ ;;
+esac
+
+newlib_cflags="[$]{newlib_cflags} -fno-builtin"
+
+NEWLIB_CFLAGS=${newlib_cflags}
+AC_SUBST(NEWLIB_CFLAGS)
+
+AC_SUBST(machine_dir)
+AC_SUBST(sys_dir)
+])
+
+# Do all the work for Automake. This macro actually does too much --
+# some checks are only needed if your package does certain things.
+# But this isn't really a big deal.
+
+# serial 1
+
+dnl Usage:
+dnl AM_INIT_AUTOMAKE(package,version, [no-define])
+
+AC_DEFUN(AM_INIT_AUTOMAKE,
+[AC_REQUIRE([AC_PROG_INSTALL])
+PACKAGE=[$1]
+AC_SUBST(PACKAGE)
+VERSION=[$2]
+AC_SUBST(VERSION)
+dnl test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+ifelse([$3],,
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
+AC_REQUIRE([AM_SANITY_CHECK])
+AC_REQUIRE([AC_ARG_PROGRAM])
+dnl FIXME This is truly gross.
+missing_dir=`cd $ac_aux_dir && pwd`
+AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
+AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
+AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
+AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
+AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
+AC_REQUIRE([AC_PROG_MAKE_SET])])
+
+#
+# Check to make sure that the build environment is sane.
+#
+
+AC_DEFUN(AM_SANITY_CHECK,
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+ if test "[$]*" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftestfile`
+ fi
+ if test "[$]*" != "X $srcdir/configure conftestfile" \
+ && test "[$]*" != "X conftestfile $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "[$]2" = conftestfile
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+rm -f conftest*
+AC_MSG_RESULT(yes)])
+
+dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
+dnl The program must properly implement --version.
+AC_DEFUN(AM_MISSING_PROG,
+[AC_MSG_CHECKING(for working $2)
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if ($2 --version) < /dev/null > /dev/null 2>&1; then
+ $1=$2
+ AC_MSG_RESULT(found)
+else
+ $1="$3/missing $2"
+ AC_MSG_RESULT(missing)
+fi
+AC_SUBST($1)])
+
+# Add --enable-maintainer-mode option to configure.
+# From Jim Meyering
+
+# serial 1
+
+AC_DEFUN(AM_MAINTAINER_MODE,
+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ dnl maintainer-mode is disabled by default
+ AC_ARG_ENABLE(maintainer-mode,
+[ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer],
+ USE_MAINTAINER_MODE=$enableval,
+ USE_MAINTAINER_MODE=no)
+ AC_MSG_RESULT($USE_MAINTAINER_MODE)
+ AM_CONDITIONAL(MAINTAINER_MODE, test $USE_MAINTAINER_MODE = yes)
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST(MAINT)dnl
+]
+)
+
+# Define a conditional.
+
+AC_DEFUN(AM_CONDITIONAL,
+[AC_SUBST($1_TRUE)
+AC_SUBST($1_FALSE)
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi])
+
diff --git a/newlib/libc/sys/go32/bdos.c b/newlib/libc/sys/go32/bdos.c
new file mode 100644
index 00000000000..523f73aa6e0
--- /dev/null
+++ b/newlib/libc/sys/go32/bdos.c
@@ -0,0 +1,12 @@
+#include <errno.h>
+#include "dos.h"
+
+bdos(int func, unsigned dx, unsigned al)
+{
+ union REGS r;
+ r.x.dx = dx;
+ r.h.ah = func;
+ r.h.al = al;
+ int86(0x21, &r, &r);
+ return r.x.ax;
+}
diff --git a/newlib/libc/sys/go32/bdosptr.c b/newlib/libc/sys/go32/bdosptr.c
new file mode 100644
index 00000000000..214d40baf58
--- /dev/null
+++ b/newlib/libc/sys/go32/bdosptr.c
@@ -0,0 +1,12 @@
+#include <errno.h>
+#include "dos.h"
+
+bdosptr(int func, void *dx, unsigned al)
+{
+ union REGS r;
+ r.x.dx = dx;
+ r.h.ah = func;
+ r.h.al = al;
+ int86(0x21, &r, &r);
+ return r.x.ax;
+}
diff --git a/newlib/libc/sys/go32/brk.s b/newlib/libc/sys/go32/brk.s
new file mode 100644
index 00000000000..c9d8db0e966
--- /dev/null
+++ b/newlib/libc/sys/go32/brk.s
@@ -0,0 +1,27 @@
+# /* This is file BRK.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _brk
+_brk:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movw $0x4a00,%ax
+ movl 16(%esp),%ebx
+ int $0x21
+ popl %edi
+ popl %esi
+ popl %ebx
+ ret
diff --git a/newlib/libc/sys/go32/chdir.s b/newlib/libc/sys/go32/chdir.s
new file mode 100644
index 00000000000..a494408e73b
--- /dev/null
+++ b/newlib/libc/sys/go32/chdir.s
@@ -0,0 +1,27 @@
+# /* This is file CHDIR.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _chdir
+_chdir:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl 16(%esp),%edx
+ movb $0x3b,%ah
+ int $0x21
+ popl %edi
+ popl %esi
+ popl %ebx
+ jmp syscall_check
diff --git a/newlib/libc/sys/go32/chmod.c b/newlib/libc/sys/go32/chmod.c
new file mode 100644
index 00000000000..72f5f571648
--- /dev/null
+++ b/newlib/libc/sys/go32/chmod.c
@@ -0,0 +1,15 @@
+/* This is file CHMOD.C */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+chmod(){}
diff --git a/newlib/libc/sys/go32/chown.c b/newlib/libc/sys/go32/chown.c
new file mode 100644
index 00000000000..a780510ed15
--- /dev/null
+++ b/newlib/libc/sys/go32/chown.c
@@ -0,0 +1,15 @@
+/* This is file CHOWN.C */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+chown(){}
diff --git a/newlib/libc/sys/go32/clock.S b/newlib/libc/sys/go32/clock.S
new file mode 100644
index 00000000000..e6ac06ed223
--- /dev/null
+++ b/newlib/libc/sys/go32/clock.S
@@ -0,0 +1,45 @@
+/* This is file CLOCK.S */
+/*
+** Copyright (C) 1993 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+**
+** Modified by C. Sandmann for DPMI support (sandmann@clio.rice.edu)
+*/
+ .data
+clock_init:
+ .long 0
+
+ .text
+ .globl _clock
+_clock:
+ call _rawclock
+ imull $54931,%eax,%eax
+ ret
+
+ .align 4,0x90
+ .globl _rawclock
+_rawclock:
+ movzwl __core_select,%eax
+ testl %eax,%eax
+ je old_clock /* Image run with pre-DPMI extender */
+ movw %ax,%gs
+ movl %gs:0x46c(,1),%eax
+ jmp check_initted
+old_clock:
+ movl 0xe000046c,%eax
+check_initted:
+ cmp $0,clock_init
+ jne clock_initted
+ movl %eax,clock_init
+clock_initted:
+ subl clock_init,%eax
+ ret
+
diff --git a/newlib/libc/sys/go32/close.s b/newlib/libc/sys/go32/close.s
new file mode 100644
index 00000000000..3b0797ddf92
--- /dev/null
+++ b/newlib/libc/sys/go32/close.s
@@ -0,0 +1,27 @@
+# /* This is file CLOSE.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _close
+_close:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl 16(%esp),%ebx
+ movb $0x3e,%ah
+ int $0x21
+ popl %edi
+ popl %esi
+ popl %ebx
+ jmp syscall_check
diff --git a/newlib/libc/sys/go32/configure b/newlib/libc/sys/go32/configure
new file mode 100755
index 00000000000..398652cb74a
--- /dev/null
+++ b/newlib/libc/sys/go32/configure
@@ -0,0 +1,1687 @@
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.13
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+ac_help="$ac_help
+ --enable-multilib build many library versions (default)"
+ac_help="$ac_help
+ --enable-target-optspace optimize for space"
+ac_help="$ac_help
+ --enable-newlib-mb enable multibyte support"
+ac_help="$ac_help
+ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer"
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+sitefile=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+for ac_option
+do
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ case "$ac_option" in
+ -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) ac_optarg= ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case "$ac_option" in
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir="$ac_optarg" ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build="$ac_optarg" ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file="$ac_optarg" ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir="$ac_optarg" ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ eval "enable_${ac_feature}=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix="$ac_optarg" ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he)
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+ --cache-file=FILE cache test results in FILE
+ --help print this message
+ --no-create do not create output files
+ --quiet, --silent do not print \`checking...' messages
+ --site-file=FILE use FILE as the site file
+ --version print the version of autoconf that created configure
+Directory and file names:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [same as prefix]
+ --bindir=DIR user executables in DIR [EPREFIX/bin]
+ --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
+ --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data in DIR
+ [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data in DIR
+ [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
+ --libdir=DIR object code libraries in DIR [EPREFIX/lib]
+ --includedir=DIR C header files in DIR [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
+ --infodir=DIR info documentation in DIR [PREFIX/info]
+ --mandir=DIR man documentation in DIR [PREFIX/man]
+ --srcdir=DIR find the sources in DIR [configure dir or ..]
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM
+ run sed PROGRAM on installed program names
+EOF
+ cat << EOF
+Host type:
+ --build=BUILD configure for building on BUILD [BUILD=HOST]
+ --host=HOST configure for HOST [guessed]
+ --target=TARGET configure for TARGET [TARGET=HOST]
+Features and packages:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR
+EOF
+ if test -n "$ac_help"; then
+ echo "--enable and --with options recognized:$ac_help"
+ fi
+ exit 0 ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host="$ac_optarg" ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir="$ac_optarg" ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir="$ac_optarg" ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir="$ac_optarg" ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir="$ac_optarg" ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ localstatedir="$ac_optarg" ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir="$ac_optarg" ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir="$ac_optarg" ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix="$ac_optarg" ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix="$ac_optarg" ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix="$ac_optarg" ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name="$ac_optarg" ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir="$ac_optarg" ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir="$ac_optarg" ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site="$ac_optarg" ;;
+
+ -site-file | --site-file | --site-fil | --site-fi | --site-f)
+ ac_prev=sitefile ;;
+ -site-file=* | --site-file=* | --site-fil=* | --site-fi=* | --site-f=*)
+ sitefile="$ac_optarg" ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir="$ac_optarg" ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir="$ac_optarg" ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target="$ac_optarg" ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers)
+ echo "configure generated by autoconf version 2.13"
+ exit 0 ;;
+
+ -with-* | --with-*)
+ ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_${ac_package}='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ eval "with_${ac_package}=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes="$ac_optarg" ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries="$ac_optarg" ;;
+
+ -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+ ;;
+
+ *)
+ if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+ echo "configure: warning: $ac_option: invalid host type" 1>&2
+ fi
+ if test "x$nonopt" != xNONE; then
+ { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+ fi
+ nonopt="$ac_option"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+ exec 6>/dev/null
+else
+ exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+ case "$ac_arg" in
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c) ;;
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+ ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+ esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set. These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}" = set; then LANG=C; export LANG; fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=djtime.h
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_prog=$0
+ ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+ test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+ else
+ { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+ fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$sitefile"; then
+ if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+ fi
+else
+ CONFIG_SITE="$sitefile"
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ echo "loading site script $ac_site_file"
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ echo "loading cache $cache_file"
+ . $cache_file
+else
+ echo "creating cache $cache_file"
+ > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+ac_exeext=
+ac_objext=o
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+ # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+ if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+ ac_n= ac_c='
+' ac_t=' '
+ else
+ ac_n=-n ac_c= ac_t=
+ fi
+else
+ ac_n= ac_c='\c' ac_t=
+fi
+
+
+
+ac_aux_dir=
+for ac_dir in ../../../.. $srcdir/../../../..; do
+ if test -f $ac_dir/install-sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f $ac_dir/install.sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { echo "configure: error: can not find install-sh or install.sh in ../../../.. $srcdir/../../../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:578: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
+ for ac_dir in $PATH; do
+ # Account for people who put trailing slashes in PATH elements.
+ case "$ac_dir/" in
+ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ if test -f $ac_dir/$ac_prog; then
+ if test $ac_prog = install &&
+ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ else
+ ac_cv_path_install="$ac_dir/$ac_prog -c"
+ break 2
+ fi
+ fi
+ done
+ ;;
+ esac
+ done
+ IFS="$ac_save_IFS"
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL="$ac_cv_path_install"
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL="$ac_install_sh"
+ fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
+echo "configure:631: checking whether build environment is sane" >&5
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftestfile`
+ fi
+ if test "$*" != "X $srcdir/configure conftestfile" \
+ && test "$*" != "X conftestfile $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ { echo "configure: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" 1>&2; exit 1; }
+ fi
+
+ test "$2" = conftestfile
+ )
+then
+ # Ok.
+ :
+else
+ { echo "configure: error: newly created file is older than distributed files!
+Check your system clock" 1>&2; exit 1; }
+fi
+rm -f conftest*
+echo "$ac_t""yes" 1>&6
+if test "$program_transform_name" = s,x,x,; then
+ program_transform_name=
+else
+ # Double any \ or $. echo might interpret backslashes.
+ cat <<\EOF_SED > conftestsed
+s,\\,\\\\,g; s,\$,$$,g
+EOF_SED
+ program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
+ rm -f conftestsed
+fi
+test "$program_prefix" != NONE &&
+ program_transform_name="s,^,${program_prefix},; $program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s,\$\$,${program_suffix},; $program_transform_name"
+
+# sed with no file args requires a program.
+test "$program_transform_name" = "" && program_transform_name="s,x,x,"
+
+echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
+echo "configure:688: checking whether ${MAKE-make} sets \${MAKE}" >&5
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftestmake <<\EOF
+all:
+ @echo 'ac_maketemp="${MAKE}"'
+EOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+ eval ac_cv_prog_make_${ac_make}_set=yes
+else
+ eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftestmake
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ SET_MAKE=
+else
+ echo "$ac_t""no" 1>&6
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+if test $host != $build; then
+ ac_tool_prefix=${host_alias}-
+else
+ ac_tool_prefix=
+fi
+
+echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
+echo "configure:721: checking for Cygwin environment" >&5
+if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 726 "configure"
+#include "confdefs.h"
+
+int main() {
+
+#ifndef __CYGWIN__
+#define __CYGWIN__ __CYGWIN32__
+#endif
+return __CYGWIN__;
+; return 0; }
+EOF
+if { (eval echo configure:737: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_cygwin=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_cygwin=no
+fi
+rm -f conftest*
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_cygwin" 1>&6
+CYGWIN=
+test "$ac_cv_cygwin" = yes && CYGWIN=yes
+echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
+echo "configure:754: checking for mingw32 environment" >&5
+if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 759 "configure"
+#include "confdefs.h"
+
+int main() {
+return __MINGW32__;
+; return 0; }
+EOF
+if { (eval echo configure:766: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_mingw32=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_mingw32=no
+fi
+rm -f conftest*
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_mingw32" 1>&6
+MINGW32=
+test "$ac_cv_mingw32" = yes && MINGW32=yes
+
+# Check whether --enable-multilib or --disable-multilib was given.
+if test "${enable_multilib+set}" = set; then
+ enableval="$enable_multilib"
+ case "${enableval}" in
+ yes) multilib=yes ;;
+ no) multilib=no ;;
+ *) { echo "configure: error: bad value ${enableval} for multilib option" 1>&2; exit 1; } ;;
+ esac
+else
+ multilib=yes
+fi
+
+# Check whether --enable-target-optspace or --disable-target-optspace was given.
+if test "${enable_target_optspace+set}" = set; then
+ enableval="$enable_target_optspace"
+ case "${enableval}" in
+ yes) target_optspace=yes ;;
+ no) target_optspace=no ;;
+ *) { echo "configure: error: bad value ${enableval} for target-optspace option" 1>&2; exit 1; } ;;
+ esac
+else
+ target_optspace=
+fi
+
+# Check whether --enable-newlib-mb or --disable-newlib-mb was given.
+if test "${enable_newlib_mb+set}" = set; then
+ enableval="$enable_newlib_mb"
+ case "${enableval}" in
+ yes) newlib_mb=yes ;;
+ no) newlib_mb=no ;;
+ *) { echo "configure: error: bad value ${enableval} for newlib-mb option" 1>&2; exit 1; } ;;
+ esac
+else
+ newlib_mb=no
+fi
+
+
+test -z "${with_target_subdir}" && with_target_subdir=.
+
+if test "${srcdir}" = "."; then
+ if test "${with_target_subdir}" != "."; then
+ newlib_basedir="${srcdir}/${with_multisrctop}../../../.."
+ else
+ newlib_basedir="${srcdir}/${with_multisrctop}../../.."
+ fi
+else
+ newlib_basedir="${srcdir}/../../.."
+fi
+
+
+
+# Make sure we can run config.sub.
+if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
+else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking host system type""... $ac_c" 1>&6
+echo "configure:840: checking host system type" >&5
+
+host_alias=$host
+case "$host_alias" in
+NONE)
+ case $nonopt in
+ NONE)
+ if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
+ else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
+ fi ;;
+ *) host_alias=$nonopt ;;
+ esac ;;
+esac
+
+host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
+host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+echo "$ac_t""$host" 1>&6
+
+
+
+PACKAGE=newlib
+
+VERSION=1.8.1
+
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+ { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
+fi
+cat >> confdefs.h <<EOF
+#define PACKAGE "$PACKAGE"
+EOF
+
+cat >> confdefs.h <<EOF
+#define VERSION "$VERSION"
+EOF
+
+
+
+missing_dir=`cd $ac_aux_dir && pwd`
+echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
+echo "configure:881: checking for working aclocal" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (aclocal --version) < /dev/null > /dev/null 2>&1; then
+ ACLOCAL=aclocal
+ echo "$ac_t""found" 1>&6
+else
+ ACLOCAL="$missing_dir/missing aclocal"
+ echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
+echo "configure:894: checking for working autoconf" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (autoconf --version) < /dev/null > /dev/null 2>&1; then
+ AUTOCONF=autoconf
+ echo "$ac_t""found" 1>&6
+else
+ AUTOCONF="$missing_dir/missing autoconf"
+ echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working automake""... $ac_c" 1>&6
+echo "configure:907: checking for working automake" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (automake --version) < /dev/null > /dev/null 2>&1; then
+ AUTOMAKE=automake
+ echo "$ac_t""found" 1>&6
+else
+ AUTOMAKE="$missing_dir/missing automake"
+ echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
+echo "configure:920: checking for working autoheader" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (autoheader --version) < /dev/null > /dev/null 2>&1; then
+ AUTOHEADER=autoheader
+ echo "$ac_t""found" 1>&6
+else
+ AUTOHEADER="$missing_dir/missing autoheader"
+ echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
+echo "configure:933: checking for working makeinfo" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
+ MAKEINFO=makeinfo
+ echo "$ac_t""found" 1>&6
+else
+ MAKEINFO="$missing_dir/missing makeinfo"
+ echo "$ac_t""missing" 1>&6
+fi
+
+
+
+# FIXME: We temporarily define our own version of AC_PROG_CC. This is
+# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We
+# are probably using a cross compiler, which will not be able to fully
+# link an executable. This should really be fixed in autoconf
+# itself.
+
+
+
+# Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:958: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_CC="gcc"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:988: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_prog_rejected=no
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# -gt 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ set dummy "$ac_dir/$ac_word" "$@"
+ shift
+ ac_cv_prog_CC="$@"
+ fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+echo "configure:1037: checking whether we are using GNU C" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.c <<EOF
+#ifdef __GNUC__
+ yes;
+#endif
+EOF
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1046: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+ ac_cv_prog_gcc=yes
+else
+ ac_cv_prog_gcc=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+
+if test $ac_cv_prog_gcc = yes; then
+ GCC=yes
+ ac_test_CFLAGS="${CFLAGS+set}"
+ ac_save_CFLAGS="$CFLAGS"
+ CFLAGS=
+ echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:1061: checking whether ${CC-cc} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+ ac_cv_prog_cc_g=yes
+else
+ ac_cv_prog_cc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+ if test "$ac_test_CFLAGS" = set; then
+ CFLAGS="$ac_save_CFLAGS"
+ elif test $ac_cv_prog_cc_g = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-O2"
+ fi
+else
+ GCC=
+ test "${CFLAGS+set}" = set || CFLAGS="-g"
+fi
+
+
+# AC_CHECK_TOOL does AC_REQUIRE (AC_CANONICAL_BUILD). If we don't
+# run it explicitly here, it will be run implicitly before
+# NEWLIB_CONFIGURE, which doesn't work because that means that it will
+# be run before AC_CANONICAL_HOST.
+echo $ac_n "checking build system type""... $ac_c" 1>&6
+echo "configure:1094: checking build system type" >&5
+
+build_alias=$build
+case "$build_alias" in
+NONE)
+ case $nonopt in
+ NONE) build_alias=$host_alias ;;
+ *) build_alias=$nonopt ;;
+ esac ;;
+esac
+
+build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
+build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+echo "$ac_t""$build" 1>&6
+
+
+# Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
+set dummy ${ac_tool_prefix}as; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1115: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$AS"; then
+ ac_cv_prog_AS="$AS" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_AS="${ac_tool_prefix}as"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$ac_cv_prog_AS" && ac_cv_prog_AS="as"
+fi
+fi
+AS="$ac_cv_prog_AS"
+if test -n "$AS"; then
+ echo "$ac_t""$AS" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+
+# Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1147: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$ac_cv_prog_AR" && ac_cv_prog_AR="ar"
+fi
+fi
+AR="$ac_cv_prog_AR"
+if test -n "$AR"; then
+ echo "$ac_t""$AR" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+
+# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1179: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+RANLIB="$ac_cv_prog_RANLIB"
+if test -n "$RANLIB"; then
+ echo "$ac_t""$RANLIB" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+if test -z "$ac_cv_prog_RANLIB"; then
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1211: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_RANLIB="ranlib"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
+fi
+fi
+RANLIB="$ac_cv_prog_RANLIB"
+if test -n "$RANLIB"; then
+ echo "$ac_t""$RANLIB" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+else
+ RANLIB=":"
+fi
+fi
+
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:1256: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
+ for ac_dir in $PATH; do
+ # Account for people who put trailing slashes in PATH elements.
+ case "$ac_dir/" in
+ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ if test -f $ac_dir/$ac_prog; then
+ if test $ac_prog = install &&
+ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ else
+ ac_cv_path_install="$ac_dir/$ac_prog -c"
+ break 2
+ fi
+ fi
+ done
+ ;;
+ esac
+ done
+ IFS="$ac_save_IFS"
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL="$ac_cv_path_install"
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL="$ac_install_sh"
+ fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
+echo "configure:1310: checking whether to enable maintainer-specific portions of Makefiles" >&5
+ # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then
+ enableval="$enable_maintainer_mode"
+ USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=no
+fi
+
+ echo "$ac_t""$USE_MAINTAINER_MODE" 1>&6
+
+
+if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+ MAINTAINER_MODE_FALSE='#'
+else
+ MAINTAINER_MODE_TRUE='#'
+ MAINTAINER_MODE_FALSE=
+fi
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+# We need AC_EXEEXT to keep automake happy in cygnus mode. However,
+# at least currently, we never actually build a program, so we never
+# need to use $(EXEEXT). Moreover, the test for EXEEXT normally
+# fails, because we are probably configuring with a cross compiler
+# which can't create executables. So we include AC_EXEEXT to keep
+# automake happy, but we don't execute it, since we don't care about
+# the result.
+if false; then
+
+
+echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
+echo "configure:1344: checking for executable suffix" >&5
+if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test "$CYGWIN" = yes || test "$MINGW32" = yes; then
+ ac_cv_exeext=.exe
+else
+ rm -f conftest*
+ echo 'int main () { return 0; }' > conftest.$ac_ext
+ ac_cv_exeext=
+ if { (eval echo configure:1354: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+ for file in conftest.*; do
+ case $file in
+ *.c | *.o | *.obj | *.ilk | *.pdb) ;;
+ *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
+ esac
+ done
+ else
+ { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; }
+ fi
+ rm -f conftest*
+ test x"${ac_cv_exeext}" = x && ac_cv_exeext=no
+fi
+fi
+
+EXEEXT=""
+test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext}
+echo "$ac_t""${ac_cv_exeext}" 1>&6
+ac_exeext=$EXEEXT
+
+fi
+
+. ${newlib_basedir}/configure.host
+
+case ${newlib_basedir} in
+/* | A-Za-z:/\\*) newlib_flagbasedir=${newlib_basedir} ;;
+*) newlib_flagbasedir='$(top_builddir)/'${newlib_basedir} ;;
+esac
+
+newlib_cflags="${newlib_cflags} -I"'$(top_builddir)'"/../../../targ-include -I${newlib_flagbasedir}/libc/include"
+case "${host}" in
+ *-*-cygwin*)
+ newlib_cflags="${newlib_cflags} -I${newlib_flagbasedir}/../winsup/cygwin/include -I${newlib_flagbasedir}/../winsup/w32api/include"
+ ;;
+esac
+
+newlib_cflags="${newlib_cflags} -fno-builtin"
+
+NEWLIB_CFLAGS=${newlib_cflags}
+
+
+
+
+
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs. It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already. You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote substitution
+ # turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ -e "s/'/'\\\\''/g" \
+ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+ ;;
+ esac >> confcache
+if cmp -s $cache_file confcache; then
+ :
+else
+ if test -w $cache_file; then
+ echo "updating cache $cache_file"
+ cat confcache > $cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+cat > conftest.defs <<\EOF
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
+s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g
+s%\[%\\&%g
+s%\]%\\&%g
+s%\$%$$%g
+EOF
+DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
+rm -f conftest.defs
+
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+ case "\$ac_option" in
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+ exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+ -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+ echo "$CONFIG_STATUS generated by autoconf version 2.13"
+ exit 0 ;;
+ -help | --help | --hel | --he | --h)
+ echo "\$ac_cs_usage"; exit 0 ;;
+ *) echo "\$ac_cs_usage"; exit 1 ;;
+ esac
+done
+
+ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
+
+trap 'rm -fr `echo "Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@SHELL@%$SHELL%g
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@FFLAGS@%$FFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@newlib_basedir@%$newlib_basedir%g
+s%@host@%$host%g
+s%@host_alias@%$host_alias%g
+s%@host_cpu@%$host_cpu%g
+s%@host_vendor@%$host_vendor%g
+s%@host_os@%$host_os%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+s%@PACKAGE@%$PACKAGE%g
+s%@VERSION@%$VERSION%g
+s%@ACLOCAL@%$ACLOCAL%g
+s%@AUTOCONF@%$AUTOCONF%g
+s%@AUTOMAKE@%$AUTOMAKE%g
+s%@AUTOHEADER@%$AUTOHEADER%g
+s%@MAKEINFO@%$MAKEINFO%g
+s%@SET_MAKE@%$SET_MAKE%g
+s%@CC@%$CC%g
+s%@build@%$build%g
+s%@build_alias@%$build_alias%g
+s%@build_cpu@%$build_cpu%g
+s%@build_vendor@%$build_vendor%g
+s%@build_os@%$build_os%g
+s%@AS@%$AS%g
+s%@AR@%$AR%g
+s%@RANLIB@%$RANLIB%g
+s%@MAINTAINER_MODE_TRUE@%$MAINTAINER_MODE_TRUE%g
+s%@MAINTAINER_MODE_FALSE@%$MAINTAINER_MODE_FALSE%g
+s%@MAINT@%$MAINT%g
+s%@EXEEXT@%$EXEEXT%g
+s%@NEWLIB_CFLAGS@%$NEWLIB_CFLAGS%g
+s%@machine_dir@%$machine_dir%g
+s%@sys_dir@%$sys_dir%g
+
+CEOF
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+ else
+ sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+ fi
+ if test ! -s conftest.s$ac_file; then
+ ac_more_lines=false
+ rm -f conftest.s$ac_file
+ else
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f conftest.s$ac_file"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+ fi
+ ac_file=`expr $ac_file + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_cmds`
+ fi
+done
+if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+fi
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+ else
+ ac_dir_suffix= ac_dots=
+ fi
+
+ case "$ac_given_srcdir" in
+ .) srcdir=.
+ if test -z "$ac_dots"; then top_srcdir=.
+ else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+ /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+ *) # Relative path.
+ srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+ top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ case "$ac_given_INSTALL" in
+ [/$]*) INSTALL="$ac_given_INSTALL" ;;
+ *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+ esac
+
+ echo creating "$ac_file"
+ rm -f "$ac_file"
+ configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+ case "$ac_file" in
+ *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+ *) ac_comsub= ;;
+ esac
+
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
diff --git a/newlib/libc/sys/go32/configure.in b/newlib/libc/sys/go32/configure.in
new file mode 100644
index 00000000000..5706733f068
--- /dev/null
+++ b/newlib/libc/sys/go32/configure.in
@@ -0,0 +1,12 @@
+dnl This is the newlib/libc/sys/go32 configure.in file.
+dnl Process this file with autoconf to produce a configure script.
+
+AC_PREREQ(2.5)
+AC_INIT(djtime.h)
+
+dnl Can't be done in NEWLIB_CONFIGURE because that confuses automake.
+AC_CONFIG_AUX_DIR(../../../..)
+
+NEWLIB_CONFIGURE(../../..)
+
+AC_OUTPUT(Makefile)
diff --git a/newlib/libc/sys/go32/copying.dj b/newlib/libc/sys/go32/copying.dj
new file mode 100644
index 00000000000..79b4f700b86
--- /dev/null
+++ b/newlib/libc/sys/go32/copying.dj
@@ -0,0 +1,63 @@
+This is the file "copying.dj".
+
+ Copyright Information for sources and executables that are marked
+ Copyright (C) DJ Delorie
+ 24 Kirsten Ave
+ Rochester NH 03867-2954
+
+This document is Copyright (C) DJ Delorie and may be distributed
+verbatim, but changing it is not allowed.
+
+Source code copyright DJ Delorie is distributed under the terms of the
+GNU General Public Licence, with the following exceptions:
+
+
+* Source code copyright DJ Delorie is distributed under the terms of the
+ GNU General Public Licence, with the following exceptions:
+ ("go32.exe" refers to go32.exe and debug32.exe)
+
+ * There are no conditions on distributing copies of stub.exe as
+ it is originally distributed in this software package, prepended
+ onto a binary or otherwise. This is the recommended distribution
+ mechanism for applications.
+
+ * Binaries of emu387 may be distributed with no restrictions.
+
+ * If a user creates an application, prepends a copy of go32.exe onto
+ the beginning of it, and distributes it free of charge, then the
+ user is under no obligations to distribute source or pay royalties.
+ Note that the copyright terms of the FSF and/or UCB must be
+ obeyed regardless of this.
+
+ * If a user creates an application, prepends a copy of go32.exe onto
+ the beginning of it, and charges a fee for the software, then a
+ royalty of $5 or 5% of the selling price per copy sold must be paid
+ to DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954. Note that
+ shareware programs are not considered "sold" until payment is rendered
+ for them.
+
+ * For all other cases, source code for go32.exe must be distributed
+ with any distributed copies of go32.exe.
+
+ * Software that requires go32.exe to run, but is not distributed with
+ a copy of go32.exe, incurs no obligations with regards to the
+ above sections.
+
+ * Contact me for special terms if none of the above are suitable.
+
+ * Donations are always appreciated.
+
+ The intent of this copyright is this: If you make money by using the
+ programs I wrote, I get some of it. If you use your sources to
+ teach others how to write programs, I'll support you.
+
+Changes to source code copyright BSD or FSF are copyright DJ Delorie, but
+fall under the terms of the original copyright.
+
+A copy of the file "COPYING" is included with this document. If you did not
+receive a copy of "COPYING", you may obtain one from whence this document
+was obtained, or by writing:
+ Free Software Foundation
+ 675 Mass Ave
+ Cambridge, MA 02139
+ USA
diff --git a/newlib/libc/sys/go32/creat.s b/newlib/libc/sys/go32/creat.s
new file mode 100644
index 00000000000..4c02e72f4c5
--- /dev/null
+++ b/newlib/libc/sys/go32/creat.s
@@ -0,0 +1,19 @@
+# /* This is file CREAT.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _creat
+_creat:
+ movb $1,%al
+ jmp turbo_assist
diff --git a/newlib/libc/sys/go32/crlf2nl.c b/newlib/libc/sys/go32/crlf2nl.c
new file mode 100644
index 00000000000..18b7061cce6
--- /dev/null
+++ b/newlib/libc/sys/go32/crlf2nl.c
@@ -0,0 +1,69 @@
+/* This is file CRLF2NL.C */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+unsigned crlf2nl(char *buf, unsigned len)
+{
+ char *bp = buf;
+ int i=0;
+ while (len--)
+ {
+ if (*bp != 13)
+ {
+ *buf++ = *bp;
+ i++;
+ }
+ bp++;
+ }
+ return i;
+}
+
+unsigned readcr(int fd, char *buf, unsigned len)
+{
+ unsigned i;
+ i = read(fd, buf, len);
+ if (i <= 0)
+ return i;
+ return crlf2nl(buf, i);
+}
+
+static char *sbuf = 0;
+#define BUFSIZE 4096
+
+unsigned writecr(int fd, char *buf, unsigned len)
+{
+ unsigned bufp=0, sbufp=0, crcnt=0, rlen=0;
+ int rv;
+ if (sbuf == 0)
+ sbuf = (char *)malloc(BUFSIZE+1);
+ while (len--)
+ {
+ if (buf[bufp] == 10)
+ {
+ crcnt++;
+ sbuf[sbufp++] = 13;
+ }
+ sbuf[sbufp++] = buf[bufp++];
+ if ((sbufp >= BUFSIZE) || (len == 0))
+ {
+ rv = write(fd, sbuf, sbufp);
+ if (rv < 0)
+ return rv;
+ rlen += rv - crcnt;
+ crcnt = 0;
+ sbufp = 0;
+ }
+ }
+ return rlen;
+}
+
diff --git a/newlib/libc/sys/go32/crt0.S b/newlib/libc/sys/go32/crt0.S
new file mode 100644
index 00000000000..5fc6cf77cde
--- /dev/null
+++ b/newlib/libc/sys/go32/crt0.S
@@ -0,0 +1,233 @@
+
+/*
+** Called as start(argc, argv, envp)
+*/
+
+/* gs:edx points to prog_info structure. All other registers are OBSOLETE
+** but included for backwards compatibility
+*/
+
+/* These symbols are for global constructors and destructors */
+#if 0
+ .section .ctor
+ .globl ___go32_first_ctor
+___go32_first_ctor:
+ .section .dtor
+ .globl ___go32_last_ctor
+___go32_last_ctor:
+ .globl ___go32_first_dtor
+___go32_first_dtor:
+ .data
+ .globl ___go32_last_dtor
+___go32_last_dtor:
+#endif
+ .text
+ .globl _start
+_start:
+ .globl start
+start:
+#ifdef EMU387
+ pusha
+ push %gs
+#endif
+ movl %eax,__hard_master
+ movl %esi,___pid
+ movl %edi,___transfer_buffer
+ movl %ebx,_ScreenPrimary
+ movl %ebp,_ScreenSecondary
+
+ cmpl $0, %edx
+ je Lcopy_none
+ movw %gs,%cx
+ movw %ds,%ax
+ cmpw %cx,%ax
+ je Lcopy_none
+
+ movl %gs:(%edx), %ecx
+ cmpl __go32_info_block, %ecx
+ jbe Lcopy_less
+ movl __go32_info_block, %ecx
+Lcopy_less:
+ movl $__go32_info_block, %edi
+ addl $3, %ecx
+ andl $0xfffffffc, %ecx
+ movl %ecx, (%edi)
+ addl $4, %edi
+ addl $4, %edx
+ subl $4, %ecx
+Lcopy_more:
+ movl %gs:(%edx), %eax
+ movl %eax, (%edi)
+ addl $4, %edx
+ addl $4, %edi
+ subl $4, %ecx
+ jnz Lcopy_more
+
+ movl __go32_info_block+4, %eax
+ movl %eax, _ScreenPrimary
+ movl __go32_info_block+8, %eax
+ movl %eax, _ScreenSecondary
+/* Backward compatibility - do not copy this one!
+** movl __go32_info_block+12, %eax
+** movl %eax, ___transfer_buffer
+*/
+ movl __go32_info_block+20, %eax
+ movl %eax, ___pid
+ movl __go32_info_block+24, %eax
+ movl %eax, __hard_master
+
+ jmp Lcopy_done
+
+Lcopy_none:
+ movl %ebx,__go32_info_block+4
+ movl %ebp,__go32_info_block+8
+ movl %edi,__go32_info_block+12
+ movl $4096,__go32_info_block+16
+ movl %esi,__go32_info_block+20
+ movl %eax,__go32_info_block+24
+ movl $28, __go32_info_block
+Lcopy_done:
+
+#ifndef EMU387
+ call __setstack
+#endif
+ xorl %esi,%esi
+ xorl %edi,%edi
+ xorl %ebp,%ebp
+ xorl %ebx,%ebx
+
+ movl %esp,%ebx
+#ifdef MAKE_GCRT0
+ call mcount_init /* initialize the profiler */
+#endif
+ movl 8(%ebx),%eax
+ pushl %eax
+ movl %eax,_environ
+ pushl 4(%ebx)
+ pushl (%ebx)
+ call ___main
+ call _main
+ addl $12,%esp
+#ifdef EMU387
+ pop %gs
+ popa
+#else
+ pushl %eax
+ call _exit
+
+exit_again:
+ movl $0x4c00,%eax
+ int $0x21
+ jmp exit_again
+#endif
+
+ ret
+
+
+#ifdef MAKE_GCRT0
+ .globl __exit
+__exit:
+ call mcount_write /* make sure we dump the output */
+exit_again2:
+ movb 4(%esp),%al
+ movb $0x4c,%ah
+ int $0x21
+ jmp exit_again2
+
+/* Here is where we initialize the timer interrupt - specific to go32 */
+/* In this case, the timer calls mcount_isr */
+ .globl mcount_isr_init
+mcount_isr_init:
+ movw __go32_info_block+36, %ax /* run mode */
+ cmp $1,%ax
+ jb skip_mcount
+ cmp $3,%ax
+ ja skip_mcount
+
+ movw $16,%ax
+ movw %ax,%gs
+
+ movzbl __hard_master,%eax /* timer is on irq 0 */
+ shll $3,%eax /* times 8 bpv */
+/* movl $960,%eax vector 0x78 * 8 bpv */
+ movw %gs:(%eax),%cx
+ movw %cx,mc_chain
+ movw %gs:6(%eax),%cx
+ movw %cx,mc_chain_hi
+ movw %gs:2(%eax),%cx
+ movw %cx,mc_chain_sel
+
+ movl $mcount_isr,%ecx
+ movw %cx,%gs:(%eax)
+ movw $0xd8,%gs:2(%eax) /* selector 27 == 32-bit code */
+ movw $0x8f00,%gs:4(%eax)
+ rorl $16,%ecx
+ movw %cx,%gs:6(%eax)
+ movw %ds,%ax
+ movw %ax,%gs
+skip_mcount:
+ movl mcount_histogram,%eax
+ movl $1,(%eax)
+ ret
+
+/* Obtain the PC where we interrupted, and bump the histogram. We should */
+/* do error checking here, but we don't. This routine is specific to go32 */
+/* in some spots */
+mcount_isr:
+ pushl %eax
+ cmpl $1,mcount_skip
+ je L0
+ movl 4(%esp),%eax /* get the PC */
+ subl $0x1020,%eax /* to fit in low..high */
+ andl $0xfffffffc,%eax
+ shrl $1,%eax /* now points to one 4-byte entry */
+ addl mcount_histogram,%eax
+ incw (%eax)
+L0:
+ popl %eax
+ ljmp mc_chain /* chain to the next timer vector */
+ iret
+#endif
+
+ .data
+
+ .globl _environ
+_environ:
+ .long 0
+
+ .globl ___pid
+___pid:
+ .long 42
+
+ .globl ___transfer_buffer
+___transfer_buffer:
+ .long 0
+
+ .globl _ScreenPrimary
+_ScreenPrimary:
+ .long 0
+
+ .globl _ScreenSecondary
+_ScreenSecondary:
+ .long 0
+
+ .globl __hard_master
+ .globl __hard_slave
+ .globl __core_select
+__hard_master:
+ .byte 0
+__hard_slave:
+ .byte 0
+__core_select:
+ .short 0
+
+#ifdef MAKE_GCRT0
+mc_chain:
+ .short 0
+mc_chain_hi:
+ .short 0
+mc_chain_sel:
+ .short 0
+#endif
+
+
diff --git a/newlib/libc/sys/go32/dir.c b/newlib/libc/sys/go32/dir.c
new file mode 100644
index 00000000000..ba3831a825d
--- /dev/null
+++ b/newlib/libc/sys/go32/dir.c
@@ -0,0 +1,95 @@
+#include <string.h>
+
+#include "sys/dir.h"
+#include "sys/dirent.h"
+#include <errno.h>
+
+DIR *opendir(char *name)
+{
+ int length;
+ DIR *dir = (DIR *)malloc(sizeof(DIR));
+ dir->num_read = 0;
+ dir->name = (char *)malloc(strlen(name)+6);
+ strcpy(dir->name, name);
+
+ /* Append a "." if we got only the device name */
+ if (dir->name[1] == ':' && strlen(dir->name) == 2)
+ strcat(dir->name, ".");
+
+ /* Strip trailing slashes, so we can append "/*.*" */
+ while (1)
+ {
+ length = strlen(dir->name);
+ if (length == 0) break;
+ if (dir->name[length - 1] == '/' ||
+ dir->name[length - 1] == '\\')
+ dir->name[length - 1] = '\0';
+ else
+ break;
+ }
+
+ strcat(dir->name, "/*.*");
+ return dir;
+}
+
+
+
+static char *strlwr(char *s)
+{
+ char *p = s;
+ while (*s)
+ {
+ if ((*s >= 'A') && (*s <= 'Z'))
+ *s += 'a'-'A';
+ s++;
+ }
+ return p;
+}
+
+struct dirent *readdir(DIR *dir)
+{
+ int done;
+ int oerrno = errno;
+ if (dir->num_read)
+ done = findnext(&dir->ff);
+ else
+ done = findfirst(dir->name, &dir->ff,
+ FA_ARCH|FA_RDONLY|FA_DIREC|FA_HIDDEN|FA_SYSTEM);
+ if (done)
+ {
+ if (errno == ENMFILE)
+ errno = oerrno;
+ return 0;
+ }
+ dir->num_read ++;
+ dir->de.d_namlen = strlen(dir->ff.ff_name);
+ strcpy(dir->de.d_name,dir->ff.ff_name);
+ strlwr(dir->de.d_name);
+ return &dir->de;
+}
+
+long telldir(DIR *dir)
+{
+ return dir->num_read;
+}
+
+void seekdir(DIR *dir, long loc)
+{
+ int i;
+ rewinddir(dir);
+ for (i=0; i<loc; i++)
+ readdir(dir);
+}
+
+void rewinddir(DIR *dir)
+{
+ dir->num_read = 0;
+}
+
+int closedir(DIR *dir)
+{
+ free(dir->name);
+ free(dir);
+ return 0;
+}
+
diff --git a/newlib/libc/sys/go32/dir.h b/newlib/libc/sys/go32/dir.h
new file mode 100644
index 00000000000..826c4604d28
--- /dev/null
+++ b/newlib/libc/sys/go32/dir.h
@@ -0,0 +1,53 @@
+#ifndef _DIR_H_
+#define _DIR_H_
+
+struct ffblk {
+ char ff_reserved[21];
+ char ff_attrib;
+ short ff_ftime;
+ short ff_fdate;
+ short ff_filler;
+ long ff_fsize;
+ char ff_name[16];
+};
+
+#define FA_RDONLY 1
+#define FA_HIDDEN 2
+#define FA_SYSTEM 4
+#define FA_LABEL 8
+#define FA_DIREC 16
+#define FA_ARCH 32
+
+/* for fnmerge/fnsplit */
+#define MAXPATH 80
+#define MAXDRIVE 3
+#define MAXDIR 66
+#define MAXFILE 9
+#define MAXEXT 5
+
+#define WILDCARDS 0x01
+#define EXTENSION 0x02
+#define FILENAME 0x04
+#define DIRECTORY 0x08
+#define DRIVE 0x10
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int findfirst(const char *pathname, struct ffblk *ffblk, int attrib);
+int findnext(struct ffblk *ffblk);
+
+void fnmerge (char *path, const char *drive, const char *dir,
+ const char *name, const char *ext);
+int fnsplit (const char *path, char *drive, char *dir,
+ char *name, char *ext);
+
+int getdisk(void);
+int setdisk(int drive);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/newlib/libc/sys/go32/djtime.h b/newlib/libc/sys/go32/djtime.h
new file mode 100644
index 00000000000..db28dbe7e82
--- /dev/null
+++ b/newlib/libc/sys/go32/djtime.h
@@ -0,0 +1,42 @@
+/* This is file TIME.H */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#ifndef _SYS_TIME_H_
+#define _SYS_TIME_H_
+
+#include <time.h>
+
+struct timeval {
+ long tv_sec;
+ long tv_usec;
+};
+
+struct timezone {
+ int tz_minuteswest;
+ int tz_dsttime;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int gettimeofday(struct timeval *tp, struct timezone *tzp);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
diff --git a/newlib/libc/sys/go32/dos.h b/newlib/libc/sys/go32/dos.h
new file mode 100644
index 00000000000..8b42562d20b
--- /dev/null
+++ b/newlib/libc/sys/go32/dos.h
@@ -0,0 +1,107 @@
+#ifndef _DOS_H_
+#define _DOS_H_
+
+#include "pc.h"
+
+union REGS {
+ struct {
+ unsigned long ax;
+ unsigned long bx;
+ unsigned long cx;
+ unsigned long dx;
+ unsigned long si;
+ unsigned long di;
+ unsigned long cflag;
+ unsigned long flags;
+ } x;
+ struct {
+ unsigned char al;
+ unsigned char ah;
+ unsigned short upper_ax;
+ unsigned char bl;
+ unsigned char bh;
+ unsigned short upper_bx;
+ unsigned char cl;
+ unsigned char ch;
+ unsigned short upper_cx;
+ unsigned char dl;
+ unsigned char dh;
+ unsigned short upper_dx;
+ } h;
+};
+
+struct SREGS {
+ unsigned short cs;
+ unsigned short ds;
+ unsigned short es;
+ unsigned short fs;
+ unsigned short gs;
+ unsigned short ss;
+};
+
+struct ftime {
+ unsigned ft_tsec:5; /* 0-29, double to get real seconds */
+ unsigned ft_min:6; /* 0-59 */
+ unsigned ft_hour:5; /* 0-23 */
+ unsigned ft_day:5; /* 1-31 */
+ unsigned ft_month:4; /* 1-12 */
+ unsigned ft_year:7; /* since 1980 */
+};
+
+struct date {
+ short da_year;
+ char da_day;
+ char da_mon;
+};
+
+struct time {
+ unsigned char ti_min;
+ unsigned char ti_hour;
+ unsigned char ti_hund;
+ unsigned char ti_sec;
+};
+
+struct dfree {
+ unsigned df_avail;
+ unsigned df_total;
+ unsigned df_bsec;
+ unsigned df_sclus;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int bdos(int func, unsigned dx, unsigned al);
+int bdosptr(int func, void *dx, unsigned al);
+int int86(int ivec, union REGS *in, union REGS *out);
+int int86x(int ivec, union REGS *in, union REGS *out, struct SREGS *seg);
+int intdos(union REGS *in, union REGS *out);
+int intdosx(union REGS *in, union REGS *out, struct SREGS *seg);
+
+int enable(void);
+int disable(void);
+
+int getftime(int handle, struct ftime *ftimep);
+int setftime(int handle, struct ftime *ftimep);
+
+int getcbrk(void);
+int setcbrk(int new_value);
+
+void getdate(struct date *);
+void gettime(struct time *);
+void setdate(struct date *);
+void settime(struct time *);
+
+void getdfree(unsigned char drive, struct dfree *ptr);
+
+void delay(unsigned msec);
+int _get_default_drive(void);
+void _fixpath(const char *, char *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/newlib/libc/sys/go32/dosmem.S b/newlib/libc/sys/go32/dosmem.S
new file mode 100644
index 00000000000..c1956f76781
--- /dev/null
+++ b/newlib/libc/sys/go32/dosmem.S
@@ -0,0 +1,120 @@
+/* DOSMEM.S */
+/*
+** Copyright (C) 1993 C.W. Sandmann
+**
+** This file may be freely distributed as long as the author's name remains.
+** Extender environment independent way to set up Real area 1Mb access.
+** Procedure takes a single argument %eax which contains the real area offset.
+** After call, access may be made with "%gs:(%eax)"
+*/
+ .text
+ .align 2
+ .globl dosmemsetup
+dosmemsetup: /* no params, expected ASM call only */
+ pushl %eax
+ movzwl __core_select,%eax
+ testl %eax,%eax
+ je old_go32 /* Image run with pre-DPMI extender */
+ movw %ax,%gs /* Use real area selector */
+ popl %eax /* Plus real offset */
+ andl $0x0fffffff,%eax /* Clear any linear access bits */
+ ret
+ .align 2,0x90
+old_go32:
+ push %ds
+ pop %gs /* Use arena selector */
+ popl %eax
+ orl $0xe0000000,%eax /* Plus linear access area */
+ ret
+
+ .align 2
+ .globl _dosmemget
+_dosmemget: /* long offset, long len, long *buf */
+ push %gs
+ movl 8(%esp),%eax /* offset */
+ call dosmemsetup
+ movl 12(%esp),%ecx /* length */
+ movl 16(%esp),%edx /* arena offset */
+ pushl %esi
+ pushl %edi
+ movl %eax,%esi
+ movl %edx,%edi
+ push %ds
+ push %es
+ push %ds
+ pop %es
+ push %gs
+ pop %ds
+ cld
+ rep
+ movsb /* move ECX bytes from Real area */
+ pop %es
+ pop %ds
+ popl %edi
+ popl %esi
+ pop %gs
+ ret
+
+ .align 2
+ .globl _dosmemput
+_dosmemput: /* long *buf, long len, long offset */
+ push %gs
+ movl 16(%esp),%eax /* offset */
+ call dosmemsetup
+ movl 12(%esp),%ecx /* length */
+ movl 8(%esp),%edx /* arena offset */
+ pushl %esi
+ pushl %edi
+ movl %eax,%edi
+ movl %edx,%esi
+ push %es
+ push %gs
+ pop %es
+ cld
+ rep
+ movsb /* move ECX bytes to Real area */
+ pop %es
+ popl %edi
+ popl %esi
+ pop %gs
+ ret
+
+ .align 2 /* 8(bp) 12(bp) 16(bp) 20(bp) 24(bp) */
+ .globl _movedata /* src_sel, src_ofs, dest_sel, dest_ofs, len */
+_movedata:
+ pushl %ebp
+ movl %esp,%ebp
+ pushw %ds
+ pushw %es
+ pushl %esi
+ pushl %edi
+
+ movl 8(%ebp),%eax
+ movw %ax,%ds
+ movl 12(%ebp),%esi
+
+ movl 16(%ebp),%eax
+ movw %ax,%es
+ movl 20(%ebp),%edi
+
+ movl 24(%ebp),%ecx
+ pushl %ecx
+ shrl $2,%ecx
+ jcxz no_big_move
+ rep
+ movsl
+no_big_move:
+ popl %ecx
+ andl $3,%ecx
+ jcxz no_little_move
+ rep
+ movsb
+no_little_move:
+
+ popl %edi
+ popl %esi
+ popw %es
+ popw %ds
+ leave
+ ret
+
diff --git a/newlib/libc/sys/go32/dpmi.c b/newlib/libc/sys/go32/dpmi.c
new file mode 100644
index 00000000000..5215065e120
--- /dev/null
+++ b/newlib/libc/sys/go32/dpmi.c
@@ -0,0 +1,413 @@
+#include <stdlib.h>
+#include "dos.h"
+#include "go32.h"
+#include <sys/types.h>
+#include "dpmi.h"
+
+static union REGS r;
+static struct SREGS s;
+
+int _go32_dpmi_allocate_dos_memory(_go32_dpmi_seginfo *info)
+{
+ r.x.ax = 0x0100;
+ r.x.bx = info->size;
+ int86(0x31, &r, &r);
+ if (r.x.flags & 1)
+ {
+ info->size = r.x.bx;
+ return r.x.ax;
+ }
+ else
+ {
+ info->rm_segment = r.x.ax;
+ info->pm_selector = r.x.dx;
+ return 0;
+ }
+}
+
+int _go32_dpmi_free_dos_memory(_go32_dpmi_seginfo *info)
+{
+ r.x.ax = 0x0101;
+ r.x.dx = info->pm_selector;
+ int86(0x31, &r, &r);
+ if (r.x.flags & 1)
+ {
+ return r.x.ax;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+int _go32_dpmi_resize_dos_memory(_go32_dpmi_seginfo *info)
+{
+ r.x.ax = 0x0102;
+ r.x.bx = info->size;
+ r.x.dx = info->pm_selector;
+ int86(0x31, &r, &r);
+ if (r.x.flags & 1)
+ {
+ info->size = r.x.bx;
+ return r.x.ax;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+int _go32_dpmi_get_real_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info)
+{
+ r.x.ax = 0x0200;
+ r.h.bl = vector;
+ int86(0x31, &r, &r);
+ info->rm_segment = r.x.cx;
+ info->rm_offset = r.x.dx;
+ return 0;
+}
+
+int _go32_dpmi_set_real_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info)
+{
+ r.x.ax = 0x0201;
+ r.h.bl = vector;
+ r.x.cx = info->rm_segment;
+ r.x.dx = info->rm_offset;
+ int86(0x31, &r, &r);
+ return 0;
+}
+
+int _go32_dpmi_get_protected_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info)
+{
+ r.x.ax = 0x0204;
+ r.h.bl = vector;
+ int86(0x31, &r, &r);
+ info->pm_selector = r.x.cx;
+ info->pm_offset = r.x.dx;
+ return 0;
+}
+
+int _go32_dpmi_set_protected_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info)
+{
+ r.x.ax = 0x0205;
+ r.h.bl = vector;
+ r.x.cx = info->pm_selector;
+ r.x.dx = info->pm_offset;
+ int86(0x31, &r, &r);
+ if (r.x.flags & 1)
+ {
+ return r.x.ax;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+/* In real DPMI, we enter with only CS known, and SS on a locked 4K stack which
+ is *NOT* our SS. We must set up everthing, including a stack swap, then
+ restore it the way we found it. C. Sandmann 4-93 */
+
+static unsigned char wrapper_intcommon[] = {
+0x1e, /* push ds */
+0x06, /* push es */
+0x0f, 0xa0, /* push fs */
+0x0f, 0xa8, /* push gs */
+0x60, /* pusha */
+0x66, 0xb8, 0x34, 0x12, /* mov ax,0x1234 */
+0x8e, 0xd8, /* mov ds,ax */
+0x8e, 0xc0, /* mov es,ax */
+0x8e, 0xe0, /* mov fs,ax */
+0x8e, 0xe8, /* mov gs,ax */
+0xbb, 0x00, 0x00, 0x00, 0x00, /* mov ebx,_local_stack */
+0xfc, /* cld */
+0x89, 0xe1, /* mov ecx,esp */
+0x8c, 0xd2, /* mov dx,ss */
+0x8e, 0xd0, /* mov ss,ax */
+0x89, 0xdc, /* mov esp,ebx */
+0x52, /* push edx */
+0x51, /* push ecx */
+0xe8, 0x00, 0x00, 0x00, 0x00, /* call _rmih */
+0x58, /* pop eax */
+0x5b, /* pop ebx */
+0x8e, 0xd3, /* mov ss,bx */
+0x89, 0xc4, /* mov esp,eax */
+0x61, /* popa */
+0x0f, 0xa9, /* pop gs */
+0x0f, 0xa1, /* pop fs */
+0x07, /* pop es */
+0x1f /* pop ds */
+};
+
+static unsigned char wrapper_intiret[] = {
+0xcf /* iret */
+};
+
+static unsigned char wrapper_intchain[] = {
+0x2e, 0xff, 0x2d, 0x00, 0x00, 0x00, 0x00, /* jmp cs:[_old_int+39] */
+0xcf, /* iret */
+0x78, 0x56, 0x34, 0x12,
+0xcd, 0xab
+};
+
+/* _interrupt_stack_size can be changed globally before calling this routine if
+ needed. Don't change it between calls or you will mess up the malloc chain ! */
+
+unsigned _interrupt_stack_size = 32256;
+
+int _go32_dpmi_chain_protected_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info)
+{
+ char *mystack;
+ unsigned char *wrapper = (unsigned char *)malloc(sizeof(wrapper_intcommon) + sizeof(wrapper_intchain));
+ if (wrapper == 0)
+ return 0x8015;
+ mystack = (char *)malloc(_interrupt_stack_size);
+ if (mystack == 0)
+ return 0x8015;
+
+ r.x.ax = 0x0204;
+ r.h.bl = vector;
+ int86(0x31, &r, &r);
+
+ memcpy(wrapper, wrapper_intcommon, sizeof(wrapper_intcommon));
+ memcpy(wrapper+sizeof(wrapper_intcommon), wrapper_intchain, sizeof(wrapper_intchain));
+ *(short *)(wrapper+9) = _go32_my_ds();
+ *(long *)(wrapper+20) = (int)mystack + _interrupt_stack_size;
+ *(long *)(wrapper+36) = info->pm_offset - (int)wrapper - 40;
+ *(long *)(wrapper+sizeof(wrapper_intcommon)+3) = (long)wrapper+sizeof(wrapper_intcommon)+8;
+ *(long *)(wrapper+sizeof(wrapper_intcommon)+8) = r.x.dx;
+ *(short *)(wrapper+sizeof(wrapper_intcommon)+12) = r.x.cx;
+
+ r.x.ax = 0x0205;
+ r.h.bl = vector;
+ r.x.cx = _go32_my_cs();
+ r.x.dx = (int)wrapper;
+ int86(0x31, &r, &r);
+ return 0;
+}
+
+int _go32_dpmi_allocate_iret_wrapper(_go32_dpmi_seginfo *info)
+{
+ char *mystack;
+ unsigned char *wrapper = (unsigned char *)malloc(sizeof(wrapper_intcommon) + sizeof(wrapper_intiret));
+ if (wrapper == 0)
+ return 0x8015;
+ mystack = (char *)malloc(_interrupt_stack_size);
+ if (mystack == 0)
+ return 0x8015;
+
+ memcpy(wrapper, wrapper_intcommon, sizeof(wrapper_intcommon));
+ memcpy(wrapper+sizeof(wrapper_intcommon), wrapper_intiret, sizeof(wrapper_intiret));
+ *(short *)(wrapper+9) = _go32_my_ds();
+ *(long *)(wrapper+20) = (int)mystack + _interrupt_stack_size;
+ *(long *)(wrapper+36) = info->pm_offset - (int)wrapper - 40;
+
+ info->pm_offset = (int)wrapper;
+ return 0;
+}
+
+int _go32_dpmi_free_iret_wrapper(_go32_dpmi_seginfo *info)
+{
+ char *mystack;
+ char *wrapper = (char *)info->pm_offset;
+ mystack = (char *)(*(long *)(wrapper+20) - _interrupt_stack_size);
+ free(mystack);
+ free(wrapper);
+ return 0;
+}
+
+int _go32_dpmi_simulate_int(int vector, _go32_dpmi_registers *regs)
+{
+ r.h.bl = vector;
+ r.h.bh = 0;
+ r.x.cx = 0;
+ r.x.di = (int)regs;
+ if (vector == 0x21 && regs->x.ax == 0x4b00)
+ {
+ r.x.ax = 0xff0a;
+ int86(0x21, &r, &r);
+ }
+ else
+ {
+ r.x.ax = 0x0300;
+ int86(0x31, &r, &r);
+ }
+ if (r.x.flags & 1)
+ {
+ return r.x.ax;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+int _go32_dpmi_simulate_fcall(_go32_dpmi_registers *regs)
+{
+ r.x.ax = 0x0301;
+ r.h.bh = 0;
+ r.x.cx = 0;
+ r.x.di = (int)regs;
+ int86(0x31, &r, &r);
+ if (r.x.flags & 1)
+ {
+ return r.x.ax;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+int _go32_dpmi_simulate_fcall_iret(_go32_dpmi_registers *regs)
+{
+ r.x.ax = 0x0302;
+ r.h.bh = 0;
+ r.x.cx = 0;
+ r.x.di = (int)regs;
+ int86(0x31, &r, &r);
+ if (r.x.flags & 1)
+ {
+ return r.x.ax;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+/* Bug here; this needs to be fixed like above with SS & CLD */
+
+static unsigned char wrapper_common[] = {
+0x66, 0x06, /* push es */
+0x66, 0x1e, /* push ds */
+0x66, 0x06, /* push es */
+0x66, 0x1f, /* pop ds */
+0x56, /* push esi */
+0x57, /* push edi */
+0xe8, 0x00, 0x00, 0x00, 0x00, /* call _rmcb */
+0x5f, /* pop edi */
+0x5e, /* pop esi */
+0x66, 0x1f, /* pop ds */
+0x66, 0x07, /* pop es */
+0xfc, /* cld */
+0x66, 0x8b, 0x06, /* mov ax,[esi] */
+0x66, 0x26, 0x89, 0x47, 0x2a, /* mov es:[edi+42],ax */
+0x66, 0x8b, 0x46, 0x02, /* mov ax,[esi+2] */
+0x66, 0x26, 0x89, 0x47, 0x2c, /* mov es:[edi+44],ax */
+};
+
+static unsigned char wrapper_retf[] = {
+0x66, 0x26, 0x83, 0x47, 0x2e, 0x04, /* add es:[edi+46],0x4 */
+0xcf /* iret */
+};
+
+static unsigned char wrapper_iret[] = {
+0x66, 0x8b, 0x46, 0x04, /* mov ax,[esi+4] */
+0x66, 0x26, 0x89, 0x47, 0x20, /* mov es:[edi+32],ax */
+0x66, 0x26, 0x83, 0x47, 0x2e, 0x06, /* add es:[edi+46],0x6 */
+0xcf /* iret */
+};
+
+int _go32_dpmi_allocate_real_mode_callback_retf(_go32_dpmi_seginfo *info, _go32_dpmi_registers *regs)
+{
+ unsigned char *wrapper = (unsigned char *)malloc(sizeof(wrapper_common) + sizeof(wrapper_retf));
+ if (wrapper == 0)
+ return 0x8015;
+
+ memcpy(wrapper, wrapper_common, sizeof(wrapper_common));
+ memcpy(wrapper+sizeof(wrapper_common), wrapper_retf, sizeof(wrapper_retf));
+ *(long *)(wrapper+11) = info->pm_offset - (int)wrapper - 15;
+ info->size = (int)wrapper;
+
+ r.x.ax = 0x0303;
+ r.x.si = (int)wrapper;
+ r.x.di = (int)regs;
+ s.ds = _go32_my_cs();
+ s.es = _go32_my_ds();
+ s.fs = 0;
+ s.gs = 0;
+ int86x(0x31, &r, &r, &s);
+ if (r.x.flags & 1)
+ {
+ return r.x.ax;
+ }
+ else
+ {
+ info->rm_segment = r.x.cx;
+ info->rm_offset = r.x.dx;
+ return 0;
+ }
+}
+
+int _go32_dpmi_allocate_real_mode_callback_iret(_go32_dpmi_seginfo *info, _go32_dpmi_registers *regs)
+{
+ unsigned char *wrapper = (unsigned char *)malloc(sizeof(wrapper_common) + sizeof(wrapper_iret));
+ if (wrapper == 0)
+ return 0x8015;
+
+ memcpy(wrapper, wrapper_common, sizeof(wrapper_common));
+ memcpy(wrapper+sizeof(wrapper_common), wrapper_iret, sizeof(wrapper_iret));
+ *(long *)(wrapper+11) = info->pm_offset - (int)wrapper - 15;
+ info->size = (int)wrapper;
+
+ r.x.ax = 0x0303;
+ r.x.si = (int)wrapper;
+ r.x.di = (int)regs;
+ s.ds = _go32_my_cs();
+ s.es = _go32_my_ds();
+ s.fs = 0;
+ s.gs = 0;
+ int86x(0x31, &r, &r, &s);
+ if (r.x.flags & 1)
+ {
+ return r.x.ax;
+ }
+ else
+ {
+ info->rm_segment = r.x.cx;
+ info->rm_offset = r.x.dx;
+ return 0;
+ }
+}
+
+int _go32_dpmi_free_real_mode_callback(_go32_dpmi_seginfo *info)
+{
+ free((char *)info->size);
+ r.x.ax = 0x0304;
+ r.x.cx = info->rm_segment;
+ r.x.dx = info->rm_offset;
+ int86(0x31, &r, &r);
+ if (r.x.flags & 1)
+ {
+ return r.x.ax;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+int _go32_dpmi_get_free_memory_information(_go32_dpmi_meminfo *info)
+{
+ r.x.ax = 0x0500;
+ r.x.di = (int)info;
+ int86(0x31, &r, &r);
+ return 0;
+}
+
+u_long _go32_dpmi_remaining_physical_memory()
+{
+ _go32_dpmi_meminfo info;
+ _go32_dpmi_get_free_memory_information(&info);
+ if (info.available_physical_pages)
+ return info.available_physical_pages * 4096;
+ return info.available_memory;
+}
+
+u_long _go32_dpmi_remaining_virtual_memory()
+{
+ _go32_dpmi_meminfo info;
+ _go32_dpmi_get_free_memory_information(&info);
+ return info.available_memory;
+}
diff --git a/newlib/libc/sys/go32/dpmi.h b/newlib/libc/sys/go32/dpmi.h
new file mode 100644
index 00000000000..7a2cb13afec
--- /dev/null
+++ b/newlib/libc/sys/go32/dpmi.h
@@ -0,0 +1,151 @@
+/* This is file dpmi.h */
+/*
+** Copyright (C) 1993 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#ifndef _DPMI_H_
+#define _DPMI_H_
+
+
+#include <sys/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef union {
+ struct {
+ u_long edi;
+ u_long esi;
+ u_long ebp;
+ u_long res;
+ u_long ebx;
+ u_long edx;
+ u_long ecx;
+ u_long eax;
+ } d;
+ struct {
+ u_short di, di_hi;
+ u_short si, si_hi;
+ u_short bp, bp_hi;
+ u_short res, res_hi;
+ u_short bx, bx_hi;
+ u_short dx, dx_hi;
+ u_short cx, cx_hi;
+ u_short ax, ax_hi;
+ u_short flags;
+ u_short es;
+ u_short ds;
+ u_short fs;
+ u_short gs;
+ u_short ip;
+ u_short cs;
+ u_short sp;
+ u_short ss;
+ } x;
+ struct {
+ u_char edi[4];
+ u_char esi[4];
+ u_char ebp[4];
+ u_char res[4];
+ u_char bl, bh, ebx_b2, ebx_b3;
+ u_char dl, dh, edx_b2, edx_b3;
+ u_char cl, ch, ecx_b2, ecx_b3;
+ u_char al, ah, eax_b2, eax_b3;
+ } h;
+} _go32_dpmi_registers;
+
+typedef struct {
+ u_long size;
+ u_long pm_offset;
+ u_short pm_selector;
+ u_short rm_offset;
+ u_short rm_segment;
+} _go32_dpmi_seginfo;
+
+typedef struct {
+ u_long available_memory;
+ u_long available_pages;
+ u_long available_lockable_pages;
+ u_long linear_space;
+ u_long unlocked_pages;
+ u_long available_physical_pages;
+ u_long total_physical_pages;
+ u_long free_linear_space;
+ u_long max_pages_in_paging_file;
+ u_long reserved[3];
+} _go32_dpmi_meminfo;
+
+/* returns zero if success, else dpmi error and info->size is max size */
+int _go32_dpmi_allocate_dos_memory(_go32_dpmi_seginfo *info);
+ /* set size to bytes/16, call, use rm_segment. Do not
+ change anthing but size until the memory is freed.
+ If error, max size is returned in size as bytes/16. */
+int _go32_dpmi_free_dos_memory(_go32_dpmi_seginfo *info);
+ /* set new size to bytes/16, call. If error, max size
+ is returned in size as bytes/16 */
+int _go32_dpmi_resize_dos_memory(_go32_dpmi_seginfo *info);
+ /* uses pm_selector to free memory */
+
+/* These both use the rm_segment:rm_offset fields only */
+int _go32_dpmi_get_real_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);
+int _go32_dpmi_set_real_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);
+
+/* These do NOT wrap the function in pm_offset in an iret handler.
+ You must provide an assembler interface yourself, or alloc one below.
+ You may NOT longjmp out of an interrupt handler. */
+int _go32_dpmi_get_protected_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);
+ /* puts vector in pm_selector:pm_offset. */
+int _go32_dpmi_set_protected_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);
+ /* sets vector from pm_offset and pm_selector */
+int _go32_dpmi_chain_protected_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);
+ /* sets up wrapper that calls function in pm_offset, chaining to old
+ handler when it returns */
+
+/* These can be used to generate assember IRET-style wrappers for functions */
+int _go32_dpmi_allocate_iret_wrapper(_go32_dpmi_seginfo *info);
+ /* Put function ptr in pm_offset, call, returns wrapper entry in pm_offset. */
+int _go32_dpmi_free_iret_wrapper(_go32_dpmi_seginfo *info);
+ /* assumes pm_offset points to wrapper, frees it */
+
+/* simulate real mode calls. CS:IP from regs for non-interrupt */
+int _go32_dpmi_simulate_int(int vector, _go32_dpmi_registers *regs);
+int _go32_dpmi_simulate_fcall(_go32_dpmi_registers *regs);
+int _go32_dpmi_simulate_fcall_iret(_go32_dpmi_registers *regs);
+
+/* These automatically handle the tasks of restructuring the
+ real-mode stack for the proper return type. The callback
+ (info->pm_offset) is called as (*pmcb)(_go32_dpmi_registers *regs); */
+int _go32_dpmi_allocate_real_mode_callback_retf(_go32_dpmi_seginfo *info, _go32_dpmi_registers *regs);
+ /* points callback at pm_offset, returns seg:ofs of callback addr
+ in rm_segment:rm_offset. Do not change any fields until freed.
+ Interface is added to simulate far return */
+int _go32_dpmi_allocate_real_mode_callback_iret(_go32_dpmi_seginfo *info, _go32_dpmi_registers *regs);
+ /* same, but simulates iret */
+int _go32_dpmi_free_real_mode_callback(_go32_dpmi_seginfo *info);
+ /* frees callback */
+
+/* Only available_memory is guaranteed to be valid. Try
+ available_physical_pages for phys mem left */
+int _go32_dpmi_get_free_memory_information(_go32_dpmi_meminfo *info);
+
+/* Convenience functions. These use the above memory info call.
+ The return value is *bytes* */
+u_long _go32_dpmi_remaining_physical_memory(void);
+u_long _go32_dpmi_remaining_virtual_memory(void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/newlib/libc/sys/go32/dup.s b/newlib/libc/sys/go32/dup.s
new file mode 100644
index 00000000000..e093baffd2b
--- /dev/null
+++ b/newlib/libc/sys/go32/dup.s
@@ -0,0 +1,28 @@
+# /* This is file DUP.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _dup
+_dup:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl 16(%esp),%ebx
+ movb $0x45,%ah
+ int $0x21
+ popl %edi
+ popl %esi
+ popl %ebx
+ jb syscall_error
+ ret
diff --git a/newlib/libc/sys/go32/dup2.s b/newlib/libc/sys/go32/dup2.s
new file mode 100644
index 00000000000..e26b48fa164
--- /dev/null
+++ b/newlib/libc/sys/go32/dup2.s
@@ -0,0 +1,28 @@
+# /* This is file DUP2.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _dup2
+_dup2:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl 16(%esp),%ebx
+ movl 20(%esp),%ecx
+ movb $0x46,%ah
+ int $0x21
+ popl %edi
+ popl %esi
+ popl %ebx
+ jmp syscall_check
diff --git a/newlib/libc/sys/go32/exec.c b/newlib/libc/sys/go32/exec.c
new file mode 100644
index 00000000000..004666c719d
--- /dev/null
+++ b/newlib/libc/sys/go32/exec.c
@@ -0,0 +1,509 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <fcntl.h>
+#include "go32.h"
+#include "dpmi.h"
+/*#include "process.h"*/
+#if 1
+#define P_WAIT 1
+#define P_NOWAIT 2 /* always generates error */
+#define P_OVERLAY 3
+#endif
+extern const char **environ;
+#define environ ((const char **)environ)
+
+#define scan_ptr() \
+ char const **ptr; \
+ for (ptr = &argv0; *ptr; ptr++); \
+ ptr = (char const **)(*++ptr);
+
+int execl(const char *path, const char *argv0, ...)
+{
+ return spawnve(P_OVERLAY, path, &argv0, environ);
+}
+
+int execle(const char *path, const char *argv0, ... /*, const char **envp */)
+{
+ scan_ptr();
+ return spawnve(P_OVERLAY, path, &argv0, ptr);
+}
+
+int execlp(const char *path, const char *argv0, ...)
+{
+ return spawnvpe(P_OVERLAY, path, &argv0, environ);
+}
+
+int execlpe(const char *path, const char *argv0, ... /*, const char **envp */)
+{
+ scan_ptr();
+ return spawnvpe(P_OVERLAY, path, &argv0, ptr);
+}
+
+/*-------------------------------------------------*/
+
+int execv(const char *path, const char **argv)
+{
+ return spawnve(P_OVERLAY, path, argv, environ);
+}
+
+int execve(const char *path, const char **argv, const char **envp)
+{
+ return spawnve(P_OVERLAY, path, argv, envp);
+}
+
+int execvp(const char *path, const char **argv)
+{
+ return spawnvpe(P_OVERLAY, path, argv, environ);
+}
+
+int execvpe(const char *path, const char **argv, const char **envp)
+{
+ return spawnvpe(P_OVERLAY, path, argv, envp);
+}
+
+/*-------------------------------------------------*/
+
+int spawnl(int mode, const char *path, const char *argv0, ...)
+{
+ return spawnve(mode, path, &argv0, environ);
+}
+
+int spawnle(int mode, const char *path, const char *argv0, ... /*, const char **envp */)
+{
+ scan_ptr();
+ return spawnve(mode, path, &argv0, ptr);
+}
+
+int spawnlp(int mode, const char *path, const char *argv0, ...)
+{
+ return spawnvpe(mode, path, &argv0, environ);
+}
+
+int spawnlpe(int mode, const char *path, const char *argv0, ... /*, const char **envp */)
+{
+ scan_ptr();
+ return spawnvpe(mode, path, &argv0, ptr);
+}
+
+/*-------------------------------------------------*/
+
+typedef struct {
+ u_short eseg;
+ u_short argoff;
+ u_short argseg;
+ u_short fcb1_off;
+ u_short fcb1_seg;
+ u_short fcb2_off;
+ u_short fcb2_seg;
+} Execp;
+
+static Execp parm;
+
+static u_long tbuf;
+
+static u_long talloc(size_t amt)
+{
+ u_long rv = tbuf;
+ tbuf += amt;
+ return rv;
+}
+
+static int direct_exec_tail(const char *program, const char *args, const char **envp)
+{
+ _go32_dpmi_registers r;
+ u_long program_la;
+ u_long arg_la;
+ u_long parm_la;
+ u_long env_la, env_e_la;
+ char arg_header[3];
+ int i;
+
+ program_la = talloc(strlen(program)+1);
+ arg_la = talloc(strlen(args)+3);
+ parm_la = talloc(sizeof(Execp));
+
+ dosmemput(program, strlen(program)+1, program_la);
+
+ arg_header[0] = strlen(args);
+ arg_header[1] = '\r';
+ dosmemput(arg_header, 1, arg_la);
+ dosmemput(args, strlen(args), arg_la+1);
+ dosmemput(arg_header+1, 1, arg_la+1+strlen(args));
+
+ do {
+ env_la = talloc(1);
+ } while (env_la & 15);
+ talloc(-1);
+ for (i=0; envp[i]; i++)
+ {
+ env_e_la = talloc(strlen(envp[i])+1);
+ dosmemput(envp[i], strlen(envp[i])+1, env_e_la);
+ }
+ arg_header[0] = 0;
+ arg_header[1] = 1;
+ arg_header[2] = 0;
+ dosmemput(arg_header, 3, talloc(3));
+ env_e_la = talloc(strlen(program)+1);
+ dosmemput(program, strlen(program)+1, env_e_la);
+
+ parm.eseg = env_la / 16;
+ parm.argseg = arg_la / 16;
+ parm.argoff = arg_la & 15;
+ dosmemput(&parm, sizeof(parm), parm_la);
+
+ memset(&r, 0, sizeof(r));
+ r.x.ax = 0x4b00;
+ r.x.ds = program_la / 16;
+ r.x.dx = program_la & 15;
+ r.x.es = parm_la / 16;
+ r.x.bx = parm_la & 15;
+ _go32_dpmi_simulate_int(0x21, &r);
+ if (r.x.flags & 1)
+ {
+ errno = r.x.ax;
+ return -1;
+ }
+
+ memset(&r, 0, sizeof(r));
+ r.h.ah = 0x4d;
+ _go32_dpmi_simulate_int(0x21, &r);
+
+ if (r.x.flags & 1)
+ {
+ errno = r.x.ax;
+ return -1;
+ }
+ return r.x.ax;
+}
+
+static int direct_exec(const char *program, const char **argv, const char **envp)
+{
+ int i, arglen;
+ char *args, *argp;
+
+ tbuf = _go32_info_block.linear_address_of_transfer_buffer;
+
+ arglen = 0;
+ for (i=1; argv[i]; i++)
+ arglen += strlen(argv[i]) + 1;
+ args = (char *)malloc(arglen+1);
+ argp = args;
+ for (i=1; argv[i]; i++)
+ {
+ const char *p = argv[i];
+ if (argp - args > 125)
+ break;
+ *argp++ = ' ';
+ while (*p)
+ {
+ if (argp - args > 125)
+ break;
+ *argp++ = *p++;
+ }
+ }
+ *argp = 0;
+
+ return direct_exec_tail(program, args, envp);
+}
+
+typedef struct {
+ char magic[16];
+ int struct_length;
+ char go32[16];
+} StubInfo;
+#define STUB_INFO_MAGIC "StubInfoMagic!!"
+
+static int go32_exec(const char *program, const char **argv, const char **envp)
+{
+ int is_stubbed = 0;
+ int found_si = 0;
+ StubInfo si;
+ unsigned short header[3];
+ int pf, has_dot, i;
+ char *go32, *sip;
+ const char *pp, *pe;
+ char rpath[80], *rp;
+ int stub_offset, argc;
+
+ int si_la, rm_la, rm_seg;
+ short *rm_argv;
+ char cmdline[34];
+
+ pf = open(program, O_RDONLY|O_BINARY);
+
+ read(pf, header, sizeof(header));
+ if (header[0] == 0x010b || header[0] == 0x014c)
+ {
+ is_stubbed = 1;
+ }
+ else if (header[0] == 0x5a4d)
+ {
+ int header_offset = (long)header[2]*512L;
+ if (header[1])
+ header_offset += (long)header[1] - 512L;
+ lseek(pf, header_offset - 4, 0);
+ read(pf, &stub_offset, 4);
+ header[0] = 0;
+ read(pf, header, sizeof(header));
+ if (header[0] == 0x010b)
+ is_stubbed = 1;
+ if (header[0] == 0x014c)
+ is_stubbed = 1;
+ lseek(pf, stub_offset, 0);
+ read(pf, &si, sizeof(si));
+ if (memcmp(STUB_INFO_MAGIC, si.magic, 16) == 0)
+ found_si = 1;
+ }
+ if (!is_stubbed)
+ {
+ close(pf);
+ return direct_exec(program, argv, envp);
+ }
+
+ if (found_si)
+ go32 = si.go32;
+ else
+ go32 = "go32.exe";
+ has_dot = 0;
+ for (i=0; go32[i]; i++)
+ if (go32[i] == '.')
+ has_dot = 1;
+ if (!has_dot)
+ strcpy(go32+i, ".exe");
+ for (i=0; envp[i]; i++)
+ if (strncmp(envp[i], "PATH=", 5) == 0)
+ pp = envp[i]+5;
+ strcpy(rpath, go32);
+ while (access(rpath, 0))
+ {
+ char *ptr;
+ rp = rpath;
+ for (pe=pp; *pe && *pe != ';'; pe++)
+ *rp++ = *pe;
+ pp = pe+1;
+ if (rp > rpath && rp[-1] != '/' && rp[-1] != '\\' && rp[-1] != ':')
+ *rp++ = '/';
+ for (ptr = go32; *ptr; ptr++)
+ *rp++ = *ptr;
+ *rp = 0;
+ if (access(rpath, 0) == 0)
+ break;
+ if (*pe == 0)
+ return direct_exec(program, argv, envp); /* give up and just run it */
+ }
+
+ if (found_si)
+ {
+ lseek(pf, stub_offset, 0);
+ sip = (char *)malloc(si.struct_length);
+ read(pf, sip, si.struct_length);
+ }
+ close(pf);
+
+ argv[0] = program; /* since that's where we really found it */
+
+ tbuf = _go32_info_block.linear_address_of_transfer_buffer;
+
+ if (found_si)
+ {
+ si_la = talloc(si.struct_length);
+ dosmemput(sip, si.struct_length, si_la);
+ free(sip);
+ }
+
+ for (argc=0; argv[argc]; argc++);
+ rm_la = talloc(2*(argc+1));
+ rm_seg = (_go32_info_block.linear_address_of_transfer_buffer >> 4) & 0xffff;
+ rm_argv = (short *)malloc((argc+1) * sizeof(short));
+ for (i=0; i<argc; i++)
+ {
+ int sl = strlen(argv[i]) + 1;
+ int q = talloc(sl);
+ dosmemput(argv[i], sl, q);
+ rm_argv[i] = (q - (rm_seg<<4)) & 0xffff;
+ }
+ rm_argv[i] = 0;
+ dosmemput(rm_argv, 2*(argc+1), rm_la);
+
+ sprintf(cmdline, " !proxy %04x %04x %04x %04x %04x",
+ argc, rm_seg, (rm_la - (rm_seg<<4))&0xffff,
+ rm_seg, (si_la - (rm_seg<<4))&0xffff);
+ if (!found_si)
+ cmdline[22] = 0; /* remove stub information */
+
+ return direct_exec_tail(rpath, cmdline, envp);
+}
+
+static int command_exec(const char *program, const char **argv, const char **envp)
+{
+ const char *comspec=0;
+ char *cmdline;
+ char *newargs[3];
+ int cmdlen;
+ int i;
+
+ cmdlen = strlen(program) + 4;
+ for (i=0; argv[i]; i++)
+ cmdlen += strlen(argv[i]) + 1;
+ cmdline = (char *)malloc(cmdlen);
+
+ strcpy(cmdline, "/c ");
+ for (i=0; program[i]; i++)
+ {
+ if (program[i] == '/')
+ cmdline[i+3] = '\\';
+ else
+ cmdline[i+3] = program[i];
+ }
+ cmdline[i+3] = 0;
+ for (i=1; argv[i]; i++)
+ {
+ strcat(cmdline, " ");
+ strcat(cmdline, argv[i]);
+ }
+ for (i=0; envp[i]; i++)
+ if (strncmp(envp[i], "COMSPEC=", 8) == 0)
+ comspec = envp[i]+8;
+ if (!comspec)
+ for (i=0; environ[i]; i++)
+ if (strncmp(environ[i], "COMSPEC=", 8) == 0)
+ comspec = environ[i]+8;
+ if (!comspec)
+ comspec = "c:/command.com";
+ newargs[0] = comspec;
+ newargs[1] = cmdline;
+ newargs[2] = 0;
+ i = direct_exec(comspec, (const char **)newargs, envp);
+ free(cmdline);
+ return i;
+}
+
+static int script_exec(const char *program, const char **argv, const char **envp)
+{
+ return go32_exec(program, argv, envp);
+}
+
+static struct {
+ char *extension;
+ int (*interp)(const char *, const char **, const char **);
+} interpreters[] = {
+ { ".com", direct_exec },
+ { ".exe", go32_exec },
+ { ".bat", command_exec },
+ { 0, script_exec }
+};
+#define INTERP_NO_EXT 3
+
+int spawnv(int mode, const char *path, const char **argv)
+{
+ return spawnve(mode, path, argv, environ);
+}
+
+int spawnve(int mode, const char *path, const char **argv, const char **envp)
+{
+ /* This is the one that does the work! */
+ int i = -1;
+ char rpath[80], *rp, *rd=0;
+ fflush(stdout); /* just in case */
+ for (rp=rpath; *path; *rp++ = *path++)
+ {
+ if (*path == '.')
+ rd = rp;
+ if (*path == '\\' || *path == '/')
+ rd = 0;
+ }
+ *rp = 0;
+ if (rd)
+ {
+ for (i=0; interpreters[i].extension; i++)
+ if (strcasecmp(rd, interpreters[i].extension) == 0)
+ break;
+ }
+ while (access(rpath, 0))
+ {
+ i++;
+ if (interpreters[i].extension == 0 || rd)
+ {
+ errno = ENOENT;
+ return -1;
+ }
+ strcpy(rp, interpreters[i].extension);
+ }
+ if (i == -1)
+ i = INTERP_NO_EXT;
+ i = interpreters[i].interp(rpath, argv, envp);
+ if (mode == P_OVERLAY)
+ exit(i);
+ return i;
+}
+
+int spawnvp(int mode, const char *path, const char **argv)
+{
+ return spawnvpe(mode, path, argv, environ);
+}
+
+int spawnvpe(int mode, const char *path, const char **argv, const char **envp)
+{
+ const char *pp, *pe, *ptr;
+ char rpath[80], *rp, *rd;
+ int hasdot = 0, i, tried_dot = 0;
+
+ for (ptr=path; *ptr; ptr++)
+ {
+ if (*ptr == '.')
+ hasdot = 1;
+ if (*ptr == '/' || *ptr == '\\' || *ptr == ':')
+ return spawnve(mode, path, argv, envp);
+ }
+
+ pp = 0;
+ for (i=0; envp[i]; i++)
+ if (strncmp(envp[i], "PATH=", 5) == 0)
+ pp = envp[i] + 5;
+ if (pp == 0)
+ return spawnve(mode, path, argv, envp);
+
+ while (1)
+ {
+ if (!tried_dot)
+ {
+ rp = rpath;
+ pe = pp;
+ tried_dot = 1;
+ }
+ else
+ {
+ rp = rpath;
+ for (pe = pp; *pe && *pe != ';'; pe++)
+ *rp++ = *pe;
+ pp = pe+1;
+ if (rp > rpath && rp[-1] != '/' && rp[-1] != '\\' && rp[-1] != ':')
+ *rp++ = '/';
+ }
+ for (ptr = path; *ptr; ptr++)
+ *rp++ = *ptr;
+ *rp = 0;
+
+ if (hasdot)
+ {
+ if (access(rpath, 0) == 0)
+ return spawnve(mode, rpath, argv, envp);
+ }
+ else
+ {
+ for (i=0; interpreters[i].extension; i++)
+ {
+ strcpy(rp, interpreters[i].extension);
+ if (access(rpath, 0) == 0)
+ return spawnve(mode, rpath, argv, envp);
+ }
+ }
+ if (*pe == 0)
+ {
+ errno = ENOENT;
+ return -1;
+ }
+ }
+}
diff --git a/newlib/libc/sys/go32/fchmod.c b/newlib/libc/sys/go32/fchmod.c
new file mode 100644
index 00000000000..a161dfcfa7a
--- /dev/null
+++ b/newlib/libc/sys/go32/fchmod.c
@@ -0,0 +1,18 @@
+/* This is file FCHMOD.C */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+fchmod()
+{
+ write(2, "Warning: fchmod() unimplemented\n", 32);
+}
diff --git a/newlib/libc/sys/go32/findfirs.s b/newlib/libc/sys/go32/findfirs.s
new file mode 100644
index 00000000000..fa3f24768a6
--- /dev/null
+++ b/newlib/libc/sys/go32/findfirs.s
@@ -0,0 +1,18 @@
+ .globl _findfirst
+_findfirst:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl 20(%esp),%edx
+ movb $0x1a,%ah
+ int $0x21
+
+ movl 16(%esp),%edx
+ movl 24(%esp),%ecx
+ movb $0x4e,%ah
+ int $0x21
+
+ popl %edi
+ popl %esi
+ popl %ebx
+ jmp syscall_check
diff --git a/newlib/libc/sys/go32/findnext.s b/newlib/libc/sys/go32/findnext.s
new file mode 100644
index 00000000000..4e6518ffd8c
--- /dev/null
+++ b/newlib/libc/sys/go32/findnext.s
@@ -0,0 +1,16 @@
+ .globl _findnext
+_findnext:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl 16(%esp),%edx
+ movb $0x1a,%ah
+ int $0x21
+
+ movb $0x4f,%ah
+ int $0x21
+
+ popl %edi
+ popl %esi
+ popl %ebx
+ jmp syscall_check
diff --git a/newlib/libc/sys/go32/fixpath.c b/newlib/libc/sys/go32/fixpath.c
new file mode 100644
index 00000000000..e7d61fddd1a
--- /dev/null
+++ b/newlib/libc/sys/go32/fixpath.c
@@ -0,0 +1,155 @@
+/*
+ (c) Copyright 1992 Eric Backus
+
+ This software may be used freely so long as this copyright notice is
+ left intact. There is no warrantee on this software.
+*/
+
+#include "dos.h" /* For intdos() */
+#include <errno.h> /* For errno */
+#include <string.h> /* For strlen() */
+
+int
+_get_default_drive(void)
+{
+ union REGS regs;
+
+ regs.h.ah = 0x19; /* DOS Get Default Drive call */
+ regs.h.al = 0;
+ (void) intdos(&regs, &regs);
+ return regs.h.al;
+}
+
+static char *
+get_current_directory(char *out, int drive_number)
+{
+ union REGS regs;
+
+ regs.h.ah = 0x47;
+ regs.h.dl = drive_number + 1;
+ regs.x.si = (unsigned long) (out + 1);
+ (void) intdos(&regs, &regs);
+ if (regs.x.cflag != 0)
+ {
+ errno = regs.x.ax;
+ return out;
+ }
+ else
+ {
+ /* Root path, don't insert "/", it'll be added later */
+ if (*(out + 1) != '\0')
+ *out = '/';
+ else
+ *out = '\0';
+ return out + strlen(out);
+ }
+}
+
+static int
+is_slash(int c)
+{
+ return c == '/' || c == '\\';
+}
+
+static int
+is_term(int c)
+{
+ return c == '/' || c == '\\' || c == '\0';
+}
+
+/* Takes as input an arbitrary path. Fixes up the path by:
+ 1. Removing consecutive slashes
+ 2. Removing trailing slashes
+ 3. Making the path absolute if it wasn't already
+ 4. Removing "." in the path
+ 5. Removing ".." entries in the path (and the directory above them)
+ 6. Adding a drive specification if one wasn't there
+ 7. Converting all slashes to '/'
+ */
+void
+_fixpath(const char *in, char *out)
+{
+ int drive_number;
+ const char *ip = in;
+ char *op = out;
+
+ /* Add drive specification to output string */
+ if (*(ip + 1) == ':' && ((*ip >= 'a' && *ip <= 'z') ||
+ (*ip >= 'A' && *ip <= 'Z')))
+ {
+ if (*ip >= 'a' && *ip <= 'z')
+ drive_number = *ip - 'a';
+ else
+ drive_number = *ip - 'A';
+ *op++ = *ip++;
+ *op++ = *ip++;
+ }
+ else
+ {
+ drive_number = _get_default_drive();
+ *op++ = drive_number + 'a';
+ *op++ = ':';
+ }
+
+ /* Convert relative path to absolute */
+ if (!is_slash(*ip))
+ op = get_current_directory(op, drive_number);
+
+ /* Step through the input path */
+ while (*ip)
+ {
+ /* Skip input slashes */
+ if (is_slash(*ip))
+ {
+ ip++;
+ continue;
+ }
+
+ /* Skip "." and output nothing */
+ if (*ip == '.' && is_term(*(ip + 1)))
+ {
+ ip++;
+ continue;
+ }
+
+ /* Skip ".." and remove previous output directory */
+ if (*ip == '.' && *(ip + 1) == '.' && is_term(*(ip + 2)))
+ {
+ ip += 2;
+ /* Don't back up over drive spec */
+ if (op > out + 2)
+ /* This requires "/" to follow drive spec */
+ while (!is_slash(*--op));
+ continue;
+ }
+
+ /* Copy path component from in to out */
+ *op++ = '/';
+ while (!is_term(*ip)) *op++ = *ip++;
+ }
+
+ /* If root directory, insert trailing slash */
+ if (op == out + 2) *op++ = '/';
+
+ /* Null terminate the output */
+ *op = '\0';
+}
+
+#ifdef TEST
+#include <stdio.h>
+
+int
+main(int argc, char **argv)
+{
+ char path[90];
+ int i;
+
+ for (i = 1; i < argc; i++)
+ {
+ _fixpath(argv[i], path);
+ (void) printf("'%s' -> '%s'\n", argv[i], path);
+ }
+
+ return 0;
+}
+#endif
diff --git a/newlib/libc/sys/go32/fstat.s b/newlib/libc/sys/go32/fstat.s
new file mode 100644
index 00000000000..5414eaf3845
--- /dev/null
+++ b/newlib/libc/sys/go32/fstat.s
@@ -0,0 +1,19 @@
+# /* This is file FSTAT.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _fstat
+_fstat:
+ movb $3,%al
+ jmp turbo_assist
diff --git a/newlib/libc/sys/go32/fsync.s b/newlib/libc/sys/go32/fsync.s
new file mode 100644
index 00000000000..5f246f05723
--- /dev/null
+++ b/newlib/libc/sys/go32/fsync.s
@@ -0,0 +1,27 @@
+# /* This is file FSYNC.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _fsync
+_fsync:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl 16(%esp),%ebx
+ movb $0x68,%ah
+ int $0x21
+ popl %edi
+ popl %esi
+ popl %ebx
+ ret
diff --git a/newlib/libc/sys/go32/ftruncat.c b/newlib/libc/sys/go32/ftruncat.c
new file mode 100644
index 00000000000..1e2544f257b
--- /dev/null
+++ b/newlib/libc/sys/go32/ftruncat.c
@@ -0,0 +1,25 @@
+/* This is file FTRUNCAT.C */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#include <fcntl.h>
+
+/*
+** Note: this only works right if you close the file right after truncating!
+*/
+
+ftruncate(int fd, unsigned long where)
+{
+ lseek(fd, where, 0);
+ write(fd, 0, 0);
+}
diff --git a/newlib/libc/sys/go32/gerrno.s b/newlib/libc/sys/go32/gerrno.s
new file mode 100644
index 00000000000..ff6b6da9326
--- /dev/null
+++ b/newlib/libc/sys/go32/gerrno.s
@@ -0,0 +1,33 @@
+# /* This is file GERRNO.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+# Modified to use newlib's reent mechanism, 960414, dje.
+# Reentrancy isn't really supported of course, the purpose is to
+# record `errno' in the normal place.
+
+ .text
+ .globl syscall_error
+syscall_error:
+ pushl %eax
+ call ___errno
+ popl %edx
+ mov %edx,(%eax)
+ mov $-1,%eax
+ ret
+
+ .globl syscall_check
+syscall_check:
+ jb syscall_error
+ mov $0,%eax
+ ret
diff --git a/newlib/libc/sys/go32/getcwd.c b/newlib/libc/sys/go32/getcwd.c
new file mode 100644
index 00000000000..1dd4dcbcd85
--- /dev/null
+++ b/newlib/libc/sys/go32/getcwd.c
@@ -0,0 +1,37 @@
+/* This is file GETCWD.C */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#include <errno.h>
+
+char *getcwd(char *buf, int n)
+{
+ char tmp[90];
+ getwd(tmp);
+ if (strlen(tmp)+1 > n)
+ {
+ errno = ERANGE;
+ return 0;
+ }
+ if (buf == 0)
+ {
+ buf = malloc(n);
+ if (buf == 0)
+ {
+ errno = ENOMEM;
+ return 0;
+ }
+ }
+ strcpy(buf, tmp);
+ return buf;
+}
diff --git a/newlib/libc/sys/go32/getdate.c b/newlib/libc/sys/go32/getdate.c
new file mode 100644
index 00000000000..7593b0af03a
--- /dev/null
+++ b/newlib/libc/sys/go32/getdate.c
@@ -0,0 +1,11 @@
+#include "dos.h"
+
+void getdate( struct date *dateblk)
+{
+ union REGS regs;
+ regs.h.ah = 0x2a;
+ intdos( &regs, &regs);
+ dateblk-> da_year = regs.x.cx;
+ dateblk-> da_mon = regs.h.dh;
+ dateblk-> da_day = regs.h.dl;
+}
diff --git a/newlib/libc/sys/go32/getdtabl.c b/newlib/libc/sys/go32/getdtabl.c
new file mode 100644
index 00000000000..b266c23b9dd
--- /dev/null
+++ b/newlib/libc/sys/go32/getdtabl.c
@@ -0,0 +1,18 @@
+/* This is file GETDTABL.C */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+getdtablesize()
+{
+ return 50; /* really depends on FILES= in config.sys */
+}
diff --git a/newlib/libc/sys/go32/getgid.c b/newlib/libc/sys/go32/getgid.c
new file mode 100644
index 00000000000..a0cd7b988f5
--- /dev/null
+++ b/newlib/libc/sys/go32/getgid.c
@@ -0,0 +1,9 @@
+
+#include <sys/types.h>
+
+getgid()
+{
+
+ return 20;
+
+}
diff --git a/newlib/libc/sys/go32/getkey.s b/newlib/libc/sys/go32/getkey.s
new file mode 100644
index 00000000000..876483ea946
--- /dev/null
+++ b/newlib/libc/sys/go32/getkey.s
@@ -0,0 +1,59 @@
+/* This is file GETKEY.S */
+/*
+** Copyright (C) 1993 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+Modified by J. Alan Eldridge, Liberty Brokerage, 77 Water St, NYC 10005
+
+Changed handling of characters starting with 0xE0:
+ Now calls interrupt 16, function 10
+ if leading byte was 0x00, ah = 0x01
+ if leading byte was 0xE0, ah = 0x02
+
+ The main function is now called getxkey()...
+ getkey is provided to maintain compatibility with
+ already written software
+*/
+
+ .globl _getxkey
+_getxkey:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movb $0x10,%ah
+ int $0x16
+ mov $1,%bl
+ cmpb $0,%al
+ je L0
+ cmpb $0xE0,%al
+ jne L1
+ inc %bl
+L0:
+ movb %ah,%al
+ movb %bl,%ah
+ jmp L2
+L1:
+ movb $0,%ah
+L2:
+ andl $0xffff,%eax
+ popl %edi
+ popl %esi
+ popl %ebx
+ ret
+
+ .globl _getkey
+_getkey:
+ call _getxkey
+ testb $0x02,%ah
+ jz L3
+ movb $0x01,%ah
+L3:
+ ret
diff --git a/newlib/libc/sys/go32/getpages.c b/newlib/libc/sys/go32/getpages.c
new file mode 100644
index 00000000000..8218b154e75
--- /dev/null
+++ b/newlib/libc/sys/go32/getpages.c
@@ -0,0 +1,18 @@
+/* This is file GETPAGES.C */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+getpagesize()
+{
+ return 4096;
+}
diff --git a/newlib/libc/sys/go32/getpid.c b/newlib/libc/sys/go32/getpid.c
new file mode 100644
index 00000000000..60f6e6d665c
--- /dev/null
+++ b/newlib/libc/sys/go32/getpid.c
@@ -0,0 +1,18 @@
+/* This is file GETPID.C */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+getpid()
+{
+ return 42; /* Why not? */
+}
diff --git a/newlib/libc/sys/go32/getrusag.c b/newlib/libc/sys/go32/getrusag.c
new file mode 100644
index 00000000000..15722c5dd27
--- /dev/null
+++ b/newlib/libc/sys/go32/getrusag.c
@@ -0,0 +1,35 @@
+/* This is file GETRUSAG.C */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#include <sys/time.h>
+#include <sys/resource.h>
+
+static struct timeval old_time = {0,0};
+
+int getrusage(int who, struct rusage *rusage)
+{
+ struct timeval now;
+ bzero(rusage, sizeof(struct rusage));
+ if (old_time.tv_sec == 0)
+ gettimeofday(&old_time, 0);
+ gettimeofday(&now, 0);
+ rusage->ru_utime.tv_usec = now.tv_usec - old_time.tv_usec;
+ rusage->ru_utime.tv_sec = now.tv_sec - old_time.tv_sec;
+ if (rusage->ru_utime.tv_usec < 0)
+ {
+ rusage->ru_utime.tv_usec += 1000000;
+ rusage->ru_utime.tv_sec -= 1;
+ }
+ return 0;
+}
diff --git a/newlib/libc/sys/go32/gettime.c b/newlib/libc/sys/go32/gettime.c
new file mode 100644
index 00000000000..ba81161194e
--- /dev/null
+++ b/newlib/libc/sys/go32/gettime.c
@@ -0,0 +1,12 @@
+#include "dos.h"
+
+void gettime( struct time *tp)
+{
+ union REGS regs;
+ regs.h.ah = 0x2c;
+ intdos( &regs, &regs);
+ tp->ti_hour = regs.h.ch;
+ tp->ti_min = regs.h.cl;
+ tp->ti_sec = regs.h.dh;
+ tp->ti_hund = regs.h.dl;
+}
diff --git a/newlib/libc/sys/go32/gettimeo.c b/newlib/libc/sys/go32/gettimeo.c
new file mode 100644
index 00000000000..7f4f7c874d6
--- /dev/null
+++ b/newlib/libc/sys/go32/gettimeo.c
@@ -0,0 +1,61 @@
+/*
+ (c) Copyright 1992 Eric Backus
+
+ This software may be used freely so long as this copyright notice is
+ left intact. There is no warrantee on this software.
+*/
+
+#include <time.h>
+#include <sys/time.h>
+#include "dos.h"
+
+static int daylight, gmtoffset;
+
+int
+gettimeofday (struct timeval *tp, struct timezone *tzp)
+{
+
+ if (tp)
+ {
+ struct time t;
+ struct date d;
+ struct tm tmrec;
+
+ gettime (&t);
+ getdate (&d);
+ tmrec.tm_year = d.da_year - 1900;
+ tmrec.tm_mon = d.da_mon - 1;
+ tmrec.tm_mday = d.da_day;
+ tmrec.tm_hour = t.ti_hour;
+ tmrec.tm_min = t.ti_min;
+ tmrec.tm_sec = t.ti_sec;
+/* tmrec.tm_gmtoff = gmtoffset;*/
+ tmrec.tm_isdst = daylight;
+ tp->tv_sec = mktime (&tmrec);
+ tp->tv_usec = t.ti_hund * (1000000 / 100);
+ }
+ if (tzp)
+ {
+ tzp->tz_minuteswest = gmtoffset;
+ tzp->tz_dsttime = daylight;
+ }
+
+ return 0;
+}
+
+void
+__gettimeofday_init ()
+{
+ time_t ltm, gtm;
+ struct tm *lstm;
+
+ daylight = 0;
+ gmtoffset = 0;
+ ltm = gtm = time (NULL);
+ ltm = mktime (lstm = localtime (&ltm));
+ gtm = mktime (gmtime (&gtm));
+ daylight = lstm->tm_isdst;
+ gmtoffset = (int)(gtm - ltm) / 60;
+
+}
+
diff --git a/newlib/libc/sys/go32/gettimeo.s b/newlib/libc/sys/go32/gettimeo.s
new file mode 100644
index 00000000000..7e85adf1f31
--- /dev/null
+++ b/newlib/libc/sys/go32/gettimeo.s
@@ -0,0 +1,19 @@
+# /* This is file GETTIMEO.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _gettimeofday
+_gettimeofday:
+ movb $4,%al
+ jmp turbo_assist
diff --git a/newlib/libc/sys/go32/getuid.c b/newlib/libc/sys/go32/getuid.c
new file mode 100644
index 00000000000..4ce9a46c1b6
--- /dev/null
+++ b/newlib/libc/sys/go32/getuid.c
@@ -0,0 +1,9 @@
+
+#include <sys/types.h>
+
+getuid()
+{
+
+ return 10;
+
+}
diff --git a/newlib/libc/sys/go32/getwd.s b/newlib/libc/sys/go32/getwd.s
new file mode 100644
index 00000000000..15d856ef804
--- /dev/null
+++ b/newlib/libc/sys/go32/getwd.s
@@ -0,0 +1,31 @@
+# /* This is file GETWD.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _getwd
+_getwd:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl 16(%esp),%esi
+ movb $47,(%esi)
+ incl %esi
+ movb $0,%dl
+ movb $0x47,%ah
+ int $0x21
+ movl 16(%esp),%eax
+ popl %edi
+ popl %esi
+ popl %ebx
+ ret
diff --git a/newlib/libc/sys/go32/go32.h b/newlib/libc/sys/go32/go32.h
new file mode 100644
index 00000000000..32afc0ebe35
--- /dev/null
+++ b/newlib/libc/sys/go32/go32.h
@@ -0,0 +1,70 @@
+/* This is file go32.h */
+/*
+** Copyright (C) 1993 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#ifndef _GO32_H_
+#define _GO32_H_
+
+#include <sys/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* This must match go32/proginfo.h */
+
+typedef struct {
+ u_long size_of_this_structure_in_bytes;
+ u_long linear_address_of_primary_screen;
+ u_long linear_address_of_secondary_screen;
+ u_long linear_address_of_transfer_buffer;
+ u_long size_of_transfer_buffer; /* >= 4k */
+ u_long pid;
+ u_char master_interrupt_controller_base;
+ u_char slave_interrupt_controller_base;
+ u_short selector_for_linear_memory;
+ u_long linear_address_of_stub_info_structure;
+ u_long linear_address_of_original_psp;
+ u_short run_mode;
+ u_short run_mode_info;
+} Go32_Info_Block;
+
+extern Go32_Info_Block _go32_info_block;
+
+#define _GO32_RUN_MODE_UNDEF 0
+#define _GO32_RUN_MODE_RAW 1
+#define _GO32_RUN_MODE_XMS 2
+#define _GO32_RUN_MODE_VCPI 3
+#define _GO32_RUN_MODE_DPMI 4
+
+void dosmemget(int offset, int length, void *buffer);
+void dosmemput(const void *buffer, int length, int offset);
+void movedata(unsigned source_selector, unsigned source_offset,
+ unsigned dest_selector, unsigned dest_offset,
+ size_t length);
+
+/* returns number of times hit since last call. (zero first time) */
+u_long _go32_was_ctrl_break_hit();
+void _go32_want_ctrl_break(int yes); /* auto-yes if call above function */
+
+u_short _go32_my_cs();
+u_short _go32_my_ds();
+u_short _go32_my_ss();
+u_short _go32_conventional_mem_selector();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/newlib/libc/sys/go32/go32func.c b/newlib/libc/sys/go32/go32func.c
new file mode 100644
index 00000000000..ec3853ba1ca
--- /dev/null
+++ b/newlib/libc/sys/go32/go32func.c
@@ -0,0 +1,69 @@
+#include <sys/types.h>
+#include "go32.h"
+#include "dpmi.h"
+#include "dos.h"
+
+u_short _go32_my_cs()
+{
+ asm("movw %cs,%ax");
+}
+
+u_short _go32_my_ds()
+{
+ asm("movw %ds,%ax");
+}
+
+u_short _go32_my_ss()
+{
+ asm("movw %ss,%ax");
+}
+
+u_short _go32_conventional_mem_selector()
+{
+ return _go32_info_block.selector_for_linear_memory;
+}
+
+static _go32_dpmi_registers regs;
+static volatile u_long ctrl_break_count = 0;
+static int ctrl_break_hooked = 0;
+static _go32_dpmi_seginfo old_vector;
+static _go32_dpmi_seginfo new_vector;
+
+static ctrl_break_isr(_go32_dpmi_registers *regs)
+{
+ ctrl_break_count ++;
+}
+
+u_long _go32_was_ctrl_break_hit()
+{
+ u_long cnt;
+ _go32_want_ctrl_break(1);
+ cnt = ctrl_break_count;
+ ctrl_break_count = 0;
+ return cnt;
+}
+
+void _go32_want_ctrl_break(int yes)
+{
+ if (yes)
+ {
+ if (ctrl_break_hooked)
+ return;
+ _go32_dpmi_get_real_mode_interrupt_vector(0x1b, &old_vector);
+
+ new_vector.pm_offset = (int)ctrl_break_isr;
+ _go32_dpmi_allocate_real_mode_callback_iret(&new_vector, &regs);
+ _go32_dpmi_set_real_mode_interrupt_vector(0x1b, &new_vector);
+ ctrl_break_count = 0;
+ ctrl_break_hooked = 1;
+ }
+ else
+ {
+ if (!ctrl_break_hooked)
+ return;
+ _go32_dpmi_set_real_mode_interrupt_vector(0x1b, &old_vector);
+ _go32_dpmi_free_real_mode_callback(&new_vector);
+ ctrl_break_count = 0;
+ ctrl_break_hooked = 0;
+ }
+}
diff --git a/newlib/libc/sys/go32/infoblk.c b/newlib/libc/sys/go32/infoblk.c
new file mode 100644
index 00000000000..0a54b6b1869
--- /dev/null
+++ b/newlib/libc/sys/go32/infoblk.c
@@ -0,0 +1,4 @@
+#include "go32.h"
+
+Go32_Info_Block _go32_info_block = { sizeof(Go32_Info_Block) };
+
diff --git a/newlib/libc/sys/go32/inportb.s b/newlib/libc/sys/go32/inportb.s
new file mode 100644
index 00000000000..d2425fc5563
--- /dev/null
+++ b/newlib/libc/sys/go32/inportb.s
@@ -0,0 +1,21 @@
+#/* This is file INPORTB.S */
+#/*
+#** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+#**
+#** This file is distributed under the terms listed in the document
+#** "copying.dj", available from DJ Delorie at the address above.
+#** A copy of "copying.dj" should accompany this file; if not, a copy
+#** should be available from where this file was obtained. This file
+#** may not be distributed without a verbatim copy of "copying.dj".
+#**
+#** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+#** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#*/
+
+ .globl _inportb
+_inportb:
+ movl 4(%esp),%edx
+# inb %dx,%al
+ .byte 0xec
+ movzb %al,%eax
+ ret
diff --git a/newlib/libc/sys/go32/inportl.s b/newlib/libc/sys/go32/inportl.s
new file mode 100644
index 00000000000..477dec19dc4
--- /dev/null
+++ b/newlib/libc/sys/go32/inportl.s
@@ -0,0 +1,19 @@
+#/* This is file INPORTL.S */
+#/*
+#** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+#**
+#** This file is distributed under the terms listed in the document
+#** "copying.dj", available from DJ Delorie at the address above.
+#** A copy of "copying.dj" should accompany this file; if not, a copy
+#** should be available from where this file was obtained. This file
+#** may not be distributed without a verbatim copy of "copying.dj".
+#**
+#** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+#** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#*/
+
+ .globl _inportl
+_inportl:
+ movl 4(%esp),%edx
+ inl %dx,%eax
+ ret
diff --git a/newlib/libc/sys/go32/inportsb.s b/newlib/libc/sys/go32/inportsb.s
new file mode 100644
index 00000000000..db7dc37f8eb
--- /dev/null
+++ b/newlib/libc/sys/go32/inportsb.s
@@ -0,0 +1,25 @@
+#/* This is file INPORTSB.S */
+#/*
+#** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+#**
+#** This file is distributed under the terms listed in the document
+#** "copying.dj", available from DJ Delorie at the address above.
+#** A copy of "copying.dj" should accompany this file; if not, a copy
+#** should be available from where this file was obtained. This file
+#** may not be distributed without a verbatim copy of "copying.dj".
+#**
+#** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+#** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#*/
+
+ .globl _inportsb
+_inportsb:
+ pushl %edi
+ movl 8(%esp),%edx
+ movl 12(%esp),%edi
+ movl 16(%esp),%ecx
+ rep
+ insb
+ popl %edi
+ ret
+
diff --git a/newlib/libc/sys/go32/inportsl.s b/newlib/libc/sys/go32/inportsl.s
new file mode 100644
index 00000000000..d4a8d55079f
--- /dev/null
+++ b/newlib/libc/sys/go32/inportsl.s
@@ -0,0 +1,24 @@
+#/* This is file INPORTSL.S */
+#/*
+#** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+#**
+#** This file is distributed under the terms listed in the document
+#** "copying.dj", available from DJ Delorie at the address above.
+#** A copy of "copying.dj" should accompany this file; if not, a copy
+#** should be available from where this file was obtained. This file
+#** may not be distributed without a verbatim copy of "copying.dj".
+#**
+#** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+#** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#*/
+
+ .globl _inportsl
+_inportsl:
+ pushl %edi
+ movl 8(%esp),%edx
+ movl 12(%esp),%edi
+ movl 16(%esp),%ecx
+ rep
+ insl
+ popl %edi
+ ret
diff --git a/newlib/libc/sys/go32/inportsw.s b/newlib/libc/sys/go32/inportsw.s
new file mode 100644
index 00000000000..31880d717f6
--- /dev/null
+++ b/newlib/libc/sys/go32/inportsw.s
@@ -0,0 +1,24 @@
+#/* This is file INPORTSW.S */
+#/*
+#** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+#**
+#** This file is distributed under the terms listed in the document
+#** "copying.dj", available from DJ Delorie at the address above.
+#** A copy of "copying.dj" should accompany this file; if not, a copy
+#** should be available from where this file was obtained. This file
+#** may not be distributed without a verbatim copy of "copying.dj".
+#**
+#** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+#** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#*/
+
+ .globl _inportsw
+_inportsw:
+ pushl %edi
+ movl 8(%esp),%edx
+ movl 12(%esp),%edi
+ movl 16(%esp),%ecx
+ rep
+ insw
+ popl %edi
+ ret
diff --git a/newlib/libc/sys/go32/inportw.s b/newlib/libc/sys/go32/inportw.s
new file mode 100644
index 00000000000..fdb58aa261d
--- /dev/null
+++ b/newlib/libc/sys/go32/inportw.s
@@ -0,0 +1,21 @@
+#/* This is file INPORTW.S */
+#/*
+#** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+#**
+#** This file is distributed under the terms listed in the document
+#** "copying.dj", available from DJ Delorie at the address above.
+#** A copy of "copying.dj" should accompany this file; if not, a copy
+#** should be available from where this file was obtained. This file
+#** may not be distributed without a verbatim copy of "copying.dj".
+#**
+#** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+#** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#*/
+
+ .globl _inportw
+_inportw:
+ movl 4(%esp),%edx
+# inw (%dx),%ax
+ .byte 0x66, 0xed
+ movzwl %ax,%eax
+ ret
diff --git a/newlib/libc/sys/go32/int86x.s b/newlib/libc/sys/go32/int86x.s
new file mode 100644
index 00000000000..7b49bcd121f
--- /dev/null
+++ b/newlib/libc/sys/go32/int86x.s
@@ -0,0 +1,103 @@
+ .data
+ds:
+ .word 0
+es:
+ .word 0
+fs:
+ .word 0
+gs:
+ .word 0
+
+ .globl int86
+int86:
+ .byte 0x2e
+ push ds
+ pop %ds
+ .byte 0x2e
+ push es
+ pop %es
+ .byte 0x2e
+ push fs
+ pop %fs
+ .byte 0x2e
+ push gs
+ pop %gs
+
+ .byte 0xcd
+int86_vec:
+ .byte 0x03
+ ret
+
+ .text
+ .globl _int86x
+_int86x:
+ movl 16(%esp), %eax
+
+ movw 2(%eax), %cx
+ movw %cx, ds
+ movw 4(%eax), %cx
+ movw %cx, es
+ movw 6(%eax), %cx
+ movw %cx, fs
+ movw 8(%eax), %cx
+ movw %cx, gs
+
+ jmp int86_common
+
+ .globl _int86
+_int86:
+ movw %ds, %ax
+ movw %ax, ds
+ movw %ax, es
+ movw %ax, fs
+ movw %ax, gs
+ jmp int86_common
+
+int86_common:
+ pushl %ebp
+ movl %esp,%ebp
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ pushf
+
+ movl 8(%ebp),%eax
+ movb %al,int86_vec
+
+ movl 12(%ebp),%eax
+ movl 4(%eax),%ebx
+ movl 8(%eax),%ecx
+ movl 12(%eax),%edx
+ movl 16(%eax),%esi
+ movl 20(%eax),%edi
+ movl (%eax),%eax
+
+ push %ds
+ push %es
+ call int86
+ pop %es
+ pop %ds
+
+ pushf
+ pushl %eax
+ movl %esp,%ebp
+ addl $24,%ebp
+ movl 16(%ebp),%eax
+ popl (%eax)
+ movl %ebx,4(%eax)
+ movl %ecx,8(%eax)
+ movl %edx,12(%eax)
+ movl %esi,16(%eax)
+ movl %edi,20(%eax)
+ popl %ebx /* flags */
+ movl %ebx,28(%eax)
+ andl $1,%ebx
+ movl %ebx,24(%eax)
+ movl (%eax),%eax
+
+ popf
+ popl %edi
+ popl %esi
+ popl %ebx
+ popl %ebp
+ ret
diff --git a/newlib/libc/sys/go32/intdos.c b/newlib/libc/sys/go32/intdos.c
new file mode 100644
index 00000000000..a13f38ec89d
--- /dev/null
+++ b/newlib/libc/sys/go32/intdos.c
@@ -0,0 +1,7 @@
+#include <sys/dos.h>
+
+int
+intdos(union REGS *in, union REGS *out)
+{
+ return int86(0x21, in, out);
+}
diff --git a/newlib/libc/sys/go32/intdosx.c b/newlib/libc/sys/go32/intdosx.c
new file mode 100644
index 00000000000..ec3e9fbc24b
--- /dev/null
+++ b/newlib/libc/sys/go32/intdosx.c
@@ -0,0 +1,6 @@
+#include <sys/dos.h>
+
+intdosx(union REGS *in, union REGS *out, struct SREGS *seg)
+{
+ return int86x(0x21, in, out, seg);
+}
diff --git a/newlib/libc/sys/go32/isatty.s b/newlib/libc/sys/go32/isatty.s
new file mode 100644
index 00000000000..9086b073cba
--- /dev/null
+++ b/newlib/libc/sys/go32/isatty.s
@@ -0,0 +1,33 @@
+# /* This is file ISATTY.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _isatty
+_isatty:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl 16(%esp),%ebx
+ movw $0x4400,%ax
+ int $0x21
+ popl %edi
+ popl %esi
+ popl %ebx
+ movl $0,%eax
+ jb tf
+ testl $0x80,%edx
+ jz tf
+ movl $1,%eax
+tf:
+ ret
diff --git a/newlib/libc/sys/go32/kbhit.s b/newlib/libc/sys/go32/kbhit.s
new file mode 100644
index 00000000000..0f34e1b76ec
--- /dev/null
+++ b/newlib/libc/sys/go32/kbhit.s
@@ -0,0 +1,51 @@
+/* This is file KBHIT.S */
+/*
+** Copyright (C) 1993 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+ .globl _kbhit
+_kbhit:
+ pushl %ebp
+ movl %esp,%ebp
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+
+try_again:
+ movl $0x41a,%eax
+ call dosmemsetup
+ movzwl %gs:(%eax),%ebx
+ movzwl %gs:2(%eax),%ecx
+ cmp %ebx,%ecx
+ je key_not_hit
+
+ movb $0x11,%ah
+ int $0x16
+ jz key_not_hit
+ cmp $0,%eax
+ jne key_hit
+ movb $0x10,%ah
+ int $0x16
+ jmp try_again
+
+key_not_hit:
+ movl $0,%eax
+ jmp L1
+
+key_hit:
+ movl $1,%eax
+L1:
+ popl %edi
+ popl %esi
+ popl %ebx
+ leave
+ ret
diff --git a/newlib/libc/sys/go32/kill.c b/newlib/libc/sys/go32/kill.c
new file mode 100644
index 00000000000..3335f1a5678
--- /dev/null
+++ b/newlib/libc/sys/go32/kill.c
@@ -0,0 +1,6 @@
+kill()
+{
+
+
+}
+
diff --git a/newlib/libc/sys/go32/link.s b/newlib/libc/sys/go32/link.s
new file mode 100644
index 00000000000..f1cc133a01d
--- /dev/null
+++ b/newlib/libc/sys/go32/link.s
@@ -0,0 +1,28 @@
+# /* This is file LINK.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _link
+_link:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl 16(%esp),%edx
+ movl 20(%esp),%edi
+ movb $0x56,%ah
+ int $0x21
+ pop %edi
+ pop %esi
+ pop %ebx
+ jmp syscall_check
diff --git a/newlib/libc/sys/go32/longjmp.S b/newlib/libc/sys/go32/longjmp.S
new file mode 100644
index 00000000000..d29eebbeef9
--- /dev/null
+++ b/newlib/libc/sys/go32/longjmp.S
@@ -0,0 +1,65 @@
+/* This is file LONGJMP.S */
+/*
+** Copyright (C) 1993 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+/*
+** jmp_buf:
+** eax ebx ecx edx esi edi ebp esp eip es fs gs ss
+** 0 4 8 12 16 20 24 28 32 36 38 40 42
+*/
+
+ .globl _longjmp /* jmp_buf, int */
+_longjmp:
+ pushl %ebp
+ movl %esp,%ebp
+
+ movl 8(%ebp),%edi /* get jmp_buf */
+ movl 12(%ebp),%eax /* store retval in j->eax */
+ testl %eax,%eax
+ jne 0f
+ incl %eax
+0:
+ movl %eax,0(%edi)
+
+ movl 24(%edi),%ebp
+
+ pushfl /* get flags so will only re-enable */
+ popl %ebx /* interrupts if they were previously */
+ /* enabled */
+
+ cli
+ movw 42(%edi),%ax
+ movw %ax,%ss
+ movl 28(%edi),%esp
+
+ pushl 32(%edi) /* for a ret! */
+
+ pushl %ebx /* save flags that contain previous */
+ /* interrupt state */
+
+ movw 36(%edi),%ax
+ movw %ax,%es
+ movw 38(%edi),%ax
+ movw %ax,%fs
+ movw 40(%edi),%ax
+ movw %ax,%gs
+ movl 0(%edi),%eax
+ movl 4(%edi),%ebx
+ movl 8(%edi),%ecx
+ movl 12(%edi),%edx
+ movl 16(%edi),%esi
+ movl 20(%edi),%edi
+
+ popfl /* restore previous interrupt state */
+
+ ret /* actually jump to new eip */
diff --git a/newlib/libc/sys/go32/lseek.s b/newlib/libc/sys/go32/lseek.s
new file mode 100644
index 00000000000..34609d088e9
--- /dev/null
+++ b/newlib/libc/sys/go32/lseek.s
@@ -0,0 +1,36 @@
+# /* This is file LSEEK.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _lseek
+_lseek:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl 16(%esp),%ebx
+ movl 20(%esp),%ecx
+ shrl $16,%ecx
+ movl 20(%esp),%edx
+ andl $0xffff,%edx
+ movb 24(%esp),%al
+ movb $0x42,%ah
+ int $0x21
+ popl %edi
+ popl %esi
+ popl %ebx
+ jb syscall_error
+ shll $16,%edx
+ andl $0xffff,%eax
+ orl %edx,%eax
+ ret
diff --git a/newlib/libc/sys/go32/lstat.s b/newlib/libc/sys/go32/lstat.s
new file mode 100644
index 00000000000..2585b354f21
--- /dev/null
+++ b/newlib/libc/sys/go32/lstat.s
@@ -0,0 +1,19 @@
+# /* This is file LSTAT.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _lstat
+_lstat:
+ movb $6,%al
+ jmp turbo_assist
diff --git a/newlib/libc/sys/go32/mkdir.s b/newlib/libc/sys/go32/mkdir.s
new file mode 100644
index 00000000000..e8fe194471b
--- /dev/null
+++ b/newlib/libc/sys/go32/mkdir.s
@@ -0,0 +1,27 @@
+# /* This is file MKDIR.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _mkdir
+_mkdir:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl 16(%esp),%edx
+ movb $0x39,%ah
+ int $0x21
+ popl %edi
+ popl %esi
+ popl %ebx
+ jmp syscall_check
diff --git a/newlib/libc/sys/go32/open.s b/newlib/libc/sys/go32/open.s
new file mode 100644
index 00000000000..5fd8a04b0fa
--- /dev/null
+++ b/newlib/libc/sys/go32/open.s
@@ -0,0 +1,31 @@
+# /* This is file OPEN.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .data
+ .globl __fmode
+__fmode:
+ .long 0x4000
+
+ .text
+ .globl _open
+_open:
+ testl $0xc000,8(%esp)
+ jnz L0
+ andl $0xc000,__fmode
+ movl __fmode,%eax
+ orl %eax,8(%esp)
+L0:
+ movb $2,%al
+ jmp turbo_assist
+
diff --git a/newlib/libc/sys/go32/outportb.s b/newlib/libc/sys/go32/outportb.s
new file mode 100644
index 00000000000..10c4342f82f
--- /dev/null
+++ b/newlib/libc/sys/go32/outportb.s
@@ -0,0 +1,21 @@
+#/* This is file OUTPORTB.S */
+#/*
+#** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+#**
+#** This file is distributed under the terms listed in the document
+#** "copying.dj", available from DJ Delorie at the address above.
+#** A copy of "copying.dj" should accompany this file; if not, a copy
+#** should be available from where this file was obtained. This file
+#** may not be distributed without a verbatim copy of "copying.dj".
+#**
+#** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+#** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#*/
+
+ .globl _outportb
+_outportb:
+ movl 4(%esp),%edx
+ movl 8(%esp),%eax
+# outb %al,%dx
+ .byte 0xee
+ ret
diff --git a/newlib/libc/sys/go32/outportl.s b/newlib/libc/sys/go32/outportl.s
new file mode 100644
index 00000000000..61204b4bc8b
--- /dev/null
+++ b/newlib/libc/sys/go32/outportl.s
@@ -0,0 +1,20 @@
+#/* This is file OUTPORTL.S */
+#/*
+#** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+#**
+#** This file is distributed under the terms listed in the document
+#** "copying.dj", available from DJ Delorie at the address above.
+#** A copy of "copying.dj" should accompany this file; if not, a copy
+#** should be available from where this file was obtained. This file
+#** may not be distributed without a verbatim copy of "copying.dj".
+#**
+#** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+#** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#*/
+
+ .globl _outportl
+_outportl:
+ movl 4(%esp),%edx
+ movl 8(%esp),%eax
+ outl %eax,%dx
+ ret
diff --git a/newlib/libc/sys/go32/outportw.s b/newlib/libc/sys/go32/outportw.s
new file mode 100644
index 00000000000..cde4648437f
--- /dev/null
+++ b/newlib/libc/sys/go32/outportw.s
@@ -0,0 +1,22 @@
+#/* This is file OUTPORTW.S */
+#/*
+#** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+#**
+#** This file is distributed under the terms listed in the document
+#** "copying.dj", available from DJ Delorie at the address above.
+#** A copy of "copying.dj" should accompany this file; if not, a copy
+#** should be available from where this file was obtained. This file
+#** may not be distributed without a verbatim copy of "copying.dj".
+#**
+#** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+#** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#*/
+
+ .globl _outportw
+_outportw:
+ movl 4(%esp),%edx
+ movl 8(%esp),%eax
+# outw %ax,%dx
+ .byte 0x66, 0xef
+ ret
+
diff --git a/newlib/libc/sys/go32/outprtsb.s b/newlib/libc/sys/go32/outprtsb.s
new file mode 100644
index 00000000000..f9ed4a1d56c
--- /dev/null
+++ b/newlib/libc/sys/go32/outprtsb.s
@@ -0,0 +1,25 @@
+
+#/* This is file OUTPRTSB.S */
+#/*
+#** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+#**
+#** This file is distributed under the terms listed in the document
+#** "copying.dj", available from DJ Delorie at the address above.
+#** A copy of "copying.dj" should accompany this file; if not, a copy
+#** should be available from where this file was obtained. This file
+#** may not be distributed without a verbatim copy of "copying.dj".
+#**
+#** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+#** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#*/
+
+ .globl _outportsb
+_outportsb:
+ pushl %esi
+ movl 8(%esp),%edx
+ movl 12(%esp),%esi
+ movl 16(%esp),%ecx
+ rep
+ outsb
+ popl %esi
+ ret
diff --git a/newlib/libc/sys/go32/outprtsl.s b/newlib/libc/sys/go32/outprtsl.s
new file mode 100644
index 00000000000..2f3e1c7ccbb
--- /dev/null
+++ b/newlib/libc/sys/go32/outprtsl.s
@@ -0,0 +1,25 @@
+#/* This is file OUTPRTSL.S */
+#/*
+#** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+#**
+#** This file is distributed under the terms listed in the document
+#** "copying.dj", available from DJ Delorie at the address above.
+#** A copy of "copying.dj" should accompany this file; if not, a copy
+#** should be available from where this file was obtained. This file
+#** may not be distributed without a verbatim copy of "copying.dj".
+#**
+#** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+#** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#*/
+
+ .globl _outportsl
+_outportsl:
+ pushl %esi
+ movl 8(%esp),%edx
+ movl 12(%esp),%esi
+ movl 16(%esp),%ecx
+ rep
+ outsl
+ popl %esi
+ ret
+
diff --git a/newlib/libc/sys/go32/outprtsw.s b/newlib/libc/sys/go32/outprtsw.s
new file mode 100644
index 00000000000..6045f196fcd
--- /dev/null
+++ b/newlib/libc/sys/go32/outprtsw.s
@@ -0,0 +1,25 @@
+#/* This is file OUTPRTSW.S */
+#/*
+#** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+#**
+#** This file is distributed under the terms listed in the document
+#** "copying.dj", available from DJ Delorie at the address above.
+#** A copy of "copying.dj" should accompany this file; if not, a copy
+#** should be available from where this file was obtained. This file
+#** may not be distributed without a verbatim copy of "copying.dj".
+#**
+#** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+#** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#*/
+#
+ .globl _outportsw
+_outportsw:
+ pushl %esi
+ movl 8(%esp),%edx
+ movl 12(%esp),%esi
+ movl 16(%esp),%ecx
+ rep
+ outsw
+ popl %esi
+ ret
+
diff --git a/newlib/libc/sys/go32/pc.h b/newlib/libc/sys/go32/pc.h
new file mode 100644
index 00000000000..8851d749e41
--- /dev/null
+++ b/newlib/libc/sys/go32/pc.h
@@ -0,0 +1,71 @@
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+**
+** Modified by J. Alan Eldridge, Liberty Brokerage, 77 Water St, NYC 10005
+**
+** added getxkey(), which can read extended keystrokes that start with
+** 0xE0, as well as those which start with 0x00
+**
+** added global char ScreenAttrib, the attribute used by ScreenClear():
+** it defaults to 0x07 so as not to break existing code.
+**
+** added ScreenMode(), to return the current video mode
+*/
+
+#ifndef _PC_H_
+#define _PC_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+unsigned char inportb(unsigned short port);
+unsigned short inportw(unsigned short port);
+unsigned long inportl(unsigned short port);
+unsigned char inportsb(unsigned short port, unsigned char *buf, unsigned len);
+unsigned short inportsw(unsigned short port, unsigned short *buf, unsigned len);
+unsigned long inportsl(unsigned short port, unsigned long *buf, unsigned len);
+void outportb(unsigned short port, unsigned char data);
+void outportw(unsigned short port, unsigned short data);
+void outportl(unsigned short port, unsigned long data);
+void outportsb(unsigned short port, unsigned char *buf, unsigned len);
+void outportsw(unsigned short port, unsigned short *buf, unsigned len);
+void outportsl(unsigned short port, unsigned long *buf, unsigned len);
+
+int kbhit(void);
+int getkey(void); /* ALT's have 0x100 set */
+int getxkey(void); /* ALT's have 0x100 set, 0xe0 sets 0x200 */
+
+void sound(int frequency);
+#define nosound() sound(0)
+
+extern unsigned char ScreenAttrib;
+extern short *ScreenPrimary;
+extern short *ScreenSecondary;
+
+/* For the primary screen: */
+int ScreenMode(void);
+int ScreenRows(void);
+int ScreenCols(void);
+void ScreenPutChar(int ch, int attr, int x, int y);
+void ScreenSetCursor(int row, int col);
+void ScreenGetCursor(int *row, int *col);
+void ScreenClear(void);
+void ScreenUpdate(void *virtual_screen);
+void ScreenUpdateLine(void *virtual_screen_line, int row);
+void ScreenRetrieve(void *virtual_screen);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/newlib/libc/sys/go32/read.s b/newlib/libc/sys/go32/read.s
new file mode 100644
index 00000000000..c989241ee44
--- /dev/null
+++ b/newlib/libc/sys/go32/read.s
@@ -0,0 +1,30 @@
+# /* This is file READ.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _read
+_read:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl 16(%esp),%ebx
+ movl 20(%esp),%edx
+ movl 24(%esp),%ecx
+ movb $0x3f,%ah
+ int $0x21
+ popl %edi
+ popl %esi
+ popl %ebx
+ jb syscall_error
+ ret
diff --git a/newlib/libc/sys/go32/readv.c b/newlib/libc/sys/go32/readv.c
new file mode 100644
index 00000000000..c50ef32fc10
--- /dev/null
+++ b/newlib/libc/sys/go32/readv.c
@@ -0,0 +1,31 @@
+/* This is file READV.C */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#include <sys/types.h>
+#include <sys/uio.h>
+
+readv(int handle, struct iovec *iov, int count)
+{
+ unsigned long r, t=0;
+ while (count)
+ {
+ r = read(handle, iov->iov_base, iov->iov_len);
+ if (r < 0)
+ return r;
+ t += r;
+ iov++;
+ count--;
+ }
+ return t;
+}
diff --git a/newlib/libc/sys/go32/rename.s b/newlib/libc/sys/go32/rename.s
new file mode 100644
index 00000000000..549dcb82d0c
--- /dev/null
+++ b/newlib/libc/sys/go32/rename.s
@@ -0,0 +1,31 @@
+# /* This is file RENAME.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _rename
+_rename:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl 20(%esp),%edx
+ movb $0x41,%ah
+ int $0x21 # remove "to"
+ movl 16(%esp),%edx
+ movl 20(%esp),%edi
+ movb $0x56,%ah
+ int $0x21 # move "from" to "to"
+ popl %edi
+ popl %esi
+ popl %ebx
+ jmp syscall_check
diff --git a/newlib/libc/sys/go32/rmdir.s b/newlib/libc/sys/go32/rmdir.s
new file mode 100644
index 00000000000..b4668797f71
--- /dev/null
+++ b/newlib/libc/sys/go32/rmdir.s
@@ -0,0 +1,27 @@
+# /* This is file RMDIR.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _rmdir
+_rmdir:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl 16(%esp),%edx
+ movb $0x3a,%ah
+ int $0x21
+ popl %edi
+ popl %esi
+ popl %ebx
+ jmp syscall_check
diff --git a/newlib/libc/sys/go32/sbrk.s b/newlib/libc/sys/go32/sbrk.s
new file mode 100644
index 00000000000..190396c8ce3
--- /dev/null
+++ b/newlib/libc/sys/go32/sbrk.s
@@ -0,0 +1,27 @@
+# /* This is file SBRK.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _sbrk
+_sbrk:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl 16(%esp),%ebx
+ movw $0x4a01,%ax
+ int $0x21
+ popl %edi
+ popl %esi
+ popl %ebx
+ ret
diff --git a/newlib/libc/sys/go32/screen.S b/newlib/libc/sys/go32/screen.S
new file mode 100644
index 00000000000..4786f7ffe81
--- /dev/null
+++ b/newlib/libc/sys/go32/screen.S
@@ -0,0 +1,256 @@
+/* This is file SCREEN.S */
+/*
+** Copyright (C) 1993 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+**
+** Modified by J. Alan Eldridge, Liberty Brokerage, 77 Water St, NYC 10005
+**
+** added global char ScreenAttrib -- this is the attribute
+** used by ScreenClear(): it defaults to 0x07 so as not to
+** break existing code.
+**
+** Modified by C. Sandmann (sandmann@clio.rice.edu) for DPMI support
+** Combined SCREEN2.S and SCREEN.C into SCREEN.S
+*/
+
+ .data
+
+ .globl _ScreenAttrib
+_ScreenAttrib:
+ .byte 0x07
+
+ .text
+
+ .align 2
+ .globl _ScreenSetCursor
+ /* row, col */
+_ScreenSetCursor:
+ pushl %ebp
+ movl %esp,%ebp
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movb $0x02,%ah
+ movb $0,%bh
+ movb 8(%ebp),%dh
+ movb 12(%ebp),%dl
+ int $0x10
+ popl %edi
+ popl %esi
+ popl %ebx
+ popl %ebp
+ ret
+
+ .align 2
+ .globl _ScreenGetCursor
+ /* &row, &col */
+_ScreenGetCursor:
+ pushl %ebp
+ movl %esp,%ebp
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movb $0x03,%ah
+ movb $0,%bh
+ pushl %ebp
+ int $0x10
+ popl %ebp
+ movl 8(%ebp),%esi
+ movzbl %dh,%eax
+ movl %eax,(%esi)
+ movl 12(%ebp),%esi
+ movzbl %dl,%eax
+ movl %eax,(%esi)
+ popl %edi
+ popl %esi
+ popl %ebx
+ popl %ebp
+ ret
+
+ .align 2
+ .globl _ScreenClear
+_ScreenClear:
+ pushl %edi
+ call _ScreenCols
+ movl %eax,%ecx
+ call _ScreenRows
+ /* ECX is total words to store */
+ imull %eax,%ecx
+ movl _ScreenPrimary,%eax
+ call dosmemsetup
+ movl %eax,%edi
+ push %es
+ push %gs
+ pop %es
+ movb $0x20,%al
+ movb _ScreenAttrib,%ah
+ rep
+ stosw
+ pop %es
+ popl %edi
+ ret
+
+ .align 2
+ .globl _ScreenRows
+_ScreenRows:
+ movl $0x484,%eax
+ call dosmemsetup
+ movzbl %gs:(%eax),%eax
+ incl %eax
+ ret
+
+ .align 2
+ .globl _ScreenCols
+_ScreenCols:
+ movl $0x44a,%eax
+ call dosmemsetup
+ movzwl %gs:(%eax),%eax
+ ret
+
+ .align 2
+ .globl _ScreenMode
+_ScreenMode:
+ movl $0x449,%eax
+ call dosmemsetup
+ movzbl %gs:(%eax),%eax
+ ret
+
+ .align 2
+ .globl _ScreenPutChar
+_ScreenPutChar:
+ /* int ch, int attr, unsigned x, unsigned y */
+/*
+ if ( (x >= ScreenCols()) || (y >= ScreenRows())) return;
+ ch &= 0xff;
+ attr = (attr & 0xff) << 8;
+ *(unsigned short *)(ScreenPrimary+x+y*ScreenCols()) = ch | attr;
+*/
+ call _ScreenRows
+ cmpl %eax,16(%esp)
+ jae L1
+ call _ScreenCols
+ cmpl %eax,12(%esp)
+ jae L1
+ /* Out of range */
+ movl %eax,%edx
+ imull 16(%esp),%edx
+ addl 12(%esp),%edx
+ /* EDX = x + y*ScreenCols */
+
+ movb 4(%esp),%cl
+ movb 8(%esp),%ch
+
+ movl _ScreenPrimary,%eax
+ call dosmemsetup
+ movw %cx,%gs:(%eax,%edx,2)
+L1:
+ ret
+
+/* A quick way to update the screen from a logical video buffer, used
+ primarily for DPMI full screen management */
+ .align 2
+ .globl _ScreenUpdate
+ /* (void *)screenbuf */
+_ScreenUpdate:
+ call _ScreenRows
+ movl %eax,%ecx
+ call _ScreenCols
+ imull %eax,%ecx
+ sarl $1,%ecx
+ /* Number of long words in screen */
+
+ movl _ScreenPrimary,%eax
+ call dosmemsetup
+ movl 4(%esp),%edx
+ /* screenbuf */
+
+ pushl %esi
+ pushl %edi
+ movl %eax,%edi
+ movl %edx,%esi
+ push %es
+ push %gs
+ pop %es
+ rep
+ movsl
+ /* move ECX bytes to Real area */
+ pop %es
+ popl %edi
+ popl %esi
+ ret
+
+/* A quick way to update a screen line from a logical video buffer, used
+ primarily for DPMI full screen management */
+ .align 2
+ .globl _ScreenUpdateLine
+ /* (void *)screenline, int row */
+_ScreenUpdateLine:
+ call _ScreenCols
+ movl %eax,%ecx
+ sarl $1,%ecx
+ /* Number of long words in screen line */
+ shll $1,%eax
+ imull 8(%esp),%eax
+ addl _ScreenPrimary,%eax
+ call dosmemsetup
+ movl 4(%esp),%edx
+ /* screenbuf */
+
+ pushl %esi
+ pushl %edi
+ movl %eax,%edi
+ movl %edx,%esi
+ push %es
+ push %gs
+ pop %es
+ rep
+ movsl
+ /* move ECX bytes to Real area */
+ pop %es
+ popl %edi
+ popl %esi
+ ret
+
+
+/* A quick way to update the screen from a logical video buffer, used
+ primarily for DPMI full screen management */
+ .align 2
+ .globl _ScreenRetrieve
+ /* (void *)screenbuf */
+_ScreenRetrieve:
+ call _ScreenRows
+ movl %eax,%ecx
+ call _ScreenCols
+ imull %eax,%ecx
+ sarl $1,%ecx
+ /* Number of long words in screen */
+
+ movl _ScreenPrimary,%eax
+ call dosmemsetup
+ movl 4(%esp),%edx
+ /* screenbuf */
+
+ pushl %esi
+ pushl %edi
+ movl %eax,%esi
+ movl %edx,%edi
+ push %ds
+ push %gs
+ pop %ds
+ rep
+ movsl
+ /* move ECX bytes to Real area */
+ pop %ds
+ popl %edi
+ popl %esi
+ ret
+
+
diff --git a/newlib/libc/sys/go32/setjmp.S b/newlib/libc/sys/go32/setjmp.S
new file mode 100644
index 00000000000..ef9a258e103
--- /dev/null
+++ b/newlib/libc/sys/go32/setjmp.S
@@ -0,0 +1,61 @@
+/* This is file SETJMP.S */
+/*
+** Copyright (C) 1993 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+/*
+** jmp_buf:
+** eax ebx ecx edx esi edi ebp esp eip es fs gs ss
+** 0 4 8 12 16 20 24 28 32 36 38 40 42
+*/
+
+ .globl _setjmp /* jmp_buf */
+_setjmp:
+ pushl %ebp
+ movl %esp,%ebp
+
+ pushl %edi
+ movl 8(%ebp),%edi
+
+ movl %eax,0(%edi)
+ movl %ebx,4(%edi)
+ movl %ecx,8(%edi)
+ movl %edx,12(%edi)
+ movl %esi,16(%edi)
+
+ movl -4(%ebp),%eax
+ movl %eax,20(%edi)
+
+ movl 0(%ebp),%eax
+ movl %eax,24(%edi)
+
+ movl %esp,%eax
+ addl $12,%eax
+ movl %eax,28(%edi)
+
+ movl 4(%ebp),%eax
+ movl %eax,32(%edi)
+
+ movw %es, %ax
+ movw %ax, 36(%edi)
+ movw %fs, %ax
+ movw %ax, 38(%edi)
+ movw %gs, %ax
+ movw %ax, 40(%edi)
+ movw %ss, %ax
+ movw %ax, 42(%edi)
+
+ popl %edi
+ movl $0,%eax
+ leave
+ ret
+
diff --git a/newlib/libc/sys/go32/setmode.s b/newlib/libc/sys/go32/setmode.s
new file mode 100644
index 00000000000..071e31636c7
--- /dev/null
+++ b/newlib/libc/sys/go32/setmode.s
@@ -0,0 +1,19 @@
+# /* This is file SETMODE.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _setmode
+_setmode:
+ movb $8,%al
+ jmp turbo_assist
diff --git a/newlib/libc/sys/go32/setstack.S b/newlib/libc/sys/go32/setstack.S
new file mode 100644
index 00000000000..dcd3ac0b246
--- /dev/null
+++ b/newlib/libc/sys/go32/setstack.S
@@ -0,0 +1,70 @@
+/* This routine potentially increases the stack size at runtime based on
+ the _stklen variable. Only used by DPMI code.
+ Copyright (c) 1993 C. Sandmann
+ Environment: called by crt0.s (and gcrt0.s)
+ EAX, EBX, EBP, EDI, ESI disposable (cleared on return) */
+
+ .text
+ .globl __setstack
+__setstack:
+ movl %esp,%eax
+ andl $0xc0000000,%eax /* clear all except upper bits */
+ jne ok_stack /* obviously not DPMI! */
+ movw %ss,%ax
+ lsll %eax,%ebx /* stack segment limit */
+ movl %esp,%eax /* current location */
+ subl %ebx,%eax /* Free stack */
+ cmpl %eax,__stklen
+ jb ok_stack
+
+/* Not enough stack. Call sbrk() to get a new area. Copy current ESP + 20
+ to end of new area (3 args + our stack). Change ESP to new area. Set new
+ limit to start of new area using DPMI services. */
+
+ pushl __stklen
+ call _sbrk /* eax = got memory base */
+ popl %ebx /* remove _stklen */
+ cmpl $0xffffffff,%eax /* if eax = -1 failure */
+ je badstack
+ addl %eax,%ebx /* ebx now is end of new stack area */
+ andl $0xfffffff0,%ebx /* 16 byte alignment */
+ addl $0xfff,%eax /* make stack base page aligned */
+ andl $0xfffff000,%eax /* 4096 byte alignment */
+
+/* Now copy old stack to new stack. We only need our part + 4 words, 3 for
+ the parameters to pass to main, one for our return EIP (4 extra safety) */
+ movl %esp, %esi /* Source is current stack */
+ subl $0x20, %ebx /* 8 longwords */
+ movl %ebx, %edi /* Destination is new stack */
+ movl $8,%ecx
+ rep
+ movsl
+
+/* New stack in place. Change ESP to point to it. Assumes new stack is
+ higher in memory so we don't get caught by limit. Change limit using
+ DPMI services. */
+
+ movl %ebx,%esp /* Switch to new stack */
+ subl $1,%eax /* Low 12 bits all 1s */
+ pushl %eax /* Easiest way to move long to words */
+ popw %dx
+ popw %cx
+ movl $8,%eax /* DPMI function Set Segment Limit */
+ movw %ss,%bx /* Selector */
+ int $0x31 /* Do service */
+
+ xor %ecx,%ecx /* Clean up */
+ xor %edx,%edx /* Clean up */
+
+ok_stack:
+ ret /* What we have is already bigger */
+
+badstack:
+ movl $0x4c01,%eax
+ int $0x21
+ jmp badstack
+
+ .data
+ .globl __stklen
+ .comm __stklen,4
+
diff --git a/newlib/libc/sys/go32/settimeo.s b/newlib/libc/sys/go32/settimeo.s
new file mode 100644
index 00000000000..f9325cc9e7e
--- /dev/null
+++ b/newlib/libc/sys/go32/settimeo.s
@@ -0,0 +1,19 @@
+# /* This is file SETTIMEO.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _settimeofday
+_settimeofday:
+ movb $5,%al
+ jmp turbo_assist
diff --git a/newlib/libc/sys/go32/sleep.c b/newlib/libc/sys/go32/sleep.c
new file mode 100644
index 00000000000..96e547ddc1b
--- /dev/null
+++ b/newlib/libc/sys/go32/sleep.c
@@ -0,0 +1,27 @@
+/* This is file sleep.c */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+
+sleep(unsigned int seconds)
+{
+ long tnow, tthen;
+ time(&tnow);
+ tthen = tnow + seconds;
+ while (1)
+ {
+ time(&tnow);
+ if (tnow >= tthen)
+ return;
+ }
+}
diff --git a/newlib/libc/sys/go32/stat.c b/newlib/libc/sys/go32/stat.c
new file mode 100644
index 00000000000..e64e5b80c45
--- /dev/null
+++ b/newlib/libc/sys/go32/stat.c
@@ -0,0 +1,151 @@
+/*
+ (c) Copyright 1992 Eric Backus
+
+ This software may be used freely so long as this copyright notice is
+ left intact. There is no warrantee on this software.
+*/
+
+#include <sys/stat.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "dos.h"
+#include <errno.h>
+#include <stdio.h>
+
+extern int _stat_assist(const char *, struct stat *);
+extern void _fixpath(const char *, char *);
+
+struct path_list
+{
+ struct path_list *next;
+ char *path;
+ int inode;
+};
+
+static int
+fixinode(const char *path, struct stat *buf)
+{
+ static struct path_list *path_list[1256];
+ /* Start the inode count at three, since root path should be two */
+ static int inode_count = 3;
+
+ struct path_list *path_ptr, *prev_ptr;
+ const char *p;
+ int hash;
+
+ /* Skip over device and leading '/' */
+ if (path[1] == ':' && path[2] == '/') path += 3;
+
+ /* We could probably use a better hash than this */
+ p = path;
+ hash = 0;
+ while (*p != '\0') hash += *p++;
+ hash = hash & 0xff;
+
+ /* Have we seen this string? */
+ path_ptr = path_list[hash];
+ prev_ptr = path_ptr;
+ while (path_ptr)
+ {
+ if (strcmp(path, path_ptr->path) == 0) break;
+ prev_ptr = path_ptr;
+ path_ptr = path_ptr->next;
+ }
+
+ if (path_ptr)
+ /* Same string, so same inode */
+ buf->st_ino = path_ptr->inode;
+ else
+ {
+ /* New string with same hash code */
+ path_ptr = malloc(sizeof *path_ptr);
+ if (path_ptr == NULL)
+ {
+ errno = ENOMEM;
+ return -1;
+ }
+ path_ptr->next = NULL;
+ path_ptr->path = strdup(path);
+ if (path_ptr->path == NULL)
+ {
+ errno = ENOMEM;
+ return -1;
+ }
+ path_ptr->inode = inode_count;
+ if (prev_ptr)
+ prev_ptr->next = path_ptr;
+ else
+ path_list[hash] = path_ptr;
+ buf->st_ino = inode_count;
+ inode_count++;
+ }
+ return 0;
+}
+
+int
+stat(const char *path, struct stat *buf)
+{
+ static int stat_called_before = 0;
+ char p[1090]; /* Should be p[PATH_MAX+1] */
+ int status;
+
+ /* Normalize the path */
+ _fixpath(path, p);
+
+ /* Work around strange bug with stat and time */
+ if (!stat_called_before)
+ {
+ stat_called_before = 1;
+ (void) time((time_t *) 0);
+ }
+
+ /* Check for root path */
+ if (strcmp(p, "/") == 0 || strcmp(p + 1, ":/") == 0)
+ {
+ /* Handle root path as special case, stat_assist doesn't like
+ the root directory. */
+ if (p[1] == ':')
+ {
+ if (p[0] >= 'a' && p[0] <= 'z')
+ buf->st_dev = p[0] - 'a';
+ else
+ buf->st_dev = p[0] - 'A';
+ }
+ else
+ buf->st_dev = -1; /* No device? */
+ buf->st_ino = 2; /* Root path always inode 2 */
+ buf->st_mode = S_IFDIR | S_IREAD | S_IWRITE | S_IEXEC;
+ buf->st_nlink = 1;
+ buf->st_uid = getuid();
+ buf->st_gid = getgid();
+ buf->st_rdev = buf->st_dev;
+ buf->st_size = 0;
+ buf->st_atime = 0;
+ buf->st_mtime = 0;
+ buf->st_ctime = 0;
+ buf->st_blksize = 512; /* Not always correct? */
+ status = 0;
+ }
+ else
+ {
+ status = _stat_assist(p, buf);
+
+ /* Make inode numbers unique */
+ if (status == 0) status = fixinode(p, buf);
+
+ /* The stat_assist does something weird with st_dev, but sets
+ st_rdev to the drive number. Fix st_dev. */
+ buf->st_dev = buf->st_rdev;
+
+ /* Make all files owned by ourself. */
+ buf->st_uid = getuid();
+ buf->st_gid = getgid();
+
+ /* Make all directories writable. They always are in DOS, but
+ stat_assist doesn't think so. */
+ if (S_ISDIR(buf->st_mode)) buf->st_mode |= S_IWRITE;
+ }
+
+ return status;
+}
diff --git a/newlib/libc/sys/go32/stat.s b/newlib/libc/sys/go32/stat.s
new file mode 100644
index 00000000000..045725f3220
--- /dev/null
+++ b/newlib/libc/sys/go32/stat.s
@@ -0,0 +1,19 @@
+# /* This is file STAT.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _stat
+_stat:
+ movb $6,%al
+ jmp turbo_assist
diff --git a/newlib/libc/sys/go32/stat_ast.s b/newlib/libc/sys/go32/stat_ast.s
new file mode 100644
index 00000000000..3574f82797e
--- /dev/null
+++ b/newlib/libc/sys/go32/stat_ast.s
@@ -0,0 +1,21 @@
+/* This is file STAT_AST.S */
+/*
+** Copyright (C) 1993 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+**
+** Modified very slightly by Eric Backus.
+*/
+
+ .text
+ .globl __stat_assist
+__stat_assist:
+ movb $6,%al
+ jmp turbo_assist
diff --git a/newlib/libc/sys/go32/sys/dir.h b/newlib/libc/sys/go32/sys/dir.h
new file mode 100644
index 00000000000..6ac830f2781
--- /dev/null
+++ b/newlib/libc/sys/go32/sys/dir.h
@@ -0,0 +1,33 @@
+#ifndef _DIR_H_
+#define _DIR_H_
+
+struct ffblk {
+ char ff_reserved[21];
+ char ff_attrib;
+ short ff_ftime;
+ short ff_fdate;
+ short ff_filler;
+ long ff_fsize;
+ char ff_name[16];
+};
+
+#define FA_RDONLY 1
+#define FA_HIDDEN 2
+#define FA_SYSTEM 4
+#define FA_LABEL 8
+#define FA_DIREC 16
+#define FA_ARCH 32
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int findfirst(const char *pathname, struct ffblk *ffblk, int attrib);
+int findnext(struct ffblk *ffblk);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/newlib/libc/sys/go32/sys/dirent.h b/newlib/libc/sys/go32/sys/dirent.h
new file mode 100644
index 00000000000..50ae799d820
--- /dev/null
+++ b/newlib/libc/sys/go32/sys/dirent.h
@@ -0,0 +1,39 @@
+/* This is file DIRENT.H */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#ifndef _dirent_h_
+#define _dirent_h_
+
+#include <sys/dir.h>
+
+struct dirent {
+ unsigned short d_namlen;
+ char d_name[14];
+};
+
+typedef struct {
+ int num_read;
+ char *name;
+ struct ffblk ff;
+ struct dirent de;
+} DIR;
+
+DIR *opendir(char *name);
+struct dirent *readdir(DIR *dir);
+long telldir(DIR *dir);
+void seekdir(DIR *dir, long loc);
+void rewinddir(DIR *dir);
+int closedir(DIR *dir);
+
+#endif
diff --git a/newlib/libc/sys/go32/sys/dos.h b/newlib/libc/sys/go32/sys/dos.h
new file mode 100644
index 00000000000..ff3103f93f0
--- /dev/null
+++ b/newlib/libc/sys/go32/sys/dos.h
@@ -0,0 +1,57 @@
+#ifndef _DOS_H_
+#define _DOS_H_
+
+union REGS {
+ struct {
+ unsigned long ax;
+ unsigned long bx;
+ unsigned long cx;
+ unsigned long dx;
+ unsigned long si;
+ unsigned long di;
+ unsigned long cflag;
+ unsigned long flags;
+ } x;
+ struct {
+ unsigned char al;
+ unsigned char ah;
+ unsigned short upper_ax;
+ unsigned char bl;
+ unsigned char bh;
+ unsigned short upper_bx;
+ unsigned char cl;
+ unsigned char ch;
+ unsigned short upper_cx;
+ unsigned char dl;
+ unsigned char dh;
+ unsigned short upper_dx;
+ } h;
+};
+
+struct SREGS {
+ unsigned short cs;
+ unsigned short ds;
+ unsigned short es;
+ unsigned short fs;
+ unsigned short gs;
+ unsigned short ss;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int bdos(int func, unsigned dx, unsigned al);
+int bdosptr(int func, void *dx, unsigned al);
+int int86(int ivec, union REGS *in, union REGS *out);
+int int86x(int ivec, union REGS *in, union REGS *out, struct SREGS *seg);
+int intdos(union REGS *in, union REGS *out);
+int intdosx(union REGS *in, union REGS *out, struct SREGS *seg);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
diff --git a/newlib/libc/sys/go32/sys/dpmi.h b/newlib/libc/sys/go32/sys/dpmi.h
new file mode 100644
index 00000000000..7a2cb13afec
--- /dev/null
+++ b/newlib/libc/sys/go32/sys/dpmi.h
@@ -0,0 +1,151 @@
+/* This is file dpmi.h */
+/*
+** Copyright (C) 1993 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#ifndef _DPMI_H_
+#define _DPMI_H_
+
+
+#include <sys/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef union {
+ struct {
+ u_long edi;
+ u_long esi;
+ u_long ebp;
+ u_long res;
+ u_long ebx;
+ u_long edx;
+ u_long ecx;
+ u_long eax;
+ } d;
+ struct {
+ u_short di, di_hi;
+ u_short si, si_hi;
+ u_short bp, bp_hi;
+ u_short res, res_hi;
+ u_short bx, bx_hi;
+ u_short dx, dx_hi;
+ u_short cx, cx_hi;
+ u_short ax, ax_hi;
+ u_short flags;
+ u_short es;
+ u_short ds;
+ u_short fs;
+ u_short gs;
+ u_short ip;
+ u_short cs;
+ u_short sp;
+ u_short ss;
+ } x;
+ struct {
+ u_char edi[4];
+ u_char esi[4];
+ u_char ebp[4];
+ u_char res[4];
+ u_char bl, bh, ebx_b2, ebx_b3;
+ u_char dl, dh, edx_b2, edx_b3;
+ u_char cl, ch, ecx_b2, ecx_b3;
+ u_char al, ah, eax_b2, eax_b3;
+ } h;
+} _go32_dpmi_registers;
+
+typedef struct {
+ u_long size;
+ u_long pm_offset;
+ u_short pm_selector;
+ u_short rm_offset;
+ u_short rm_segment;
+} _go32_dpmi_seginfo;
+
+typedef struct {
+ u_long available_memory;
+ u_long available_pages;
+ u_long available_lockable_pages;
+ u_long linear_space;
+ u_long unlocked_pages;
+ u_long available_physical_pages;
+ u_long total_physical_pages;
+ u_long free_linear_space;
+ u_long max_pages_in_paging_file;
+ u_long reserved[3];
+} _go32_dpmi_meminfo;
+
+/* returns zero if success, else dpmi error and info->size is max size */
+int _go32_dpmi_allocate_dos_memory(_go32_dpmi_seginfo *info);
+ /* set size to bytes/16, call, use rm_segment. Do not
+ change anthing but size until the memory is freed.
+ If error, max size is returned in size as bytes/16. */
+int _go32_dpmi_free_dos_memory(_go32_dpmi_seginfo *info);
+ /* set new size to bytes/16, call. If error, max size
+ is returned in size as bytes/16 */
+int _go32_dpmi_resize_dos_memory(_go32_dpmi_seginfo *info);
+ /* uses pm_selector to free memory */
+
+/* These both use the rm_segment:rm_offset fields only */
+int _go32_dpmi_get_real_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);
+int _go32_dpmi_set_real_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);
+
+/* These do NOT wrap the function in pm_offset in an iret handler.
+ You must provide an assembler interface yourself, or alloc one below.
+ You may NOT longjmp out of an interrupt handler. */
+int _go32_dpmi_get_protected_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);
+ /* puts vector in pm_selector:pm_offset. */
+int _go32_dpmi_set_protected_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);
+ /* sets vector from pm_offset and pm_selector */
+int _go32_dpmi_chain_protected_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);
+ /* sets up wrapper that calls function in pm_offset, chaining to old
+ handler when it returns */
+
+/* These can be used to generate assember IRET-style wrappers for functions */
+int _go32_dpmi_allocate_iret_wrapper(_go32_dpmi_seginfo *info);
+ /* Put function ptr in pm_offset, call, returns wrapper entry in pm_offset. */
+int _go32_dpmi_free_iret_wrapper(_go32_dpmi_seginfo *info);
+ /* assumes pm_offset points to wrapper, frees it */
+
+/* simulate real mode calls. CS:IP from regs for non-interrupt */
+int _go32_dpmi_simulate_int(int vector, _go32_dpmi_registers *regs);
+int _go32_dpmi_simulate_fcall(_go32_dpmi_registers *regs);
+int _go32_dpmi_simulate_fcall_iret(_go32_dpmi_registers *regs);
+
+/* These automatically handle the tasks of restructuring the
+ real-mode stack for the proper return type. The callback
+ (info->pm_offset) is called as (*pmcb)(_go32_dpmi_registers *regs); */
+int _go32_dpmi_allocate_real_mode_callback_retf(_go32_dpmi_seginfo *info, _go32_dpmi_registers *regs);
+ /* points callback at pm_offset, returns seg:ofs of callback addr
+ in rm_segment:rm_offset. Do not change any fields until freed.
+ Interface is added to simulate far return */
+int _go32_dpmi_allocate_real_mode_callback_iret(_go32_dpmi_seginfo *info, _go32_dpmi_registers *regs);
+ /* same, but simulates iret */
+int _go32_dpmi_free_real_mode_callback(_go32_dpmi_seginfo *info);
+ /* frees callback */
+
+/* Only available_memory is guaranteed to be valid. Try
+ available_physical_pages for phys mem left */
+int _go32_dpmi_get_free_memory_information(_go32_dpmi_meminfo *info);
+
+/* Convenience functions. These use the above memory info call.
+ The return value is *bytes* */
+u_long _go32_dpmi_remaining_physical_memory(void);
+u_long _go32_dpmi_remaining_virtual_memory(void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/newlib/libc/sys/go32/sys/errno.h b/newlib/libc/sys/go32/sys/errno.h
new file mode 100644
index 00000000000..44852aee37d
--- /dev/null
+++ b/newlib/libc/sys/go32/sys/errno.h
@@ -0,0 +1,73 @@
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+/* ??? This file has been modified to work with newlib's way of storing
+ `errno'. Arguably there's no need and arguably we shouldn't diverge
+ from go32 sources. If you feel strongly about it, please change it.
+ The interface between newlib and system's version of errno is via
+ __errno, so there's no problem in storing errno in a different place
+ (any changes can be dealt with inside __errno). */
+
+#ifndef _SYS_ERRNO_H_
+#define _SYS_ERRNO_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <sys/reent.h>
+
+#ifndef _REENT_ONLY
+#define errno (*__errno())
+extern int *__errno _PARAMS ((void));
+#endif
+
+#define __errno_r(ptr) ((ptr)->_errno)
+
+#define ENOENT 2 /* No such file or directory */
+#define ENOTDIR 3 /* No path */
+#define EMFILE 4 /* Too many open files */
+#define EACCES 5 /* Permission denied */
+#define EBADF 6 /* Bad file number */
+#define EARENA 7 /* Arena trashed */
+#define ENOMEM 8 /* Not enough core */
+#define ESEGV 9 /* invalid memory address */
+#define EBADENV 10 /* invalid environment */
+#define ENODEV 15 /* No such device */
+#define ENMFILE 18 /* No more files */
+#define EINVAL 19 /* Invalid argument */
+#define E2BIG EBADENV /* Arg list too long */
+#define ENOEXEC 21 /* Exec format error */
+#define EXDEV 17 /* Cross-device link */
+#define EPIPE 32 /* POHC */
+#define EDOM 33 /* Math argument */
+#define ERANGE 34 /* Result too large */
+#if 0 /* readline.c assumes that if this is defined, so is O_NDELAY.
+ Newlib doesn't use it, so comment it out. */
+#define EWOULDBLOCK 35 /* POHC */
+#endif
+#define EEXIST 36 /* File already exists */
+#define EINTR 100 /* Interrupted system call */
+#define EIO 101 /* I/O or bounds error */
+#define ENOSPC 102 /* No space left on drive */
+#define EAGAIN 103 /* No more processes */
+#define ECHILD 200 /* child exited (porting only) */
+#define EFAULT 201 /* bad address */
+#define ENXIO ENODEV
+#define EPERM EACCES
+
+/* New values required by newlib and the Cygnus toolchain. */
+#define ENOSYS 230 /* Function not implemented */
+#define ESPIPE 231 /* Illegal seek */
+
+#endif
diff --git a/newlib/libc/sys/go32/sys/fcntl.h b/newlib/libc/sys/go32/sys/fcntl.h
new file mode 100644
index 00000000000..792c0673d8d
--- /dev/null
+++ b/newlib/libc/sys/go32/sys/fcntl.h
@@ -0,0 +1,12 @@
+#define O_RDONLY 0x0001
+#define O_WRONLY 0x0002
+#define O_RDWR 0x0004
+#define O_CREAT 0x0100
+#define O_TRUNC 0x0200
+#define O_EXCL 0x0400
+#define O_APPEND 0x0800
+#define O_TEXT 0x4000
+#define O_BINARY 0x8000
+
+
+
diff --git a/newlib/libc/sys/go32/sys/file.h b/newlib/libc/sys/go32/sys/file.h
new file mode 100644
index 00000000000..79f5f65f5d8
--- /dev/null
+++ b/newlib/libc/sys/go32/sys/file.h
@@ -0,0 +1,31 @@
+/* This is file FILE.H */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#ifndef _FILE_H_
+#define _FILE_H_
+
+#include <fcntl.h>
+
+#define L_SET 0
+#define L_CURR 1
+#define L_INCR 1
+#define L_XTND 2
+
+
+#define F_OK 0 /* does file exist */
+#define X_OK 1 /* is it executable by caller */
+#define W_OK 2 /* is it writable by caller */
+#define R_OK 4 /* is it readable by caller */
+
+#endif
diff --git a/newlib/libc/sys/go32/sys/go32.h b/newlib/libc/sys/go32/sys/go32.h
new file mode 100644
index 00000000000..4b6adefe176
--- /dev/null
+++ b/newlib/libc/sys/go32/sys/go32.h
@@ -0,0 +1,69 @@
+/* This is file go32.h */
+/*
+** Copyright (C) 1993 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#ifndef _GO32_H_
+#define _GO32_H_
+
+#include <sys/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* This must match go32/proginfo.h */
+
+typedef struct {
+ u_long size_of_this_structure_in_bytes;
+ u_long linear_address_of_primary_screen;
+ u_long linear_address_of_secondary_screen;
+ u_long linear_address_of_transfer_buffer;
+ u_long size_of_transfer_buffer; /* >= 4k */
+ u_long pid;
+ u_char master_interrupt_controller_base;
+ u_char slave_interrupt_controller_base;
+ u_short selector_for_linear_memory;
+ u_long linear_address_of_stub_info_structure;
+ u_long linear_address_of_original_psp;
+ u_short run_mode;
+ u_short run_mode_info;
+} Go32_Info_Block;
+
+extern Go32_Info_Block _go32_info_block;
+
+#define _GO32_RUN_MODE_UNDEF 0
+#define _GO32_RUN_MODE_RAW 1
+#define _GO32_RUN_MODE_XMS 2
+#define _GO32_RUN_MODE_VCPI 3
+#define _GO32_RUN_MODE_DPMI 4
+
+void dosmemget(int offset, int length, void *buffer);
+void dosmemput(const void *buffer, int length, int offset);
+void movedata(unsigned source_selector, unsigned source_offset,
+ unsigned dest_selector, unsigned dest_offset,
+ size_t length);
+
+/* returns number of times hit since last call. (zero first time) */
+u_long _go32_was_ctrl_break_hit(void);
+void _go32_want_ctrl_break(int yes); /* auto-yes if call above function */
+
+u_short _go32_my_cs(void);
+u_short _go32_my_ds(void);
+u_short _go32_my_ss(void);
+u_short _go32_conventional_mem_selector(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/newlib/libc/sys/go32/sys/param.h b/newlib/libc/sys/go32/sys/param.h
new file mode 100644
index 00000000000..c912b4082f7
--- /dev/null
+++ b/newlib/libc/sys/go32/sys/param.h
@@ -0,0 +1,22 @@
+/* This is file PARAM.H */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#ifndef _PARAM_H_
+#define _PARAM_H_
+
+#define MAXPATHLEN 80
+/* 100, according to the real go32 sys/times.h */
+#define HZ (100)
+
+#endif
diff --git a/newlib/libc/sys/go32/sys/pc.h b/newlib/libc/sys/go32/sys/pc.h
new file mode 100644
index 00000000000..4bce557d1a2
--- /dev/null
+++ b/newlib/libc/sys/go32/sys/pc.h
@@ -0,0 +1,56 @@
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#ifndef _PC_H_
+#define _PC_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+unsigned char inportb(unsigned short port);
+unsigned short inportw(unsigned short port);
+unsigned long inportl(unsigned short port);
+unsigned char inportsb(unsigned short port, unsigned char *buf, unsigned len);
+unsigned short inportsw(unsigned short port, unsigned short *buf, unsigned len);
+unsigned long inportsl(unsigned short port, unsigned long *buf, unsigned len);
+void outportb(unsigned short port, unsigned char data);
+void outportw(unsigned short port, unsigned short data);
+void outportl(unsigned short port, unsigned long data);
+void outportsb(unsigned short port, unsigned char *buf, unsigned len);
+void outportsw(unsigned short port, unsigned short *buf, unsigned len);
+void outportsl(unsigned short port, unsigned long *buf, unsigned len);
+
+int kbhit(void);
+int getkey(void);
+
+void sound(int frequency);
+
+extern short ScreenPrimary[];
+extern short ScreenSecondary[];
+
+/* For the primary screen: */
+int ScreenRows();
+int ScreenCols();
+void ScreenPutChar(int ch, int attr, int x, int y);
+void ScreenSetCursor(int row, int col);
+void ScreenGetCursor(int *row, int *col);
+void ScreenClear();
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/newlib/libc/sys/go32/sys/register.h b/newlib/libc/sys/go32/sys/register.h
new file mode 100644
index 00000000000..56fb737dd0f
--- /dev/null
+++ b/newlib/libc/sys/go32/sys/register.h
@@ -0,0 +1,28 @@
+/* This is file REGISTER.H */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+ unsigned ax, bx, cx, dx, si, di, bp, f;
+ } REGISTERS;
+
+#define FLAGS_C 1
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/newlib/libc/sys/go32/sys/resource.h b/newlib/libc/sys/go32/sys/resource.h
new file mode 100644
index 00000000000..afdf392172d
--- /dev/null
+++ b/newlib/libc/sys/go32/sys/resource.h
@@ -0,0 +1,50 @@
+/* This is file RESOURCE.H */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#ifndef _SYS_RESOURCE_H_
+#define _SYS_RESOURCE_H_
+
+#include <sys/time.h>
+
+#define RUSAGE_SELF 0 /* calling process */
+#define RUSAGE_CHILDREN -1 /* terminated child processes */
+
+struct rusage {
+ struct timeval ru_utime; /* user time used */
+ struct timeval ru_stime; /* system time used */
+ long ru_maxrss; /* integral max resident set size */
+ long ru_ixrss; /* integral shared text memory size */
+ long ru_idrss; /* integral unshared data size */
+ long ru_isrss; /* integral unshared stack size */
+ long ru_minflt; /* page reclaims */
+ long ru_majflt; /* page faults */
+ long ru_nswap; /* swaps */
+ long ru_inblock; /* block input operations */
+ long ru_oublock; /* block output operations */
+ long ru_msgsnd; /* messages sent */
+ long ru_msgrcv; /* messages received */
+ long ru_nsignals; /* signals received */
+ long ru_nvcsw; /* voluntary context switches */
+ long ru_nivcsw; /* involuntary context switches */
+};
+
+
+#ifdef __cplusplus
+extern "C" int getrusage(int who, struct rusage *rusage);
+#else
+extern int getrusage(int who, struct rusage *rusage);
+#endif
+
+#endif
+
diff --git a/newlib/libc/sys/go32/sys/setjmp.h b/newlib/libc/sys/go32/sys/setjmp.h
new file mode 100644
index 00000000000..59e30c43e77
--- /dev/null
+++ b/newlib/libc/sys/go32/sys/setjmp.h
@@ -0,0 +1,44 @@
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#ifndef _SETJMP_H_
+#define _SETJMP_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+ unsigned long eax;
+ unsigned long ebx;
+ unsigned long ecx;
+ unsigned long edx;
+ unsigned long esi;
+ unsigned long edi;
+ unsigned long ebp;
+ unsigned long esp;
+ unsigned long eip;
+ unsigned short es;
+ unsigned short fs;
+ unsigned short gs;
+ unsigned short ss;
+} jmp_buf[1];
+
+extern int setjmp(jmp_buf);
+extern void longjmp(jmp_buf, int);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/newlib/libc/sys/go32/sys/stdc.h b/newlib/libc/sys/go32/sys/stdc.h
new file mode 100644
index 00000000000..b2e5bc19b77
--- /dev/null
+++ b/newlib/libc/sys/go32/sys/stdc.h
@@ -0,0 +1,15 @@
+/* This is file STDC.H */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#include <sys/types.h>
diff --git a/newlib/libc/sys/go32/sys/uio.h b/newlib/libc/sys/go32/sys/uio.h
new file mode 100644
index 00000000000..d09fa5061aa
--- /dev/null
+++ b/newlib/libc/sys/go32/sys/uio.h
@@ -0,0 +1,23 @@
+/* This is file UIO.H */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#ifndef _SYS_UIO_H_
+#define _SYS_UIO_H_
+
+struct iovec {
+ void *iov_base;
+ unsigned long iov_len;
+};
+
+#endif
diff --git a/newlib/libc/sys/go32/syserr.c b/newlib/libc/sys/go32/syserr.c
new file mode 100644
index 00000000000..1fe4ca4cf13
--- /dev/null
+++ b/newlib/libc/sys/go32/syserr.c
@@ -0,0 +1,38 @@
+
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+char *sys_errlist[] = {
+ "no error",
+ "invalid function",
+ "file not found",
+ "path not found",
+ "too many open files",
+ "access denied",
+ "invalid file handle",
+ "arena trashed",
+ "not enough memory",
+ "invalid block",
+ "no environment",
+ "no format",
+ "invalid access code",
+ "invalid data",
+ "undefined",
+ "invalid drive",
+ "attempt to remove current directory",
+ "not same device",
+ "no more files"
+};
+
+int sys_nerr= sizeof(sys_errlist) / sizeof(char *);
+
diff --git a/newlib/libc/sys/go32/system.s b/newlib/libc/sys/go32/system.s
new file mode 100644
index 00000000000..9b12bbee820
--- /dev/null
+++ b/newlib/libc/sys/go32/system.s
@@ -0,0 +1,19 @@
+# /* This is file SYSTEM.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _system
+_system:
+ movb $7,%al
+ jmp turbo_assist
diff --git a/newlib/libc/sys/go32/tell.s b/newlib/libc/sys/go32/tell.s
new file mode 100644
index 00000000000..5427cbe3f6f
--- /dev/null
+++ b/newlib/libc/sys/go32/tell.s
@@ -0,0 +1,33 @@
+# /* This is file TELL.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _tell
+_tell:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl 16(%esp),%ebx
+ movl $0,%ecx
+ movl $0,%edx
+ movw $0x4201,%ax
+ int $0x21
+ popl %edi
+ popl %esi
+ popl %ebx
+ jb syscall_error
+ shll $16,%edx
+ andl $0xffff,%eax
+ orl %edx,%eax
+ ret
diff --git a/newlib/libc/sys/go32/time.c b/newlib/libc/sys/go32/time.c
new file mode 100644
index 00000000000..f8ab6f47eae
--- /dev/null
+++ b/newlib/libc/sys/go32/time.c
@@ -0,0 +1,53 @@
+/*
+FUNCTION
+<<time>>---get current calendar time (as single number)
+
+INDEX
+ time
+
+ANSI_SYNOPSIS
+ #include <time.h>
+ time_t time(time_t *<[t]>);
+
+TRAD_SYNOPSIS
+ #include <time.h>
+ time_t time(<[t]>)
+ time_t *<[t]>;
+
+DESCRIPTION
+<<time>> looks up the best available representation of the current
+time and returns it, encoded as a <<time_t>>. It stores the same
+value at <[t]> unless the argument is <<NULL>>.
+
+RETURNS
+A <<-1>> result means the current time is not available; otherwise the
+result represents the current time.
+
+PORTABILITY
+ANSI C requires <<time>>.
+This function is a wrapper for <<gettimeofday>>; this pollutes the
+namespace, and should be dealt with in the future.
+*/
+
+#include <_ansi.h>
+#include <sys/types.h>
+#include <sys/time.h>
+
+time_t
+_DEFUN(time,(t),
+ time_t *t)
+{
+ struct timeval now;
+
+ if (gettimeofday(&now, (struct timezone *)0) >= 0)
+ {
+ if (t)
+ {
+ *t = now.tv_sec;
+ }
+
+ return now.tv_sec;
+
+ }
+ return -1 ;
+}
diff --git a/newlib/libc/sys/go32/truncate.c b/newlib/libc/sys/go32/truncate.c
new file mode 100644
index 00000000000..8c64ee5a555
--- /dev/null
+++ b/newlib/libc/sys/go32/truncate.c
@@ -0,0 +1,25 @@
+/* This is file TRUNCATE.C */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#include <fcntl.h>
+
+truncate(const char *fn, unsigned long where)
+{
+ int fd = open(fn, O_WRONLY);
+ if (fd < 0)
+ return -1;
+ lseek(fd, where, 0);
+ write(fd, 0, 0);
+ close(fd);
+}
diff --git a/newlib/libc/sys/go32/turbo.s b/newlib/libc/sys/go32/turbo.s
new file mode 100644
index 00000000000..4bf2253e9e2
--- /dev/null
+++ b/newlib/libc/sys/go32/turbo.s
@@ -0,0 +1,30 @@
+# /* This is file TURBO.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl turbo_assist
+turbo_assist:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl 16(%esp),%ebx
+ movl 20(%esp),%ecx
+ movl 24(%esp),%edx
+ movb $0xff,%ah
+ int $0x21
+ popl %edi
+ popl %esi
+ popl %ebx
+ jb syscall_error
+ ret
diff --git a/newlib/libc/sys/go32/umask.c b/newlib/libc/sys/go32/umask.c
new file mode 100644
index 00000000000..4fabe640be3
--- /dev/null
+++ b/newlib/libc/sys/go32/umask.c
@@ -0,0 +1,4 @@
+umask()
+{
+ return 0644;
+}
diff --git a/newlib/libc/sys/go32/unlink.s b/newlib/libc/sys/go32/unlink.s
new file mode 100644
index 00000000000..afc9fe8f90e
--- /dev/null
+++ b/newlib/libc/sys/go32/unlink.s
@@ -0,0 +1,27 @@
+# /* This is file UNLINK.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _unlink
+_unlink:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl 16(%esp),%edx
+ movb $0x41,%ah
+ int $0x21
+ popl %edi
+ popl %esi
+ popl %ebx
+ jmp syscall_check
diff --git a/newlib/libc/sys/go32/utime.c b/newlib/libc/sys/go32/utime.c
new file mode 100644
index 00000000000..555a79c3faf
--- /dev/null
+++ b/newlib/libc/sys/go32/utime.c
@@ -0,0 +1,15 @@
+/* This is file UTIME.C */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+utime(){}
diff --git a/newlib/libc/sys/go32/utimes.c b/newlib/libc/sys/go32/utimes.c
new file mode 100644
index 00000000000..46b530ba21b
--- /dev/null
+++ b/newlib/libc/sys/go32/utimes.c
@@ -0,0 +1,15 @@
+/* This is file UTIMES.C */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+utimes(){}
diff --git a/newlib/libc/sys/go32/write.s b/newlib/libc/sys/go32/write.s
new file mode 100644
index 00000000000..4c2d34806bf
--- /dev/null
+++ b/newlib/libc/sys/go32/write.s
@@ -0,0 +1,30 @@
+# /* This is file WRITE.S */
+# /*
+# ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+# **
+# ** This file is distributed under the terms listed in the document
+# ** "copying.dj", available from DJ Delorie at the address above.
+# ** A copy of "copying.dj" should accompany this file; if not, a copy
+# ** should be available from where this file was obtained. This file
+# ** may not be distributed without a verbatim copy of "copying.dj".
+# **
+# ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+# ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# */
+
+ .text
+ .globl _write
+_write:
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl 16(%esp),%ebx
+ movl 20(%esp),%edx
+ movl 24(%esp),%ecx
+ movb $0x40,%ah
+ int $0x21
+ popl %edi
+ popl %esi
+ popl %ebx
+ jb syscall_error
+ ret
diff --git a/newlib/libc/sys/go32/writestub.c b/newlib/libc/sys/go32/writestub.c
new file mode 100644
index 00000000000..ae1b993595a
--- /dev/null
+++ b/newlib/libc/sys/go32/writestub.c
@@ -0,0 +1,6 @@
+
+sswrite(a,b,c)
+{
+ /*write(1,"writing\n",9);*/
+ return write_real(a,b,c);
+}
diff --git a/newlib/libc/sys/go32/writev.c b/newlib/libc/sys/go32/writev.c
new file mode 100644
index 00000000000..86f9b1e41b7
--- /dev/null
+++ b/newlib/libc/sys/go32/writev.c
@@ -0,0 +1,31 @@
+/* This is file WRITEV.C */
+/*
+** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
+**
+** This file is distributed under the terms listed in the document
+** "copying.dj", available from DJ Delorie at the address above.
+** A copy of "copying.dj" should accompany this file; if not, a copy
+** should be available from where this file was obtained. This file
+** may not be distributed without a verbatim copy of "copying.dj".
+**
+** This file is distributed WITHOUT ANY WARRANTY; without even the implied
+** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+*/
+
+#include <sys/types.h>
+#include <sys/uio.h>
+
+writev(int handle, struct iovec *iov, int count)
+{
+ unsigned long r, t=0;
+ while (count)
+ {
+ r = write(handle, iov->iov_base, iov->iov_len);
+ if (r < 0)
+ return r;
+ t += r;
+ iov++;
+ count--;
+ }
+ return t;
+}