dvadura@watdragon.waterloo.edu (Dennis Vadura) (08/04/90)
Posting-number: Volume 14, Issue 47 Submitted-by: dvadura@watdragon.waterloo.edu (Dennis Vadura) Archive-name: dmake/patch01pt2 #!/bin/sh # this is part 2 of a multipart archive # do not concatenate these parts, unpack them in order with /bin/sh # file dmake-3.5-patch1 continued # CurArch=2 if test ! -r s2_seq_.tmp then echo "Please unpack part 1 first!" exit 1; fi ( read Scheck if test "$Scheck" != $CurArch then echo "Please unpack part $Scheck next!" exit 1; else exit 0; fi ) < s2_seq_.tmp || exit 1 sed 's/^X//' << 'SHAR_EOF' >> dmake-3.5-patch1 XX XX/* Define the getcwd function that is used in the code, since BSD does XX * not have getcwd, but call it getwd instead. */ XXextern char *getcwd ANSI((char *, int)); XX XX/* Define setvbuf, SysV doesn't have one */ XX#define setvbuf(fp, bp, type, len) setbuf( fp, NULL ); XX XX/* need to define size_t */ XXtypedef long size_t; XSHAR_EOF Xchmod 0440 unix/sysvr1/config.h || echo "restore of unix/sysvr1/config.h fails" Xset `wc -c unix/sysvr1/config.h`;Sum=$1 Xif test "$Sum" != "2003" Xthen echo original size 2003, current size $Sum;fi Xsed 's/^X//' << 'SHAR_EOF' > unix/sysvr1/config.mk && XX# This is the SysV R3 UNIX configuration file for DMAKE XX# It simply modifies the values of SRC, and checks to see if XX# OSENVIRONMENT is defined. If so it includes the appropriate XX# config.mk file. XX# XX# It also sets the values of .SOURCE.c and .SOURCE.h to include the local XX# directory. XX# XXosrdir := $(OS)$(DIRSEPSTR)$(OSRELEASE) XX XX# The following are required sources XXOSDSRC := runargv.c vfprintf.c XXSRC += $(OSDSRC) XX.SETDIR=$(osrdir) : $(OSDSRC) XX XX.SOURCE.h : $(osrdir) XX XX# Local configuration modifications for CFLAGS, there's local SysV includes XX# too. XXCFLAGS += -I$(osrdir) XX XX# See if we modify anything in the lower levels. XX.IF $(OSENVIRONMENT) != $(NULL) XX .INCLUDE .IGNORE : $(osrdir)$(DIRSEPSTR)$(OSENVIRONMENT)$(DIRSEPSTR)config.mk XX.END XSHAR_EOF Xchmod 0640 unix/sysvr1/config.mk || echo "restore of unix/sysvr1/config.mk fails" Xset `wc -c unix/sysvr1/config.mk`;Sum=$1 Xif test "$Sum" != "745" Xthen echo original size 745, current size $Sum;fi Xsed 's/^X//' << 'SHAR_EOF' > unix/sysvr1/make.sh && XXmkdir objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O infer.c XXmv infer.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O make.c XXmv make.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O stat.c XXmv stat.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O expand.c XXmv expand.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O string.c XXmv string.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O hash.c XXmv hash.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O dag.c XXmv dag.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O dmake.c XXmv dmake.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O path.c XXmv path.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O imacs.c XXmv imacs.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O sysintf.c XXmv sysintf.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O parse.c XXmv parse.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O getinp.c XXmv getinp.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O quit.c XXmv quit.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O basename.c XXmv basename.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O dump.c XXmv dump.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O macparse.c XXmv macparse.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O rulparse.c XXmv rulparse.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O percent.c XXmv percent.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O unix/arlib.c XXmv arlib.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O unix/dirbrk.c XXmv dirbrk.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O unix/explode.c XXmv explode.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O unix/rmprq.c XXmv rmprq.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O unix/ruletab.c XXmv ruletab.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O unix/sysvr1/runargv.c XXmv runargv.o objects XXcc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr1 -O unix/sysvr1/vfprintf.c XXmv vfprintf.o objects XXcc -o dmake objects/infer.o objects/make.o objects/stat.o objects/expand.o objects/string.o objects/hash.o objects/dag.o objects/dmake.o objects/path.o objects/imacs.o objects/sysintf.o objects/parse.o objects/getinp.o objects/quit.o objects/basename.o objects/dump.o objects/macparse.o objects/rulparse.o objects/percent.o objects/arlib.o objects/dirbrk.o objects/explode.o objects/rmprq.o objects/ruletab.o objects/runargv.o objects/vfprintf.o XSHAR_EOF Xchmod 0640 unix/sysvr1/make.sh || echo "restore of unix/sysvr1/make.sh fails" Xset `wc -c unix/sysvr1/make.sh`;Sum=$1 Xif test "$Sum" != "2576" Xthen echo original size 2576, current size $Sum;fi Xsed 's/^X//' << 'SHAR_EOF' > unix/sysvr1/putenv.c && XX/* RCS -- $Header: /u2/dvadura/src/generic/dmake/src/unix/sysvr1/RCS/putenv.c,v 1.1 90/07/31 11:00:17 dvadura Exp $ XX-- SYNOPSIS -- our own putenv for BSD systems. XX-- XX-- DESCRIPTION XX-- This originally came from MKS, but I rewrote it to fix a bug with XX-- replacing existing strings, probably never happened but the code XX-- was wrong nonetheless. XX-- XX-- AUTHOR XX-- Dennis Vadura, dvadura@watdragon.uwaterloo.ca XX-- CS DEPT, University of Waterloo, Waterloo, Ont., Canada XX-- XX-- COPYRIGHT XX-- Copyright (c) 1990 by Dennis Vadura. All rights reserved. XX-- XX-- This program is free software; you can redistribute it and/or XX-- modify it under the terms of the GNU General Public License XX-- (version 1), as published by the Free Software Foundation, and XX-- found in the file 'LICENSE' included with this distribution. XX-- XX-- This program is distributed in the hope that it will be useful, XX-- but WITHOUT ANY WARRANTY; without even the implied warrant of XX-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the XX-- GNU General Public License for more details. XX-- XX-- You should have received a copy of the GNU General Public License XX-- along with this program; if not, write to the Free Software XX-- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. XX-- XX-- LOG XX-- $Log: putenv.c,v $ XX * Revision 1.1 90/07/31 11:00:17 dvadura XX * Initial Revision Dmake 3.5 XX * XX*/ XX XX#include <string.h> XX#include <stdio.h> XX XX/* Put a string containing "name=value" into the environment. XX * XX * First search the environment for the string name, if found then XX * replace that string with the new one. Otherwise add the string to the XX * environment as a new string. XX * XX * Return 0 if OK, non-zero otherwise. XX */ XXint XXputenv(string) XXchar *string; XX{ XX extern char **environ; XX static char **newenv = NULL; XX register char *tmp; XX register char **env; XX register int size; XX XX for( env = environ; (tmp = *env) != NULL; env++ ) { XX register char *np = string; XX register char c; XX XX /* Search the strings in environ, if name= matches then replace the XX * string with the new one. */ XX while( (c = *tmp++) == *np++ ) { XX if( c == '\0' ) break; /* skip this string */ XX if( c == '=' ) { XX *env = string; XX return (0); XX } XX } XX } XX XX /* Need to grow the environment, so compute its new size */ XX size = (env-environ)+2; XX XX /* make sure we don't try to realloc the original environment */ XX if( environ != newenv ) { XX if( (newenv = (char**) malloc(size*sizeof(char))) == NULL ) XX return(1); XX XX memcpy((char*)newenv, (char*)environ, (size-2)*sizeof(char)); XX } XX else XX /* realloc the environment to make room for the new string. */ XX if( (newenv = (char**) realloc(environ, size*sizeof(char*))) == NULL ) XX return(1); XX XX newenv[--size] = NULL; XX newenv[--size] = string; XX environ = newenv; XX XX return (0); XX} XSHAR_EOF Xchmod 0440 unix/sysvr1/putenv.c || echo "restore of unix/sysvr1/putenv.c fails" Xset `wc -c unix/sysvr1/putenv.c`;Sum=$1 Xif test "$Sum" != "2929" Xthen echo original size 2929, current size $Sum;fi Xsed 's/^X//' << 'SHAR_EOF' > unix/sysvr1/runargv.c && XX/* RCS -- $Header: /u2/dvadura/src/generic/dmake/src/unix/sysvr1/RCS/runargv.c,v 1.1 90/07/31 11:00:17 dvadura Exp $ XX-- SYNOPSIS -- invoke a sub process. XX-- XX-- DESCRIPTION XX-- Use the standard methods of executing a sub process. XX-- XX-- AUTHOR XX-- Dennis Vadura, dvadura@watdragon.uwaterloo.ca XX-- CS DEPT, University of Waterloo, Waterloo, Ont., Canada XX-- XX-- COPYRIGHT XX-- Copyright (c) 1990 by Dennis Vadura. All rights reserved. XX-- XX-- This program is free software; you can redistribute it and/or XX-- modify it under the terms of the GNU General Public License XX-- (version 1), as published by the Free Software Foundation, and XX-- found in the file 'LICENSE' included with this distribution. XX-- XX-- This program is distributed in the hope that it will be useful, XX-- but WITHOUT ANY WARRANTY; without even the implied warrant of XX-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the XX-- GNU General Public License for more details. XX-- XX-- You should have received a copy of the GNU General Public License XX-- along with this program; if not, write to the Free Software XX-- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. XX-- XX-- LOG XX-- $Log: runargv.c,v $ XX * Revision 1.1 90/07/31 11:00:17 dvadura XX * Initial Revision Dmake 3.5 XX * XX*/ XX XX#include <signal.h> XX#include "extern.h" XX#include "sysintf.h" XX#include "alloc.h" XX XXtypedef struct prp { XX char *prp_cmd; XX int prp_group; XX int prp_ignore; XX int prp_last; XX struct prp *prp_next; XX char *prp_dir; XX} RCP, *RCPPTR; XX XXtypedef struct pr { XX int pr_valid; XX int pr_pid; XX CELLPTR pr_target; XX HOWPTR pr_how; XX int pr_ignore; XX int pr_last; XX RCPPTR pr_recipe; XX RCPPTR pr_recipe_end; XX} PR; XX XXstatic PR *_procs = NIL(PR); XXstatic int _proc_cnt = 0; XXstatic int _abort_flg= FALSE; XXstatic int _use_i = -1; XXstatic int _do_upd = 0; XX XXstatic void _add_child ANSI((int, CELLPTR, HOWPTR, int, int)); XXstatic void _attach_cmd ANSI((char *, int, int, CELLPTR, HOWPTR, int)); XXstatic void _finished_child ANSI((int, int)); XXstatic int _running ANSI((CELLPTR, HOWPTR)); XX XXint XXrunargv(target, how, ignore, group, last, cmd) XXCELLPTR target; XXHOWPTR how; XXint ignore; XXint group; XXint last; XXchar *cmd; XX{ XX extern int errno; XX extern char *sys_errlist[]; XX int pid; XX char *argv[MAXARGV]; XX XX if( _running(target, how) /*&& Max_proc != 1*/ ) { XX /* The command will be executed when the previous recipe XX * line completes. */ XX _attach_cmd( cmd, group, ignore, target, how, last ); XX return(1); XX } XX XX Pack_argv( argv, MAXARGV, group, cmd ); XX XX while( _proc_cnt == Max_proc ) XX if( Wait_for_child(FALSE, -1) == -1 ) Fatal( "Lost a child" ); XX XX switch( pid=fork() ){ XX int wid; XX int status; XX XX case -1: /* fork failed */ XX Error("%s: %s", argv[0], sys_errlist[errno]); XX Handle_result(-1, ignore, _abort_flg, target); XX return(-1); XX XX case 0: /* child */ XX execvp(argv[0], argv); XX Continue = TRUE; /* survive error message */ XX Error("%s: %s", argv[0], sys_errlist[errno]); XX kill(getpid(), SIGTERM); XX /*NOTREACHED*/ XX XX default: /* parent */ XX _add_child(pid, target, how, ignore, last); XX } XX XX return(1); XX} XX XX XXint XXWait_for_child( abort_flg, pid ) XXint abort_flg; XXint pid; XX{ XX int wid; XX int status; XX int waitchild; XX XX waitchild = (pid == -1)? FALSE : Wait_for_completion; XX XX do { XX if( (wid = wait(&status)) == -1 ) return(-1); XX XX _abort_flg = abort_flg; XX _finished_child(wid, status); XX _abort_flg = FALSE; XX } XX while( waitchild && pid != wid ); XX XX return(0); XX} XX XX XXvoid XXClean_up_processes() XX{ XX register int i; XX XX if( _procs != NIL(PR) ) { XX for( i=0; i<Max_proc; i++ ) XX if( _procs[i].pr_valid ) XX kill(_procs[i].pr_pid, SIGTERM); XX XX while( Wait_for_child(TRUE, -1) != -1 ); XX } XX} XX XX XXstatic void XX_add_child( pid, target, how, ignore, last ) XXint pid; XXCELLPTR target; XXHOWPTR how; XXint ignore; XXint last; XX{ XX register int i; XX register PR *pp; XX XX if( _procs == NIL(PR) ) { XX TALLOC( _procs, Max_proc, PR ); XX } XX XX if( (i = _use_i) == -1 ) XX for( i=0; i<Max_proc; i++ ) XX if( !_procs[i].pr_valid ) XX break; XX XX pp = _procs+i; XX XX pp->pr_valid = 1; XX pp->pr_pid = pid; XX pp->pr_target = target; XX pp->pr_how = how; XX pp->pr_ignore = ignore; XX pp->pr_last = last; XX XX Current_target = NIL(HOW); XX XX _proc_cnt++; XX XX if( Wait_for_completion ) Wait_for_child( FALSE, pid ); XX} XX XX XXstatic void XX_finished_child(pid, status) XXint pid; XXint status; XX{ XX register int i; XX register PR *pp; XX XX for( i=0; i<Max_proc; i++ ) XX if( _procs[i].pr_valid && _procs[i].pr_pid == pid ) XX break; XX XX _procs[i].pr_valid = 0; XX _proc_cnt--; XX XX if( _procs[i].pr_recipe != NIL(RCP) && !_abort_flg ) { XX RCPPTR rp = _procs[i].pr_recipe; XX char *dir; XX XX Current_target = _procs[i].pr_how; XX Handle_result( status, _procs[i].pr_ignore, FALSE, _procs[i].pr_target ); XX Current_target = NIL(HOW); XX XX _procs[i].pr_recipe = rp->prp_next; XX XX _use_i = i; XX dir = _strdup(Get_current_dir()); XX Set_dir( rp->prp_dir ); XX runargv( _procs[i].pr_target, _procs[i].pr_how, rp->prp_ignore, XX rp->prp_group, rp->prp_last, rp->prp_cmd ); XX Set_dir(dir); XX FREE(dir); XX FREE(rp->prp_dir); XX _use_i = -1; XX XX FREE( rp->prp_cmd ); XX FREE( rp ); XX XX if( _proc_cnt == Max_proc ) Wait_for_child( FALSE, -1 ); XX } XX else { XX Unlink_temp_files( _procs[i].pr_how ); XX Handle_result(status,_procs[i].pr_ignore,_abort_flg,_procs[i].pr_target); XX XX if( _procs[i].pr_last && !Doing_bang ) XX Update_time_stamp( _procs[i].pr_target, _procs[i].pr_how ); XX } XX} XX XX XXstatic int XX_running( cp, how ) XXCELLPTR cp; XXHOWPTR how; XX{ XX register int i; XX XX if( !_procs ) return(FALSE); XX XX for( i=0; i<Max_proc; i++ ) XX if( _procs[i].pr_valid && XX _procs[i].pr_how == how && XX _procs[i].pr_target == cp ) XX break; XX XX return( i != Max_proc ); XX} XX XX XXstatic void XX_attach_cmd( cmd, group, ignore, cp, how, last ) XXchar *cmd; XXint group; XXint ignore; XXCELLPTR cp; XXHOWPTR how; XXint last; XX{ XX register int i; XX RCPPTR rp; XX XX for( i=0; i<Max_proc; i++ ) XX if( _procs[i].pr_valid && XX _procs[i].pr_how == how && XX _procs[i].pr_target == cp ) XX break; XX XX TALLOC( rp, 1, RCP ); XX rp->prp_cmd = _strdup(cmd); XX rp->prp_group = group; XX rp->prp_ignore= ignore; XX rp->prp_last = last; XX rp->prp_dir = _strdup(Get_current_dir()); XX XX if( _procs[i].pr_recipe == NIL(RCP) ) XX _procs[i].pr_recipe = _procs[i].pr_recipe_end = rp; XX else { XX _procs[i].pr_recipe_end->prp_next = rp; XX _procs[i].pr_recipe_end = rp; XX } XX} XSHAR_EOF Xchmod 0440 unix/sysvr1/runargv.c || echo "restore of unix/sysvr1/runargv.c fails" Xset `wc -c unix/sysvr1/runargv.c`;Sum=$1 Xif test "$Sum" != "6722" Xthen echo original size 6722, current size $Sum;fi Xsed 's/^X//' << 'SHAR_EOF' > unix/sysvr1/startup.mk && XX# Generic UNIX DMAKE startup file. Customize to suit your needs. XX# Should work for both SYSV, and BSD 4.3 XX# See the documentation for a description of internally defined macros. XX# XX# Disable warnings for macros redefined here that were given XX# on the command line. XX__.SILENT := $(.SILENT) XX.SILENT := yes XX XX# Configuration parameters for DMAKE startup.mk file XX# Set these to NON-NULL if you wish to turn the parameter on. XX_HAVE_RCS := yes # yes => RCS is installed. XX_HAVE_SCCS := yes # yes => SCCS is installed. XX XX# Applicable suffix definitions XXA := .a # Libraries XXE := # Executables XXF := .f # Fortran XXO := .o # Objects XXP := .p # Pascal XXS := .s # Assembler sources XXV := ,v # RCS suffix XX XX# Recipe execution configurations XXSHELL := /bin/sh XXSHELLFLAGS := -ce XXGROUPSHELL := $(SHELL) XXGROUPFLAGS := XXSHELLMETAS := |();&<>?*][$$:\\#`'" XXGROUPSUFFIX := XX XX# Standard C-language command names and flags XX CPP := /lib/cpp # C-preprocessor XX CC := cc # C-compiler and flags XX CFLAGS = XX XX AS := as # Assembler and flags XX ASFLAGS = XX XX LD = $(CC) # Loader and flags XX LDFLAGS = XX LDLIBS = XX XX# Definition of $(MAKE) macro for recursive makes. XX MAKE = $(MAKECMD) $(MFLAGS) XX XX# Definition of Print command for this system. XX PRINT = lpr XX XX# Language and Parser generation Tools and their flags XX YACC := yacc # standard yacc XX YFLAGS = XX YTAB := y.tab # yacc output files name stem. XX XX LEX := lex # standard lex XX LFLAGS = XX LEXYY := lex.yy # lex output file XX XX# Other Compilers, Tools and their flags XX PC := pc # pascal compiler XX RC := f77 # ratfor compiler XX FC := f77 # fortran compiler XX XX CO := co # check out for RCS XX COFLAGS := -q XX XX AR := ar # archiver XX ARFLAGS = ruv XX XX RM := /bin/rm # remove a file command XX RMFLAGS = XX XX# Implicit generation rules for making inferences. XX# We don't provide .yr or .ye rules here. They're obsolete. XX# Rules for making *$O XX %$O : %.c ; $(CC) $(CFLAGS) -c $< XX %$O : %$P ; $(PC) $(PFLAGS) -c $< XX %$O : %$S ; $(AS) $< XX %$O : %.cl ; class -c $< XX %$O : %.e %.r %.F %$F XX $(FC) $(RFLAGS) $(EFLAGS) $(FFLAGS) -c $< XX XX# Executables XX %$E : %$O ; $(LD) $(LDFLAGS) -o $@ $< $(LDLIBES) XX XX# lex and yacc rules XX %.c : %.y ; $(YACC) $(YFLAGS) $<; mv $(YTAB).c $@ XX %.c : %.l ; $(LEX) $(LFLAGS) $<; mv $(LEXYY).c $@ XX XX# This rule tells how to make *.out from it's immediate list of prerequisites XX# UNIX only. XX %.out :; $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS) XX XX# RCS support XX.IF $(_HAVE_RCS) XX % : %$V $$(@:d)RCS/$$(@:f)$V;- $(CO) $(COFLAGS) $@ XX .NOINFER : %$V $$(@:d)RCS/$$(@:f)$V XX.END XX XX# SCCS support XX.IF $(_HAVE_SCCS) XX % : s.% ; get $@ XX .NOINFER : s.% XX.END XX XX# Recipe to make archive files. XX%$A : XX[ XX $(AR) $(ARFLAGS) $@ $? XX $(RM) $(RMFLAGS) $? XX ranlib $@ XX] XX XX# DMAKE uses this recipe to remove intermediate targets XX.REMOVE :; $(RM) -f $< XX XX# AUGMAKE extensions for SYSV compatibility XX@B = $(@:b) XX@D = $(@:d) XX@F = $(@:f) XX*B = $(*:b) XX*D = $(*:d) XX*F = $(*:f) XX<B = $(<:b) XX<D = $(<:d) XX<F = $(<:f) XX?B = $(?:b) XX?F = $(?:f) XX?D = $(?:d) XX XX# Turn warnings back to previous setting. XX.SILENT := $(__.SILENT) XX XX# Local startup file if any XX.INCLUDE .IGNORE: "_startup.mk" XSHAR_EOF Xchmod 0640 unix/sysvr1/startup.mk || echo "restore of unix/sysvr1/startup.mk fails" Xset `wc -c unix/sysvr1/startup.mk`;Sum=$1 Xif test "$Sum" != "3187" Xthen echo original size 3187, current size $Sum;fi Xsed 's/^X//' << 'SHAR_EOF' > unix/sysvr1/stdarg.h && XX/* XX * stdarg.h XX * XX * defines ANSI style macros for accessing arguments of a function which takes XX * a variable number of arguments XX * XX */ XX XX#if !defined(__STDARG) XX#define __STDARG XX XXtypedef char *va_list; XX XX#define va_dcl int va_alist XX#define va_start(ap,v) ap = (va_list)&va_alist XX#define va_arg(ap,t) ((t*)(ap += sizeof(t)))[-1] XX#define va_end(ap) ap = NULL XX#endif XSHAR_EOF Xchmod 0440 unix/sysvr1/stdarg.h || echo "restore of unix/sysvr1/stdarg.h fails" Xset `wc -c unix/sysvr1/stdarg.h`;Sum=$1 Xif test "$Sum" != "373" Xthen echo original size 373, current size $Sum;fi Xsed 's/^X//' << 'SHAR_EOF' > unix/sysvr1/stdlib.h && XX#ifndef _STDLIB_INCLUDED_ XX#define _STDLIB_INCLUDED_ XX XXextern /*GOTO*/ _exit(); XXextern /*GOTO*/ exit(); XXextern /*GOTO*/ abort(); XXextern int system(); XXextern char *getenv(); XXextern char *calloc(); XXextern char *malloc(); XXextern char *realloc(); XXextern free(); XXextern int errno; XX XX#ifndef EIO XX# include <errno.h> XX#endif XX XX#endif /* _STDLIB_INCLUDED_ */ XSHAR_EOF Xchmod 0440 unix/sysvr1/stdlib.h || echo "restore of unix/sysvr1/stdlib.h fails" Xset `wc -c unix/sysvr1/stdlib.h`;Sum=$1 Xif test "$Sum" != "346" Xthen echo original size 346, current size $Sum;fi Xsed 's/^X//' << 'SHAR_EOF' > unix/sysvr1/time.h && XX/* XX** Berkeley get this wrong! XX*/ XX#ifndef TIME_h XX#define TIME_h XX XXtypedef long time_t; /* this is the thing we use */ XX XX#endif TIME_h XX XSHAR_EOF Xchmod 0440 unix/sysvr1/time.h || echo "restore of unix/sysvr1/time.h fails" Xset `wc -c unix/sysvr1/time.h`;Sum=$1 Xif test "$Sum" != "133" Xthen echo original size 133, current size $Sum;fi Xsed 's/^X//' << 'SHAR_EOF' > unix/sysvr1/vfprintf.c && XX/* From: XX * John Limpert johnl@gronk.UUCP uunet!n3dmc!gronk!johnl XX */ XX XX#include <stdio.h> XX#include <varargs.h> XX XX#ifndef BUFSIZ XX#include <stdio.h> XX#endif XX XX#ifndef va_dcl XX#include <varargs.h> XX#endif XX XXint XXvsprintf(str, fmt, ap) XX char *str, *fmt; XX va_list ap; XX{ XX FILE f; XX int len; XX XX f._flag = _IOWRT+_IOMYBUF; XX f._ptr = (char *)str; /* My copy of BSD stdio.h has this as (char *) XX * with a comment that it should be XX * (unsigned char *). Since this code is XX * intended for use on a vanilla BSD system, XX * we'll stick with (char *) for now. XX */ XX f._cnt = 32767; XX len = _doprnt(fmt, ap, &f); XX *f._ptr = 0; XX return (len); XX} XX XXint XXvfprintf(iop, fmt, ap) XX FILE *iop; XX char *fmt; XX va_list ap; XX{ XX int len; XX XX len = _doprnt(fmt, ap, iop); XX return (ferror(iop) ? EOF : len); XX} XX XXint XXvprintf(fmt, ap) XX char *fmt; XX va_list ap; XX{ XX int len; XX XX len = _doprnt(fmt, ap, stdout); XX return (ferror(stdout) ? EOF : len); XX} XSHAR_EOF Xchmod 0644 unix/sysvr1/vfprintf.c || echo "restore of unix/sysvr1/vfprintf.c fails" Xset `wc -c unix/sysvr1/vfprintf.c`;Sum=$1 Xif test "$Sum" != "934" Xthen echo original size 934, current size $Sum;fi Xsed 's/^X//' << 'SHAR_EOF' > unix/sysvr3/runargv.c && XX/* RCS -- $Header: /u2/dvadura/src/generic/dmake/src/unix/sysvr3/RCS/runargv.c,v 1.1 90/07/31 10:51:27 dvadura Exp $ XX-- SYNOPSIS -- invoke a sub process. XX-- XX-- DESCRIPTION XX-- Use the standard methods of executing a sub process. XX-- XX-- AUTHOR XX-- Dennis Vadura, dvadura@watdragon.uwaterloo.ca XX-- CS DEPT, University of Waterloo, Waterloo, Ont., Canada XX-- XX-- COPYRIGHT XX-- Copyright (c) 1990 by Dennis Vadura. All rights reserved. XX-- XX-- This program is free software; you can redistribute it and/or XX-- modify it under the terms of the GNU General Public License XX-- (version 1), as published by the Free Software Foundation, and XX-- found in the file 'LICENSE' included with this distribution. XX-- XX-- This program is distributed in the hope that it will be useful, XX-- but WITHOUT ANY WARRANTY; without even the implied warrant of XX-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the XX-- GNU General Public License for more details. XX-- XX-- You should have received a copy of the GNU General Public License XX-- along with this program; if not, write to the Free Software XX-- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. XX-- XX-- LOG XX-- $Log: runargv.c,v $ XX * Revision 1.1 90/07/31 10:51:27 dvadura XX * Initial Revision Dmake 3.5 XX * XX * Revision 1.1 90/07/20 16:54:53 dvadura XX * Initial Revision of Version 3.5 XX * XX*/ XX XX#include <signal.h> XX#include "extern.h" XX#include "sysintf.h" XX#include "alloc.h" XX XXtypedef struct prp { XX char *prp_cmd; XX int prp_group; XX int prp_ignore; XX int prp_last; XX struct prp *prp_next; XX char *prp_dir; XX} RCP, *RCPPTR; XX XXtypedef struct pr { XX int pr_valid; XX int pr_pid; XX CELLPTR pr_target; XX HOWPTR pr_how; XX int pr_ignore; XX int pr_last; XX RCPPTR pr_recipe; XX RCPPTR pr_recipe_end; XX} PR; XX XXstatic PR *_procs = NIL(PR); XXstatic int _proc_cnt = 0; XXstatic int _abort_flg= FALSE; XXstatic int _use_i = -1; XXstatic int _do_upd = 0; XX XXstatic void _add_child ANSI((int, CELLPTR, HOWPTR, int, int)); XXstatic void _attach_cmd ANSI((char *, int, int, CELLPTR, HOWPTR, int)); XXstatic void _finished_child ANSI((int, int)); XXstatic int _running ANSI((CELLPTR, HOWPTR)); XX XXint XXrunargv(target, how, ignore, group, last, cmd) XXCELLPTR target; XXHOWPTR how; XXint ignore; XXint group; XXint last; XXchar *cmd; XX{ XX extern int errno; XX extern char *sys_errlist[]; XX int pid; XX char *argv[MAXARGV]; XX XX if( _running(target, how) /*&& Max_proc != 1*/ ) { XX /* The command will be executed when the previous recipe XX * line completes. */ XX _attach_cmd( cmd, group, ignore, target, how, last ); XX return(1); XX } XX XX Pack_argv( argv, MAXARGV, group, cmd ); XX XX while( _proc_cnt == Max_proc ) XX if( Wait_for_child(FALSE, -1) == -1 ) Fatal( "Lost a child" ); XX XX switch( pid=fork() ){ XX int wid; XX int status; XX XX case -1: /* fork failed */ XX Error("%s: %s", argv[0], sys_errlist[errno]); XX Handle_result(-1, ignore, _abort_flg, target); XX return(-1); XX XX case 0: /* child */ XX execvp(argv[0], argv); XX Continue = TRUE; /* survive error message */ XX Error("%s: %s", argv[0], sys_errlist[errno]); XX kill(getpid(), SIGTERM); XX /*NOTREACHED*/ XX XX default: /* parent */ XX _add_child(pid, target, how, ignore, last); XX } XX XX return(1); XX} XX XX XXint XXWait_for_child( abort_flg, pid ) XXint abort_flg; XXint pid; XX{ XX int wid; XX int status; XX int waitchild; XX XX waitchild = (pid == -1)? FALSE : Wait_for_completion; XX XX do { XX if( (wid = wait(&status)) == -1 ) return(-1); XX XX _abort_flg = abort_flg; XX _finished_child(wid, status); XX _abort_flg = FALSE; XX } XX while( waitchild && pid != wid ); XX XX return(0); XX} XX XX XXvoid XXClean_up_processes() XX{ XX register int i; XX XX if( _procs != NIL(PR) ) { XX for( i=0; i<Max_proc; i++ ) XX if( _procs[i].pr_valid ) XX kill(_procs[i].pr_pid, SIGTERM); XX XX while( Wait_for_child(TRUE, -1) != -1 ); XX } XX} XX XX XXstatic void XX_add_child( pid, target, how, ignore, last ) XXint pid; XXCELLPTR target; XXHOWPTR how; XXint ignore; XXint last; XX{ XX register int i; XX register PR *pp; XX XX if( _procs == NIL(PR) ) { XX TALLOC( _procs, Max_proc, PR ); XX } XX XX if( (i = _use_i) == -1 ) XX for( i=0; i<Max_proc; i++ ) XX if( !_procs[i].pr_valid ) XX break; XX XX pp = _procs+i; XX XX pp->pr_valid = 1; XX pp->pr_pid = pid; XX pp->pr_target = target; XX pp->pr_how = how; XX pp->pr_ignore = ignore; XX pp->pr_last = last; XX XX Current_target = NIL(HOW); XX XX _proc_cnt++; XX XX if( Wait_for_completion ) Wait_for_child( FALSE, pid ); XX} XX XX XXstatic void XX_finished_child(pid, status) XXint pid; XXint status; XX{ XX register int i; XX register PR *pp; XX XX for( i=0; i<Max_proc; i++ ) XX if( _procs[i].pr_valid && _procs[i].pr_pid == pid ) XX break; XX XX _procs[i].pr_valid = 0; XX _proc_cnt--; XX XX if( _procs[i].pr_recipe != NIL(RCP) && !_abort_flg ) { XX RCPPTR rp = _procs[i].pr_recipe; XX char *dir; XX XX Current_target = _procs[i].pr_how; XX Handle_result( status, _procs[i].pr_ignore, FALSE, _procs[i].pr_target ); XX Current_target = NIL(HOW); XX XX _procs[i].pr_recipe = rp->prp_next; XX XX _use_i = i; XX dir = _strdup(Get_current_dir()); XX Set_dir( rp->prp_dir ); XX runargv( _procs[i].pr_target, _procs[i].pr_how, rp->prp_ignore, XX rp->prp_group, rp->prp_last, rp->prp_cmd ); XX Set_dir(dir); XX FREE(dir); XX FREE(rp->prp_dir); XX _use_i = -1; XX XX FREE( rp->prp_cmd ); XX FREE( rp ); XX XX if( _proc_cnt == Max_proc ) Wait_for_child( FALSE, -1 ); XX } XX else { XX Unlink_temp_files( _procs[i].pr_how ); XX Handle_result(status,_procs[i].pr_ignore,_abort_flg,_procs[i].pr_target); XX XX if( _procs[i].pr_last && !Doing_bang ) XX Update_time_stamp( _procs[i].pr_target, _procs[i].pr_how ); XX } XX} XX XX XXstatic int XX_running( cp, how ) XXCELLPTR cp; XXHOWPTR how; XX{ XX register int i; XX XX if( !_procs ) return(FALSE); XX XX for( i=0; i<Max_proc; i++ ) XX if( _procs[i].pr_valid && XX _procs[i].pr_how == how && XX _procs[i].pr_target == cp ) XX break; XX XX return( i != Max_proc ); XX} XX XX XXstatic void XX_attach_cmd( cmd, group, ignore, cp, how, last ) XXchar *cmd; XXint group; XXint ignore; XXCELLPTR cp; XXHOWPTR how; XXint last; XX{ XX register int i; XX RCPPTR rp; XX XX for( i=0; i<Max_proc; i++ ) XX if( _procs[i].pr_valid && XX _procs[i].pr_how == how && XX _procs[i].pr_target == cp ) XX break; XX XX TALLOC( rp, 1, RCP ); XX rp->prp_cmd = _strdup(cmd); XX rp->prp_group = group; XX rp->prp_ignore= ignore; XX rp->prp_last = last; XX rp->prp_dir = _strdup(Get_current_dir()); XX XX if( _procs[i].pr_recipe == NIL(RCP) ) XX _procs[i].pr_recipe = _procs[i].pr_recipe_end = rp; XX else { XX _procs[i].pr_recipe_end->prp_next = rp; XX _procs[i].pr_recipe_end = rp; XX } XX} XSHAR_EOF Xchmod 0440 unix/sysvr3/runargv.c || echo "restore of unix/sysvr3/runargv.c fails" Xset `wc -c unix/sysvr3/runargv.c`;Sum=$1 Xif test "$Sum" != "6806" Xthen echo original size 6806, current size $Sum;fi X X X# Now create the file of patches and apply patch appropriately X# shar: Shell Archiver (v1.22) X# X# Run the following text with /bin/sh to create: X# _patches X# Xsed 's/^X//' << 'SHAR_EOF' > _patches && XX*** /u2/dvadura/src/generic/dmake/src.dist/vextern.h Mon Jul 30 11:50:36 1990 XX--- vextern.h Tue Jul 31 13:38:47 1990 XX*************** XX*** 1,4 **** XX! /* RCS -- $Header: /u2/dvadura/src/generic/dmake/src/RCS/vextern.h,v 1.1 90/07/19 13:55:39 dvadura Exp $ XX -- SYNOPSIS -- global variable declarations. XX -- XX -- DESCRIPTION XX--- 1,4 ---- XX! /* RCS -- $Header: /u2/dvadura/src/generic/dmake/src/RCS/vextern.h,v 1.2 90/07/31 11:10:51 dvadura Exp $ XX -- SYNOPSIS -- global variable declarations. XX -- XX -- DESCRIPTION XX*************** XX*** 29,40 **** XX -- XX -- LOG XX -- $Log: vextern.h,v $ XX * Revision 1.1 90/07/19 13:55:39 dvadura XX * Initial Revision of Version 3.5 XX * XX */ XX #include <stdio.h> XX! #include "macros.h" XX #include "struct.h" XX #include "dmake.h" XX XX--- 29,43 ---- XX -- XX -- LOG XX -- $Log: vextern.h,v $ XX+ * Revision 1.2 90/07/31 11:10:51 dvadura XX+ * renamed macros.h include to stdmacs.h XX+ * XX * Revision 1.1 90/07/19 13:55:39 dvadura XX * Initial Revision of Version 3.5 XX * XX */ XX #include <stdio.h> XX! #include "stdmacs.h" XX #include "struct.h" XX #include "dmake.h" XX XX*** /u2/dvadura/src/generic/dmake/src.dist/unix/sysvr3/make.sh Mon Jul 30 11:50:39 1990 XX--- unix/sysvr3/make.sh Tue Jul 31 20:26:17 1990 XX*************** XX*** 1,52 **** XX mkdir objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O infer.c XX! mv infer.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O make.c XX! mv make.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O stat.c XX! mv stat.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O expand.c XX! mv expand.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O string.c XX! mv string.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O hash.c XX! mv hash.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O dag.c XX! mv dag.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O dmake.c XX! mv dmake.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O path.c XX! mv path.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O imacs.c XX! mv imacs.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O sysintf.c XX! mv sysintf.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O parse.c XX! mv parse.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O getinp.c XX! mv getinp.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O quit.c XX! mv quit.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O basename.c XX! mv basename.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O dump.c XX! mv dump.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O macparse.c XX! mv macparse.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O rulparse.c XX! mv rulparse.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O percent.c XX! mv percent.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O unix/arlib.c XX! mv arlib.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O unix/dirbrk.c XX! mv dirbrk.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O unix/explode.c XX! mv explode.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O unix/rmprq.c XX! mv rmprq.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O unix/ruletab.c XX! mv ruletab.o objects XX! cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O unix/runargv.c XX! mv runargv.o objects XX cc -o dmake objects/infer.o objects/make.o objects/stat.o objects/expand.o objects/string.o objects/hash.o objects/dag.o objects/dmake.o objects/path.o objects/imacs.o objects/sysintf.o objects/parse.o objects/getinp.o objects/quit.o objects/basename.o objects/dump.o objects/macparse.o objects/rulparse.o objects/percent.o objects/arlib.o objects/dirbrk.o objects/explode.o objects/rmprq.o objects/ruletab.o objects/runargv.o XX--- 1,52 ---- XX mkdir objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O infer.c XX! mv infer.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O make.c XX! mv make.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O stat.c XX! mv stat.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O expand.c XX! mv expand.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O string.c XX! mv string.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O hash.c XX! mv hash.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O dag.c XX! mv dag.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O dmake.c XX! mv dmake.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O path.c XX! mv path.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O imacs.c XX! mv imacs.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O sysintf.c XX! mv sysintf.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O parse.c XX! mv parse.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O getinp.c XX! mv getinp.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O quit.c XX! mv quit.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O basename.c XX! mv basename.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O dump.c XX! mv dump.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O macparse.c XX! mv macparse.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O rulparse.c XX! mv rulparse.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O percent.c XX! mv percent.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O unix/arlib.c XX! mv arlib.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O unix/dirbrk.c XX! mv dirbrk.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O unix/explode.c XX! mv explode.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O unix/rmprq.c XX! mv rmprq.o objects XX cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O unix/ruletab.c XX! mv ruletab.o objects XX! cc -c -DHELP -I. -Icommon -Iunix -Iunix/sysvr3 -O unix/sysvr3/runargv.c XX! mv runargv.o objects XX cc -o dmake objects/infer.o objects/make.o objects/stat.o objects/expand.o objects/string.o objects/hash.o objects/dag.o objects/dmake.o objects/path.o objects/imacs.o objects/sysintf.o objects/parse.o objects/getinp.o objects/quit.o objects/basename.o objects/dump.o objects/macparse.o objects/rulparse.o objects/percent.o objects/arlib.o objects/dirbrk.o objects/explode.o objects/rmprq.o objects/ruletab.o objects/runargv.o XX*** /u2/dvadura/src/generic/dmake/src.dist/unix/sysvr3/config.mk Mon Jul 30 11:50:40 1990 XX--- unix/sysvr3/config.mk Tue Jul 31 10:51:50 1990 XX*************** XX*** 8,17 **** XX # XX osrdir := $(OS)$(DIRSEPSTR)$(OSRELEASE) XX XX! # The following sources are required for SysV R3 XX! SRC += #zero for now. we do have some .h's though XX XX- #.SOURCE.c : $(osrdir) XX .SOURCE.h : $(osrdir) XX XX # Local configuration modifications for CFLAGS, there's local SysV includes XX--- 8,18 ---- XX # XX osrdir := $(OS)$(DIRSEPSTR)$(OSRELEASE) XX XX! # The following are required sources XX! OSDSRC := runargv.c XX! SRC += $(OSDSRC) XX! .SETDIR=$(osrdir) : $(OSDSRC) XX XX .SOURCE.h : $(osrdir) XX XX # Local configuration modifications for CFLAGS, there's local SysV includes XX*** /u2/dvadura/src/generic/dmake/src.dist/unix/sysvr3/config.h Mon Jul 30 11:50:40 1990 XX--- unix/sysvr3/config.h Tue Jul 31 10:51:27 1990 XX*************** XX*** 1,4 **** XX! /* RCS -- $Header$ XX -- SYNOPSIS -- Configurarion include file. XX -- XX -- DESCRIPTION XX--- 1,4 ---- XX! /* RCS -- $Header: /u2/dvadura/src/generic/dmake/src/unix/sysvr3/RCS/config.h,v 1.1 90/07/31 10:51:25 dvadura Exp $ XX -- SYNOPSIS -- Configurarion include file. XX -- XX -- DESCRIPTION XX*************** XX*** 28,34 **** XX -- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. XX -- XX -- LOG XX! -- $Log$ XX */ XX XX /* define this for configurations that don't have the coreleft function XX--- 28,37 ---- XX -- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. XX -- XX -- LOG XX! -- $Log: config.h,v $ XX! * Revision 1.1 90/07/31 10:51:25 dvadura XX! * Initial Revision Dmake 3.5 XX! * XX */ XX XX /* define this for configurations that don't have the coreleft function SHAR_EOF echo "End of part 2, continue with part 3" echo "3" > s2_seq_.tmp exit 0