v15i059: dmake version 3.6 (part 07/25)

Dennis Vadura dvadura at watdragon.waterloo.edu
Mon Oct 15 11:38:44 AEST 1990


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

#!/bin/sh
# this is part 7 of a multipart archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file readme/msdos continued
#
CurArch=7
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
echo "x - Continuing file readme/msdos"
sed 's/^X//' << 'SHAR_EOF' >> readme/msdos
X	     broken.  I don't know what is wrong and would be happy to hear
X	     of suggestions on how to fix the current mess :-)  If you hit
X	     ^C more than once when dmake is executing a child then I think
X	     it will hang most machines.  If you hit it only once or not at
X	     all then things seem to work fine :-).  I tried to get this right
X	     by looking at other code, and making some assumptions about what
X	     DOS does... NEVER ASSUME ANYTHING ABOUT WHAT DOS DOES :-)
X
X
XOther notes:
X------------
Xdmake does not care if you are running command.com or some other command
Xinterpretter, you must however specify the proper values of the environment
Xvariables SHELL, SHELLFLAGS, GROUPSHELL, and GROUPFLAGS in order for things
Xto work correctly.  Read the man page first.
X
XGroup recipes under DOS that use command.com as the command interpretter
Xrequire you to set the GROUPSUFFIX macro.
X
XAs shipped the startup.mk files for the DOS version try to figure out what
Xcommand interpretter you are using and set things up appropriately.
XTwo command interpretters are supported in the shipped startup.mk file,
Xcommand.com, and the MKS Korn shell.
X
Xdmake does not contain any builtin commands.  It gets all commands it executes
Xfrom an external file system.  It is therefore most useful if it is used in
Xconjunction with an environment similar to that provided by the MKS Tool kit,
Xor equivalent.
X
Xdmake now supports the MKS argument passing conventions.  The facility is
Xenabled by setting .MKSARGS:=1 and is set by default in the startup.mk file
Xif an MKS Korn shell is detected as being the active command interpretter.
SHAR_EOF
echo "File readme/msdos is complete"
chmod 0640 readme/msdos || echo "restore of readme/msdos fails"
echo "x - extracting readme/cover (Text)"
sed 's/^X//' << 'SHAR_EOF' > readme/cover &&
XThis is the DMAKE version 3.6 distribution.  DMAKE is a Make like tool that
Xhas been written by me and has been used by individuals at the University of
XWaterloo for about a year and a half now.  This release replaces the previous
Xversion 3.5 release which is no longer supported.  Please read the file
X'readme/release' which accompanies this distribution and describes details
Xof this release (This note is found in readme/cover).
X
Xdmake is available for anonymous ftp from watmsg.uwaterloo.ca address is
X129.97.129.9.  It is in the pub/src directory, set your mode to binary,
Xand copy either:
X
X	dmake-3.6.tar.Z		- compressed tar format
X	dmake-3.6.zoo		- zoo archive
X
Xdmake is different from other versions of make in that it supports significant
Xenhancements (See the man page).  A short summary of the more important
Xones follows:
X
X	. support for portable makefiles
X	. runs on many platforms (DOS, generic unix [sysv and bsd4.3],
X	  apollo, and others)
X	. significantly enhanced macro facilities
X	. transitive closure on inference graph
X	. sophisticated inference algorithm
X	. support for traversing the file sytem both during making of targets
X	  and during inference
X	. %-meta rules for specifying rules to be used for inferring
X	  prerequisites
X	. highly configurable
X	. support for libraries
X	. parallel making of targets on architectures that support it
X	. attributed targets
X	. text diversions
X	. group recipes
X	. swapping itself to DISK under MSDOS
X	. supports MKS extended argument passing convention
X
XAll code found in this distribution is original and written by me except where
Xnoted in the source and the following:
X
X- dbug package from Fred Fish  (dmake DEBUG=1, to make a debugging version
X  of dmake)
X
X- malloc.c package, came from the net originally, author name wasn't
X  on it when I found it, I can't even remember where I got it.
X
X-dennis
SHAR_EOF
chmod 0640 readme/cover || echo "restore of readme/cover fails"
echo "x - extracting quit.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > quit.c &&
X/* RCS      -- $Header: /u2/dvadura/src/generic/dmake/src/RCS/quit.c,v 1.1 90/10/06 12:04:06 dvadura Exp $
X-- SYNOPSIS -- end the dmake session.
X-- 
X-- DESCRIPTION
X-- 	Handles dmake termination.
X--
X-- AUTHOR
X--      Dennis Vadura, dvadura at watdragon.uwaterloo.ca
X--      CS DEPT, University of Waterloo, Waterloo, Ont., Canada
X--
X-- COPYRIGHT
X--      Copyright (c) 1990 by Dennis Vadura.  All rights reserved.
X-- 
X--      This program is free software; you can redistribute it and/or
X--      modify it under the terms of the GNU General Public License
X--      (version 1), as published by the Free Software Foundation, and
X--      found in the file 'LICENSE' included with this distribution.
X-- 
X--      This program is distributed in the hope that it will be useful,
X--      but WITHOUT ANY WARRANTY; without even the implied warrant of
X--      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
X--      GNU General Public License for more details.
X-- 
X--      You should have received a copy of the GNU General Public License
X--      along with this program;  if not, write to the Free Software
X--      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X--
X-- LOG
X--     $Log:	quit.c,v $
X * Revision 1.1  90/10/06  12:04:06  dvadura
X * dmake Release, Version 3.6
X * 
X*/
X
X#include "extern.h"
X
Xstatic	void	_handle_quit ANSI((char*));
Xstatic	int	_dont_quit = 0;
X
X
Xvoid
XQuit()/*
X======== Error or quit */
X{
X   if( _dont_quit ) return;
X
X   while( Closefile() != NIL( FILE ) );
X   Clean_up_processes();
X
X   if( Current_target != NIL(HOW) )
X      Unlink_temp_files(Current_target);
X
X   if( _dont_quit == 0 ) _handle_quit( ".ERROR" );
X
X   Set_dir( Makedir );		/* No Error message if we can't do it */
X   Epilog( ERROR_EXIT_VALUE );
X}
X
X
Xstatic void
X_handle_quit( err_target )/*
X============================
X   Called by quit and the others to handle the execution of termination code
X   from within make */
Xchar *err_target;
X{
X   HASHPTR hp;
X   CELLPTR cp;
X
X   if( (hp = Get_name(err_target, Defs, FALSE, NIL(CELL))) != NIL(HASH) ) {
X      cp = hp->CP_OWNR;
X      Glob_attr |= A_IGNORE;
X
X      _dont_quit = 1;
X      cp->ce_flag |= F_TARGET;
X      Make( cp, cp->CE_HOW, NIL(CELL) );
X   }
X}
SHAR_EOF
chmod 0440 quit.c || echo "restore of quit.c fails"
echo "x - extracting percent.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > percent.c &&
X/* RCS      -- $Header: /u2/dvadura/src/generic/dmake/src/RCS/percent.c,v 1.1 90/10/06 12:04:04 dvadura Exp $
X-- SYNOPSIS -- handle building or %-rule meta-target nfa.
X-- 
X-- DESCRIPTION
X--	Builds the NFA used by dmake to match targets against %-meta
X--	rule constructs.  The NFA is built as a set of DFA's.
X-- 
X-- AUTHOR
X--      Dennis Vadura, dvadura at watdragon.uwaterloo.ca
X--      CS DEPT, University of Waterloo, Waterloo, Ont., Canada
X--
X-- COPYRIGHT
X--      Copyright (c) 1990 by Dennis Vadura.  All rights reserved.
X-- 
X--      This program is free software; you can redistribute it and/or
X--      modify it under the terms of the GNU General Public License
X--      (version 1), as published by the Free Software Foundation, and
X--      found in the file 'LICENSE' included with this distribution.
X-- 
X--      This program is distributed in the hope that it will be useful,
X--      but WITHOUT ANY WARRANTY; without even the implied warrant of
X--      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
X--      GNU General Public License for more details.
X-- 
X--      You should have received a copy of the GNU General Public License
X--      along with this program;  if not, write to the Free Software
X--      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X--
X-- LOG
X--     $Log:	percent.c,v $
X * Revision 1.1  90/10/06  12:04:04  dvadura
X * dmake Release, Version 3.6
X * 
X*/
X
X#include "extern.h"
X#include "alloc.h"
X#include "db.h"
X
Xstatic DFAPTR _build_dfa ANSI((char *));
Xstatic char   _shift_dfa ANSI((DFAPTR, char *));
X
X
X#define NO_ACTION	0
X#define START_PERCENT	1
X#define END_PERCENT	2
X#define ACCEPT		4
X#define FAIL           -1
X
Xstatic  NFAPTR _nfa = NIL( NFA );
X
X
XDFALINKPTR
XMatch_dfa( buf )/*
X==================
X   This routines runs all DFA's in parrallel and selects the one that best
X   matches the string.  If no match then it returns NIL( DFA ) */
Xchar *buf;
X{
X   register NFAPTR nfa;
X   int  	   adv;
X   DFALINKPTR	   dfa_list = NIL(DFALINK);
X
X   DB_ENTER( "Match_dfa" );
X   DB_PRINT( "dfa", ("Matching %s", buf) );
X
X   /* Run each of the DFA's on the input string in parallel, we terminate
X    * when all DFA's have either failed or ACCEPTED, if more than one DFA
X    * accepts we build a list of all accepting DFA's sorted on states with
X    * those matching in a higher numbered state heading the list. */
X
X   do {
X      adv = FALSE;
X
X      for( nfa = _nfa; nfa != NIL( NFA ); nfa = nfa->next )
X	 if( nfa->status != (char) FAIL && nfa->status != (char) ACCEPT ) {
X	    adv++;
X	    nfa->status = _shift_dfa( nfa->dfa, buf );
X
X	    /* Construct the list of matching DFA's */
X	    if( nfa->status == (char) ACCEPT ) {
X	       DFALINKPTR dl;
X
X	       TALLOC( dl, 1, DFALINK );
X	       dl->dl_meta  = nfa->dfa->node;
X	       dl->dl_per   = _substr( nfa->dfa->pstart, nfa->dfa->pend );
X	       dl->dl_state = nfa->dfa->states - nfa->dfa->c_state;
X
X	       if( dfa_list == NIL(DFALINK) )
X	          dfa_list = dl;
X	       else {
X		  DFALINKPTR tdli = dfa_list;
X		  DFALINKPTR tdlp = NIL(DFALINK);
X
X		  for( ; tdli != NIL(DFALINK); tdli = tdli->dl_next ) {
X		     if( dl->dl_state >= tdli->dl_state )
X			break;
X		     tdlp = tdli;
X		  }
X
X		  if( tdli != NIL(DFALINK) ) {
X		     tdli->dl_prev = dl;
X		     dl->dl_next   = tdli;
X		  }
X
X		  if( tdlp != NIL(DFALINK) ) {
X		     tdlp->dl_next = dl;
X		     dl->dl_prev   = tdlp;
X		  }
X		  else
X		     dfa_list = dl;
X	       }
X
X	       DB_PRINT( "dfa", ("Matched [%s]", dl->dl_meta->CE_NAME) );
X	    }
X	 }
X
X      buf++;
X   }
X   while ( adv );
X
X   for( nfa = _nfa; nfa != NIL( NFA ); nfa = nfa->next ) {
X      nfa->status = 0;
X      nfa->dfa->c_state = nfa->dfa->states;
X   }
X
X   DB_RETURN( dfa_list );
X}
X
X
Xvoid
XCheck_circle_dfa()/*
X====================
X   This function is called to test for circularities in the DFA lists
X   constructed from %-meta targets. */
X{
X   register NFAPTR nfa;
X
X   for( nfa = _nfa; nfa != NIL(NFA); nfa = nfa->next )
X      if( Test_circle( nfa->dfa->node, TRUE ) )
X	 Fatal( "Detected circular dependency in inference graph at [%s]",
X		nfa->dfa->node->CE_NAME );
X}
X
X
Xvoid
XAdd_nfa( name )/*
X=================
X   Given name, build a DFA and add it to the NFA.  The NFA is maintained as
X   a singly linked list of DFA's. */
Xchar *name;
X{
X   NFAPTR nfa;
X
X   TALLOC(nfa, 1, NFA);
X   nfa->dfa = _build_dfa(name);
X
X   if( _nfa != NIL(NFA) ) nfa->next = _nfa;
X
X   _nfa = nfa;
X}
X
X
Xstatic DFAPTR
X_build_dfa( name )/*
X====================
X   Construct a dfa for the passed in cell name.  The routine returns a struct
X   that represents a finite state machine that can recognize a regular
X   expression with exactly one '%' sign in it.  The '%' symbol is used as a
X   wildcard character that will match anything except the character that
X   immediately follows it or NUL.
X
X   The Construction of DFA's is well know and can be found in Hopcroft and
X   Ullman or any other book discussing formal language theory.
X   A more practical treatise can be found in Compilers, Aho, Sethi and Ullman.
X*/
Xchar *name;
X{
X   register int i;
X   DFAPTR   dfa;
X   int      nstates;
X   char     c;
X   STATEPTR sp, per_state;
X   int      pcount=0;
X   int      end_percent=FALSE;
X
X   nstates = strlen(name)+2;
X
X   /* Allocate a DFA node and the right number of states. */
X   TALLOC(dfa, 1, DFA);
X   TALLOC(sp=dfa->c_state=dfa->states, nstates, STATE);
X   dfa->node = Def_cell( name, NIL(CELL) );
X
X   /* Now construct the state table for the DFA */
X   for(i=0,per_state=NIL(STATE); i<nstates; i++, sp++) {
X      if( (c = *name++) == '%' ) {
X	 if( pcount++ > 0 )
X	    Error( "Only one %% allowed within a %%-meta target" );
X
X	 sp->symbol   = 0;
X	 sp->action   = START_PERCENT;
X	 sp->no_match = sp->match = per_state = sp+1;
X	 end_percent  = TRUE;
X      }
X      else {
X	 sp->symbol   = c;
X	 sp->no_match = per_state;
X
X	 if( c == '\0' ) {
X	    sp->action = ACCEPT;
X	    sp->match  = dfa->states;
X	 }
X	 else {
X	    sp->action = NO_ACTION;
X	    sp->match  = sp+1;
X	 }
X
X	 if( end_percent ) {
X	    sp->action |= END_PERCENT;
X	    end_percent = FALSE;
X	 }
X      }
X   }
X
X   return(dfa);
X}
X
X
Xstatic char
X_shift_dfa( dfa, data )/*
X=========================
X   Take a given dfa and advance it based on the current state, the shift
X   action in that state, and the current data value. */
XDFAPTR dfa;
Xchar   *data;
X{
X   register STATEPTR sp = dfa->c_state;
X   char c = *data;
X
X   /* Check if it is a START_PERCENT action if so then we need to save
X    * a pointer to the start of the string and advance to the next state. */
X   if( sp->action & START_PERCENT ) {
X      dfa->pstart = data;
X      sp++;
X   }
X
X   /* Now check if the current char matches the character expected in the
X    * current state.  If it does then perform the specified action, otherwise
X    * either shift it or fail.  We fail if the next state on no-match is
X    * NIL. */
X   if( sp->symbol == c ) {
X      if( sp->action & END_PERCENT ) dfa->pend = data;
X      if( sp->action & ACCEPT ) return(ACCEPT);
X      dfa->c_state = sp->match;
X   }
X   else if( (dfa->c_state = sp->no_match) == NIL(STATE) || !c )
X      return(FAIL);
X
X   return(NO_ACTION);
X}
SHAR_EOF
chmod 0440 percent.c || echo "restore of percent.c fails"
echo "x - extracting path.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > path.c &&
X/* RCS      -- $Header: /u2/dvadura/src/generic/dmake/src/RCS/path.c,v 1.1 90/10/06 12:04:02 dvadura Exp $
X-- SYNOPSIS -- pathname manipulation code
X-- 
X-- DESCRIPTION
X--	Pathname routines to handle building and pulling appart
X--	pathnames.
X-- 
X-- AUTHOR
X--      Dennis Vadura, dvadura at watdragon.uwaterloo.ca
X--      CS DEPT, University of Waterloo, Waterloo, Ont., Canada
X--
X-- COPYRIGHT
X--      Copyright (c) 1990 by Dennis Vadura.  All rights reserved.
X-- 
X--      This program is free software; you can redistribute it and/or
X--      modify it under the terms of the GNU General Public License
X--      (version 1), as published by the Free Software Foundation, and
X--      found in the file 'LICENSE' included with this distribution.
X-- 
X--      This program is distributed in the hope that it will be useful,
X--      but WITHOUT ANY WARRANTY; without even the implied warrant of
X--      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
X--      GNU General Public License for more details.
X-- 
X--      You should have received a copy of the GNU General Public License
X--      along with this program;  if not, write to the Free Software
X--      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X--
X-- LOG
X--     $Log:	path.c,v $
X * Revision 1.1  90/10/06  12:04:02  dvadura
X * dmake Release, Version 3.6
X * 
X*/
X
X#include "extern.h"
X#include "alloc.h"
X#include <string.h>
X
X/*
X** Return the suffix portion of a filename, assumed to begin with a `.'.
X*/
Xchar *
XGet_suffix(name)
Xchar *name;
X{
X   char *suff;
X
X   if(name == NIL(char)  || (suff = strrchr(name, '.')) == NIL(char))
X      suff = ".NULL";
X
X   return (suff);
X}
X
X
X
X/*
X** Take dir and name, and return a path which has dir as the directory
X** and name afterwards.
X**
X** N.B. Assumes that the dir separator string is in DirSepStr.
X**      Return path is built in a static buffer, if you need to use it
X**      again you must _strdup the result returned by Build_path.
X*/
Xchar *
XBuild_path(dir, name)
Xchar *dir;
Xchar *name;
X{
X   static char     *path  = NIL(char);
X   static unsigned buflen = 0;
X   int  plen = 0;
X   int  dlen = 0;
X   int  len;
X
X   if( dir  != NIL(char) ) dlen = strlen( dir  );
X   if( name != NIL(char) ) plen = strlen( name );
X   len = plen+dlen+strlen(DirSepStr)+1;
X
X   if( len > buflen ) {
X      buflen = (len+16) & ~0xf;		/* buf is always multiple of 16 */
X
X      if( path == NIL(char) )
X         path = MALLOC( buflen, char );
X      else
X         path = realloc( path, (unsigned) (buflen*sizeof(char)) );
X   }
X   
X   *path = '\0';
X
X   if( dlen ) {
X      strcpy( path, dir );
X
X      if( strchr(DirSepStr, dir[dlen-1]) == NIL(char) )
X	 strcat( path, DirSepStr );
X   }
X
X   strcat( path, name );
X   return( path );
X}
SHAR_EOF
chmod 0440 path.c || echo "restore of path.c fails"
echo "x - extracting patchlvl.h (Text)"
sed 's/^X//' << 'SHAR_EOF' > patchlvl.h &&
X/* dmake patch level, reset to 1 for each new version release. */
X
X#define PATCHLEVEL 1
SHAR_EOF
chmod 0440 patchlvl.h || echo "restore of patchlvl.h fails"
echo "x - extracting parse.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > parse.c &&
X/* RCS      -- $Header: /u2/dvadura/src/generic/dmake/src/RCS/parse.c,v 1.1 90/10/06 12:04:01 dvadura Exp $
X-- SYNOPSIS -- parse the input, and perform semantic analysis
X-- 
X-- DESCRIPTION
X-- 	This file contains the routines that parse the input makefile and
X--	call the appropriate routines to perform the semantic analysis and
X--	build the internal dag.
X--
X-- AUTHOR
X--      Dennis Vadura, dvadura at watdragon.uwaterloo.ca
X--      CS DEPT, University of Waterloo, Waterloo, Ont., Canada
X--
X-- COPYRIGHT
X--      Copyright (c) 1990 by Dennis Vadura.  All rights reserved.
X-- 
X--      This program is free software; you can redistribute it and/or
X--      modify it under the terms of the GNU General Public License
X--      (version 1), as published by the Free Software Foundation, and
X--      found in the file 'LICENSE' included with this distribution.
X-- 
X--      This program is distributed in the hope that it will be useful,
X--      but WITHOUT ANY WARRANTY; without even the implied warrant of
X--      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
X--      GNU General Public License for more details.
X-- 
X--      You should have received a copy of the GNU General Public License
X--      along with this program;  if not, write to the Free Software
X--      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X--
X-- LOG
X--     $Log:	parse.c,v $
X * Revision 1.1  90/10/06  12:04:01  dvadura
X * dmake Release, Version 3.6
X * 
X*/
X
X#include <ctype.h>
X#include "extern.h"
X#include "alloc.h"
X#include "db.h"
X
X
Xvoid
XParse( fil )/*
X==============  Parse the makefile input */
XFILE *fil;
X{
X   int	state = NORMAL_SCAN;           /* indicates current parser state */
X   int  group = FALSE;                 /* true if scanning a group rcpe  */
X   int  rule  = FALSE;                 /* have seen a recipe line        */
X   char *p;			       /* termporary pointer into Buffer */
X
X   DB_ENTER( "Parse" );
X
X   while( TRUE ) {
X      if( Get_line( Buffer, fil ) ) {
X	 if( fil != NIL( FILE ) )               /* end of parsable input */
X	    Closefile();
X
X	 Bind_rules_to_targets( F_DEFAULT );
X         if( group )  Fatal( "Incomplete rule recipe group detected" );
X
X	 DB_VOID_RETURN;
X      }
X      else
X         switch( state ) {
X	    case RULE_SCAN:
X
X	       /* Check for the `[' that starts off a group rule definition.  It
X	        * must appear as the first non-white space
X		* character in the line. */
X
X	       p = _strspn( Buffer, " \t" );
X               if( Set_group_attributes( p ) ) {
X                  if( rule  && group )
X                     Fatal( "Cannot mix single and group recipe lines" );
X                  else
X                     group = TRUE;
X
X                  rule = TRUE;
X
X                  break;                     /* ignore the group start  */
X               }
X
X               if( group ) {
X                  if( *p != ']' ) {
X                     Add_recipe_to_list( Buffer, TRUE, TRUE );
X                     rule = TRUE;
X                  }
X                  else
X                     state = NORMAL_SCAN;
X               }
X               else {
X                  if( *Buffer == '\t' ) {
X                     Add_recipe_to_list( Buffer, FALSE, FALSE );
X                     rule = TRUE;
X                  }
X                  else if( *p == ']' )
X                     Fatal( "Found unmatched ']'" );
X                  else if( *Buffer )
X		     state = NORMAL_SCAN;
X               }
X 
X               if( state == RULE_SCAN ) break;     /* ie. keep going    */
X               
X	       Bind_rules_to_targets( (group) ? F_GROUP: F_DEFAULT );
X
X               rule = FALSE;
X               if( group ) {
X                  group = FALSE;
X                  break;
X               }
X	       /*FALLTRHOUGH*/
X
X               /* In this case we broke out of the rule scan because we do not
X                * have a recipe line that begins with a <TAB>, so lets
X		* try to scan the thing as a macro or rule definition. */
X               
X
X	    case NORMAL_SCAN:
X	       if( !*Buffer ) continue;         /* we have null input line */
X
X	       /* STUPID AUGMAKE uses "include" at the start of a line as
X	        * a signal to include a new file, so let's look for it.
X		* if we see it replace it by .INCLUDE: and stick this back
X		* into the buffer. */
X	       if( !strncmp( "include", Buffer, 7 ) &&
X		   (Buffer[7] == ' ' || Buffer[7] == '\t') )
X	       {
X		  char *tmp;
X
X		  tmp = _strjoin( ".INCLUDE:", Buffer+7, -1, FALSE );
X		  strcpy( Buffer, tmp );
X		  FREE( tmp );
X	       }
X
X               /* look for a macro definition, they all contain an = sign
X	        * if we fail to recognize it as a legal macro op then try to
X		* parse the same line as a rule definition, it's one or the
X		* other */
X		
X	       if( Parse_macro(Buffer, M_DEFAULT) ) break;/* it's a macro def */
X	       if( Parse_rule_def( &state ) ) 	    break;/* it's a rule def  */
X
X	       /* if just blank line then ignore it */
X	       if( *_strspn( Buffer, " \t" ) == '\0' ) break;
X	       
X	       /* otherwise assume it was a line of unrecognized input, or a
X	        * recipe line out of place so print a message */
X		
X	       Fatal( "Expecting macro or rule defn, found neither" );
X	       break;
X
X	    default:
X	       Fatal( "Internal -- UNKNOWN Parser state %d", state );
X	 }
X   }
X}
X
SHAR_EOF
chmod 0440 parse.c || echo "restore of parse.c fails"
echo mkdir - msdos
mkdir msdos
echo mkdir - msdos/tccdos
mkdir msdos/tccdos
echo "x - extracting msdos/tccdos/utime.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > msdos/tccdos/utime.c &&
X/*
X** change access and modify times of file
X*/
X#include <sys/stat.h>
X#include <fcntl.h>
X#include <time.h>
X
Xint
Xutime(name, timep)/*
X====================
X    Broken for turbo C it only sets the file time to the current time by
X    touching a character in the file */
Xchar*	name;
Xtime_t	timep[2];
X{
X	struct  stat buf;
X	int	fil;
X	char	data;
X
X	if (stat(name, &buf) != 0)
X		return (-1);
X	if (buf.st_size != 0)  {
X		if ((fil = open(name, O_RDWR, S_IWRITE)) < 0)
X			return (-1);
X		if (read(fil, &data, 1) < 1) {
X			close(fil);
X			return (-1);
X		}
X		lseek(fil, 0L, 0);
X		if (write(fil, &data, 1) < 1) {
X			close(fil);
X			return (-1);
X		}
X		close(fil);
X		return (0);
X	} else 	if ((fil = creat(name, S_IWRITE)) < 0) {
X		return (-1);
X	} else {
X		close(fil);
X		return (0);
X	}
X}
SHAR_EOF
chmod 0440 msdos/tccdos/utime.c || echo "restore of msdos/tccdos/utime.c fails"
echo "x - extracting msdos/tccdos/tempnam.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > msdos/tccdos/tempnam.c &&
X/*LINTLIBRARY*/
X#include <stdio.h>
X#include <string.h>
X#include <stdlib.h>
X#include <time.h>
X
X#if defined(max)
X#   undef  max
X#endif
X#define max(A,B) (((A)<(B))?(B):(A))
X
Xextern char *mktemp();
Xextern int access();
Xint _access();
X
X/* Turbo C stdio.h doesn't define P_tmpdir, so let's do it here */
X/* Under DOS leave the default tmpdir pointing here!		*/
Xstatic char *P_tmpdir = "";
X
Xchar *
Xtempnam(dir, prefix)
Xchar *dir;		/* use this directory please (if non-NULL) */
Xchar *prefix;		/* use this (if non-NULL) as filename prefix */
X{
X   static         int count = 0;
X   register char *p, *q, *tmpdir;
X   int            tl=0, dl=0, pl;
X   char		  buf[30];
X
X   pl = strlen(P_tmpdir);
X
X   if( (tmpdir = getenv("TMPDIR")) != NULL ) tl = strlen(tmpdir);
X   if( dir != NULL ) dl = strlen(dir);
X
X   if( (p = malloc((unsigned)(max(max(dl,tl),pl)+12))) == NULL )
X     return(NULL);
X
X   *p = '\0';
X
X   if( (tl == 0) || (_access( strcpy(p, tmpdir), 0) != 0) )
X     if( (dl == 0) || (_access( strcpy(p, dir), 0) != 0) )
X	if( _access( strcpy(p, P_tmpdir), 0) != 0 )
X	   if( !prefix )
X	      prefix = "tp";
X
X   if(prefix)
X   {
X      *(p+strlen(p)+2) = '\0';
X      (void)strncat(p, prefix, 2);
X   }
X
X   sprintf( buf, "%ld", (long) time((time_t *)0) );
X   (void)strcat(p, buf+strlen(buf)-6 );
X   sprintf( buf, "%03d", count++ );
X   q=p+strlen(p)-6;
X   *q++ = buf[0];
X   *q++ = buf[1];
X   *q++ = buf[2];
X
X   if( (q = strrchr(p,'.')) != NULL ) *q = '\0';
X
X   return(p);
X}
X
X
X
X_access( name, flag )
Xchar *name;
Xint  flag;
X{
X   char *p;
X   int r;
X
X   if( name == NULL || !*name ) return(1);  /* NULL dir means current dir */
X   r = access( name, flag );
X   p = name+strlen(name)-1;
X   if(*p != '/' && *p != '\\') strcat( p, "/" );
X
X   return( r );
X}
SHAR_EOF
chmod 0440 msdos/tccdos/tempnam.c || echo "restore of msdos/tccdos/tempnam.c fails"
echo "x - extracting msdos/tccdos/startup.mk (Text)"
sed 's/^X//' << 'SHAR_EOF' > msdos/tccdos/startup.mk &&
X# MSDOS DMAKE startup file.  Customize to suit your needs.
X# Assumes MKS toolkit for the tool commands, and Turbo-C.  Change as req'd.
X# See the documentation for a description of internally defined macros.
X#
X# Disable warnings for macros redefined here that were given
X# on the command line.
X__.SILENT := $(.SILENT)
X.SILENT   := yes
X
X# Configuration parameters for DMAKE startup.mk file
X# Set these to NON-NULL if you wish to turn the parameter on.
X_HAVE_RCS	:= yes		# yes => RCS  is installed.
X_HAVE_SCCS	:= 		# yes => SCCS is installed.
X
X# Applicable suffix definitions
XA := .lib	# Libraries
XE := .exe	# Executables
XF := .for	# Fortran
XO := .obj	# Objects
XP := .pas	# Pascal
XS := .asm	# Assembler sources
XV := 		# RCS suffix
X
X# See if these are defined
XTMPDIR := $(ROOTDIR)/tmp
X.IMPORT .IGNORE : TMPDIR SHELL COMSPEC
X
X# Recipe execution configurations
X# First set SHELL, If it is not defined, use COMSPEC, otherwise
X# it is assumed to be MKS Korn SHELL.
X.IF $(SHELL) == $(NULL)
X.IF $(COMSPEC) == $(NULL)
X   SHELL := $(ROOTDIR)/bin/sh$E
X.ELSE
X   SHELL := $(COMSPEC)
X.END
X.END
XGROUPSHELL := $(SHELL)
X
X# Now set remaining arguments depending on which SHELL we
X# are going to use.  COMSPEC (assumed to be command.com) or
X# MKS Korn Shell.
X.IF $(SHELL)==$(COMSPEC)
X   SHELLFLAGS  := $(SWITCHAR)c
X   GROUPFLAGS  := $(SHELLFLAGS)
X   SHELLMETAS  := *"?<>
X   GROUPSUFFIX := .bat
X   DIRSEPSTR   := \\
X   DIVFILE      = $(TMPFILE:s,/,\)
X.ELSE
X   SHELLFLAGS  := -c
X   GROUPFLAGS  := 
X   SHELLMETAS  := *"?<>|()&][$$\#`'
X   GROUPSUFFIX := .ksh
X   .MKSARGS    := yes
X   DIVFILE      = $(TMPFILE:s,/,${DIVSEP_shell_${DIVSHELL}})
X   DIVSEP_shell_yes := \\\
X   DIVSEP_shell_no  := \\
X.END
X
X# Standard C-language command names and flags
X   CC      := tcc		# C-compiler and flags
X   CFLAGS  +=
X
X   AS      := tasm		# Assembler and flags
X   ASFLAGS += 
X
X   LD       = tlink		# Loader and flags
X   LDFLAGS +=
X   LDLIBS   =
X
X# Definition of $(MAKE) macro for recursive makes.
X   MAKE = $(MAKECMD) $(MFLAGS)
X
X# Language and Parser generation Tools and their flags
X   YACC	  := yacc		# standard yacc
X   YFLAGS +=
X   YTAB	  := ytab		# yacc output files name stem.
X
X   LEX	  := lex		# standard lex
X   LFLAGS +=
X   LEXYY  := lex_yy		# lex output file
X
X# Other Compilers, Tools and their flags
X   PC	:= tpc			# pascal compiler
X   RC	:= anyf77		# ratfor compiler
X   FC	:= anyf77		# fortran compiler
X
X   CO	   := co		# check out for RCS
X   COFLAGS += -q
X
X   AR     := ar			# archiver
X   ARFLAGS+= ruv
X
X   RM	   := rm		# remove a file command
X   RMFLAGS +=
X
X# Implicit generation rules for making inferences.
X# We don't provide .yr or .ye rules here.  They're obsolete.
X# Rules for making *$O
X   %$O : %.c ; $(CC) $(CFLAGS) -c $<
X   %$O : %$P ; $(PC) $(PFLAGS) -c $<
X   %$O : %$S ; $(AS) $(ASFLAGS) $(<:s,/,\);
X   %$O : %.cl ; class -c $<
X   %$O : %.e %.r %.F %$F ; $(FC) $(RFLAGS) $(EFLAGS) $(FFLAGS) -c $<
X
X# Executables
X   %$E : %$O ; $(CC) $(LDFLAGS) -o$@ $< $(LDLIBS)
X
X# lex and yacc rules
X   %.c : %.y ; $(YACC)  $(YFLAGS) $<; mv $(YTAB).c $@
X   %.c : %.l ; $(LEX)   $(LFLAGS) $<; mv $(LEXYY).c $@
X
X# RCS support
X.IF $(_HAVE_RCS)
X   % : $$(@:d)RCS/$$(@:f)$V;- $(CO) $(COFLAGS) $@
X   .NOINFER : $$(@:d)RCS/$$(@:f)$V
X.END
X
X# SCCS support
X.IF $(_HAVE_SCCS)
X   % : s.% ; get $@
X   .NOINFER : s.%
X.END
X
X# Recipe to make archive files.
X%$A :
X[
X   $(AR) $(ARFLAGS) $@ $?
X   $(RM) $(RMFLAGS) $?
X]
X
X# DMAKE uses this recipe to remove intermediate targets
X.REMOVE :; $(RM) -f $<
X
X# AUGMAKE extensions for SYSV compatibility
X at B = $(@:b)
X at D = $(@:d)
X at F = $(@:f)
X*B = $(*:b)
X*D = $(*:d)
X*F = $(*:f)
X<B = $(<:b)
X<D = $(<:d)
X<F = $(<:f)
X?B = $(?:b)
X?F = $(?:f)
X?D = $(?:d)
X
X# Turn warnings back to previous setting.
X.SILENT := $(__.SILENT)
X
X# Local init file if any, gets parsed before user makefile
X.INCLUDE .IGNORE: "_startup.mk"
SHAR_EOF
chmod 0640 msdos/tccdos/startup.mk || echo "restore of msdos/tccdos/startup.mk fails"
echo "x - extracting msdos/tccdos/objswp.rsp (Text)"
sed 's/^X//' << 'SHAR_EOF' > msdos/tccdos/objswp.rsp &&
Xc:\lib.tcc\c0c.obj+
Xobjects\exec.obj+
Xobjects\infer.obj+
Xobjects\make.obj+
Xobjects\stat.obj+
Xobjects\expand.obj+
Xobjects\string.obj+
Xobjects\hash.obj+
Xobjects\dag.obj+
Xobjects\dmake.obj+
Xobjects\path.obj+
Xobjects\imacs.obj+
Xobjects\sysintf.obj+
Xobjects\parse.obj+
Xobjects\getinp.obj+
Xobjects\quit.obj+
Xobjects\basename.obj+
Xobjects\dump.obj+
Xobjects\macparse.obj+
Xobjects\rulparse.obj+
Xobjects\percent.obj+
Xobjects\function.obj+
Xobjects\ruletab.obj+
Xobjects\dirbrk.obj+
Xobjects\runargv.obj+
Xobjects\arlib.obj+
Xobjects\_chdir.obj+
Xobjects\switchar.obj+
Xobjects\rmprq.obj+
Xobjects\find.obj+
Xobjects\spawn.obj+
Xobjects\tempnam.obj+
Xobjects\utime.obj
SHAR_EOF
chmod 0640 msdos/tccdos/objswp.rsp || echo "restore of msdos/tccdos/objswp.rsp fails"
echo "x - extracting msdos/tccdos/obj.rsp (Text)"
sed 's/^X//' << 'SHAR_EOF' > msdos/tccdos/obj.rsp &&
Xc:\lib.tcc\c0c.obj+
Xobjects\infer.obj+
Xobjects\make.obj+
Xobjects\stat.obj+
Xobjects\expand.obj+
Xobjects\string.obj+
Xobjects\hash.obj+
Xobjects\dag.obj+
Xobjects\dmake.obj+
Xobjects\path.obj+
Xobjects\imacs.obj+
Xobjects\sysintf.obj+
Xobjects\parse.obj+
Xobjects\getinp.obj+
Xobjects\quit.obj+
Xobjects\basename.obj+
Xobjects\dump.obj+
Xobjects\macparse.obj+
Xobjects\rulparse.obj+
Xobjects\percent.obj+
Xobjects\function.obj+
Xobjects\ruletab.obj+
Xobjects\dirbrk.obj+
Xobjects\runargv.obj+
Xobjects\arlib.obj+
Xobjects\_chdir.obj+
Xobjects\switchar.obj+
Xobjects\rmprq.obj+
Xobjects\tempnam.obj+
Xobjects\utime.obj
SHAR_EOF
chmod 0640 msdos/tccdos/obj.rsp || echo "restore of msdos/tccdos/obj.rsp fails"
echo "x - extracting msdos/tccdos/mkswp.bat (Text)"
sed 's/^X//' << 'SHAR_EOF' > msdos/tccdos/mkswp.bat &&
Xmkdir objects
Xtasm -t -mx -dmcompact msdos\exec.asm;
Xmv exec.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  infer.c
Xmv infer.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  make.c
Xmv make.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  stat.c
Xmv stat.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  expand.c
Xmv expand.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  string.c
Xmv string.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  hash.c
Xmv hash.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  dag.c
Xmv dag.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  dmake.c
Xmv dmake.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  path.c
Xmv path.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  imacs.c
Xmv imacs.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  sysintf.c
Xmv sysintf.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  parse.c
Xmv parse.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  getinp.c
Xmv getinp.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  quit.c
Xmv quit.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  basename.c
Xmv basename.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  dump.c
Xmv dump.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  macparse.c
Xmv macparse.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  rulparse.c
Xmv rulparse.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  percent.c
Xmv percent.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  function.c
Xmv function.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  msdos\ruletab.c
Xmv ruletab.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  msdos\dirbrk.c
Xmv dirbrk.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  msdos\runargv.c
Xmv runargv.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  msdos\arlib.c
Xmv arlib.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  msdos\_chdir.c
Xmv _chdir.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  msdos\switchar.c
Xmv switchar.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  msdos\rmprq.c
Xmv rmprq.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  msdos\find.c
Xmv find.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  msdos\spawn.c
Xmv spawn.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  msdos\tccdos\tempnam.c
Xmv tempnam.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  msdos\tccdos\utime.c
Xmv utime.obj objects
Xtlink @msdos\tccdos\objswp.rsp,dmake.exe,NUL.MAP, at msdos\tccdos\libswp.rsp NUL.DEF
SHAR_EOF
chmod 0640 msdos/tccdos/mkswp.bat || echo "restore of msdos/tccdos/mkswp.bat fails"
echo "x - extracting msdos/tccdos/mk.bat (Text)"
sed 's/^X//' << 'SHAR_EOF' > msdos/tccdos/mk.bat &&
Xmkdir objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  infer.c
Xmv infer.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  make.c
Xmv make.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  stat.c
Xmv stat.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  expand.c
Xmv expand.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  string.c
Xmv string.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  hash.c
Xmv hash.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  dag.c
Xmv dag.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  dmake.c
Xmv dmake.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  path.c
Xmv path.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  imacs.c
Xmv imacs.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  sysintf.c
Xmv sysintf.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  parse.c
Xmv parse.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  getinp.c
Xmv getinp.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  quit.c
Xmv quit.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  basename.c
Xmv basename.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  dump.c
Xmv dump.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  macparse.c
Xmv macparse.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  rulparse.c
Xmv rulparse.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  percent.c
Xmv percent.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  function.c
Xmv function.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  msdos\ruletab.c
Xmv ruletab.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  msdos\dirbrk.c
Xmv dirbrk.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  msdos\runargv.c
Xmv runargv.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  msdos\arlib.c
Xmv arlib.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  msdos\_chdir.c
Xmv _chdir.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  msdos\switchar.c
Xmv switchar.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  msdos\rmprq.c
Xmv rmprq.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  msdos\tccdos\tempnam.c
Xmv tempnam.obj objects
Xtcc -c -DHELP -I. -Icommon -Imsdos -Imsdos\tccdos -f- -d -O -N- -w-nod -mc  msdos\tccdos\utime.c
Xmv utime.obj objects
Xtlink @msdos\tccdos\obj.rsp,dmake.exe,NUL.MAP, at msdos\tccdos\lib.rsp NUL.DEF
SHAR_EOF
chmod 0640 msdos/tccdos/mk.bat || echo "restore of msdos/tccdos/mk.bat fails"
echo "x - extracting msdos/tccdos/libswp.rsp (Text)"
sed 's/^X//' << 'SHAR_EOF' > msdos/tccdos/libswp.rsp &&
Xc:\lib.tcc\cc
SHAR_EOF
chmod 0640 msdos/tccdos/libswp.rsp || echo "restore of msdos/tccdos/libswp.rsp fails"
echo "x - extracting msdos/tccdos/lib.rsp (Text)"
sed 's/^X//' << 'SHAR_EOF' > msdos/tccdos/lib.rsp &&
Xc:\lib.tcc\cc
SHAR_EOF
chmod 0640 msdos/tccdos/lib.rsp || echo "restore of msdos/tccdos/lib.rsp fails"
echo "x - extracting msdos/tccdos/config.mk (Text)"
sed 's/^X//' << 'SHAR_EOF' > msdos/tccdos/config.mk &&
X# This is the Turbo C 2.0 DOS configuration file for DMAKE
X#	It simply modifies the values of SRC, and checks to see if
X#	OSENVIRONMENT is defined.  If so it includes the appropriate
X#	config.mk file.
X#
X# It also sets the values of .SOURCE.c and .SOURCE.h to include the local
SHAR_EOF
echo "End of part 7"
echo "File msdos/tccdos/config.mk is continued in part 8"
echo "8" > s2_seq_.tmp
exit 0



More information about the Comp.sources.misc mailing list