[comp.sources.misc] v15i091: dmake version 3.6 patch 1

dvadura@watdragon.waterloo.edu (Dennis Vadura) (12/17/90)

Posting-number: Volume 15, Issue 91
Submitted-by: Dennis Vadura <dvadura@watdragon.waterloo.edu>
Archive-name: dmake-3.6/patch02

#!/bin/sh
# this is part 2 of a multipart archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file dm36.p1 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' >> dm36.p1
XX{
XX   struct ar_hdr arhdr;                /* external archive header */
XX
XX   fseek(f, - (off_t) (sizeof(arhdr) - sizeof(arhdr.ar_name)), 1);
XX
XX#if ASCARCH
XX   fprintf(f, "%lu", now);
XX#else
XX   fwrite((char *)now, sizeof(now), 1, f);
XX#endif
XX
XX   return( ferror(f) ? 0 : 1 );
XX}
XX
XX
XX#if LC
XXtypedef struct mem {
XX   time_t	m_time;		/* modify time of member*/
XX   struct mem	*m_next;	/* next member in lib	*/
XX   char		m_valid;	/* valid cache entry    */
XX   char 	m_name[1];	/* lib member name	*/
XX} MEM, *MEMPTR;
XX
XXtypedef struct lib {
XX   struct lib	*lb_next;	/* next library in list */
XX   struct mem	*lb_members;	/* list of lib members	*/
XX   char		lb_valid;	/* valid cache entry    */
XX   char 	*lb_name;	/* library name		*/
XX} LIB, *LIBPTR;
XX
XXstatic LIBPTR _cache = NIL(LIB);
XXstatic MEMPTR _find_member ANSI(( LIBPTR, char * ));
XX
XXstatic int
XX_check_cache( name, lib, pmtime, touch )/*
XX==========================================
XX   Check to see if we have cached member in lib, if so return time in pmtime
XX   and return TRUE, otherwise return FALSE, if touch is TRUE then touch
XX   the archive member instead. */
XXchar   *name;
XXchar   *lib;
XXtime_t *pmtime;
XXint    touch;
XX{
XX   register MEMPTR mp;
XX   register LIBPTR lp;
XX
XX   for( lp=_cache; lp != NIL(LIB) && lp->lb_name != lib; lp=lp->lb_next );
XX   if( lp == NIL(LIB) ) return( FALSE );
XX
XX   mp = _find_member( lp, name );
XX   if( mp == NIL(MEM) || !mp->m_valid ) return( FALSE );
XX
XX   if( touch == TRUE )
XX   {
XX      mp->m_time = *pmtime;
XX      mp->m_valid = 1;
XX   }
XX   else
XX      *pmtime = mp->m_time;
XX
XX   lp->lb_valid   = 1;
XX   lp->lb_members = mp;
XX
XX   return( TRUE );
XX}
XX
XX
XX
XXstatic int
XX_cache_member( name, lib, mtime )/*
XX===================================
XX   Cache name in lib along with it's time */
XXchar   *name;
XXchar   *lib;
XXtime_t mtime;
XX{
XX   register MEMPTR mp;
XX   register LIBPTR lp;
XX
XX   for( lp=_cache;
XX	lp != NIL(LIB) && lp->lb_name != NIL(char) && lp->lb_name != lib;
XX	lp=lp->lb_next);
XX
XX   if( lp == NIL(LIB) )
XX   {
XX      lp = (LIBPTR) malloc(sizeof(LIB));
XX      if( lp == NIL(LIB) ) No_ram();
XX
XX      lp->lb_name    = lib;
XX      lp->lb_members = NIL(MEM);
XX      lp->lb_next    = _cache;
XX      lp->lb_valid   = 0;
XX      _cache = lp;
XX   }
XX
XX   /* On UNIX ar does not allow multiple copies of the same .o file to live
XX    * in the same AR file.  If this is not TRUE then use the commented out
XX    * version to set the value of mp. */
XX
XX   /*mp = _find_member(lp, name);*/
XX   mp = NIL(MEM);
XX
XX   if( mp == NIL(MEM) )
XX   {
XX      mp = (MEMPTR) malloc(sizeof(char)*offsetof(MEM,m_name[strlen(name)+1]));
XX      if( mp == NIL(MEM) ) No_ram();
XX
XX      strcpy( mp->m_name, name );
XX      mp->m_time     = mtime;
XX
XX      if( lp->lb_members == NIL(MEM) ) {
XX	 mp->m_next     = mp;
XX	 lp->lb_members = mp;
XX      }
XX      else {
XX	 mp->m_next = lp->lb_members->m_next;
XX	 lp->lb_members->m_next = mp;
XX	 lp->lb_members = mp;
XX      }
XX   }
XX   else
XX      mp->m_time = mtime;
XX
XX   mp->m_valid = 1;
XX
XX   return( lp->lb_valid );
XX}
XX
XX
XXstatic MEMPTR
XX_find_member( lp, name )
XXLIBPTR lp;
XXchar   *name;
XX{
XX   register MEMPTR mp = lp->lb_members;
XX
XX   if( mp == NIL(MEM) ) return(mp);
XX
XX   do {
XX      if( !strcmp(mp->m_name, name ) ) return( mp );
XX      mp = mp->m_next;
XX   }
XX   while( mp != lp->lb_members );
XX
XX   return( NIL(MEM) );
XX}
XX#endif
XX
XX
XX
XXvoid
XXvoid_lcache( lib, member )/*
XX============================
XX   Void the library cache for lib.  If member is NIL(char) then nuke all
XX   of the members, if member is NOT NIL(char) then invalidate only that
XX   member. */
XXchar *lib;
XXchar *member;
XX{
XX#if LC
XX   register LIBPTR lp;
XX   register MEMPTR mp;
XX   register MEMPTR tmp;
XX
XX   for( lp=_cache; lp != NIL(LIB) && lp->lb_name != lib; lp=lp->lb_next );
XX   if( lp == NIL(LIB) ) return;
XX
XX   if( member == NIL(char) ) {
XX      mp = lp->lb_members;
XX      do {
XX	 tmp = mp->m_next;
XX	 (void) free( mp );
XX	 mp = tmp;
XX      } while( mp != lp->lb_members );
XX
XX      lp->lb_valid   = 0;
XX      lp->lb_members = NIL(MEM);
XX      lp->lb_name    = NIL(char);
XX   }
XX   else {
XX      mp=lp->lb_members;
XX      do {
XX	 if( strcmp( member, mp->m_name) == 0 ) {
XX	    lp->lb_members = mp->m_next;
XX	    mp->m_valid = 0;
XX	 }
XX	   
XX	 mp=mp->m_next;
XX      } while( mp != lp->lb_members );
XX   }
XX#endif
XX}
XSHAR_EOF
Xchmod 0640 tos/arlib.c || echo "restore of tos/arlib.c fails"
Xset `wc -c tos/arlib.c`;Sum=$1
Xif test "$Sum" != "13301"
Xthen echo original size 13301, current size $Sum;fi
Xsed 's/^X//' << 'SHAR_EOF' > tos/config.h &&
XX/* RCS      -- $Header: /u2/dvadura/src/generic/dmake/src/unix/sysvr3/RCS/config.h,v 1.1 90/10/06 12:06:39 dvadura Exp $
XX-- SYNOPSIS -- Configurarion include file.
XX-- 
XX-- DESCRIPTION
XX-- 	There is one of these for each specific machine configuration.
XX--	It can be used to further tweek the machine specific sources
XX--	so that they compile.
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:	config.h,v $
XX * Revision 1.1  90/10/06  12:06:39  dvadura
XX * dmake Release, Version 3.6
XX * 
XX*/
XX
XX#include <osbind.h>
XX
XX/* define this for configurations that don't have the coreleft function
XX * so that the code compiles.  To my knowledge coreleft exists only on
XX * Turbo C, but it is needed here since the function is used in many debug
XX * macros. */
XX#define coreleft() Malloc(-1L)
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/*No parallelism in TOS so don't need to explode the graph. */
XX#define Explode_prq(a,b,c)
XSHAR_EOF
Xchmod 0640 tos/config.h || echo "restore of tos/config.h fails"
Xset `wc -c tos/config.h`;Sum=$1
Xif test "$Sum" != "1974"
Xthen echo original size 1974, current size $Sum;fi
Xsed 's/^X//' << 'SHAR_EOF' > tos/config.mk &&
XX# This is an OS specific configuration file
XX#	It assumes that OBJDIR, TARGET and DEBUG are previously defined.
XX#	It defines	CFLAGS, LDARGS, CPPFLAGS, STARTUPFILE, LDOBJS
XX#			PRINTER, PRINTFLAGS
XX#	It augments	SRC, OBJDIR, TARGET, CFLAGS, LDLIBS
XX#
XXPRINTER		= hw
XXPRINTFLAGS	= -P$(PRINTER)
XXSTARTUPFILE	= $(OS)/startup.mk
XXCPPFLAGS 	= $(CFLAGS)
XXLDOBJS		= $(CSTARTUP) $(OBJDIR)/{$(<:f)}
XXLDARGS		= $(LDFLAGS) -o $@ $(OBJDIR)/*$O
XXLDFLAGS	       += -s
XXLD		= $(CC)
XX
XX# Debug flags
XXDB_CFLAGS	= -g -DDBUG
XXDB_LDFLAGS	= -g
XXDB_LDLIBS	=
XX
XX# NO Debug flags
XXNDB_CFLAGS	= -O
XXNDB_LDFLAGS	=
XXNDB_LDLIBS	=
XX
XX# Local configuration modifications for CFLAGS.
XXCFLAGS         += -I$(OS)
XX
XX# Sources that must be defined for each different version
XXOSSRC := arlib.c dirbrk.c rmprq.c ruletab.c runargv.c
XXSRC  += $(OSSRC)
XX.SETDIR=$(OS) : $(OSSRC)
XX
XX# Set source dirs so that we can find files named in this
XX# config file.
XX.SOURCE.h : $(OS)
XX
XX# See if we modify anything in the lower levels.
XX.IF $(OSRELEASE) != $(NULL)
XX   .INCLUDE .IGNORE : $(OS)$(DIRSEPSTR)$(OSRELEASE)$(DIRSEPSTR)config.mk
XX.END
XX
XX# Set the proper macros based on whether we are making the debugging version
XX# or not.
XX.IF $(DEBUG)
XX   CFLAGS	+= $(DB_CFLAGS)
XX   LDFLAGS	+= $(DB_LDFLAGS)
XX   LDLIBS	+= $(DB_LDLIBS)
XX
XX   SILENT	:= $(.SILENT)
XX   .SILENT	:= yes
XX   TARGET	:= db$(TARGET)
XX   OBJDIR	:= $(OBJDIR).dbg
XX   .SILENT	:= $(SILENT)
XX
XX    SRC		+= dbug.c malloc.c
XX    HDR		+= db.h 
XX    .SETDIR=common : dbug.c malloc.c
XX.ELSE
XX   CFLAGS	+= $(NDB_CFLAGS)
XX   LDFLAGS	+= $(NDB_LDFLAGS)
XX   LDLIBS	+= $(NDB_LDLIBS)
XX.END
XSHAR_EOF
Xchmod 0640 tos/config.mk || echo "restore of tos/config.mk fails"
Xset `wc -c tos/config.mk`;Sum=$1
Xif test "$Sum" != "1536"
Xthen echo original size 1536, current size $Sum;fi
Xsed 's/^X//' << 'SHAR_EOF' > tos/dirbrk.c &&
XX/* RCS      -- $Header: /u2/dvadura/src/generic/dmake/src/unix/RCS/dirbrk.c,v 1.1 90/10/06 12:07:00 dvadura Exp $
XX-- SYNOPSIS -- define the directory separator string.
XX-- 
XX-- DESCRIPTION
XX-- 	Define this string for any character that may appear in a path name
XX--	and can be used as a directory separator.  Also provide a function
XX--	to indicate if a given path begins at the root of the file system.
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:	dirbrk.c,v $
XX * Revision 1.1  90/10/06  12:07:00  dvadura
XX * dmake Release, Version 3.6
XX * 
XX*/
XX
XX#include "extern.h"
XX#include <ctype.h>
XX
XX/* tos uses /, \, and : */
XXchar*	DirBrkStr = "/\\:";
XX
XX/*
XX** Return TRUE if the name is the full specification of a path name to a file
XX** starting at the root of the file system, otherwise return FALSE
XX*/
XXint
XXIf_root_path(name)
XXchar *name;
XX{
XX   return( (strchr(DirBrkStr, *name) != NIL(char)) ||
XX           (isalpha(*name) && name[1] == ':') );
XX}
XSHAR_EOF
Xchmod 0640 tos/dirbrk.c || echo "restore of tos/dirbrk.c fails"
Xset `wc -c tos/dirbrk.c`;Sum=$1
Xif test "$Sum" != "1883"
Xthen echo original size 1883, current size $Sum;fi
Xsed 's/^X//' << 'SHAR_EOF' > tos/make.sh &&
XXmkdir objects
XXgcc -c -DHELP -I. -Icommon -Itos -O infer.c
XXmv infer.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O make.c
XXmv make.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O stat.c
XXmv stat.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O expand.c
XXmv expand.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O string.c
XXmv string.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O hash.c
XXmv hash.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O dag.c
XXmv dag.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O dmake.c
XXmv dmake.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O path.c
XXmv path.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O imacs.c
XXmv imacs.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O sysintf.c
XXmv sysintf.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O parse.c
XXmv parse.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O getinp.c
XXmv getinp.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O quit.c
XXmv quit.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O basename.c
XXmv basename.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O dump.c
XXmv dump.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O macparse.c
XXmv macparse.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O rulparse.c
XXmv rulparse.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O percent.c
XXmv percent.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O function.c
XXmv function.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O tos/arlib.c
XXmv arlib.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O tos/dirbrk.c
XXmv dirbrk.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O tos/rmprq.c
XXmv rmprq.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O tos/ruletab.c
XXmv ruletab.o objects
XXgcc -c -DHELP -I. -Icommon -Itos -O tos/runargv.c
XXmv runargv.o objects
XXgcc -s  -o dmake objects/*.o
XSHAR_EOF
Xchmod 0640 tos/make.sh || echo "restore of tos/make.sh fails"
Xset `wc -c tos/make.sh`;Sum=$1
Xif test "$Sum" != "1670"
Xthen echo original size 1670, current size $Sum;fi
Xsed 's/^X//' << 'SHAR_EOF' > tos/rmprq.c &&
XX/* RCS      -- $Header: /u2/dvadura/src/generic/dmake/src/unix/RCS/rmprq.c,v 1.1 90/10/06 12:07:06 dvadura Exp $
XX-- SYNOPSIS -- remove prerequisites code.
XX-- 
XX-- DESCRIPTION
XX--	This code is different for DOS and for UNIX and parallel make
XX--	architectures since the parallel case requires the rm's to be
XX--	run in parallel, whereas DOS guarantees to run them sequentially.
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:	rmprq.c,v $
XX * Revision 1.1  90/10/06  12:07:06  dvadura
XX * dmake Release, Version 3.6
XX * 
XX*/
XX
XX#include "extern.h"
XX#include "alloc.h"
XX
XXvoid
XXRemove_prq( tcp )
XXCELLPTR tcp;
XX{
XX   tcp->ce_flag         &= ~(F_MADE|F_VISITED);
XX   tcp->CE_HOW->hw_flag &= ~(F_MADE|F_VISITED);
XX   tcp->ce_time          = 0L;
XX
XX   Make( tcp, tcp->CE_HOW, NIL(CELL) );
XX}
XSHAR_EOF
Xchmod 0640 tos/rmprq.c || echo "restore of tos/rmprq.c fails"
Xset `wc -c tos/rmprq.c`;Sum=$1
Xif test "$Sum" != "1718"
Xthen echo original size 1718, current size $Sum;fi
Xsed 's/^X//' << 'SHAR_EOF' > tos/ruletab.c &&
XX/* RCS      -- $Header: /u2/dvadura/src/generic/dmake/src/unix/RCS/ruletab.c,v 1.1 90/10/06 12:07:08 dvadura Exp $
XX-- SYNOPSIS -- Default initial configuration of dmake.
XX-- 
XX-- DESCRIPTION
XX-- 	Define here the initial set of rules that are defined before
XX--	dmake performs any processing.
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:	ruletab.c,v $
XX * Revision 1.1  90/10/06  12:07:08  dvadura
XX * dmake Release, Version 3.6
XX * 
XX*/
XX
XX/* These are control macros for dmake that MUST be defined at some point
XX * if they are NOT dmake will not work!  These are default definitions.  They
XX * may be overridden inside the .STARTUP makefile, they are here
XX * strictly so that dmake can parse the STARTUP makefile */
XX
XXstatic char *_rules[] = {
XX	"MAXPROCESSLIMIT := 10",
XX	"MAXLINELENGTH := 8190",
XX	".IMPORT .IGNORE: ROOTDIR",
XX	".MAKEFILES : makefile.mk Makefile makefile",
XX	".SOURCE    : .NULL",
XX#include "startup.h"
XX	0 };
XX
XXchar **Rule_tab = _rules; /* for sundry reasons in Get_environment() */
XSHAR_EOF
Xchmod 0640 tos/ruletab.c || echo "restore of tos/ruletab.c fails"
Xset `wc -c tos/ruletab.c`;Sum=$1
Xif test "$Sum" != "1940"
Xthen echo original size 1940, current size $Sum;fi
Xsed 's/^X//' << 'SHAR_EOF' > tos/runargv.c &&
XX/* RCS      -- $Header: /u2/dvadura/src/generic/dmake/src/msdos/RCS/runargv.c,v 1.1 90/10/06 12:05:30 dvadura Exp $
XX-- SYNOPSIS -- run a sub process.
XX-- 
XX-- DESCRIPTION
XX--	Use spawn to run a subprocess.
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/10/06  12:05:30  dvadura
XX * dmake Release, Version 3.6
XX * 
XX*/
XX
XX#include "sysintf.h"
XX#include "extern.h"
XX#include <process.h>
XX#include <string.h>
XX#include <errno.h>
XX
XXstatic int  _abort_flg = FALSE;
XXstatic void _add_child ANSI((CELLPTR, HOWPTR, int));
XXstatic void _finished_child ANSI((int));
XX
XXint
XXrunargv(target, how, ignore, group, last, shell, cmd)
XXCELLPTR target;
XXHOWPTR  how;
XXint     ignore;
XXint	group;
XXint	last;
XXint	shell;
XXchar	*cmd;
XX{
XX   int status;
XX   char **argv;
XX
XX   argv = Pack_argv( group, shell, cmd );
XX   _add_child(target, how, ignore);
XX   status = spawnvp(P_WAIT, *argv, argv);
XX   if( status == -1 ) Error("%s: %s", argv[0], strerror(errno));
XX   _finished_child(status);
XX   if( last && !Doing_bang ) Update_time_stamp( target, how );
XX
XX   return( 0 );
XX}
XX
XX
XXvoid
XXClean_up_processes()
XX{
XX   _abort_flg = TRUE;
XX   _finished_child(-1);
XX}
XX
XX
XXint
XXWait_for_child( abort_flg, pid )
XXint abort_flg;
XXint pid;
XX{
XX   return(1);
XX}
XX
XX
XXstatic int     _valid = -1;
XXstatic CELLPTR _tg;
XXstatic HOWPTR  _how;
XXstatic int     _ignore;
XX
XXstatic void
XX_add_child( target, how, ignore )
XXCELLPTR target;
XXHOWPTR  how;
XXint	ignore;
XX{
XX   _tg = target;
XX   _ignore = ignore;
XX   _how    = how;
XX   _valid = 0;
XX
XX   Current_target = NIL(HOW);
XX}
XX
XX
XXstatic void
XX_finished_child(status)
XXint	status;
XX{
XX   if( _valid == -1 ) return;
XX   Unlink_temp_files( _how );
XX   _valid = -1;
XX   Handle_result( status, _ignore, _abort_flg, _tg );
XX}
XSHAR_EOF
Xchmod 0640 tos/runargv.c || echo "restore of tos/runargv.c fails"
Xset `wc -c tos/runargv.c`;Sum=$1
Xif test "$Sum" != "2637"
Xthen echo original size 2637, current size $Sum;fi
Xsed 's/^X//' << 'SHAR_EOF' > tos/startup.h &&
XX/* This file contains the default value of the MAKESTARTUP variable.
XX * You must set the quoted string below to the default path to the startup
XX * variable, so that it gets compiled in.  LEAVE ROOTDIR at the front of
XX * the path.  This allows the user to customize his environment for dmake
XX * by setting up a new ROOTDIR environment variable. */
XX
XX"MAKESTARTUP := $(ROOTDIR)/etc/startup.mk",
XSHAR_EOF
Xchmod 0640 tos/startup.h || echo "restore of tos/startup.h fails"
Xset `wc -c tos/startup.h`;Sum=$1
Xif test "$Sum" != "392"
Xthen echo original size 392, current size $Sum;fi
Xsed 's/^X//' << 'SHAR_EOF' > tos/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 => RCS  is installed.
XX_HAVE_SCCS	:= 		# yes => SCCS is installed.
XX
XX# Applicable suffix definitions
XXA := .olb	# 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	:= 
XXGROUPSHELL	:= $(SHELL)
XXGROUPFLAGS	:= 
XXSHELLMETAS	:= |();&<>?*][$$:\\#`'"
XXGROUPSUFFIX	:= .bat
XXDIVFILE		 = $(TMPFILE)
XX
XX# Standard C-language command names and flags
XX   CPP	   := /gnu/lib/cpp	# C-preprocessor
XX   CC      := gcc		# C-compiler and flags
XX   CFLAGS  +=
XX
XX   AS      := /gnu/lib/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     := gar		# archiver
XX   ARFLAGS+= ruv
XX
XX   RM	   := /gnu/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) $(ASFLAGS) $<
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 tos/startup.mk || echo "restore of tos/startup.mk fails"
Xset `wc -c tos/startup.mk`;Sum=$1
Xif test "$Sum" != "3233"
Xthen echo original size 3233, current size $Sum;fi
Xsed 's/^X//' << 'SHAR_EOF' > tos/sysintf.h &&
XX/*
XX** assorted bits of system interface, for common routines inside dmake.
XX** System specific code can be found in the config.h files for each
XX** of the system specifications.
XX*/
XX#include <sys/stat.h>
XX#include <signal.h>
XX
XX#define STAT stat
XX#define VOID_LCACHE(l,m) (void) void_lcache(l,m)
XX
XX/*
XX** standard C items
XX*/
XX#include "stdmacs.h"
XX
XX/*
XX** DOS interface standard items
XX*/
XX#define	getswitchar()	'-'
XX
XX/*
XX** make parameters
XX*/
XX#define	MAX_PATH_LEN	1024
XSHAR_EOF
Xchmod 0640 tos/sysintf.h || echo "restore of tos/sysintf.h fails"
Xset `wc -c tos/sysintf.h`;Sum=$1
Xif test "$Sum" != "454"
Xthen echo original size 454, 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-patchlvl1/unix/sysvr3/config.h	Sat Oct  6 12:06:40 1990
XX--- unix/sysvr3/config.h	Mon Oct 22 18:01:13 1990
XX***************
XX*** 44,51 ****
XX--- 44,55 ----
XX   * not have getcwd, but call it getwd instead. */
XX  extern char *getcwd ANSI((char *, int));
XX  
XX+ #ifdef M_XENIX
XX+ #define PORTAR 1
XX+ #else
XX  /* Define setvbuf, SysV doesn't have one */
XX  #define setvbuf(fp, bp, type, len) setbuf( fp, NULL );
XX+ #endif
XX  
XX  /* NCR Tower's don't define size_t */
XX  #ifdef tower
XX*** /u2/dvadura/src/generic/dmake/src-patchlvl1/unix/sysintf.h	Sat Oct  6 12:07:12 1990
XX--- unix/sysintf.h	Mon Oct 22 17:08:18 1990
XX***************
XX*** 3,8 ****
XX--- 3,9 ----
XX  ** System specific code can be found in the config.h files for each
XX  ** of the system specifications.
XX  */
XX+ #include <sys/types.h>
XX  #include <sys/stat.h>
XX  #include <signal.h>
XX  
XX*** /u2/dvadura/src/generic/dmake/src-patchlvl1/sysintf.c	Sat Oct  6 12:04:18 1990
XX--- sysintf.c	Sun Oct 28 23:16:20 1990
XX***************
XX*** 1,4 ****
XX! /* RCS      -- $Header: /u2/dvadura/src/generic/dmake/src/RCS/sysintf.c,v 1.1 90/10/06 12:04:17 dvadura Exp $
XX  -- SYNOPSIS -- system independent interface
XX  -- 
XX  -- DESCRIPTION
XX--- 1,4 ----
XX! /* RCS      -- $Header: /u2/dvadura/src/generic/dmake/src/RCS/sysintf.c,v 1.1 90/10/06 12:04:17 dvadura Exp Locker: dvadura $
XX  -- SYNOPSIS -- system independent interface
XX  -- 
XX  -- DESCRIPTION
XX***************
XX*** 69,76 ****
XX  */
XX  
XX  #include <stdio.h>
XX- #include "extern.h"
XX  #include "sysintf.h"
XX  #include "alloc.h"
XX  
XX  /*
XX--- 69,76 ----
XX  */
XX  
XX  #include <stdio.h>
XX  #include "sysintf.h"
XX+ #include "extern.h"
XX  #include "alloc.h"
XX  
XX  /*
XX***************
XX*** 97,103 ****
XX     if( lib != NIL(char) )
XX        return( seek_arch(basename(name), lib) );
XX     else
XX!       return( (STAT(name, &buf) == -1) ? (time_t)0 : buf.st_mtime );
XX  }
XX  
XX  
XX--- 97,103 ----
XX     if( lib != NIL(char) )
XX        return( seek_arch(basename(name), lib) );
XX     else
XX!       return( (STAT(name, &buf) == -1) ? (time_t)0L : (time_t) buf.st_mtime );
XX  }
XX  
XX  
XX***************
XX*** 245,251 ****
XX--- 245,253 ----
XX  Read_env_string(ename)
XX  char *ename;
XX  {
XX+ #if !defined(_MSC_VER) || _MSC_VER < 600
XX     extern char *getenv();
XX+ #endif
XX     return( getenv(ename) );
XX  }
XX  
XX***************
XX*** 277,283 ****
XX--- 279,287 ----
XX  ReadEnvironment()
XX  {
XX     extern char **Rule_tab;
XX+ #if !defined(_MSC_VER)
XX     extern char **environ;
XX+ #endif
XX     char **rsave;
XX  
XX     rsave    = Rule_tab;
XX*** /u2/dvadura/src/generic/dmake/src-patchlvl1/readme/msdos	Mon Oct  8 13:30:26 1990
XX--- readme/msdos	Mon Oct 29 10:31:02 1990
XX***************
XX*** 1,89 ****
XX! Some notes on the MSDOS implementation of dmake.
XX  
XX! Making the binary:
XX! ------------------
XX  
XX!    Turbo-C:  By default the turbo-C (make tcc) script will make a version
XX! 	     of the binary that is compiled for an 8088 and up cpu.  Once made
XX! 	     you can make a version for a 186 or 286 by modifying
XX! 	     msdos/tccdos/config.mk and setting CFLAGS to contain the right
XX! 	     flags, comments are supplied in the makefile to do so.
XX  
XX! 	     The contents of the default response files
XX! 	     (named in msdos/tccdos/mk*.bat) assume specific locations for
XX! 	     your turbo-C libraries, you may need to edit these before actually
XX! 	     getting a successful binary linked.
XX  
XX!    Microsoft-C 4.0 to 5.1:
XX! 	     Is straight forward, just type 'make msc' and the compile will
XX! 	     chunk along.
XX  
XX!    Microsoft-C 6.0:
XX! 	     Is equally easy, just type 'make msc60' and the compile will
XX! 	     chunk along.  Once made, if you want to use dmake to compile
XX! 	     itself then set the environment variable MSC_VER=6.0, otherwise
XX! 	     the compile flags will not be correct.  You may also supply this
XX! 	     as an option on the dmake command line.
XX  
XX-    Memory Requirements and Swapping:
XX- 	     dmake requires quite a bit of memory to run.  As a result
XX- 	     a swapping version of dmake is made if you issue the command
XX- 	     'make tccswp', 'make mscswp' or 'make msc60swp'.  If you leave
XX- 	     the 'swp' off then corresponding (as described above) non-swapping
XX- 	     versions are made.
XX  
XX! 	     The swapping code currently only swaps to DISK, I have left hooks
XX! 	     in to accomodate XMS and EMS, I have some code that performs the
XX! 	     necessary XMS/EMS accesses but have not incorporated it in yet.
XX! 	     It appears that a ramdisk seems to work just fine.  If anyone
XX! 	     wishes to fill in the hooks please do and I'll be happy to include
XX! 	     them in future distributions.
XX  
XX!    dmake 'makefile.mk' control variables:
XX! 	     Initially dmake is compiled for the compact memory model.
XX! 	     Setting MODEL={s,c,m,l} on the command line will select a different
XX! 	     memory model.  Setting NOSWAP:=1 on the command line
XX! 	     will disable the compile and linking of the swap code.
XX! 	     A summary of the available configuration variables follows:
XX  
XX! 	          MODEL={s,c,m,l}  - Select {small, compact, medium, large}
XX! 		  		     memory model respectively.
XX! 		  NOSWAP:=y	   - If set, do not compile the dmake
XX! 		  		     swapping version of spawnvpe.
XX! 		  MSC_VER:=6.0	   - Must be set if using MSC 6.0 and dmake
XX! 		  		     is used to make a new version of dmake.
XX  
XX!    ^C and stopping a make:
XX! 	     Handling of ^C in the swapping version seems to be somewhat
XX! 	     broken.  I don't know what is wrong and would be happy to hear
XX! 	     of suggestions on how to fix the current mess :-)  If you hit
XX! 	     ^C more than once when dmake is executing a child then I think
XX! 	     it will hang most machines.  If you hit it only once or not at
XX! 	     all then things seem to work fine :-).  I tried to get this right
XX! 	     by looking at other code, and making some assumptions about what
XX! 	     DOS does... NEVER ASSUME ANYTHING ABOUT WHAT DOS DOES :-)
XX  
XX  
XX  Other notes:
XX  ------------
XX! dmake does not care if you are running command.com or some other command
XX! interpretter, you must however specify the proper values of the environment
XX! variables SHELL, SHELLFLAGS, GROUPSHELL, and GROUPFLAGS in order for things
XX! to work correctly.  Read the man page first.
XX  
XX! Group recipes under DOS that use command.com as the command interpretter
XX! require you to set the GROUPSUFFIX macro.
XX  
XX! As shipped the startup.mk files for the DOS version try to figure out what
XX! command interpretter you are using and set things up appropriately.
XX! Two command interpretters are supported in the shipped startup.mk file,
XX! command.com, and the MKS Korn shell.
XX  
XX! dmake does not contain any builtin commands.  It gets all commands it executes
XX! from an external file system.  It is therefore most useful if it is used in
XX! conjunction with an environment similar to that provided by the MKS Tool kit,
XX! or equivalent.
XX  
XX! dmake now supports the MKS argument passing conventions.  The facility is
XX! enabled by setting .MKSARGS:=1 and is set by default in the startup.mk file
XX! if an MKS Korn shell is detected as being the active command interpretter.
XX--- 1,127 ----
XX! Notes on the MSDOS implementation of dmake.
XX  
XX! Bootstrapping the binary:
XX! -------------------------
XX!    A make.bat file is provided to bootstrap the binary.  The file contains
XX!    several targets for bootstrapping and invoking the batch file with no
XX!    arguments lists the possibilities shown below.
XX  
XX!       INDEX:  You must specify one of:
XX! 	 tcc      - Turbo C 2.0, compile.
XX! 	 tccswp   - Turbo C 2.0 compile of swapping dmake.
XX! 	 msc40    - Microsoft C 4.0 compile.
XX! 	 msc50    - Microsoft C 5.0 compile.
XX! 	 msc51    - Microsoft C 5.1 compile.
XX! 	 msc60    - Microsoft C 6.0 compile.
XX! 	 msc40swp - Microsoft C 4.0, MASM 5.1 compile of swapping dmake.
XX! 	 msc50swp - Microsoft C 5.0, MASM 5.1 compile of swapping dmake.
XX! 	 msc51swp - Microsoft C 5.1, MASM 5.1 compile of swapping dmake.
XX! 	 msc60swp - Microsoft C 6.0, MASM 5.1 compile of swapping dmake.
XX  
XX!    Based on the compiler you have installed and the whether or not you
XX!    want the swapping version of dmake, you should select the appropriate
XX!    target and issue 'make.bat target'.
XX  
XX!    The batch file runs a second batch script that comes with the distribution
XX!    which compiles the sources using the appropriate compiler and flags.  The
XX!    MSC Versions of the batch files should not require any further user
XX!    intervention during the compile.  The Turbo-C version, as a final step,
XX!    invokes tlink with two response files.  The second of these response files,
XX!    named in msdos/tccdos/mk*.bat, contains absolute path names to Turbo-C
XX!    libraries.  You may need to edit these before getting a successful binary
XX!    linked.
XX  
XX!    By default the batch files make an executable that will run on an 8088
XX!    cpu and up.  You can change that by making the initial version and then
XX!    editing the config.mk files found in either msdos/tccdos or msdos/mscdos
XX!    (depending on compiler you use), and selecting a diferrent cpu type by
XX!    supplying the appropriate compiler flags.  You then need to remake dmake
XX!    again but this time use dmake itself, see below.
XX  
XX  
XX! Using dmake to Make itself:
XX! ---------------------------
XX!    If you use dmake to make itself you must first set a number of makefile
XX!    control variables, either through the environment or on the command line.
XX  
XX!    The following variables must be set:
XX  
XX! 	OS	       - defines operating system (must be set)
XX! 	OSRELEASE      - particular version of it.
XX! 	OSENVIRNOMENT  - more customization
XX  
XX!    These three variables should be defined in your environment.  Valid values
XX!    for them are listed in the dmake makefile.mk file.  For example, if you
XX!    are using MSDOS, with Turbo-C then the valid settings are:
XX  
XX+ 	set OS=msdos
XX+ 	set OSRELEASE=tccdos
XX+ 	set OSENVIRONMENT=
XX  
XX+    dmake searches for an initial startup file, you should set the environment
XX+    variable MAKESTARTUP to contain the full path to the startup file, eg:
XX+ 
XX+ 	set MAKESTARTUP=d:\usr\lib\startup.mk
XX+ 
XX+    The dmake makefile has several variables that can be user specified and
XX+    default to reasonable values if not set.
XX+ 
XX+ 	MODEL   - defines the model to compile, valid values are
XX+ 		  {s,c,m, or l}, defaults to 'c' (ie. compact) model
XX+ 		  if unspecified.
XX+ 
XX+ 	MSC_VER - defines the version of Microsoft C in use, should be set to
XX+ 		  one of 4.0, 5.0, 5.1 or 6.0; defaults to 6.0.
XX+ 
XX+ 	NOSWAP  - If set to 'y', do not compile the dmake swapping version of
XX+ 		  spawnvpe.  This has the effect of turning off swapping.
XX+ 
XX+ 	DEBUG   - If set to '1' then make the debugging version of dmake, this
XX+ 		  will also set MODEL to 'l'.
XX+ 
XX+    To set the above variables you must specify them on the dmake command line
XX+    or insert them into the makefile.mk script.
XX+ 
XX+ 
XX+ Memory Requirements and Swapping:
XX+ ---------------------------------
XX+    The swapping code currently only swaps to DISK, I have left hooks
XX+    in to accomodate XMS and EMS, I have some code that performs the
XX+    necessary XMS/EMS accesses but have not incorporated it in yet.
XX+    It appears that a ramdisk seems to work just fine.  If anyone
XX+    wishes to fill in the hooks please do and I'll be happy to include
XX+    them in future distributions.
XX+ 
XX+ 
XX+ ^C and stopping a make:
XX+ -----------------------
XX+    Thanks to the efforts of Len Reed, appears to now work.  I have been unable
XX+    to hang my machine if it's swapped out and I hit ^C a couple thousand times.
XX+    It does stop and cleans up nicely.  So I guess it works :-).  Actually, let
XX+    me know if you encounter problems with this and I'll try to duplicate
XX+    them.
XX+ 
XX+ 
XX  Other notes:
XX  ------------
XX!    dmake does not care if you are running command.com or some other command
XX!    interpretter, you must however specify the proper values of the environment
XX!    variables SHELL, SHELLFLAGS, GROUPSHELL, and GROUPFLAGS in order for things
XX!    to work correctly.  Read the man page first.
XX  
XX!    Group recipes under DOS that use command.com as the command interpretter
XX!    require you to set the GROUPSUFFIX macro.
XX  
XX!    As shipped the startup.mk files for the DOS version try to figure out what
XX!    command interpretter you are using and set things up appropriately.
SHAR_EOF
echo "End of part 2, continue with part 3"
echo "3" > s2_seq_.tmp
exit 0