koreth%panarthea.ebay@sun.com (Steven Grimm) (08/20/89)
Submitted-by: uunet.UU.NET!unido!sbsvax!roeder (Edgar Roeder)
Posting-number: Volume 2, Issue 74
Archive-name: gcclib2/part03
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 3 (of 7)."
# Contents: alrm_nas.s include/errno.h include/signal.h include/stat.h
# include/stdio.h include/stdlib.h ioctl.c.cdiff open.c
# opendir.c.cdiff st-error.c std-init.c time.c trap-1.c trap-13.c
# write.c.cdiff
# Wrapped by roeder@sbsvax on Wed Aug 16 22:03:00 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'alrm_nas.s' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'alrm_nas.s'\"
else
echo shar: Extracting \"'alrm_nas.s'\" \(1840 characters\)
sed "s/^X//" >'alrm_nas.s' <<'END_OF_FILE'
X|
X| Cross Development System for Atari ST
X| Copyright (c) 1988, Memorial University of Newfoundland
X|
X| At this point we take over from dos - we know (think?) that the stack
X| looks like this now:
X| 0 long pc
X| 4 long arg (pointer to d7 below)
X| (stuff - unknown size - depends on compiler - could be size 0)
X| long pc
X| *4 long d7
X| *4+0x4 long a0
X| *4+0x8 long d0
X| *4+0xc long d1
X| .
X| .
X| *4+0x24 long d7
X| *4+0x28 long a0
X| .
X| .
X| *4+0x40 long a6
X| *4+0x44 word sr status register from exception
X| *4+0x46 long pc pc from exception
X| stuff
X| The stratagy at this point consists of saving the exception sr/pc and puting
X| out own address in place of the pc. When the system does it's rte we get
X| called and we call raise (which can call some routine which can do a
X| longjmp). If raise returns then we restore the sr/pc and do a rte.
X|
X| $Header: alrm_nasty.s,v 1.1 88/02/03 22:37:55 m68k Exp $
X|
X| $Log: alrm_nasty.s,v $
X| Revision 1.1 88/02/03 22:37:55 m68k
X| Initial revision
X|
X
X.globl __in_trap | extern
X.globl _raise | extern
X.globl __alrm_nasty
X.globl __received_signal
X
X.comm alrm_sr, 2 | static
X.comm alrm_pc, 4 | static
X.comm __received_signal, 4
X
X__alrm_nasty:
X movel sp@(0x4), a0
X movew a0@(0x44), alrm_sr | save sr/pc at static locations, it's
X movel a0@(0x46), alrm_pc | safe now because we are blocking sigs
X movew #0x2300, a0@(0x44) | fake sr (with super bit on)
X movel #alrm_fake, a0@(0x46) | our fake return routine
X rts
X
Xalrm_fake:
X movel alrm_pc, sp@- | push original sr/pc on stack so we
X movew alrm_sr, sp@- | can handle other signals during raise
X moveml d0-d2/a0-a2, sp@- | save registers
X movel __received_signal, sp@- | raise(SIG..)
X clrl __received_signal | unblock other signals
X jsr _raise |
X addql #0x4, sp | pop signum
X moveml sp@+, d0-d2/a0-a2 | pop registers
X rte
END_OF_FILE
if test 1840 -ne `wc -c <'alrm_nas.s'`; then
echo shar: \"'alrm_nas.s'\" unpacked with wrong size!
fi
# end of 'alrm_nas.s'
fi
if test -f 'include/errno.h' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'include/errno.h'\"
else
echo shar: Extracting \"'include/errno.h'\" \(2191 characters\)
sed "s/^X//" >'include/errno.h' <<'END_OF_FILE'
X/*
X * Cross Development System for Atari ST
X * Copyright (c) 1988, Memorial University of Newfoundland
X *
X * $Header: errno.h,v 1.2 88/02/03 20:07:07 m68k Exp $
X *
X * $Log: errno.h,v $
X * Revision 1.2 88/02/03 20:07:07 m68k
X * Added ENOTTY for ioctl()
X *
X * Revision 1.1 88/01/29 17:18:36 m68k
X * Initial revision
X *
X */
X#define ENOERR 0 /* no error */
X#define EERROR 1 /* generic error */
X#define EDRNRDY 2 /* drive not ready */
X#define EUKCMD 3 /* unknown command */
X#define ECRC 4 /* crc error */
X#define EBADREQ 5 /* bad request */
X#define ESEEK 6 /* seek error */
X#define EUKMEDIA 7 /* unknown media */
X#define ESECTOR 8 /* sector not found */
X#define EPAPER 9 /* no paper */
X#define EWRITE 10 /* write fault */
X#define EREAD 11 /* read fault */
X#define EGENERIC 12 /* general mishap */
X#define EROFS 13 /* write protect */
X#define ECHMEDIA 14 /* media change */
X#define EUKDEV 15 /* unknown device */
X#define EBADSEC 16 /* bad sectors */
X#define EIDISK 17 /* insert disk */
X /* (gap) */
X#define EINVAL 32 /* invalid function number */
X#define ENOENT 33 /* file not found */
X#define EPATH 34 /* path not found */
X#define ENOTDIR 34 /* path not found */
X#define EMFILE 35 /* too many open files */
X#define EACCESS 36 /* access denied */
X#define EACCES 36 /* access denied */
X#define EBADF 37 /* invalid handle */
X#define ENOMEM 39 /* insufficient memory */
X#define EFAULT 40 /* invalid memory block request */
X#define ENXIO 46 /* invalid drive */
X#define EXDEV 48 /* cross device rename */
X#define ENMFILES 49 /* no more files (fnext) */
X#define EDOM 62
X#define ERANGE 63
X#define EBADARG 64 /* range error/context unknown */
X#define EINTERNAL 65 /* internal error */
X#define ENOEXEC 66 /* invalid program load format */
X#define ESBLOCK 67 /* set block failed/growth restraints */
X /* (gap) */
X#define EEXIST 80 /* file exists (open) */
X#define ENAMETOOLONG 81 /* file exists (open) */
X#define ENOTTY 82 /* not a tty (ioctl) */
X#define EAGAIN EDRNRDY /* try again later */
X
Xextern int errno;
Xextern int sys_nerr;
Xextern char * sys_errlist[];
END_OF_FILE
if test 2191 -ne `wc -c <'include/errno.h'`; then
echo shar: \"'include/errno.h'\" unpacked with wrong size!
fi
# end of 'include/errno.h'
fi
if test -f 'include/signal.h' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'include/signal.h'\"
else
echo shar: Extracting \"'include/signal.h'\" \(2052 characters\)
sed "s/^X//" >'include/signal.h' <<'END_OF_FILE'
X#ifndef _SIGNAL_H
X#define _SIGNAL_H
X/*
X * Cross Development System for Atari ST
X * Copyright (c) 1988, Memorial University of Newfoundland
X *
X * Beware the SIGINT/SIGQUIT - right now they only work when you are read()ing
X *
X * $Header: signal.h,v 1.1 88/02/03 20:06:23 m68k Exp $
X *
X * cleaned up for ANSI C (er) [13.8.1989]:
X * added typedefs, SIG_ERR and a few signal values
X *
X * $Log: signal.h,v $
X * Revision 1.1 88/02/03 20:06:23 m68k
X * Initial revision
X *
X */
X#ifdef __GNUC__
X#pragma once
X#endif
X
Xtypedef long sig_atomic_t; /* the integral type of an object that can */
X /* be accessed as an atomic entity, even in */
X /* the presence of asynchronous interrupts. */
Xtypedef int sig_handler_t(int); /* type for signal handlers */
X
X#define SIG_DFL ((sig_handler_t *) 0)
X#define SIG_ERR ((sig_handler_t *) -1)
X#define SIG_IGN ((sig_handler_t *) 1)
X
X#define NSIG 19
X
X#define SIGNULL 0 /* The null signal */
X#define SIGALRM 1 /* If SIGALRM changes, change the value
X * in lib/libc/atari/alrm_nasty.s too!
X */
X/* this block are just trap numbers. I made up most of these names... */
X#define SIGBUS 2
X#define SIGODD 3
X#define SIGILL 4
X#define SIGZDIV 5
X#define SIGCHK 6
X#define SIGTRAP 7
X#define SIGPRIV 8
X#define SIGTRACE 9
X
X
X#define SIGINT 10 /* ^C (struct tchars t_intc) */
X#define SIGQUIT 11 /* ^\ (struct tchars t_quitc) */
X#define SIGTSTP 12 /* ^Z (struct tchars t_suspc) */
X#define SIGFPE 13 /* floating point exception */
X#define SIGHUP 14 /* hangup */
X#define SIGABRT 15 /* abnormal termination */
X#define SIGTERM 16 /* termination request */
X#define SIGUSR1 17 /* user defined signal #1 */
X#define SIGUSR2 18 /* user defined signal #2 */
X
X/* ANSI C requires the following */
X#define SIGSEGV SIGBUS /* invalid access to storage */
X
X/* some values that Eunuchs programs seem to want */
X#define SIGIOT SIGNULL
X#define SIGEMT SIGNULL
X#define SIGSYS SIGNULL
X#define SIGSTOP SIGTSTP
X
Xsig_handler_t *signal(int sig, sig_handler_t *func);
Xint raise(int sig);
X#endif /* _SIGNAL_H */
END_OF_FILE
if test 2052 -ne `wc -c <'include/signal.h'`; then
echo shar: \"'include/signal.h'\" unpacked with wrong size!
fi
# end of 'include/signal.h'
fi
if test -f 'include/stat.h' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'include/stat.h'\"
else
echo shar: Extracting \"'include/stat.h'\" \(1664 characters\)
sed "s/^X//" >'include/stat.h' <<'END_OF_FILE'
X/*
X * Cross Development System for Atari ST
X * Copyright (c) 1988, Memorial University of Newfoundland
X *
X * Fake stat the best we can. The only field that isn't filled in half-way
X * sensibly in st_ino. Also put dta struct here for lack of a better place.
X *
X * $Header: stat.h,v 1.1 88/01/29 17:22:33 m68k Exp $
X *
X * $Log: stat.h,v $
X * Revision 1.1 88/01/29 17:22:33 m68k
X * Initial revision
X *
X */
X#ifndef _STAT_H
X#define _STAT_H
X
X#ifndef _TYPES_H
X#include <types.h>
X#endif /* _TYPES_H */
X
Xstruct stat {
X u_short st_mode;
X ino_t st_ino;
X dev_t st_dev;
X short st_rdev;
X short st_nlink;
X short st_uid;
X short st_gid;
X off_t st_size;
X long st_blksize;
X long st_blocks;
X time_t st_mtime;
X time_t st_atime;
X time_t st_ctime;
X short st_attr;
X};
X
X#define S_IFMT 0170000 /* type of file */
X#define S_IFDIR 0040000 /* directory */
X#define S_IFCHR 0020000 /* character special */
X#define S_IFBLK 0060000 /* block special */
X#define S_IFREG 0100000 /* regular */
X#define S_IFIFO 0010000 /* fifo */
X#define S_ISUID 04000 /* set user id on execution */
X#define S_ISGID 02000 /* set group id on execution */
X#define S_ISVTX 01000 /* save swapped text even after use */
X#define S_IREAD 00400 /* read permission, owner */
X#define S_IWRITE 00200 /* write permission, owner */
X#define S_IEXEC 00100 /* execute/search permission, owner */
X
Xstruct _dta {
X char dta_buf[21];
X char dta_attribute;
X unsigned short dta_time;
X unsigned short dta_date;
X long dta_size;
X char dta_name[14];
X};
X
X#define FA_RDONLY 0x01
X#define FA_HIDDEN 0x02
X#define FA_SYSTEM 0x04
X#define FA_LABEL 0x08
X#define FA_DIR 0x10
X#define FA_CHANGED 0x20
X#endif /* _STAT_H */
END_OF_FILE
if test 1664 -ne `wc -c <'include/stat.h'`; then
echo shar: \"'include/stat.h'\" unpacked with wrong size!
fi
# end of 'include/stat.h'
fi
if test -f 'include/stdio.h' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'include/stdio.h'\"
else
echo shar: Extracting \"'include/stdio.h'\" \(1990 characters\)
sed "s/^X//" >'include/stdio.h' <<'END_OF_FILE'
X#ifndef STDIO_H
X#define STDIO_H
X/*
X * stdio.h
X *
X * this version kludged up by jrd
X */
X
X/* files are really pointers to something, but that isn't visible to standard
X code */
X#define FILE long
X#define EOF -1
X
X#ifndef NULL
X#define NULL (void *)0
X#endif
X
X/* internal structure defs for FILE structs and the code that hacks on them */
X
X#define BUFSIZE 1024
X
Xstruct file
X {
X unsigned char open_p; /* 1-> this one's open */
X unsigned char eof_p; /* 1-> at eof */
X unsigned char flags; /* read and write mode bits */
X unsigned char slush;
X unsigned short handle; /* the file_handle GEMDOS gave us */
X short buf_index; /* idx into buf; signed cause it can be
X -1 when somebody ungetcs something */
X short buf_max; /* end of valid data in buf */
X unsigned long file_position; /* nbytes into file of buf */
X int last_file_error; /* last error encountered */
X short unchar_slush; /* in case we unchar at begin buf */
X char buf[BUFSIZE]; /* and the buffer */
X };
X
X#define file_output_p(f) \
X (((f->mode & 0x03) == O_WRONLY) || ((f->mode & 0x03) == O_RDWR))
X
X#define file_input_p(f) \
X (((f->mode & 0x03) == O_RDONLY) || ((f->mode & 0x03) == O_RDWR))
X
X#undef BUFSIZE
X
X/* standard files */
Xextern struct file _std_in_out_err[3];
X#define stdin (FILE *) &_std_in_out_err[0]
X#define stdout (FILE *) &_std_in_out_err[1]
X#define stderr (FILE *) &_std_in_out_err[2]
X
X/* and code to hack them */
Xextern FILE * fopen(), * freopen(), * fdopen();
X
Xextern int fileno(FILE *fp);
Xextern int fgetc();
Xextern char * fgets();
Xextern char * gets();
X
X/* more eunuchs compatibility brain damage... */
X#define putc fputc
X#define getc fgetc
X#define putchar(c) fputc(c, stdout)
X#define getchar() fgetc(stdin)
X
X/* this is so unbelievably brain-dead I can't think of an epithet
X that accurately describes it. No, it has no use at all, other
X than to support eunuchs code that doesn't believe in modularity
X or functional boundaries. That is, most of it.... */
X#define BUFSIZ 512
X#endif /* STDIO_H */
END_OF_FILE
if test 1990 -ne `wc -c <'include/stdio.h'`; then
echo shar: \"'include/stdio.h'\" unpacked with wrong size!
fi
# end of 'include/stdio.h'
fi
if test -f 'include/stdlib.h' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'include/stdlib.h'\"
else
echo shar: Extracting \"'include/stdlib.h'\" \(1705 characters\)
sed "s/^X//" >'include/stdlib.h' <<'END_OF_FILE'
X#ifndef _STDLIB_H
X#define _STDLIB_H
X
Xtypedef unsigned long size_t;
Xtypedef char wchar_t;
Xtypedef struct {
X int quot;
X int rem;
X } div_t;
Xtypedef struct {
X long quot;
X long rem;
X } ldiv_t;
X
X#define NULL (void *) 0
X#define EXIT_FAILURE 1
X#define EXIT_SUCCESS 0
X#define RAND_MAX 0x7FFF
X#define MB_CUR_MAX 1
X
Xextern double atof(const char *nptr);
Xextern int atoi(const char *nptr);
Xextern long int atol(const char *nptr);
Xextern double strtod(const char *nptr, char **endptr);
Xextern long int strtol(const char *nptr, char **endptr, int base);
Xextern unsigned long int strtoul(const char *nptr, char **endptr, int base);
Xextern int rand(void);
Xextern void srand(unsigned int seed);
Xextern void *calloc(size_t nmemb, size_t size);
Xextern void free(void *ptr);
Xextern void *malloc(size_t size);
Xextern void *realloc(void *ptr, size_t size);
Xextern void abort(void);
Xextern int atexit(void (*func)(void));
Xextern void exit(int status);
Xextern char *getenv(const char *name);
Xextern int system(const char *string);
X/* bsearch */
X/* qsort */
Xextern int abs(int j);
X/* div */
Xextern long int labs(long int j);
X/* ldiv */
X/* mblen */
X/* mbtowc */
X/* wctomb */
X/* mbstowcs */
X/* wcstombs */
Xextern void *memcpy(void *s1, const void *s2, size_t n);
Xextern void *memmove(void *s1, const void *s2, size_t n);
Xextern char *strcpy(char *s1, const char *s2);
Xextern char *strncpy(char *s1, const char *s2, size_t n);
Xextern char *strcat(char *s1, const char *s2);
Xextern char *strncat(char *s1, const char *s2, size_t n);
X/* ... */
Xextern size_t strlen(const char *s);
X
X/* this was the standard ansi header - and now the gnu cc version of this */
X#ifdef __GNUC__
X#pragma once
X
X#define abs __builtin_abs
X#endif
X#endif
END_OF_FILE
if test 1705 -ne `wc -c <'include/stdlib.h'`; then
echo shar: \"'include/stdlib.h'\" unpacked with wrong size!
fi
# end of 'include/stdlib.h'
fi
if test -f 'ioctl.c.cdiff' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'ioctl.c.cdiff'\"
else
echo shar: Extracting \"'ioctl.c.cdiff'\" \(1934 characters\)
sed "s/^X//" >'ioctl.c.cdiff' <<'END_OF_FILE'
X*** terminator/ioctl.c Fri Aug 11 18:52:27 1989
X--- new-lib/ioctl.c Fri Jul 14 20:09:48 1989
X***************
X*** 14,15 ****
X--- 14,16 ----
X */
X+ #include <fcntl.h>
X #include <ioctl.h>
X***************
X*** 17,19 ****
X--- 18,34 ----
X #include "tchars.h"
X+ #include <osbind.h>
X+ #include <sysvars.h>
X
X+ static int
X+ meta_on()
X+ {
X+ *conterm |= 8;
X+ }
X+
X+ static int
X+ meta_off()
X+ {
X+ *conterm &= ~8;
X+ }
X+
X int
X***************
X*** 27,28 ****
X--- 42,44 ----
X struct ltchars *ltc;
X+ long ssp;
X
X***************
X*** 41,43 ****
X
X! case TIOCSETP:
X sg = (struct sgttyb *) arg;
X--- 57,68 ----
X
X! case TIOCSETP: /* discard input */
X! {
X! int old_delay_mode;
X! char ch;
X!
X! old_delay_mode = fcntl(0, F_SETFL, O_NDELAY);
X! while (read(0, &ch, 1) == 1);
X! fcntl(0, F_SETFL, old_delay_mode);
X! }
X! case TIOCSETN:
X sg = (struct sgttyb *) arg;
X***************
X*** 45,46 ****
X--- 70,78 ----
X __tchars[TC_KILL] = sg->sg_kill;
X+ if (sg->sg_flags & META)
X+ __keytab = (KEYTAB *) Keytbl(-1,-1,-1);
X+ if (sg->sg_flags & META) {
X+ Supexec(meta_on);
X+ } else {
X+ Supexec(meta_off);
X+ }
X __ttymode = sg->sg_flags;
X***************
X*** 68,73 ****
X ltc = (struct ltchars *) arg;
X! ltc->t_suspc = TC_UNDEF;
X! ltc->t_dsuspc = TC_UNDEF;
X ltc->t_rprntc = __tchars[TC_RPRNTC];
X! ltc->t_flushc = TC_UNDEF;
X ltc->t_werasc = __tchars[TC_WERASC];
X--- 100,105 ----
X ltc = (struct ltchars *) arg;
X! ltc->t_suspc = __tchars[TC_SUSPC];
X! ltc->t_dsuspc = __tchars[TC_DSUSPC];
X ltc->t_rprntc = __tchars[TC_RPRNTC];
X! ltc->t_flushc = __tchars[TC_FLUSHC];
X ltc->t_werasc = __tchars[TC_WERASC];
X***************
X*** 78,80 ****
X--- 110,115 ----
X ltc = (struct ltchars *) arg;
X+ __tchars[TC_SUSPC] = ltc->t_suspc;
X+ __tchars[TC_DSUSPC] = ltc->t_dsuspc;
X __tchars[TC_RPRNTC] = ltc->t_rprntc;
X+ __tchars[TC_FLUSHC] = ltc->t_flushc;
X __tchars[TC_WERASC] = ltc->t_werasc;
END_OF_FILE
if test 1934 -ne `wc -c <'ioctl.c.cdiff'`; then
echo shar: \"'ioctl.c.cdiff'\" unpacked with wrong size!
fi
# end of 'ioctl.c.cdiff'
fi
if test -f 'open.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'open.c'\"
else
echo shar: Extracting \"'open.c'\" \(2057 characters\)
sed "s/^X//" >'open.c' <<'END_OF_FILE'
X/*
X * Cross Development System for Atari ST
X * Copyright (c) 1988, Memorial University of Newfoundland
X *
X * er: added O_NDELAY, /dev/null, fstat()-support
X *
X * Tries to emulate unix open3. The mode argument is ignored, and O_NDELAY
X * doesn't do anything. Also O_APPEND does not garentee that things will
X * be written to the end - all we can do is seek to the end to start with.
X *
X * $Header: open.c,v 1.2 88/01/29 17:31:36 m68k Exp $
X *
X * $Log: open.c,v $
X *
X * Modified by jrd for native gcc 1.2
X *
X * Revision 1.2 88/02/24 17:31:36 m68k
X *
X */
X#include <types.h>
X#include <file.h>
X#include <stat.h>
X#include <errno.h>
X#include <osbind.h>
X
X#ifdef DEBUG
Xextern int stderr;
X#endif
X
Xint open(p, flags, mode)
Xchar * p;
Xshort flags;
Xu_short mode;
X{
X char path[strlen(p)+1];
X int fd;
X int exists;
X extern char *malloc();
X u_short create_mode = 0;
X int len;
X
X if(!strcmp(p,"/dev/null")) return(1234);
X len = strlen(p) + 1;
X strcpy(path,p);
X unix_to_tos(path);
X switch (flags & 0x3) {
X case O_RDONLY:
X fd = Fopen(path, O_RDONLY);
X break;
X case O_WRONLY:
X case O_RDWR:
X fd = 0;
X exists = Fattrib(path, 0, 0) >= 0;
X if (flags & O_CREAT) {
X if ((flags & O_EXCL) && exists)
X fd = - EEXIST;
X } else if (!exists) fd = - ENOENT;
X if (!fd) {
X if ((flags & O_TRUNC) || !exists) {
X if (!(mode & S_IREAD))
X create_mode |= FA_HIDDEN;
X if (!(mode & S_IWRITE))
X create_mode |= FA_RDONLY;
X if ((fd = Fcreate(path, create_mode)) >= 0
X && (flags & 0x3) == O_RDWR) {
X (void) Fclose(fd);
X fd = Fopen(path, O_RDWR);
X }
X } else if ((fd = Fopen(path, flags & 0x3)) >= 0
X && (flags & O_APPEND))
X (void) Fseek(0L, fd, L_XTND);
X }
X break;
X
X default:
X fd = - EINVAL;
X }
X if (fd < 0) {
X errno = -fd;
X fd = -1;
X } else if (fd < N_HANDLES) {
X if(flags & O_NDELAY)
X __handle_stat[fd] |= O_NDELAY;
X if(__handle_to_name[fd] = malloc(len))
X strcpy(__handle_to_name[fd],p);
X }
X#ifdef DEBUG
X fprintf(stderr, "open('%s', %X)->%d\n", path, flags, fd);
X#endif
X return fd;
X}
END_OF_FILE
if test 2057 -ne `wc -c <'open.c'`; then
echo shar: \"'open.c'\" unpacked with wrong size!
fi
# end of 'open.c'
fi
if test -f 'opendir.c.cdiff' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'opendir.c.cdiff'\"
else
echo shar: Extracting \"'opendir.c.cdiff'\" \(2772 characters\)
sed "s/^X//" >'opendir.c.cdiff' <<'END_OF_FILE'
X*** terminator/opendir.c Fri Aug 11 18:52:45 1989
X--- new-lib/opendir.c Tue Aug 15 17:40:08 1989
X***************
X*** 84,91 ****
X
X DIR *
X! opendir(name)
X! char *name;
X {
X DIR *dirp;
X- char c;
X char *s;
X--- 84,94 ----
X
X+ extern DIR *_current_open_directory; /* in stat.c */
X+ static int dirnumber = 0;
X+
X DIR *
X! opendir(n)
X! char *n;
X {
X+ char *name;
X DIR *dirp;
X char *s;
X***************
X*** 93,95 ****
X--- 96,101 ----
X char nbuf[MAXPATHLEN + 1];
X+ int len;
X
X+ name = malloc(strlen(n)+1);
X+ strcpy(name,n);
X #ifdef MSDOS
X***************
X*** 106,107 ****
X--- 112,115 ----
X {
X+ struct stat statb;
X+
X /* This bit of nastyness is due to the fact that Fattrib()
X***************
X*** 110,111 ****
X--- 118,120 ----
X */
X+ unix_to_tos(name);
X if (index(name, '*') || index(name, '?'))
X***************
X*** 112,114 ****
X--- 121,128 ----
X return (DIR *) NULL;
X+ if (stat(name, &statb) < 0
X+ || (statb.st_mode & S_IFMT) != S_IFDIR)
X+ return (DIR *) NULL;
X setdta();
X+ #ifdef old_code
X+ /* this old code could never deal with root directories */
X if (getdirent(name) == (char *) NULL ||
X***************
X*** 116,117 ****
X--- 130,132 ----
X return (DIR *) NULL;
X+ #endif
X }
X***************
X*** 120,125 ****
X return (DIR *) NULL;
X! if (*name && (c = name[strlen(name) - 1]) != '\\' && c != '/')
X! (void) strcat(strcpy(nbuf, name), "\\*.*");
X! else
X! (void) strcat(strcpy(nbuf, name), "*.*");
X dirp->dd_loc = 0;
X--- 135,140 ----
X return (DIR *) NULL;
X! len = strlen(name) - 1;
X! if (len >= 0 && name[len] == '\\')
X! name[len] = '\0';
X! (void) strcat(strcpy(nbuf, name), "\\*.*");
X dirp->dd_loc = 0;
X***************
X*** 126,127 ****
X--- 141,155 ----
X dirp->dd_contents = dirp->dd_cp = (struct _dircontents *) NULL;
X+ /* the following code helps optimization in stat() and fstat() */
X+ if(*name == '.' && !name[1]) { /* directory is '.' */
X+ /* don't care about '..' or other strange variants */
X+ char namebuf[MAXPATHLEN + 1];
X+ extern char *realloc();
X+
X+ Dgetpath(namebuf, 0);
X+ name = realloc(name, strlen(namebuf)+1);
X+ strcpy(name,namebuf);
X+ }
X+ dirp->dd_name = name;
X+ dirp->dd_next = _current_open_directory;
X+ _current_open_directory = dirp;
X if ((s = getdirent(nbuf)) == (char *) NULL)
X***************
X*** 141,143 ****
X--- 169,176 ----
X dirp->dd_contents = dirp->dd_cp = dp;
X+ tos_to_unix(s);
X (void) strcpy(dp->_d_entry, s);
X+ dp->_d_attr = dtabuf.dta_attribute;
X+ dp->_d_date = dtabuf.dta_date;
X+ dp->_d_time = dtabuf.dta_time;
X+ dp->_d_size = dtabuf.dta_size;
X dp->_d_next = (struct _dircontents *) NULL;
X***************
X*** 145,146 ****
X--- 178,180 ----
X dirp->dd_cp = dirp->dd_contents;
X+ dirp->dd_id = ++dirnumber;
X
END_OF_FILE
if test 2772 -ne `wc -c <'opendir.c.cdiff'`; then
echo shar: \"'opendir.c.cdiff'\" unpacked with wrong size!
fi
# end of 'opendir.c.cdiff'
fi
if test -f 'st-error.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'st-error.c'\"
else
echo shar: Extracting \"'st-error.c'\" \(1745 characters\)
sed "s/^X//" >'st-error.c' <<'END_OF_FILE'
X
X/* does this replace some Eunuchs thing? Who knows, in this kludge of a
X * language. In any event, input-scrub.c wants it; nobody else seems to use
X * it.
X */
X
X/* apparently Eunuchs has a similar thing, but their error numbers
X go up from 0. We'll hack things a bit so as to allow negative offsets
X from sys_errlist to get the right strings here */
X
X#include <errno.h>
X
Xint sys_nerr = 67; /* max known error number */
Xint errno = 0; /* current error num */
X
X/* this, of course, must follow the above immediately. We rely
X on GCC optimizing this into a reference to the duplicate string, above */
Xchar * sys_errlist[] =
X {
X "No error",
X "Generic bogosity", /* -1 */
X "Drive not ready",
X "Unknown command",
X "CRC error",
X "Bad request",
X "Seek error",
X "Unknown media",
X "Sector not found",
X "Paper out",
X "Write fault",
X "Read fault",
X "Random bogons",
X "Write protected",
X "Media change",
X "Unknown device",
X "Bad sectors",
X "Insert disk",
X "", "", "", "", "", "", /* -23 .. -18 */
X "", "", "", "", "", "", "", "", /* -31 .. -24 */
X "Invalid function number",
X "File not found",
X "Path not found",
X "Too many open files",
X "Access denied",
X "Invalid file handle",
X "", /* -38 */
X "Not enough memory",
X "Memory fault",
X "", "", "", "", "",
X "Invalid drive",
X "", /* -47 */
X "Cross device rename",
X "No more files",
X "", "", "", "", "", "", /* -55 .. -50 */
X "", "", "", "", "", "",
X "Math function argument error",
X "Result out of range", /* -63 .. -56 */
X "Bad arg", /* -64 */
X "Internal error",
X "Not an executable",
X "Error setting block size", /* -67 */
X "System error", /* min-error minus 1 */
X };
X
Xchar * sys_error(num)
Xint num;
X{
X if ((num > sys_nerr) || (num < 0))
X num = 0;
X return(sys_errlist[num]);
X}
END_OF_FILE
if test 1745 -ne `wc -c <'st-error.c'`; then
echo shar: \"'st-error.c'\" unpacked with wrong size!
fi
# end of 'st-error.c'
fi
if test -f 'std-init.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'std-init.c'\"
else
echo shar: Extracting \"'std-init.c'\" \(1695 characters\)
sed "s/^X//" >'std-init.c' <<'END_OF_FILE'
X/* this is a sort of standard init frobule for general purpose
X c programs. You can replace it if you want something that
X doesn't drag in half the known universe at link time.
X*/
X
X#include <stdio.h>
X#include <file.h>
X#include <time.h>
X
X#undef stdin
X#undef stdout
X#undef stderr
X
X/* Some programs (like lex) think that they can use 'FILE *f = stdin' to */
X/* initialize f. If we collect these three file structures in an array - */
X/* we would need them anyway - these programs will not loose anymore. */
Xstruct file _std_in_out_err[3];
Xstruct file * stdin = NULL; /* these variables are for older programs */
Xstruct file * stdout = NULL;
Xstruct file * stderr = NULL;
X
Xstatic struct file * _fdopen(f, handle, mode)
Xstruct file * f;
Xint handle;
Xchar * mode;
X{
X f->handle = handle;
X
X/* I guess we have to trust that the mode string passed in matches the
X one the handle was opened with ?!? What a crock... */
X f->flags = _parse_open_options(mode);
X f->file_position = 0;
X/* should really check first... */
X f->eof_p = 0;
X f->buf_index = 0;
X f->buf_max = 0;
X f->open_p = 1;
X f->last_file_error = 0;
X}
X
Xextern clock_t _start_time; /* defined in clock.c */
X
Xint _main (n_args, args, env)
Xint n_args;
Xchar ** args;
Xchar * env; /* is this right? */
X{
X int return_code;
X
X _start_time = clock();
X stdin = &_std_in_out_err[0];
X stdout = &_std_in_out_err[1];
X stderr = &_std_in_out_err[2];
X _fdopen(stdin, 0, "r");
X _fdopen(stdout, 1, "a");
X _fdopen(stderr, 2, "w+");
X
X return_code = main(n_args, args, env);
X
X fflush(stdin); /* just fflush, it's closed by the OS */
X fflush(stdout);
X fflush(stderr);
X
X return(return_code); /* some programs want to return a status */
X}
END_OF_FILE
if test 1695 -ne `wc -c <'std-init.c'`; then
echo shar: \"'std-init.c'\" unpacked with wrong size!
fi
# end of 'std-init.c'
fi
if test -f 'time.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'time.c'\"
else
echo shar: Extracting \"'time.c'\" \(1617 characters\)
sed "s/^X//" >'time.c' <<'END_OF_FILE'
X
X/* julian date */
X/*
X * time() - liefert die anzahl der sekunden seit 1.1.1970 0:00:00 GMT
X *
X * stefan brueck 12/88
X * - korrektur 1980 -> 1970
X * - schaltjahre werden beruecksichtigt
X */
X
X#include <osbind.h>
X
X/* days in months = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; */
X
Xshort month_days[] = { 0,
X 31,
X 31 + 28,
X 31 + 28 + 31,
X 31 + 28 + 31 + 30,
X 31 + 28 + 31 + 30 + 31,
X 31 + 28 + 31 + 30 + 31 + 30,
X 31 + 28 + 31 + 30 + 31 + 30 + 31,
X 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31,
X 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30,
X 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31,
X 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30
X };
X
Xlong _time(place, tostime)
Xlong * place;
Xlong tostime;
X{
X int today, now;
X int year, month, day, hour, min, sec;
X int leap_years;
X long result;
X
X today = (tostime >> 16) & 0xFFFF;
X now = tostime & 0xFFFF;
X year = ((today >> 9) & 0x7F); /* since 1980!! */
X year += 10; /* since 1970 */
X month = (today >> 5) & 0x0F;
X if ((month < 1) || (month > 12))
X month = 1;
X day = today & 0x1F;
X hour = (now >> 11) & 0x1F;
X min = (now >> 5) & 0x3F;
X sec = (now & 0x01F) << 1;
X
X result = sec +
X (min * 60) +
X (hour * 3600) +
X ((day-1 + month_days[month-1]) * 86400) +
X year * 31536000;
X
X /* schaltjahre hinzuaddieren */
X leap_years = (year + 1) >> 2; /* since 1970 */
X if (!((year+2) & 3) && month > 2) /* im schaltjahr */
X leap_years++;
X result += leap_years * 86400;
X
X if (place)
X *place = result;
X return(result);
X}
X
Xlong time(place)
Xlong *place;
X{
X return _time(place,Gettime()); /* XBIOS = hardwareclock/ikbd */
X}
END_OF_FILE
if test 1617 -ne `wc -c <'time.c'`; then
echo shar: \"'time.c'\" unpacked with wrong size!
fi
# end of 'time.c'
fi
if test -f 'trap-1.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'trap-1.c'\"
else
echo shar: Extracting \"'trap-1.c'\" \(1609 characters\)
sed "s/^X//" >'trap-1.c' <<'END_OF_FILE'
Xextern char _in_trap;
X
Xint trap_1_wwlll(args)
Xlong args;
X{
X/* arg[0] is at a6@(8) */
X
X asm("movel a6@(24),sp@-"); /* copy l3 */
X asm("movel a6@(20),sp@-"); /* copy l2 */
X asm("movel a6@(16),sp@-"); /* copy l1 */
X asm("movel a6@(12),d0"); /* copy w2 */
X asm("movew d0,sp@-");
X asm("movel a6@(8),d0"); /* copy w1 */
X asm("movew d0,sp@-");
X asm("bset #0, __in_trap");
X asm("trap #1"); /* do the trap */
X asm("bclr #0, __in_trap");
X asm("addl #12,sp"); /* pop junk off stack */
X}
X
Xint trap_1_wlww(args)
Xlong args;
X{
X asm("movel a6@(20),d0"); /* copy w3 */
X asm("movew d0,sp@-");
X asm("movel a6@(16),d0"); /* copy w2 */
X asm("movew d0,sp@-");
X asm("movel a6@(12),sp@-"); /* copy l1 */
X asm("movel a6@(8),d0"); /* copy w1 */
X asm("movew d0,sp@-");
X asm("bset #0, __in_trap");
X asm("trap #1"); /* do the trap */
X asm("bclr #0, __in_trap");
X asm("addl #10,sp"); /* pop junk off stack */
X}
X
Xint trap_1_www(args)
Xlong args;
X{
X asm("movel a6@(16),d0"); /* copy w3 */
X asm("movew d0,sp@-");
X asm("movel a6@(12),d0"); /* copy w2 */
X asm("movew d0,sp@-");
X asm("movel a6@(8),d0"); /* copy w1 */
X asm("movew d0,sp@-");
X asm("bset #0, __in_trap");
X asm("trap #1"); /* do the trap */
X asm("bclr #0, __in_trap");
X asm("addl #6,sp"); /* pop junk off stack */
X}
X
Xint trap_1_wl(args)
Xlong args;
X{
X asm("movel a6@(12),d0"); /* copy w2 */
X asm("movel d0,sp@-");
X asm("movel a6@(8),d0"); /* copy w1 */
X asm("movew d0,sp@-");
X asm("bset #0, __in_trap");
X asm("trap #1"); /* do the trap */
X asm("bclr #0, __in_trap");
X asm("addl #6,sp"); /* pop junk off stack */
X}
END_OF_FILE
if test 1609 -ne `wc -c <'trap-1.c'`; then
echo shar: \"'trap-1.c'\" unpacked with wrong size!
fi
# end of 'trap-1.c'
fi
if test -f 'trap-13.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'trap-13.c'\"
else
echo shar: Extracting \"'trap-13.c'\" \(1792 characters\)
sed "s/^X//" >'trap-13.c' <<'END_OF_FILE'
X
Xint trap_13_www(args)
Xlong args;
X{
X/* arg[0] is at a6@(8) */
X/* push w, w, w. more later? */
X
X asm("moveml #0x3FFC,sp@-"); /* save all regs... */
X asm("movel a6@(16),d0"); /* copy w1 */
X asm("movew d0,sp@-");
X asm("movel a6@(12),d0"); /* copy w2 */
X asm("movew d0,sp@-");
X asm("movel a6@(8),d0"); /* copy w1 */
X asm("movew d0,sp@-");
X asm("bset #0, __in_trap");
X asm("trap #13"); /* do the trap */
X asm("bclr #0, __in_trap");
X asm("addl #6,sp"); /* pop junk off stack */
X asm("moveml sp@+,#0x3FFC"); /* restore regs */
X}
X
Xint trap_13_wwl(args)
Xlong args;
X{
X/* arg[0] is at a6@(8) */
X/* push w, w, l. more later? */
X
X asm("moveml #0x3FFC,sp@-"); /* save all regs... */
X asm("movel a6@(16),sp@-"); /* copy l1 */
X asm("movel a6@(12),d0"); /* copy w2 */
X asm("movew d0,sp@-");
X asm("movel a6@(8),d0"); /* copy w1 */
X asm("movew d0,sp@-");
X asm("bset #0, __in_trap");
X asm("trap #13"); /* do the trap */
X asm("bclr #0, __in_trap");
X asm("addl #8,sp"); /* pop junk off stack */
X asm("moveml sp@+,#0x3FFC"); /* restore regs */
X}
X
X
Xint trap_13_wwlwww(args)
Xlong args;
X{
X/* arg[0] is at a6@(8) */
X/* push w, w, l. more later? */
X
X asm("moveml #0x3FFC,sp@-"); /* save all regs... */
X asm("movel a6@(28),d0"); /* copy w5 */
X asm("movew d0,sp@-");
X asm("movel a6@(24),d0"); /* copy w4 */
X asm("movew d0,sp@-");
X asm("movel a6@(20),d0"); /* copy w3 */
X asm("movew d0,sp@-");
X asm("movel a6@(16),sp@-"); /* copy l1 */
X asm("movel a6@(12),d0"); /* copy w2 */
X asm("movew d0,sp@-");
X asm("movel a6@(8),d0"); /* copy w1 */
X asm("movew d0,sp@-");
X asm("bset #0, __in_trap");
X asm("trap #13"); /* do the trap */
X asm("bclr #0, __in_trap");
X asm("addl #14,sp"); /* pop junk off stack */
X asm("moveml sp@+,#0x3FFC"); /* restore regs */
X}
X
END_OF_FILE
if test 1792 -ne `wc -c <'trap-13.c'`; then
echo shar: \"'trap-13.c'\" unpacked with wrong size!
fi
# end of 'trap-13.c'
fi
if test -f 'write.c.cdiff' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'write.c.cdiff'\"
else
echo shar: Extracting \"'write.c.cdiff'\" \(1631 characters\)
sed "s/^X//" >'write.c.cdiff' <<'END_OF_FILE'
X*** terminator/write.c Fri Aug 11 18:53:23 1989
X--- new-lib/write.c Wed Aug 16 19:11:15 1989
X***************
X*** 8,9 ****
X--- 8,14 ----
X *
X+ * 1.4 er
X+ * Added /dev/null special case
X+ * Moved __col_pos from read.c to write.c because this code is always needed by
X+ * fflush in exit.c
X+ *
X * 1.3 jrd
X***************
X*** 17,19 ****
X */
X- /* #include <gembios.h> ?? */
X #include <osbind.h>
X--- 22,23 ----
X***************
X*** 27,32 ****
X
X! int write(fd, buf, nbytes)
X! int fd;
X! char *buf;
X! unsigned int nbytes;
X {
X--- 31,36 ----
X
X! int __col_pos = 0;
X!
X! int
X! write(int fd, char *buf, unsigned int nbytes)
X {
X***************
X*** 36,39 ****
X
X- extern int __col_pos;
X-
X int _write_internal(fd, buf, nbytes, binary_p)
X--- 40,41 ----
X***************
X*** 45,47 ****
X--- 47,52 ----
X char *s;
X+ int retval;
X
X+ if (fd == 1234) return(nbytes); /* /dev/null */
X+
X #ifdef DEBUG
X***************
X*** 49,50 ****
X--- 54,56 ----
X fprintf(stderr, "write_internal(%d, %X, %d, %d)\n", fd, buf, nbytes, binary_p);
X+ return Fwrite(fd, nbytes, buf);
X #endif
X***************
X*** 62,63 ****
X--- 68,71 ----
X }
X+
X+ retval = nbytes;
X for (s = buf ; nbytes > 0 ; s++, nbytes-- )
X***************
X*** 82,84 ****
X else
X! if (*s >= ' ' && *s < 0177)
X __col_pos++;
X--- 90,94 ----
X else
X! if (*s >= ' ') /* the ST *HAS* printable chars */
X! /* above 0177 (ever heard about */
X! /* non american users ???) */
X __col_pos++;
X***************
X*** 89,91 ****
X }
X! return nbytes;
X }
X--- 99,101 ----
X }
X! return retval;
X }
END_OF_FILE
if test 1631 -ne `wc -c <'write.c.cdiff'`; then
echo shar: \"'write.c.cdiff'\" unpacked with wrong size!
fi
# end of 'write.c.cdiff'
fi
echo shar: End of archive 3 \(of 7\).
cp /dev/null ark3isdone
MISSING=""
for I in 1 2 3 4 5 6 7 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 7 archives.
rm -f ark[1-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0