diff --context --new-file --recursive ../../store/tcsh-6.03/Makefile ./Makefile *** ../../store/tcsh-6.03/Makefile Tue Nov 24 13:04:36 1992 --- ./Makefile Wed Mar 10 05:54:44 1993 *************** *** 7,12 **** --- 7,16 ---- # With an input editor, command completion, etc. and ported to all sorts of # things; Paul Placeway, CIS Dept., Ohio State University # + + CROSSDIR = /usr/users1/mat91/mh1/atari/cross-gcc + CROSSBIN = $(CROSSDIR)/bin + SHELL=/bin/sh VERSION=6.03 BUILD=tcsh *************** *** 24,30 **** SUF=o CF=-c ! INCLUDES=-I. -I.. LFLAGS=$(INCLUDES) #LFLAGS=$(INCLUDES) -Zn10000 # hpux lint --- 28,35 ---- SUF=o CF=-c ! #INCLUDES=-I. -I.. ! INCLUDES=-I. LFLAGS=$(INCLUDES) #LFLAGS=$(INCLUDES) -Zn10000 # hpux lint *************** *** 49,55 **** #CFLAGS=-O $(INCLUDES) # gcc-2.1 ! CFLAGS=-O2 $(INCLUDES) # gcc 2.1 on linux #CFLAGS=-O6 -fomit-frame-pointer $(INCLUDES) --- 54,60 ---- #CFLAGS=-O $(INCLUDES) # gcc-2.1 ! #CFLAGS=-O2 $(INCLUDES) # gcc 2.1 on linux #CFLAGS=-O6 -fomit-frame-pointer $(INCLUDES) *************** *** 83,88 **** --- 88,96 ---- # Dnix 5.3 #CFLAGS = -O -X7 + # MiNT + CFLAGS = -O6 -fomit-frame-pointer -finline-functions -fstrength-reduce $(INCLUDES) + # Apollo's with cc [apollo builtins don't work with gcc] # and apollo should not define __STDC__ if it does not have # the standard header files. RT's (aos4.3) need that too; *************** *** 100,106 **** #DFLAGS=-D_VMS_POSIX # DEC/osf-1 on the alpha #DFLAGS=-D_BSD ! DFLAGS= ################################################################ --- 108,115 ---- #DFLAGS=-D_VMS_POSIX # DEC/osf-1 on the alpha #DFLAGS=-D_BSD ! # MiNT has no crypt() ! DFLAGS=-DNO_CRYPT -DINBUFSIZE=BUFSIZE ################################################################ *************** *** 117,123 **** ################################################################ ## LIBES. Pick one, or roll your own. ################################################################ ! LIBES= -ltermcap ## BSD style things, hpux #LIBES= -ltermc ## emx under OS/2 #LIBES= -ltermcap -lsec ## Tek XD88/10 (UTekV) with PW_SHADOW #LIBES= -ltermcap -lsec ## Motorola MPC (sysV88) with PW_SHADOW --- 126,132 ---- ################################################################ ## LIBES. Pick one, or roll your own. ################################################################ ! #LIBES= -ltermcap ## BSD style things, hpux #LIBES= -ltermc ## emx under OS/2 #LIBES= -ltermcap -lsec ## Tek XD88/10 (UTekV) with PW_SHADOW #LIBES= -ltermcap -lsec ## Motorola MPC (sysV88) with PW_SHADOW *************** *** 152,159 **** #LIBES= -lcurses -lnsl -lsocket -lc /usr/ucblib/libucb.a ## Stardent Vistra #LIBES= -ltermcap -lndir -lsocket -ljobs ## masscomp RTU6.0 #LIBES= -ltermcap -lauth ## for Ultrix with Enhanced Security - # The difficult choice of a c-compiler... # First, you should try your own c-compiler. # Gcc -traditional is also a safe choice. --- 161,168 ---- #LIBES= -lcurses -lnsl -lsocket -lc /usr/ucblib/libucb.a ## Stardent Vistra #LIBES= -ltermcap -lndir -lsocket -ljobs ## masscomp RTU6.0 #LIBES= -ltermcap -lauth ## for Ultrix with Enhanced Security + LIBES= -lbtermcap ## when compiling with -mbaserel in MiNT # The difficult choice of a c-compiler... # First, you should try your own c-compiler. # Gcc -traditional is also a safe choice. *************** *** 164,170 **** # The -B tells gcc to use /bin/ld. This is to avoid using the gnu ld, which # on the suns does not know how to make dynamically linked binaries. ! CC= gcc -Wall -B/bin/ #CC= gcc -m486 -Wall # Generate code for Intel 486 (linux) #CC= cc #CC= occ --- 173,179 ---- # The -B tells gcc to use /bin/ld. This is to avoid using the gnu ld, which # on the suns does not know how to make dynamically linked binaries. ! #CC= gcc -Wall -B/bin/ #CC= gcc -m486 -Wall # Generate code for Intel 486 (linux) #CC= cc #CC= occ *************** *** 173,178 **** --- 182,190 ---- #CC= /bin/cc # For suns, w/o gcc and SVR4 #CC= /usr/lib/sun.compile/cc # FPS 500 (+FPX) with Sun C compiler #CC= scc # Alliant fx2800 + #CC= $(CROSSBIN)/cgcc -Wall + CC= gcc -mbaserel -Wall # generate shareable code for MiNT + ED= ed AS= as RM= rm diff --context --new-file --recursive ../../store/tcsh-6.03/config.h ./config.h *** ../../store/tcsh-6.03/config.h --- ./config.h Tue Feb 23 21:51:32 1993 *************** *** 0 **** --- 1,125 ---- + /* + * config.h -- configure various defines for tcsh + * + * All source files should #include this FIRST. + * + * Edit this to match your system type. + */ + + /****************** System dependant compilation flags ****************/ + /* + * POSIX This system supports IEEE Std 1003.1-1988 (POSIX). + */ + #undef POSIX + + /* + * POSIXJOBS This system supports the optional IEEE Std 1003.1-1988 (POSIX) + * job control facilities. + */ + #undef POSIXJOBS + + /* + * POSIXSIGS Use the POSIX signal facilities to emulate BSD signals. + */ + #undef POSIXSIGS + + /* + * VFORK This machine has a vfork(). + * It used to be that for job control to work, this define + * was mandatory. This is not the case any more. + * If you think you still need it, but you don't have vfork, + * define this anyway and then do #define vfork fork. + * I do this anyway on a Sun because of yellow pages brain damage, + * [should not be needed under 4.1] + * and on the iris4d cause SGI's fork is sufficiently "virtual" + * that vfork isn't necessary. (Besides, SGI's vfork is weird). + * Note that some machines eg. rs6000 have a vfork, but not + * with the berkeley semantics, so we cannot use it there either. + */ + #define VFORK + + /* + * BSDJOBS You have BSD-style job control (both process groups and + * a tty that deals correctly + */ + #define BSDJOBS + + /* + * BSDSIGS You have 4.2-style signals, rather than USG style. + * Note: POSIX systems should not define this unless they + * have sigvec() and friends (ie: 4.3BSD-RENO, HP-UX). + */ + #define BSDSIGS + + /* + * BSDTIMES You have BSD-style process time stuff (like rusage) + * This may or may not be true. For example, Apple Unix + * (OREO) has BSDJOBS and BSDSIGS but not BSDTIMES. + */ + #define BSDTIMES + + /* + * BSDLIMIT You have BSD-style resource limit stuff (getrlimit/setrlimit) + */ + #define BSDLIMIT + + /* + * BSDNICE Your system uses setpriority() instead of nice, to + * change a processes scheduling priority + */ + #undef BSDNICE + + /* + * TERMIO You have struct termio instead of struct sgttyb. + * This is usually the case for SYSV systems, where + * BSD uses sgttyb. POSIX systems should define this + * anyway, even though they use struct termios. + */ + #undef TERMIO + + /* + * SYSVREL Your machine is SYSV based (HPUX, A/UX) + * NOTE: don't do this if you are on a Pyramid -- tcsh is + * built in a BSD universe. + * Set SYSVREL to 1, 2, 3, or 4, depending the version of System V + * you are running. Or set it to 0 if you are not SYSV based + */ + #define SYSVREL 0 + + /* + * YPBUGS Work around Sun YP bugs that cause expansion of ~username + * to send command output to /dev/null + */ + #undef YPBUGS + + /* + * SIGVOID Define this if your signal handlers return void. On older + * systems, signal returns int, but on newer ones, it returns void. + */ + #define SIGVOID + + /* + * HAVEDUP2 Define this if your system supports dup2(). + */ + #define HAVEDUP2 + + /* + * UTHOST Does the utmp file have a host field? + */ + #define UTHOST + + /* + * DIRENT Your system has instead of + */ + #define DIRENT + /****************** local defines *********************/ + + #ifndef __MINT__ + # define __MINT__ + #endif + + /****************** configurable hacks ****************/ + /* have been moved to config_f.h */ + #include "config_f.h" + + #undef NLS diff --context --new-file --recursive ../../store/tcsh-6.03/config_f.h ./config_f.h *** ../../store/tcsh-6.03/config_f.h Tue Nov 24 13:04:38 1992 --- ./config_f.h Thu Mar 11 00:37:34 1993 *************** *** 56,62 **** * if you don't have , you don't want * to define this. */ ! #define NLS /* * LOGINFIRST Source ~/.login before ~/.cshrc --- 56,62 ---- * if you don't have , you don't want * to define this. */ ! #undef NLS /* * LOGINFIRST Source ~/.login before ~/.cshrc *************** *** 90,96 **** * on the name of the tty, and environment. * Does not make sense in the modern window systems! */ ! #define AUTOLOGOUT /* * SUSPENDED Newer shells say 'Suspended' instead of 'Stopped'. --- 90,96 ---- * on the name of the tty, and environment. * Does not make sense in the modern window systems! */ ! #undef AUTOLOGOUT /* * SUSPENDED Newer shells say 'Suspended' instead of 'Stopped'. *************** *** 116,121 **** --- 116,144 ---- # undef SYSMALLOC #endif + #if 1 + # ifndef SYSMALLOC + # define SYSMALLOC + # endif + #endif + + /* + * HASHBANG Emulate #! interpretation (if both library and kernel don't + * support it) + */ + #define HASHBANG + + /* + * DOSFS Support DOS filessystems (which have a 12345678.123 limit), + * and allow backslashes as path separators + */ + #define DOSFS + + /* + * DOSTEXT Support DOS text mode/files (ignore 0x0d) + */ + #define DOSTEXT + /* * RCSID This defines if we want rcs strings in the binary or not * diff --context --new-file --recursive ../../store/tcsh-6.03/ed.init.c ./ed.init.c *** ../../store/tcsh-6.03/ed.init.c Tue Nov 24 13:04:28 1992 --- ./ed.init.c Thu Feb 25 04:30:40 1993 *************** *** 626,631 **** --- 626,649 ---- char buf[BUFSIZE]; chrs = read(SHIN, buf, (size_t) min(chrs, BUFSIZE - 1)); + + # ifdef DOSTEXT + /* strip out carriage returns */ + if (chrs > 0) { + char *src, *dst; + int i; + + src = dst = buf; + for (i = chrs; i > 0; --i) { + if (*src == '\r') + --chrs; + else + *dst++ = *src; + src++; + } + } + # endif + if (chrs > 0) { buf[chrs] = '\0'; Input_Line = Strsave(str2short(buf)); diff --context --new-file --recursive ../../store/tcsh-6.03/ed.inputl.c ./ed.inputl.c *** ../../store/tcsh-6.03/ed.inputl.c Tue Nov 24 13:04:30 1992 --- ./ed.inputl.c Thu Feb 25 04:33:52 1993 *************** *** 99,105 **** if (!Tty_raw_mode && MacroLvl < 0) { long chrs = 0; ! (void) ioctl(SHIN, FIONREAD, (ioctl_t) & chrs); if (chrs == 0) { if (Rawmode() < 0) return 0; --- 99,111 ---- if (!Tty_raw_mode && MacroLvl < 0) { long chrs = 0; ! # ifndef __MINT__ ! /* MiNT _always_ wants to go into raw mode, so don't bother with the ! * FIONREAD test ! */ ! (void) ioctl(SHIN, FIONREAD, (ioctl_t) & chrs); ! # endif ! if (chrs == 0) { if (Rawmode() < 0) return 0; diff --context --new-file --recursive ../../store/tcsh-6.03/pathnames.h ./pathnames.h *** ../../store/tcsh-6.03/pathnames.h Tue Nov 24 13:04:38 1992 --- ./pathnames.h Thu Feb 25 04:36:08 1993 *************** *** 69,74 **** --- 69,80 ---- # endif /* !_PATH_DOTCSHRC */ #endif /* NeXT */ + #ifdef DOSFS + # define _PATH_DOTLOGIN "/etc/login.csh" + # define _PATH_DOTLOGOUT "/etc/logout.csh" + # define _PATH_DOTCSHRC "/etc/cshrc.csh" + #endif + #if defined(sgi) || defined(OREO) || defined(cray) || defined(AMIX) || defined(CDC) # ifndef _PATH_DOTLOGIN # define _PATH_DOTLOGIN "/etc/cshrc" diff --context --new-file --recursive ../../store/tcsh-6.03/sh.c ./sh.c *** ../../store/tcsh-6.03/sh.c Tue Nov 24 13:04:16 1992 --- ./sh.c Sun Mar 7 17:43:04 1993 *************** *** 118,123 **** --- 118,128 ---- static void mailchk __P((void)); static Char **defaultpath __P((void)); + #ifdef __MINT__ + static Char **defaultsuffixes __P((void)); + void importsuffixes __P((Char *)); + #endif + int main(argc, argv) int argc; *************** *** 229,234 **** --- 234,249 ---- loginsh = (argc == 1 && getppid() == 1); #endif /* _VMS_POSIX */ + #ifdef __MINT__ + /* under MiNT, we're also a login shell if we ran from the desktop and + * have no arguments + */ + if (!loginsh && tempv[0][0] == 0 && !tempv[1]) { + loginsh = 1; + tempv[0] = "-tcsh"; + } + #endif + if (loginsh && **tempv != '-') { /* * Mangle the argv space *************** *** 373,379 **** if (loginsh || (uid == 0)) { if (*cp) { /* only for login shells or root and we must have a tty */ ! if ((cp2 = Strrchr(cp, (Char) '/')) != NULL) { cp = cp2 + 1; } if (!((Strncmp(cp, STRtty, 3) == 0) && --- 388,394 ---- if (loginsh || (uid == 0)) { if (*cp) { /* only for login shells or root and we must have a tty */ ! if ((cp2 = Lastslash(cp)) != NULL) { cp = cp2 + 1; } if (!((Strncmp(cp, STRtty, 3) == 0) && *************** *** 535,540 **** --- 550,564 ---- */ importpath(str2short(tcp)); + #ifdef __MINT__ + /* + * set the suffix search list + */ + if ((tcp = getenv("SUFFIXES")) == NULL) + set1(STRsuffixes, defaultsuffixes(), &shvhed); + else + importsuffixes(SAVE(tcp)); + #endif { /* If the SHELL environment variable ends with "tcsh", set *************** *** 769,774 **** --- 793,808 ---- */ if (nofile == 0 && argc > 0) { nofile = open(tempv[0], O_RDONLY); + #ifdef __MINT__ + /* maybe the user tried to execute "foo.csh" as just "foo" + */ + if (nofile < 0) { + char *cshfile = alloca(strlen(tempv[0]) + 5); + strcpy(cshfile, tempv[0]); + strcat(cshfile, ".csh"); + nofile = open(cshfile, O_RDONLY); + } + #endif if (nofile < 0) { child = 1; /* So this ... */ /* ... doesn't return */ *************** *** 1165,1171 **** srccat(cp, dp) Char *cp, *dp; { ! if (cp[0] == '/' && cp[1] == '\0') return srcfile(short2str(dp), (mflag ? 0 : 1), 0, NULL); else { register Char *ep = Strspl(cp, dp); --- 1199,1205 ---- srccat(cp, dp) Char *cp, *dp; { ! if (is_dirsep(cp[0]) && cp[1] == '\0') return srcfile(short2str(dp), (mflag ? 0 : 1), 0, NULL); else { register Char *ep = Strspl(cp, dp); *************** *** 1952,1957 **** --- 1986,1995 ---- #endif int i; { + #ifdef __MINT__ + void rm_tmpfiles(); + rm_tmpfiles(); /* remove temporary files, see below */ + #endif #ifdef TESLA if (loginsh && do_logout) { /* this is to send hangup signal to the develcon */ *************** *** 2018,2020 **** --- 2056,2196 ---- *blkp = NULL; return (blk); } + + #ifdef __MINT__ + /* + * unlink() doesn't always work on an open file, so we try to arrange + * to remove temporary files (e.g. for here documents) before exiting. + */ + + struct tmpfile_rec { + char *name; /* the name of the temp. file */ + int pid; /* the associated pid */ + struct tmpfile_rec *next; + } *root; + + extern int __mint; + + int + csh_tmpfile() + { + extern char *tmpnam(); + struct tmpfile_rec *u; + int fd; + char *name; + + if ( !(name = tmpnam((char *)0)) ) + return -1; + + fd = open(name, O_CREAT|O_EXCL|O_RDWR, 0600); + if (fd < 0) { + free(name); + return -1; + } + + /* in MiNT 0.9 and above, we can often unlink a file and continue to use + * it; some file systems may return EACCDN for unlinking an open file, + * in which case we use the old method of unlinking the file at exit + */ + if (__mint >= 9) { + if (unlink(name) == 0) + return fd; + } + + /* if the unlink failed, save the name for future deleting */ + + u = (struct tmpfile_rec *)malloc(sizeof(*u)); + if (!u) { + /* would it be better to fail? I dunno, but at worst the user is left + * with a junk file in a temporary directory + */ + return fd; + } + + u->name = name; + u->pid = getpid(); + u->next = root; + root = u; + return fd; + } + + void + rm_tmpfiles() + { + int pid = getpid(); + struct tmpfile_rec **old, *u; + + old = &root; + u = root; + while (u) { + if (u->pid == pid) { + (void) unlink(u->name); + *old = u->next; + } else { + old = &u->next; + } + u = u->next; + } + } + + /* MiNT suffix stuff + */ + + void + importsuffixes(cp) + Char *cp; + { + register int i = 0; + register Char *dp; + register Char **pv; + int c; + + for (dp = cp; *dp; dp++) + if (*dp == ',') + i++; + /* + * i+2 where i is the number of ',' in the suffix list. There are i+1 + * suffixes plus we need room for a zero terminator. + */ + pv = (Char **) xcalloc((size_t) (i + 2), sizeof(Char *)); + dp = cp; + i = 0; + if (*dp) + for (;;) { + if ((c = *dp) == ',' || c == 0) { + *dp = 0; + pv[i++] = Strsave(cp); + if (c) { + cp = dp + 1; + *dp = ','; + } + else + break; + } + dp++; + } + pv[i] = 0; + set1(STRsuffixes, pv, &shvhed); + } + + static Char ** + defaultsuffixes() + { + Char **blk, **blkp; + + blkp = blk = (Char **) xmalloc((size_t) sizeof(Char *) * 9); + + *blkp++ = SAVE("ttp"); + *blkp++ = SAVE("prg"); + *blkp++ = SAVE("tos"); + *blkp++ = SAVE("app"); + *blkp++ = SAVE("gtp"); + *blkp++ = SAVE("csh"); + *blkp++ = SAVE(""); + *blkp = NULL; + + return (blk); + } + + #endif /* __MINT__ */ + diff --context --new-file --recursive ../../store/tcsh-6.03/sh.char.c ./sh.char.c *** ../../store/tcsh-6.03/sh.char.c Tue Nov 24 13:04:18 1992 --- ./sh.char.c Thu Feb 25 04:57:24 1993 *************** *** 51,58 **** _CTR, _CTR|_SP|_META, _CTR|_NL|_META, _CTR, /* 12 np 13 cr 14 so 15 si */ ! _CTR, _CTR, _CTR, _CTR, ! /* 16 dle 17 dc1 18 dc2 19 dc3 */ _CTR, _CTR, _CTR, _CTR, --- 51,62 ---- _CTR, _CTR|_SP|_META, _CTR|_NL|_META, _CTR, /* 12 np 13 cr 14 so 15 si */ ! #ifndef DOSTEXT ! _CTR, _CTR, _CTR, _CTR, ! #else ! /* cr is whitespace */ ! _CTR, _CTR|_SP|_META, _CTR, _CTR, ! #endif /* 16 dle 17 dc1 18 dc2 19 dc3 */ _CTR, _CTR, _CTR, _CTR, diff --context --new-file --recursive ../../store/tcsh-6.03/sh.dir.c ./sh.dir.c *** ../../store/tcsh-6.03/sh.dir.c Tue Nov 24 13:04:18 1992 --- ./sh.dir.c Sun Mar 7 18:46:50 1993 *************** *** 242,248 **** len = Strlen(hp); if (!(dflag & DIR_LONG) && hp != NULL && !eq(hp, STRslash) && Strncmp(hp, dp->di_name, len) == 0 && ! (dp->di_name[len] == '\0' || dp->di_name[len] == '/')) len = Strlen(s = (dp->di_name + len)) + 2; else len = Strlen(s = dp->di_name) + 1; --- 242,248 ---- len = Strlen(hp); if (!(dflag & DIR_LONG) && hp != NULL && !eq(hp, STRslash) && Strncmp(hp, dp->di_name, len) == 0 && ! (dp->di_name[len] == '\0' || is_dirsep(dp->di_name[len]))) len = Strlen(s = (dp->di_name + len)) + 2; else len = Strlen(s = dp->di_name) + 1; *************** *** 301,308 **** { /* return true if dp is of the form "../xxx" or "/../xxx" */ ! #define IS_DOTDOT(sp, p) (ISDOTDOT(p) && ((p) == (sp) || *((p) - 1) == '/')) ! #define IS_DOT(sp, p) (ISDOT(p) && ((p) == (sp) || *((p) - 1) == '/')) #ifdef S_IFLNK if (exp) { --- 301,308 ---- { /* return true if dp is of the form "../xxx" or "/../xxx" */ ! #define IS_DOTDOT(sp, p) (ISDOTDOT(p) && ((p) == (sp) || is_dirsep(*((p) - 1)))) ! #define IS_DOT(sp, p) (ISDOT(p) && ((p) == (sp) || is_dirsep(*((p) - 1)))) #ifdef S_IFLNK if (exp) { *************** *** 332,338 **** * If the path starts with a slash, we are not relative to * the current working directory. */ ! if ( *start == '/' ) *cwd = '\0'; # ifdef apollo slashslash = cwd[0] == '/' && cwd[1] == '/'; --- 332,338 ---- * If the path starts with a slash, we are not relative to * the current working directory. */ ! if ( is_abspath(start) ) *cwd = '\0'; # ifdef apollo slashslash = cwd[0] == '/' && cwd[1] == '/'; *************** *** 363,369 **** *dp = '\0'; while (dotdot > 0) ! if ((dp = Strrchr(cwd, '/')) != NULL) { # ifdef apollo if (dp == &cwd[1]) slashslash = 1; --- 363,369 ---- *dp = '\0'; while (dotdot > 0) ! if ((dp = Lastslash(cwd)) != NULL) { # ifdef apollo if (dp == &cwd[1]) slashslash = 1; *************** *** 391,403 **** # endif /* apollo */ if (buf[0]) { ! if ((TRM(cwd[(dotdot = Strlen(cwd)) - 1])) != '/') cwd[dotdot++] = '/'; cwd[dotdot] = '\0'; ! dp = Strspl(cwd, TRM(buf[0]) == '/' ? &buf[1] : buf); xfree((ptr_t) cwd); cwd = dp; ! if ((TRM(cwd[(dotdot = Strlen(cwd)) - 1])) == '/') cwd[--dotdot] = '\0'; } if (!*cp) --- 391,403 ---- # endif /* apollo */ if (buf[0]) { ! if (! is_dirsep(TRM(cwd[(dotdot = Strlen(cwd)) - 1]))) cwd[dotdot++] = '/'; cwd[dotdot] = '\0'; ! dp = Strspl(cwd, is_dirsep(TRM(buf[0])) ? &buf[1] : buf); xfree((ptr_t) cwd); cwd = dp; ! if (is_dirsep(TRM(cwd[(dotdot = Strlen(cwd)) - 1]))) cwd[--dotdot] = '\0'; } if (!*cp) *************** *** 470,476 **** { Char *dp; ! if (*cp != '/') { register Char *p, *q; int cwdlen; --- 470,476 ---- { Char *dp; ! if (! is_abspath(cp)) { register Char *p, *q; int cwdlen; *************** *** 547,553 **** serrno = errno; } ! if (cp[0] != '/' && !prefix(STRdotsl, cp) && !prefix(STRdotdotsl, cp) && (c = adrof(STRcdpath))) { Char **cdp; register Char *p; --- 547,553 ---- serrno = errno; } ! if (!is_abspath(cp) && !prefix(STRdotsl, cp) && !prefix(STRdotdotsl, cp) && (c = adrof(STRcdpath))) { Char **cdp; register Char *p; *************** *** 578,584 **** } } dp = value(cp); ! if ((dp[0] == '/' || dp[0] == '.') && chdir(short2str(dp)) >= 0) { xfree((ptr_t) cp); cp = Strsave(dp); printd = 1; --- 578,584 ---- } } dp = value(cp); ! if ((is_abspath(dp) || dp[0] == '.') && chdir(short2str(dp)) >= 0) { xfree((ptr_t) cp); cp = Strsave(dp); printd = 1; *************** *** 801,811 **** * christos: if the path given does not start with a slash prepend cwd. If * cwd does not start with a slash or the result would be too long abort(). */ ! if (*cp != '/') { Char tmpdir[MAXPATHLEN]; p1 = value(STRcwd); ! if (p1 == STRNULL || *p1 != '/') abort(); if (Strlen(p1) + Strlen(cp) + 1 >= MAXPATHLEN) abort(); --- 801,811 ---- * christos: if the path given does not start with a slash prepend cwd. If * cwd does not start with a slash or the result would be too long abort(). */ ! if (! is_abspath(cp)) { Char tmpdir[MAXPATHLEN]; p1 = value(STRcwd); ! if (p1 == STRNULL || !is_abspath(p1)) abort(); if (Strlen(p1) + Strlen(cp) + 1 >= MAXPATHLEN) abort(); *************** *** 817,823 **** } #ifdef COMMENT ! if (*cp != '/') abort(); #endif /* COMMENT */ --- 817,823 ---- } #ifdef COMMENT ! if (!is_abspath(cp)) abort(); #endif /* COMMENT */ *************** *** 827,833 **** while (*p) { /* for each component */ sp = p; /* save slash address */ ! while (*++p == '/') /* flush extra slashes */ continue; if (p != ++sp) for (p1 = sp, p2 = p; (*p1++ = *p2++) != '\0';) --- 827,833 ---- while (*p) { /* for each component */ sp = p; /* save slash address */ ! while (is_dirsep(*++p)) /* flush extra slashes */ continue; if (p != ++sp) for (p1 = sp, p2 = p; (*p1++ = *p2++) != '\0';) *************** *** 835,841 **** p = sp; /* save start of component */ slash = 0; while (*++p) /* find next slash or end of path */ ! if (*p == '/') { slash = 1; *p = 0; break; --- 835,841 ---- p = sp; /* save start of component */ slash = 0; while (*++p) /* find next slash or end of path */ ! if (is_dirsep(*p)) { slash = 1; *p = 0; break; *************** *** 885,896 **** */ for (p1 = p; *p1++;) continue; ! if (*link != '/') { /* * Relative path, expand it between the "yyy/" and the * "/..". First, back sp up to the character past "yyy/". */ ! while (*--sp != '/') continue; sp++; *sp = 0; --- 885,896 ---- */ for (p1 = p; *p1++;) continue; ! if (! is_abspath(link)) { /* * Relative path, expand it between the "yyy/" and the * "/..". First, back sp up to the character past "yyy/". */ ! while (!is_dirsep(*--sp)) continue; sp++; *sp = 0; *************** *** 942,948 **** #endif /* S_IFLNK */ *sp = '/'; if (sp != cp) ! while (*--sp != '/') continue; if (slash) { for (p1 = sp + 1, p2 = p + 1; (*p1++ = *p2++) != '\0';) --- 942,948 ---- #endif /* S_IFLNK */ *sp = '/'; if (sp != cp) ! while (!is_dirsep(*--sp)) continue; if (slash) { for (p1 = sp + 1, p2 = p + 1; (*p1++ = *p2++) != '\0';) *************** *** 979,991 **** */ for (p1 = p; *p1++;) continue; ! if (*link != '/') { /* * Relative path, expand it between the "yyy/" and the * remainder. First, back sp up to the character past * "yyy/". */ ! while (*--sp != '/') continue; sp++; *sp = 0; --- 979,991 ---- */ for (p1 = p; *p1++;) continue; ! if (! is_abspath(link)) { /* * Relative path, expand it between the "yyy/" and the * remainder. First, back sp up to the character past * "yyy/". */ ! while (! is_dirsep(*--sp)) continue; sp++; *sp = 0; *************** *** 1049,1056 **** /* * See if we're not in a subdir of STRhome */ ! if (p1 && *p1 == '/' && ! (Strncmp(p1, cp, cc) != 0 || (cp[cc] != '/' && cp[cc] != '\0'))) { static ino_t home_ino = (ino_t) -1; static dev_t home_dev = -1; static Char *home_ptr = NULL; --- 1049,1056 ---- /* * See if we're not in a subdir of STRhome */ ! if (p1 && is_abspath(p1) && ! (Strncmp(p1, cp, cc) != 0 || (!is_dirsep(cp[cc]) && cp[cc] != '\0'))) { static ino_t home_ino = (ino_t) -1; static dev_t home_dev = -1; static Char *home_ptr = NULL; *************** *** 1075,1081 **** sp = (Char *) - 1; break; } ! if ((sp = Strrchr(p2, '/')) != NULL) *sp = '\0'; } /* --- 1075,1081 ---- sp = (Char *) - 1; break; } ! if ((sp = Lastslash(p2)) != NULL) *sp = '\0'; } /* diff --context --new-file --recursive ../../store/tcsh-6.03/sh.dol.c ./sh.dol.c *** ../../store/tcsh-6.03/sh.dol.c Tue Nov 24 13:04:18 1992 --- ./sh.dol.c Thu Feb 25 05:37:04 1993 *************** *** 480,485 **** --- 480,491 ---- if (length) stderror(ERR_NOTALLOWED, "$%<"); for (np = wbuf; read(OLDSTD, &tnp, 1) == 1; np++) { + #ifdef DOSTEXT + /* strip out cr's */ + while (tnp == '\r') { + if (read(OLDSTD, &tnp, 1) != 1) break; + } + #endif *np = (unsigned char) tnp; if (np >= &wbuf[BUFSIZE - 1]) stderror(ERR_LTOOLONG); *************** *** 940,945 **** --- 946,961 ---- register Char *lbp, *obp, *mbp; Char **vp; bool quoted; + #ifdef __MINT__ + int tf; + extern int csh_tmpfile __P((void)); /* in sh.c */ + + tf = csh_tmpfile(); + if (tf < 0) + stderror(ERR_SYSTEM, "tmpfile", strerror(errno)); + (void)dup2(tf, 0); + (void)close(tf); + #else char *tmp; if (creat(tmp = short2str(shtemp), 0600) < 0) *************** *** 953,958 **** --- 969,976 ---- stderror(ERR_SYSTEM, tmp, strerror(errno)); } (void) unlink(tmp); /* 0 0 inode! */ + #endif /* __MINT__ */ + Dv[0] = term; Dv[1] = NULL; gflag = 0; diff --context --new-file --recursive ../../store/tcsh-6.03/sh.exec.c ./sh.exec.c *** ../../store/tcsh-6.03/sh.exec.c Tue Nov 24 13:04:18 1992 --- ./sh.exec.c Wed Mar 10 08:54:36 1993 *************** *** 49,54 **** --- 49,60 ---- # define FASTHASH /* Fast hashing is the default */ #endif /* OLDHASH */ + #ifdef __MINT__ + extern char **environ; + int csh_execve __P((char *, char **, char **)); + #define execv(f, t) csh_execve(f, t, environ) + #endif + /* * System level search and execute of a command. * We look in each directory for the specified command name. *************** *** 180,190 **** #endif /* VFORK */ v = adrof(STRpath); ! if (v == 0 && expath[0] != '/') { blkfree(pv); pexerr(); } ! slash = any(short2str(expath), '/'); /* * Glob the argument list, if necessary. Otherwise trim off the quote bits. --- 186,196 ---- #endif /* VFORK */ v = adrof(STRpath); ! if (v == 0 && !is_abspath(expath)) { blkfree(pv); pexerr(); } ! slash = has_slash(short2str(expath)); /* * Glob the argument list, if necessary. Otherwise trim off the quote bits. *************** *** 266,272 **** * one at a time, as the user enters them. This is kinda like Korn * Shell's "tracked aliases". */ ! if (!slash && pv[0][0] == '/' && havhash) { #ifdef FASTHASH if (!bit(hashval, i)) goto cont; --- 272,278 ---- * one at a time, as the user enters them. This is kinda like Korn * Shell's "tracked aliases". */ ! if (!slash && is_abspath(pv[0]) && havhash) { #ifdef FASTHASH if (!bit(hashval, i)) goto cont; *************** *** 421,427 **** --- 427,438 ---- */ if ((fd = open(f, O_RDONLY)) != -1) { if (read(fd, (char *) pref, 2) == 2) { + #ifndef DOSTEXT if (!Isprint(pref[0]) && (pref[0] != '\n' && pref[0] != '\t')) { + #else + if (!Isprint(pref[0]) && (pref[0] != '\n' && pref[0] != '\t' + && pref[0] != '\r')) { + #endif (void) close(fd); /* * We *know* what ENOEXEC means. *************** *** 637,642 **** --- 648,657 ---- struct varent *v = adrof(STRpath); Char **pv; int hashval; + #ifdef __MINT__ + struct varent *suffv = adrof(STRsuffixes); + Char **suffpv; + #endif #ifdef FASTHASH if (vv && vv[1]) { *************** *** 677,683 **** if (v == NULL) return; for (pv = v->vec; *pv; pv++, i++) { ! if (pv[0][0] != '/') continue; dirp = opendir(short2str(*pv)); if (dirp == NULL) --- 692,698 ---- if (v == NULL) return; for (pv = v->vec; *pv; pv++, i++) { ! if (! is_abspath(pv[0])) continue; dirp = opendir(short2str(*pv)); if (dirp == NULL) *************** *** 696,701 **** --- 711,729 ---- (dp->d_name[1] == '\0' || (dp->d_name[1] == '.' && dp->d_name[2] == '\0'))) continue; + #ifdef __MINT__ + { char *s = rindex(dp->d_name, '.'); + + if (s && suffv) { + for (suffpv = suffv->vec; *suffpv; suffpv++) { + if (!strcmp(s+1, short2str(*suffpv))) { + *s = 0; break; + } + } + } + } + #endif /* __MINT__ */ + #ifdef FASTHASH hashval = hashname(str2short(dp->d_name)); bis(hashval, i); *************** *** 769,775 **** register Char **pv; register Char *sav; register struct varent *v; ! register bool slash = any(short2str(name), '/'); register int hashval, i; v = adrof(STRpath); --- 797,803 ---- register Char **pv; register Char *sav; register struct varent *v; ! register bool slash = has_slash(short2str(name)); register int hashval, i; v = adrof(STRpath); *************** *** 781,787 **** hashval = havhash ? hashname(name) : 0; i = 0; do { ! if (!slash && pv[0][0] == '/' && havhash) { #ifdef FASTHASH if (!bit(hashval, i)) goto cont; --- 809,815 ---- hashval = havhash ? hashname(name) : 0; i = 0; do { ! if (!slash && is_abspath(pv[0]) && havhash) { #ifdef FASTHASH if (!bit(hashval, i)) goto cont; *************** *** 827,832 **** --- 855,912 ---- * if dir_ok is set and the pathname refers to a directory. * This is a bit kludgy, but in the name of optimization... */ + #ifdef __MINT__ + int + executable(dir, name, dir_ok) + Char *dir, *name; + bool dir_ok; + { + char *ext, *base; + struct stat stbuf; + Char path[MAXPATHLEN + 1]; + char *strname; + struct varent *v; + Char **pv; + + if (dir && *dir) { + copyn(path, dir, MAXPATHLEN); + catn(path, name, MAXPATHLEN); + strname = short2str(path); + } + else + strname = short2str(name); + + ext = base = alloca(strlen(strname) + 5); + while (*strname) + *ext++ = *strname++; + + *ext = 0; + + if (stat(base, &stbuf) != -1 && + ((dir_ok && S_ISDIR(stbuf.st_mode)) || + (S_ISREG(stbuf.st_mode) && + ((stbuf.st_mode & (S_IXOTH|S_IXGRP|S_IXUSR)))))) + return 1; + + if (dir_ok) return 0; + + v = adrof(STRsuffixes); + if (v == 0) return 0; + + *ext++ = '.'; + for (pv = v->vec; *pv; pv++) { + strcpy(ext, short2str(*pv)); + if (stat(base, &stbuf) != -1 && + (S_ISREG(stbuf.st_mode) && + ((stbuf.st_mode & (S_IXOTH|S_IXGRP|S_IXUSR)) || + !strcmp(ext, "csh")))) + return 1; + } + return 0; + } + + #else /* __MINT__ */ + int executable(dir, name, dir_ok) Char *dir, *name; *************** *** 851,856 **** --- 931,937 ---- (stbuf.st_mode & (S_IXOTH | S_IXGRP | S_IXUSR)) && access(strname, X_OK) == 0))); } + #endif /* __MINT__ */ void tellmewhat(lex) *************** *** 910,916 **** if ((i = iscommand(strip(sp->word))) != 0) { register Char **pv; register struct varent *v; ! bool slash = any(short2str(sp->word), '/'); v = adrof(STRpath); if (v == 0 || v->vec[0] == 0 || slash) --- 991,997 ---- if ((i = iscommand(strip(sp->word))) != 0) { register Char **pv; register struct varent *v; ! bool slash = has_slash(short2str(sp->word)); v = adrof(STRpath); if (v == 0 || v->vec[0] == 0 || slash) *************** *** 975,981 **** Char *sv; int hashval, i, ex, rval = 0; ! if (prt && any(short2str(cmd), '/')) { xprintf("where: / in command makes no sense\n"); return 0; } --- 1056,1062 ---- Char *sv; int hashval, i, ex, rval = 0; ! if (prt && has_slash(short2str(cmd))) { xprintf("where: / in command makes no sense\n"); return 0; } *************** *** 1042,1044 **** --- 1123,1163 ---- xfree((ptr_t) sv); return rval; } + + #ifdef __MINT__ + + #include + + int + csh_execve(path, argv, envp) + char *path; + char **argv, **envp; + { + char *newpath, *s; + Char **pv; + struct varent *v; + + newpath = s = alloca(strlen(path) + 5); + while (*path) { + *s++ = *path++; + } + *s = 0; + + if (access(newpath, 0) == 0) + return _spawnve(P_OVERLAY, newpath, argv, envp); + + v = adrof(STRsuffixes); + if (v == 0) + return -1; + *s++ = '.'; + + for (pv = v->vec; *pv; pv++) { + strcpy(s, short2str(*pv)); + if (access(newpath, 0) == 0) { + return _spawnve(P_OVERLAY, newpath, argv, envp); + } + } + return -1; + } + #endif /* __MINT__ */ + diff --context --new-file --recursive ../../store/tcsh-6.03/sh.file.c ./sh.file.c *** ../../store/tcsh-6.03/sh.file.c Tue Nov 24 13:04:18 1992 --- ./sh.file.c Fri Feb 26 01:26:22 1993 *************** *** 407,413 **** if (old[0] != '~') return (Strcpy(new, old)); ! for (p = person, o = &old[1]; *o && *o != '/'; *p++ = *o++); *p = '\0'; if (person[0] == '\0') (void) Strcpy(new, value(STRhome)); --- 407,413 ---- if (old[0] != '~') return (Strcpy(new, old)); ! for (p = person, o = &old[1]; *o && !is_dirsep(*o); *p++ = *o++); *p = '\0'; if (person[0] == '\0') (void) Strcpy(new, value(STRhome)); *************** *** 502,508 **** { register Char *p; ! p = Strrchr(path, '/'); if (p == NULL) { copyn(name, path, MAXNAMLEN); dir[0] = '\0'; --- 502,508 ---- { register Char *p; ! p = Lastslash(path); if (p == NULL) { copyn(name, path, MAXNAMLEN); dir[0] = '\0'; *************** *** 590,596 **** if (items != NULL) FREE_ITEMS(items); ! looking_for_lognames = (*word == '~') && (Strchr(word, '/') == NULL); if (looking_for_lognames) { #ifndef _VMS_POSIX (void) setpwent(); --- 590,596 ---- if (items != NULL) FREE_ITEMS(items); ! looking_for_lognames = (*word == '~') && (Has_slash(word) == NULL); if (looking_for_lognames) { #ifndef _VMS_POSIX (void) setpwent(); diff --context --new-file --recursive ../../store/tcsh-6.03/sh.func.c ./sh.func.c *** ../../store/tcsh-6.03/sh.func.c Tue Nov 24 13:04:20 1992 --- ./sh.func.c Fri Feb 26 01:32:22 1993 *************** *** 66,71 **** --- 66,75 ---- static void toend __P((void)); static void xecho __P((int, Char **)); + #ifdef __MINT__ + extern void importsuffixes __P((Char *)); /* in sh.c */ + #endif + struct biltins * isbfunc(t) struct command *t; *************** *** 276,282 **** --- 280,297 ---- islogin(); rechist(NULL); (void) signal(SIGTERM, parterm); + #ifdef __MINT__ + { + extern int csh_execve __P((char *, char **, char **)); /* in sh.exec.c */ + extern char **environ; + char *args[3]; + + args[0] = "login"; args[1] = short2str(v[1]); args[2] = NULL; + (void)csh_execve(_PATH_LOGIN, args, environ); + } + #else (void) execl(_PATH_LOGIN, "login", short2str(v[1]), NULL); + #endif untty(); xexit(1); } *************** *** 1190,1195 **** --- 1205,1216 ---- importpath(lp); dohash(NULL, NULL); } + #ifdef __MINT__ + else if (eq(vp, STRSUFFIXES)) { + importsuffixes(lp); + dohash(NULL, NULL); + } + #endif /* __MINT__ */ #ifdef apollo else if (eq(vp, STRSYSTYPE)) dohash(NULL, NULL); *************** *** 1313,1318 **** --- 1334,1343 ---- if (eq(name, STRNOREBIND)) NoNLSRebind = 0; + #ifdef __MINT__ + else if (eq(name, STRSUFFIXES)) + dohash(NULL, NULL); + #endif #ifdef apollo else if (eq(name, STRSYSTYPE)) dohash(NULL, NULL); diff --context --new-file --recursive ../../store/tcsh-6.03/sh.glob.c ./sh.glob.c *** ../../store/tcsh-6.03/sh.glob.c Tue Nov 24 13:04:20 1992 --- ./sh.glob.c Sun Mar 7 18:17:44 1993 *************** *** 97,103 **** *gstart++ = *s++; u = s; for (b = gstart, e = &gbuf[BUFSIZE - 1]; ! *s && *s != '/' && *s != ':' && b < e; *b++ = *s++) continue; *b = EOS; --- 97,103 ---- *gstart++ = *s++; u = s; for (b = gstart, e = &gbuf[BUFSIZE - 1]; ! *s && !is_dirsep(*s) && *s != ':' && b < e; *b++ = *s++) continue; *b = EOS; *************** *** 135,141 **** * kfk - 17 Jan 1984 - stack hack allows user to get at arbitrary dir names * in stack. PWP: let =foobar pass through (for X windows) */ ! if (old[1] == '-' && (old[2] == '\0' || old[2] == '/')) { /* =- */ dig = -1; b = &old[2]; --- 135,141 ---- * kfk - 17 Jan 1984 - stack hack allows user to get at arbitrary dir names * in stack. PWP: let =foobar pass through (for X windows) */ ! if (old[1] == '-' && (old[2] == '\0' || is_dirsep(old[2]))) { /* =- */ dig = -1; b = &old[2]; *************** *** 145,151 **** dig = old[1] - '0'; for (b = &old[2]; Isdigit(*b); b++) dig = dig * 10 + (*b - '0'); ! if (*b != '\0' && *b != '/') /* =foobar */ return old; } --- 145,151 ---- dig = old[1] - '0'; for (b = &old[2]; Isdigit(*b); b++) dig = dig * 10 + (*b - '0'); ! if (*b != '\0' && !is_dirsep(*b)) /* =foobar */ return old; } *************** *** 674,680 **** else if (isglob(*c)) gflag |= G_GLOB; else if (symlinks == SYM_EXPAND && ! *p && ISDOTDOT(c) && (c == *(t-1) || *(c-1) == '/') ) gflag |= G_CSH; } } --- 674,680 ---- else if (isglob(*c)) gflag |= G_GLOB; else if (symlinks == SYM_EXPAND && ! *p && ISDOTDOT(c) && (c == *(t-1) || is_dirsep(*(c-1))) ) gflag |= G_CSH; } } *************** *** 834,839 **** --- 834,855 ---- do icnt = read(pvec[0], tibuf, BUFSIZE); while (icnt == -1 && errno == EINTR); + #ifdef DOSTEXT + /* strip out carriage returns */ + { + char *src, *dst; + int i; + src = dst = tibuf; + + for (i = icnt; i > 0; --i) { + if (*src == '\r') + --icnt; + else + *dst++ = *src; + src++; + } + } + #endif if (icnt <= 0) { c = -1; break; diff --context --new-file --recursive ../../store/tcsh-6.03/sh.h ./sh.h *** ../../store/tcsh-6.03/sh.h Tue Nov 24 13:04:24 1992 --- ./sh.h Fri Feb 26 01:46:40 1993 *************** *** 177,183 **** #ifdef _SEQUENT_ # include #endif /* _SEQUENT_ */ ! #if defined(POSIX) || SYSVREL > 0 # include #endif /* POSIX || SYSVREL > 0 */ --- 177,183 ---- #ifdef _SEQUENT_ # include #endif /* _SEQUENT_ */ ! #if defined(POSIX) || SYSVREL > 0 || defined(__MINT__) # include #endif /* POSIX || SYSVREL > 0 */ *************** *** 190,195 **** --- 190,199 ---- #endif /* _MINIX && vmsposix atp */ #include + #ifdef __MINT__ + #include + #endif + #if defined(BSDTIMES) || defined(BSDLIMIT) # include # if SYSVREL>3 && !defined(sgi) *************** *** 223,229 **** # include #endif /* sonyrisc */ ! #ifdef POSIX /* * We should be using setpgid and setpgid * by now, but in some systems we use the --- 227,233 ---- # include #endif /* sonyrisc */ ! #if defined(POSIX) || defined(__MINT__) /* * We should be using setpgid and setpgid * by now, but in some systems we use the *************** *** 289,294 **** --- 293,305 ---- #include + #ifdef __MINT__ + /* undef E_SEEK from errno.h */ + # undef E_SEEK + # define ENOTDIR EPATH + # define ESPIPE EINVAL + #endif + #include #if __STDC__ *************** *** 353,358 **** --- 364,384 ---- # endif #endif + #ifndef DOSFS + # define is_dirsep(c) ((c) == '/') + # define is_abspath(p) (is_dirsep(*(p))) + # define lastslash(p) (strrchr((p), '/')) + # define Lastslash(p) (Strrchr((p), '/')) + # define has_slash(p) (any((p), '/')) + # define Has_slash(p) (Strrchr((p), '/')) + #else + extern int is_dirsep __P((int)); + extern int is_abspath __P((Char *)); + extern char * lastslash __P((char *)); + extern Char * Lastslash __P((Char *)); + extern int has_slash __P((char *)); + extern int Has_slash __P((Char *)); + #endif typedef int bool; diff --context --new-file --recursive ../../store/tcsh-6.03/sh.lex.c ./sh.lex.c *** ../../store/tcsh-6.03/sh.lex.c Tue Nov 24 13:04:20 1992 --- ./sh.lex.c Fri Feb 26 02:05:56 1993 *************** *** 430,436 **** for (;;) { if ((c = peekc) != 0) { peekc = 0; ! return (c); } if (lap) { if ((c = *lap++) == 0) --- 430,436 ---- for (;;) { if ((c = peekc) != 0) { peekc = 0; ! goto ret_c; } if (lap) { if ((c = *lap++) == 0) *************** *** 438,453 **** else { if (cmap(c, _META | _Q | _Q1)) c |= QUOTE; ! return (c); } } if ((c = peekd) != 0) { peekd = 0; ! return (c); } if (exclp) { if ((c = *exclp++) != 0) ! return (c); if (exclnxt && --exclc >= 0) { exclnxt = exclnxt->next; setexclp(exclnxt->word); --- 438,453 ---- else { if (cmap(c, _META | _Q | _Q1)) c |= QUOTE; ! goto ret_c; } } if ((c = peekd) != 0) { peekd = 0; ! goto ret_c; } if (exclp) { if ((c = *exclp++) != 0) ! goto ret_c; if (exclnxt && --exclc >= 0) { exclnxt = exclnxt->next; setexclp(exclnxt->word); *************** *** 475,481 **** --- 475,486 ---- } break; } + ret_c: + #ifdef DOSTEXT + return (c == '\r' ? getC1(flag) : c); + #else return (c); + #endif } static void *************** *** 1125,1134 **** case 'h': case 't': ! if (!any(short2str(cp), '/')) return (type == 't' ? Strsave(cp) : 0); wp = Strend(cp); ! while (*--wp != '/') continue; if (type == 'h') xp = Strsave(cp), xp[wp - cp] = 0; --- 1130,1139 ---- case 'h': case 't': ! if (!has_slash(short2str(cp))) return (type == 't' ? Strsave(cp) : 0); wp = Strend(cp); ! while (!is_dirsep(*--wp)) continue; if (type == 'h') xp = Strsave(cp), xp[wp - cp] = 0; *************** *** 1139,1145 **** case 'e': case 'r': wp = Strend(cp); ! for (wp--; wp >= cp && *wp != '/'; wp--) if (*wp == '.') { if (type == 'e') xp = Strsave(wp + 1); --- 1144,1150 ---- case 'e': case 'r': wp = Strend(cp); ! for (wp--; wp >= cp && !is_dirsep(*wp); wp--) if (*wp == '.') { if (type == 'e') xp = Strsave(wp + 1); *************** *** 1622,1628 **** } c = fbuf[0][fseekp - fbobp]; fseekp++; ! return (c); } again: buf = (int) fseekp / BUFSIZE; --- 1627,1633 ---- } c = fbuf[0][fseekp - fbobp]; fseekp++; ! goto ret_c; } again: buf = (int) fseekp / BUFSIZE; *************** *** 1699,1705 **** --- 1704,1716 ---- } c = fbuf[buf][(int) fseekp % BUFSIZE]; fseekp++; + + ret_c: + #ifdef DOSTEXT + return (c == '\r' ? bgetc() : c); + #else return (c); + #endif } static void diff --context --new-file --recursive ../../store/tcsh-6.03/sh.misc.c ./sh.misc.c *** ../../store/tcsh-6.03/sh.misc.c Tue Nov 24 13:04:20 1992 --- ./sh.misc.c Mon Mar 8 20:35:22 1993 *************** *** 38,43 **** --- 38,47 ---- RCSID("$Id: sh.misc.c,v 3.17 1992/10/18 00:43:08 christos Exp $") + #ifdef __MINT__ + extern int __mint; /* kernel version */ + #endif + static int renum __P((int, int)); static Char **blkend __P((Char **)); static Char **blkcat __P((Char **, Char **)); *************** *** 270,275 **** --- 274,285 ---- { register int f; + #ifdef __MINT__ + /* in TOS, all handles are shared by all processes! (ack!) */ + if (__mint == 0) + return; + #endif + if (didcch) return; didcch = 1; *************** *** 308,313 **** --- 318,326 ---- if (i == j || i < 0) return (i); #ifdef HAVEDUP2 + # ifdef __MINT__ + if (__mint != 0) /* TOS screws up dup2 */ + # endif if (j >= 0) { (void) dup2(i, j); if (j != i) *************** *** 328,333 **** --- 341,351 ---- if (i == j || i < 0 || (j < 0 && i > 2)) return (i); + #ifdef __MINT__ + if (__mint == 0 && j > 5) { + return (i <= 5) ? dup(i) : j; + } + #endif if (j >= 0) { #ifdef HAVEDUP2 (void) dup2(i, j); *************** *** 464,466 **** --- 482,567 ---- return (0); } } + + #ifdef DOSFS + + int + is_dirsep(i) + int i; + { + return i == '/' || i == '\\' ; + } + + int + is_abspath(pth) + register Char *pth; + { + return is_dirsep(TRM(*pth)) || TRM(pth[1]) == ':'; + } + + char * + lastslash(pth) + register char *pth; + { + register char *slash = 0, *s = pth, c; + + if (! s) return 0; + + while ( (c = *s++) != 0) { + if (is_dirsep(c)) + slash = s - 1; + } + if (slash) + return slash; + return (pth[1] == ':') ? pth : 0; + } + + Char * + Lastslash(pth) + register Char *pth; + { + register Char *slash = 0, *s = pth, c; + + if (! s) return 0; + + while ( (c = *s++) != 0) { + if (is_dirsep(c)) + slash = s - 1; + } + if (slash) + return slash; + return (pth[1] == ':') ? pth : 0; + } + + int + has_slash(pth) + register char *pth; + { + register char c; + + if (! pth) return 0; + + while ( (c = *pth++) != 0) + if (is_dirsep(c)) + return 1; + + return 0; + } + + int + Has_slash(pth) + register Char *pth; + { + register Char c; + + if (! pth) return 0; + + while ( (c = *pth++) != 0) + if (is_dirsep(c)) + return 1; + + return 0; + } + + #endif /* DOSFS */ + diff --context --new-file --recursive ../../store/tcsh-6.03/sh.proc.c ./sh.proc.c *** ../../store/tcsh-6.03/sh.proc.c Tue Nov 24 13:04:22 1992 --- ./sh.proc.c Fri Feb 26 02:23:04 1993 *************** *** 83,94 **** 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L}; # else /* !SUNOS4 && !hp9000 */ ! # ifdef masscomp /* * Initialization of this structure under RTU 4.1A & RTU 5.0 is problematic * because the first two elements are unions of a time_t and a struct timeval. * So we'll just have to trust the loader to do the "right thing", DAS DEC-90. */ static struct rusage zru; # else /* masscomp */ static struct rusage zru = {{0L, 0L}, {0L, 0L}, 0, 0, 0, 0, 0, 0, 0, --- 83,97 ---- 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L}; # else /* !SUNOS4 && !hp9000 */ ! # if defined(masscomp) || defined(__MINT__) /* * Initialization of this structure under RTU 4.1A & RTU 5.0 is problematic * because the first two elements are unions of a time_t and a struct timeval. * So we'll just have to trust the loader to do the "right thing", DAS DEC-90. */ + /* MiNT is missing a lot of fields, so we also trust the loader (we can + * trust it) to avoid getting errors from the compiler + */ static struct rusage zru; # else /* masscomp */ static struct rusage zru = {{0L, 0L}, {0L, 0L}, 0, 0, 0, 0, 0, 0, 0, *************** *** 119,124 **** --- 122,145 ---- static struct process *pgetcurr __P((struct process *)); static void okpcntl __P((void)); + #ifdef __MINT__ + /* + * MiNT's fork() is a lot like vfork() in some respects; in particular, + * if we set job control signals to SIG_DFL after fork() and then + * get a signal, our parent will never be able to reclaim the address + * space and everything will hang :-(. Solution: rather than SIG_DFL, + * set the signals to a null signal handler; if we exec(), they will + * be set to SIG_DFL automatically, and before then the signals will + * effectively be ignored. + */ + + void + sig_tmp_ign(int sig) + { + /* do nothing, and rely on the magic of restartable system calls :-) */ + } + #endif + /* * pchild - called at interrupt level by the SIGCHLD signal * indicating that at least one child has terminated or stopped *************** *** 1856,1865 **** --- 1877,1893 ---- (void) signal(SIGQUIT, ignint ? SIG_IGN : SIG_DFL); #ifdef BSDJOBS if (wanttty >= 0) { + # ifdef __MINT__ + /* see comments for sig_tmp_ign above */ + (void) signal(SIGTSTP, sig_tmp_ign); + (void) signal(SIGTTIN, sig_tmp_ign); + (void) signal(SIGTTOU, sig_tmp_ign); + # else /* make stoppable */ (void) signal(SIGTSTP, SIG_DFL); (void) signal(SIGTTIN, SIG_DFL); (void) signal(SIGTTOU, SIG_DFL); + # endif } #endif /* BSDJOBS */ (void) signal(SIGTERM, parterm); diff --context --new-file --recursive ../../store/tcsh-6.03/sh.sem.c ./sh.sem.c *** ../../store/tcsh-6.03/sh.sem.c Tue Nov 24 13:04:22 1992 --- ./sh.sem.c Fri Feb 26 02:36:24 1993 *************** *** 489,497 **** --- 489,506 ---- } # ifdef BSDJOBS if (_gv.wanttty >= 0) { + # ifdef __MINT__ + /* see sh.proc.c */ + extern void sig_tmp_ign(); + + (void) signal(SIGTSTP, sig_tmp_ign); + (void) signal(SIGTTIN, sig_tmp_ign); + (void) signal(SIGTTOU, sig_tmp_ign); + # else (void) signal(SIGTSTP, SIG_DFL); (void) signal(SIGTTIN, SIG_DFL); (void) signal(SIGTTOU, SIG_DFL); + # endif } # endif /* BSDJOBS */ *************** *** 612,619 **** --- 621,630 ---- execute(t->t_dcdr, _gv.wanttty, pv, pipeout); t->t_dcar->t_dflg |= F_PIPEOUT | (t->t_dflg & (F_PIPEIN | F_AMPERSAND | F_STDERR | F_NOINTERRUPT)); + # ifndef __MINT__ if (_gv.wanttty > 0) _gv.wanttty = 0; /* got tty already */ + # endif execute(t->t_dcar, _gv.wanttty, pipein, pv); #else /* !BACKPIPE */ t->t_dcar->t_dflg |= F_PIPEOUT | *************** *** 621,628 **** --- 632,641 ---- execute(t->t_dcar, _gv.wanttty, pipein, pv); t->t_dcdr->t_dflg |= F_PIPEIN | (t->t_dflg & (F_PIPEOUT | F_AMPERSAND | F_NOFORK | F_NOINTERRUPT)); + # ifndef __MINT__ if (_gv.wanttty > 0) _gv.wanttty = 0; /* got tty already */ + # endif execute(t->t_dcdr, _gv.wanttty, pv, pipeout); #endif /* BACKPIPE */ break; *************** *** 795,812 **** --- 808,839 ---- (void) dmove(fd, 0); } else if (flags & F_PIPEIN) { + #ifdef __MINT__ + (void) dup2(pipein[0], 0); + #else (void) close(0); (void) dup(pipein[0]); + #endif (void) close(pipein[0]); (void) close(pipein[1]); } else if ((flags & F_NOINTERRUPT) && tpgrp == -1) { + #ifdef __MINT__ + int fd = open(_PATH_DEVNULL, O_RDONLY); + (void) dup2(fd, 0); + (void) close(fd); + #else (void) close(0); (void) open(_PATH_DEVNULL, O_RDONLY); + #endif } else { + #ifdef __MINT__ + (void) dup2(OLDSTD, 0); + #else (void) close(0); (void) dup(OLDSTD); + #endif #if defined(CLOSE_ON_EXEC) && defined(CLEX_DUPS) /* * PWP: Unlike Bezerkeley 4.3, FIONCLEX for Pyramid is preserved *************** *** 853,865 **** --- 880,900 ---- is1atty = isatty(1); } else if (flags & F_PIPEOUT) { + #ifdef __MINT__ + (void) dup2(pipeout[1], 1); + #else (void) close(1); (void) dup(pipeout[1]); + #endif is1atty = 0; } else { + #ifdef __MINT__ + (void) dup2(SHOUT, 1); + #else (void) close(1); (void) dup(SHOUT); + #endif is1atty = isoutatty; # if defined(CLOSE_ON_EXEC) && defined(CLEX_DUPS) (void) close_on_exec(1, 0); *************** *** 868,878 **** --- 903,921 ---- (void) close(2); if (flags & F_STDERR) { + #ifdef __MINT__ + (void) dup2(1, 2); + #else (void) dup(1); + #endif is2atty = is1atty; } else { + #ifdef __MINT__ + (void) dup2(SHDIAG, 2); + #else (void) dup(SHDIAG); + #endif is2atty = isdiagatty; # if defined(CLOSE_ON_EXEC) && defined(CLEX_DUPS) (void) close_on_exec(2, 0); diff --context --new-file --recursive ../../store/tcsh-6.03/sh.set.c ./sh.set.c *** ../../store/tcsh-6.03/sh.set.c Tue Nov 24 13:04:22 1992 --- ./sh.set.c Mon Mar 8 05:43:22 1993 *************** *** 54,59 **** --- 54,62 ---- static struct varent *madrof __P((Char *, struct varent *)); static void unsetv1 __P((struct varent *)); static void exportpath __P((Char **)); + #ifdef __MINT__ + static void exportsuffixes __P((Char **)); + #endif static void balance __P((struct varent *, int, int)); /* *************** *** 68,73 **** --- 71,82 ---- exportpath(adrof(STRpath)->vec); dohash(NULL, NULL); } + #ifdef __MINT__ + else if (eq(vp, STRsuffixes)) { + exportsuffixes(adrof(STRsuffixes)->vec); + dohash(NULL, NULL); + } + #endif else if (eq(vp, STRhistchars)) { register Char *pn = value(vp); *************** *** 418,424 **** } else { num = 4; /* confuse lint */ ! if (sizeof(int) == num && ((unsigned int) n) == 2147483648) { *putp++ = '2'; n = 147483648; } --- 427,433 ---- } else { num = 4; /* confuse lint */ ! if (sizeof(int) == num && ((unsigned int) n) == 2147483648U) { *putp++ = '2'; n = 147483648; } *************** *** 731,736 **** --- 740,769 ---- tsetenv(STRKPATH, exppath); } + #ifdef __MINT__ + static void + exportsuffixes(val) + Char **val; + { + Char expsuff[BUFSIZE]; + static Char STRcomma[] = { ',' , '\0' }; + + expsuff[0] = 0; + if (val) + while (*val) { + if (Strlen(*val) + Strlen(expsuff) + 2 > BUFSIZE) { + xprintf("Warning: ridiculously long SUFFIXES truncated\n"); + break; + } + (void) Strcat(expsuff, *val++); + if (*val == 0 || eq(*val, STRRparen)) + break; + (void) Strcat(expsuff, STRcomma); + } + tsetenv(STRSUFFIXES, expsuff); + } + #endif /* __MINT__ */ + #ifndef lint /* * Lint thinks these have null effect diff --context --new-file --recursive ../../store/tcsh-6.03/sh.time.c ./sh.time.c *** ../../store/tcsh-6.03/sh.time.c Tue Nov 24 13:04:22 1992 --- ./sh.time.c Fri Feb 26 02:46:54 1993 *************** *** 178,183 **** --- 178,184 ---- { tvadd(&ru->ru_utime, &ru2->ru_utime); tvadd(&ru->ru_stime, &ru2->ru_stime); + #ifndef __MINT__ if (ru2->ru_maxrss > ru->ru_maxrss) ru->ru_maxrss = ru2->ru_maxrss; *************** *** 194,199 **** --- 195,201 ---- ru->ru_nsignals += ru2->ru_nsignals; ru->ru_nvcsw += ru2->ru_nvcsw; ru->ru_nivcsw += ru2->ru_nivcsw; + #endif } #else /* BSDTIMES */ *************** *** 325,331 **** --- 327,337 ---- int ms = (e->tv_sec - b->tv_sec) * 100 + (e->tv_usec - b->tv_usec) / 10000; + # ifdef __MINT__ + cp = "%Uu %Ss %E %P"; + # else cp = "%Uu %Ss %E %P %X+%Dk %I+%Oio %Fpf+%Ww"; + # endif #else # ifdef _SEQUENT_ int ms = *************** *** 416,422 **** xprintf("%ld.%01ld%%", i / 10, i % 10); /* nn.n% */ break; ! #ifdef BSDTIMES case 'W': /* number of swaps */ i = r1->ru_nswap - r0->ru_nswap; xprintf("%ld", i); --- 422,428 ---- xprintf("%ld.%01ld%%", i / 10, i % 10); /* nn.n% */ break; ! #if defined(BSDTIMES) && !defined(__MINT__) case 'W': /* number of swaps */ i = r1->ru_nswap - r0->ru_nswap; xprintf("%ld", i); diff --context --new-file --recursive ../../store/tcsh-6.03/sh.types.h ./sh.types.h *** ../../store/tcsh-6.03/sh.types.h Tue Nov 24 13:04:34 1992 --- ./sh.types.h Sat Mar 13 23:58:14 1993 *************** *** 487,492 **** --- 487,502 ---- # endif /* _SIZE_T */ #endif /* _VMS_POSIX */ + /* + * MiNT + */ + #ifdef __MINT__ + # ifndef _SIGMASK_T + # define _SIGMASK_T + typedef long sigmask_t; + # endif + #endif + /*** *** Catch all for non POSIX and/or non ANSI systems. *** Systems up to spec *should* define these automatically diff --context --new-file --recursive ../../store/tcsh-6.03/sldiffs ./sldiffs *** ../../store/tcsh-6.03/sldiffs --- ./sldiffs Sun Mar 7 18:07:24 1993 *************** *** 0 **** --- 1,3012 ---- + Common subdirectories: /usr/users/staff/hohmuth/tmp/tcsh-6.03/config and ./config + Only in .: config.h + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/config_f.h ./config_f.h + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/config_f.h Tue Nov 24 13:04:38 1992 + --- ./config_f.h Fri Feb 26 04:17:40 1993 + *************** + *** 56,62 **** + * if you don't have , you don't want + * to define this. + */ + ! #define NLS + + /* + * LOGINFIRST Source ~/.login before ~/.cshrc + --- 56,62 ---- + * if you don't have , you don't want + * to define this. + */ + ! #undef NLS + + /* + * LOGINFIRST Source ~/.login before ~/.cshrc + *************** + *** 90,96 **** + * on the name of the tty, and environment. + * Does not make sense in the modern window systems! + */ + ! #define AUTOLOGOUT + + /* + * SUSPENDED Newer shells say 'Suspended' instead of 'Stopped'. + --- 90,96 ---- + * on the name of the tty, and environment. + * Does not make sense in the modern window systems! + */ + ! #undef AUTOLOGOUT + + /* + * SUSPENDED Newer shells say 'Suspended' instead of 'Stopped'. + *************** + *** 115,120 **** + --- 115,137 ---- + #else + # undef SYSMALLOC + #endif + + + + #if 0 + + # ifndef SYSMALLOC + + # define SYSMALLOC + + # endif + + #endif + + + + /* + + * DOSFS Support DOS filessystems (which have a 12345678.123 limit), + + * and allow backslashes as path separators + + */ + + #define DOSFS + + + + /* + + * DOSTEXT Support DOS text mode/files (ignore 0x0d) + + */ + + #define DOSTEXT + + /* + * RCSID This defines if we want rcs strings in the binary or not + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/ed,init.c ./ed,init.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/ed,init.c Tue Nov 24 13:04:28 1992 + --- ./ed,init.c Thu Feb 25 04:30:40 1993 + *************** + *** 626,631 **** + --- 626,649 ---- + char buf[BUFSIZE]; + + chrs = read(SHIN, buf, (size_t) min(chrs, BUFSIZE - 1)); + + + + # ifdef DOSTEXT + + /* strip out carriage returns */ + + if (chrs > 0) { + + char *src, *dst; + + int i; + + + + src = dst = buf; + + for (i = chrs; i > 0; --i) { + + if (*src == '\r') + + --chrs; + + else + + *dst++ = *src; + + src++; + + } + + } + + # endif + + + if (chrs > 0) { + buf[chrs] = '\0'; + Input_Line = Strsave(str2short(buf)); + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/ed,input.c ./ed,input.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/ed,input.c Tue Nov 24 13:04:30 1992 + --- ./ed,input.c Thu Feb 25 04:33:52 1993 + *************** + *** 99,105 **** + if (!Tty_raw_mode && MacroLvl < 0) { + long chrs = 0; + + ! (void) ioctl(SHIN, FIONREAD, (ioctl_t) & chrs); + if (chrs == 0) { + if (Rawmode() < 0) + return 0; + --- 99,111 ---- + if (!Tty_raw_mode && MacroLvl < 0) { + long chrs = 0; + + ! # ifndef __MINT__ + ! /* MiNT _always_ wants to go into raw mode, so don't bother with the + ! * FIONREAD test + ! */ + ! (void) ioctl(SHIN, FIONREAD, (ioctl_t) & chrs); + ! # endif + ! + if (chrs == 0) { + if (Rawmode() < 0) + return 0; + Only in .: foobar + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/makefile ./makefile + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/makefile Tue Nov 24 13:04:36 1992 + --- ./makefile Tue Feb 23 21:48:04 1993 + *************** + *** 7,12 **** + --- 7,16 ---- + # With an input editor, command completion, etc. and ported to all sorts of + # things; Paul Placeway, CIS Dept., Ohio State University + # + + + + CROSSDIR = /usr/users1/mat91/mh1/atari/cross-gcc + + CROSSBIN = $(CROSSDIR)/bin + + + SHELL=/bin/sh + VERSION=6.03 + BUILD=tcsh + *************** + *** 49,58 **** + #CFLAGS=-O $(INCLUDES) + + # gcc-2.1 + ! CFLAGS=-O2 $(INCLUDES) + + # gcc 2.1 on linux + ! #CFLAGS=-O6 -fomit-frame-pointer $(INCLUDES) + + #hpux 8.0 + #CFLAGS= $(INCLUDES) +O3 -Aa + --- 53,63 ---- + #CFLAGS=-O $(INCLUDES) + + # gcc-2.1 + ! #CFLAGS=-O2 $(INCLUDES) + + # gcc 2.1 on linux + ! # MiNT + ! CFLAGS=-O6 -fomit-frame-pointer $(INCLUDES) + + #hpux 8.0 + #CFLAGS= $(INCLUDES) +O3 -Aa + *************** + *** 117,123 **** + ################################################################ + ## LIBES. Pick one, or roll your own. + ################################################################ + ! LIBES= -ltermcap ## BSD style things, hpux + #LIBES= -ltermc ## emx under OS/2 + #LIBES= -ltermcap -lsec ## Tek XD88/10 (UTekV) with PW_SHADOW + #LIBES= -ltermcap -lsec ## Motorola MPC (sysV88) with PW_SHADOW + --- 122,128 ---- + ################################################################ + ## LIBES. Pick one, or roll your own. + ################################################################ + ! #LIBES= -ltermcap ## BSD style things, hpux + #LIBES= -ltermc ## emx under OS/2 + #LIBES= -ltermcap -lsec ## Tek XD88/10 (UTekV) with PW_SHADOW + #LIBES= -ltermcap -lsec ## Motorola MPC (sysV88) with PW_SHADOW + *************** + *** 152,157 **** + --- 157,163 ---- + #LIBES= -lcurses -lnsl -lsocket -lc /usr/ucblib/libucb.a ## Stardent Vistra + #LIBES= -ltermcap -lndir -lsocket -ljobs ## masscomp RTU6.0 + #LIBES= -ltermcap -lauth ## for Ultrix with Enhanced Security + + LIBES= -lbtermcap ## when compiling with -mbaserel in MiNT + + + # The difficult choice of a c-compiler... + *************** + *** 164,170 **** + + # The -B tells gcc to use /bin/ld. This is to avoid using the gnu ld, which + # on the suns does not know how to make dynamically linked binaries. + ! CC= gcc -Wall -B/bin/ + #CC= gcc -m486 -Wall # Generate code for Intel 486 (linux) + #CC= cc + #CC= occ + --- 170,176 ---- + + # The -B tells gcc to use /bin/ld. This is to avoid using the gnu ld, which + # on the suns does not know how to make dynamically linked binaries. + ! #CC= gcc -Wall -B/bin/ + #CC= gcc -m486 -Wall # Generate code for Intel 486 (linux) + #CC= cc + #CC= occ + *************** + *** 173,178 **** + --- 179,187 ---- + #CC= /bin/cc # For suns, w/o gcc and SVR4 + #CC= /usr/lib/sun.compile/cc # FPS 500 (+FPX) with Sun C compiler + #CC= scc # Alliant fx2800 + + #CC= $(CROSSBIN)/cgcc -Wall + + CC= gcc -Wall + + + ED= ed + AS= as + RM= rm + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/pathname.h ./pathname.h + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/pathname.h Tue Nov 24 13:04:38 1992 + --- ./pathname.h Thu Feb 25 04:36:08 1993 + *************** + *** 69,74 **** + --- 69,80 ---- + # endif /* !_PATH_DOTCSHRC */ + #endif /* NeXT */ + + + #ifdef DOSFS + + # define _PATH_DOTLOGIN "/etc/login.csh" + + # define _PATH_DOTLOGOUT "/etc/logout.csh" + + # define _PATH_DOTCSHRC "/etc/cshrc.csh" + + #endif + + + #if defined(sgi) || defined(OREO) || defined(cray) || defined(AMIX) || defined(CDC) + # ifndef _PATH_DOTLOGIN + # define _PATH_DOTLOGIN "/etc/cshrc" + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,char.c ./sh,char.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,char.c Tue Nov 24 13:04:18 1992 + --- ./sh,char.c Thu Feb 25 04:57:24 1993 + *************** + *** 51,58 **** + _CTR, _CTR|_SP|_META, _CTR|_NL|_META, _CTR, + + /* 12 np 13 cr 14 so 15 si */ + ! _CTR, _CTR, _CTR, _CTR, + ! + /* 16 dle 17 dc1 18 dc2 19 dc3 */ + _CTR, _CTR, _CTR, _CTR, + + --- 51,62 ---- + _CTR, _CTR|_SP|_META, _CTR|_NL|_META, _CTR, + + /* 12 np 13 cr 14 so 15 si */ + ! #ifndef DOSTEXT + ! _CTR, _CTR, _CTR, _CTR, + ! #else + ! /* cr is whitespace */ + ! _CTR, _CTR|_SP|_META, _CTR, _CTR, + ! #endif + /* 16 dle 17 dc1 18 dc2 19 dc3 */ + _CTR, _CTR, _CTR, _CTR, + + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,dir.c ./sh,dir.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,dir.c Tue Nov 24 13:04:18 1992 + --- ./sh,dir.c Thu Feb 25 05:31:40 1993 + *************** + *** 242,248 **** + len = Strlen(hp); + if (!(dflag & DIR_LONG) && hp != NULL && !eq(hp, STRslash) && + Strncmp(hp, dp->di_name, len) == 0 && + ! (dp->di_name[len] == '\0' || dp->di_name[len] == '/')) + len = Strlen(s = (dp->di_name + len)) + 2; + else + len = Strlen(s = dp->di_name) + 1; + --- 242,248 ---- + len = Strlen(hp); + if (!(dflag & DIR_LONG) && hp != NULL && !eq(hp, STRslash) && + Strncmp(hp, dp->di_name, len) == 0 && + ! (dp->di_name[len] == '\0' || is_dirsep(dp->di_name[len])) + len = Strlen(s = (dp->di_name + len)) + 2; + else + len = Strlen(s = dp->di_name) + 1; + *************** + *** 301,308 **** + { + + /* return true if dp is of the form "../xxx" or "/../xxx" */ + ! #define IS_DOTDOT(sp, p) (ISDOTDOT(p) && ((p) == (sp) || *((p) - 1) == '/')) + ! #define IS_DOT(sp, p) (ISDOT(p) && ((p) == (sp) || *((p) - 1) == '/')) + + #ifdef S_IFLNK + if (exp) { + --- 301,308 ---- + { + + /* return true if dp is of the form "../xxx" or "/../xxx" */ + ! #define IS_DOTDOT(sp, p) (ISDOTDOT(p) && ((p) == (sp) || is_dirsep(*((p) - 1)))) + ! #define IS_DOT(sp, p) (ISDOT(p) && ((p) == (sp) || is_dirsep(*((p) - 1)))) + + #ifdef S_IFLNK + if (exp) { + *************** + *** 332,338 **** + * If the path starts with a slash, we are not relative to + * the current working directory. + */ + ! if ( *start == '/' ) + *cwd = '\0'; + # ifdef apollo + slashslash = cwd[0] == '/' && cwd[1] == '/'; + --- 332,338 ---- + * If the path starts with a slash, we are not relative to + * the current working directory. + */ + ! if ( is_abspath(start) ) + *cwd = '\0'; + # ifdef apollo + slashslash = cwd[0] == '/' && cwd[1] == '/'; + *************** + *** 363,369 **** + + *dp = '\0'; + while (dotdot > 0) + ! if ((dp = Strrchr(cwd, '/')) != NULL) { + # ifdef apollo + if (dp == &cwd[1]) + slashslash = 1; + --- 363,369 ---- + + *dp = '\0'; + while (dotdot > 0) + ! if ((dp = Lastslash(cwd)) != NULL) { + # ifdef apollo + if (dp == &cwd[1]) + slashslash = 1; + *************** + *** 391,403 **** + # endif /* apollo */ + + if (buf[0]) { + ! if ((TRM(cwd[(dotdot = Strlen(cwd)) - 1])) != '/') + cwd[dotdot++] = '/'; + cwd[dotdot] = '\0'; + ! dp = Strspl(cwd, TRM(buf[0]) == '/' ? &buf[1] : buf); + xfree((ptr_t) cwd); + cwd = dp; + ! if ((TRM(cwd[(dotdot = Strlen(cwd)) - 1])) == '/') + cwd[--dotdot] = '\0'; + } + if (!*cp) + --- 391,403 ---- + # endif /* apollo */ + + if (buf[0]) { + ! if (! is_dirsep(TRM(cwd[(dotdot = Strlen(cwd)) - 1]))) + cwd[dotdot++] = '/'; + cwd[dotdot] = '\0'; + ! dp = Strspl(cwd, is_dirsep(TRM(buf[0])) ? &buf[1] : buf); + xfree((ptr_t) cwd); + cwd = dp; + ! if (is_dirsep(TRM(cwd[(dotdot = Strlen(cwd)) - 1]))) + cwd[--dotdot] = '\0'; + } + if (!*cp) + *************** + *** 470,476 **** + { + Char *dp; + + ! if (*cp != '/') { + register Char *p, *q; + int cwdlen; + + --- 470,476 ---- + { + Char *dp; + + ! if (! is_abspath(cp)) { + register Char *p, *q; + int cwdlen; + + *************** + *** 547,553 **** + serrno = errno; + } + + ! if (cp[0] != '/' && !prefix(STRdotsl, cp) && !prefix(STRdotdotsl, cp) + && (c = adrof(STRcdpath))) { + Char **cdp; + register Char *p; + --- 547,553 ---- + serrno = errno; + } + + ! if (!is_abspath(cp) && !prefix(STRdotsl, cp) && !prefix(STRdotdotsl, cp) + && (c = adrof(STRcdpath))) { + Char **cdp; + register Char *p; + *************** + *** 578,584 **** + } + } + dp = value(cp); + ! if ((dp[0] == '/' || dp[0] == '.') && chdir(short2str(dp)) >= 0) { + xfree((ptr_t) cp); + cp = Strsave(dp); + printd = 1; + --- 578,584 ---- + } + } + dp = value(cp); + ! if ((is_abspath(dp) || dp[0] == '.') && chdir(short2str(dp)) >= 0) { + xfree((ptr_t) cp); + cp = Strsave(dp); + printd = 1; + *************** + *** 801,811 **** + * christos: if the path given does not start with a slash prepend cwd. If + * cwd does not start with a slash or the result would be too long abort(). + */ + ! if (*cp != '/') { + Char tmpdir[MAXPATHLEN]; + + p1 = value(STRcwd); + ! if (p1 == STRNULL || *p1 != '/') + abort(); + if (Strlen(p1) + Strlen(cp) + 1 >= MAXPATHLEN) + abort(); + --- 801,811 ---- + * christos: if the path given does not start with a slash prepend cwd. If + * cwd does not start with a slash or the result would be too long abort(). + */ + ! if (! is_abspath(cp)) { + Char tmpdir[MAXPATHLEN]; + + p1 = value(STRcwd); + ! if (p1 == STRNULL || !is_abspath(p1)) + abort(); + if (Strlen(p1) + Strlen(cp) + 1 >= MAXPATHLEN) + abort(); + *************** + *** 817,823 **** + } + + #ifdef COMMENT + ! if (*cp != '/') + abort(); + #endif /* COMMENT */ + + --- 817,823 ---- + } + + #ifdef COMMENT + ! if (!is_abspath(cp)) + abort(); + #endif /* COMMENT */ + + *************** + *** 827,833 **** + + while (*p) { /* for each component */ + sp = p; /* save slash address */ + ! while (*++p == '/') /* flush extra slashes */ + continue; + if (p != ++sp) + for (p1 = sp, p2 = p; (*p1++ = *p2++) != '\0';) + --- 827,833 ---- + + while (*p) { /* for each component */ + sp = p; /* save slash address */ + ! while (is_dirsep(*++p)) /* flush extra slashes */ + continue; + if (p != ++sp) + for (p1 = sp, p2 = p; (*p1++ = *p2++) != '\0';) + *************** + *** 835,841 **** + p = sp; /* save start of component */ + slash = 0; + while (*++p) /* find next slash or end of path */ + ! if (*p == '/') { + slash = 1; + *p = 0; + break; + --- 835,841 ---- + p = sp; /* save start of component */ + slash = 0; + while (*++p) /* find next slash or end of path */ + ! if (is_dirsep(*p)) { + slash = 1; + *p = 0; + break; + *************** + *** 885,896 **** + */ + for (p1 = p; *p1++;) + continue; + ! if (*link != '/') { + /* + * Relative path, expand it between the "yyy/" and the + * "/..". First, back sp up to the character past "yyy/". + */ + ! while (*--sp != '/') + continue; + sp++; + *sp = 0; + --- 885,896 ---- + */ + for (p1 = p; *p1++;) + continue; + ! if (! is_abspath(link)) { + /* + * Relative path, expand it between the "yyy/" and the + * "/..". First, back sp up to the character past "yyy/". + */ + ! while (!is_dirsep(*--sp)) + continue; + sp++; + *sp = 0; + *************** + *** 942,948 **** + #endif /* S_IFLNK */ + *sp = '/'; + if (sp != cp) + ! while (*--sp != '/') + continue; + if (slash) { + for (p1 = sp + 1, p2 = p + 1; (*p1++ = *p2++) != '\0';) + --- 942,948 ---- + #endif /* S_IFLNK */ + *sp = '/'; + if (sp != cp) + ! while (is_dirsep(*--sp)) + continue; + if (slash) { + for (p1 = sp + 1, p2 = p + 1; (*p1++ = *p2++) != '\0';) + *************** + *** 979,991 **** + */ + for (p1 = p; *p1++;) + continue; + ! if (*link != '/') { + /* + * Relative path, expand it between the "yyy/" and the + * remainder. First, back sp up to the character past + * "yyy/". + */ + ! while (*--sp != '/') + continue; + sp++; + *sp = 0; + --- 979,991 ---- + */ + for (p1 = p; *p1++;) + continue; + ! if (! is_abspath(link)) { + /* + * Relative path, expand it between the "yyy/" and the + * remainder. First, back sp up to the character past + * "yyy/". + */ + ! while (! is_dirsep(*--sp)) + continue; + sp++; + *sp = 0; + *************** + *** 1049,1056 **** + /* + * See if we're not in a subdir of STRhome + */ + ! if (p1 && *p1 == '/' && + ! (Strncmp(p1, cp, cc) != 0 || (cp[cc] != '/' && cp[cc] != '\0'))) { + static ino_t home_ino = (ino_t) -1; + static dev_t home_dev = -1; + static Char *home_ptr = NULL; + --- 1049,1056 ---- + /* + * See if we're not in a subdir of STRhome + */ + ! if (p1 && is_abspath(p1) && + ! (Strncmp(p1, cp, cc) != 0 || (!is_dirsep(cp[cc]) && cp[cc] != '\0'))) { + static ino_t home_ino = (ino_t) -1; + static dev_t home_dev = -1; + static Char *home_ptr = NULL; + *************** + *** 1075,1081 **** + sp = (Char *) - 1; + break; + } + ! if ((sp = Strrchr(p2, '/')) != NULL) + *sp = '\0'; + } + /* + --- 1075,1081 ---- + sp = (Char *) - 1; + break; + } + ! if ((sp = Lastslash(p2)) != NULL) + *sp = '\0'; + } + /* + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,dol.c ./sh,dol.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,dol.c Tue Nov 24 13:04:18 1992 + --- ./sh,dol.c Thu Feb 25 05:37:04 1993 + *************** + *** 480,485 **** + --- 480,491 ---- + if (length) + stderror(ERR_NOTALLOWED, "$%<"); + for (np = wbuf; read(OLDSTD, &tnp, 1) == 1; np++) { + + #ifdef DOSTEXT + + /* strip out cr's */ + + while (tnp == '\r') { + + if (read(OLDSTD, &tnp, 1) != 1) break; + + } + + #endif + *np = (unsigned char) tnp; + if (np >= &wbuf[BUFSIZE - 1]) + stderror(ERR_LTOOLONG); + *************** + *** 940,945 **** + --- 946,961 ---- + register Char *lbp, *obp, *mbp; + Char **vp; + bool quoted; + + #ifdef __MINT__ + + int tf; + + extern int csh_tmpfile __P((void)); /* in sh.c */ + + + + tf = csh_tmpfile(); + + if (tf < 0) + + stderror(ERR_SYSTEM, "tmpfile", strerror(errno)); + + (void)dup2(tf, 0); + + (void)close(tf); + + #else + char *tmp; + + if (creat(tmp = short2str(shtemp), 0600) < 0) + *************** + *** 953,958 **** + --- 969,976 ---- + stderror(ERR_SYSTEM, tmp, strerror(errno)); + } + (void) unlink(tmp); /* 0 0 inode! */ + + #endif /* __MINT__ */ + + + Dv[0] = term; + Dv[1] = NULL; + gflag = 0; + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,exec.c ./sh,exec.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,exec.c Tue Nov 24 13:04:18 1992 + --- ./sh,exec.c Fri Feb 26 01:23:20 1993 + *************** + *** 49,54 **** + --- 49,60 ---- + # define FASTHASH /* Fast hashing is the default */ + #endif /* OLDHASH */ + + + #ifdef __MINT__ + + extern char **environ; + + int csh_execve __P((char *, char **, char **)); + + #define execv(f, t) csh_execve(f, t, environ) + + #endif + + + /* + * System level search and execute of a command. + * We look in each directory for the specified command name. + *************** + *** 180,190 **** + #endif /* VFORK */ + + v = adrof(STRpath); + ! if (v == 0 && expath[0] != '/') { + blkfree(pv); + pexerr(); + } + ! slash = any(short2str(expath), '/'); + + /* + * Glob the argument list, if necessary. Otherwise trim off the quote bits. + --- 186,196 ---- + #endif /* VFORK */ + + v = adrof(STRpath); + ! if (v == 0 && !is_abspath(expath)) { + blkfree(pv); + pexerr(); + } + ! slash = hash_slash(short2str(expath)); + + /* + * Glob the argument list, if necessary. Otherwise trim off the quote bits. + *************** + *** 266,272 **** + * one at a time, as the user enters them. This is kinda like Korn + * Shell's "tracked aliases". + */ + ! if (!slash && pv[0][0] == '/' && havhash) { + #ifdef FASTHASH + if (!bit(hashval, i)) + goto cont; + --- 272,278 ---- + * one at a time, as the user enters them. This is kinda like Korn + * Shell's "tracked aliases". + */ + ! if (!slash && is_abspath(pv[0]) && havhash) { + #ifdef FASTHASH + if (!bit(hashval, i)) + goto cont; + *************** + *** 421,427 **** + --- 427,438 ---- + */ + if ((fd = open(f, O_RDONLY)) != -1) { + if (read(fd, (char *) pref, 2) == 2) { + + #ifndef DOSTEXT + if (!Isprint(pref[0]) && (pref[0] != '\n' && pref[0] != '\t')) { + + #else + + if (!Isprint(pref[0]) && (pref[0] != '\n' && pref[0] != '\t' + + && pref[0] != '\r')) { + + #endif + (void) close(fd); + /* + * We *know* what ENOEXEC means. + *************** + *** 453,459 **** + --- 464,472 ---- + #ifdef _PATH_BSHELL + if (fd != -1 + # ifndef ISC /* Compatible with ISC's /bin/csh */ + + # ifndef __MINT__ /* Compensate for missing #! interpretation */ + && pref[0] != '#' + + # endif + # endif /* ISC */ + ) + vp[0] = STR_BSHELL; + *************** + *** 637,642 **** + --- 650,659 ---- + struct varent *v = adrof(STRpath); + Char **pv; + int hashval; + + #ifdef __MINT__ + + struct varent *suffv = adrof(STRsuffixes); + + Char **suffpv; + + #endif + + #ifdef FASTHASH + if (vv && vv[1]) { + *************** + *** 677,683 **** + if (v == NULL) + return; + for (pv = v->vec; *pv; pv++, i++) { + ! if (pv[0][0] != '/') + continue; + dirp = opendir(short2str(*pv)); + if (dirp == NULL) + --- 694,700 ---- + if (v == NULL) + return; + for (pv = v->vec; *pv; pv++, i++) { + ! if (! is_abspath(pv[0])) + continue; + dirp = opendir(short2str(*pv)); + if (dirp == NULL) + *************** + *** 696,701 **** + --- 713,731 ---- + (dp->d_name[1] == '\0' || + (dp->d_name[1] == '.' && dp->d_name[2] == '\0'))) + continue; + + #ifdef __MINT__ + + { char *s = rindex(dp->d_name, '.'); + + + + if (s && suffv) { + + for (suffpv = suffv->vec; *suffpv; suffpv++) { + + if (!strcmp(s+1, short2str(*suffpv))) { + + *s = 0; break; + + } + + } + + } + + } + + #endif /* __MINT__ */ + + + #ifdef FASTHASH + hashval = hashname(str2short(dp->d_name)); + bis(hashval, i); + *************** + *** 769,775 **** + register Char **pv; + register Char *sav; + register struct varent *v; + ! register bool slash = any(short2str(name), '/'); + register int hashval, i; + + v = adrof(STRpath); + --- 799,805 ---- + register Char **pv; + register Char *sav; + register struct varent *v; + ! register bool slash = has_slash(short2str(name)); + register int hashval, i; + + v = adrof(STRpath); + *************** + *** 781,787 **** + hashval = havhash ? hashname(name) : 0; + i = 0; + do { + ! if (!slash && pv[0][0] == '/' && havhash) { + #ifdef FASTHASH + if (!bit(hashval, i)) + goto cont; + --- 811,817 ---- + hashval = havhash ? hashname(name) : 0; + i = 0; + do { + ! if (!slash && is_abspath(pv[0]) && havhash) { + #ifdef FASTHASH + if (!bit(hashval, i)) + goto cont; + *************** + *** 827,832 **** + --- 857,915 ---- + * if dir_ok is set and the pathname refers to a directory. + * This is a bit kludgy, but in the name of optimization... + */ + + #ifdef __MINT__ + + int + + executable(dir, name, dir_ok) + + Char *dir, *name; + + bool dir_ok; + + { + + char *ext, *base; + + int i; + + struct stat stbuf; + + Char path[MAXPATHLEN + 1]; + + char *strname; + + struct varent *v; + + Char **pv; + + + + if (dir && *dir) { + + copyn(path, dir, MAXPATHLEN); + + catn(path, name, MAXPATHLEN); + + strname = short2str(path); + + } + + else + + strname = short2str(name); + + + + ext = base = alloca(strlen(strname) + 5); + + while (*strname) + + *ext++ = *strname++; + + + + *ext = 0; + + + + if (stat(base, &stbuf) != -1 && + + ((dir_ok && S_ISDIR(stbuf.st_mode)) || + + (S_ISREG(stbuf.st_mode) && + + ((stbuf.st_mode & (S_IXOTH|S_IXGRP|S_IXUSR)))))) + + return 1; + + + + if (dir_ok) return 0; + + + + v = adrof(STRsuffixes); + + if (v == 0) return 0; + + + + *ext++ = '.'; + + for (pv = v->vec; *pv; pv++) { + + strcpy(ext, short2str(*pv)); + + if (stat(base, &stbuf) != -1 && + + (S_ISREG(stbuf.st_mode) && + + ((stbuf.st_mode & (S_IXOTH|S_IXGRP|S_IXUSR)) || + + !strcmp(ext, "csh")))) + + return 1; + + } + + return 0; + + } + + + + #else /* __MINT__ */ + + + int + executable(dir, name, dir_ok) + Char *dir, *name; + *************** + *** 851,856 **** + --- 934,940 ---- + (stbuf.st_mode & (S_IXOTH | S_IXGRP | S_IXUSR)) && + access(strname, X_OK) == 0))); + } + + #endif /* __MINT__ */ + + void + tellmewhat(lex) + *************** + *** 910,916 **** + if ((i = iscommand(strip(sp->word))) != 0) { + register Char **pv; + register struct varent *v; + ! bool slash = any(short2str(sp->word), '/'); + + v = adrof(STRpath); + if (v == 0 || v->vec[0] == 0 || slash) + --- 994,1000 ---- + if ((i = iscommand(strip(sp->word))) != 0) { + register Char **pv; + register struct varent *v; + ! bool slash = has_slash(short2str(sp->word)); + + v = adrof(STRpath); + if (v == 0 || v->vec[0] == 0 || slash) + *************** + *** 975,981 **** + Char *sv; + int hashval, i, ex, rval = 0; + + ! if (prt && any(short2str(cmd), '/')) { + xprintf("where: / in command makes no sense\n"); + return 0; + } + --- 1059,1065 ---- + Char *sv; + int hashval, i, ex, rval = 0; + + ! if (prt && has_slash(short2str(cmd))) { + xprintf("where: / in command makes no sense\n"); + return 0; + } + *************** + *** 1042,1044 **** + --- 1126,1167 ---- + xfree((ptr_t) sv); + return rval; + } + + + + #ifdef __MINT__ + + + + #include + + + + int + + csh_execve(path, argv, envp) + + char *path; + + char **argv, **envp; + + { + + int i; + + char *newpath, *s; + + Char **pv; + + struct varent *v; + + + + newpath = s = alloca(strlen(path) + 5); + + while (*path) { + + *s++ = *path++; + + } + + *s = 0; + + + + if (access(newpath, 0) == 0) + + return _spawnve(P_OVERLAY, newpath, argv, envp); + + + + v = adrof(STRsuffixes); + + if (v == 0) + + return -1; + + *s++ = '.'; + + + + for (pv = v->vec; *pv; pv++) { + + strcpy(s, short2str(*pv)); + + if (access(newpath, 0) == 0) { + + return _spawnve(P_OVERLAY, newpath, argv, envp); + + } + + } + + return -1; + + } + + #endif /* __MINT__ */ + + + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,file.c ./sh,file.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,file.c Tue Nov 24 13:04:18 1992 + --- ./sh,file.c Fri Feb 26 01:26:22 1993 + *************** + *** 407,413 **** + if (old[0] != '~') + return (Strcpy(new, old)); + + ! for (p = person, o = &old[1]; *o && *o != '/'; *p++ = *o++); + *p = '\0'; + if (person[0] == '\0') + (void) Strcpy(new, value(STRhome)); + --- 407,413 ---- + if (old[0] != '~') + return (Strcpy(new, old)); + + ! for (p = person, o = &old[1]; *o && !is_dirsep(*o); *p++ = *o++); + *p = '\0'; + if (person[0] == '\0') + (void) Strcpy(new, value(STRhome)); + *************** + *** 502,508 **** + { + register Char *p; + + ! p = Strrchr(path, '/'); + if (p == NULL) { + copyn(name, path, MAXNAMLEN); + dir[0] = '\0'; + --- 502,508 ---- + { + register Char *p; + + ! p = Lastslash(path); + if (p == NULL) { + copyn(name, path, MAXNAMLEN); + dir[0] = '\0'; + *************** + *** 590,596 **** + if (items != NULL) + FREE_ITEMS(items); + + ! looking_for_lognames = (*word == '~') && (Strchr(word, '/') == NULL); + if (looking_for_lognames) { + #ifndef _VMS_POSIX + (void) setpwent(); + --- 590,596 ---- + if (items != NULL) + FREE_ITEMS(items); + + ! looking_for_lognames = (*word == '~') && (Has_slash(word) == NULL); + if (looking_for_lognames) { + #ifndef _VMS_POSIX + (void) setpwent(); + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,func.c ./sh,func.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,func.c Tue Nov 24 13:04:20 1992 + --- ./sh,func.c Fri Feb 26 01:32:22 1993 + *************** + *** 66,71 **** + --- 66,75 ---- + static void toend __P((void)); + static void xecho __P((int, Char **)); + + + #ifdef __MINT__ + + extern void importsuffixes __P((Char *)); /* in sh.c */ + + #endif + + + struct biltins * + isbfunc(t) + struct command *t; + *************** + *** 276,282 **** + --- 280,297 ---- + islogin(); + rechist(NULL); + (void) signal(SIGTERM, parterm); + + #ifdef __MINT__ + + { + + extern int csh_execve __P((char *, char **, char **)); /* in sh.exec.c */ + + extern char **environ; + + char *args[3]; + + + + args[0] = "login"; args[1] = short2str(v[1]); args[2] = NULL; + + (void)csh_execve(_PATH_LOGIN, args, environ); + + } + + #else + (void) execl(_PATH_LOGIN, "login", short2str(v[1]), NULL); + + #endif + untty(); + xexit(1); + } + *************** + *** 1190,1195 **** + --- 1205,1216 ---- + importpath(lp); + dohash(NULL, NULL); + } + + #ifdef __MINT__ + + else if (eq(vp, STRSUFFIXES)) { + + importsuffixes(lp); + + dohash(NULL, NULL); + + } + + #endif /* __MINT__ */ + #ifdef apollo + else if (eq(vp, STRSYSTYPE)) + dohash(NULL, NULL); + *************** + *** 1313,1318 **** + --- 1334,1343 ---- + + if (eq(name, STRNOREBIND)) + NoNLSRebind = 0; + + #ifdef __MINT__ + + else if (eq(name, STRSUFFIXES)) + + dohash(NULL, NULL); + + #endif + #ifdef apollo + else if (eq(name, STRSYSTYPE)) + dohash(NULL, NULL); + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,glob.c ./sh,glob.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,glob.c Tue Nov 24 13:04:20 1992 + --- ./sh,glob.c Fri Feb 26 01:40:46 1993 + *************** + *** 97,103 **** + *gstart++ = *s++; + u = s; + for (b = gstart, e = &gbuf[BUFSIZE - 1]; + ! *s && *s != '/' && *s != ':' && b < e; + *b++ = *s++) + continue; + *b = EOS; + --- 97,103 ---- + *gstart++ = *s++; + u = s; + for (b = gstart, e = &gbuf[BUFSIZE - 1]; + ! *s && is_dirsep(*s) && *s != ':' && b < e; + *b++ = *s++) + continue; + *b = EOS; + *************** + *** 135,141 **** + * kfk - 17 Jan 1984 - stack hack allows user to get at arbitrary dir names + * in stack. PWP: let =foobar pass through (for X windows) + */ + ! if (old[1] == '-' && (old[2] == '\0' || old[2] == '/')) { + /* =- */ + dig = -1; + b = &old[2]; + --- 135,141 ---- + * kfk - 17 Jan 1984 - stack hack allows user to get at arbitrary dir names + * in stack. PWP: let =foobar pass through (for X windows) + */ + ! if (old[1] == '-' && (old[2] == '\0' || is_dirsep(old[2]))) { + /* =- */ + dig = -1; + b = &old[2]; + *************** + *** 145,151 **** + dig = old[1] - '0'; + for (b = &old[2]; Isdigit(*b); b++) + dig = dig * 10 + (*b - '0'); + ! if (*b != '\0' && *b != '/') + /* =foobar */ + return old; + } + --- 145,151 ---- + dig = old[1] - '0'; + for (b = &old[2]; Isdigit(*b); b++) + dig = dig * 10 + (*b - '0'); + ! if (*b != '\0' && !is_dirsep(*b)) + /* =foobar */ + return old; + } + *************** + *** 674,680 **** + else if (isglob(*c)) + gflag |= G_GLOB; + else if (symlinks == SYM_EXPAND && + ! *p && ISDOTDOT(c) && (c == *(t-1) || *(c-1) == '/') ) + gflag |= G_CSH; + } + } + --- 674,680 ---- + else if (isglob(*c)) + gflag |= G_GLOB; + else if (symlinks == SYM_EXPAND && + ! *p && ISDOTDOT(c) && (c == *(t-1) || is_dirsep(*(c-1))) ) + gflag |= G_CSH; + } + } + *************** + *** 834,839 **** + --- 834,855 ---- + do + icnt = read(pvec[0], tibuf, BUFSIZE); + while (icnt == -1 && errno == EINTR); + + #ifdef DOSTEXT + + /* strip out carriage returns */ + + { + + char *src, *dst; + + int i; + + src = dst = tibuf; + + + + for (i = icnt; i > 0; --i) { + + if (*src == '\r') + + --icnt; + + else + + *dst++ = *src; + + src++; + + } + + } + + #endif + if (icnt <= 0) { + c = -1; + break; + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,lex.c ./sh,lex.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,lex.c Tue Nov 24 13:04:20 1992 + --- ./sh,lex.c Fri Feb 26 02:05:56 1993 + *************** + *** 430,436 **** + for (;;) { + if ((c = peekc) != 0) { + peekc = 0; + ! return (c); + } + if (lap) { + if ((c = *lap++) == 0) + --- 430,436 ---- + for (;;) { + if ((c = peekc) != 0) { + peekc = 0; + ! goto ret_c; + } + if (lap) { + if ((c = *lap++) == 0) + *************** + *** 438,453 **** + else { + if (cmap(c, _META | _Q | _Q1)) + c |= QUOTE; + ! return (c); + } + } + if ((c = peekd) != 0) { + peekd = 0; + ! return (c); + } + if (exclp) { + if ((c = *exclp++) != 0) + ! return (c); + if (exclnxt && --exclc >= 0) { + exclnxt = exclnxt->next; + setexclp(exclnxt->word); + --- 438,453 ---- + else { + if (cmap(c, _META | _Q | _Q1)) + c |= QUOTE; + ! goto ret_c; + } + } + if ((c = peekd) != 0) { + peekd = 0; + ! goto ret_c; + } + if (exclp) { + if ((c = *exclp++) != 0) + ! goto ret_c; + if (exclnxt && --exclc >= 0) { + exclnxt = exclnxt->next; + setexclp(exclnxt->word); + *************** + *** 475,481 **** + --- 475,486 ---- + } + break; + } + + ret_c: + + #ifdef DOSTEXT + + return (c == '\r' ? getC1(flag) : c); + + #else + return (c); + + #endif + } + + static void + *************** + *** 1125,1134 **** + + case 'h': + case 't': + ! if (!any(short2str(cp), '/')) + return (type == 't' ? Strsave(cp) : 0); + wp = Strend(cp); + ! while (*--wp != '/') + continue; + if (type == 'h') + xp = Strsave(cp), xp[wp - cp] = 0; + --- 1130,1139 ---- + + case 'h': + case 't': + ! if (!has_slash(short2str(cp))) + return (type == 't' ? Strsave(cp) : 0); + wp = Strend(cp); + ! while (!is_dirsep(*--wp)) + continue; + if (type == 'h') + xp = Strsave(cp), xp[wp - cp] = 0; + *************** + *** 1139,1145 **** + case 'e': + case 'r': + wp = Strend(cp); + ! for (wp--; wp >= cp && *wp != '/'; wp--) + if (*wp == '.') { + if (type == 'e') + xp = Strsave(wp + 1); + --- 1144,1150 ---- + case 'e': + case 'r': + wp = Strend(cp); + ! for (wp--; wp >= cp && !is_dirsep(*wp); wp--) + if (*wp == '.') { + if (type == 'e') + xp = Strsave(wp + 1); + *************** + *** 1622,1628 **** + } + c = fbuf[0][fseekp - fbobp]; + fseekp++; + ! return (c); + } + again: + buf = (int) fseekp / BUFSIZE; + --- 1627,1633 ---- + } + c = fbuf[0][fseekp - fbobp]; + fseekp++; + ! goto ret_c; + } + again: + buf = (int) fseekp / BUFSIZE; + *************** + *** 1699,1705 **** + --- 1704,1716 ---- + } + c = fbuf[buf][(int) fseekp % BUFSIZE]; + fseekp++; + + + + ret_c: + + #ifdef DOSTEXT + + return (c == '\r' ? bgetc() : c); + + #else + return (c); + + #endif + } + + static void + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,misc.c ./sh,misc.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,misc.c Tue Nov 24 13:04:20 1992 + --- ./sh,misc.c Fri Feb 26 02:14:42 1993 + *************** + *** 38,43 **** + --- 38,47 ---- + + RCSID("$Id: sh.misc.c,v 3.17 1992/10/18 00:43:08 christos Exp $") + + + #ifdef __MINT__ + + extern int __mint; /* kernel version */ + + #endif + + + static int renum __P((int, int)); + static Char **blkend __P((Char **)); + static Char **blkcat __P((Char **, Char **)); + *************** + *** 270,275 **** + --- 274,285 ---- + { + register int f; + + + #ifdef __MINT__ + + /* in TOS, all handles are shared by all processes! (ack!) */ + + if (__mint == 0) + + return; + + #endif + + + if (didcch) + return; + didcch = 1; + *************** + *** 308,313 **** + --- 318,326 ---- + if (i == j || i < 0) + return (i); + #ifdef HAVEDUP2 + + # ifdef __MINT__ + + if (__mint != 0) /* TOS screws up dup2 */ + + # endif + if (j >= 0) { + (void) dup2(i, j); + if (j != i) + *************** + *** 328,333 **** + --- 341,351 ---- + + if (i == j || i < 0 || (j < 0 && i > 2)) + return (i); + + #ifdef __MINT__ + + if (__mint == 0 && j > 5) { + + return (i <= 5) ? dup(i) : j; + + } + + #endif + if (j >= 0) { + #ifdef HAVEDUP2 + (void) dup2(i, j); + *************** + *** 464,466 **** + --- 482,567 ---- + return (0); + } + } + + + + #ifdef DOSFS + + + + int + + is_dirsep(i) + + int i; + + { + + return i == '/' || i == '\\' ; + + } + + + + int + + is_abspath(pth) + + register Char *pth; + + { + + return is_dirsep(TRM(*pth)) || TRM(pth[1]) == ':'; + + } + + + + char * + + lastslash(pth) + + register char *pth; + + { + + register char *slash = 0, *s = pth, c; + + + + if (! s) return 0; + + + + while ( (c = *s++) != 0) { + + if (is_dirsep(c)) + + slash = s - 1; + + } + + if (slash) + + return slash; + + return (pth[1] == ':') ? pth : 0; + + } + + + + Char * + + Lastslash(pth) + + register Char *pth; + + { + + register Char *slash = 0, *s = pth, c; + + + + if (! s) return 0; + + + + while ( (c = *s++) != 0) { + + if (is_dirsep(c)) + + slash = s - 1; + + } + + if (slash) + + return slash; + + return (pth[1] == ':') ? pth : 0; + + } + + + + int + + hasslash(pth) + + register char *pth; + + { + + register char c; + + + + if (! pth) return 0; + + + + while ( (c = *pth++) != 0) + + if (is_dirsep(c)) + + return 1; + + + + return 0; + + } + + + + int + + Hasslash(pth) + + register Char *pth; + + { + + register Char c; + + + + if (! pth) return 0; + + + + while ( (c = *pth++) != 0) + + if (is_dirsep(c)) + + return 1; + + + + return 0; + + } + + + + #endif /* DOSFS */ + + + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,proc.c ./sh,proc.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,proc.c Tue Nov 24 13:04:22 1992 + --- ./sh,proc.c Fri Feb 26 02:23:04 1993 + *************** + *** 83,94 **** + 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L}; + + # else /* !SUNOS4 && !hp9000 */ + ! # ifdef masscomp + /* + * Initialization of this structure under RTU 4.1A & RTU 5.0 is problematic + * because the first two elements are unions of a time_t and a struct timeval. + * So we'll just have to trust the loader to do the "right thing", DAS DEC-90. + */ + static struct rusage zru; + # else /* masscomp */ + static struct rusage zru = {{0L, 0L}, {0L, 0L}, 0, 0, 0, 0, 0, 0, 0, + --- 83,97 ---- + 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L}; + + # else /* !SUNOS4 && !hp9000 */ + ! # if defined(masscomp) || defined(__MINT__) + /* + * Initialization of this structure under RTU 4.1A & RTU 5.0 is problematic + * because the first two elements are unions of a time_t and a struct timeval. + * So we'll just have to trust the loader to do the "right thing", DAS DEC-90. + */ + + /* MiNT is missing a lot of fields, so we also trust the loader (we can + + * trust it) to avoid getting errors from the compiler + + */ + static struct rusage zru; + # else /* masscomp */ + static struct rusage zru = {{0L, 0L}, {0L, 0L}, 0, 0, 0, 0, 0, 0, 0, + *************** + *** 119,124 **** + --- 122,145 ---- + static struct process *pgetcurr __P((struct process *)); + static void okpcntl __P((void)); + + + #ifdef __MINT__ + + /* + + * MiNT's fork() is a lot like vfork() in some respects; in particular, + + * if we set job control signals to SIG_DFL after fork() and then + + * get a signal, our parent will never be able to reclaim the address + + * space and everything will hang :-(. Solution: rather than SIG_DFL, + + * set the signals to a null signal handler; if we exec(), they will + + * be set to SIG_DFL automatically, and before then the signals will + + * effectively be ignored. + + */ + + + + void + + sig_tmp_ign(int sig) + + { + + /* do nothing, and rely on the magic of restartable system calls :-) */ + + } + + #endif + + + /* + * pchild - called at interrupt level by the SIGCHLD signal + * indicating that at least one child has terminated or stopped + *************** + *** 1856,1865 **** + --- 1877,1893 ---- + (void) signal(SIGQUIT, ignint ? SIG_IGN : SIG_DFL); + #ifdef BSDJOBS + if (wanttty >= 0) { + + # ifdef __MINT__ + + /* see comments for sig_tmp_ign above */ + + (void) signal(SIGTSTP, sig_tmp_ign); + + (void) signal(SIGTTIN, sig_tmp_ign); + + (void) signal(SIGTTOU, sig_tmp_ign); + + # else + /* make stoppable */ + (void) signal(SIGTSTP, SIG_DFL); + (void) signal(SIGTTIN, SIG_DFL); + (void) signal(SIGTTOU, SIG_DFL); + + # endif + } + #endif /* BSDJOBS */ + (void) signal(SIGTERM, parterm); + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,sem.c ./sh,sem.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,sem.c Tue Nov 24 13:04:22 1992 + --- ./sh,sem.c Fri Feb 26 02:36:24 1993 + *************** + *** 489,497 **** + --- 489,506 ---- + } + # ifdef BSDJOBS + if (_gv.wanttty >= 0) { + + # ifdef __MINT__ + + /* see sh.proc.c */ + + extern void sig_tmp_ign(); + + + + (void) signal(SIGTSTP, sig_tmp_ign); + + (void) signal(SIGTTIN, sig_tmp_ign); + + (void) signal(SIGTTOU, sig_tmp_ign); + + # else + (void) signal(SIGTSTP, SIG_DFL); + (void) signal(SIGTTIN, SIG_DFL); + (void) signal(SIGTTOU, SIG_DFL); + + # endif + } + # endif /* BSDJOBS */ + + *************** + *** 612,619 **** + --- 621,630 ---- + execute(t->t_dcdr, _gv.wanttty, pv, pipeout); + t->t_dcar->t_dflg |= F_PIPEOUT | + (t->t_dflg & (F_PIPEIN | F_AMPERSAND | F_STDERR | F_NOINTERRUPT)); + + # ifndef __MINT__ + if (_gv.wanttty > 0) + _gv.wanttty = 0; /* got tty already */ + + # endif + execute(t->t_dcar, _gv.wanttty, pipein, pv); + #else /* !BACKPIPE */ + t->t_dcar->t_dflg |= F_PIPEOUT | + *************** + *** 621,628 **** + --- 632,641 ---- + execute(t->t_dcar, _gv.wanttty, pipein, pv); + t->t_dcdr->t_dflg |= F_PIPEIN | (t->t_dflg & + (F_PIPEOUT | F_AMPERSAND | F_NOFORK | F_NOINTERRUPT)); + + # ifndef __MINT__ + if (_gv.wanttty > 0) + _gv.wanttty = 0; /* got tty already */ + + # endif + execute(t->t_dcdr, _gv.wanttty, pv, pipeout); + #endif /* BACKPIPE */ + break; + *************** + *** 795,812 **** + --- 808,839 ---- + (void) dmove(fd, 0); + } + else if (flags & F_PIPEIN) { + + #ifdef __MINT__ + + (void) dup2(pipein[0], 0); + + #else + (void) close(0); + (void) dup(pipein[0]); + + #endif + (void) close(pipein[0]); + (void) close(pipein[1]); + } + else if ((flags & F_NOINTERRUPT) && tpgrp == -1) { + + #ifdef __MINT__ + + int fd = open(_PATH_DEVNULL, O_RDONLY); + + (void) dup2(fd, 0); + + (void) close(fd); + + #else + (void) close(0); + (void) open(_PATH_DEVNULL, O_RDONLY); + + #endif + } + else { + + #ifdef __MINT__ + + (void) dup2(OLDSTD, 0); + + #else + (void) close(0); + (void) dup(OLDSTD); + + #endif + #if defined(CLOSE_ON_EXEC) && defined(CLEX_DUPS) + /* + * PWP: Unlike Bezerkeley 4.3, FIONCLEX for Pyramid is preserved + *************** + *** 853,865 **** + --- 880,900 ---- + is1atty = isatty(1); + } + else if (flags & F_PIPEOUT) { + + #ifdef __MINT__ + + (void) dup2(pipeout[1], 1); + + #else + (void) close(1); + (void) dup(pipeout[1]); + + #endif + is1atty = 0; + } + else { + + #ifdef __MINT__ + + (void) dup2(SHOUT, 1); + + #else + (void) close(1); + (void) dup(SHOUT); + + #endif + is1atty = isoutatty; + # if defined(CLOSE_ON_EXEC) && defined(CLEX_DUPS) + (void) close_on_exec(1, 0); + *************** + *** 868,878 **** + --- 903,921 ---- + + (void) close(2); + if (flags & F_STDERR) { + + #ifdef __MINT__ + + (void) dup2(1, 2); + + #else + (void) dup(1); + + #endif + is2atty = is1atty; + } + else { + + #ifdef __MINT__ + + (void) dup2(SHDIAG, 2); + + #else + (void) dup(SHDIAG); + + #endif + is2atty = isdiagatty; + # if defined(CLOSE_ON_EXEC) && defined(CLEX_DUPS) + (void) close_on_exec(2, 0); + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,set.c ./sh,set.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,set.c Tue Nov 24 13:04:22 1992 + --- ./sh,set.c Fri Feb 26 02:42:28 1993 + *************** + *** 54,59 **** + --- 54,62 ---- + static struct varent *madrof __P((Char *, struct varent *)); + static void unsetv1 __P((struct varent *)); + static void exportpath __P((Char **)); + + #ifdef __MINT__ + + static void exportsuffixes __P((Char **)); + + #endif + static void balance __P((struct varent *, int, int)); + + /* + *************** + *** 68,73 **** + --- 71,82 ---- + exportpath(adrof(STRpath)->vec); + dohash(NULL, NULL); + } + + #ifdef __MINT__ + + else if (eq(vp, STRsuffixes)) { + + exportsuffixes(adrof(STRsuffixes)->vec); + + dohash(NULL, NULL); + + } + + #endif + else if (eq(vp, STRhistchars)) { + register Char *pn = value(vp); + + *************** + *** 418,424 **** + } + else { + num = 4; /* confuse lint */ + ! if (sizeof(int) == num && ((unsigned int) n) == 2147483648) { + *putp++ = '2'; + n = 147483648; + } + --- 427,433 ---- + } + else { + num = 4; /* confuse lint */ + ! if (sizeof(int) == num && ((unsigned int) n) == 2147483648U) { + *putp++ = '2'; + n = 147483648; + } + *************** + *** 730,735 **** + --- 739,768 ---- + } + tsetenv(STRKPATH, exppath); + } + + + + #ifdef __MINT__ + + static void + + exportsuffixes(val) + + Char **val; + + { + + Char expsuff[BUFSIZE]; + + static Char STRcomma[] = { ',' , '\0' }; + + + + expsuff[0] = 0; + + if (val) + + while (*val) { + + if (Strlen(*val) + Strlen(expsuff) + 2 > BUFSIZE) { + + xprintf("Warning: ridiculously long SUFFIXES truncated\n"); + + break; + + } + + (void) Strcat(expsuff, *val++); + + if (*val == 0 || eq(*val, STRRparen)) + + break; + + (void) Strcat(expsuff, STRcomma); + + } + + Setenv(STRSUFFIXES, expsuff); + + } + + #endif /* __MINT__ */ + + #ifndef lint + /* + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,time.c ./sh,time.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,time.c Tue Nov 24 13:04:22 1992 + --- ./sh,time.c Fri Feb 26 02:46:54 1993 + *************** + *** 178,183 **** + --- 178,184 ---- + { + tvadd(&ru->ru_utime, &ru2->ru_utime); + tvadd(&ru->ru_stime, &ru2->ru_stime); + + #ifndef __MINT__ + if (ru2->ru_maxrss > ru->ru_maxrss) + ru->ru_maxrss = ru2->ru_maxrss; + + *************** + *** 194,199 **** + --- 195,201 ---- + ru->ru_nsignals += ru2->ru_nsignals; + ru->ru_nvcsw += ru2->ru_nvcsw; + ru->ru_nivcsw += ru2->ru_nivcsw; + + #endif + } + + #else /* BSDTIMES */ + *************** + *** 325,331 **** + --- 327,337 ---- + int ms = + (e->tv_sec - b->tv_sec) * 100 + (e->tv_usec - b->tv_usec) / 10000; + + + # ifdef __MINT__ + + cp = "%Uu %Ss %E %P"; + + # else + cp = "%Uu %Ss %E %P %X+%Dk %I+%Oio %Fpf+%Ww"; + + # endif + #else + # ifdef _SEQUENT_ + int ms = + *************** + *** 416,422 **** + xprintf("%ld.%01ld%%", i / 10, i % 10); /* nn.n% */ + break; + + ! #ifdef BSDTIMES + case 'W': /* number of swaps */ + i = r1->ru_nswap - r0->ru_nswap; + xprintf("%ld", i); + --- 422,428 ---- + xprintf("%ld.%01ld%%", i / 10, i % 10); /* nn.n% */ + break; + + ! #if defined(BSDTIMES) && !defined(__MINT__) + case 'W': /* number of swaps */ + i = r1->ru_nswap - r0->ru_nswap; + xprintf("%ld", i); + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,types.h ./sh,types.h + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh,types.h Tue Nov 24 13:04:34 1992 + --- ./sh,types.h Fri Feb 26 02:48:12 1993 + *************** + *** 447,452 **** + --- 447,460 ---- + #endif /* convex */ + + /* + + * MiNT + + */ + + #ifdef __MINT__ + + # define _SIGMASK_T + + typedef long sigmask_t; + + #endif + + + + /* + * Alliant FX-2800/FX-80 + */ + #ifdef alliant + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh.c ./sh.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh.c Tue Nov 24 13:04:16 1992 + --- ./sh.c Sun Mar 7 17:43:04 1993 + *************** + *** 118,123 **** + --- 118,128 ---- + static void mailchk __P((void)); + static Char **defaultpath __P((void)); + + + #ifdef __MINT__ + + static Char **defaultsuffixes __P((void)); + + void importsuffixes __P((Char *)); + + #endif + + + int + main(argc, argv) + int argc; + *************** + *** 229,234 **** + --- 234,249 ---- + loginsh = (argc == 1 && getppid() == 1); + #endif /* _VMS_POSIX */ + + + #ifdef __MINT__ + + /* under MiNT, we're also a login shell if we ran from the desktop and + + * have no arguments + + */ + + if (!loginsh && tempv[0][0] == 0 && !tempv[1]) { + + loginsh = 1; + + tempv[0] = "-tcsh"; + + } + + #endif + + + if (loginsh && **tempv != '-') { + /* + * Mangle the argv space + *************** + *** 373,379 **** + if (loginsh || (uid == 0)) { + if (*cp) { + /* only for login shells or root and we must have a tty */ + ! if ((cp2 = Strrchr(cp, (Char) '/')) != NULL) { + cp = cp2 + 1; + } + if (!((Strncmp(cp, STRtty, 3) == 0) && + --- 388,394 ---- + if (loginsh || (uid == 0)) { + if (*cp) { + /* only for login shells or root and we must have a tty */ + ! if ((cp2 = Lastslash(cp)) != NULL) { + cp = cp2 + 1; + } + if (!((Strncmp(cp, STRtty, 3) == 0) && + *************** + *** 535,540 **** + --- 550,564 ---- + */ + importpath(str2short(tcp)); + + + #ifdef __MINT__ + + /* + + * set the suffix search list + + */ + + if ((tcp = getenv("SUFFIXES")) == NULL) + + set1(STRsuffixes, defaultsuffixes(), &shvhed); + + else + + importsuffixes(SAVE(tcp)); + + #endif + + { + /* If the SHELL environment variable ends with "tcsh", set + *************** + *** 769,774 **** + --- 793,808 ---- + */ + if (nofile == 0 && argc > 0) { + nofile = open(tempv[0], O_RDONLY); + + #ifdef __MINT__ + + /* maybe the user tried to execute "foo.csh" as just "foo" + + */ + + if (nofile < 0) { + + char *cshfile = alloca(strlen(tempv[0]) + 5); + + strcpy(cshfile, tempv[0]); + + strcat(cshfile, ".csh"); + + nofile = open(cshfile, O_RDONLY); + + } + + #endif + if (nofile < 0) { + child = 1; /* So this ... */ + /* ... doesn't return */ + *************** + *** 1165,1171 **** + srccat(cp, dp) + Char *cp, *dp; + { + ! if (cp[0] == '/' && cp[1] == '\0') + return srcfile(short2str(dp), (mflag ? 0 : 1), 0, NULL); + else { + register Char *ep = Strspl(cp, dp); + --- 1199,1205 ---- + srccat(cp, dp) + Char *cp, *dp; + { + ! if (is_dirsep(cp[0]) && cp[1] == '\0') + return srcfile(short2str(dp), (mflag ? 0 : 1), 0, NULL); + else { + register Char *ep = Strspl(cp, dp); + *************** + *** 1952,1957 **** + --- 1986,1995 ---- + #endif + int i; + { + + #ifdef __MINT__ + + void rm_tmpfiles(); + + rm_tmpfiles(); /* remove temporary files, see below */ + + #endif + #ifdef TESLA + if (loginsh && do_logout) { + /* this is to send hangup signal to the develcon */ + *************** + *** 2018,2020 **** + --- 2056,2196 ---- + *blkp = NULL; + return (blk); + } + + + + #ifdef __MINT__ + + /* + + * unlink() doesn't always work on an open file, so we try to arrange + + * to remove temporary files (e.g. for here documents) before exiting. + + */ + + + + struct tmpfile_rec { + + char *name; /* the name of the temp. file */ + + int pid; /* the associated pid */ + + struct tmpfile_rec *next; + + } *root; + + + + extern int __mint; + + + + int + + csh_tmpfile() + + { + + extern char *tmpnam(); + + struct tmpfile_rec *u; + + int fd; + + char *name; + + + + if ( !(name = tmpnam((char *)0)) ) + + return -1; + + + + fd = open(name, O_CREAT|O_EXCL|O_RDWR, 0600); + + if (fd < 0) { + + free(name); + + return -1; + + } + + + + /* in MiNT 0.9 and above, we can often unlink a file and continue to use + + * it; some file systems may return EACCDN for unlinking an open file, + + * in which case we use the old method of unlinking the file at exit + + */ + + if (__mint >= 9) { + + if (unlink(name) == 0) + + return fd; + + } + + + + /* if the unlink failed, save the name for future deleting */ + + + + u = (struct tmpfile_rec *)malloc(sizeof(*u)); + + if (!u) { + + /* would it be better to fail? I dunno, but at worst the user is left + + * with a junk file in a temporary directory + + */ + + return fd; + + } + + + + u->name = name; + + u->pid = getpid(); + + u->next = root; + + root = u; + + return fd; + + } + + + + void + + rm_tmpfiles() + + { + + int pid = getpid(); + + struct tmpfile_rec **old, *u; + + + + old = &root; + + u = root; + + while (u) { + + if (u->pid == pid) { + + (void) unlink(u->name); + + *old = u->next; + + } else { + + old = &u->next; + + } + + u = u->next; + + } + + } + + + + /* MiNT suffix stuff + + */ + + + + void + + importsuffixes(cp) + + Char *cp; + + { + + register int i = 0; + + register Char *dp; + + register Char **pv; + + int c; + + + + for (dp = cp; *dp; dp++) + + if (*dp == ',') + + i++; + + /* + + * i+2 where i is the number of ',' in the suffix list. There are i+1 + + * suffixes plus we need room for a zero terminator. + + */ + + pv = (Char **) xcalloc((size_t) (i + 2), sizeof(Char *)); + + dp = cp; + + i = 0; + + if (*dp) + + for (;;) { + + if ((c = *dp) == ',' || c == 0) { + + *dp = 0; + + pv[i++] = Strsave(cp); + + if (c) { + + cp = dp + 1; + + *dp = ','; + + } + + else + + break; + + } + + dp++; + + } + + pv[i] = 0; + + set1(STRsuffixes, pv, &shvhed); + + } + + + + static Char ** + + defaultsuffixes() + + { + + Char **blk, **blkp; + + + + blkp = blk = (Char **) xmalloc((size_t) sizeof(Char *) * 9); + + + + *blkp++ = SAVE("ttp"); + + *blkp++ = SAVE("prg"); + + *blkp++ = SAVE("tos"); + + *blkp++ = SAVE("app"); + + *blkp++ = SAVE("gtp"); + + *blkp++ = SAVE("csh"); + + *blkp++ = SAVE(""); + + *blkp = NULL; + + + + return (blk); + + } + + + + #endif /* __MINT__ */ + + + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh.h ./sh.h + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/sh.h Tue Nov 24 13:04:24 1992 + --- ./sh.h Fri Feb 26 01:46:40 1993 + *************** + *** 177,183 **** + #ifdef _SEQUENT_ + # include + #endif /* _SEQUENT_ */ + ! #if defined(POSIX) || SYSVREL > 0 + # include + #endif /* POSIX || SYSVREL > 0 */ + + --- 177,183 ---- + #ifdef _SEQUENT_ + # include + #endif /* _SEQUENT_ */ + ! #if defined(POSIX) || SYSVREL > 0 || defined(__MINT__) + # include + #endif /* POSIX || SYSVREL > 0 */ + + *************** + *** 190,195 **** + --- 190,199 ---- + #endif /* _MINIX && vmsposix atp */ + #include + + + #ifdef __MINT__ + + #include + + #endif + + + #if defined(BSDTIMES) || defined(BSDLIMIT) + # include + # if SYSVREL>3 && !defined(sgi) + *************** + *** 223,229 **** + # include + #endif /* sonyrisc */ + + ! #ifdef POSIX + /* + * We should be using setpgid and setpgid + * by now, but in some systems we use the + --- 227,233 ---- + # include + #endif /* sonyrisc */ + + ! #if defined(POSIX) || defined(__MINT__) + /* + * We should be using setpgid and setpgid + * by now, but in some systems we use the + *************** + *** 289,294 **** + --- 293,305 ---- + + #include + + + #ifdef __MINT__ + + /* undef E_SEEK from errno.h */ + + # undef E_SEEK + + # define ENOTDIR EPATH + + # define ESPIPE EINVAL + + #endif + + + #include + + #if __STDC__ + *************** + *** 353,358 **** + --- 364,384 ---- + # endif + #endif + + + #ifndef DOSFS + + # define is_dirsep(c) ((c) == '/') + + # define is_abspath(p) (is_dirsep(*(p))) + + # define lastslash(p) (strrchr((p), '/')) + + # define Lastslash(p) (Strrchr((p), '/')) + + # define has_slash(p) (any((p), '/')) + + # define Has_slash(p) (Strrchr((p), '/')) + + #else + + extern int is_dirsep __P((int)); + + extern int is_abspath __P((Char *)); + + extern char * lastslash __P((char *)); + + extern Char * Lastslash __P((Char *)); + + extern int has_slash __P((char *)); + + extern int Has_slash __P((Char *)); + + #endif + + typedef int bool; + + Only in .: sldiffs + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/tc,alloc.c ./tc,alloc.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/tc,alloc.c Tue Nov 24 13:04:32 1992 + --- ./tc,alloc.c Fri Feb 26 02:57:12 1993 + *************** + *** 53,58 **** + --- 53,65 ---- + + #ifndef SYSMALLOC + + + #ifdef __MINT__ + + /* need large stack because we alloc from stack (cause tcsh assumes + + * continuus memory which MiNT does not provide) + + */ + + long _stksize = -128*1024L; + + #endif + + + #undef RCHECK + #undef DEBUG + + *************** + *** 244,253 **** + --- 251,262 ---- + memtop = (char *) op; + if (membot == NULL) + membot = memtop; + + #ifndef __MINT__ + if ((int) op & 0x3ff) { + memtop = (char *) sbrk(1024 - ((int) op & 0x3ff)); + memtop += 1024 - ((int) op & 0x3ff); + } + + #endif + + /* take 2k unless the block is bigger than that */ + rnu = (bucket <= 8) ? 11 : bucket + 3; + *************** + *** 469,475 **** + + n = n ? n : 1; + + ! #ifndef _VMS_POSIX + if (membot == NULL) + membot == (char*) sbrk(0); + #endif /* !_VMS_POSIX */ + --- 478,484 ---- + + n = n ? n : 1; + + ! #if !defined(_VMS_POSIX) && !defined(__MINT__) + if (membot == NULL) + membot == (char*) sbrk(0); + #endif /* !_VMS_POSIX */ + *************** + *** 478,484 **** + child++; + stderror(ERR_NOMEM); + } + ! #ifdef _VMS_POSIX + if (memtop < ((char *) ptr) + n) + memtop = ((char *) ptr) + n; + if (membot == NULL) + --- 487,493 ---- + child++; + stderror(ERR_NOMEM); + } + ! #if defined(_VMS_POSIX) || defined(__MINT__) + if (memtop < ((char *) ptr) + n) + memtop = ((char *) ptr) + n; + if (membot == NULL) + *************** + *** 496,509 **** + + n = n ? n : 1; + + if (membot == NULL) + membot == (char*) sbrk(0); + + if ((ptr = (p ? realloc(p, n) : malloc(n))) == (ptr_t) 0) { + child++; + stderror(ERR_NOMEM); + } + ! #ifdef _VMS_POSIX + if (memtop < ((char *) ptr) + n) + memtop = ((char *) ptr) + n; + if (membot == NULL) + --- 505,520 ---- + + n = n ? n : 1; + + + #ifndef __MINT__ + if (membot == NULL) + membot == (char*) sbrk(0); + + #endif + + if ((ptr = (p ? realloc(p, n) : malloc(n))) == (ptr_t) 0) { + child++; + stderror(ERR_NOMEM); + } + ! #if defined(_VMS_POSIX) || defined(__MINT__) + if (memtop < ((char *) ptr) + n) + memtop = ((char *) ptr) + n; + if (membot == NULL) + *************** + *** 522,529 **** + --- 533,542 ---- + n *= s; + n = n ? n : 1; + + + #ifndef __MINT__ + if (membot == NULL) + membot == (char*) sbrk(0); + + #endif + + if ((ptr = malloc(n)) == (ptr_t) 0) { + child++; + *************** + *** 536,542 **** + *sptr++ = 0; + while (--n); + + ! #ifdef _VMS_POSIX + if (memtop < ((char *) ptr) + n) + memtop = ((char *) ptr) + n; + if (membot == NULL) + --- 549,555 ---- + *sptr++ = 0; + while (--n); + + ! #if defined(_VMS_POSIX) || defined(__MINT__) + if (memtop < ((char *) ptr) + n) + memtop = ((char *) ptr) + n; + if (membot == NULL) + *************** + *** 592,598 **** + (unsigned long) membot, (unsigned long) memtop, + (unsigned long) sbrk(0)); + #else + ! #ifndef _VMS_POSIX + memtop = (char *) sbrk(0); + #endif /* !_VMS_POSIX */ + xprintf("Allocated memory from 0x%lx to 0x%lx (%ld).\n", + --- 605,611 ---- + (unsigned long) membot, (unsigned long) memtop, + (unsigned long) sbrk(0)); + #else + ! #if !defined(_VMS_POSIX) && !defined(__MINT__) + memtop = (char *) sbrk(0); + #endif /* !_VMS_POSIX */ + xprintf("Allocated memory from 0x%lx to 0x%lx (%ld).\n", + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/tc,const.c ./tc,const.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/tc,const.c Tue Nov 24 13:04:32 1992 + --- ./tc,const.c Fri Feb 26 03:11:00 1993 + *************** + *** 77,91 **** + --- 77,101 ---- + Char STRhistfile[] = { 'h', 'i', 's', 't', 'f', 'i', 'l', 'e', '\0' }; + Char STRsource[] = { 's', 'o', 'u', 'r', 'c', 'e', '\0' }; + Char STRmh[] = { '-', 'h', '\0' }; + + #ifndef DOSFS + Char STRtildothist[] = { '~', '/', '.', 'h', 'i', 's', 't', 'o', 'r', + 'y', '\0' }; + + #else + + Char STRtildothist[] = { '~', '/', 'h', 'i', 's', 't', 'o', 'r', 'y', + + '.', 'c', 's', 'h', '\0' }; + + #endif + + #ifdef KANJI + Char STRnokanji[] = { 'n', 'o', 'k', 'a', 'n', 'j', 'i', '\0' }; + #endif + + + #ifndef DOSFS + Char STRtildotdirs[] = { '~', '/', '.', 'c', 's', 'h', 'd', 'i', 'r', + 's', '\0' }; + + #else + + Char STRtildotdirs[] = { '~', '/', 'c', 's', 'h', 'd', 'i', 'r', 's', + + '.', 'c', 's', 'h', '\0' }; + + #endif + Char STRdirsfile[] = { 'd', 'i', 'r', 's', 'f', 'i', 'l', 'e', '\0' }; + Char STRsavedirs[] = { 's', 'a', 'v', 'e', 'd', 'i', 'r', 's', '\0' }; + Char STRloginsh[] = { 'l', 'o', 'g', 'i', 'n', 's', 'h', '\0' }; + *************** + *** 93,99 **** + --- 103,114 ---- + Char STRargv[] = { 'a', 'r', 'g', 'v', '\0' }; + Char STRsavehist[] = { 's', 'a', 'v', 'e', 'h', 'i', 's', 't', '\0' }; + Char STRnormal[] = { 'n', 'o', 'r', 'm', 'a', 'l', '\0' }; + + #ifndef DOSFS + Char STRsldtlogout[] = { '/', '.', 'l', 'o', 'g', 'o', 'u', 't', '\0' }; + + #else + + Char STRsldtlogout[] = { '/', 'l', 'o', 'g', 'o', 'u', 't', '.', 'c', 's', + + 'h', '\0' }; + + #endif + Char STRjobs[] = { 'j', 'o', 'b', 's', '\0' }; + Char STRsymhash[] = { '#', ' ', '\0' }; + Char STRsymarrow[] = { '>', ' ', '\0' }; + *************** + *** 197,205 **** + --- 212,230 ---- + Char STRwatch[] = { 'w', 'a', 't', 'c', 'h', '\0' }; + #endif /* HAVENOUTMP */ + + + #ifndef DOSFS + Char STRsldottcshrc[] = { '/', '.', 't', 'c', 's', 'h', 'r', 'c', '\0' }; + Char STRsldotcshrc[] = { '/', '.', 'c', 's', 'h', 'r', 'c', '\0' }; + Char STRsldotlogin[] = { '/', '.', 'l', 'o', 'g', 'i', 'n', '\0' }; + + #else + + Char STRsldottcshrc[] = { '/', 't', 'c', 's', 'h', 'r', 'c', '.', 'c', + + 's', 'h', '\0' }; + + Char STRsldotcshrc[] = { '/', 'c', 's', 'h', 'r', 'c', '.', 'c', 's', + + 'h', '\0' }; + + Char STRsldotlogin[] = { '/', 'l', 'o', 'g', 'i', 'n', '.', 'c', 's', + + 'h', '\0' }; + + #endif + + + Char STRignoreeof[] = { 'i', 'g', 'n', 'o', 'r', 'e', 'e', 'o', 'f', '\0' }; + Char STRnoclobber[] = { 'n', 'o', 'c', 'l', 'o', 'b', 'b', 'e', 'r', '\0' }; + Char STRhelpcommand[] = { 'h', 'e', 'l', 'p', 'c', 'o', 'm', 'm', 'a', 'n', + *************** + *** 284,286 **** + --- 309,317 ---- + Char STRdown[] = { 'd', 'o', 'w', 'n', '\0' }; + Char STRleft[] = { 'l', 'e', 'f', 't', '\0' }; + Char STRright[] = { 'r', 'i', 'g', 'h', 't', '\0' }; + + + + #ifdef __MINT__ + + Char STRsuffixes[] = { 's', 'u', 'f', 'f', 'i', 'x', 'e', 's', '\0' }; + + Char STRSUFFIXES[] = { 'S', 'U', 'F', 'F', 'I', 'X', 'E', 'S', '\0' }; + + #endif + + + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/tc,func.c ./tc,func.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/tc,func.c Tue Nov 24 13:04:32 1992 + --- ./tc,func.c Fri Feb 26 03:18:42 1993 + *************** + *** 276,282 **** + for (k = 0, i = 0; v[k] != NULL; k++) { + tmp = dnormalize(v[k], symlinks == SYM_IGNORE); + dp = &tmp[Strlen(tmp) - 1]; + ! if (*dp == '/' && dp != tmp) + #ifdef apollo + if (dp != &tmp[1]) + #endif /* apollo */ + --- 276,282 ---- + for (k = 0, i = 0; v[k] != NULL; k++) { + tmp = dnormalize(v[k], symlinks == SYM_IGNORE); + dp = &tmp[Strlen(tmp) - 1]; + ! if (is_dirsep(*dp) && dp != tmp) + #ifdef apollo + if (dp != &tmp[1]) + #endif /* apollo */ + *************** + *** 303,309 **** + --- 303,313 ---- + xprintf("%S:\n", tmp); + for (cp = tmp, dp = buf; *cp; *dp++ = (*cp++ | QUOTE)) + continue; + + #if 0 + if (dp[-1] != (Char) ('/' | QUOTE)) + + #else + + if (! ((dp[-1] & QUOTE) && is_dirsep(dp[-1] & ~QUOTE))) + + #endif + *dp++ = '/'; + else + dp[-1] &= TRIM; + *************** + *** 435,441 **** + int epl, vpl; + + if ((ep = getenv("EDITOR")) != NULL) { /* if we have a value */ + ! if ((p = strrchr(ep, '/')) != NULL) /* if it has a path */ + ep = p + 1; /* then we want only the last part */ + } + else + --- 439,445 ---- + int epl, vpl; + + if ((ep = getenv("EDITOR")) != NULL) { /* if we have a value */ + ! if ((p = lastslash(ep)) != NULL) /* if it has a path */ + ep = p + 1; /* then we want only the last part */ + } + else + *************** + *** 442,448 **** + ep = "ed"; + + if ((vp = getenv("VISUAL")) != NULL) { /* if we have a value */ + ! if ((p = strrchr(vp, '/')) != NULL) /* and it has a path */ + vp = p + 1; /* then we want only the last part */ + } + else + --- 446,452 ---- + ep = "ed"; + + if ((vp = getenv("VISUAL")) != NULL) { /* if we have a value */ + ! if ((p = lastslash(vp)) != NULL) /* and it has a path */ + vp = p + 1; /* then we want only the last part */ + } + else + *************** + *** 462,468 **** + continue; + *cp = '\0'; + + ! if ((cp = strrchr(p, '/')) != NULL) /* and it has a path */ + cp = cp + 1; /* then we want only the last part */ + else + cp = p; /* else we get all of it */ + --- 466,472 ---- + continue; + *cp = '\0'; + + ! if ((cp = lastslash(p)) != NULL) /* and it has a path */ + cp = cp + 1; /* then we want only the last part */ + else + cp = p; /* else we get all of it */ + *************** + *** 1405,1417 **** + } + if (((h = value(STRhome)) != STRNULL) && + (Strncmp(p = *hm, h, j = Strlen(h)) == 0) && + ! (p[j] == '/' || p[j] == '\0')) { + *hm = &p[j]; + return STRNULL; + } + for (i = 0; i < tlength; i++) + if ((Strncmp(p = *hm, tcache[i].home, j = tcache[i].hlen) == 0) && + ! (p[j] == '/' || p[j] == '\0')) { + *hm = &p[j]; + return tcache[i].user; + } + --- 1409,1421 ---- + } + if (((h = value(STRhome)) != STRNULL) && + (Strncmp(p = *hm, h, j = Strlen(h)) == 0) && + ! (is_dirsep(p[j]) || p[j] == '\0')) { + *hm = &p[j]; + return STRNULL; + } + for (i = 0; i < tlength; i++) + if ((Strncmp(p = *hm, tcache[i].home, j = tcache[i].hlen) == 0) && + ! (is_dirsep(p[j]) || p[j] == '\0')) { + *hm = &p[j]; + return tcache[i].user; + } + *************** + *** 1471,1478 **** + --- 1475,1490 ---- + + if ((n = read(fd, tbuf, BUFSIZE)) <= 0) + goto eof; + + #ifdef DOSTEXT + + /* we probably should strip the carriage returns, but + + * changing them to blanks will work just as well for most cases + + */ + + for (i = 0; i < n; i++) + + buf[i] = (tbuf[i] == '\r') ? ' ' : tbuf[i]; + + #else + for (i = 0; i < n; i++) + buf[i] = tbuf[i]; + + #endif + p = buf; + } + n--; + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/tc,os.c ./tc,os.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/tc,os.c Tue Nov 24 13:04:32 1992 + --- ./tc,os.c Fri Feb 26 03:21:36 1993 + *************** + *** 1036,1042 **** + /* look if we found root yet */ + if (st_cur.st_ino == st_root.st_ino && + DEV_DEV_COMPARE(st_cur.st_dev, st_root.st_dev)) { + ! (void) strcpy(pathname, *pathptr != '/' ? "/" : pathptr); + return (pathname); + } + + --- 1036,1042 ---- + /* look if we found root yet */ + if (st_cur.st_ino == st_root.st_ino && + DEV_DEV_COMPARE(st_cur.st_dev, st_root.st_dev)) { + ! (void) strcpy(pathname, !is_dirsep(*pathptr) ? "/" : pathptr); + return (pathname); + } + + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/tc,os.h ./tc,os.h + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/tc,os.h Tue Nov 24 13:04:32 1992 + --- ./tc,os.h Fri Feb 26 03:24:24 1993 + *************** + *** 479,484 **** + --- 479,485 ---- + extern int qsort(); + # endif + #else + + # ifndef __MINT__ + # ifndef hpux + # if __GNUC__ != 2 + extern int abort(); + *************** + *** 490,495 **** + --- 491,497 ---- + extern void abort(); + extern void qsort(); + # endif + + # endif /* !__MINT__ */ + #endif /* SUNOS4 */ + extern void perror(); + + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/tc,promp.c ./tc,promp.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/tc,promp.c Tue Nov 24 13:04:34 1992 + --- ./tc,promp.c Fri Feb 26 03:28:40 1993 + *************** + *** 303,309 **** + else { + if ((scp != 'C') && (q = value(STRhome)) != STRNULL && + Strncmp(buff, q, (k = Strlen(q))) == 0 && + ! (buff[k] == '/' || buff[k] == '\0')) { + buff[--k] = '~'; + q = &buff[k]; + /* RWM - reset the path length */ + --- 303,309 ---- + else { + if ((scp != 'C') && (q = value(STRhome)) != STRNULL && + Strncmp(buff, q, (k = Strlen(q))) == 0 && + ! (is_dirsep(buff[k]) || buff[k] == '\0')) { + buff[--k] = '~'; + q = &buff[k]; + /* RWM - reset the path length */ + *************** + *** 312,322 **** + else { + q = buff; + /* RWM - in case first char is not '/' */ + ! if (*q == '/') updirs = 0; else updirs = 1; + } + /* RWM - calculate elements in the path */ + for (z = q; *z; z++) { + ! if (*z == '/') updirs++; + continue; /* find the end */ + } + /* RWM - the ones we will skip can be found here */ + --- 312,322 ---- + else { + q = buff; + /* RWM - in case first char is not '/' */ + ! if (is_abspath(q)) updirs = 0; else updirs = 1; + } + /* RWM - calculate elements in the path */ + for (z = q; *z; z++) { + ! if (is_dirsep(*z)) updirs++; + continue; /* find the end */ + } + /* RWM - the ones we will skip can be found here */ + *************** + *** 323,334 **** + updirs -= j; + + while (j-- > 0) { + ! while ((z > q) && (*z != '/')) + z--; /* back up */ + if (j && z > q) + z--; + } + ! if (*z == '/' && z != q) + z++; + + /* RWM - if *q == '~' and *z != '~' then print */ + --- 323,334 ---- + updirs -= j; + + while (j-- > 0) { + ! while ((z > q) && (!is_dirsep(*z))) + z--; /* back up */ + if (j && z > q) + z--; + } + ! if (is_dirsep(*z) && z != q) + z++; + + /* RWM - if *q == '~' and *z != '~' then print */ + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/tc,sig.c ./tc,sig.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/tc,sig.c Tue Nov 24 13:04:34 1992 + --- ./tc,sig.c Fri Feb 26 03:33:50 1993 + *************** + *** 410,412 **** + --- 410,433 ---- + Synch_Cnt++; + } + #endif /* SIGSYNCH */ + + + + #ifdef __MINT__ + + /* MiNT has most BSD signal things, but not sigvec; punt */ + + void + + mysigvec(sig, new, old) + + int sig; + + sigvec_t *new, *old; + + { + + void (*oldhandler)(); + + + + if (new) { + + oldhandler = signal(sig, new->sv_handler); + + } else { + + oldhandler = signal(sig, SIG_IGN); + + signal(sig, oldhandler); + + } + + if (old) + + old->sv_handler = oldhandler; + + } + + #endif /* __MINT__ */ + + + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/tc,sig.h ./tc,sig.h + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/tc,sig.h Tue Nov 24 13:04:34 1992 + --- ./tc,sig.h Fri Feb 26 03:31:38 1993 + *************** + *** 77,82 **** + --- 77,90 ---- + # define NEEDsignal + # endif /* hpux */ + + + # ifdef __MINT__ + + # define HAVE_SIGVEC + + typedef struct sigvec { + + sigret_t (*sv_handler)(); + + } sigvec_t; + + extern void mysigvec __P((int, sigvec_t *, sigvec_t *)); + + #endif /* __MINT__ */ + + + # ifndef HAVE_SIGVEC + # define mysigvec(a, b, c) sigvec(a, b, c) + typedef struct sigvec sigvec_t; + *************** + *** 130,139 **** + --- 138,149 ---- + /* + * For 4.2bsd signals. + */ + + # ifndef __MINT__ + # ifdef sigmask + # undef sigmask + # endif /* sigmask */ + # define sigmask(s) (1 << ((s)-1)) + + # endif /* !__MINT__ */ + # ifdef POSIXSIGS + # define sigpause(a) bsd_sigpause(a) + # define signal(a, b) bsd_signal(a, b) + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/tw,init.c ./tw,init.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/tw,init.c Tue Nov 24 13:04:26 1992 + --- ./tw,init.c Fri Feb 26 03:41:34 1993 + *************** + *** 247,259 **** + register Char **pv; + struct varent *v = adrof(STRpath); + struct varent *recexec = adrof(STRrecognize_only_executables); + + - + if (v == NULL) /* if no path */ + return; + + for (pv = v->vec; *pv; pv++) { + ! if (pv[0][0] != '/') { + tw_cmd_got |= TW_FL_REL; + continue; + } + --- 247,262 ---- + register Char **pv; + struct varent *v = adrof(STRpath); + struct varent *recexec = adrof(STRrecognize_only_executables); + + #ifdef __MINT__ + + struct varent *suffv = adrof(STRsuffixes); + + Char **suffpv; + + #endif + + if (v == NULL) /* if no path */ + return; + + for (pv = v->vec; *pv; pv++) { + ! if (!is_abspath(pv[0])) { + tw_cmd_got |= TW_FL_REL; + continue; + } + *************** + *** 268,273 **** + --- 271,289 ---- + name = str2short(dp->d_name); + if (dp->d_ino == 0 || (recexec && !executable(dir, name, 0))) + continue; + + #ifdef __MINT__ + + { char *s = rindex(name, '.'); + + + + if (s && suffv) { + + for (suffpv = suffv->vec; *suffpv; suffpv++) { + + if (!strcmp(s+1, short2str(*suffpv))) { + + *s = 0; break; + + } + + } + + } + + } + + #endif /* __MINT__ */ + + + tw_cmd_add(name); + } + (void) closedir(dirp); + *************** + *** 421,427 **** + + CLRDIR(tw_cmd_state.dfd) + + ! while (*tw_cmd_state.pathv && tw_cmd_state.pathv[0][0] == '/') + tw_cmd_state.pathv++; + if ((ptr = *tw_cmd_state.pathv) != 0) { + /* + --- 437,443 ---- + + CLRDIR(tw_cmd_state.dfd) + + ! while (*tw_cmd_state.pathv && is_abspath(tw_cmd_state.pathv[0])) + tw_cmd_state.pathv++; + if ((ptr = *tw_cmd_state.pathv) != 0) { + /* + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/tw,parse.c ./tw,parse.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/tw,parse.c Tue Nov 24 13:04:26 1992 + --- ./tw,parse.c Fri Feb 26 03:50:14 1993 + *************** + *** 261,267 **** + case RECOGNIZE: + case RECOGNIZE_ALL: + if (adrof(STRautocorrect)) { + ! if ((slshp = Strrchr(wordp, '/')) != NULL && slshp[1] != '\0') { + SearchNoDirErr = 1; + for (bptr = wordp; bptr < slshp; bptr++) { + /* + --- 261,267 ---- + case RECOGNIZE: + case RECOGNIZE_ALL: + if (adrof(STRautocorrect)) { + ! if ((slshp = Lastslash(wordp)) != NULL && slshp[1] != '\0') { + SearchNoDirErr = 1; + for (bptr = wordp; bptr < slshp; bptr++) { + /* + *************** + *** 350,356 **** + items[0] = buffer; + items[1] = NULL; + ptr = items; + ! count = (looking == TW_COMMAND && Strchr(wordp, '/') == 0) ? + c_glob(&ptr) : + t_glob(&ptr, looking == TW_COMMAND); + if (count > 0) { + --- 350,356 ---- + items[0] = buffer; + items[1] = NULL; + ptr = items; + ! count = (looking == TW_COMMAND && !Has_slash(wordp)) ? + c_glob(&ptr) : + t_glob(&ptr, looking == TW_COMMAND); + if (count > 0) { + *************** + *** 1156,1162 **** + break; + + case TW_COMMAND: + ! if (Strchr(word, '/')) { + looking = TW_FILE; + flags |= TW_EXEC_CHK; + flags |= TW_DIR_OK; + --- 1156,1162 ---- + break; + + case TW_COMMAND: + ! if (Has_slash(word)) { + looking = TW_FILE; + flags |= TW_EXEC_CHK; + flags |= TW_DIR_OK; + *************** + *** 1197,1208 **** + */ + flags |= (gpat == 0) ? TW_IGN_OK : TW_PAT_OK; + + ! if ((*word == '~') && (Strchr(word, '/') == NULL)) { + looking = TW_LOGNAME; + target = name; + } + else if ((target = Strrchr(name, '$')) != 0 && + ! (Strchr(name, '/') == NULL)) { + target++; + looking = TW_VARIABLE; + } + --- 1197,1208 ---- + */ + flags |= (gpat == 0) ? TW_IGN_OK : TW_PAT_OK; + + ! if ((*word == '~') && (! Has_slash(word))) { + looking = TW_LOGNAME; + target = name; + } + else if ((target = Strrchr(name, '$')) != 0 && + ! (! Has_slash(name))) { + target++; + looking = TW_VARIABLE; + } + *************** + *** 1371,1377 **** + { + register Char *p; + + ! p = Strrchr(path, '/'); + if (p == NULL) { + copyn(name, path, MAXNAMLEN); + dir[0] = '\0'; + --- 1371,1377 ---- + { + register Char *p; + + ! p = Lastslash(path); + if (p == NULL) { + copyn(name, path, MAXNAMLEN); + dir[0] = '\0'; + *************** + *** 1448,1454 **** + + switch (old[0]) { + case '~': + ! for (p = new, o = &old[1]; *o && *o != '/'; *p++ = *o++) + continue; + *p = '\0'; + if (gethdir(new)) { + --- 1448,1454 ---- + + switch (old[0]) { + case '~': + ! for (p = new, o = &old[1]; *o && !is_dirsep(*o); *p++ = *o++) + continue; + *p = '\0'; + if (gethdir(new)) { + *************** + *** 1516,1525 **** + */ + for (p = edir; *p; p++) + continue; + ! if (*--p == '/') { + for (p = nd; *p; p++) + continue; + ! if (*--p != '/') + p = NULL; + } + for (d = edir, s = nd; (*d++ = *s++) != '\0';) + --- 1516,1525 ---- + */ + for (p = edir; *p; p++) + continue; + ! if (is_dirsep(*--p)) { + for (p = nd; *p; p++) + continue; + ! if (!is_dirsep(*--p)) + p = NULL; + } + for (d = edir, s = nd; (*d++ = *s++) != '\0';) + diff +context /usr/users/staff/hohmuth/tmp/tcsh-6.03/tw,spell.c ./tw,spell.c + *** /usr/users/staff/hohmuth/tmp/tcsh-6.03/tw,spell.c Tue Nov 24 13:04:26 1992 + --- ./tw,spell.c Fri Feb 26 03:54:20 1993 + *************** + *** 53,60 **** + bool foundslash = 0; + int retval; + + for (;;) { + ! while (*old == '/') { /* skip '/' */ + *new++ = *old++; + foundslash = 1; + } + --- 53,67 ---- + bool foundslash = 0; + int retval; + + + #ifdef DOSFS + + /* skip drive specification, if any */ + + if (*old && old[1] == ':' && is_dirsep(old[2])) { + + *new++ = *old++; *new++ = *old++; + + } + + #endif + + + for (;;) { + ! while (is_dirsep(*old)) { /* skip '/' */ + *new++ = *old++; + foundslash = 1; + } + *************** + *** 73,79 **** + if (p < guess + FILSIZ) + *p++ = *cp; + ws = p; + ! for (; *old != '/' && *old != '\0'; old++)/* add current file name */ + if (p < guess + FILSIZ) + *p++ = *old; + *p = '\0'; /* terminate it */ + --- 80,86 ---- + if (p < guess + FILSIZ) + *p++ = *cp; + ws = p; + ! for (; !is_dirsep(*old) && *old != '\0'; old++)/* add current file name */ + if (p < guess + FILSIZ) + *p++ = *old; + *p = '\0'; /* terminate it */ + *************** + *** 84,90 **** + */ + /* (*should* say "looking for directory" whenever '/' is next...) */ + retval = t_search(guess, p, SPELL, FILSIZ, + ! looking == TW_COMMAND && (foundslash || *old != '/') ? + TW_COMMAND : looking, 1, STRNULL, 0); + if (retval >= 4 || retval < 0) + return -1; /* hopeless */ + --- 91,97 ---- + */ + /* (*should* say "looking for directory" whenever '/' is next...) */ + retval = t_search(guess, p, SPELL, FILSIZ, + ! looking == TW_COMMAND && (foundslash || !is_dirsep(*old)) ? + TW_COMMAND : looking, 1, STRNULL, 0); + if (retval >= 4 || retval < 0) + return -1; /* hopeless */ diff --context --new-file --recursive ../../store/tcsh-6.03/tc.alloc.c ./tc.alloc.c *** ../../store/tcsh-6.03/tc.alloc.c Tue Nov 24 13:04:32 1992 --- ./tc.alloc.c Thu Mar 11 00:30:52 1993 *************** *** 53,58 **** --- 53,65 ---- #ifndef SYSMALLOC + #ifdef __MINT__ + /* need large stack because we alloc from stack (cause tcsh assumes + * continuus memory which MiNT does not provide) + */ + long _stksize = -128*1024L; + #endif + #undef RCHECK #undef DEBUG *************** *** 244,253 **** --- 251,262 ---- memtop = (char *) op; if (membot == NULL) membot = memtop; + #ifndef __MINT__ if ((int) op & 0x3ff) { memtop = (char *) sbrk(1024 - ((int) op & 0x3ff)); memtop += 1024 - ((int) op & 0x3ff); } + #endif /* take 2k unless the block is bigger than that */ rnu = (bucket <= 8) ? 11 : bucket + 3; *************** *** 449,454 **** --- 458,469 ---- #else /* SYSMALLOC */ + #ifdef __MINT__ + /* Stack for MiNT + */ + long _stksize = 20*1024L; + #endif /* __MINT__ */ + /** ** ``Protected versions'' of malloc, realloc, calloc, and free ** *************** *** 469,475 **** n = n ? n : 1; ! #ifndef _VMS_POSIX if (membot == NULL) membot == (char*) sbrk(0); #endif /* !_VMS_POSIX */ --- 484,490 ---- n = n ? n : 1; ! #if !defined(_VMS_POSIX) && !defined(__MINT__) if (membot == NULL) membot == (char*) sbrk(0); #endif /* !_VMS_POSIX */ *************** *** 478,484 **** child++; stderror(ERR_NOMEM); } ! #ifdef _VMS_POSIX if (memtop < ((char *) ptr) + n) memtop = ((char *) ptr) + n; if (membot == NULL) --- 493,499 ---- child++; stderror(ERR_NOMEM); } ! #if defined(_VMS_POSIX) || defined(__MINT__) if (memtop < ((char *) ptr) + n) memtop = ((char *) ptr) + n; if (membot == NULL) *************** *** 496,509 **** n = n ? n : 1; if (membot == NULL) membot == (char*) sbrk(0); if ((ptr = (p ? realloc(p, n) : malloc(n))) == (ptr_t) 0) { child++; stderror(ERR_NOMEM); } ! #ifdef _VMS_POSIX if (memtop < ((char *) ptr) + n) memtop = ((char *) ptr) + n; if (membot == NULL) --- 511,526 ---- n = n ? n : 1; + #ifndef __MINT__ if (membot == NULL) membot == (char*) sbrk(0); + #endif if ((ptr = (p ? realloc(p, n) : malloc(n))) == (ptr_t) 0) { child++; stderror(ERR_NOMEM); } ! #if defined(_VMS_POSIX) || defined(__MINT__) if (memtop < ((char *) ptr) + n) memtop = ((char *) ptr) + n; if (membot == NULL) *************** *** 522,529 **** --- 539,548 ---- n *= s; n = n ? n : 1; + #ifndef __MINT__ if (membot == NULL) membot == (char*) sbrk(0); + #endif if ((ptr = malloc(n)) == (ptr_t) 0) { child++; *************** *** 536,542 **** *sptr++ = 0; while (--n); ! #ifdef _VMS_POSIX if (memtop < ((char *) ptr) + n) memtop = ((char *) ptr) + n; if (membot == NULL) --- 555,561 ---- *sptr++ = 0; while (--n); ! #if defined(_VMS_POSIX) || defined(__MINT__) if (memtop < ((char *) ptr) + n) memtop = ((char *) ptr) + n; if (membot == NULL) *************** *** 592,598 **** (unsigned long) membot, (unsigned long) memtop, (unsigned long) sbrk(0)); #else ! #ifndef _VMS_POSIX memtop = (char *) sbrk(0); #endif /* !_VMS_POSIX */ xprintf("Allocated memory from 0x%lx to 0x%lx (%ld).\n", --- 611,617 ---- (unsigned long) membot, (unsigned long) memtop, (unsigned long) sbrk(0)); #else ! #if !defined(_VMS_POSIX) && !defined(__MINT__) memtop = (char *) sbrk(0); #endif /* !_VMS_POSIX */ xprintf("Allocated memory from 0x%lx to 0x%lx (%ld).\n", diff --context --new-file --recursive ../../store/tcsh-6.03/tc.const.c ./tc.const.c *** ../../store/tcsh-6.03/tc.const.c Tue Nov 24 13:04:32 1992 --- ./tc.const.c Fri Feb 26 03:11:00 1993 *************** *** 77,91 **** --- 77,101 ---- Char STRhistfile[] = { 'h', 'i', 's', 't', 'f', 'i', 'l', 'e', '\0' }; Char STRsource[] = { 's', 'o', 'u', 'r', 'c', 'e', '\0' }; Char STRmh[] = { '-', 'h', '\0' }; + #ifndef DOSFS Char STRtildothist[] = { '~', '/', '.', 'h', 'i', 's', 't', 'o', 'r', 'y', '\0' }; + #else + Char STRtildothist[] = { '~', '/', 'h', 'i', 's', 't', 'o', 'r', 'y', + '.', 'c', 's', 'h', '\0' }; + #endif #ifdef KANJI Char STRnokanji[] = { 'n', 'o', 'k', 'a', 'n', 'j', 'i', '\0' }; #endif + #ifndef DOSFS Char STRtildotdirs[] = { '~', '/', '.', 'c', 's', 'h', 'd', 'i', 'r', 's', '\0' }; + #else + Char STRtildotdirs[] = { '~', '/', 'c', 's', 'h', 'd', 'i', 'r', 's', + '.', 'c', 's', 'h', '\0' }; + #endif Char STRdirsfile[] = { 'd', 'i', 'r', 's', 'f', 'i', 'l', 'e', '\0' }; Char STRsavedirs[] = { 's', 'a', 'v', 'e', 'd', 'i', 'r', 's', '\0' }; Char STRloginsh[] = { 'l', 'o', 'g', 'i', 'n', 's', 'h', '\0' }; *************** *** 93,99 **** --- 103,114 ---- Char STRargv[] = { 'a', 'r', 'g', 'v', '\0' }; Char STRsavehist[] = { 's', 'a', 'v', 'e', 'h', 'i', 's', 't', '\0' }; Char STRnormal[] = { 'n', 'o', 'r', 'm', 'a', 'l', '\0' }; + #ifndef DOSFS Char STRsldtlogout[] = { '/', '.', 'l', 'o', 'g', 'o', 'u', 't', '\0' }; + #else + Char STRsldtlogout[] = { '/', 'l', 'o', 'g', 'o', 'u', 't', '.', 'c', 's', + 'h', '\0' }; + #endif Char STRjobs[] = { 'j', 'o', 'b', 's', '\0' }; Char STRsymhash[] = { '#', ' ', '\0' }; Char STRsymarrow[] = { '>', ' ', '\0' }; *************** *** 197,205 **** --- 212,230 ---- Char STRwatch[] = { 'w', 'a', 't', 'c', 'h', '\0' }; #endif /* HAVENOUTMP */ + #ifndef DOSFS Char STRsldottcshrc[] = { '/', '.', 't', 'c', 's', 'h', 'r', 'c', '\0' }; Char STRsldotcshrc[] = { '/', '.', 'c', 's', 'h', 'r', 'c', '\0' }; Char STRsldotlogin[] = { '/', '.', 'l', 'o', 'g', 'i', 'n', '\0' }; + #else + Char STRsldottcshrc[] = { '/', 't', 'c', 's', 'h', 'r', 'c', '.', 'c', + 's', 'h', '\0' }; + Char STRsldotcshrc[] = { '/', 'c', 's', 'h', 'r', 'c', '.', 'c', 's', + 'h', '\0' }; + Char STRsldotlogin[] = { '/', 'l', 'o', 'g', 'i', 'n', '.', 'c', 's', + 'h', '\0' }; + #endif + Char STRignoreeof[] = { 'i', 'g', 'n', 'o', 'r', 'e', 'e', 'o', 'f', '\0' }; Char STRnoclobber[] = { 'n', 'o', 'c', 'l', 'o', 'b', 'b', 'e', 'r', '\0' }; Char STRhelpcommand[] = { 'h', 'e', 'l', 'p', 'c', 'o', 'm', 'm', 'a', 'n', *************** *** 284,286 **** --- 309,317 ---- Char STRdown[] = { 'd', 'o', 'w', 'n', '\0' }; Char STRleft[] = { 'l', 'e', 'f', 't', '\0' }; Char STRright[] = { 'r', 'i', 'g', 'h', 't', '\0' }; + + #ifdef __MINT__ + Char STRsuffixes[] = { 's', 'u', 'f', 'f', 'i', 'x', 'e', 's', '\0' }; + Char STRSUFFIXES[] = { 'S', 'U', 'F', 'F', 'I', 'X', 'E', 'S', '\0' }; + #endif + diff --context --new-file --recursive ../../store/tcsh-6.03/tc.func.c ./tc.func.c *** ../../store/tcsh-6.03/tc.func.c Tue Nov 24 13:04:32 1992 --- ./tc.func.c Thu Mar 11 03:10:24 1993 *************** *** 276,282 **** for (k = 0, i = 0; v[k] != NULL; k++) { tmp = dnormalize(v[k], symlinks == SYM_IGNORE); dp = &tmp[Strlen(tmp) - 1]; ! if (*dp == '/' && dp != tmp) #ifdef apollo if (dp != &tmp[1]) #endif /* apollo */ --- 276,282 ---- for (k = 0, i = 0; v[k] != NULL; k++) { tmp = dnormalize(v[k], symlinks == SYM_IGNORE); dp = &tmp[Strlen(tmp) - 1]; ! if (is_dirsep(*dp) && dp != tmp) #ifdef apollo if (dp != &tmp[1]) #endif /* apollo */ *************** *** 303,309 **** --- 303,313 ---- xprintf("%S:\n", tmp); for (cp = tmp, dp = buf; *cp; *dp++ = (*cp++ | QUOTE)) continue; + #if 0 if (dp[-1] != (Char) ('/' | QUOTE)) + #else + if (! ((dp[-1] & QUOTE) && is_dirsep(dp[-1] & ~QUOTE))) + #endif *dp++ = '/'; else dp[-1] &= TRIM; *************** *** 435,448 **** int epl, vpl; if ((ep = getenv("EDITOR")) != NULL) { /* if we have a value */ ! if ((p = strrchr(ep, '/')) != NULL) /* if it has a path */ ep = p + 1; /* then we want only the last part */ } else ep = "ed"; if ((vp = getenv("VISUAL")) != NULL) { /* if we have a value */ ! if ((p = strrchr(vp, '/')) != NULL) /* and it has a path */ vp = p + 1; /* then we want only the last part */ } else --- 439,452 ---- int epl, vpl; if ((ep = getenv("EDITOR")) != NULL) { /* if we have a value */ ! if ((p = lastslash(ep)) != NULL) /* if it has a path */ ep = p + 1; /* then we want only the last part */ } else ep = "ed"; if ((vp = getenv("VISUAL")) != NULL) { /* if we have a value */ ! if ((p = lastslash(vp)) != NULL) /* and it has a path */ vp = p + 1; /* then we want only the last part */ } else *************** *** 462,468 **** continue; *cp = '\0'; ! if ((cp = strrchr(p, '/')) != NULL) /* and it has a path */ cp = cp + 1; /* then we want only the last part */ else cp = p; /* else we get all of it */ --- 466,472 ---- continue; *cp = '\0'; ! if ((cp = lastslash(p)) != NULL) /* and it has a path */ cp = cp + 1; /* then we want only the last part */ else cp = p; /* else we get all of it */ *************** *** 1405,1417 **** } if (((h = value(STRhome)) != STRNULL) && (Strncmp(p = *hm, h, j = Strlen(h)) == 0) && ! (p[j] == '/' || p[j] == '\0')) { *hm = &p[j]; return STRNULL; } for (i = 0; i < tlength; i++) if ((Strncmp(p = *hm, tcache[i].home, j = tcache[i].hlen) == 0) && ! (p[j] == '/' || p[j] == '\0')) { *hm = &p[j]; return tcache[i].user; } --- 1409,1421 ---- } if (((h = value(STRhome)) != STRNULL) && (Strncmp(p = *hm, h, j = Strlen(h)) == 0) && ! (is_dirsep(p[j]) || p[j] == '\0')) { *hm = &p[j]; return STRNULL; } for (i = 0; i < tlength; i++) if ((Strncmp(p = *hm, tcache[i].home, j = tcache[i].hlen) == 0) && ! (is_dirsep(p[j]) || p[j] == '\0')) { *hm = &p[j]; return tcache[i].user; } *************** *** 1471,1478 **** --- 1475,1490 ---- if ((n = read(fd, tbuf, BUFSIZE)) <= 0) goto eof; + #ifdef DOSTEXT + /* we probably should strip the carriage returns, but + * changing them to blanks will work just as well for most cases + */ + for (i = 0; i < n; i++) + buf[i] = (tbuf[i] == '\r') ? ' ' : tbuf[i]; + #else for (i = 0; i < n; i++) buf[i] = tbuf[i]; + #endif p = buf; } n--; *************** *** 1666,1671 **** --- 1678,1686 ---- case '\0': /* Whoa!! what the hell happened */ return -1; + #ifdef DOSTEXT + case '\r': + #endif case '\n': /* The end of the line. */ if (ws) { /* terminate the last word */ *p = '\0'; diff --context --new-file --recursive ../../store/tcsh-6.03/tc.os.c ./tc.os.c *** ../../store/tcsh-6.03/tc.os.c Tue Nov 24 13:04:32 1992 --- ./tc.os.c Fri Feb 26 03:21:36 1993 *************** *** 1036,1042 **** /* look if we found root yet */ if (st_cur.st_ino == st_root.st_ino && DEV_DEV_COMPARE(st_cur.st_dev, st_root.st_dev)) { ! (void) strcpy(pathname, *pathptr != '/' ? "/" : pathptr); return (pathname); } --- 1036,1042 ---- /* look if we found root yet */ if (st_cur.st_ino == st_root.st_ino && DEV_DEV_COMPARE(st_cur.st_dev, st_root.st_dev)) { ! (void) strcpy(pathname, !is_dirsep(*pathptr) ? "/" : pathptr); return (pathname); } diff --context --new-file --recursive ../../store/tcsh-6.03/tc.os.h ./tc.os.h *** ../../store/tcsh-6.03/tc.os.h Tue Nov 24 13:04:32 1992 --- ./tc.os.h Fri Feb 26 03:24:24 1993 *************** *** 479,484 **** --- 479,485 ---- extern int qsort(); # endif #else + # ifndef __MINT__ # ifndef hpux # if __GNUC__ != 2 extern int abort(); *************** *** 490,495 **** --- 491,497 ---- extern void abort(); extern void qsort(); # endif + # endif /* !__MINT__ */ #endif /* SUNOS4 */ extern void perror(); diff --context --new-file --recursive ../../store/tcsh-6.03/tc.prompt.c ./tc.prompt.c *** ../../store/tcsh-6.03/tc.prompt.c Tue Nov 24 13:04:34 1992 --- ./tc.prompt.c Fri Feb 26 03:28:40 1993 *************** *** 303,309 **** else { if ((scp != 'C') && (q = value(STRhome)) != STRNULL && Strncmp(buff, q, (k = Strlen(q))) == 0 && ! (buff[k] == '/' || buff[k] == '\0')) { buff[--k] = '~'; q = &buff[k]; /* RWM - reset the path length */ --- 303,309 ---- else { if ((scp != 'C') && (q = value(STRhome)) != STRNULL && Strncmp(buff, q, (k = Strlen(q))) == 0 && ! (is_dirsep(buff[k]) || buff[k] == '\0')) { buff[--k] = '~'; q = &buff[k]; /* RWM - reset the path length */ *************** *** 312,334 **** else { q = buff; /* RWM - in case first char is not '/' */ ! if (*q == '/') updirs = 0; else updirs = 1; } /* RWM - calculate elements in the path */ for (z = q; *z; z++) { ! if (*z == '/') updirs++; continue; /* find the end */ } /* RWM - the ones we will skip can be found here */ updirs -= j; while (j-- > 0) { ! while ((z > q) && (*z != '/')) z--; /* back up */ if (j && z > q) z--; } ! if (*z == '/' && z != q) z++; /* RWM - if *q == '~' and *z != '~' then print */ --- 312,334 ---- else { q = buff; /* RWM - in case first char is not '/' */ ! if (is_abspath(q)) updirs = 0; else updirs = 1; } /* RWM - calculate elements in the path */ for (z = q; *z; z++) { ! if (is_dirsep(*z)) updirs++; continue; /* find the end */ } /* RWM - the ones we will skip can be found here */ updirs -= j; while (j-- > 0) { ! while ((z > q) && (!is_dirsep(*z))) z--; /* back up */ if (j && z > q) z--; } ! if (is_dirsep(*z) && z != q) z++; /* RWM - if *q == '~' and *z != '~' then print */ diff --context --new-file --recursive ../../store/tcsh-6.03/tc.sig.h ./tc.sig.h *** ../../store/tcsh-6.03/tc.sig.h Tue Nov 24 13:04:34 1992 --- ./tc.sig.h Sat Mar 13 21:53:04 1993 *************** *** 62,68 **** /* * sigvec is not the same everywhere */ ! # if defined(_SEQUENT_) || (defined(_POSIX_SOURCE) && !defined(hpux)) # define HAVE_SIGVEC # define mysigvec(a, b, c) sigaction(a, b, c) typedef struct sigaction sigvec_t; --- 62,68 ---- /* * sigvec is not the same everywhere */ ! # if defined(_SEQUENT_) || defined(__MINT__) || (defined(_POSIX_SOURCE) && !defined(hpux)) # define HAVE_SIGVEC # define mysigvec(a, b, c) sigaction(a, b, c) typedef struct sigaction sigvec_t; *************** *** 130,139 **** --- 130,141 ---- /* * For 4.2bsd signals. */ + # ifndef __MINT__ # ifdef sigmask # undef sigmask # endif /* sigmask */ # define sigmask(s) (1 << ((s)-1)) + # endif /* !__MINT__ */ # ifdef POSIXSIGS # define sigpause(a) bsd_sigpause(a) # define signal(a, b) bsd_signal(a, b) diff --context --new-file --recursive ../../store/tcsh-6.03/tc.vers.c ./tc.vers.c *** ../../store/tcsh-6.03/tc.vers.c Tue Nov 24 13:04:34 1992 --- ./tc.vers.c Mon Mar 8 06:04:48 1993 *************** *** 474,479 **** --- 474,484 ---- hosttype = "vistra800"; /* Stardent Vistra */ # endif /* i860 && !_havehosttype_ */ + # if defined(__MINT__) + # define _havehosttype_ + hosttype = "m68k-atari/MiNT"; + # endif /* __MINT__ */ + # ifndef _havehosttype_ # if defined(mc68000) || defined(__mc68000__) || defined(mc68k32) # define _havehosttype_ diff --context --new-file --recursive ../../store/tcsh-6.03/tw.init.c ./tw.init.c *** ../../store/tcsh-6.03/tw.init.c Tue Nov 24 13:04:26 1992 --- ./tw.init.c Mon Mar 8 19:25:18 1993 *************** *** 247,259 **** register Char **pv; struct varent *v = adrof(STRpath); struct varent *recexec = adrof(STRrecognize_only_executables); - if (v == NULL) /* if no path */ return; for (pv = v->vec; *pv; pv++) { ! if (pv[0][0] != '/') { tw_cmd_got |= TW_FL_REL; continue; } --- 247,262 ---- register Char **pv; struct varent *v = adrof(STRpath); struct varent *recexec = adrof(STRrecognize_only_executables); + #ifdef __MINT__ + struct varent *suffv = adrof(STRsuffixes); + Char **suffpv; + #endif if (v == NULL) /* if no path */ return; for (pv = v->vec; *pv; pv++) { ! if (!is_abspath(pv[0])) { tw_cmd_got |= TW_FL_REL; continue; } *************** *** 268,273 **** --- 271,289 ---- name = str2short(dp->d_name); if (dp->d_ino == 0 || (recexec && !executable(dir, name, 0))) continue; + #ifdef __MINT__ + { Char *s = Strrchr(name, '.'); + + if (s && suffv) { + for (suffpv = suffv->vec; *suffpv; suffpv++) { + if (!Strcmp(s+1, *suffpv)) { + *s = 0; break; + } + } + } + } + #endif /* __MINT__ */ + tw_cmd_add(name); } (void) closedir(dirp); *************** *** 421,427 **** CLRDIR(tw_cmd_state.dfd) ! while (*tw_cmd_state.pathv && tw_cmd_state.pathv[0][0] == '/') tw_cmd_state.pathv++; if ((ptr = *tw_cmd_state.pathv) != 0) { /* --- 437,443 ---- CLRDIR(tw_cmd_state.dfd) ! while (*tw_cmd_state.pathv && is_abspath(tw_cmd_state.pathv[0])) tw_cmd_state.pathv++; if ((ptr = *tw_cmd_state.pathv) != 0) { /* diff --context --new-file --recursive ../../store/tcsh-6.03/tw.parse.c ./tw.parse.c *** ../../store/tcsh-6.03/tw.parse.c Tue Nov 24 13:04:26 1992 --- ./tw.parse.c Fri Feb 26 03:50:14 1993 *************** *** 261,267 **** case RECOGNIZE: case RECOGNIZE_ALL: if (adrof(STRautocorrect)) { ! if ((slshp = Strrchr(wordp, '/')) != NULL && slshp[1] != '\0') { SearchNoDirErr = 1; for (bptr = wordp; bptr < slshp; bptr++) { /* --- 261,267 ---- case RECOGNIZE: case RECOGNIZE_ALL: if (adrof(STRautocorrect)) { ! if ((slshp = Lastslash(wordp)) != NULL && slshp[1] != '\0') { SearchNoDirErr = 1; for (bptr = wordp; bptr < slshp; bptr++) { /* *************** *** 350,356 **** items[0] = buffer; items[1] = NULL; ptr = items; ! count = (looking == TW_COMMAND && Strchr(wordp, '/') == 0) ? c_glob(&ptr) : t_glob(&ptr, looking == TW_COMMAND); if (count > 0) { --- 350,356 ---- items[0] = buffer; items[1] = NULL; ptr = items; ! count = (looking == TW_COMMAND && !Has_slash(wordp)) ? c_glob(&ptr) : t_glob(&ptr, looking == TW_COMMAND); if (count > 0) { *************** *** 1156,1162 **** break; case TW_COMMAND: ! if (Strchr(word, '/')) { looking = TW_FILE; flags |= TW_EXEC_CHK; flags |= TW_DIR_OK; --- 1156,1162 ---- break; case TW_COMMAND: ! if (Has_slash(word)) { looking = TW_FILE; flags |= TW_EXEC_CHK; flags |= TW_DIR_OK; *************** *** 1197,1208 **** */ flags |= (gpat == 0) ? TW_IGN_OK : TW_PAT_OK; ! if ((*word == '~') && (Strchr(word, '/') == NULL)) { looking = TW_LOGNAME; target = name; } else if ((target = Strrchr(name, '$')) != 0 && ! (Strchr(name, '/') == NULL)) { target++; looking = TW_VARIABLE; } --- 1197,1208 ---- */ flags |= (gpat == 0) ? TW_IGN_OK : TW_PAT_OK; ! if ((*word == '~') && (! Has_slash(word))) { looking = TW_LOGNAME; target = name; } else if ((target = Strrchr(name, '$')) != 0 && ! (! Has_slash(name))) { target++; looking = TW_VARIABLE; } *************** *** 1371,1377 **** { register Char *p; ! p = Strrchr(path, '/'); if (p == NULL) { copyn(name, path, MAXNAMLEN); dir[0] = '\0'; --- 1371,1377 ---- { register Char *p; ! p = Lastslash(path); if (p == NULL) { copyn(name, path, MAXNAMLEN); dir[0] = '\0'; *************** *** 1448,1454 **** switch (old[0]) { case '~': ! for (p = new, o = &old[1]; *o && *o != '/'; *p++ = *o++) continue; *p = '\0'; if (gethdir(new)) { --- 1448,1454 ---- switch (old[0]) { case '~': ! for (p = new, o = &old[1]; *o && !is_dirsep(*o); *p++ = *o++) continue; *p = '\0'; if (gethdir(new)) { *************** *** 1516,1525 **** */ for (p = edir; *p; p++) continue; ! if (*--p == '/') { for (p = nd; *p; p++) continue; ! if (*--p != '/') p = NULL; } for (d = edir, s = nd; (*d++ = *s++) != '\0';) --- 1516,1525 ---- */ for (p = edir; *p; p++) continue; ! if (is_dirsep(*--p)) { for (p = nd; *p; p++) continue; ! if (!is_dirsep(*--p)) p = NULL; } for (d = edir, s = nd; (*d++ = *s++) != '\0';) diff --context --new-file --recursive ../../store/tcsh-6.03/tw.spell.c ./tw.spell.c *** ../../store/tcsh-6.03/tw.spell.c Tue Nov 24 13:04:26 1992 --- ./tw.spell.c Fri Feb 26 03:54:20 1993 *************** *** 53,60 **** bool foundslash = 0; int retval; for (;;) { ! while (*old == '/') { /* skip '/' */ *new++ = *old++; foundslash = 1; } --- 53,67 ---- bool foundslash = 0; int retval; + #ifdef DOSFS + /* skip drive specification, if any */ + if (*old && old[1] == ':' && is_dirsep(old[2])) { + *new++ = *old++; *new++ = *old++; + } + #endif + for (;;) { ! while (is_dirsep(*old)) { /* skip '/' */ *new++ = *old++; foundslash = 1; } *************** *** 73,79 **** if (p < guess + FILSIZ) *p++ = *cp; ws = p; ! for (; *old != '/' && *old != '\0'; old++)/* add current file name */ if (p < guess + FILSIZ) *p++ = *old; *p = '\0'; /* terminate it */ --- 80,86 ---- if (p < guess + FILSIZ) *p++ = *cp; ws = p; ! for (; !is_dirsep(*old) && *old != '\0'; old++)/* add current file name */ if (p < guess + FILSIZ) *p++ = *old; *p = '\0'; /* terminate it */ *************** *** 84,90 **** */ /* (*should* say "looking for directory" whenever '/' is next...) */ retval = t_search(guess, p, SPELL, FILSIZ, ! looking == TW_COMMAND && (foundslash || *old != '/') ? TW_COMMAND : looking, 1, STRNULL, 0); if (retval >= 4 || retval < 0) return -1; /* hopeless */ --- 91,97 ---- */ /* (*should* say "looking for directory" whenever '/' is next...) */ retval = t_search(guess, p, SPELL, FILSIZ, ! looking == TW_COMMAND && (foundslash || !is_dirsep(*old)) ? TW_COMMAND : looking, 1, STRNULL, 0); if (retval >= 4 || retval < 0) return -1; /* hopeless */