Boost logo

Boost-Commit :

From: jurko.gospodnetic_at_[hidden]
Date: 2008-08-29 08:59:56


Author: jurko
Date: 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
New Revision: 48445
URL: http://svn.boost.org/trac/boost/changeset/48445

Log:
Minor stylistic changes throughout Boost Jam sources. Mostly corrected indentation, removed trailing spaces and updated comments.
Binary files modified:
   trunk/tools/jam/src/build_vms.com
Text files modified:
   trunk/tools/jam/src/boost-jam.spec | 8
   trunk/tools/jam/src/build.bat | 2
   trunk/tools/jam/src/build.jam | 25
   trunk/tools/jam/src/build.sh | 34
   trunk/tools/jam/src/builtins.c | 132 +-
   trunk/tools/jam/src/class.c | 42
   trunk/tools/jam/src/command.c | 30
   trunk/tools/jam/src/command.h | 38
   trunk/tools/jam/src/compile.c | 594 ++++++------
   trunk/tools/jam/src/compile.h | 42
   trunk/tools/jam/src/debug.c | 28
   trunk/tools/jam/src/execmac.c | 28
   trunk/tools/jam/src/execnt.c | 273 +++--
   trunk/tools/jam/src/execunix.c | 190 ++--
   trunk/tools/jam/src/execvms.c | 184 +-
   trunk/tools/jam/src/expand.c | 320 +++---
   trunk/tools/jam/src/expand.h | 2
   trunk/tools/jam/src/filemac.c | 99 +-
   trunk/tools/jam/src/filent.c | 230 ++--
   trunk/tools/jam/src/fileos2.c | 43
   trunk/tools/jam/src/filesys.c | 16
   trunk/tools/jam/src/filesys.h | 2
   trunk/tools/jam/src/fileunix.c | 252 ++--
   trunk/tools/jam/src/filevms.c | 206 ++--
   trunk/tools/jam/src/frames.c | 2
   trunk/tools/jam/src/frames.h | 2
   trunk/tools/jam/src/glob.c | 188 +--
   trunk/tools/jam/src/hash.c | 287 +++---
   trunk/tools/jam/src/hash.h | 14
   trunk/tools/jam/src/hcache.c | 429 ++++----
   trunk/tools/jam/src/hdrmacro.c | 26
   trunk/tools/jam/src/headers.c | 134 +-
   trunk/tools/jam/src/jam.c | 158 +-
   trunk/tools/jam/src/jam.h | 88
   trunk/tools/jam/src/jambase.h | 2
   trunk/tools/jam/src/jamgram.c | 24
   trunk/tools/jam/src/jamgram.y | 34
   trunk/tools/jam/src/jamgram.yy | 32
   trunk/tools/jam/src/lists.c | 178 +-
   trunk/tools/jam/src/lists.h | 64
   trunk/tools/jam/src/make.c | 1136 +++++++++++------------
   trunk/tools/jam/src/make.h | 16
   trunk/tools/jam/src/make1.c | 1256 +++++++++++++-------------
   trunk/tools/jam/src/mem.c | 8
   trunk/tools/jam/src/mem.h | 4
   trunk/tools/jam/src/mkjambase.c | 194 ++--
   trunk/tools/jam/src/modules.c | 59
   trunk/tools/jam/src/native.h | 4
   trunk/tools/jam/src/newstr.c | 38
   trunk/tools/jam/src/option.c | 117 +-
   trunk/tools/jam/src/option.h | 8
   trunk/tools/jam/src/output.c | 101 +-
   trunk/tools/jam/src/output.h | 2
   trunk/tools/jam/src/parse.c | 127 +-
   trunk/tools/jam/src/parse.h | 2
   trunk/tools/jam/src/pathmac.c | 256 ++--
   trunk/tools/jam/src/pathsys.h | 24
   trunk/tools/jam/src/pathunix.c | 180 +-
   trunk/tools/jam/src/pathvms.c | 352 +++---
   trunk/tools/jam/src/regexp.c | 1890 ++++++++++++++++++++--------------------
   trunk/tools/jam/src/regexp.h | 16
   trunk/tools/jam/src/rules.c | 305 +++---
   trunk/tools/jam/src/rules.h | 190 ++-
   trunk/tools/jam/src/scan.c | 484 +++++-----
   trunk/tools/jam/src/scan.h | 22
   trunk/tools/jam/src/search.c | 30
   trunk/tools/jam/src/search.h | 2
   trunk/tools/jam/src/strings.c | 14
   trunk/tools/jam/src/subst.c | 16
   trunk/tools/jam/src/timestamp.c | 226 ++--
   trunk/tools/jam/src/variable.c | 198 ++--
   trunk/tools/jam/src/variable.h | 18
   trunk/tools/jam/src/w32_getreg.c | 38
   trunk/tools/jam/src/yyacc.c | 8
   74 files changed, 5894 insertions(+), 5929 deletions(-)

Modified: trunk/tools/jam/src/boost-jam.spec
==============================================================================
--- trunk/tools/jam/src/boost-jam.spec (original)
+++ trunk/tools/jam/src/boost-jam.spec 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -11,9 +11,9 @@
 BuildRoot: /var/tmp/%{name}-%{version}.root
 
 %description
-Boost Jam is a build tool based on FTJam, which in turn is based on
+Boost Jam is a build tool based on FTJam, which in turn is based on
 Perforce Jam. It contains significant improvements made to facilitate
-its use in the Boost Build System, but should be backward compatible
+its use in the Boost Build System, but should be backward compatible
 with Perforce Jam.
 
 Authors:
@@ -26,7 +26,7 @@
     +\ Copyright 1993-2002 Christopher Seiwald and Perforce Software, Inc.
     \+/
     License is hereby granted to use this software and distribute it
- freely, as long as this copyright notice is retained and modifications
+ freely, as long as this copyright notice is retained and modifications
     are clearly marked.
     ALL WARRANTIES ARE HEREBY DISCLAIMED.
 
@@ -34,7 +34,7 @@
     Copyright 2001-2006 David Abrahams.
     Copyright 2002-2006 Rene Rivera.
     Copyright 2003-2006 Vladimir Prus.
-
+
     Distributed under the Boost Software License, Version 1.0.
     (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 

Modified: trunk/tools/jam/src/build.bat
==============================================================================
--- trunk/tools/jam/src/build.bat (original)
+++ trunk/tools/jam/src/build.bat 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -380,7 +380,7 @@
 set BJAM_SOURCES=%BJAM_SOURCES% newstr.c option.c output.c parse.c pathunix.c regexp.c
 set BJAM_SOURCES=%BJAM_SOURCES% rules.c scan.c search.c subst.c timestamp.c variable.c modules.c
 set BJAM_SOURCES=%BJAM_SOURCES% strings.c filesys.c builtins.c pwd.c class.c w32_getreg.c native.c
-set BJAM_SOURCES=%BJAM_SOURCES% modules/set.c modules/path.c modules/regex.c
+set BJAM_SOURCES=%BJAM_SOURCES% modules/set.c modules/path.c modules/regex.c
 set BJAM_SOURCES=%BJAM_SOURCES% modules/property-set.c modules/sequence.c modules/order.c
 
 set BJAM_UPDATE=

Modified: trunk/tools/jam/src/build.jam
==============================================================================
--- trunk/tools/jam/src/build.jam (original)
+++ trunk/tools/jam/src/build.jam 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -10,7 +10,7 @@
 else { rule .path { return "$(<:J=/)" ; } }
 if $(VMS) { . = "_" ; }
 else { . = "." ; }
-./ ?= "" ;
+./ ?= "" ;
 
 # Info about what we are building.
 _VERSION_ = 3 1 17 ;
@@ -341,13 +341,12 @@
 toolset = [ MATCH --toolset=(.*) : $(ARGV) ] ;
 if ! $(toolset)
 {
- # For some reason, the following test does not catch
- # empty toolset.
+ # For some reason, the following test does not catch empty toolset.
     ECHO "###" ;
     ECHO "###" No toolset specified. Please use --toolset option. ;
     ECHO "###" ;
     ECHO "###" Known toolsets are: $(toolsets:J=", ") ;
- EXIT "###" ;
+ EXIT "###" ;
 }
 if ! $(toolset) in $(toolsets)
 {
@@ -449,8 +448,8 @@
     lists.c make.c make1.c mem.c newstr.c
     option.c output.c parse.c regexp.c rules.c
     scan.c search.c subst.c w32_getreg.c
- timestamp.c variable.c modules.c strings.c filesys.c
- builtins.c pwd.c class.c native.c modules/set.c
+ timestamp.c variable.c modules.c strings.c filesys.c
+ builtins.c pwd.c class.c native.c modules/set.c
     modules/path.c modules/regex.c modules/property-set.c
     modules/sequence.c modules/order.c
     ;
@@ -461,7 +460,7 @@
 else if $(OS2)
 {
     jam.source += execunix.c fileos2.c pathunix.c ;
-}
+}
 else if $(VMS)
 {
     jam.source += execvms.c filevms.c pathvms.c ;
@@ -770,7 +769,7 @@
 {
     $(>).exe = [ .exe $(>) : $(jam.source) ] ;
     DEPENDS all : $($(>).exe) ;
-
+
     if $(debug)
     {
         $(<).exe = $(<:S=$($(>).exe:S)) ;
@@ -929,14 +928,14 @@
             src-files-actual += $(src-path) ;
         }
     }
-
+
     local pack = ;
     if $(NT) { pack = $(dst-dir).zip ; }
     if $(UNIX) { pack = $(dst-dir).tgz ; }
-
+
     DEPENDS dist : $(pack) ;
     DEPENDS $(pack) : $(dst-files) ;
-
+
     local dst-files-queue = $(dst-files) ;
     for local src-path in $(src-files-actual)
     {
@@ -944,11 +943,11 @@
         dst-files-queue = $(dst-files-queue[2-]) ;
         DEPENDS $(dst-file) : $(src-path) $(dst-file:D) ;
         .mkdir $(dst-file:D) ;
-
+
         [COPY] $(dst-file) : $(src-path) ;
         .clean $(dst-file) ;
     }
-
+
     [PACK] $(pack) : $(dst-files) ;
     .clean $(pack) ;
 }

Modified: trunk/tools/jam/src/build.sh
==============================================================================
--- trunk/tools/jam/src/build.sh (original)
+++ trunk/tools/jam/src/build.sh 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -127,15 +127,15 @@
     fi
     BOOST_JAM_CC="gcc -DNT"
     ;;
-
+
     gcc)
     BOOST_JAM_CC=gcc
     ;;
-
+
     darwin)
     BOOST_JAM_CC=cc
     ;;
-
+
     intel-linux)
     if test -r /opt/intel/cc/9.0/bin/iccvars.sh ; then
         BOOST_JAM_TOOLSET_ROOT=/opt/intel/cc/9.0/
@@ -164,35 +164,35 @@
     fi
     BOOST_JAM_CC=icc
     ;;
-
+
     vacpp)
     BOOST_JAM_CC=xlc
     ;;
-
+
     como)
     BOOST_JAM_CC="como --c"
     ;;
-
+
     kcc)
     BOOST_JAM_CC=KCC
     ;;
-
+
     kylix)
     BOOST_JAM_CC=bc++
     ;;
-
+
     mipspro)
     BOOST_JAM_CC=cc
     ;;
-
+
     pathscale)
     BOOST_JAM_CC=pathcc
     ;;
-
+
     pgi)
     BOOST_JAM_CC=pgcc
     ;;
-
+
     sun*)
     if test -z "${BOOST_JAM_TOOLSET_ROOT}" -a -r /opt/SUNWspro/bin/cc ; then
         BOOST_JAM_TOOLSET_ROOT=/opt/SUNWspro/
@@ -203,15 +203,15 @@
     fi
     BOOST_JAM_CC=cc
     ;;
-
+
     tru64cxx)
     BOOST_JAM_CC=cc
     ;;
-
+
     acc)
     BOOST_JAM_CC="cc -Ae"
     ;;
-
+
     cc)
     if test -z "$CC" ; then CC=cc ; fi
     BOOST_JAM_CC=$CC
@@ -219,11 +219,11 @@
     BOOST_JAM_OPT_MKJAMBASE="$BOOST_JAM_OPT_MKJAMBASE $CFLAGS $LIBS"
     BOOST_JAM_OPT_YYACC="$BOOST_JAM_OPT_YYACC $CFLAGS $LIBS"
     ;;
-
+
     qcc)
     BOOST_JAM_CC=qcc
     ;;
-
+
     *)
     error_exit "Unknown toolset: $BOOST_JAM_TOOLSET"
     ;;
@@ -247,7 +247,7 @@
     mingw)
     BJAM_SOURCES="${BJAM_SOURCES} execnt.c filent.c"
     ;;
-
+
     *)
     BJAM_SOURCES="${BJAM_SOURCES} execunix.c fileunix.c"
     ;;

Modified: trunk/tools/jam/src/build_vms.com
==============================================================================
Binary files. No diff available.

Modified: trunk/tools/jam/src/builtins.c
==============================================================================
--- trunk/tools/jam/src/builtins.c (original)
+++ trunk/tools/jam/src/builtins.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -31,16 +31,16 @@
  *
  * External routines:
  *
- * load_builtin() - define builtin rules
+ * load_builtin() - define builtin rules
  *
  * Internal routines:
  *
- * builtin_depends() - DEPENDS/INCLUDES rule
- * builtin_echo() - ECHO rule
- * builtin_exit() - EXIT rule
- * builtin_flags() - NOCARE, NOTFILE, TEMPORARY rule
- * builtin_glob() - GLOB rule
- * builtin_match() - MATCH rule
+ * builtin_depends() - DEPENDS/INCLUDES rule
+ * builtin_echo() - ECHO rule
+ * builtin_exit() - EXIT rule
+ * builtin_flags() - NOCARE, NOTFILE, TEMPORARY rule
+ * builtin_glob() - GLOB rule
+ * builtin_match() - MATCH rule
  *
  * 01/10/01 (seiwald) - split from compile.c
  */
@@ -417,43 +417,45 @@
 
 LIST *
 builtin_depends(
- PARSE *parse,
- FRAME *frame )
+ PARSE *parse,
+ FRAME *frame )
 {
- LIST *targets = lol_get( frame->args, 0 );
- LIST *sources = lol_get( frame->args, 1 );
- LIST *l;
-
- for( l = targets; l; l = list_next( l ) )
- {
- TARGET *t = bindtarget( l->string );
-
- /* If doing INCLUDES, switch to the TARGET's include */
- /* TARGET, creating it if needed. The internal include */
- /* TARGET shares the name of its parent. */
-
- if( parse->num )
- {
- if( !t->includes ) {
+ LIST *targets = lol_get( frame->args, 0 );
+ LIST *sources = lol_get( frame->args, 1 );
+ LIST *l;
+
+ for ( l = targets; l; l = list_next( l ) )
+ {
+ TARGET * t = bindtarget( l->string );
+
+ /* If doing INCLUDES, switch to the TARGET's include */
+ /* TARGET, creating it if needed. The internal include */
+ /* TARGET shares the name of its parent. */
+
+ if ( parse->num )
+ {
+ if ( !t->includes )
+ {
                 t->includes = copytarget( t );
                 t->includes->original_target = t;
             }
             t = t->includes;
- }
+ }
 
- t->depends = targetlist( t->depends, sources );
- }
+ t->depends = targetlist( t->depends, sources );
+ }
 
     /* Enter reverse links */
- for( l = sources; l; l = list_next( l ) )
- {
- TARGET *s = bindtarget( l->string );
+ for ( l = sources; l; l = list_next( l ) )
+ {
+ TARGET * s = bindtarget( l->string );
         s->dependents = targetlist( s->dependents, targets );
     }
 
- return L0;
+ return L0;
 }
 
+
 /*
  * builtin_rebuilds() - REBUILDS rule
  *
@@ -464,22 +466,23 @@
 
 LIST *
 builtin_rebuilds(
- PARSE *parse,
- FRAME *frame )
+ PARSE *parse,
+ FRAME *frame )
 {
- LIST *targets = lol_get( frame->args, 0 );
- LIST *rebuilds = lol_get( frame->args, 1 );
- LIST *l;
-
- for( l = targets; l; l = list_next( l ) )
- {
- TARGET *t = bindtarget( l->string );
- t->rebuilds = targetlist( t->rebuilds, rebuilds );
- }
+ LIST *targets = lol_get( frame->args, 0 );
+ LIST *rebuilds = lol_get( frame->args, 1 );
+ LIST *l;
+
+ for( l = targets; l; l = list_next( l ) )
+ {
+ TARGET *t = bindtarget( l->string );
+ t->rebuilds = targetlist( t->rebuilds, rebuilds );
+ }
 
- return L0;
+ return L0;
 }
 
+
 /*
  * builtin_echo() - ECHO rule
  *
@@ -489,15 +492,16 @@
 
 LIST *
 builtin_echo(
- PARSE *parse,
- FRAME *frame )
+ PARSE *parse,
+ FRAME *frame )
 {
- list_print( lol_get( frame->args, 0 ) );
- printf( "\n" );
+ list_print( lol_get( frame->args, 0 ) );
+ printf( "\n" );
     fflush( stdout );
- return L0;
+ return L0;
 }
 
+
 /*
  * builtin_exit() - EXIT rule
  *
@@ -532,15 +536,15 @@
 
 LIST *
 builtin_flags(
- PARSE *parse,
- FRAME *frame )
+ PARSE *parse,
+ FRAME *frame )
 {
- LIST *l = lol_get( frame->args, 0 );
+ LIST *l = lol_get( frame->args, 0 );
 
- for( ; l; l = list_next( l ) )
- bindtarget( l->string )->flags |= parse->num;
+ for( ; l; l = list_next( l ) )
+ bindtarget( l->string )->flags |= parse->num;
 
- return L0;
+ return L0;
 }
 
 /*
@@ -832,23 +836,23 @@
 
 LIST *
 builtin_match(
- PARSE *parse,
- FRAME *frame )
+ PARSE *parse,
+ FRAME *frame )
 {
- LIST *l, *r;
- LIST *result = 0;
+ LIST *l, *r;
+ LIST *result = 0;
 
         string buf[1];
         string_new(buf);
 
- /* For each pattern */
+ /* For each pattern */
 
- for( l = lol_get( frame->args, 0 ); l; l = l->next )
- {
+ for( l = lol_get( frame->args, 0 ); l; l = l->next )
+ {
             /* Result is cached and intentionally never freed */
- regexp *re = regex_compile( l->string );
+ regexp *re = regex_compile( l->string );
 
- /* For each string to match against */
+ /* For each string to match against */
             for( r = lol_get( frame->args, 1 ); r; r = r->next )
             {
                 if( regexec( re, r->string ) )
@@ -1170,7 +1174,7 @@
  */
 void backtrace( FRAME *frame )
 {
- if ( !frame ) return;
+ if ( !frame ) return;
     while ( frame = frame->prev )
     {
         backtrace_line( frame );

Modified: trunk/tools/jam/src/class.c
==============================================================================
--- trunk/tools/jam/src/class.c (original)
+++ trunk/tools/jam/src/class.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -1,4 +1,4 @@
-/* Copyright Vladiir Prus 2003. Distributed under the Boost */
+/* Copyright Vladimir Prus 2003. Distributed under the Boost */
 /* Software License, Version 1.0. (See accompanying */
 /* file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) */
 
@@ -24,18 +24,19 @@
     }
 }
 
-static char* class_module_name(char* declared_name)
+
+static char * class_module_name( char * declared_name )
 {
     string name[1];
- char* result;
-
+ char * result;
+
     string_new(name);
     string_append(name, "class@");
     string_append(name, declared_name);
 
     result = newstr(name->value);
     string_free(name);
-
+
     return result;
 }
 
@@ -57,7 +58,7 @@
     string_new(qualified_name);
     string_append(qualified_name, d->base_name);
     string_push_back(qualified_name, '.');
- string_append(qualified_name, r->name);
+ string_append(qualified_name, r->name);
 
     ir1 = import_rule(r, d->class_module, r->name);
     ir2 = import_rule(r, d->class_module, qualified_name->value);
@@ -66,11 +67,11 @@
     ir1->exported = ir2->exported = r->exported;
 
     /* If we're importing class method, localize it. */
- if (r->module == d->base_module
+ if (r->module == d->base_module
         || r->module->class_module && r->module->class_module == d->base_module) {
- ir1->module = ir2->module = d->class_module;
+ ir1->module = ir2->module = d->class_module;
     }
-
+
     string_free(qualified_name);
 }
 
@@ -92,25 +93,28 @@
     import_module( imported_modules(base_module), class );
 }
 
-char* make_class_module(LIST* xname, LIST* bases, FRAME* frame)
+
+char * make_class_module( LIST * xname, LIST * bases, FRAME * frame )
 {
     char* name = class_module_name(xname->string);
     char** pp = &xname->string;
     module_t* class_module = 0;
- module_t* outer_module = frame->module;
+ module_t* outer_module = frame->module;
 
- if (!classes)
+ if ( !classes )
         classes = hashinit(sizeof(char*), "classes");
 
-
- if (hashcheck(classes, (HASHDATA**)&pp)) {
+ if ( hashcheck( classes, (HASHDATA**)&pp ) )
+ {
         printf("Class %s already defined\n", xname->string);
         abort();
- } else {
+ }
+ else
+ {
         hashenter(classes, (HASHDATA**)&pp);
     }
     check_defined(bases);
-
+
     class_module = bindmodule(name);
 
     exit_module( outer_module );
@@ -118,14 +122,12 @@
 
     var_set("__name__", xname, VAR_SET);
     var_set("__bases__", bases, VAR_SET);
-
+
     exit_module( class_module );
     enter_module( outer_module );
-
+
     for(; bases; bases = bases->next)
         import_base_rules(class_module, bases->string);
 
-
-
     return name;
 }

Modified: trunk/tools/jam/src/command.c
==============================================================================
--- trunk/tools/jam/src/command.c (original)
+++ trunk/tools/jam/src/command.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -31,10 +31,10 @@
 
 CMD *
 cmd_new(
- RULE *rule,
- LIST *targets,
- LIST *sources,
- LIST *shell )
+ RULE *rule,
+ LIST *targets,
+ LIST *sources,
+ LIST *shell )
 {
     CMD *cmd = (CMD *)BJAM_MALLOC( sizeof( CMD ) );
     /* lift line-length limitation entirely when JAMSHELL is just "%" */
@@ -54,14 +54,14 @@
     do
     {
         BJAM_FREE(cmd->buf); /* free any buffer from previous iteration */
-
+
         cmd->buf = (char*)BJAM_MALLOC_ATOMIC(max_line + 1);
-
- if (cmd->buf == 0)
+
+ if ( cmd->buf == 0 )
             break;
-
+
         allocated = var_string( rule->actions->command, cmd->buf, max_line, &cmd->args );
-
+
         max_line = max_line * 2;
     }
     while( allocated < 0 && max_line < INT_MAX / 2 );
@@ -69,18 +69,18 @@
     if ( !no_limit )
     {
         /* Bail if the result won't fit in MAXLINE */
- char *s = cmd->buf;
+ char * s = cmd->buf;
         while ( *s )
         {
             size_t l = strcspn( s, "\n" );
-
+
             if ( l > MAXLINE )
             {
                 /* We don't free targets/sources/shell if bailing. */
                 cmd_free( cmd );
                 return 0;
             }
-
+
             s += l;
             if ( *s )
                 ++s;
@@ -97,8 +97,8 @@
 void
 cmd_free( CMD *cmd )
 {
- lol_free( &cmd->args );
- list_free( cmd->shell );
+ lol_free( &cmd->args );
+ list_free( cmd->shell );
     BJAM_FREE( cmd->buf );
- BJAM_FREE( (char *)cmd );
+ BJAM_FREE( (char *)cmd );
 }

Modified: trunk/tools/jam/src/command.h
==============================================================================
--- trunk/tools/jam/src/command.h (original)
+++ trunk/tools/jam/src/command.h 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -12,23 +12,23 @@
  * sources; a CMD is what actually gets executed by the shell. The
  * differences are due to:
  *
- * ACTIONS must be combined if 'actions together' is given.
- * ACTIONS must be split if 'actions piecemeal' is given.
- * ACTIONS must have current sources omitted for 'actions updated'.
+ * ACTIONS must be combined if 'actions together' is given.
+ * ACTIONS must be split if 'actions piecemeal' is given.
+ * ACTIONS must have current sources omitted for 'actions updated'.
  *
- * The CMD datatype holds a single command that is to be executed
- * against a target, and they can chain together to represent the
+ * The CMD datatype holds a single command that is to be executed
+ * against a target, and they can chain together to represent the
  * full collection of commands used to update a target.
  *
  * Structures:
  *
- * CMD - an action, ready to be formatted into a buffer and executed
+ * CMD - an action, ready to be formatted into a buffer and executed
  *
  * External routines:
  *
- * cmd_new() - return a new CMD or 0 if too many args
- * cmd_free() - delete CMD and its parts
- * cmd_next() - walk the CMD chain
+ * cmd_new() - return a new CMD or 0 if too many args
+ * cmd_free() - delete CMD and its parts
+ * cmd_next() - walk the CMD chain
  */
 
 /*
@@ -39,19 +39,19 @@
 
 struct _cmd
 {
- CMD *next;
- CMD *tail; /* valid on in head */
- RULE *rule; /* rule->actions contains shell script */
- LIST *shell; /* $(SHELL) value */
- LOL args; /* LISTs for $(<), $(>) */
- char* buf; /* actual commands */
+ CMD *next;
+ CMD *tail; /* valid on in head */
+ RULE *rule; /* rule->actions contains shell script */
+ LIST *shell; /* $(SHELL) value */
+ LOL args; /* LISTs for $(<), $(>) */
+ char* buf; /* actual commands */
 } ;
 
 CMD *cmd_new(
- RULE *rule, /* rule (referenced) */
- LIST *targets, /* $(<) (freed) */
- LIST *sources, /* $(>) (freed) */
- LIST *shell ); /* $(SHELL) (freed) */
+ RULE *rule, /* rule (referenced) */
+ LIST *targets, /* $(<) (freed) */
+ LIST *sources, /* $(>) (freed) */
+ LIST *shell ); /* $(SHELL) (freed) */
 
 void cmd_free( CMD *cmd );
 

Modified: trunk/tools/jam/src/compile.c
==============================================================================
--- trunk/tools/jam/src/compile.c (original)
+++ trunk/tools/jam/src/compile.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -38,20 +38,20 @@
  * External routines:
  *
  * compile_append() - append list results of two statements
- * compile_eval() - evaluate if to determine which leg to compile
+ * compile_eval() - evaluate if to determine which leg to compile
  * compile_foreach() - compile the "for x in y" statement
  * compile_if() - compile 'if' rule
  * compile_while() - compile 'while' rule
  * compile_include() - support for 'include' - call include() on file
- * compile_list() - expand and return a list
+ * compile_list() - expand and return a list
  * compile_local() - declare (and set) local variables
  * compile_null() - do nothing -- a stub for parsing
  * compile_on() - run rule under influence of on-target variables
  * compile_rule() - compile a single user defined rule
  * compile_rules() - compile a chain of rules
  * compile_set() - compile the "set variable" statement
- * compile_setcomp() - support for `rule` - save parse tree
- * compile_setexec() - support for `actions` - save execution string
+ * compile_setcomp() - support for `rule` - save parse tree
+ * compile_setexec() - support for `actions` - save execution string
  * compile_settings() - compile the "on =" (set variable on exec) statement
  * compile_switch() - compile 'switch' rule
  *
@@ -65,7 +65,7 @@
  * builtin_exit() - EXIT rule
  * builtin_flags() - NOCARE, NOTFILE, TEMPORARY rule
  *
- * 02/03/94 (seiwald) - Changed trace output to read "setting" instead of
+ * 02/03/94 (seiwald) - Changed trace output to read "setting" instead of
  * the awkward sounding "settings".
  * 04/12/94 (seiwald) - Combined build_depends() with build_includes().
  * 04/12/94 (seiwald) - actionlist() now just appends a single action.
@@ -93,8 +93,7 @@
 void backtrace_line( FRAME *frame );
 void print_source_line( PARSE* p );
 
-
-struct frame *frame_before_python_call;
+struct frame * frame_before_python_call;
 
 void frame_init( FRAME* frame )
 {
@@ -106,11 +105,13 @@
     frame->procedure = 0;
 }
 
+
 void frame_free( FRAME* frame )
 {
     lol_free( frame->args );
 }
 
+
 /*
  * compile_append() - append list results of two statements
  *
@@ -118,131 +119,127 @@
  * parse->right single rule
  */
 
-LIST *
-compile_append(
- PARSE *parse,
- FRAME *frame )
+LIST * compile_append( PARSE * parse, FRAME * frame )
 {
     /* Append right to left. */
-
- return list_append(
+ return list_append(
         parse_evaluate( parse->left, frame ),
         parse_evaluate( parse->right, frame ) );
 }
 
+
 /*
  * compile_eval() - evaluate if to determine which leg to compile
  *
  * Returns:
- * list if expression true - compile 'then' clause
- * L0 if expression false - compile 'else' clause
+ * list if expression true - compile 'then' clause
+ * L0 if expression false - compile 'else' clause
  */
 
-static int
-lcmp( LIST *t, LIST *s )
+static int lcmp( LIST * t, LIST * s )
 {
- int status = 0;
+ int status = 0;
 
- while( !status && ( t || s ) )
- {
- char *st = t ? t->string : "";
- char *ss = s ? s->string : "";
+ while ( !status && ( t || s ) )
+ {
+ char *st = t ? t->string : "";
+ char *ss = s ? s->string : "";
 
- status = strcmp( st, ss );
+ status = strcmp( st, ss );
 
- t = t ? list_next( t ) : t;
- s = s ? list_next( s ) : s;
- }
+ t = t ? list_next( t ) : t;
+ s = s ? list_next( s ) : s;
+ }
 
- return status;
+ return status;
 }
 
-LIST *
-compile_eval(
- PARSE *parse,
- FRAME *frame )
-{
- LIST *ll, *lr, *s, *t;
- int status = 0;
-
- /* Short circuit lr eval for &&, ||, and 'in' */
-
- ll = parse_evaluate( parse->left, frame );
- lr = 0;
-
- switch( parse->num )
- {
- case EXPR_AND:
- case EXPR_IN: if( ll ) goto eval; break;
- case EXPR_OR: if( !ll ) goto eval; break;
- default: eval: lr = parse_evaluate( parse->right, frame );
- }
-
- /* Now eval */
-
- switch( parse->num )
- {
- case EXPR_NOT:
- if( !ll ) status = 1;
- break;
-
- case EXPR_AND:
- if( ll && lr ) status = 1;
- break;
-
- case EXPR_OR:
- if( ll || lr ) status = 1;
- break;
-
- case EXPR_IN:
- /* "a in b": make sure each of */
- /* ll is equal to something in lr. */
-
- for( t = ll; t; t = list_next( t ) )
- {
- for( s = lr; s; s = list_next( s ) )
- if( !strcmp( t->string, s->string ) )
- break;
- if( !s ) break;
- }
-
- /* No more ll? Success */
-
- if( !t ) status = 1;
-
- break;
-
- case EXPR_EXISTS: if( lcmp( ll, L0 ) != 0 ) status = 1; break;
- case EXPR_EQUALS: if( lcmp( ll, lr ) == 0 ) status = 1; break;
- case EXPR_NOTEQ: if( lcmp( ll, lr ) != 0 ) status = 1; break;
- case EXPR_LESS: if( lcmp( ll, lr ) < 0 ) status = 1; break;
- case EXPR_LESSEQ: if( lcmp( ll, lr ) <= 0 ) status = 1; break;
- case EXPR_MORE: if( lcmp( ll, lr ) > 0 ) status = 1; break;
- case EXPR_MOREEQ: if( lcmp( ll, lr ) >= 0 ) status = 1; break;
-
- }
-
- if( DEBUG_IF )
- {
- debug_compile( 0, "if", frame );
- list_print( ll );
- printf( "(%d) ", status );
- list_print( lr );
- printf( "\n" );
- }
-
- /* Find something to return. */
- /* In odd circumstances (like "" = "") */
- /* we'll have to return a new string. */
-
- if( !status ) t = 0;
- else if( ll ) t = ll, ll = 0;
- else if( lr ) t = lr, lr = 0;
- else t = list_new( L0, newstr( "1" ) );
-
- if( ll ) list_free( ll );
- if( lr ) list_free( lr );
- return t;
+LIST * compile_eval( PARSE * parse, FRAME * frame )
+{
+ LIST * ll;
+ LIST * lr;
+ LIST * s;
+ LIST * t;
+ int status = 0;
+
+ /* Short circuit lr eval for &&, ||, and 'in'. */
+
+ ll = parse_evaluate( parse->left, frame );
+ lr = 0;
+
+ switch( parse->num )
+ {
+ case EXPR_AND:
+ case EXPR_IN: if( ll ) goto eval; break;
+ case EXPR_OR: if( !ll ) goto eval; break;
+ default: eval: lr = parse_evaluate( parse->right, frame );
+ }
+
+ /* Now eval */
+
+ switch( parse->num )
+ {
+ case EXPR_NOT:
+ if( !ll ) status = 1;
+ break;
+
+ case EXPR_AND:
+ if( ll && lr ) status = 1;
+ break;
+
+ case EXPR_OR:
+ if( ll || lr ) status = 1;
+ break;
+
+ case EXPR_IN:
+ /* "a in b": make sure each of */
+ /* ll is equal to something in lr. */
+
+ for( t = ll; t; t = list_next( t ) )
+ {
+ for( s = lr; s; s = list_next( s ) )
+ if( !strcmp( t->string, s->string ) )
+ break;
+ if( !s ) break;
+ }
+
+ /* No more ll? Success */
+
+ if( !t ) status = 1;
+
+ break;
+
+ case EXPR_EXISTS: if( lcmp( ll, L0 ) != 0 ) status = 1; break;
+ case EXPR_EQUALS: if( lcmp( ll, lr ) == 0 ) status = 1; break;
+ case EXPR_NOTEQ: if( lcmp( ll, lr ) != 0 ) status = 1; break;
+ case EXPR_LESS: if( lcmp( ll, lr ) < 0 ) status = 1; break;
+ case EXPR_LESSEQ: if( lcmp( ll, lr ) <= 0 ) status = 1; break;
+ case EXPR_MORE: if( lcmp( ll, lr ) > 0 ) status = 1; break;
+ case EXPR_MOREEQ: if( lcmp( ll, lr ) >= 0 ) status = 1; break;
+
+ }
+
+ if( DEBUG_IF )
+ {
+ debug_compile( 0, "if", frame );
+ list_print( ll );
+ printf( "(%d) ", status );
+ list_print( lr );
+ printf( "\n" );
+ }
+
+ /* Find something to return. */
+ /* In odd circumstances (like "" = "") */
+ /* we'll have to return a new string. */
+
+ if( !status ) t = 0;
+ else if( ll ) t = ll, ll = 0;
+ else if( lr ) t = lr, lr = 0;
+ else t = list_new( L0, newstr( "1" ) );
+
+ if( ll ) list_free( ll );
+ if( lr ) list_free( lr );
+ return t;
 }
 
 
@@ -257,37 +254,32 @@
  * parse->right rule to compile
  */
 
-LIST *
-compile_foreach(
- PARSE *parse,
- FRAME *frame )
+LIST * compile_foreach( PARSE * parse, FRAME * frame )
 {
- LIST *nv = parse_evaluate( parse->left, frame );
- LIST *l;
- SETTINGS *s = 0;
-
- if ( parse->num )
- {
- s = addsettings( s, VAR_SET, parse->string, L0 );
- pushsettings( s );
- }
+ LIST * nv = parse_evaluate( parse->left, frame );
+ LIST * l;
+ SETTINGS * s = 0;
+
+ if ( parse->num )
+ {
+ s = addsettings( s, VAR_SET, parse->string, L0 );
+ pushsettings( s );
+ }
 
     /* Call var_set to reset $(parse->string) for each val. */
 
- for( l = nv; l; l = list_next( l ) )
+ for ( l = nv; l; l = list_next( l ) )
     {
- LIST *val = list_new( L0, copystr( l->string ) );
-
+ LIST * val = list_new( L0, copystr( l->string ) );
         var_set( parse->string, val, VAR_SET );
-
         list_free( parse_evaluate( parse->right, frame ) );
     }
 
- if ( parse->num )
- {
- popsettings( s );
- freesettings( s );
- }
+ if ( parse->num )
+ {
+ popsettings( s );
+ freesettings( s );
+ }
 
     list_free( nv );
 
@@ -358,21 +350,21 @@
 
     if( nt )
     {
- TARGET *t = bindtarget( nt->string );
+ TARGET * t = bindtarget( nt->string );
+
+ /* DWA 2001/10/22 - Perforce Jam cleared the arguments here, which
+ * prevents an included file from being treated as part of the body of a
+ * rule. I did not see any reason to do that, so I lifted the
+ * restriction.
+ */
 
- /* DWA 2001/10/22 - Perforce Jam clears the arguments here, which
- * prevents an included file from being treated as part of the body
- * of a rule. I didn't see any reason to do that, so I lifted the
- * restriction.
- */
-
         /* Bind the include file under the influence of */
         /* "on-target" variables. Though they are targets, */
         /* include files are not built with make(). */
 
         pushsettings( t->settings );
         /* We don't expect that file to be included is generated by some
- action. Therefore, pass 0 as third argument.
+ action. Therefore, pass 0 as third argument.
            If the name resolves to directory, let it error out. */
         t->boundname = search( t->name, &t->time, 0, 0 );
         popsettings( t->settings );
@@ -397,9 +389,9 @@
         exit_module( outer_module );
         enter_module( frame->module );
     }
-
+
     result = parse_evaluate( p, frame );
-
+
     if ( outer_module != frame->module )
     {
         exit_module( frame->module );
@@ -410,46 +402,40 @@
     return result;
 }
 
-LIST *
-compile_module(
- PARSE *p,
- FRAME *frame )
+
+LIST * compile_module( PARSE * p, FRAME * frame )
 {
- /* Here we are entering a module declaration block.
- */
- LIST* module_name = parse_evaluate( p->left, frame );
- LIST* result = evaluate_in_module( module_name ? module_name->string : 0,
+ /* Here we are entering a module declaration block. */
+ LIST * module_name = parse_evaluate( p->left, frame );
+ LIST * result = evaluate_in_module( module_name ? module_name->string : 0,
                                        p->right, frame );
-
     list_free( module_name );
     return result;
 }
 
-LIST *
-compile_class(
- PARSE *p,
- FRAME *frame )
+
+LIST * compile_class( PARSE * p, FRAME * frame )
 {
     /** Todo: check for empty class name.
         Check for class redeclaration. */
 
- char* class_module = 0;
+ char * class_module = 0;
 
- LIST* name = parse_evaluate( p->left->right, frame );
- LIST* bases = 0;
+ LIST * name = parse_evaluate( p->left->right, frame );
+ LIST * bases = 0;
 
- if (p->left->left)
+ if ( p->left->left )
         bases = parse_evaluate( p->left->left->right, frame );
 
- class_module = make_class_module(name, bases, frame);
+ class_module = make_class_module( name, bases, frame );
     evaluate_in_module( class_module, p->right, frame );
 
- return L0;
+ return L0;
 }
 
 
 /*
- * compile_list() - expand and return a list
+ * compile_list() - expand and return a list
  *
  * parse->string - character string to expand
  */
@@ -527,40 +513,40 @@
 /*
  * compile_on() - run rule under influence of on-target variables
  *
- * parse->left list of files to include (can only do 1)
- * parse->right rule to run
+ * parse->left list of files to include (can only do 1)
+ * parse->right rule to run
  *
  * EXPERIMENTAL!
  */
 
 LIST *
 compile_on(
- PARSE *parse,
- FRAME *frame )
+ PARSE *parse,
+ FRAME *frame )
 {
- LIST *nt = parse_evaluate( parse->left, frame );
- LIST *result = 0;
+ LIST *nt = parse_evaluate( parse->left, frame );
+ LIST *result = 0;
 
- if( DEBUG_COMPILE )
- {
- debug_compile( 0, "on", frame );
- list_print( nt );
- printf( "\n" );
- }
+ if( DEBUG_COMPILE )
+ {
+ debug_compile( 0, "on", frame );
+ list_print( nt );
+ printf( "\n" );
+ }
 
- if( nt )
- {
- TARGET *t = bindtarget( nt->string );
- pushsettings( t->settings );
+ if( nt )
+ {
+ TARGET *t = bindtarget( nt->string );
+ pushsettings( t->settings );
 
- result = parse_evaluate( parse->right, frame );
+ result = parse_evaluate( parse->right, frame );
 
- popsettings( t->settings );
- }
+ popsettings( t->settings );
+ }
 
- list_free( nt );
+ list_free( nt );
 
- return result;
+ return result;
 }
 
 
@@ -573,33 +559,24 @@
  * Wrapped around evaluate_rule() so that headers() can share it.
  */
 
-LIST *
-compile_rule(
- PARSE *parse,
- FRAME *frame )
+LIST * compile_rule( PARSE * parse, FRAME * frame )
 {
- FRAME inner[1];
- LIST *result;
- PARSE *p;
-
-
- /* Build up the list of arg lists */
+ FRAME inner[1];
+ LIST * result;
+ PARSE * p;
 
+ /* Build up the list of arg lists. */
     frame_init( inner );
     inner->prev = frame;
     inner->prev_user = frame->module->user_module ? frame : frame->prev_user;
     inner->module = frame->module; /* This gets fixed up in evaluate_rule(), below */
     inner->procedure = parse;
-
     for( p = parse->left; p; p = p->left )
         lol_add( inner->args, parse_evaluate( p->right, frame ) );
 
- /* And invoke rule */
-
+ /* And invoke the rule. */
     result = evaluate_rule( parse->string, inner );
-
     frame_free( inner );
-
     return result;
 }
 
@@ -684,9 +661,9 @@
         if ( !typecheck->rules || !hashcheck( typecheck->rules, (HASHDATA**)&checker ) )
             return;
     }
-
+
     exit_module( caller->module );
-
+
     while ( values != 0 )
     {
         LIST *error;
@@ -700,14 +677,14 @@
         /* Prepare the argument list */
         lol_add( frame->args, list_new( L0, values->string ) );
         error = evaluate_rule( type_name, frame );
-
+
         exit_module( typecheck );
-
+
         if ( error )
             argument_error( error->string, called, caller, arg_name );
 
         frame_free( frame );
- values = values->next;
+ values = values->next;
     }
 
     enter_module( caller->module );
@@ -720,21 +697,21 @@
 collect_arguments( RULE* rule, FRAME* frame )
 {
     SETTINGS *locals = 0;
-
- LOL* all_actual = frame->args;
- LOL *all_formal = rule->arguments ? rule->arguments->data : 0;
+
+ LOL * all_actual = frame->args;
+ LOL * all_formal = rule->arguments ? rule->arguments->data : 0;
     if ( all_formal ) /* Nothing to set; nothing to check */
     {
         int max = all_formal->count > all_actual->count
             ? all_formal->count
             : all_actual->count;
-
+
         int n;
         for ( n = 0; n < max ; ++n )
         {
             LIST *actual = lol_get( all_actual, n );
             char *type_name = 0;
-
+
             LIST *formal;
             for ( formal = lol_get( all_formal, n ); formal; formal = formal->next )
             {
@@ -744,7 +721,7 @@
                 {
                     if ( type_name )
                         argument_error( "missing argument name before type name:", rule, frame, formal );
-
+
                     if ( !formal->next )
                         argument_error( "missing argument name after type name:", rule, frame, formal );
 
@@ -755,13 +732,13 @@
                     LIST* value = 0;
                     char modifier;
                     LIST* arg_name = formal; /* hold the argument name for type checking */
-
+
                     /* Stop now if a variable number of arguments are specified */
                     if ( name[0] == '*' && name[1] == 0 )
                         return locals;
 
                     modifier = arg_modifier( formal );
-
+
                     if ( !actual && modifier != '?' && modifier != '*' )
                         argument_error( "missing argument", rule, frame, formal );
 
@@ -772,11 +749,11 @@
                         value = list_copy( 0, actual );
                         actual = 0;
                         /* skip an extra element for the modifier */
- formal = formal->next;
+ formal = formal->next;
                         break;
                     case '?':
                         /* skip an extra element for the modifier */
- formal = formal->next;
+ formal = formal->next;
                         /* fall through */
                     default:
                         if ( actual ) /* in case actual is missing */
@@ -785,13 +762,13 @@
                             actual = actual->next;
                         }
                     }
-
+
                     locals = addsettings( locals, VAR_SET, name, value );
                     type_check( type_name, value, frame, rule, arg_name );
                     type_name = 0;
                 }
             }
-
+
             if ( actual )
             {
                 argument_error( "extra argument", rule, frame, actual );
@@ -824,7 +801,7 @@
         {
             PyObject* v = PyString_FromString(l->string);
             /* Steals reference to 'v' */
- PyList_Append(arg, v);
+ PyList_Append(arg, v);
         }
         /* Steals reference to 'arg' */
         PyTuple_SetItem(arguments, i, arg);
@@ -833,33 +810,34 @@
     frame_before_python_call = frame;
     py_result = PyObject_CallObject(r->python_function, arguments);
     Py_DECREF(arguments);
- if (py_result != NULL) {
-
- if (PyList_Check(py_result)) {
+ if ( py_result != NULL )
+ {
+ if ( PyList_Check(py_result) )
+ {
             int size = PyList_Size(py_result);
             int i;
- for(i = 0; i < size; ++i)
+ for( i = 0; i < size; ++i )
             {
- PyObject* item = PyList_GetItem(py_result, i);
- if (PyString_Check(item))
+ PyObject * item = PyList_GetItem( py_result, i );
+ if ( PyString_Check( item ) )
                 {
- result = list_new(result,
- newstr(PyString_AsString(item)));
+ result = list_new( result,
+ newstr( PyString_AsString( item ) ) );
                 }
                 else
                 {
- fprintf(stderr, "Non-string object returned by Python call\n");
+ fprintf( stderr, "Non-string object returned by Python call.\n" );
                 }
             }
         }
- else if (PyInstance_Check(py_result))
+ else if ( PyInstance_Check( py_result ) )
         {
             static char instance_name[1000];
             static char imported_method_name[1000];
- module_t* m;
- PyObject* method;
- PyObject* method_name = PyString_FromString("foo");
- RULE* r;
+ module_t * m;
+ PyObject * method;
+ PyObject * method_name = PyString_FromString("foo");
+ RULE * r;
 
             fprintf(stderr, "Got instance!\n");
 
@@ -868,21 +846,21 @@
             snprintf(imported_method_name, 1000,
                      "pyinstance%d.foo", python_instance_number);
             ++python_instance_number;
-
+
             m = bindmodule(instance_name);
 
             /* This is expected to get bound method. */
             method = PyObject_GetAttr(py_result, method_name);
-
+
             r = bindrule( imported_method_name, root_module() );
 
             r->python_function = method;
 
- result = list_new(0, newstr(instance_name));
+ result = list_new(0, newstr(instance_name));
 
- Py_DECREF(method_name);
+ Py_DECREF( method_name );
         }
- else if (py_result == Py_None)
+ else if ( py_result == Py_None )
         {
             result = L0;
         }
@@ -891,48 +869,49 @@
             fprintf(stderr, "Non-list object returned by Python call\n");
         }
 
- Py_DECREF(py_result);
+ Py_DECREF( py_result );
     }
- else {
+ else
+ {
         PyErr_Print();
         fprintf(stderr,"Call failed\n");
     }
-
+
     return result;
 }
 
-module_t* python_module()
+
+module_t * python_module()
 {
- static module_t* python = 0;
+ static module_t * python = 0;
     if ( !python )
         python = bindmodule("__python__");
     return python;
 }
-
 #endif
 
+
 /*
- * evaluate_rule() - execute a rule invocation
+ * evaluate_rule() - execute a rule invocation.
  */
 
 LIST *
 evaluate_rule(
- char *rulename,
- FRAME *frame )
+ char * rulename,
+ FRAME * frame )
 {
- LIST *result = L0;
- RULE *rule;
- profile_frame prof[1];
- module_t *prev_module = frame->module;
-
- LIST *l;
+ LIST * result = L0;
+ RULE * rule;
+ profile_frame prof[1];
+ module_t * prev_module = frame->module;
+
+ LIST * l;
     {
- LOL arg_context_, *arg_context = &arg_context_;
+ LOL arg_context_, * arg_context = &arg_context_;
         if ( !frame->prev )
             lol_init(arg_context);
         else
             arg_context = frame->prev->args;
-
         l = var_expand( L0, rulename, rulename+strlen(rulename), arg_context, 0 );
     }
 
@@ -951,7 +930,7 @@
     if (rule->python_function)
     {
         /* The below messing with modules is due to the
- way modules are implemented in jam.
+ way modules are implemented in jam.
            Suppose we're in module M1 now. The global
            variable map actually holds 'M1' variables,
            and M1->variables hold global variables.
@@ -961,7 +940,7 @@
 
               module M1 { }
 
- then jam will try to swap current global
+ then jam will try to swap current global
            variables with M1->variables. The result will
            be that global variables map will hold
            global variables, and any variables settings
@@ -970,12 +949,12 @@
            By restoring basic state, where global
            variable map hold global variable, we make
            sure any fugure 'module M1' will work OK. */
-
+
         LIST *result;
         module_t *m = python_module();
 
         frame->module = m;
-
+
         exit_module( prev_module );
         enter_module( m );
 
@@ -988,15 +967,15 @@
     }
 #endif
 
- /* drop the rule name */
+ /* Drop the rule name. */
     l = list_pop_front( l );
 
- /* tack the rest of the expansion onto the front of the first argument */
+ /* Tack the rest of the expansion onto the front of the first argument. */
     frame->args->list[0] = list_append( l, lol_get( frame->args, 0 ) );
 
     if ( DEBUG_COMPILE )
     {
- /* Try hard to indicate in which module the rule is going to execute */
+ /* Try hard to indicate in which module the rule is going to execute. */
         if ( rule->module != frame->module
              && rule->procedure != 0 && strcmp(rulename, rule->procedure->rulename) )
         {
@@ -1013,28 +992,27 @@
         lol_print( frame->args );
         printf( "\n" );
     }
-
+
     if ( rule->procedure && rule->module != prev_module )
     {
- /* propagate current module to nested rule invocations */
+ /* Propagate current module to nested rule invocations. */
         frame->module = rule->module;
-
- /* swap variables */
+
+ /* Swap variables. */
         exit_module( prev_module );
         enter_module( rule->module );
     }
-
- /* record current rule name in frame */
+
+ /* Record current rule name in frame. */
     if ( rule->procedure )
     {
         frame->rulename = rulename;
- /* and enter record profile info */
+ /* And enter record profile info. */
         if ( DEBUG_PROFILE )
             profile_enter( rule->procedure->rulename, prof );
     }
 
- /* Check traditional targets $(<) and sources $(>) */
-
+ /* Check traditional targets $(<) and sources $(>). */
     if( !rule->actions && !rule->procedure )
     {
         backtrace_line( frame->prev );
@@ -1043,8 +1021,8 @@
         exit(1);
     }
 
- /* If this rule will be executed for updating the targets */
- /* then construct the action for make(). */
+ /* If this rule will be executed for updating the targets then construct */
+ /* the action for make(). */
 
     if( rule->actions )
     {
@@ -1059,7 +1037,7 @@
         action->rule = rule;
         action->targets = targetlist( (TARGETS *)0, lol_get( frame->args, 0 ) );
         action->sources = targetlist( (TARGETS *)0, lol_get( frame->args, 1 ) );
-
+
         /* If we have a group of targets all being built using the same action
          * then we must not allow any of them to be used as sources unless they
          * had all already been built in the first place or their joined action
@@ -1102,26 +1080,25 @@
             }
         }
 
- /* Append this action to the actions of each target */
-
+ /* Append this action to the actions of each target. */
         for( t = action->targets; t; t = t->next )
             t->target->actions = actionlist( t->target->actions, action );
     }
 
     /* Now recursively compile any parse tree associated with this rule */
- /* refer/free to ensure rule not freed during use */
+ /* refer/free to ensure rule not freed during use. */
 
     if( rule->procedure )
     {
         SETTINGS *local_args = collect_arguments( rule, frame );
         PARSE *parse = rule->procedure;
         parse_refer( parse );
-
+
         pushsettings( local_args );
         result = parse_evaluate( parse, frame );
         popsettings( local_args );
         freesettings( local_args );
-
+
         parse_free( parse );
     }
 
@@ -1156,12 +1133,12 @@
     FRAME inner[1];
     frame_init( inner );
     inner->prev = caller_frame;
- inner->prev_user = caller_frame->module->user_module ?
+ inner->prev_user = caller_frame->module->user_module ?
         caller_frame : caller_frame->prev_user;
- inner->module = caller_frame->module;
+ inner->module = caller_frame->module;
     inner->procedure = 0;
 
- va_start(va, caller_frame);
+ va_start(va, caller_frame);
     for(;;)
     {
         LIST* l = va_arg(va, LIST*);
@@ -1170,8 +1147,8 @@
         lol_add(inner->args, l);
     }
     va_end(va);
-
- result = evaluate_rule(rulename, inner);
+
+ result = evaluate_rule(rulename, inner);
 
     frame_free(inner);
 
@@ -1181,8 +1158,8 @@
 /*
  * compile_rules() - compile a chain of rules
  *
- * parse->left single rule
- * parse->right more compile_rules() by right-recursion
+ * parse->left single rule
+ * parse->right more compile_rules() by right-recursion
  */
 
 LIST *
@@ -1191,7 +1168,7 @@
     FRAME *frame )
 {
     /* Ignore result from first statement; return the 2nd. */
- /* Optimize recursion on the right by looping. */
+ /* Optimize recursion on the right by looping. */
 
     do list_free( parse_evaluate( parse->left, frame ) );
     while( (parse = parse->right)->func == compile_rules );
@@ -1223,7 +1200,7 @@
  * compile_set() - compile the "set variable" statement
  *
  * parse->left variable names
- * parse->right variable values
+ * parse->right variable values
  * parse->num ASSIGN_SET/APPEND/DEFAULT
  */
 
@@ -1259,7 +1236,7 @@
 }
 
 /*
- * compile_setcomp() - support for `rule` - save parse tree
+ * compile_setcomp() - support for `rule` - save parse tree
  *
  * parse->string rule name
  * parse->left rules for rule
@@ -1272,7 +1249,7 @@
     FRAME *frame)
 {
     argument_list* arg_list = 0;
-
+
     /* Create new LOL describing argument requirements if supplied */
     if ( parse->right )
     {
@@ -1281,13 +1258,13 @@
         for( p = parse->right; p; p = p->left )
             lol_add( arg_list->data, parse_evaluate( p->right, frame ) );
     }
-
+
     new_rule_body( frame->module, parse->string, arg_list, parse->left, !parse->num );
     return L0;
 }
 
 /*
- * compile_setexec() - support for `actions` - save execution string
+ * compile_setexec() - support for `actions` - save execution string
  *
  * parse->string rule name
  * parse->string1 OS command string
@@ -1314,9 +1291,9 @@
  * compile_settings() - compile the "on =" (set variable on exec) statement
  *
  * parse->left variable names
- * parse->right target name
- * parse->third variable value
- * parse->num ASSIGN_SET/APPEND
+ * parse->right target name
+ * parse->third variable value
+ * parse->num ASSIGN_SET/APPEND
  */
 
 LIST *
@@ -1352,7 +1329,7 @@
         LIST *l;
 
         for( l = nt; l; l = list_next( l ) )
- t->settings = addsettings( t->settings, setflag,
+ t->settings = addsettings( t->settings, setflag,
                 l->string, list_copy( (LIST*)0, ns ) );
     }
 
@@ -1412,26 +1389,25 @@
  * debug_compile() - printf with indent to show rule expansion.
  */
 
-static void
-debug_compile( int which, char *s, FRAME* frame )
+static void debug_compile( int which, char * s, FRAME * frame )
 {
     static int level = 0;
     static char indent[36] = ">>>>|>>>>|>>>>|>>>>|>>>>|>>>>|>>>>|";
 
     if ( which >= 0 )
     {
- int i;
-
- print_source_line( frame->procedure );
-
- i = (level+1)*2;
- while ( i > 35 )
- {
- printf( indent );
- i -= 35;
- }
+ int i;
+
+ print_source_line( frame->procedure );
+
+ i = (level+1)*2;
+ while ( i > 35 )
+ {
+ printf( indent );
+ i -= 35;
+ }
 
- printf( "%*.*s ", i, i, indent );
+ printf( "%*.*s ", i, i, indent );
     }
 
     if( s )

Modified: trunk/tools/jam/src/compile.h
==============================================================================
--- trunk/tools/jam/src/compile.h (original)
+++ trunk/tools/jam/src/compile.h 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -50,33 +50,33 @@
 
 /* Flags for compile_set(), etc */
 
-# define ASSIGN_SET 0x00 /* = assign variable */
-# define ASSIGN_APPEND 0x01 /* += append variable */
-# define ASSIGN_DEFAULT 0x02 /* set only if unset */
+# define ASSIGN_SET 0x00 /* = assign variable */
+# define ASSIGN_APPEND 0x01 /* += append variable */
+# define ASSIGN_DEFAULT 0x02 /* set only if unset */
 
 /* Flags for compile_setexec() */
 
-# define EXEC_UPDATED 0x01 /* executes updated */
-# define EXEC_TOGETHER 0x02 /* executes together */
-# define EXEC_IGNORE 0x04 /* executes ignore */
-# define EXEC_QUIETLY 0x08 /* executes quietly */
-# define EXEC_PIECEMEAL 0x10 /* executes piecemeal */
-# define EXEC_EXISTING 0x20 /* executes existing */
+# define EXEC_UPDATED 0x01 /* executes updated */
+# define EXEC_TOGETHER 0x02 /* executes together */
+# define EXEC_IGNORE 0x04 /* executes ignore */
+# define EXEC_QUIETLY 0x08 /* executes quietly */
+# define EXEC_PIECEMEAL 0x10 /* executes piecemeal */
+# define EXEC_EXISTING 0x20 /* executes existing */
 
 /* Conditions for compile_if() */
 
-# define EXPR_NOT 0 /* ! cond */
-# define EXPR_AND 1 /* cond && cond */
-# define EXPR_OR 2 /* cond || cond */
-
-# define EXPR_EXISTS 3 /* arg */
-# define EXPR_EQUALS 4 /* arg = arg */
-# define EXPR_NOTEQ 5 /* arg != arg */
-# define EXPR_LESS 6 /* arg < arg */
-# define EXPR_LESSEQ 7 /* arg <= arg */
-# define EXPR_MORE 8 /* arg > arg */
-# define EXPR_MOREEQ 9 /* arg >= arg */
-# define EXPR_IN 10 /* arg in arg */
+# define EXPR_NOT 0 /* ! cond */
+# define EXPR_AND 1 /* cond && cond */
+# define EXPR_OR 2 /* cond || cond */
+
+# define EXPR_EXISTS 3 /* arg */
+# define EXPR_EQUALS 4 /* arg = arg */
+# define EXPR_NOTEQ 5 /* arg != arg */
+# define EXPR_LESS 6 /* arg < arg */
+# define EXPR_LESSEQ 7 /* arg <= arg */
+# define EXPR_MORE 8 /* arg > arg */
+# define EXPR_MOREEQ 9 /* arg >= arg */
+# define EXPR_IN 10 /* arg in arg */
 
 #endif
 

Modified: trunk/tools/jam/src/debug.c
==============================================================================
--- trunk/tools/jam/src/debug.c (original)
+++ trunk/tools/jam/src/debug.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -59,18 +59,16 @@
     }
 }
 
+
 void profile_memory( long mem )
 {
     if ( DEBUG_PROFILE )
- {
         if ( profile_stack && profile_stack->info )
- {
             profile_stack->info->memory += mem;
- }
- }
 }
-
-void profile_exit(profile_frame* frame)
+
+
+void profile_exit( profile_frame * frame )
 {
     if ( DEBUG_PROFILE )
     {
@@ -78,12 +76,12 @@
         clock_t t = clock() - frame->entry_time - frame->overhead;
         /* If this rule is already present on the stack, don't add the time for
            this instance. */
- if (frame->info->stack_count == 1)
+ if ( frame->info->stack_count == 1 )
             frame->info->cumulative += t;
         /* Net time does not depend on presense of the same rule in call stack. */
         frame->info->net += t - frame->subrules;
 
- if (frame->caller)
+ if ( frame->caller )
         {
             /* caller's cumulative time must account for this overhead */
             frame->caller->overhead += frame->overhead;
@@ -95,9 +93,10 @@
     }
 }
 
-static void dump_profile_entry(void* p_, void* ignored)
+
+static void dump_profile_entry( void * p_, void * ignored )
 {
- profile_info* p = (profile_info*)p_;
+ profile_info * p = (profile_info *)p_;
     unsigned long mem_each = (p->memory/(p->num_entries ? p->num_entries : 1));
     double cumulative = p->cumulative;
     double net = p->net;
@@ -118,16 +117,17 @@
         p->name);
 }
 
+
 void profile_dump()
 {
     if ( profile_hash )
     {
- printf("%10s %12s %12s %12s %10s %10s %s\n",
+ printf( "%10s %12s %12s %12s %10s %10s %s\n",
             "--count--", "--gross--", "--net--", "--each--",
             "--mem--", "--each--",
- "--name--");
+ "--name--" );
         hashenumerate( profile_hash, dump_profile_entry, 0 );
- dump_profile_entry(&profile_other,0);
- dump_profile_entry(&profile_total,(void*)1);
+ dump_profile_entry( &profile_other, 0 );
+ dump_profile_entry( &profile_total, (void *)1 );
     }
 }

Modified: trunk/tools/jam/src/execmac.c
==============================================================================
--- trunk/tools/jam/src/execmac.c (original)
+++ trunk/tools/jam/src/execmac.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -17,11 +17,11 @@
  * If $(JAMSHELL) is defined, uses that to formulate execvp().
  * The default is:
  *
- * /bin/sh -c %
+ * /bin/sh -c %
  *
  * Each word must be an individual element in a jam variable value.
  *
- * In $(JAMSHELL), % expands to the command string and ! expands to
+ * In $(JAMSHELL), % expands to the command string and ! expands to
  * the slot number (starting at 1) for multiprocess (-j) invocations.
  * If $(JAMSHELL) doesn't include a %, it is tacked on as the last
  * argument.
@@ -29,11 +29,11 @@
  * Don't just set JAMSHELL to /bin/sh - it won't work!
  *
  * External routines:
- * execcmd() - launch an async command execution
- * execwait() - wait and drive at most one execution completion
+ * execcmd() - launch an async command execution
+ * execwait() - wait and drive at most one execution completion
  *
  * Internal routines:
- * onintr() - bump intr to note command interruption
+ * onintr() - bump intr to note command interruption
  *
  * 04/08/94 (seiwald) - Coherent/386 support added.
  * 05/04/94 (seiwald) - async multiprocess interface
@@ -44,16 +44,14 @@
  * execcmd() - launch an async command execution
  */
 
-void
-execcmd(
- char *string,
- void (*func)( void *closure, int status, timing_info*, char *, char * ),
- void *closure,
- LIST *shell )
+void execcmd(
+ char *string,
+ void (*func)( void *closure, int status, timing_info*, char *, char * ),
+ void *closure,
+ LIST *shell )
 {
-
- printf( "%s", string );
- (*func)( closure, EXEC_CMD_OK );
+ printf( "%s", string );
+ (*func)( closure, EXEC_CMD_OK );
 }
 
 /*
@@ -63,7 +61,7 @@
 int
 execwait()
 {
- return 0;
+ return 0;
 }
 
 # endif /* OS_MAC */

Modified: trunk/tools/jam/src/execnt.c
==============================================================================
--- trunk/tools/jam/src/execnt.c (original)
+++ trunk/tools/jam/src/execnt.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -41,7 +41,7 @@
  *
  * Each word must be an individual element in a jam variable value.
  *
- * In $(JAMSHELL), % expands to the command string and ! expands to
+ * In $(JAMSHELL), % expands to the command string and ! expands to
  * the slot number (starting at 1) for multiprocess (-j) invocations.
  * If $(JAMSHELL) doesn't include a %, it is tacked on as the last
  * argument.
@@ -96,7 +96,7 @@
 static int try_kill_one();
 /* */
 static double creation_time(HANDLE);
-/* Recursive check if first process is parent (directly or indirectly) of
+/* Recursive check if first process is parent (directly or indirectly) of
 the second one. */
 static int is_parent_child(DWORD, DWORD);
 /* */
@@ -142,7 +142,7 @@
 /* execution unit tests */
 void execnt_unit_test()
 {
-#if !defined(NDEBUG)
+#if !defined(NDEBUG)
     /* vc6 preprocessor is broken, so assert with these strings gets
      * confused. Use a table instead.
      */
@@ -178,18 +178,22 @@
         /* Work around vc6 bug; it doesn't like escaped string
          * literals inside assert
          */
- char** argv = string_to_args("\"g++\" -c -I\"Foobar\"");
- char const expected[] = "-c -I\"Foobar\"";
-
- assert(!strcmp(argv[0], "g++"));
- assert(!strcmp(argv[1], expected));
- free_argv(argv);
+ char * * argv = string_to_args(" \"g++\" -c -I\"Foobar\"" );
+ char const expected[] = "-c -I\"Foobar\"";
+
+ assert( !strcmp( argv[0], "g++" ) );
+ assert( !strcmp( argv[1], expected ) );
+ free_argv( argv );
     }
-#endif
+#endif
 }
 
-/* execcmd() - launch an async command execution */
-void execcmd(
+
+/*
+ * execcmd() - launch an async command execution.
+ */
+
+void execcmd(
     char *command,
     void (*func)( void *closure, int status, timing_info*, char *invoked_command, char *command_output),
     void *closure,
@@ -203,7 +207,7 @@
     char **argv = argv_static;
     char *p;
     char* command_orig = command;
-
+
     /* Check to see if we need to hack around the line-length limitation. */
     /* Look for a JAMSHELL setting of "%", indicating that the command
      * should be invoked directly */
@@ -223,17 +227,17 @@
         exit( EXITBAD );
     }
 
- /* compute the name of a temp batch file, for possible use */
+ /* Compute the name of a temp batch file, for possible use. */
     if( !cmdtab[ slot ].tempfile_bat )
     {
         const char *tempdir = path_tmpdir();
         DWORD procID = GetCurrentProcessId();
-
- /* SVA - allocate 64 other just to be safe */
+
+ /* SVA - allocate 64 bytes extra just to be safe. */
         cmdtab[ slot ].tempfile_bat = BJAM_MALLOC_ATOMIC( strlen( tempdir ) + 64 );
-
+
         sprintf(
- cmdtab[ slot ].tempfile_bat, "%s\\jam%d-%02d.bat",
+ cmdtab[ slot ].tempfile_bat, "%s\\jam%d-%02d.bat",
             tempdir, procID, slot );
     }
 
@@ -241,25 +245,26 @@
     while( *(command+1) && isspace( *command ) )
         ++command;
 
- /* Write to .BAT file unless the line would be too long and it
- * meets the other spawnability criteria.
+ /* Write to .BAT file unless the line would be too long and it meets the
+ * other spawnability criteria.
      */
     if( raw_cmd && can_spawn( command ) >= MAXLINE )
     {
         if( DEBUG_EXECCMD )
- printf("Executing raw command directly\n");
+ printf("Executing raw command directly\n");
     }
     else
     {
         FILE *f = 0;
         int tries = 0;
         raw_cmd = 0;
-
- /* Write command to bat file. For some reason this open can
- fails intermitently. But doing some retries works. Most likely
- this is due to a previously existing file of the same name that
- happens to be opened by an active virus scanner. Pointed out,
- and fix by Bronek Kozicki. */
+
+ /* Write command to bat file. For some reason this open can fail
+ * intermitently. But doing some retries works. Most likely this is due
+ * to a previously existing file of the same name that happens to be
+ * opened by an active virus scanner. Pointed out and fixed by Bronek
+ * Kozicki.
+ */
         for (; !f && tries < 4; ++tries)
         {
             f = fopen( cmdtab[ slot ].tempfile_bat, "w" );
@@ -274,7 +279,7 @@
         fclose( f );
 
         command = cmdtab[ slot ].tempfile_bat;
-
+
         if( DEBUG_EXECCMD )
         {
             if (shell)
@@ -327,8 +332,8 @@
 
     if( !cmdsrunning++ )
         istat = signal( SIGINT, onintr );
-
- /* Start the command */
+
+ /* Start the command. */
     {
         SECURITY_ATTRIBUTES sa
             = { sizeof(SECURITY_ATTRIBUTES), 0, 0 };
@@ -367,26 +372,26 @@
             SetHandleInformation( cmdtab[ slot ].pipe_err[0], HANDLE_FLAG_INHERIT, 0 );
         }
 
- /* hide the child window, if any */
+ /* Hide the child window, if any. */
         si.dwFlags |= STARTF_USESHOWWINDOW;
         si.wShowWindow = SW_HIDE;
 
- /* set the child outputs to the pipes */
+ /* Set the child outputs to the pipes. */
         si.dwFlags |= STARTF_USESTDHANDLES;
         si.hStdOutput = cmdtab[ slot ].pipe_out[1];
         if ( globs.pipe_action == 2 )
         {
- /* pipe stderr to the action error output */
+ /* Pipe stderr to the action error output. */
             si.hStdError = cmdtab[ slot ].pipe_err[1];
         }
         else if ( globs.pipe_action == 1 )
         {
- /* pipe stderr to the console error output */
+ /* Pipe stderr to the console error output. */
             si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
         }
         else
         {
- /* pipe stderr to the action merged output */
+ /* Pipe stderr to the action merged output. */
             si.hStdError = cmdtab[ slot ].pipe_out[1];
         }
 
@@ -406,8 +411,8 @@
             string_new( &cmdtab[ slot ].target );
         }
         string_copy( &cmdtab[ slot ].command, command_orig );
-
- /* put together the comman we run */
+
+ /* Put together the command we run. */
         {
             char ** argp = argv;
             string_new(&cmd);
@@ -418,64 +423,64 @@
                 string_append(&cmd,*(argp++));
             }
         }
-
- /* create the output buffers */
+
+ /* Create output buffers. */
         string_new( &cmdtab[ slot ].buffer_out );
         string_new( &cmdtab[ slot ].buffer_err );
 
- /* run the command, by creating a sub-process for it */
+ /* Run the command by creating a sub-process for it. */
         if (
             ! CreateProcess(
- NULL, /* application name */
- cmd.value, /* command line */
- NULL, /* process attributes */
- NULL, /* thread attributes */
- TRUE, /* inherit handles */
- CREATE_NEW_PROCESS_GROUP, /* create flags */
- NULL, /* env vars, null inherits env */
- NULL, /* current dir, null is our current dir */
- &si, /* startup info */
- &cmdtab[ slot ].pi /* the child process info, if created */
+ NULL , /* application name */
+ cmd.value , /* command line */
+ NULL , /* process attributes */
+ NULL , /* thread attributes */
+ TRUE , /* inherit handles */
+ CREATE_NEW_PROCESS_GROUP, /* create flags */
+ NULL , /* env vars, null inherits env */
+ NULL , /* current dir, null is our */
+ /* current dir */
+ &si , /* startup info */
+ &cmdtab[ slot ].pi /* child process info, if created */
                 )
             )
         {
             perror( "CreateProcess" );
             exit( EXITBAD );
         }
-
- /* clean up temporary stuff */
+
+ /* Clean up temporary stuff. */
         string_free(&cmd);
     }
 
- /* Wait until we're under the limit of concurrent commands. */
- /* Don't trust globs.jobs alone. */
-
- while( cmdsrunning >= MAXJOBS || cmdsrunning >= globs.jobs )
+ /* Wait until we are under the limit of concurrent commands. Do not trust
+ * globs.jobs alone.
+ */
+ while( ( cmdsrunning >= MAXJOBS ) || ( cmdsrunning >= globs.jobs ) )
         if( !execwait() )
             break;
-
+
     if (argv != argv_static)
- {
         free_argv(argv);
- }
 }
 
 
-
 /* execwait()
- - wait and drive at most one execution completion
+ * wait and drive at most one execution completion
     * waits for one command to complete, while processing the io
       for all ongoing commands.
+
+ Returns 0 if called when there were no more commands being executed or 1
+ otherwise.
 */
 int execwait()
 {
     int i = -1;
 
- /* Handle naive make1() which doesn't know if cmds are running. */
-
+ /* Handle naive make1() which does not know if cmds are running. */
     if( !cmdsrunning )
         return 0;
-
+
     /* wait for a command to complete, while snarfing up any output */
     do
     {
@@ -489,13 +494,13 @@
         if ( i < 0 ) i = try_kill_one();
     }
     while ( i < 0 );
-
- /* we have a command... process it */
+
+ /* We have a command... process it. */
     --cmdsrunning;
     {
         timing_info time;
         int rstat;
-
+
         /* the time data for the command */
         record_times(cmdtab[i].pi.hProcess, &time);
 
@@ -536,7 +541,7 @@
             &time,
             cmdtab[i].command.value,
             cmdtab[i].buffer_out.value );
-
+
         /* clean up the command data, process, etc. */
         string_free(&cmdtab[i].action); string_new(&cmdtab[i].action);
         string_free(&cmdtab[i].target); string_new(&cmdtab[i].target);
@@ -556,6 +561,7 @@
     return 1;
 }
 
+
 /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
 
 static void free_argv( char** args )
@@ -566,7 +572,7 @@
 
 /* For more details on Windows cmd.exe shell command-line length limitations see
  * the following MSDN article:
- *
+ *
  * http://support.microsoft.com/default.aspx?scid=kb;en-us;830473
  */
 int maxline()
@@ -574,7 +580,7 @@
     OSVERSIONINFO os_info;
     os_info.dwOSVersionInfoSize = sizeof(os_info);
     GetVersionEx(&os_info);
-
+
     if (os_info.dwMajorVersion >= 5) return 8191; /* XP > */
     if (os_info.dwMajorVersion == 4) return 2047; /* NT 4.x */
     return 996; /* NT 3.5.1 */
@@ -602,7 +608,7 @@
     /* drop leading and trailing whitespace if any */
     while (isspace(*string))
         ++string;
-
+
     src_len = strlen( string );
     while ( src_len > 0 && isspace( string[src_len - 1] ) )
         --src_len;
@@ -624,7 +630,7 @@
         BJAM_FREE( line );
         return 0;
     }
-
+
     /* Strip quotes from the first command-line argument and find
      * where it ends. Quotes are illegal in Win32 pathnames, so we
      * don't need to worry about preserving escaped quotes here.
@@ -644,31 +650,32 @@
     *dst++ = 0;
     argv[0] = line;
 
- /* skip whitespace in src */
+ /* Skip whitespace in src. */
     while (isspace(*src))
         ++src;
 
     argv[1] = dst;
 
- /* Copy the rest of the arguments verbatim */
-
+ /* Copy the rest of the arguments verbatim. */
     src_len -= src - string;
 
- /* Use strncat because it appends a trailing nul */
+ /* Use strncat because it appends a trailing nul. */
     *dst = 0;
     strncat(dst, src, src_len);
 
     argv[2] = 0;
-
+
     return argv;
 }
 
+
 static void onintr( int disp )
 {
     intr++;
     printf( "...interrupted\n" );
 }
 
+
 /*
  * can_spawn() - If the command is suitable for execution via spawnvp,
  * return a number >= the number of characters it would occupy on the
@@ -676,15 +683,15 @@
  */
 long can_spawn(char* command)
 {
- char *p;
-
+ char * p;
+
     char inquote = 0;
 
     /* Move to the first non-whitespace */
     command += strspn( command, " \t" );
 
     p = command;
-
+
     /* Look for newlines and unquoted i/o redirection */
     do
     {
@@ -702,7 +709,7 @@
             if (*p)
                 return 0;
             break;
-
+
         case '"':
         case '\'':
             if (p > command && p[-1] != '\\')
@@ -712,10 +719,10 @@
                 else if (inquote == 0)
                     inquote = *p;
             }
-
+
             ++p;
             break;
-
+
         case '<':
         case '>':
         case '|':
@@ -798,11 +805,11 @@
     return ceil(filetime_seconds(t_utc)-time_diff);
 }
 
+
 static void record_times(HANDLE process, timing_info* time)
 {
     FILETIME creation, exit, kernel, user;
-
- if (GetProcessTimes(process, &creation, &exit, &kernel, &user))
+ if ( GetProcessTimes( process, &creation, &exit, &kernel, &user ) )
     {
         time->system = filetime_seconds(kernel);
         time->user = filetime_seconds(user);
@@ -811,10 +818,12 @@
     }
 }
 
+
 #define IO_BUFFER_SIZE (16*1024)
 
 static char ioBuffer[IO_BUFFER_SIZE+1];
 
+
 static void read_pipe(
     HANDLE in, /* the pipe to read from */
     string * out
@@ -822,7 +831,7 @@
 {
     DWORD bytesInBuffer = 0;
     DWORD bytesAvailable = 0;
-
+
     do
     {
         /* check if we have any data to read */
@@ -830,7 +839,7 @@
         {
             bytesAvailable = 0;
         }
-
+
         /* read in the available data */
         if ( bytesAvailable > 0 )
         {
@@ -879,7 +888,7 @@
 static void read_output()
 {
     int i;
-
+
     for ( i = 0; i < globs.jobs && i < MAXJOBS; ++i )
     {
         /* read stdout data */
@@ -933,7 +942,7 @@
     if ( globs.timeout > 0 )
     {
         int i;
-
+
         for ( i = 0; i < globs.jobs; ++i )
         {
             double t = running_time(cmdtab[i].pi.hProcess);
@@ -1041,7 +1050,7 @@
         pid = get_process_id(process);
     }
     process_snapshot_h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
-
+
     if (INVALID_HANDLE_VALUE != process_snapshot_h)
     {
         BOOL ok = TRUE;
@@ -1079,61 +1088,65 @@
     return 0.0;
 }
 
-/* Recursive check if first process is parent (directly or indirectly) of
-the second one. Both processes are passed as process ids, not handles.
-Special return value 2 means that the second process is smss.exe and its
-parent process is System (first argument is ignored) */
-static int is_parent_child(DWORD parent, DWORD child)
+
+/* Recursive check if first process is parent (directly or indirectly) of the
+ * second one. Both processes are passed as process ids, not handles. Special
+ * return value 2 means that the second process is smss.exe and its parent
+ * process is System (first argument is ignored).
+ */
+
+static int is_parent_child( DWORD parent, DWORD child )
 {
     HANDLE process_snapshot_h = INVALID_HANDLE_VALUE;
 
- if (!child)
+ if ( !child )
         return 0;
- if (parent == child)
+ if ( parent == child )
         return 1;
 
- process_snapshot_h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
- if (INVALID_HANDLE_VALUE != process_snapshot_h)
+ process_snapshot_h = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
+ if ( INVALID_HANDLE_VALUE != process_snapshot_h )
     {
         BOOL ok = TRUE;
         PROCESSENTRY32 pinfo;
         pinfo.dwSize = sizeof(PROCESSENTRY32);
         for (
- ok = Process32First(process_snapshot_h, &pinfo);
- ok == TRUE;
+ ok = Process32First(process_snapshot_h, &pinfo);
+ ok == TRUE;
             ok = Process32Next(process_snapshot_h, &pinfo) )
         {
             if (pinfo.th32ProcessID == child)
             {
- /*
- Unfortunately, process ids are not really unique. There might
- be spurious "parent and child" relationship match between
- two non-related processes if real parent process of a given
- process has exited (while child process kept running as an
- "orphan") and the process id of such parent process has been
- reused by internals of the operating system when creating
- another process. Thus additional check is needed - process
- creation time. This check may fail (ie. return 0) for system
- processes due to insufficient privileges, and that's OK. */
+ /* Unfortunately, process ids are not really unique. There might
+ * be spurious "parent and child" relationship match between two
+ * non-related processes if real parent process of a given
+ * process has exited (while child process kept running as an
+ * "orphan") and the process id of such parent process has been
+ * reused by internals of the operating system when creating
+ * another process.
+ *
+ * Thus additional check is needed - process creation time. This
+ * check may fail (i.e. return 0) for system processes due to
+ * insufficient privileges, and that is OK.
+ */
                 double tchild = 0.0;
                 double tparent = 0.0;
- HANDLE hchild = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pinfo.th32ProcessID);
-
- CloseHandle(process_snapshot_h);
+ HANDLE hchild = OpenProcess( PROCESS_QUERY_INFORMATION, FALSE, pinfo.th32ProcessID );
+ CloseHandle( process_snapshot_h );
 
                 /* csrss.exe may display message box like following:
                     xyz.exe - Unable To Locate Component
- This application has failed to start because
- boost_foo-bar.dll was not found. Re-installing the
+ This application has failed to start because
+ boost_foo-bar.dll was not found. Re-installing the
                     application may fix the problem
                 This actually happens when starting test process that depends
- on a dynamic library which failed to build. We want to
+ on a dynamic library which failed to build. We want to
                 automatically close these message boxes even though csrss.exe
                 is not our child process. We may depend on the fact that (in
- all current versions of Windows) csrss.exe is directly
+ all current versions of Windows) csrss.exe is directly
                 child of smss.exe process, which in turn is directly child of
                 System process, which always has process id == 4 .
- This check must be performed before comparison of process
+ This check must be performed before comparison of process
                 creation time */
                 if (stricmp(pinfo.szExeFile, "csrss.exe") == 0
                     && is_parent_child(parent, pinfo.th32ParentProcessID) == 2)
@@ -1153,7 +1166,7 @@
                     {
                         tchild = creation_time(hchild);
                         tparent = creation_time(hparent);
-
+
                         CloseHandle(hparent);
                     }
                     CloseHandle(hchild);
@@ -1194,14 +1207,14 @@
 
     if (!GetClassNameA(hwnd, buf, sizeof(buf)))
         return TRUE; /* failed to read class name; presume it's not a dialog */
-
+
     if (strcmp(buf, "#32770") != 0)
         return TRUE; /* not a dialog */
 
     /* GetWindowThreadProcessId returns 0 on error, otherwise thread id
     of window message pump thread */
     tid = GetWindowThreadProcessId(hwnd, &pid);
-
+
     if (tid && is_parent_child(p.pid, pid))
     {
         /* ask really nice */
@@ -1212,7 +1225,7 @@
             PostThreadMessageA(tid, WM_QUIT, 0, 0);
             WaitForSingleObject(p.h, 300);
         }
-
+
         /* done, we do not want to check any other window now */
         return FALSE;
     }
@@ -1220,17 +1233,19 @@
     return TRUE;
 }
 
-static void close_alert(HANDLE process)
+
+static void close_alert( HANDLE process )
 {
     DWORD pid = get_process_id(process);
- /* If process already exited or we just cannot get its process id, do not
- go any further */
- if (pid)
+ /* If process already exited or we just cannot get its process id, do not go
+ * go any further.
+ */
+ if ( pid )
     {
         PROCESS_HANDLE_ID p;
         p.h = process;
- p.pid = pid;
- EnumWindows(&close_alert_window_enum, (LPARAM) &p);
+ p.pid = pid;
+ EnumWindows( &close_alert_window_enum, (LPARAM)&p );
     }
 }
 

Modified: trunk/tools/jam/src/execunix.c
==============================================================================
--- trunk/tools/jam/src/execunix.c (original)
+++ trunk/tools/jam/src/execunix.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -39,12 +39,12 @@
  * If $(JAMSHELL) is defined, uses that to formulate execvp()/spawnvp().
  * The default is:
  *
- * /bin/sh -c % [ on UNIX/AmigaOS ]
- * cmd.exe /c % [ on OS2/WinNT ]
+ * /bin/sh -c % [ on UNIX/AmigaOS ]
+ * cmd.exe /c % [ on OS2/WinNT ]
  *
  * Each word must be an individual element in a jam variable value.
  *
- * In $(JAMSHELL), % expands to the command string and ! expands to
+ * In $(JAMSHELL), % expands to the command string and ! expands to
  * the slot number (starting at 1) for multiprocess (-j) invocations.
  * If $(JAMSHELL) doesn't include a %, it is tacked on as the last
  * argument.
@@ -52,11 +52,11 @@
  * Don't just set JAMSHELL to /bin/sh or cmd.exe - it won't work!
  *
  * External routines:
- * execcmd() - launch an async command execution
- * execwait() - wait and drive at most one execution completion
+ * execcmd() - launch an async command execution
+ * execwait() - wait and drive at most one execution completion
  *
  * Internal routines:
- * onintr() - bump intr to note command interruption
+ * onintr() - bump intr to note command interruption
  *
  * 04/08/94 (seiwald) - Coherent/386 support added.
  * 05/04/94 (seiwald) - async multiprocess interface
@@ -76,7 +76,7 @@
 
 static struct
 {
- int pid; /* on win32, a real process handle */
+ int pid; /* on win32, a real process handle */
     int fd[2]; /* file descriptors for stdout and stderr */
     FILE *stream[2]; /* child's stdout (0) and stderr (1) file stream */
     clock_t start_time; /* start time of child process */
@@ -99,8 +99,8 @@
 void
 onintr( int disp )
 {
- intr++;
- printf( "...interrupted\n" );
+ intr++;
+ printf( "...interrupted\n" );
 }
 
 /*
@@ -108,70 +108,70 @@
  */
 
 void
-execcmd(
- char *string,
- void (*func)( void *closure, int status, timing_info*, char *, char * ),
- void *closure,
- LIST *shell,
+execcmd(
+ char *string,
+ void (*func)( void *closure, int status, timing_info*, char *, char * ),
+ void *closure,
+ LIST *shell,
         char *action,
         char *target )
 {
         static int initialized = 0;
         int out[2], err[2];
- int slot, len;
- char *argv[ MAXARGC + 1 ]; /* +1 for NULL */
+ int slot, len;
+ char *argv[ MAXARGC + 1 ]; /* +1 for NULL */
 
- /* Find a slot in the running commands table for this one. */
+ /* Find a slot in the running commands table for this one. */
 
- for( slot = 0; slot < MAXJOBS; slot++ )
- if( !cmdtab[ slot ].pid )
- break;
-
- if( slot == MAXJOBS )
- {
- printf( "no slots for child!\n" );
- exit( EXITBAD );
- }
-
- /* Forumulate argv */
- /* If shell was defined, be prepared for % and ! subs. */
- /* Otherwise, use stock /bin/sh (on unix) or cmd.exe (on NT). */
-
- if( shell )
- {
- int i;
- char jobno[4];
- int gotpercent = 0;
-
- sprintf( jobno, "%d", slot + 1 );
-
- for( i = 0; shell && i < MAXARGC; i++, shell = list_next( shell ) )
- {
- switch( shell->string[0] )
- {
- case '%': argv[i] = string; gotpercent++; break;
- case '!': argv[i] = jobno; break;
- default: argv[i] = shell->string;
- }
- if( DEBUG_EXECCMD )
- printf( "argv[%d] = '%s'\n", i, argv[i] );
- }
-
- if( !gotpercent )
- argv[i++] = string;
-
- argv[i] = 0;
- }
- else
- {
- argv[0] = "/bin/sh";
- argv[1] = "-c";
- argv[2] = string;
- argv[3] = 0;
- }
+ for( slot = 0; slot < MAXJOBS; slot++ )
+ if( !cmdtab[ slot ].pid )
+ break;
 
- /* increment jobs running */
- ++cmdsrunning;
+ if( slot == MAXJOBS )
+ {
+ printf( "no slots for child!\n" );
+ exit( EXITBAD );
+ }
+
+ /* Forumulate argv */
+ /* If shell was defined, be prepared for % and ! subs. */
+ /* Otherwise, use stock /bin/sh (on unix) or cmd.exe (on NT). */
+
+ if( shell )
+ {
+ int i;
+ char jobno[4];
+ int gotpercent = 0;
+
+ sprintf( jobno, "%d", slot + 1 );
+
+ for( i = 0; shell && i < MAXARGC; i++, shell = list_next( shell ) )
+ {
+ switch( shell->string[0] )
+ {
+ case '%': argv[i] = string; gotpercent++; break;
+ case '!': argv[i] = jobno; break;
+ default: argv[i] = shell->string;
+ }
+ if( DEBUG_EXECCMD )
+ printf( "argv[%d] = '%s'\n", i, argv[i] );
+ }
+
+ if( !gotpercent )
+ argv[i++] = string;
+
+ argv[i] = 0;
+ }
+ else
+ {
+ argv[0] = "/bin/sh";
+ argv[1] = "-c";
+ argv[2] = string;
+ argv[3] = 0;
+ }
+
+ /* increment jobs running */
+ ++cmdsrunning;
 
         /* save off actual command string */
         cmdtab[ slot ].command = BJAM_MALLOC_ATOMIC(strlen(string)+1);
@@ -197,24 +197,24 @@
         fcntl(err[0], F_SETFL, O_NONBLOCK);
         fcntl(err[1], F_SETFL, O_NONBLOCK);
 
- /* Start the command */
+ /* Start the command */
 
         cmdtab[ slot ].start_dt = time(0);
 
         if (0 < globs.timeout) {
- /*
- * handle hung processes by manually tracking elapsed
+ /*
+ * handle hung processes by manually tracking elapsed
              * time and signal process when time limit expires
              */
             struct tms buf;
             cmdtab[ slot ].start_time = times(&buf);
 
             /* make a global, only do this once */
- if (tps == 0) tps = sysconf(_SC_CLK_TCK);
+ if (tps == 0) tps = sysconf(_SC_CLK_TCK);
         }
 
- if ((cmdtab[slot].pid = vfork()) == 0)
- {
+ if ((cmdtab[slot].pid = vfork()) == 0)
+ {
             int pid = getpid();
 
             close(out[0]);
@@ -251,20 +251,20 @@
             _exit(127);
         }
         else if( cmdtab[slot].pid == -1 )
- {
- perror( "vfork" );
- exit( EXITBAD );
- }
+ {
+ perror( "vfork" );
+ exit( EXITBAD );
+ }
 
         setpgid(cmdtab[slot].pid, cmdtab[slot].pid);
 
         /* close write end of pipes */
- close(out[1]);
- close(err[1]);
+ close(out[1]);
+ close(err[1]);
 
         /* child writes stdout to out[1], parent reads from out[0] */
- cmdtab[slot].fd[OUT] = out[0];
- cmdtab[slot].stream[OUT] = fdopen(cmdtab[slot].fd[OUT], "rb");
+ cmdtab[slot].fd[OUT] = out[0];
+ cmdtab[slot].stream[OUT] = fdopen(cmdtab[slot].fd[OUT], "rb");
         if (cmdtab[slot].stream[OUT] == NULL) {
             perror( "fdopen" );
             exit( EXITBAD );
@@ -277,8 +277,8 @@
         }
         else
         {
- cmdtab[slot].fd[ERR] = err[0];
- cmdtab[slot].stream[ERR] = fdopen(cmdtab[slot].fd[ERR], "rb");
+ cmdtab[slot].fd[ERR] = err[0];
+ cmdtab[slot].stream[ERR] = fdopen(cmdtab[slot].fd[ERR], "rb");
             if (cmdtab[slot].stream[ERR] == NULL) {
                 perror( "fdopen" );
                 exit( EXITBAD );
@@ -290,7 +290,7 @@
         if (action && target)
         {
             len = strlen(action) + 1;
- if (cmdtab[slot].action_length < len)
+ if (cmdtab[slot].action_length < len)
             {
                 BJAM_FREE(cmdtab[ slot ].action);
                 cmdtab[ slot ].action = BJAM_MALLOC_ATOMIC(len);
@@ -298,7 +298,7 @@
             }
             strcpy(cmdtab[ slot ].action, action);
             len = strlen(target) + 1;
- if (cmdtab[slot].target_length < len)
+ if (cmdtab[slot].target_length < len)
             {
                 BJAM_FREE(cmdtab[ slot ].target);
                 cmdtab[ slot ].target = BJAM_MALLOC_ATOMIC(len);
@@ -316,13 +316,13 @@
             cmdtab[ slot ].target_length = 0;
         }
 
- /* Save the operation for execwait() to find. */
+ /* Save the operation for execwait() to find. */
 
- cmdtab[ slot ].func = func;
- cmdtab[ slot ].closure = closure;
+ cmdtab[ slot ].func = func;
+ cmdtab[ slot ].closure = closure;
 
- /* Wait until we're under the limit of concurrent commands. */
- /* Don't trust globs.jobs alone. */
+ /* Wait until we're under the limit of concurrent commands. */
+ /* Don't trust globs.jobs alone. */
 
         while( cmdsrunning >= MAXJOBS || cmdsrunning >= globs.jobs )
             if( !execwait() )
@@ -333,10 +333,10 @@
  *
  * i is index into cmdtab
  *
- * s (stream) indexes
+ * s (stream) indexes
  *
- * cmdtab[i].stream[s]
- * cmdtab[i].buffer[s] and
+ * cmdtab[i].stream[s]
+ * cmdtab[i].buffer[s] and
  * cmdtab[i].fd[s]
  */
 
@@ -374,7 +374,7 @@
     /* close the stream and pipe descriptor */
     fclose(cmdtab[i].stream[s]);
     cmdtab[i].stream[s] = 0;
-
+
     close(cmdtab[i].fd[s]);
     cmdtab[i].fd[s] = 0;
 }
@@ -487,9 +487,9 @@
                         cmdtab[i].pid = 0;
 
                         /* set reason for exit if not timed out */
- if (WIFEXITED(status))
+ if (WIFEXITED(status))
                         {
- if (0 == WEXITSTATUS(status))
+ if (0 == WEXITSTATUS(status))
                                 cmdtab[i].exit_reason = EXIT_OK;
                             else
                                 cmdtab[i].exit_reason = EXIT_FAIL;
@@ -506,7 +506,7 @@
                         time_info.user = (double)(new_time.tms_cutime - old_time.tms_cutime) / CLOCKS_PER_SEC;
                         time_info.start = cmdtab[i].start_dt;
                         time_info.end = time(0);
-
+
                         old_time = new_time;
 
                         /* Drive the completion */

Modified: trunk/tools/jam/src/execvms.c
==============================================================================
--- trunk/tools/jam/src/execvms.c (original)
+++ trunk/tools/jam/src/execvms.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -1,4 +1,4 @@
-/*
+/*
  * Copyright 1993, 1995 Christopher Seiwald.
  *
  * This file is part of Jam - see jam.c for Copyright information.
@@ -24,14 +24,14 @@
  *
  * The approach is this:
  *
- * If the command is a single line, and shorter than WRTLEN (what we
- * believe to be the maximum line length), we just system() it.
+ * If the command is a single line, and shorter than WRTLEN (what we
+ * believe to be the maximum line length), we just system() it.
  *
- * If the command is multi-line, or longer than WRTLEN, we write the
- * command block to a temp file, splitting long lines (using "-" at
- * the end of the line to indicate contiuation), and then source that
- * temp file. We use special logic to make sure we don't continue in
- * the middle of a quoted string.
+ * If the command is multi-line, or longer than WRTLEN, we write the
+ * command block to a temp file, splitting long lines (using "-" at
+ * the end of the line to indicate contiuation), and then source that
+ * temp file. We use special logic to make sure we don't continue in
+ * the middle of a quoted string.
  *
  * 05/04/94 (seiwald) - async multiprocess interface; noop on VMS
  * 12/20/96 (seiwald) - rewritten to handle multi-line commands well
@@ -40,130 +40,130 @@
 
 #define WRTLEN 240
 
-#define MIN( a, b ) ((a) < (b) ? (a) : (b))
+#define MIN( a, b ) ((a) < (b) ? (a) : (b))
 
 /* 1 for the @ and 4 for the .com */
 
 char tempnambuf[ L_tmpnam + 1 + 4 ] = {0};
 
 void
-execcmd(
- char *string,
+execcmd(
+ char *string,
         void (*func)( void *closure, int status, timing_info*, char *, char * ),
- void *closure,
- LIST *shell,
+ void *closure,
+ LIST *shell,
     char *rule_name,
     char *target )
 {
- char *s, *e, *p;
- int rstat = EXEC_CMD_OK;
- int status;
+ char *s, *e, *p;
+ int rstat = EXEC_CMD_OK;
+ int status;
+
+ /* See if string is more than one line */
+ /* discounting leading/trailing white space */
 
- /* See if string is more than one line */
- /* discounting leading/trailing white space */
+ for( s = string; *s && isspace( *s ); s++ )
+ ;
 
- for( s = string; *s && isspace( *s ); s++ )
- ;
+ e = p = strchr( s, '\n' );
 
- e = p = strchr( s, '\n' );
+ while( p && isspace( *p ) )
+ ++p;
 
- while( p && isspace( *p ) )
- ++p;
+ /* If multi line or long, write to com file. */
+ /* Otherwise, exec directly. */
 
- /* If multi line or long, write to com file. */
- /* Otherwise, exec directly. */
+ if( p && *p || e - s > WRTLEN )
+ {
+ FILE *f;
 
- if( p && *p || e - s > WRTLEN )
- {
- FILE *f;
+ /* Create temp file invocation "@sys$scratch:tempfile.com" */
 
- /* Create temp file invocation "@sys$scratch:tempfile.com" */
+ if( !*tempnambuf )
+ {
+ tempnambuf[0] = '@';
+ (void)tmpnam( tempnambuf + 1 );
+ strcat( tempnambuf, ".com" );
+ }
 
- if( !*tempnambuf )
- {
- tempnambuf[0] = '@';
- (void)tmpnam( tempnambuf + 1 );
- strcat( tempnambuf, ".com" );
- }
-
- /* Open tempfile */
+ /* Open tempfile */
 
- if( !( f = fopen( tempnambuf + 1, "w" ) ) )
- {
- printf( "can't open command file\n" );
- (*func)( closure, EXEC_CMD_FAIL );
- return;
- }
+ if( !( f = fopen( tempnambuf + 1, "w" ) ) )
+ {
+ printf( "can't open command file\n" );
+ (*func)( closure, EXEC_CMD_FAIL );
+ return;
+ }
 
- /* For each line of the string */
+ /* For each line of the string */
 
- while( *string )
- {
- char *s = strchr( string, '\n' );
- int len = s ? s + 1 - string : strlen( string );
+ while( *string )
+ {
+ char *s = strchr( string, '\n' );
+ int len = s ? s + 1 - string : strlen( string );
 
- fputc( '$', f );
+ fputc( '$', f );
 
- /* For each chunk of a line that needs to be split */
+ /* For each chunk of a line that needs to be split */
 
- while( len > 0 )
- {
- char *q = string;
- char *qe = string + MIN( len, WRTLEN );
- char *qq = q;
- int quote = 0;
+ while( len > 0 )
+ {
+ char *q = string;
+ char *qe = string + MIN( len, WRTLEN );
+ char *qq = q;
+ int quote = 0;
 
- /* Look for matching "'s */
+ /* Look for matching "'s */
 
- for( ; q < qe; q++ )
- if( *q == '"' && ( quote = !quote ) )
- qq = q;
+ for( ; q < qe; q++ )
+ if( *q == '"' && ( quote = !quote ) )
+ qq = q;
 
- /* Back up to opening quote, if in one */
+ /* Back up to opening quote, if in one */
 
- if( quote )
- q = qq;
+ if( quote )
+ q = qq;
 
- fwrite( string, ( q - string ), 1, f );
+ fwrite( string, ( q - string ), 1, f );
 
- len -= ( q - string );
- string = q;
+ len -= ( q - string );
+ string = q;
 
- if( len )
- {
- fputc( '-', f );
- fputc( '\n', f );
- }
- }
- }
+ if( len )
+ {
+ fputc( '-', f );
+ fputc( '\n', f );
+ }
+ }
+ }
 
- fclose( f );
+ fclose( f );
 
- status = system( tempnambuf ) & 0x07;
+ status = system( tempnambuf ) & 0x07;
 
- unlink( tempnambuf + 1 );
- }
- else
- {
- /* Execute single line command */
- /* Strip trailing newline before execing */
- if( e ) *e = 0;
- status = system( s ) & 0x07;
- }
+ unlink( tempnambuf + 1 );
+ }
+ else
+ {
+ /* Execute single line command */
+ /* Strip trailing newline before execing */
+ if( e ) *e = 0;
+ status = system( s ) & 0x07;
+ }
 
- /* Fail for error or fatal error */
- /* OK on OK, warning, or info exit */
+ /* Fail for error or fatal error */
+ /* OK on OK, warning, or info exit */
 
- if( status == 2 || status == 4 )
- rstat = EXEC_CMD_FAIL;
+ if( status == 2 || status == 4 )
+ rstat = EXEC_CMD_FAIL;
 
- (*func)( closure, rstat );
+ (*func)( closure, rstat );
 }
 
-int
-execwait()
+
+int execwait()
 {
- return 0;
+ return 0;
 }
 
 # endif /* VMS */

Modified: trunk/tools/jam/src/expand.c
==============================================================================
--- trunk/tools/jam/src/expand.c (original)
+++ trunk/tools/jam/src/expand.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -24,13 +24,13 @@
  *
  * External routines:
  *
- * var_expand() - variable-expand input string into list of strings
+ * var_expand() - variable-expand input string into list of strings
  *
  * Internal routines:
  *
- * var_edit_parse() - parse : modifiers into PATHNAME structure
- * var_edit_file() - copy input target name to output, modifying filename
- * var_edit_shift() - do upshift/downshift mods
+ * var_edit_parse() - parse : modifiers into PATHNAME structure
+ * var_edit_file() - copy input target name to output, modifying filename
+ * var_edit_shift() - do upshift/downshift mods
  *
  * 01/25/94 (seiwald) - $(X)$(UNDEF) was expanding like plain $(X)
  * 04/13/94 (seiwald) - added shorthand L0 for null list pointer
@@ -38,29 +38,29 @@
  */
 
 typedef struct {
- PATHNAME f; /* :GDBSMR -- pieces */
- char parent; /* :P -- go to parent directory */
- char filemods; /* one of the above applied */
- char downshift; /* :L -- downshift result */
- char upshift; /* :U -- upshift result */
+ PATHNAME f; /* :GDBSMR -- pieces */
+ char parent; /* :P -- go to parent directory */
+ char filemods; /* one of the above applied */
+ char downshift; /* :L -- downshift result */
+ char upshift; /* :U -- upshift result */
     char to_slashes; /* :T -- convert "\" to "/" */
     char to_windows; /* :W -- convert cygwin to native paths */
- PATHPART empty; /* :E -- default for empties */
- PATHPART join; /* :J -- join list with char */
+ PATHPART empty; /* :E -- default for empties */
+ PATHPART join; /* :J -- join list with char */
 } VAR_EDITS ;
 
 static void var_edit_parse( char *mods, VAR_EDITS *edits );
 static void var_edit_file( char *in, string *out, VAR_EDITS *edits );
 static void var_edit_shift( string *out, VAR_EDITS *edits );
 
-# define MAGIC_COLON '\001'
-# define MAGIC_LEFT '\002'
-# define MAGIC_RIGHT '\003'
+# define MAGIC_COLON '\001'
+# define MAGIC_LEFT '\002'
+# define MAGIC_RIGHT '\003'
 
 /*
  * var_expand() - variable-expand input string into list of strings
  *
- * Would just copy input to output, performing variable expansion,
+ * Would just copy input to output, performing variable expansion,
  * except that since variables can contain multiple values the result
  * of variable expansion may contain multiple values (a list). Properly
  * performs "product" operations that occur in "$(var1)xxx$(var2)" or
@@ -70,12 +70,12 @@
  */
 
 LIST *
-var_expand(
- LIST *l,
- char *in,
- char *end,
- LOL *lol,
- int cancopyin )
+var_expand(
+ LIST *l,
+ char *in,
+ char *end,
+ LOL *lol,
+ int cancopyin )
 {
     char out_buf[ MAXSYM ];
     string buf[1];
@@ -83,7 +83,7 @@
     size_t prefix_length;
     char *out;
     char *inp = in;
- char *ov; /* for temp copy of variable in outbuf */
+ char *ov; /* for temp copy of variable in outbuf */
     int depth;
 
     if( DEBUG_VAREXP )
@@ -100,7 +100,7 @@
 
         case '>':
             return list_copy( l, lol_get( lol, 1 ) );
-
+
         case '1':
         case '2':
         case '3':
@@ -113,9 +113,9 @@
             return list_copy( l, lol_get( lol, in[2]-'1' ) );
         }
     }
-
+
     /* Expand @() files, to single item plus accompanying file. */
-
+
     if ( in[0] == '@' && in[1] == '(' && *(end-1) == ')' )
     {
         /* We try the expansion until it fits within the propspective output buffer. */
@@ -144,8 +144,8 @@
 
     /* Just try simple copy of in to out. */
 
- while( in < end )
- if( *in++ == '$' && *in == '(' )
+ while ( in < end )
+ if ( *in++ == '$' && *in == '(' )
             goto expand;
 
     /* No variables expanded - just add copy of input string to list. */
@@ -154,7 +154,7 @@
     /* item, we can use the copystr() to put it on the new list. */
     /* Otherwise, we use the slower newstr(). */
 
- if( cancopyin )
+ if( cancopyin )
     {
         return list_new( l, copystr( inp ) );
     }
@@ -239,7 +239,7 @@
      * out_buf out ov
      *
      * Later we will overwrite 'variable' in out_buf, but we'll be
- * done with it by then. 'variable' may be a multi-element list,
+ * done with it by then. 'variable' may be a multi-element list,
      * so may each value for '$(variable element)', and so may 'remainder'.
      * Thus we produce a product of three lists.
      */
@@ -339,7 +339,7 @@
                     }
 
                     /* First, compute the index of the last element. */
- sub2 = atoi(s);
+ sub2 = atoi(s);
                     s++;
                     while ( isdigit( *s ) ) s++;
 
@@ -353,7 +353,7 @@
                 ** introducing a modifier is a syntax error.
                 */
 
- s++;
+ s++;
                 if (*s && *s != MAGIC_COLON)
                     sub2 = 0;
 
@@ -361,14 +361,14 @@
             }
 
             /* Get variable value, specially handling $(<), $(>), $(n) */
-
+
             if( varname[0] == '<' && !varname[1] )
                 value = lol_get( lol, 0 );
             else if( varname[0] == '>' && !varname[1] )
                 value = lol_get( lol, 1 );
             else if( varname[0] >= '1' && varname[0] <= '9' && !varname[1] )
                 value = lol_get( lol, varname[0] - '1' );
- else
+ else
                 value = var_get( varname );
 
             /* Handle negitive indexes: part two. */
@@ -444,7 +444,7 @@
                 /* keep appending them (with the join value) */
                 /* rather than creating separate LIST elements. */
 
- if( colon && edits.join.ptr &&
+ if( colon && edits.join.ptr &&
                     ( list_next( value ) || list_next( vars ) ) )
                 {
                     string_append( out1, edits.join.ptr );
@@ -511,160 +511,160 @@
  * var_edit_parse() - parse : modifiers into PATHNAME structure
  *
  * The : modifiers in a $(varname:modifier) currently support replacing
- * or omitting elements of a filename, and so they are parsed into a
+ * or omitting elements of a filename, and so they are parsed into a
  * PATHNAME structure (which contains pointers into the original string).
  *
  * Modifiers of the form "X=value" replace the component X with
- * the given value. Modifiers without the "=value" cause everything
+ * the given value. Modifiers without the "=value" cause everything
  * but the component X to be omitted. X is one of:
  *
- * G <grist>
- * D directory name
- * B base name
- * S .suffix
- * M (member)
- * R root directory - prepended to whole path
+ * G <grist>
+ * D directory name
+ * B base name
+ * S .suffix
+ * M (member)
+ * R root directory - prepended to whole path
  *
  * This routine sets:
  *
- * f->f_xxx.ptr = 0
- * f->f_xxx.len = 0
- * -> leave the original component xxx
- *
- * f->f_xxx.ptr = string
- * f->f_xxx.len = strlen( string )
- * -> replace component xxx with string
- *
- * f->f_xxx.ptr = ""
- * f->f_xxx.len = 0
- * -> omit component xxx
+ * f->f_xxx.ptr = 0
+ * f->f_xxx.len = 0
+ * -> leave the original component xxx
+ *
+ * f->f_xxx.ptr = string
+ * f->f_xxx.len = strlen( string )
+ * -> replace component xxx with string
+ *
+ * f->f_xxx.ptr = ""
+ * f->f_xxx.len = 0
+ * -> omit component xxx
  *
  * var_edit_file() below and path_build() obligingly follow this convention.
  */
 
 static void
 var_edit_parse(
- char *mods,
- VAR_EDITS *edits )
+ char *mods,
+ VAR_EDITS *edits )
 {
- int havezeroed = 0;
- memset( (char *)edits, 0, sizeof( *edits ) );
+ int havezeroed = 0;
+ memset( (char *)edits, 0, sizeof( *edits ) );
 
- while( *mods )
- {
- char *p;
- PATHPART *fp;
-
- switch( *mods++ )
- {
- case 'L': edits->downshift = 1; continue;
- case 'U': edits->upshift = 1; continue;
- case 'P': edits->parent = edits->filemods = 1; continue;
- case 'E': fp = &edits->empty; goto strval;
- case 'J': fp = &edits->join; goto strval;
- case 'G': fp = &edits->f.f_grist; goto fileval;
- case 'R': fp = &edits->f.f_root; goto fileval;
- case 'D': fp = &edits->f.f_dir; goto fileval;
- case 'B': fp = &edits->f.f_base; goto fileval;
- case 'S': fp = &edits->f.f_suffix; goto fileval;
- case 'M': fp = &edits->f.f_member; goto fileval;
+ while( *mods )
+ {
+ char *p;
+ PATHPART *fp;
+
+ switch( *mods++ )
+ {
+ case 'L': edits->downshift = 1; continue;
+ case 'U': edits->upshift = 1; continue;
+ case 'P': edits->parent = edits->filemods = 1; continue;
+ case 'E': fp = &edits->empty; goto strval;
+ case 'J': fp = &edits->join; goto strval;
+ case 'G': fp = &edits->f.f_grist; goto fileval;
+ case 'R': fp = &edits->f.f_root; goto fileval;
+ case 'D': fp = &edits->f.f_dir; goto fileval;
+ case 'B': fp = &edits->f.f_base; goto fileval;
+ case 'S': fp = &edits->f.f_suffix; goto fileval;
+ case 'M': fp = &edits->f.f_member; goto fileval;
             case 'T': edits->to_slashes = 1; continue;
             case 'W': edits->to_windows = 1; continue;
 
- default: return; /* should complain, but so what... */
- }
+ default: return; /* should complain, but so what... */
+ }
+
+ fileval:
+
+ /* Handle :CHARS, where each char (without a following =) */
+ /* selects a particular file path element. On the first such */
+ /* char, we deselect all others (by setting ptr = "", len = 0) */
+ /* and for each char we select that element (by setting ptr = 0) */
+
+ edits->filemods = 1;
+
+ if( *mods != '=' )
+ {
+ int i;
+
+ if( !havezeroed++ )
+ for( i = 0; i < 6; i++ )
+ {
+ edits->f.part[ i ].len = 0;
+ edits->f.part[ i ].ptr = "";
+ }
+
+ fp->ptr = 0;
+ continue;
+ }
+
+ strval:
 
- fileval:
+ /* Handle :X=value, or :X */
 
- /* Handle :CHARS, where each char (without a following =) */
- /* selects a particular file path element. On the first such */
- /* char, we deselect all others (by setting ptr = "", len = 0) */
- /* and for each char we select that element (by setting ptr = 0) */
-
- edits->filemods = 1;
-
- if( *mods != '=' )
- {
- int i;
-
- if( !havezeroed++ )
- for( i = 0; i < 6; i++ )
- {
- edits->f.part[ i ].len = 0;
- edits->f.part[ i ].ptr = "";
- }
-
- fp->ptr = 0;
- continue;
- }
-
- strval:
-
- /* Handle :X=value, or :X */
-
- if( *mods != '=' )
- {
- fp->ptr = "";
- fp->len = 0;
- }
- else if( p = strchr( mods, MAGIC_COLON ) )
- {
- *p = 0;
- fp->ptr = ++mods;
- fp->len = p - mods;
- mods = p + 1;
- }
- else
- {
- fp->ptr = ++mods;
- fp->len = strlen( mods );
- mods += fp->len;
- }
- }
+ if( *mods != '=' )
+ {
+ fp->ptr = "";
+ fp->len = 0;
+ }
+ else if( p = strchr( mods, MAGIC_COLON ) )
+ {
+ *p = 0;
+ fp->ptr = ++mods;
+ fp->len = p - mods;
+ mods = p + 1;
+ }
+ else
+ {
+ fp->ptr = ++mods;
+ fp->len = strlen( mods );
+ mods += fp->len;
+ }
+ }
 }
 
 /*
  * var_edit_file() - copy input target name to output, modifying filename
  */
-
+
 static void
-var_edit_file(
- char *in,
- string *out,
- VAR_EDITS *edits )
+var_edit_file(
+ char *in,
+ string *out,
+ VAR_EDITS *edits )
 {
- PATHNAME pathname;
+ PATHNAME pathname;
 
- /* Parse apart original filename, putting parts into "pathname" */
+ /* Parse apart original filename, putting parts into "pathname" */
 
- path_parse( in, &pathname );
+ path_parse( in, &pathname );
 
- /* Replace any pathname with edits->f */
+ /* Replace any pathname with edits->f */
 
- if( edits->f.f_grist.ptr )
- pathname.f_grist = edits->f.f_grist;
+ if( edits->f.f_grist.ptr )
+ pathname.f_grist = edits->f.f_grist;
 
- if( edits->f.f_root.ptr )
- pathname.f_root = edits->f.f_root;
+ if( edits->f.f_root.ptr )
+ pathname.f_root = edits->f.f_root;
 
- if( edits->f.f_dir.ptr )
- pathname.f_dir = edits->f.f_dir;
+ if( edits->f.f_dir.ptr )
+ pathname.f_dir = edits->f.f_dir;
 
- if( edits->f.f_base.ptr )
- pathname.f_base = edits->f.f_base;
+ if( edits->f.f_base.ptr )
+ pathname.f_base = edits->f.f_base;
 
- if( edits->f.f_suffix.ptr )
- pathname.f_suffix = edits->f.f_suffix;
+ if( edits->f.f_suffix.ptr )
+ pathname.f_suffix = edits->f.f_suffix;
 
- if( edits->f.f_member.ptr )
- pathname.f_member = edits->f.f_member;
+ if( edits->f.f_member.ptr )
+ pathname.f_member = edits->f.f_member;
 
- /* If requested, modify pathname to point to parent */
+ /* If requested, modify pathname to point to parent */
 
- if( edits->parent )
- path_parent( &pathname );
+ if( edits->parent )
+ path_parent( &pathname );
 
- /* Put filename back together */
+ /* Put filename back together */
 
     path_build( &pathname, out, 0 );
 }
@@ -674,11 +674,11 @@
  */
 
 static void
-var_edit_shift(
- string *out,
- VAR_EDITS *edits )
+var_edit_shift(
+ string *out,
+ VAR_EDITS *edits )
 {
- /* Handle upshifting, downshifting and slash translation now */
+ /* Handle upshifting, downshifting and slash translation now */
 
     char *p;
     for ( p = out->value; *p; ++p)
@@ -690,7 +690,7 @@
         else if ( edits->downshift )
         {
             *p = tolower( *p );
- }
+ }
         if ( edits->to_slashes )
         {
             if ( *p == '\\')
@@ -720,14 +720,14 @@
     char axyb[] = "a$(xy)b";
     char azb[] = "a$($(z))b";
     char path[] = "$(p:W)";
-
+
     # ifdef OS_CYGWIN
     char cygpath[256];
     cygwin_conv_to_posix_path("c:\\foo\\bar", cygpath);
     # else
     char cygpath[] = "/cygdrive/c/foo/bar";
     # endif
-
+
     lol_init(lol);
     var_set("xy", list_new( list_new( L0, newstr( "x" ) ), newstr( "y" ) ), VAR_SET );
     var_set("z", list_new( L0, newstr( "xy" ) ), VAR_SET );
@@ -738,7 +738,7 @@
         assert( !strcmp( e2->string, l2->string ) );
     assert(l2 == 0 && e2 == 0);
     list_free(l);
-
+
     l = var_expand( 0, azb, azb + sizeof(azb) - 1, lol, 0 );
     for ( l2 = l, e2 = expected; l2 && e2; l2 = list_next(l2), e2 = list_next(e2) )
         assert( !strcmp( e2->string, l2->string ) );
@@ -753,15 +753,15 @@
     /* This has been reported to be the case if cygwin has been installed to C:\ */
     /* as opposed to C:\cygwin */
     /* Since case of the drive letter will not matter, we allow for both. */
- assert( 0 == strcmp( l->string, "c:\\foo\\bar" )
+ assert( 0 == strcmp( l->string, "c:\\foo\\bar" )
               || 0 == strcmp( l->string, "C:\\foo\\bar") );
- # else
+ # else
     assert( !strcmp( l->string, cygpath ) );
- # endif
+ # endif
     list_free(l);
 
     list_free(expected);
-
+
     lol_free(lol);
 }
 #endif

Modified: trunk/tools/jam/src/expand.h
==============================================================================
--- trunk/tools/jam/src/expand.h (original)
+++ trunk/tools/jam/src/expand.h 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -10,5 +10,5 @@
 
 #include "lists.h"
 
-LIST *var_expand( LIST *l, char *in, char *end, LOL *lol, int cancopyin );
+LIST *var_expand( LIST *l, char *in, char *end, LOL *lol, int cancopyin );
 void var_expand_unit_test();

Modified: trunk/tools/jam/src/filemac.c
==============================================================================
--- trunk/tools/jam/src/filemac.c (original)
+++ trunk/tools/jam/src/filemac.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -3,7 +3,7 @@
  *
  * This file is part of Jam - see jam.c for Copyright information.
  */
-
+
 /* This file is ALSO:
  * Copyright 2001-2004 David Abrahams.
  * Distributed under the Boost Software License, Version 1.0.
@@ -26,9 +26,9 @@
  *
  * External routines:
  *
- * file_dirscan() - scan a directory for files
- * file_time() - get timestamp of file, if not done by file_dirscan()
- * file_archscan() - scan an archive for files
+ * file_dirscan() - scan a directory for files
+ * file_time() - get timestamp of file, if not done by file_dirscan()
+ * file_archscan() - scan an archive for files
  *
  * File_dirscan() and file_archscan() call back a caller provided function
  * for each file found. A flag to this callback function lets file_dirscan()
@@ -45,23 +45,21 @@
 
 void CopyC2PStr(const char * cstr, StringPtr pstr)
 {
- int len;
-
- for (len = 0; *cstr && len<255; pstr[++len] = *cstr++)
- ;
-
- pstr[0] = len;
+ int len;
+ for ( len = 0; *cstr && len < 255; pstr[++len] = *cstr++ );
+ pstr[0] = len;
 }
 
+
 /*
  * file_dirscan() - scan a directory for files
  */
 
 void
-file_dirscan(
- char *dir,
- scanback func,
- void *closure )
+file_dirscan(
+ char *dir,
+ scanback func,
+ void *closure )
 {
     PATHNAME f;
     string filename[1];
@@ -69,10 +67,10 @@
 
     FSSpec spec;
     WDPBRec vol;
- Str63 volName;
+ Str63 volName;
     CInfoPBRec lastInfo;
     int index = 1;
-
+
     /* First enter directory itself */
 
     memset( (char *)&f, '\0', sizeof( f ) );
@@ -82,30 +80,30 @@
 
     if( DEBUG_BINDSCAN )
         printf( "scan directory %s\n", dir );
-
+
     /* Special case ":" - enter it */
 
     if( f.f_dir.len == 1 && f.f_dir.ptr[0] == ':' )
- (*func)( closure, dir, 0 /* not stat()'ed */, (time_t)0 );
+ (*func)( closure, dir, 0 /* not stat()'ed */, (time_t)0 );
 
     /* Now enter contents of directory */
 
     vol.ioNamePtr = volName;
-
+
     if( PBHGetVolSync( &vol ) )
         return;
 
     CopyC2PStr( dir, fullPath );
-
+
     if( FSMakeFSSpec( vol.ioWDVRefNum, vol.ioWDDirID, fullPath, &spec ) )
         return;
-
- lastInfo.dirInfo.ioVRefNum = spec.vRefNum;
- lastInfo.dirInfo.ioDrDirID = spec.parID;
- lastInfo.dirInfo.ioNamePtr = spec.name;
- lastInfo.dirInfo.ioFDirIndex = 0;
- lastInfo.dirInfo.ioACUser = 0;
-
+
+ lastInfo.dirInfo.ioVRefNum = spec.vRefNum;
+ lastInfo.dirInfo.ioDrDirID = spec.parID;
+ lastInfo.dirInfo.ioNamePtr = spec.name;
+ lastInfo.dirInfo.ioFDirIndex = 0;
+ lastInfo.dirInfo.ioACUser = 0;
+
     if( PBGetCatInfoSync(&lastInfo) )
         return;
 
@@ -113,20 +111,20 @@
         return;
 
     // ioDrDirID must be reset each time.
-
+
     spec.parID = lastInfo.dirInfo.ioDrDirID;
 
     string_new( filename );
     for( ;; )
     {
- lastInfo.dirInfo.ioVRefNum = spec.vRefNum;
- lastInfo.dirInfo.ioDrDirID = spec.parID;
- lastInfo.dirInfo.ioNamePtr = fullPath;
+ lastInfo.dirInfo.ioVRefNum = spec.vRefNum;
+ lastInfo.dirInfo.ioDrDirID = spec.parID;
+ lastInfo.dirInfo.ioNamePtr = fullPath;
         lastInfo.dirInfo.ioFDirIndex = index++;
-
+
         if( PBGetCatInfoSync(&lastInfo) )
             return;
-
+
         f.f_base.ptr = (char *)fullPath + 1;
         f.f_base.len = *fullPath;
 
@@ -142,31 +140,32 @@
  */
 
 int
-file_time(
- char *filename,
- time_t *time )
+file_time(
+ char *filename,
+ time_t *time )
 {
- struct stat statbuf;
+ struct stat statbuf;
+
+ if( stat( filename, &statbuf ) < 0 )
+ return -1;
 
- if( stat( filename, &statbuf ) < 0 )
- return -1;
+ *time = statbuf.st_mtime;
 
- *time = statbuf.st_mtime;
-
- return 0;
+ return 0;
 }
 
+
 int file_is_file(char* filename)
 {
- struct stat statbuf;
+ struct stat statbuf;
 
- if( stat( filename, &statbuf ) < 0 )
- return -1;
+ if( stat( filename, &statbuf ) < 0 )
+ return -1;
 
- if (S_ISREG(statbuf.st_mode))
+ if ( S_ISREG( statbuf.st_mode ) )
         return 1;
     else
- return 0;
+ return 0;
 }
 
 
@@ -176,9 +175,9 @@
 
 void
 file_archscan(
- char *archive,
- scanback func,
- void *closure )
+ char *archive,
+ scanback func,
+ void *closure )
 {
 }
 

Modified: trunk/tools/jam/src/filent.c
==============================================================================
--- trunk/tools/jam/src/filent.c (original)
+++ trunk/tools/jam/src/filent.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -25,7 +25,7 @@
 # include <dir.h>
 # include <dos.h>
 # endif
-# undef FILENAME /* cpp namespace collision */
+# undef FILENAME /* cpp namespace collision */
 # define _finddata_t ffblk
 # endif
 
@@ -38,9 +38,9 @@
  *
  * External routines:
  *
- * file_dirscan() - scan a directory for files
- * file_time() - get timestamp of file, if not done by file_dirscan()
- * file_archscan() - scan an archive for files
+ * file_dirscan() - scan a directory for files
+ * file_time() - get timestamp of file, if not done by file_dirscan()
+ * file_archscan() - scan an archive for files
  *
  * File_dirscan() and file_archscan() call back a caller provided function
  * for each file found. A flag to this callback function lets file_dirscan()
@@ -58,12 +58,12 @@
 
 void
 file_dirscan(
- char *dir,
- scanback func,
- void *closure )
+ char *dir,
+ scanback func,
+ void *closure )
 {
     PROFILE_ENTER(FILE_DIRSCAN);
-
+
     file_info_t * d = 0;
 
     dir = short_path_to_long_path( dir );
@@ -71,7 +71,7 @@
     /* First enter directory itself */
 
     d = file_query( dir );
-
+
     if ( ! d || ! d->is_dir )
     {
         PROFILE_EXIT(FILE_DIRSCAN);
@@ -90,7 +90,7 @@
         int d_length = strlen( d->name );
 
         memset( (char *)&f, '\0', sizeof( f ) );
-
+
         f.f_dir.ptr = d->name;
         f.f_dir.len = d_length;
 
@@ -128,7 +128,7 @@
         while( !ret )
         {
             file_info_t * ff = 0;
-
+
             f.f_base.ptr = finfo->ff_name;
             f.f_base.len = strlen( finfo->ff_name );
 
@@ -179,7 +179,7 @@
         # endif
         string_free( filename );
         string_free( filespec );
-
+
         d->files = files;
     }
 
@@ -203,7 +203,7 @@
             files = list_next( files );
         }
     }
-
+
     PROFILE_EXIT(FILE_DIRSCAN);
 }
 
@@ -231,8 +231,8 @@
 
 int
 file_time(
- char *filename,
- time_t *time )
+ char *filename,
+ time_t *time )
 {
     file_info_t * ff = file_query( filename );
     if ( !ff ) return -1;
@@ -254,19 +254,19 @@
 
 /* Straight from SunOS */
 
-#define ARMAG "!<arch>\n"
-#define SARMAG 8
+#define ARMAG "!<arch>\n"
+#define SARMAG 8
 
-#define ARFMAG "`\n"
+#define ARFMAG "`\n"
 
 struct ar_hdr {
- char ar_name[16];
- char ar_date[12];
- char ar_uid[6];
- char ar_gid[6];
- char ar_mode[8];
- char ar_size[10];
- char ar_fmag[2];
+ char ar_name[16];
+ char ar_date[12];
+ char ar_uid[6];
+ char ar_gid[6];
+ char ar_mode[8];
+ char ar_size[10];
+ char ar_fmag[2];
 };
 
 # define SARFMAG 2
@@ -274,98 +274,98 @@
 
 void
 file_archscan(
- char *archive,
- scanback func,
- void *closure )
+ char *archive,
+ scanback func,
+ void *closure )
 {
- struct ar_hdr ar_hdr;
- char *string_table = 0;
- char buf[ MAXJPATH ];
- long offset;
- int fd;
-
- if( ( fd = open( archive, O_RDONLY | O_BINARY, 0 ) ) < 0 )
- return;
-
- if( read( fd, buf, SARMAG ) != SARMAG ||
- strncmp( ARMAG, buf, SARMAG ) )
- {
- close( fd );
- return;
- }
-
- offset = SARMAG;
-
- if( DEBUG_BINDSCAN )
- printf( "scan archive %s\n", archive );
-
- while( read( fd, &ar_hdr, SARHDR ) == SARHDR &&
- !memcmp( ar_hdr.ar_fmag, ARFMAG, SARFMAG ) )
- {
- long lar_date;
- long lar_size;
- char *name = 0;
- char *endname;
- char *c;
-
- sscanf( ar_hdr.ar_date, "%ld", &lar_date );
- sscanf( ar_hdr.ar_size, "%ld", &lar_size );
-
- lar_size = ( lar_size + 1 ) & ~1;
-
- if (ar_hdr.ar_name[0] == '/' && ar_hdr.ar_name[1] == '/' )
- {
- /* this is the "string table" entry of the symbol table,
- ** which holds strings of filenames that are longer than
- ** 15 characters (ie. don't fit into a ar_name
- */
-
- string_table = BJAM_MALLOC_ATOMIC(lar_size+1);
- if (read(fd, string_table, lar_size) != lar_size)
- printf("error reading string table\n");
- string_table[lar_size] = '\0';
- offset += SARHDR + lar_size;
- continue;
- }
- else if (ar_hdr.ar_name[0] == '/' && ar_hdr.ar_name[1] != ' ')
- {
- /* Long filenames are recognized by "/nnnn" where nnnn is
- ** the offset of the string in the string table represented
- ** in ASCII decimals.
- */
-
- name = string_table + atoi( ar_hdr.ar_name + 1 );
- for ( endname = name; *endname && *endname != '\n'; ++endname) {}
- }
- else
- {
- /* normal name */
- name = ar_hdr.ar_name;
- endname = name + sizeof( ar_hdr.ar_name );
- }
-
- /* strip trailing white-space, slashes, and backslashes */
-
- while( endname-- > name )
- if( !isspace(*endname) && *endname != '\\' && *endname != '/' )
- break;
- *++endname = 0;
-
- /* strip leading directory names, an NT specialty */
-
- if( c = strrchr( name, '/' ) )
- name = c + 1;
- if( c = strrchr( name, '\\' ) )
- name = c + 1;
-
- sprintf( buf, "%s(%.*s)", archive, endname - name, name );
- (*func)( closure, buf, 1 /* time valid */, (time_t)lar_date );
-
- offset += SARHDR + lar_size;
- lseek( fd, offset, 0 );
- }
+ struct ar_hdr ar_hdr;
+ char *string_table = 0;
+ char buf[ MAXJPATH ];
+ long offset;
+ int fd;
+
+ if( ( fd = open( archive, O_RDONLY | O_BINARY, 0 ) ) < 0 )
+ return;
+
+ if( read( fd, buf, SARMAG ) != SARMAG ||
+ strncmp( ARMAG, buf, SARMAG ) )
+ {
+ close( fd );
+ return;
+ }
+
+ offset = SARMAG;
+
+ if( DEBUG_BINDSCAN )
+ printf( "scan archive %s\n", archive );
+
+ while( read( fd, &ar_hdr, SARHDR ) == SARHDR &&
+ !memcmp( ar_hdr.ar_fmag, ARFMAG, SARFMAG ) )
+ {
+ long lar_date;
+ long lar_size;
+ char *name = 0;
+ char *endname;
+ char *c;
+
+ sscanf( ar_hdr.ar_date, "%ld", &lar_date );
+ sscanf( ar_hdr.ar_size, "%ld", &lar_size );
+
+ lar_size = ( lar_size + 1 ) & ~1;
+
+ if (ar_hdr.ar_name[0] == '/' && ar_hdr.ar_name[1] == '/' )
+ {
+ /* this is the "string table" entry of the symbol table,
+ ** which holds strings of filenames that are longer than
+ ** 15 characters (ie. don't fit into a ar_name
+ */
+
+ string_table = BJAM_MALLOC_ATOMIC(lar_size+1);
+ if (read(fd, string_table, lar_size) != lar_size)
+ printf("error reading string table\n");
+ string_table[lar_size] = '\0';
+ offset += SARHDR + lar_size;
+ continue;
+ }
+ else if (ar_hdr.ar_name[0] == '/' && ar_hdr.ar_name[1] != ' ')
+ {
+ /* Long filenames are recognized by "/nnnn" where nnnn is
+ ** the offset of the string in the string table represented
+ ** in ASCII decimals.
+ */
+
+ name = string_table + atoi( ar_hdr.ar_name + 1 );
+ for ( endname = name; *endname && *endname != '\n'; ++endname) {}
+ }
+ else
+ {
+ /* normal name */
+ name = ar_hdr.ar_name;
+ endname = name + sizeof( ar_hdr.ar_name );
+ }
+
+ /* strip trailing white-space, slashes, and backslashes */
+
+ while( endname-- > name )
+ if( !isspace(*endname) && *endname != '\\' && *endname != '/' )
+ break;
+ *++endname = 0;
+
+ /* strip leading directory names, an NT specialty */
+
+ if( c = strrchr( name, '/' ) )
+ name = c + 1;
+ if( c = strrchr( name, '\\' ) )
+ name = c + 1;
+
+ sprintf( buf, "%s(%.*s)", archive, endname - name, name );
+ (*func)( closure, buf, 1 /* time valid */, (time_t)lar_date );
+
+ offset += SARHDR + lar_size;
+ lseek( fd, offset, 0 );
+ }
 
- close( fd );
+ close( fd );
 }
 
 # endif /* NT */

Modified: trunk/tools/jam/src/fileos2.c
==============================================================================
--- trunk/tools/jam/src/fileos2.c (original)
+++ trunk/tools/jam/src/fileos2.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -25,9 +25,9 @@
  *
  * External routines:
  *
- * file_dirscan() - scan a directory for files
- * file_time() - get timestamp of file, if not done by file_dirscan()
- * file_archscan() - scan an archive for files
+ * file_dirscan() - scan a directory for files
+ * file_time() - get timestamp of file, if not done by file_dirscan()
+ * file_archscan() - scan an archive for files
  *
  * File_dirscan() and file_archscan() call back a caller provided function
  * for each file found. A flag to this callback function lets file_dirscan()
@@ -45,10 +45,10 @@
  */
 
 void
-file_dirscan(
- char *dir,
- scanback func,
- void *closure )
+file_dirscan(
+ char *dir,
+ scanback func,
+ void *closure )
 {
     PATHNAME f;
     string filespec[1];
@@ -69,9 +69,9 @@
     string_copy( filespec, dir );
 
     if( f.f_dir.len == 1 && f.f_dir.ptr[0] == '\\' )
- (*func)( closure, dir, 0 /* not stat()'ed */, (time_t)0 );
+ (*func)( closure, dir, 0 /* not stat()'ed */, (time_t)0 );
     else if( f.f_dir.len == 3 && f.f_dir.ptr[1] == ':' )
- (*func)( closure, dir, 0 /* not stat()'ed */, (time_t)0 );
+ (*func)( closure, dir, 0 /* not stat()'ed */, (time_t)0 );
     else
         string_push_back( filespec, '/' );
 
@@ -92,7 +92,6 @@
         string_new( filename );
         do
         {
-
             f.f_base.ptr = finfo->name;
             f.f_base.len = strlen( finfo->name );
 
@@ -111,27 +110,27 @@
 
 int
 file_time(
- char *filename,
- time_t *time )
+ char *filename,
+ time_t *time )
 {
- /* This is called on OS2, not NT. */
- /* NT fills in the time in the dirscan. */
+ /* This is called on OS2, not NT. */
+ /* NT fills in the time in the dirscan. */
 
- struct stat statbuf;
+ struct stat statbuf;
 
- if( stat( filename, &statbuf ) < 0 )
- return -1;
+ if( stat( filename, &statbuf ) < 0 )
+ return -1;
 
- *time = statbuf.st_mtime;
+ *time = statbuf.st_mtime;
 
- return 0;
+ return 0;
 }
 
 void
 file_archscan(
- char *archive,
- scanback func,
- void *closure )
+ char *archive,
+ scanback func,
+ void *closure )
 {
 }
 

Modified: trunk/tools/jam/src/filesys.c
==============================================================================
--- trunk/tools/jam/src/filesys.c (original)
+++ trunk/tools/jam/src/filesys.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -12,16 +12,16 @@
 {
     if( DEBUG_SEARCH )
     {
- printf("build file: ");
- if( f->f_root.len )
+ printf("build file: ");
+ if( f->f_root.len )
             printf( "root = '%.*s' ", f->f_root.len, f->f_root.ptr );
- if( f->f_dir.len )
+ if( f->f_dir.len )
             printf( "dir = '%.*s' ", f->f_dir.len, f->f_dir.ptr );
- if( f->f_base.len )
+ if( f->f_base.len )
             printf( "base = '%.*s' ", f->f_base.len, f->f_base.ptr );
     printf( "\n" );
     }
-
+
     /* Start with the grist. If the current grist isn't */
     /* surrounded by <>'s, add them. */
 
@@ -41,10 +41,10 @@
 file_info_t * file_info(char * filename)
 {
     file_info_t finfo_, *finfo = &finfo_;
-
+
     if ( !filecache_hash )
         filecache_hash = hashinit( sizeof( file_info_t ), "file_info" );
-
+
     finfo->name = filename;
     if ( hashenter( filecache_hash, (HASHDATA**)&finfo ) )
     {
@@ -56,7 +56,7 @@
         finfo->time = 0;
         finfo->files = 0;
     }
-
+
     return finfo;
 }
 

Modified: trunk/tools/jam/src/filesys.h
==============================================================================
--- trunk/tools/jam/src/filesys.h (original)
+++ trunk/tools/jam/src/filesys.h 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -11,7 +11,7 @@
  */
 
 /*
- * filesys.h - OS specific file routines
+ * filesys.h - OS specific file routines
  */
 
 #ifndef FILESYS_DWA20011025_H

Modified: trunk/tools/jam/src/fileunix.c
==============================================================================
--- trunk/tools/jam/src/fileunix.c (original)
+++ trunk/tools/jam/src/fileunix.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -31,7 +31,7 @@
 # if defined( OS_SEQUENT ) || \
      defined( OS_DGUX ) || \
      defined( OS_SCO ) || \
- defined( OS_ISC )
+ defined( OS_ISC )
 # define PORTAR 1
 # endif
 
@@ -46,10 +46,10 @@
 /* need unistd for rhapsody's proper lseek */
 # include <sys/dir.h>
 # include <unistd.h>
-# define STRUCT_DIRENT struct direct
+# define STRUCT_DIRENT struct direct
 # else
 # include <dirent.h>
-# define STRUCT_DIRENT struct dirent
+# define STRUCT_DIRENT struct dirent
 # endif
 
 # ifdef OS_COHERENT
@@ -58,21 +58,21 @@
 # endif
 
 # if defined( OS_MVS ) || \
- defined( OS_INTERIX )
+ defined( OS_INTERIX )
 
-#define ARMAG "!<arch>\n"
-#define SARMAG 8
-#define ARFMAG "`\n"
+#define ARMAG "!<arch>\n"
+#define SARMAG 8
+#define ARFMAG "`\n"
 
-struct ar_hdr /* archive file member header - printable ascii */
+struct ar_hdr /* archive file member header - printable ascii */
 {
- char ar_name[16]; /* file member name - `/' terminated */
- char ar_date[12]; /* file member date - decimal */
- char ar_uid[6]; /* file member user id - decimal */
- char ar_gid[6]; /* file member group id - decimal */
- char ar_mode[8]; /* file member mode - octal */
- char ar_size[10]; /* file member size - decimal */
- char ar_fmag[2]; /* ARFMAG - string to end header */
+ char ar_name[16]; /* file member name - `/' terminated */
+ char ar_date[12]; /* file member date - decimal */
+ char ar_uid[6]; /* file member user id - decimal */
+ char ar_gid[6]; /* file member group id - decimal */
+ char ar_mode[8]; /* file member mode - octal */
+ char ar_size[10]; /* file member size - decimal */
+ char ar_fmag[2]; /* ARFMAG - string to end header */
 };
 
 # define HAVE_AR
@@ -90,21 +90,21 @@
 # ifdef OS_AIX
 /* Define those for AIX to get the definitions for both the small and the
  * big variant of the archive file format. */
-# define __AR_SMALL__
-# define __AR_BIG__
+# define __AR_SMALL__
+# define __AR_BIG__
 # endif
 
 # include <ar.h>
-# endif
+# endif
 
 /*
  * fileunix.c - manipulate file names and scan directories on UNIX/AmigaOS
  *
  * External routines:
  *
- * file_dirscan() - scan a directory for files
- * file_time() - get timestamp of file, if not done by file_dirscan()
- * file_archscan() - scan an archive for files
+ * file_dirscan() - scan a directory for files
+ * file_time() - get timestamp of file, if not done by file_dirscan()
+ * file_archscan() - scan an archive for files
  *
  * File_dirscan() and file_archscan() call back a caller provided function
  * for each file found. A flag to this callback function lets file_dirscan()
@@ -124,17 +124,17 @@
  */
 
 void
-file_dirscan(
- char *dir,
- scanback func,
- void *closure )
+file_dirscan(
+ char *dir,
+ scanback func,
+ void *closure )
 {
     PROFILE_ENTER(FILE_DIRSCAN);
-
+
     file_info_t * d = 0;
 
     d = file_query( dir );
-
+
     if ( ! d || ! d->is_dir )
     {
         PROFILE_EXIT(FILE_DIRSCAN);
@@ -173,7 +173,7 @@
         while( dirent = readdir( dd ) )
         {
             file_info_t * ff = 0;
-
+
             # ifdef old_sinix
             /* Broken structure definition on sinix. */
             f.f_base.ptr = dirent->d_name - 2;
@@ -191,7 +191,7 @@
         string_free( filename );
 
         closedir( dd );
-
+
         d->files = files;
     }
 
@@ -213,7 +213,7 @@
             files = list_next( files );
         }
     }
-
+
     PROFILE_EXIT(FILE_DIRSCAN);
 }
 
@@ -241,8 +241,8 @@
 
 int
 file_time(
- char *filename,
- time_t *time )
+ char *filename,
+ time_t *time )
 {
     file_info_t * ff = file_query( filename );
     if ( !ff ) return -1;
@@ -262,109 +262,109 @@
  * file_archscan() - scan an archive for files
  */
 
-# ifndef AIAMAG /* God-fearing UNIX */
+# ifndef AIAMAG /* God-fearing UNIX */
 
 # define SARFMAG 2
 # define SARHDR sizeof( struct ar_hdr )
 
 void
 file_archscan(
- char *archive,
- scanback func,
- void *closure )
+ char *archive,
+ scanback func,
+ void *closure )
 {
 # ifndef NO_AR
- struct ar_hdr ar_hdr;
- char buf[ MAXJPATH ];
- long offset;
- char *string_table = 0;
- int fd;
-
- if( ( fd = open( archive, O_RDONLY, 0 ) ) < 0 )
- return;
-
- if( read( fd, buf, SARMAG ) != SARMAG ||
- strncmp( ARMAG, buf, SARMAG ) )
- {
- close( fd );
- return;
- }
+ struct ar_hdr ar_hdr;
+ char buf[ MAXJPATH ];
+ long offset;
+ char *string_table = 0;
+ int fd;
+
+ if( ( fd = open( archive, O_RDONLY, 0 ) ) < 0 )
+ return;
 
- offset = SARMAG;
+ if( read( fd, buf, SARMAG ) != SARMAG ||
+ strncmp( ARMAG, buf, SARMAG ) )
+ {
+ close( fd );
+ return;
+ }
 
- if( DEBUG_BINDSCAN )
- printf( "scan archive %s\n", archive );
+ offset = SARMAG;
+
+ if( DEBUG_BINDSCAN )
+ printf( "scan archive %s\n", archive );
 
- while( read( fd, &ar_hdr, SARHDR ) == SARHDR
- && ! ( memcmp( ar_hdr.ar_fmag, ARFMAG, SARFMAG )
+ while( read( fd, &ar_hdr, SARHDR ) == SARHDR
+ && ! ( memcmp( ar_hdr.ar_fmag, ARFMAG, SARFMAG )
 #ifdef ARFZMAG
- /* OSF also has a compressed format */
- && memcmp( ar_hdr.ar_fmag, ARFZMAG, SARFMAG )
+ /* OSF also has a compressed format */
+ && memcmp( ar_hdr.ar_fmag, ARFZMAG, SARFMAG )
 #endif
- ) )
- {
- char lar_name_[257];
+ ) )
+ {
+ char lar_name_[257];
             char* lar_name = lar_name_ + 1;
- long lar_date;
- long lar_size;
- long lar_offset;
- char *c;
- char *src, *dest;
-
- strncpy( lar_name, ar_hdr.ar_name, sizeof(ar_hdr.ar_name) );
-
- sscanf( ar_hdr.ar_date, "%ld", &lar_date );
- sscanf( ar_hdr.ar_size, "%ld", &lar_size );
-
- if (ar_hdr.ar_name[0] == '/')
- {
- if (ar_hdr.ar_name[1] == '/')
- {
- /* this is the "string table" entry of the symbol table,
- ** which holds strings of filenames that are longer than
- ** 15 characters (ie. don't fit into a ar_name
- */
-
- string_table = (char *)BJAM_MALLOC_ATOMIC(lar_size);
- lseek(fd, offset + SARHDR, 0);
- if (read(fd, string_table, lar_size) != lar_size)
- printf("error reading string table\n");
- }
- else if (string_table && ar_hdr.ar_name[1] != ' ')
- {
- /* Long filenames are recognized by "/nnnn" where nnnn is
- ** the offset of the string in the string table represented
- ** in ASCII decimals.
- */
- dest = lar_name;
- lar_offset = atoi(lar_name + 1);
- src = &string_table[lar_offset];
- while (*src != '/')
- *dest++ = *src++;
- *dest = '/';
- }
- }
-
- c = lar_name - 1;
- while( *++c != ' ' && *c != '/' )
- ;
- *c = '\0';
-
- if ( DEBUG_BINDSCAN )
- printf( "archive name %s found\n", lar_name );
-
- sprintf( buf, "%s(%s)", archive, lar_name );
-
- (*func)( closure, buf, 1 /* time valid */, (time_t)lar_date );
-
- offset += SARHDR + ( ( lar_size + 1 ) & ~1 );
- lseek( fd, offset, 0 );
- }
+ long lar_date;
+ long lar_size;
+ long lar_offset;
+ char *c;
+ char *src, *dest;
 
- if (string_table)
- BJAM_FREE(string_table);
+ strncpy( lar_name, ar_hdr.ar_name, sizeof(ar_hdr.ar_name) );
 
- close( fd );
+ sscanf( ar_hdr.ar_date, "%ld", &lar_date );
+ sscanf( ar_hdr.ar_size, "%ld", &lar_size );
+
+ if (ar_hdr.ar_name[0] == '/')
+ {
+ if (ar_hdr.ar_name[1] == '/')
+ {
+ /* this is the "string table" entry of the symbol table,
+ ** which holds strings of filenames that are longer than
+ ** 15 characters (ie. don't fit into a ar_name
+ */
+
+ string_table = (char *)BJAM_MALLOC_ATOMIC(lar_size);
+ lseek(fd, offset + SARHDR, 0);
+ if (read(fd, string_table, lar_size) != lar_size)
+ printf("error reading string table\n");
+ }
+ else if (string_table && ar_hdr.ar_name[1] != ' ')
+ {
+ /* Long filenames are recognized by "/nnnn" where nnnn is
+ ** the offset of the string in the string table represented
+ ** in ASCII decimals.
+ */
+ dest = lar_name;
+ lar_offset = atoi(lar_name + 1);
+ src = &string_table[lar_offset];
+ while (*src != '/')
+ *dest++ = *src++;
+ *dest = '/';
+ }
+ }
+
+ c = lar_name - 1;
+ while( *++c != ' ' && *c != '/' )
+ ;
+ *c = '\0';
+
+ if ( DEBUG_BINDSCAN )
+ printf( "archive name %s found\n", lar_name );
+
+ sprintf( buf, "%s(%s)", archive, lar_name );
+
+ (*func)( closure, buf, 1 /* time valid */, (time_t)lar_date );
+
+ offset += SARHDR + ( ( lar_size + 1 ) & ~1 );
+ lseek( fd, offset, 0 );
+ }
+
+ if (string_table)
+ BJAM_FREE(string_table);
+
+ close( fd );
 
 # endif /* NO_AR */
 
@@ -389,24 +389,24 @@
         return;
 
     sscanf( fl_hdr.fl_fstmoff, "%ld", &offset );
-
+
     if( DEBUG_BINDSCAN )
         printf( "scan archive %s\n", archive );
-
+
     while( offset > 0
            && lseek( fd, offset, 0 ) >= 0
            && read( fd, &ar_hdr, sizeof( ar_hdr ) ) >= sizeof( ar_hdr.hdr ) )
     {
         long lar_date;
         int lar_namlen;
-
+
         sscanf( ar_hdr.hdr.ar_namlen, "%d", &lar_namlen );
         sscanf( ar_hdr.hdr.ar_date, "%ld", &lar_date );
         sscanf( ar_hdr.hdr.ar_nxtmem, "%ld", &offset );
-
+
         if( !lar_namlen )
             continue;
-
+
         ar_hdr.hdr._ar_name.ar_name[ lar_namlen ] = '\0';
 
         sprintf( buf, "%s(%s)", archive, ar_hdr.hdr._ar_name.ar_name );
@@ -471,7 +471,7 @@
 
     if(( fd = open(archive, O_RDONLY, 0)) < 0)
         return;
-
+
     if(read( fd, fl_magic, SAIAMAG) != SAIAMAG
        || lseek(fd, 0, SEEK_SET) == -1)
     {
@@ -491,7 +491,7 @@
         file_archscan_big(fd, archive, func, closure);
     }
 #endif
-
+
     close( fd );
 }
 

Modified: trunk/tools/jam/src/filevms.c
==============================================================================
--- trunk/tools/jam/src/filevms.c (original)
+++ trunk/tools/jam/src/filevms.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -21,9 +21,9 @@
  *
  * External routines:
  *
- * file_dirscan() - scan a directory for files
- * file_time() - get timestamp of file, if not done by file_dirscan()
- * file_archscan() - scan an archive for files
+ * file_dirscan() - scan a directory for files
+ * file_time() - get timestamp of file, if not done by file_dirscan()
+ * file_archscan() - scan an archive for files
  *
  * File_dirscan() and file_archscan() call back a caller provided function
  * for each file found. A flag to this callback function lets file_dirscan()
@@ -53,45 +53,45 @@
 /* Supply missing prototypes for lbr$-routines*/
 
 #ifdef __cplusplus
-extern "C" {
+extern "C" {
 #endif /* __cplusplus */
 
-int lbr$set_module(
- void **,
- unsigned long *,
- struct dsc$descriptor_s *,
- unsigned short *,
- void * );
+int lbr$set_module(
+ void **,
+ unsigned long *,
+ struct dsc$descriptor_s *,
+ unsigned short *,
+ void * );
 
 int lbr$open( void **,
- struct dsc$descriptor_s *,
- void *,
- void *,
- void *,
- void *,
- void * );
+ struct dsc$descriptor_s *,
+ void *,
+ void *,
+ void *,
+ void *,
+ void * );
 
 int lbr$ini_control(
- void **,
- unsigned long *,
- unsigned long *,
- void * );
+ void **,
+ unsigned long *,
+ unsigned long *,
+ void * );
 
 int lbr$get_index(
- void **,
- unsigned long *,
- int (*func)( struct dsc$descriptor_s *, unsigned long *),
- void * );
+ void **,
+ unsigned long *,
+ int (*func)( struct dsc$descriptor_s *, unsigned long *),
+ void * );
 
 int lbr$close(
- void ** );
+ void ** );
 
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
 
 static void
-file_cvttime(
+file_cvttime(
     unsigned int *curtime,
     time_t *unixtime )
 {
@@ -108,10 +108,10 @@
 # define min( a,b ) ((a)<(b)?(a):(b))
 
 void
-file_dirscan(
- char *dir,
- scanback func,
- void *closure )
+file_dirscan(
+ char *dir,
+ scanback func,
+ void *closure )
 {
 
     struct FAB xfab;
@@ -129,8 +129,8 @@
     f.f_root.ptr = dir;
     f.f_root.len = strlen( dir );
 
- /* get the input file specification
- */
+ /* get the input file specification
+ */
     xnam = cc$rms_nam;
     xnam.nam$l_esa = esa;
     xnam.nam$b_ess = sizeof( esa ) - 1;
@@ -138,26 +138,26 @@
     xnam.nam$b_rss = min( sizeof( filename ) - 1, NAM$C_MAXRSS );
 
     xab = cc$rms_xabdat; /* initialize extended attributes */
- xab.xab$b_cod = XAB$C_DAT; /* ask for date */
+ xab.xab$b_cod = XAB$C_DAT; /* ask for date */
     xab.xab$l_nxt = NULL; /* terminate XAB chain */
 
     xfab = cc$rms_fab;
     xfab.fab$l_dna = DEFAULT_FILE_SPECIFICATION;
     xfab.fab$b_dns = sizeof( DEFAULT_FILE_SPECIFICATION ) - 1;
     xfab.fab$l_fop = FAB$M_NAM;
- xfab.fab$l_fna = dir; /* address of file name */
- xfab.fab$b_fns = strlen( dir ); /* length of file name */
- xfab.fab$l_nam = &xnam; /* address of NAB block */
+ xfab.fab$l_fna = dir; /* address of file name */
+ xfab.fab$b_fns = strlen( dir ); /* length of file name */
+ xfab.fab$l_nam = &xnam; /* address of NAB block */
     xfab.fab$l_xab = (char *)&xab; /* address of XAB block */
 
 
     status = sys$parse( &xfab );
 
     if( DEBUG_BINDSCAN )
- printf( "scan directory %s\n", dir );
+ printf( "scan directory %s\n", dir );
 
     if ( !( status & 1 ) )
- return;
+ return;
 
 
 
@@ -165,84 +165,84 @@
 
     if( !strcmp( dir, "[000000]" ) )
     {
- (*func)( closure, "[000000]", 1 /* time valid */, 1 /* old but true */ );
+ (*func)( closure, "[000000]", 1 /* time valid */, 1 /* old but true */ );
     }
 
     /* Add bogus directory for [] */
 
     if( !strcmp( dir, "[]" ) )
     {
- (*func)( closure, "[]", 1 /* time valid */, 1 /* old but true */ );
- (*func)( closure, "[-]", 1 /* time valid */, 1 /* old but true */ );
+ (*func)( closure, "[]", 1 /* time valid */, 1 /* old but true */ );
+ (*func)( closure, "[-]", 1 /* time valid */, 1 /* old but true */ );
     }
 
     string_new( filename2 );
     while ( (status = sys$search( &xfab )) & 1 )
     {
- char *s;
- time_t time;
+ char *s;
+ time_t time;
 
- /* "I think that might work" - eml */
+ /* "I think that might work" - eml */
 
- sys$open( &xfab );
- sys$close( &xfab );
+ sys$open( &xfab );
+ sys$close( &xfab );
 
- file_cvttime( (unsigned int *)&xab.xab$q_rdt, &time );
-
- filename[xnam.nam$b_rsl] = '\0';
-
- /* What we do with the name depends on the suffix: */
- /* .dir is a directory */
- /* .xxx is a file with a suffix */
- /* . is no suffix at all */
-
- if( xnam.nam$b_type == 4 && !strncmp( xnam.nam$l_type, ".DIR", 4 ) )
- {
- /* directory */
- sprintf( dirname, "[.%.*s]", xnam.nam$b_name, xnam.nam$l_name );
- f.f_dir.ptr = dirname;
- f.f_dir.len = strlen( dirname );
- f.f_base.ptr = 0;
- f.f_base.len = 0;
- f.f_suffix.ptr = 0;
- f.f_suffix.len = 0;
- }
- else
- {
- /* normal file with a suffix */
- f.f_dir.ptr = 0;
- f.f_dir.len = 0;
- f.f_base.ptr = xnam.nam$l_name;
- f.f_base.len = xnam.nam$b_name;
- f.f_suffix.ptr = xnam.nam$l_type;
- f.f_suffix.len = xnam.nam$b_type;
- }
+ file_cvttime( (unsigned int *)&xab.xab$q_rdt, &time );
+
+ filename[xnam.nam$b_rsl] = '\0';
+
+ /* What we do with the name depends on the suffix: */
+ /* .dir is a directory */
+ /* .xxx is a file with a suffix */
+ /* . is no suffix at all */
+
+ if( xnam.nam$b_type == 4 && !strncmp( xnam.nam$l_type, ".DIR", 4 ) )
+ {
+ /* directory */
+ sprintf( dirname, "[.%.*s]", xnam.nam$b_name, xnam.nam$l_name );
+ f.f_dir.ptr = dirname;
+ f.f_dir.len = strlen( dirname );
+ f.f_base.ptr = 0;
+ f.f_base.len = 0;
+ f.f_suffix.ptr = 0;
+ f.f_suffix.len = 0;
+ }
+ else
+ {
+ /* normal file with a suffix */
+ f.f_dir.ptr = 0;
+ f.f_dir.len = 0;
+ f.f_base.ptr = xnam.nam$l_name;
+ f.f_base.len = xnam.nam$b_name;
+ f.f_suffix.ptr = xnam.nam$l_type;
+ f.f_suffix.len = xnam.nam$b_type;
+ }
 
         string_truncate( filename2, 0 );
- path_build( &f, filename2, 0 );
+ path_build( &f, filename2, 0 );
 
- /*
- if( DEBUG_SEARCH )
- printf("root '%s' base %.*s suf %.*s = %s\n",
- dir,
- xnam.nam$b_name, xnam.nam$l_name,
- xnam.nam$b_type, xnam.nam$l_type,
- filename2);
- */
+ /*
+ if( DEBUG_SEARCH )
+ printf("root '%s' base %.*s suf %.*s = %s\n",
+ dir,
+ xnam.nam$b_name, xnam.nam$l_name,
+ xnam.nam$b_type, xnam.nam$l_type,
+ filename2);
+ */
 
- (*func)( closure, filename2->value, 1 /* time valid */, time );
+ (*func)( closure, filename2->value, 1 /* time valid */, time );
     }
     string_free( filename2 );
-}
+}
 
 int
 file_time(
- char *filename,
- time_t *time )
+ char *filename,
+ time_t *time )
 {
- /* This should never be called, as all files are */
- /* timestampped in file_dirscan() and file_archscan() */
- return -1;
+ /* This should never be called, as all files are */
+ /* timestampped in file_dirscan() and file_archscan() */
+ return -1;
 }
 
 static char *VMS_archive = 0;
@@ -251,12 +251,12 @@
 static void *context;
 
 static int
-file_archmember(
+file_archmember(
     struct dsc$descriptor_s *module,
     unsigned long *rfa )
 {
     static struct dsc$descriptor_s bufdsc =
- {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, NULL};
+ {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, NULL};
 
     struct mhddef *mhd;
     char filename[128];
@@ -271,17 +271,17 @@
     bufdsc.dsc$a_pointer = filename;
     bufdsc.dsc$w_length = sizeof( filename );
     status = lbr$set_module( &context, rfa, &bufdsc,
- &bufdsc.dsc$w_length, NULL );
+ &bufdsc.dsc$w_length, NULL );
 
     if ( !(status & 1) )
- return ( 1 );
+ return ( 1 );
 
     mhd = (struct mhddef *)filename;
 
     file_cvttime( &mhd->mhd$l_datim, &library_date );
 
     for ( i = 0, p = module->dsc$a_pointer; i < module->dsc$w_length; i++, p++ )
- filename[i] = *p;
+ filename[i] = *p;
 
     filename[i] = '\0';
 
@@ -294,12 +294,12 @@
 
 void
 file_archscan(
- char *archive,
- scanback func,
- void *closure )
+ char *archive,
+ scanback func,
+ void *closure )
 {
     static struct dsc$descriptor_s library =
- {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, NULL};
+ {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, NULL};
 
     unsigned long lfunc = LBR$C_READ;
     unsigned long typ = LBR$C_TYP_UNK;
@@ -313,14 +313,14 @@
 
     status = lbr$ini_control( &context, &lfunc, &typ, NULL );
     if ( !( status & 1 ) )
- return;
+ return;
 
     library.dsc$a_pointer = archive;
     library.dsc$w_length = strlen( archive );
 
     status = lbr$open( &context, &library, NULL, NULL, NULL, NULL, NULL );
     if ( !( status & 1 ) )
- return;
+ return;
 
     (void) lbr$get_index( &context, &index, file_archmember, NULL );
 

Modified: trunk/tools/jam/src/frames.c
==============================================================================
--- trunk/tools/jam/src/frames.c (original)
+++ trunk/tools/jam/src/frames.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -1,4 +1,4 @@
-/*
+/*
  * Copyright 2001-2004 David Abrahams.
  * Distributed under the Boost Software License, Version 1.0.
  * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)

Modified: trunk/tools/jam/src/frames.h
==============================================================================
--- trunk/tools/jam/src/frames.h (original)
+++ trunk/tools/jam/src/frames.h 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -1,4 +1,4 @@
-/*
+/*
  * Copyright 2001-2004 David Abrahams.
  * Distributed under the Boost Software License, Version 1.0.
  * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)

Modified: trunk/tools/jam/src/glob.c
==============================================================================
--- trunk/tools/jam/src/glob.c (original)
+++ trunk/tools/jam/src/glob.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -1,5 +1,5 @@
 /*
- * Copyright 1994 Christopher Seiwald. All rights reserved.
+ * Copyright 1994 Christopher Seiwald. All rights reserved.
  *
  * This file is part of Jam - see jam.c for Copyright information.
  */
@@ -9,25 +9,25 @@
  *
  * Understands the following patterns:
  *
- * * any number of characters
- * ? any single character
- * [a-z] any single character in the range a-z
- * [^a-z] any single character not in the range a-z
- * \x match x
- *
+ * * any number of characters
+ * ? any single character
+ * [a-z] any single character in the range a-z
+ * [^a-z] any single character not in the range a-z
+ * \x match x
+ *
  * External functions:
  *
- * glob() - match a string against a simple pattern
+ * glob() - match a string against a simple pattern
  *
  * Internal functions:
  *
- * globchars() - build a bitlist to check for character group match
+ * globchars() - build a bitlist to check for character group match
  */
 
 # include "jam.h"
 
 # define CHECK_BIT( tab, bit ) ( tab[ (bit)/8 ] & (1<<( (bit)%8 )) )
-# define BITLISTSIZE 16 /* bytes used for [chars] in compiled expr */
+# define BITLISTSIZE 16 /* bytes used for [chars] in compiled expr */
 
 static void globchars( char *s, char *e, char *b );
 
@@ -37,121 +37,117 @@
 
 int
 glob(
- register char *c,
- register char *s )
+ register char *c,
+ register char *s )
 {
- char bitlist[ BITLISTSIZE ];
- char *here;
+ char bitlist[ BITLISTSIZE ];
+ char *here;
 
- for( ;; )
- switch( *c++ )
- {
- case '\0':
- return *s ? -1 : 0;
+ for( ;; )
+ switch( *c++ )
+ {
+ case '\0':
+ return *s ? -1 : 0;
 
- case '?':
- if( !*s++ )
- return 1;
- break;
+ case '?':
+ if( !*s++ )
+ return 1;
+ break;
 
- case '[':
- /* scan for matching ] */
+ case '[':
+ /* scan for matching ] */
 
- here = c;
- do if( !*c++ )
- return 1;
- while( here == c || *c != ']' );
- c++;
+ here = c;
+ do if( !*c++ )
+ return 1;
+ while( here == c || *c != ']' );
+ c++;
 
- /* build character class bitlist */
+ /* build character class bitlist */
 
- globchars( here, c, bitlist );
+ globchars( here, c, bitlist );
 
- if( !CHECK_BIT( bitlist, *(unsigned char *)s ) )
- return 1;
- s++;
- break;
+ if( !CHECK_BIT( bitlist, *(unsigned char *)s ) )
+ return 1;
+ s++;
+ break;
 
- case '*':
- here = s;
+ case '*':
+ here = s;
 
- while( *s )
- s++;
+ while ( *s )
+ s++;
 
- /* Try to match the rest of the pattern in a recursive */
- /* call. If the match fails we'll back up chars, retrying. */
+ /* Try to match the rest of the pattern in a recursive */
+ /* call. If the match fails we'll back up chars, retrying. */
 
- while( s != here )
- {
- int r;
+ while( s != here )
+ {
+ int r;
 
- /* A fast path for the last token in a pattern */
+ /* A fast path for the last token in a pattern */
 
- r = *c ? glob( c, s ) : *s ? -1 : 0;
+ r = *c ? glob( c, s ) : *s ? -1 : 0;
 
- if( !r )
- return 0;
- else if( r < 0 )
- return 1;
+ if( !r )
+ return 0;
+ else if( r < 0 )
+ return 1;
 
- --s;
- }
- break;
+ --s;
+ }
+ break;
 
- case '\\':
- /* Force literal match of next char. */
+ case '\\':
+ /* Force literal match of next char. */
 
- if( !*c || *s++ != *c++ )
- return 1;
- break;
+ if( !*c || *s++ != *c++ )
+ return 1;
+ break;
 
- default:
- if( *s++ != c[-1] )
- return 1;
- break;
- }
+ default:
+ if( *s++ != c[-1] )
+ return 1;
+ break;
+ }
 }
 
 /*
  * globchars() - build a bitlist to check for character group match
  */
 
-static void
-globchars(
- char *s,
- char *e,
- char *b )
+static void globchars( char * s, char * e, char * b )
 {
- int neg = 0;
+ int neg = 0;
 
- memset( b, '\0', BITLISTSIZE );
+ memset( b, '\0', BITLISTSIZE );
 
- if( *s == '^')
- neg++, s++;
+ if( *s == '^')
+ neg++, s++;
 
- while( s < e )
- {
- int c;
-
- if( s+2 < e && s[1] == '-' )
- {
- for( c = s[0]; c <= s[2]; c++ )
- b[ c/8 ] |= (1<<(c%8));
- s += 3;
- } else {
- c = *s++;
- b[ c/8 ] |= (1<<(c%8));
- }
- }
-
- if( neg )
- {
- int i;
- for( i = 0; i < BITLISTSIZE; i++ )
- b[ i ] ^= 0377;
- }
+ while( s < e )
+ {
+ int c;
+
+ if( s+2 < e && s[1] == '-' )
+ {
+ for( c = s[0]; c <= s[2]; c++ )
+ b[ c/8 ] |= (1<<(c%8));
+ s += 3;
+ } else {
+ c = *s++;
+ b[ c/8 ] |= (1<<(c%8));
+ }
+ }
+
+ if ( neg )
+ {
+ int i;
+ for ( i = 0; i < BITLISTSIZE; ++i )
+ b[ i ] ^= 0377;
+ }
 
- /* Don't include \0 in either $[chars] or $[^chars] */
+ /* Don't include \0 in either $[chars] or $[^chars] */
 
- b[0] &= 0376;
+ b[0] &= 0376;
 }

Modified: trunk/tools/jam/src/hash.c
==============================================================================
--- trunk/tools/jam/src/hash.c (original)
+++ trunk/tools/jam/src/hash.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -9,8 +9,8 @@
 # include "compile.h"
 # include <assert.h>
 
-/*
- * hash.c - simple in-memory hashing routines
+/*
+ * hash.c - simple in-memory hashing routines
  *
  * External routines:
  *
@@ -29,63 +29,63 @@
 #define HASH_DEBUG_PROFILE 1
 /* */
 
-char *hashsccssid="@(#)hash.c 1.14 () 6/20/88";
+char *hashsccssid="@(#)hash.c 1.14 () 6/20/88";
 
 /* Header attached to all data items entered into a hash table. */
 
 struct hashhdr {
- struct item *next;
- unsigned int keyval; /* for quick comparisons */
+ struct item *next;
+ unsigned int keyval; /* for quick comparisons */
 } ;
 
 /* This structure overlays the one handed to hashenter(). */
 /* It's actual size is given to hashinit(). */
 
 struct hashdata {
- char *key;
- /* rest of user data */
+ char *key;
+ /* rest of user data */
 } ;
 
 typedef struct item {
- struct hashhdr hdr;
- struct hashdata data;
+ struct hashhdr hdr;
+ struct hashdata data;
 } ITEM ;
 
 # define MAX_LISTS 32
 
-struct hash
+struct hash
 {
- /*
- * the hash table, just an array of item pointers
- */
- struct {
- int nel;
- ITEM **base;
- } tab;
-
- int bloat; /* tab.nel / items.nel */
- int inel; /* initial number of elements */
-
- /*
- * the array of records, maintained by these routines
- * essentially a microallocator
- */
- struct {
- int more; /* how many more ITEMs fit in lists[ list ] */
+ /*
+ * the hash table, just an array of item pointers
+ */
+ struct {
+ int nel;
+ ITEM **base;
+ } tab;
+
+ int bloat; /* tab.nel / items.nel */
+ int inel; /* initial number of elements */
+
+ /*
+ * the array of records, maintained by these routines
+ * essentially a microallocator
+ */
+ struct {
+ int more; /* how many more ITEMs fit in lists[ list ] */
         ITEM *free; /* free list of items */
- char *next; /* where to put more ITEMs in lists[ list ] */
- int datalen; /* length of records in this hash table */
- int size; /* sizeof( ITEM ) + aligned datalen */
- int nel; /* total ITEMs held by all lists[] */
- int list; /* index into lists[] */
-
- struct {
- int nel; /* total ITEMs held by this list */
- char *base; /* base of ITEMs array */
- } lists[ MAX_LISTS ];
- } items;
+ char *next; /* where to put more ITEMs in lists[ list ] */
+ int datalen; /* length of records in this hash table */
+ int size; /* sizeof( ITEM ) + aligned datalen */
+ int nel; /* total ITEMs held by all lists[] */
+ int list; /* index into lists[] */
+
+ struct {
+ int nel; /* total ITEMs held by this list */
+ char *base; /* base of ITEMs array */
+ } lists[ MAX_LISTS ];
+ } items;
 
- char *name; /* just for hashstats() */
+ char *name; /* just for hashstats() */
 } ;
 
 static void hashrehash( struct hash *hp );
@@ -134,7 +134,7 @@
         }
         p = i;
     }
-
+
     return 0;
 }
 
@@ -152,7 +152,7 @@
     ITEM * i = 0;
     ITEM * prev = 0;
     unsigned int keyval = hash_keyval(data->key);
-
+
     i = hash_search( hp, keyval, data->key, &prev );
     if (i)
     {
@@ -166,7 +166,7 @@
         hp->items.free = i;
         /* we have another item */
         hp->items.more++;
-
+
         return 1;
     }
     return 0;
@@ -178,32 +178,32 @@
 
 int
 hashitem(
- register struct hash *hp,
- HASHDATA **data,
- int enter )
-{
- register ITEM *i;
- char *b = (*data)->key;
- unsigned int keyval = hash_keyval(b);
-
+ register struct hash *hp,
+ HASHDATA **data,
+ int enter )
+{
+ register ITEM *i;
+ char *b = (*data)->key;
+ unsigned int keyval = hash_keyval(b);
+
     #ifdef HASH_DEBUG_PROFILE
     profile_frame prof[1];
     if ( DEBUG_PROFILE )
         profile_enter( 0, prof );
     #endif
 
- if( enter && !hp->items.more )
- hashrehash( hp );
+ if( enter && !hp->items.more )
+ hashrehash( hp );
 
- if( !enter && !hp->items.nel )
+ if( !enter && !hp->items.nel )
     {
         #ifdef HASH_DEBUG_PROFILE
         if ( DEBUG_PROFILE )
             profile_exit( prof );
         #endif
- return 0;
+ return 0;
     }
-
+
     i = hash_search( hp, keyval, (*data)->key, 0 );
     if (i)
     {
@@ -214,10 +214,10 @@
         return !0;
     }
 
- if( enter )
+ if ( enter )
     {
- ITEM **base = hash_bucket(hp,keyval);
-
+ ITEM * * base = hash_bucket(hp,keyval);
+
         /* try to grab one from the free list */
         if ( hp->items.free )
         {
@@ -248,7 +248,7 @@
     if ( DEBUG_PROFILE )
         profile_exit( prof );
     #endif
- return 0;
+ return 0;
 }
 
 /*
@@ -257,39 +257,39 @@
 
 static void hashrehash( register struct hash *hp )
 {
- int i = ++hp->items.list;
- hp->items.more = i ? 2 * hp->items.nel : hp->inel;
- hp->items.next = (char *)hash_mem_alloc( hp->items.datalen, hp->items.more * hp->items.size );
+ int i = ++hp->items.list;
+ hp->items.more = i ? 2 * hp->items.nel : hp->inel;
+ hp->items.next = (char *)hash_mem_alloc( hp->items.datalen, hp->items.more * hp->items.size );
     hp->items.free = 0;
-
- hp->items.lists[i].nel = hp->items.more;
- hp->items.lists[i].base = hp->items.next;
- hp->items.nel += hp->items.more;
-
- if( hp->tab.base )
- hash_mem_free( hp->items.datalen, (char *)hp->tab.base );
-
- hp->tab.nel = hp->items.nel * hp->bloat;
- hp->tab.base = (ITEM **)hash_mem_alloc( hp->items.datalen, hp->tab.nel * sizeof(ITEM **) );
-
- memset( (char *)hp->tab.base, '\0', hp->tab.nel * sizeof( ITEM * ) );
-
- for( i = 0; i < hp->items.list; i++ )
- {
- int nel = hp->items.lists[i].nel;
- char *next = hp->items.lists[i].base;
-
- for( ; nel--; next += hp->items.size )
- {
- register ITEM *i = (ITEM *)next;
- ITEM **ip = hp->tab.base + i->hdr.keyval % hp->tab.nel;
+
+ hp->items.lists[i].nel = hp->items.more;
+ hp->items.lists[i].base = hp->items.next;
+ hp->items.nel += hp->items.more;
+
+ if( hp->tab.base )
+ hash_mem_free( hp->items.datalen, (char *)hp->tab.base );
+
+ hp->tab.nel = hp->items.nel * hp->bloat;
+ hp->tab.base = (ITEM **)hash_mem_alloc( hp->items.datalen, hp->tab.nel * sizeof(ITEM **) );
+
+ memset( (char *)hp->tab.base, '\0', hp->tab.nel * sizeof( ITEM * ) );
+
+ for( i = 0; i < hp->items.list; i++ )
+ {
+ int nel = hp->items.lists[i].nel;
+ char *next = hp->items.lists[i].base;
+
+ for( ; nel--; next += hp->items.size )
+ {
+ register ITEM *i = (ITEM *)next;
+ ITEM **ip = hp->tab.base + i->hdr.keyval % hp->tab.nel;
             /* code currently assumes rehashing only when there are no free items */
- assert( i->data.key != 0 );
-
- i->hdr.next = *ip;
- *ip = i;
- }
- }
+ assert( i->data.key != 0 );
+
+ i->hdr.next = *ip;
+ *ip = i;
+ }
+ }
 }
 
 void hashenumerate( struct hash *hp, void (*f)(void*,void*), void* data )
@@ -304,10 +304,9 @@
 
         for( ; nel--; next += hp->items.size )
         {
- register ITEM *i = (ITEM *)next;
-
+ register ITEM * i = (ITEM *)next;
             if ( i->data.key != 0 ) /* don't enumerate freed items */
- f(&i->data, data);
+ f( &i->data, data );
         }
     }
 }
@@ -321,25 +320,25 @@
  */
 
 struct hash *
-hashinit(
- int datalen,
- char *name )
-{
- struct hash *hp = (struct hash *)hash_mem_alloc( datalen, sizeof( *hp ) );
-
- hp->bloat = 3;
- hp->tab.nel = 0;
- hp->tab.base = (ITEM **)0;
- hp->items.more = 0;
+hashinit(
+ int datalen,
+ char *name )
+{
+ struct hash *hp = (struct hash *)hash_mem_alloc( datalen, sizeof( *hp ) );
+
+ hp->bloat = 3;
+ hp->tab.nel = 0;
+ hp->tab.base = (ITEM **)0;
+ hp->items.more = 0;
     hp->items.free = 0;
- hp->items.datalen = datalen;
- hp->items.size = sizeof( struct hashhdr ) + ALIGNED( datalen );
- hp->items.list = -1;
- hp->items.nel = 0;
- hp->inel = /* */ 11 /*/ 47 /* */;
- hp->name = name;
+ hp->items.datalen = datalen;
+ hp->items.size = sizeof( struct hashhdr ) + ALIGNED( datalen );
+ hp->items.list = -1;
+ hp->items.nel = 0;
+ hp->inel = /* */ 11 /*/ 47 /* */;
+ hp->name = name;
 
- return hp;
+ return hp;
 }
 
 /*
@@ -349,19 +348,19 @@
 void
 hashdone( struct hash *hp )
 {
- int i;
+ int i;
 
- if( !hp )
- return;
+ if( !hp )
+ return;
 
- if( DEBUG_MEM || DEBUG_PROFILE )
- hashstat( hp );
+ if( DEBUG_MEM || DEBUG_PROFILE )
+ hashstat( hp );
 
- if( hp->tab.base )
- hash_mem_free( hp->items.datalen, (char *)hp->tab.base );
- for( i = 0; i <= hp->items.list; i++ )
- hash_mem_free( hp->items.datalen, hp->items.lists[i].base );
- hash_mem_free( hp->items.datalen, (char *)hp );
+ if( hp->tab.base )
+ hash_mem_free( hp->items.datalen, (char *)hp->tab.base );
+ for( i = 0; i <= hp->items.list; i++ )
+ hash_mem_free( hp->items.datalen, hp->items.lists[i].base );
+ hash_mem_free( hp->items.datalen, (char *)hp );
 }
 
 static void * hash_mem_alloc(size_t datalen, size_t size)
@@ -403,28 +402,28 @@
 static void
 hashstat( struct hash *hp )
 {
- ITEM **tab = hp->tab.base;
- int nel = hp->tab.nel;
- int count = 0;
- int sets = 0;
- int run = ( tab[ nel - 1 ] != (ITEM *)0 );
- int i, here;
-
- for( i = nel; i > 0; i-- )
- {
- if( here = ( *tab++ != (ITEM *)0 ) )
- count++;
- if( here && !run )
- sets++;
- run = here;
- }
-
- printf( "%s table: %d+%d+%d (%dK+%dK) items+table+hash, %f density\n",
- hp->name,
- count,
- hp->items.nel,
- hp->tab.nel,
- hp->items.nel * hp->items.size / 1024,
- hp->tab.nel * sizeof( ITEM ** ) / 1024,
- (float)count / (float)sets );
+ ITEM **tab = hp->tab.base;
+ int nel = hp->tab.nel;
+ int count = 0;
+ int sets = 0;
+ int run = ( tab[ nel - 1 ] != (ITEM *)0 );
+ int i, here;
+
+ for( i = nel; i > 0; i-- )
+ {
+ if( here = ( *tab++ != (ITEM *)0 ) )
+ count++;
+ if( here && !run )
+ sets++;
+ run = here;
+ }
+
+ printf( "%s table: %d+%d+%d (%dK+%dK) items+table+hash, %f density\n",
+ hp->name,
+ count,
+ hp->items.nel,
+ hp->tab.nel,
+ hp->items.nel * hp->items.size / 1024,
+ hp->tab.nel * sizeof( ITEM ** ) / 1024,
+ (float)count / (float)sets );
 }

Modified: trunk/tools/jam/src/hash.h
==============================================================================
--- trunk/tools/jam/src/hash.h (original)
+++ trunk/tools/jam/src/hash.h 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -5,21 +5,21 @@
  */
 
 /*
- * hash.h - simple in-memory hashing routines
+ * hash.h - simple in-memory hashing routines
  */
-
+
 #ifndef BOOST_JAM_HASH_H
 #define BOOST_JAM_HASH_H
 
 typedef struct hashdata HASHDATA;
 
-struct hash * hashinit( int datalen, char *name );
-int hashitem( struct hash *hp, HASHDATA **data, int enter );
-void hashdone( struct hash *hp );
+struct hash * hashinit( int datalen, char *name );
+int hashitem( struct hash *hp, HASHDATA **data, int enter );
+void hashdone( struct hash *hp );
 void hashenumerate( struct hash *hp, void (*f)(void*,void*), void* data );
 int hash_free( struct hash *hp, HASHDATA *data);
 
-# define hashenter( hp, data ) (!hashitem( hp, data, !0 ))
-# define hashcheck( hp, data ) hashitem( hp, data, 0 )
+# define hashenter( hp, data ) (!hashitem( hp, data, !0 ))
+# define hashcheck( hp, data ) hashitem( hp, data, 0 )
 
 #endif

Modified: trunk/tools/jam/src/hcache.c
==============================================================================
--- trunk/tools/jam/src/hcache.c (original)
+++ trunk/tools/jam/src/hcache.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -34,26 +34,26 @@
  * hcache_init() - read and parse the local .jamdeps file.
  * hcache_done() - write a new .jamdeps file
  * hcache() - return list of headers on target. Use cache or do a scan.
- *
+ *
  * The dependency file format is an ascii file with 1 line per target.
  * Each line has the following fields:
  * @boundname@ timestamp @file@ @file@ @file@ ... \n
  * */
 
 struct hcachedata {
- char *boundname;
- time_t time;
- LIST *includes;
- LIST *hdrscan; /* the HDRSCAN value for this target */
- int age; /* if too old, we'll remove it from cache */
- struct hcachedata *next;
+ char *boundname;
+ time_t time;
+ LIST *includes;
+ LIST *hdrscan; /* the HDRSCAN value for this target */
+ int age; /* if too old, we'll remove it from cache */
+ struct hcachedata *next;
 } ;
 
 typedef struct hcachedata HCACHEDATA ;
 
 
 static struct hash *hcachehash = 0;
-static HCACHEDATA *hcachelist = 0;
+static HCACHEDATA *hcachelist = 0;
 
 static int queries = 0;
 static int hits = 0;
@@ -74,23 +74,23 @@
 {
     static char* name = 0;
     if (!name) {
- LIST *hcachevar = var_get("HCACHEFILE");
+ LIST *hcachevar = var_get("HCACHEFILE");
 
- if (hcachevar) {
- TARGET *t = bindtarget( hcachevar->string );
+ if (hcachevar) {
+ TARGET *t = bindtarget( hcachevar->string );
 
- pushsettings( t->settings );
+ pushsettings( t->settings );
             /* Don't expect cache file to be generated, so pass 0
- as third argument to search.
+ as third argument to search.
                Expect the location to be specified via LOCATE,
                so pass 0 as fourth arugment. */
- t->boundname = search( t->name, &t->time, 0, 0 );
- popsettings( t->settings );
+ t->boundname = search( t->name, &t->time, 0, 0 );
+ popsettings( t->settings );
 
- if (hcachevar) {
- name = copystr(t->boundname);
- }
- }
+ if (hcachevar) {
+ name = copystr(t->boundname);
+ }
+ }
     }
     return name;
 }
@@ -106,9 +106,9 @@
     LIST *var = var_get("HCACHEMAXAGE");
 
     if (var) {
- age = atoi(var->string);
- if (age < 0)
- age = 0;
+ age = atoi(var->string);
+ if (age < 0)
+ age = 0;
     }
 
     return age;
@@ -127,35 +127,36 @@
     static unsigned long buf_len = 0;
 
     if (fscanf(f, " %9lu", &len) != 1)
- return NULL;
+ return NULL;
     if (fgetc(f) != (int)'\t')
- return NULL;
+ return NULL;
 
     if (len > 1024 * 64)
- return NULL; /* sanity check */
+ return NULL; /* sanity check */
 
     if (len > buf_len)
     {
- unsigned long new_len = buf_len * 2;
- if (new_len < len)
- new_len = len;
- buf = (char*)BJAM_REALLOC(buf, new_len + 1);
- if (buf)
- buf_len = new_len;
+ unsigned long new_len = buf_len * 2;
+ if (new_len < len)
+ new_len = len;
+ buf = (char*)BJAM_REALLOC(buf, new_len + 1);
+ if (buf)
+ buf_len = new_len;
     }
 
     if (!buf)
- return NULL;
+ return NULL;
 
     if (fread(buf, 1, len, f) != len)
- return NULL;
+ return NULL;
     if (fgetc(f) != (int)'\n')
- return NULL;
+ return NULL;
 
     buf[len] = 0;
     return newstr(buf);
 }
 
+
 /*
  * Write a netstring.
  */
@@ -163,119 +164,121 @@
 write_netstring(FILE* f, const char* s)
 {
     if (!s)
- s = "";
+ s = "";
     fprintf(f, "%lu\t%s\n", strlen(s), s);
 }
 
+
 void
 hcache_init()
 {
- HCACHEDATA cachedata, *c;
- FILE *f;
- char *version;
- int header_count = 0;
- char* hcachename;
+ HCACHEDATA cachedata;
+ HCACHEDATA * c;
+ FILE * f;
+ char * version;
+ int header_count = 0;
+ char * hcachename;
 
     hcachehash = hashinit (sizeof (HCACHEDATA), "hcache");
 
     if (! (hcachename = cache_name()))
- return;
+ return;
 
     if (! (f = fopen (hcachename, "rb" )))
- return;
-
+ return;
+
     version = read_netstring(f);
     if (!version || strcmp(version, CACHE_FILE_VERSION)) {
- fclose(f);
- return;
+ fclose(f);
+ return;
     }
 
     while (1)
     {
- char* record_type;
- char *time_str;
- char *age_str;
- char *includes_count_str;
- char *hdrscan_count_str;
- int i, count;
- LIST *l;
-
- record_type = read_netstring(f);
- if (!record_type) {
- fprintf(stderr, "invalid %s\n", hcachename);
- goto bail;
- }
- if (!strcmp(record_type, CACHE_RECORD_END)) {
- break;
- }
- if (strcmp(record_type, CACHE_RECORD_HEADER)) {
- fprintf(stderr, "invalid %s with record separator <%s>\n",
- hcachename, record_type ? record_type : "<null>");
- goto bail;
- }
-
- c = &cachedata;
-
- c->boundname = read_netstring(f);
- time_str = read_netstring(f);
- age_str = read_netstring(f);
- includes_count_str = read_netstring(f);
-
- if (!c->boundname || !time_str || !age_str
- || !includes_count_str)
- {
- fprintf(stderr, "invalid %s\n", hcachename);
- goto bail;
- }
-
- c->time = atoi(time_str);
- c->age = atoi(age_str) + 1;
-
- count = atoi(includes_count_str);
- for (l = 0, i = 0; i < count; i++) {
- char* s = read_netstring(f);
- if (!s) {
- fprintf(stderr, "invalid %s\n", hcachename);
- goto bail;
- }
- l = list_new(l, s);
- }
- c->includes = l;
-
- hdrscan_count_str = read_netstring(f);
- if (!includes_count_str) {
- list_free(c->includes);
- fprintf(stderr, "invalid %s\n", hcachename);
- goto bail;
- }
-
- count = atoi(hdrscan_count_str);
- for (l = 0, i = 0; i < count; i++) {
- char* s = read_netstring(f);
- if (!s) {
- fprintf(stderr, "invalid %s\n", hcachename);
- goto bail;
- }
- l = list_new(l, s);
- }
- c->hdrscan = l;
-
- if (!hashenter(hcachehash, (HASHDATA **)&c)) {
- fprintf(stderr, "can't insert header cache item, bailing on %s\n",
- hcachename);
- goto bail;
- }
+ char* record_type;
+ char *time_str;
+ char *age_str;
+ char *includes_count_str;
+ char *hdrscan_count_str;
+ int i, count;
+ LIST *l;
+
+ record_type = read_netstring(f);
+ if (!record_type) {
+ fprintf(stderr, "invalid %s\n", hcachename);
+ goto bail;
+ }
+ if (!strcmp(record_type, CACHE_RECORD_END)) {
+ break;
+ }
+ if (strcmp(record_type, CACHE_RECORD_HEADER)) {
+ fprintf(stderr, "invalid %s with record separator <%s>\n",
+ hcachename, record_type ? record_type : "<null>");
+ goto bail;
+ }
+
+ c = &cachedata;
+
+ c->boundname = read_netstring(f);
+ time_str = read_netstring(f);
+ age_str = read_netstring(f);
+ includes_count_str = read_netstring(f);
+
+ if (!c->boundname || !time_str || !age_str
+ || !includes_count_str)
+ {
+ fprintf(stderr, "invalid %s\n", hcachename);
+ goto bail;
+ }
 
- c->next = hcachelist;
- hcachelist = c;
+ c->time = atoi(time_str);
+ c->age = atoi(age_str) + 1;
+
+ count = atoi(includes_count_str);
+ for (l = 0, i = 0; i < count; i++) {
+ char* s = read_netstring(f);
+ if (!s) {
+ fprintf(stderr, "invalid %s\n", hcachename);
+ goto bail;
+ }
+ l = list_new(l, s);
+ }
+ c->includes = l;
 
- header_count++;
+ hdrscan_count_str = read_netstring(f);
+ if (!includes_count_str) {
+ list_free(c->includes);
+ fprintf(stderr, "invalid %s\n", hcachename);
+ goto bail;
+ }
+
+ count = atoi(hdrscan_count_str);
+ for (l = 0, i = 0; i < count; i++) {
+ char* s = read_netstring(f);
+ if (!s) {
+ fprintf(stderr, "invalid %s\n", hcachename);
+ goto bail;
+ }
+ l = list_new(l, s);
+ }
+ c->hdrscan = l;
+
+ if (!hashenter(hcachehash, (HASHDATA **)&c)) {
+ fprintf(stderr, "can't insert header cache item, bailing on %s\n",
+ hcachename);
+ goto bail;
+ }
+
+ c->next = hcachelist;
+ hcachelist = c;
+
+ header_count++;
     }
 
     if (DEBUG_HEADER) {
- printf("hcache read from file %s\n", hcachename);
+ printf("hcache read from file %s\n", hcachename);
     }
-
+
  bail:
     fclose(f);
 }
@@ -283,20 +286,20 @@
 void
 hcache_done()
 {
- FILE *f;
+ FILE *f;
     HCACHEDATA *c;
- int header_count = 0;
- char* hcachename;
- int maxage;
-
+ int header_count = 0;
+ char* hcachename;
+ int maxage;
+
     if (!hcachehash)
- return;
+ return;
 
     if (! (hcachename = cache_name()))
- return;
+ return;
 
     if (! (f = fopen (hcachename, "wb" )))
- return;
+ return;
 
     maxage = cache_maxage();
 
@@ -305,43 +308,43 @@
 
     c = hcachelist;
     for (c = hcachelist; c; c = c->next) {
- LIST *l;
- char time_str[30];
- char age_str[30];
- char includes_count_str[30];
- char hdrscan_count_str[30];
-
- if (maxage == 0)
- c->age = 0;
- else if (c->age > maxage)
- continue;
-
- sprintf(includes_count_str, "%lu", list_length(c->includes));
- sprintf(hdrscan_count_str, "%lu", list_length(c->hdrscan));
- sprintf(time_str, "%lu", c->time);
- sprintf(age_str, "%lu", c->age);
-
- write_netstring(f, CACHE_RECORD_HEADER);
- write_netstring(f, c->boundname);
- write_netstring(f, time_str);
- write_netstring(f, age_str);
- write_netstring(f, includes_count_str);
- for (l = c->includes; l; l = list_next(l)) {
- write_netstring(f, l->string);
- }
- write_netstring(f, hdrscan_count_str);
- for (l = c->hdrscan; l; l = list_next(l)) {
- write_netstring(f, l->string);
- }
- fputs("\n", f);
- header_count++;
+ LIST *l;
+ char time_str[30];
+ char age_str[30];
+ char includes_count_str[30];
+ char hdrscan_count_str[30];
+
+ if (maxage == 0)
+ c->age = 0;
+ else if (c->age > maxage)
+ continue;
+
+ sprintf(includes_count_str, "%lu", list_length(c->includes));
+ sprintf(hdrscan_count_str, "%lu", list_length(c->hdrscan));
+ sprintf(time_str, "%lu", c->time);
+ sprintf(age_str, "%lu", c->age);
+
+ write_netstring(f, CACHE_RECORD_HEADER);
+ write_netstring(f, c->boundname);
+ write_netstring(f, time_str);
+ write_netstring(f, age_str);
+ write_netstring(f, includes_count_str);
+ for (l = c->includes; l; l = list_next(l)) {
+ write_netstring(f, l->string);
+ }
+ write_netstring(f, hdrscan_count_str);
+ for (l = c->hdrscan; l; l = list_next(l)) {
+ write_netstring(f, l->string);
+ }
+ fputs("\n", f);
+ header_count++;
     }
     write_netstring(f, CACHE_RECORD_END);
 
     if (DEBUG_HEADER) {
- printf("hcache written to %s. %d dependencies, %.0f%% hit rate\n",
- hcachename, header_count,
- queries ? 100.0 * hits / queries : 0);
+ printf("hcache written to %s. %d dependencies, %.0f%% hit rate\n",
+ hcachename, header_count,
+ queries ? 100.0 * hits / queries : 0);
     }
 
     fclose (f);
@@ -351,7 +354,7 @@
 hcache (TARGET *t, int rec, regexp *re[], LIST *hdrscan)
 {
     HCACHEDATA cachedata, *c = &cachedata;
- LIST *l = 0;
+ LIST *l = 0;
 
     ++queries;
 
@@ -359,55 +362,55 @@
 
     if (hashcheck (hcachehash, (HASHDATA **) &c))
     {
- if (c->time == t->time)
- {
- LIST *l1 = hdrscan, *l2 = c->hdrscan;
- while (l1 && l2) {
- if (l1->string != l2->string) {
- l1 = NULL;
- } else {
- l1 = list_next(l1);
- l2 = list_next(l2);
- }
- }
- if (l1 || l2) {
- if (DEBUG_HEADER)
- printf("HDRSCAN out of date in cache for %s\n",
- t->boundname);
-
- printf("HDRSCAN out of date for %s\n", t->boundname);
- printf(" real : ");
- list_print(hdrscan);
- printf("\n cached: ");
- list_print(c->hdrscan);
- printf("\n");
-
- list_free(c->includes);
- list_free(c->hdrscan);
- c->includes = 0;
- c->hdrscan = 0;
- } else {
- if (DEBUG_HEADER)
- printf ("using header cache for %s\n", t->boundname);
- c->age = 0;
- ++hits;
- l = list_copy (0, c->includes);
- return l;
- }
- } else {
- if (DEBUG_HEADER)
- printf ("header cache out of date for %s\n", t->boundname);
- list_free (c->includes);
- list_free(c->hdrscan);
- c->includes = 0;
- c->hdrscan = 0;
- }
+ if (c->time == t->time)
+ {
+ LIST *l1 = hdrscan, *l2 = c->hdrscan;
+ while (l1 && l2) {
+ if (l1->string != l2->string) {
+ l1 = NULL;
+ } else {
+ l1 = list_next(l1);
+ l2 = list_next(l2);
+ }
+ }
+ if (l1 || l2) {
+ if (DEBUG_HEADER)
+ printf("HDRSCAN out of date in cache for %s\n",
+ t->boundname);
+
+ printf("HDRSCAN out of date for %s\n", t->boundname);
+ printf(" real : ");
+ list_print(hdrscan);
+ printf("\n cached: ");
+ list_print(c->hdrscan);
+ printf("\n");
+
+ list_free(c->includes);
+ list_free(c->hdrscan);
+ c->includes = 0;
+ c->hdrscan = 0;
+ } else {
+ if (DEBUG_HEADER)
+ printf ("using header cache for %s\n", t->boundname);
+ c->age = 0;
+ ++hits;
+ l = list_copy (0, c->includes);
+ return l;
+ }
     } else {
- if (hashenter (hcachehash, (HASHDATA **)&c)) {
- c->boundname = newstr (c->boundname);
- c->next = hcachelist;
- hcachelist = c;
- }
+ if (DEBUG_HEADER)
+ printf ("header cache out of date for %s\n", t->boundname);
+ list_free (c->includes);
+ list_free(c->hdrscan);
+ c->includes = 0;
+ c->hdrscan = 0;
+ }
+ } else {
+ if (hashenter (hcachehash, (HASHDATA **)&c)) {
+ c->boundname = newstr (c->boundname);
+ c->next = hcachelist;
+ hcachelist = c;
+ }
     }
 
     /* 'c' points at the cache entry. Its out of date. */

Modified: trunk/tools/jam/src/hdrmacro.c
==============================================================================
--- trunk/tools/jam/src/hdrmacro.c (original)
+++ trunk/tools/jam/src/hdrmacro.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -27,11 +27,11 @@
  * #include statements.
  *
  * we look for lines like "#define MACRO <....>" or '#define MACRO " "'
- * in the target file. When found, we
+ * in the target file. When found, we
  *
  * we then phony up a rule invocation like:
  *
- * $(HDRRULE) <target> : <resolved included files> ;
+ * $(HDRRULE) <target> : <resolved included files> ;
  *
  * External routines:
  * headers1() - scan a target for "#include MACRO" lines and try
@@ -42,8 +42,8 @@
  *
  * 04/13/94 (seiwald) - added shorthand L0 for null list pointer
  * 09/10/00 (seiwald) - replaced call to compile_rule with evaluate_rule,
- * so that headers() doesn't have to mock up a parse structure
- * just to invoke a rule.
+ * so that headers() doesn't have to mock up a parse structure
+ * just to invoke a rule.
  */
 
 static LIST *header_macros1( LIST *l, char *file, int rec, regexp *re[] );
@@ -53,9 +53,9 @@
 {
   char* symbol;
   char* filename; /* we could maybe use a LIST here ?? */
-
+
 } HEADER_MACRO;
-
+
 static struct hash* header_macros_hash = 0;
 
 /*
@@ -68,9 +68,9 @@
 macro_headers( TARGET *t )
 {
     static regexp *re = 0;
- FILE *f;
- char buf[ 1024 ];
-
+ FILE *f;
+ char buf[ 1024 ];
+
     if ( DEBUG_HEADER )
         printf( "macro header scan for %s\n", t->name );
 
@@ -80,10 +80,10 @@
     if ( re == 0 )
     {
         re = regex_compile(
- "^[ ]*#[ ]*define[ ]*([A-Za-z][A-Za-z0-9_]*)[ ]*"
+ "^[ ]*#[ ]*define[ ]*([A-Za-z][A-Za-z0-9_]*)[ ]*"
             "[<\"]([^\">]*)[\">].*$" );
     }
-
+
     if( !( f = fopen( t->boundname, "r" ) ) )
         return;
 
@@ -96,7 +96,7 @@
             /* we detected a line that looks like "#define MACRO filename */
             re->endp[1][0] = '\0';
             re->endp[2][0] = '\0';
-
+
             if ( DEBUG_HEADER )
                 printf( "macro '%s' used to define filename '%s' in '%s'\n",
                         re->startp[1], re->startp[2], t->boundname );
@@ -134,6 +134,6 @@
       printf( "### macro '%s' evaluated to '%s'\n", macro_name, v->filename );
     return v->filename;
   }
- return 0;
+ return 0;
 }
 

Modified: trunk/tools/jam/src/headers.c
==============================================================================
--- trunk/tools/jam/src/headers.c (original)
+++ trunk/tools/jam/src/headers.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -27,11 +27,11 @@
 /*
  * headers.c - handle #includes in source files
  *
- * Using regular expressions provided as the variable $(HDRSCAN),
+ * Using regular expressions provided as the variable $(HDRSCAN),
  * headers() searches a file for #include files and phonies up a
  * rule invocation:
- *
- * $(HDRRULE) <target> : <include files> ;
+ *
+ * $(HDRRULE) <target> : <include files> ;
  *
  * External routines:
  * headers() - scan a target for include files and call HDRRULE
@@ -41,8 +41,8 @@
  *
  * 04/13/94 (seiwald) - added shorthand L0 for null list pointer
  * 09/10/00 (seiwald) - replaced call to compile_rule with evaluate_rule,
- * so that headers() doesn't have to mock up a parse structure
- * just to invoke a rule.
+ * so that headers() doesn't have to mock up a parse structure
+ * just to invoke a rule.
  */
 
 #ifndef OPT_HEADER_CACHE_EXT
@@ -58,13 +58,13 @@
 void
 headers( TARGET *t )
 {
- LIST *hdrscan;
- LIST *hdrrule;
- LIST *headlist = 0;
- regexp *re[ MAXINC ];
- int rec = 0;
-
- if( !( hdrscan = var_get( "HDRSCAN" ) ) ||
+ LIST *hdrscan;
+ LIST *hdrrule;
+ LIST *headlist = 0;
+ regexp *re[ MAXINC ];
+ int rec = 0;
+
+ if( !( hdrscan = var_get( "HDRSCAN" ) ) ||
         !( hdrrule = var_get( "HDRRULE" ) ) )
         return;
 
@@ -82,7 +82,7 @@
     /* Doctor up call to HDRRULE rule */
     /* Call headers1() to get LIST of included files. */
     {
- FRAME frame[1];
+ FRAME frame[1];
         frame_init( frame );
         lol_add( frame->args, list_new( L0, t->name ) );
 #ifdef OPT_HEADER_CACHE_EXT
@@ -115,91 +115,91 @@
 #else
 static LIST *
 #endif
-headers1(
- LIST *l,
- char *file,
- int rec,
- regexp *re[] )
+headers1(
+ LIST *l,
+ char *file,
+ int rec,
+ regexp *re[] )
 {
- FILE *f;
- char buf[ 1024 ];
- int i;
+ FILE *f;
+ char buf[ 1024 ];
+ int i;
         static regexp *re_macros = 0;
 
-
+
 #ifdef OPT_IMPROVED_PATIENCE_EXT
- static int count = 0;
- ++count;
- if ( ((count == 100) || !( count % 1000 )) && DEBUG_MAKE )
- printf("...patience...\n");
+ static int count = 0;
+ ++count;
+ if ( ((count == 100) || !( count % 1000 )) && DEBUG_MAKE )
+ printf("...patience...\n");
 #endif
-
+
         /* the following regexp is used to detect cases where a */
         /* file is included through a line line "#include MACRO" */
         if ( re_macros == 0 )
         {
             re_macros = regex_compile(
- "^[ ]*#[ ]*include[ ]*([A-Za-z][A-Za-z0-9_]*).*$" );
+ "^[ ]*#[ ]*include[ ]*([A-Za-z][A-Za-z0-9_]*).*$" );
         }
 
 
- if( !( f = fopen( file, "r" ) ) )
- return l;
+ if( !( f = fopen( file, "r" ) ) )
+ return l;
 
- while( fgets( buf, sizeof( buf ), f ) )
- {
+ while( fgets( buf, sizeof( buf ), f ) )
+ {
             int size = strlen (buf);
             /* Remove trailing \r and \n, if any. */
- while (size > 0
+ while (size > 0
                    && (buf[size-1] == '\n' && buf[size-1] == '\r'))
             {
                 buf[size-1] = '\0';
                 --size;
             }
 
- for( i = 0; i < rec; i++ )
- if( regexec( re[i], buf ) && re[i]->startp[1] )
- {
- re[i]->endp[1][0] = '\0';
-
- if( DEBUG_HEADER )
- printf( "header found: %s\n", re[i]->startp[1] );
-
- l = list_new( l, newstr( re[i]->startp[1] ) );
- }
-
+ for( i = 0; i < rec; i++ )
+ if( regexec( re[i], buf ) && re[i]->startp[1] )
+ {
+ re[i]->endp[1][0] = '\0';
+
+ if( DEBUG_HEADER )
+ printf( "header found: %s\n", re[i]->startp[1] );
+
+ l = list_new( l, newstr( re[i]->startp[1] ) );
+ }
+
             /* special treatment for #include MACRO */
             if ( regexec( re_macros, buf ) && re_macros->startp[1] )
             {
- char* header_filename;
-
- re_macros->endp[1][0] = '\0';
-
- if ( DEBUG_HEADER )
- printf( "macro header found: %s", re_macros->startp[1] );
-
- header_filename = macro_header_get( re_macros->startp[1] );
- if (header_filename)
- {
- if ( DEBUG_HEADER )
- printf( " resolved to '%s'\n", header_filename );
- l = list_new( l, newstr( header_filename ) );
- }
- else
- {
- if ( DEBUG_HEADER )
- printf( " ignored !!\n" );
- }
+ char* header_filename;
+
+ re_macros->endp[1][0] = '\0';
+
+ if ( DEBUG_HEADER )
+ printf( "macro header found: %s", re_macros->startp[1] );
+
+ header_filename = macro_header_get( re_macros->startp[1] );
+ if ( header_filename )
+ {
+ if ( DEBUG_HEADER )
+ printf( " resolved to '%s'\n", header_filename );
+ l = list_new( l, newstr( header_filename ) );
+ }
+ else
+ {
+ if ( DEBUG_HEADER )
+ printf( " ignored !!\n" );
+ }
             }
- }
+ }
 
- fclose( f );
+ fclose( f );
 
- return l;
+ return l;
 }
 
 void
 regerror( char *s )
 {
- printf( "re error %s\n", s );
+ printf( "re error %s\n", s );
 }

Modified: trunk/tools/jam/src/jam.c
==============================================================================
--- trunk/tools/jam/src/jam.c (original)
+++ trunk/tools/jam/src/jam.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -1,12 +1,12 @@
 /*
  * /+\
- * +\ Copyright 1993-2002 Christopher Seiwald and Perforce Software, Inc.
+ * +\ Copyright 1993-2002 Christopher Seiwald and Perforce Software, Inc.
  * \+/
  *
  * This file is part of jam.
  *
  * License is hereby granted to use this software and distribute it
- * freely, as long as this copyright notice is retained and modifications
+ * freely, as long as this copyright notice is retained and modifications
  * are clearly marked.
  *
  * ALL WARRANTIES ARE HEREBY DISCLAIMED.
@@ -27,11 +27,11 @@
  *
  * The top half of the code is structured such:
  *
- * jam
- * / | \
+ * jam
+ * / | \
  * +---+ | \
- * / | \
- * jamgram option \
+ * / | \
+ * jamgram option \
  * / | \ \
  * / | \ \
  * / | \ |
@@ -69,32 +69,32 @@
  *
  * Roughly, the modules are:
  *
- * builtins.c - jam's built-in rules
- * command.c - maintain lists of commands
- * compile.c - compile parsed jam statements
- * execunix.c - execute a shell script on UNIX
- * execvms.c - execute a shell script, ala VMS
- * expand.c - expand a buffer, given variable values
- * file*.c - scan directories and archives on *
- * hash.c - simple in-memory hashing routines
+ * builtins.c - jam's built-in rules
+ * command.c - maintain lists of commands
+ * compile.c - compile parsed jam statements
+ * execunix.c - execute a shell script on UNIX
+ * execvms.c - execute a shell script, ala VMS
+ * expand.c - expand a buffer, given variable values
+ * file*.c - scan directories and archives on *
+ * hash.c - simple in-memory hashing routines
  * hdrmacro.c - handle header file parsing for filename macro definitions
- * headers.c - handle #includes in source files
- * jambase.c - compilable copy of Jambase
- * jamgram.y - jam grammar
- * lists.c - maintain lists of strings
- * make.c - bring a target up to date, once rules are in place
- * make1.c - execute command to bring targets up to date
- * newstr.c - string manipulation routines
- * option.c - command line option processing
- * parse.c - make and destroy parse trees as driven by the parser
- * path*.c - manipulate file names on *
- * hash.c - simple in-memory hashing routines
- * regexp.c - Henry Spencer's regexp
- * rules.c - access to RULEs, TARGETs, and ACTIONs
- * scan.c - the jam yacc scanner
- * search.c - find a target along $(SEARCH) or $(LOCATE)
- * timestamp.c - get the timestamp of a file or archive member
- * variable.c - handle jam multi-element variables
+ * headers.c - handle #includes in source files
+ * jambase.c - compilable copy of Jambase
+ * jamgram.y - jam grammar
+ * lists.c - maintain lists of strings
+ * make.c - bring a target up to date, once rules are in place
+ * make1.c - execute command to bring targets up to date
+ * newstr.c - string manipulation routines
+ * option.c - command line option processing
+ * parse.c - make and destroy parse trees as driven by the parser
+ * path*.c - manipulate file names on *
+ * hash.c - simple in-memory hashing routines
+ * regexp.c - Henry Spencer's regexp
+ * rules.c - access to RULEs, TARGETs, and ACTIONs
+ * scan.c - the jam yacc scanner
+ * search.c - find a target along $(SEARCH) or $(LOCATE)
+ * timestamp.c - get the timestamp of a file or archive member
+ * variable.c - handle jam multi-element variables
  *
  * 05/04/94 (seiwald) - async multiprocess (-j) support
  * 02/08/95 (seiwald) - -n implies -d2.
@@ -138,17 +138,17 @@
 # endif
 
 struct globs globs = {
- 0, /* noexec */
- 1, /* jobs */
- 0, /* quitquick */
- 0, /* newestfirst */
+ 0, /* noexec */
+ 1, /* jobs */
+ 0, /* quitquick */
+ 0, /* newestfirst */
         0, /* pipes action stdout and stderr merged to action output */
 # ifdef OS_MAC
- { 0, 0 }, /* debug - suppress tracing output */
+ { 0, 0 }, /* debug - suppress tracing output */
 # else
- { 0, 1 }, /* debug ... */
+ { 0, 1 }, /* debug ... */
 # endif
- 0, /* output commands, not run them */
+ 0, /* output commands, not run them */
     0 /* action timeout */
 } ;
 
@@ -156,9 +156,9 @@
 
 static char *othersyms[] = { OSMAJOR, OSMINOR, OSPLAT, JAMVERSYM, 0 } ;
 
-/* Known for sure:
- * mac needs arg_enviro
- * OS2 needs extern environ
+/* Known for sure:
+ * mac needs arg_enviro
+ * OS2 needs extern environ
  */
 
 # ifdef OS_MAC
@@ -180,7 +180,7 @@
 
 # ifndef use_environ
 # define use_environ environ
-# if !defined( __WATCOM__ ) && !defined( OS_OS2 ) && !defined( OS_NT )
+# if !defined( __WATCOM__ ) && !defined( OS_OS2 ) && !defined( OS_NT )
 extern char **environ;
 # endif
 # endif
@@ -195,7 +195,7 @@
 # if defined( USE_EXECNT )
     extern void execnt_unit_test();
     execnt_unit_test();
-# endif
+# endif
     string_unit_test();
     var_expand_unit_test();
 }
@@ -204,7 +204,7 @@
 #ifdef HAVE_PYTHON
     extern PyObject*
     bjam_call(PyObject *self, PyObject *args);
-
+
     extern PyObject*
     bjam_import_rule(PyObject* self, PyObject* args);
 
@@ -220,12 +220,12 @@
 
 int main( int argc, char **argv, char **arg_environ )
 {
- int n;
- char *s;
- struct option optv[N_OPTS];
- const char *all = "all";
- int anyhow = 0;
- int status;
+ int n;
+ char *s;
+ struct option optv[N_OPTS];
+ const char *all = "all";
+ int anyhow = 0;
+ int status;
     int arg_c = argc;
     char ** arg_v = argv;
     const char *progname = argv[0];
@@ -292,7 +292,7 @@
     }
 
     if( ( s = getoptval( optv, 'q', 0 ) ) )
- globs.quitquick = 1;
+ globs.quitquick = 1;
 
     if( ( s = getoptval( optv, 'a', 0 ) ) )
         anyhow++;
@@ -341,7 +341,7 @@
     {
         PROFILE_ENTER(MAIN_PYTHON);
         Py_Initialize();
-
+
         {
             static PyMethodDef BjamMethods[] = {
                 {"call", bjam_call, METH_VARARGS,
@@ -356,13 +356,13 @@
                  "Returns bjam backtrace from the last call into Python."},
                 {NULL, NULL, 0, NULL}
             };
-
- Py_InitModule("bjam", BjamMethods);
+
+ Py_InitModule( "bjam", BjamMethods );
         }
         PROFILE_EXIT(MAIN_PYTHON);
     }
     #endif
-
+
 #ifndef NDEBUG
     run_unit_tests();
 #endif
@@ -375,10 +375,9 @@
 
     var_set( "JAMDATE", list_new( L0, outf_time(time(0)) ), VAR_SET );
 
-
     var_set( "JAM_VERSION",
- list_new( list_new( list_new( L0, newstr( VERSION_MAJOR_SYM ) ),
- newstr( VERSION_MINOR_SYM ) ),
+ list_new( list_new( list_new( L0, newstr( VERSION_MAJOR_SYM ) ),
+ newstr( VERSION_MINOR_SYM ) ),
                        newstr( VERSION_PATCH_SYM ) ),
              VAR_SET );
 
@@ -389,12 +388,12 @@
 
         if( uname( &u ) >= 0 )
         {
- var_set( "JAMUNAME",
- list_new(
+ var_set( "JAMUNAME",
+ list_new(
                          list_new(
                              list_new(
                                  list_new(
- list_new( L0,
+ list_new( L0,
                                                newstr( u.sysname ) ),
                                      newstr( u.nodename ) ),
                                  newstr( u.release ) ),
@@ -408,18 +407,18 @@
 
     /* first into global module, with splitting, for backward compatibility */
     var_defines( use_environ, 1 );
-
+
     /* then into .ENVIRON, without splitting */
     enter_module( bindmodule(".ENVIRON") );
     var_defines( use_environ, 0 );
     exit_module( bindmodule(".ENVIRON") );
 
- /*
- * Jam defined variables OS, OSPLAT
+ /*
+ * Jam defined variables OS, OSPLAT
      * We load them after environment, so that
- * setting OS in environment does not
+ * setting OS in environment does not
      * change Jam notion of the current platform.
- */
+ */
 
     var_defines( othersyms, 1 );
 
@@ -444,9 +443,9 @@
         var_set( "ARGV", list_new( L0, newstr( arg_v[n] ) ), VAR_APPEND );
     }
 
- /* Initialize built-in rules */
+ /* Initialize built-in rules */
 
- load_builtins();
+ load_builtins();
 
     /* Add the targets in the command line to update list */
 
@@ -469,11 +468,11 @@
     {
         FRAME frame[1];
         frame_init( frame );
- for( n = 0; s = getoptval( optv, 'f', n ); n++ )
- parse_file( s, frame );
+ for( n = 0; s = getoptval( optv, 'f', n ); n++ )
+ parse_file( s, frame );
 
- if( !n )
- parse_file( "+", frame );
+ if( !n )
+ parse_file( "+", frame );
     }
 
     status = yyanyerrors();
@@ -499,13 +498,13 @@
 
     {
         PROFILE_ENTER(MAIN_MAKE);
-
- LIST* targets = targets_to_update();
+
+ LIST * targets = targets_to_update();
         if ( !targets )
         {
             status |= make( 1, &all, anyhow );
         }
- else
+ else
         {
             int targets_count = list_length(targets);
             const char **targets2 = (const char **)BJAM_MALLOC(targets_count * sizeof(char *));
@@ -514,16 +513,16 @@
             {
                 targets2[n++] = targets->string;
             }
- status |= make( targets_count, targets2, anyhow );
+ status |= make( targets_count, targets2, anyhow );
             free(targets);
         }
-
+
         PROFILE_EXIT(MAIN_MAKE);
     }
 
 
     PROFILE_EXIT(MAIN); }
-
+
     if ( DEBUG_PROFILE )
         profile_dump();
 
@@ -543,9 +542,8 @@
 #ifdef HAVE_PYTHON
     Py_Finalize();
 #endif
-
- BJAM_MEM_CLOSE();
 
+ BJAM_MEM_CLOSE();
 
     return status ? EXITBAD : EXITOK;
 }

Modified: trunk/tools/jam/src/jam.h
==============================================================================
--- trunk/tools/jam/src/jam.h (original)
+++ trunk/tools/jam/src/jam.h 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -75,7 +75,7 @@
 /* This may be inaccurate */
 # ifndef __DECC
 # define OSPLAT "OSPLAT=VAX"
-# endif
+# endif
 
 # endif
 
@@ -103,7 +103,7 @@
 # define SPLITPATH ';'
 /* Windows NT 3.51 only allows 996 chars per line, but we deal */
 /* with problem in "execnt.c". */
-# define MAXLINE (maxline()) /* longest 'together' actions */
+# define MAXLINE (maxline()) /* longest 'together' actions */
 # define USE_EXECNT
 # define USE_PATHUNIX
 # define PATH_DELIM '\\'
@@ -147,7 +147,7 @@
 # define OSMINOR "OS=MINGW"
 # define OS_NT
 # define SPLITPATH ';'
-# define MAXLINE 996 /* longest 'together' actions */
+# define MAXLINE 996 /* longest 'together' actions */
 # define USE_EXECUNIX
 # define USE_PATHUNIX
 # define PATH_DELIM '\\'
@@ -174,7 +174,7 @@
 # define OSMINOR "OS=OS2"
 # define OS_OS2
 # define SPLITPATH ';'
-# define MAXLINE 996 /* longest 'together' actions */
+# define MAXLINE 996 /* longest 'together' actions */
 # define USE_EXECUNIX
 # define USE_PATHUNIX
 # define PATH_DELIM '\\'
@@ -430,9 +430,9 @@
 # include <malloc.h>
 # endif
 
-# endif
+# endif
 
-/*
+/*
  * OSPLAT definitions - suppressed when it's a one-of-a-kind
  */
 
@@ -453,7 +453,7 @@
      defined( __i386__ ) || \
      defined( _M_IX86 )
 # define OSPLAT "OSPLAT=X86"
-# endif
+# endif
 
 # if defined( __ia64__ ) || defined( __IA64__ ) || defined( __ia64 )
 # define OSPLAT "OSPLAT=IA64"
@@ -496,7 +496,7 @@
  */
 
 # ifndef MAXLINE
-# define MAXLINE 102400 /* longest 'together' actions' */
+# define MAXLINE 102400 /* longest 'together' actions' */
 # endif
 
 # ifndef EXITOK
@@ -510,55 +510,55 @@
 
 /* You probably don't need to muck with these. */
 
-# define MAXSYM 1024 /* longest symbol in the environment */
-# define MAXJPATH 1024 /* longest filename */
+# define MAXSYM 1024 /* longest symbol in the environment */
+# define MAXJPATH 1024 /* longest filename */
 
-# define MAXJOBS 64 /* silently enforce -j limit */
-# define MAXARGC 32 /* words in $(JAMSHELL) */
+# define MAXJOBS 64 /* silently enforce -j limit */
+# define MAXARGC 32 /* words in $(JAMSHELL) */
 
 /* Jam private definitions below. */
 
-# define DEBUG_MAX 14
+# define DEBUG_MAX 14
 
 struct globs {
- int noexec;
- int jobs;
- int quitquick;
- int newestfirst; /* build newest sources first */
+ int noexec;
+ int jobs;
+ int quitquick;
+ int newestfirst; /* build newest sources first */
         int pipe_action;
- char debug[DEBUG_MAX];
- FILE *cmdout; /* print cmds, not run them */
+ char debug[DEBUG_MAX];
+ FILE *cmdout; /* print cmds, not run them */
     long timeout; /* number of seconds to limit actions to, default 0 for no limit. */
     int dart; /* output build and test results formatted for Dart */
 } ;
 
 extern struct globs globs;
 
-# define DEBUG_MAKE ( globs.debug[ 1 ] ) /* show actions when executed */
-# define DEBUG_MAKEQ ( globs.debug[ 2 ] ) /* show even quiet actions */
-# define DEBUG_EXEC ( globs.debug[ 2 ] ) /* show text of actons */
-# define DEBUG_MAKEPROG ( globs.debug[ 3 ] ) /* show progress of make0 */
-# define DEBUG_BIND ( globs.debug[ 3 ] ) /* show when files bound */
-
-# define DEBUG_EXECCMD ( globs.debug[ 4 ] ) /* show execcmds()'s work */
-
-# define DEBUG_COMPILE ( globs.debug[ 5 ] ) /* show rule invocations */
-
-# define DEBUG_HEADER ( globs.debug[ 6 ] ) /* show result of header scan */
-# define DEBUG_BINDSCAN ( globs.debug[ 6 ] ) /* show result of dir scan */
-# define DEBUG_SEARCH ( globs.debug[ 6 ] ) /* show attempts at binding */
-
-# define DEBUG_VARSET ( globs.debug[ 7 ] ) /* show variable settings */
-# define DEBUG_VARGET ( globs.debug[ 8 ] ) /* show variable fetches */
-# define DEBUG_VAREXP ( globs.debug[ 8 ] ) /* show variable expansions */
-# define DEBUG_IF ( globs.debug[ 8 ] ) /* show 'if' calculations */
-# define DEBUG_LISTS ( globs.debug[ 9 ] ) /* show list manipulation */
-# define DEBUG_SCAN ( globs.debug[ 9 ] ) /* show scanner tokens */
-# define DEBUG_MEM ( globs.debug[ 9 ] ) /* show memory use */
-
-# define DEBUG_PROFILE ( globs.debug[ 10 ] ) /* dump rule execution times */
-# define DEBUG_PARSE ( globs.debug[ 11 ] ) /* debug parsing */
-# define DEBUG_GRAPH ( globs.debug[ 12 ] ) /* debug dependencies */
+# define DEBUG_MAKE ( globs.debug[ 1 ] ) /* show actions when executed */
+# define DEBUG_MAKEQ ( globs.debug[ 2 ] ) /* show even quiet actions */
+# define DEBUG_EXEC ( globs.debug[ 2 ] ) /* show text of actons */
+# define DEBUG_MAKEPROG ( globs.debug[ 3 ] ) /* show progress of make0 */
+# define DEBUG_BIND ( globs.debug[ 3 ] ) /* show when files bound */
+
+# define DEBUG_EXECCMD ( globs.debug[ 4 ] ) /* show execcmds()'s work */
+
+# define DEBUG_COMPILE ( globs.debug[ 5 ] ) /* show rule invocations */
+
+# define DEBUG_HEADER ( globs.debug[ 6 ] ) /* show result of header scan */
+# define DEBUG_BINDSCAN ( globs.debug[ 6 ] ) /* show result of dir scan */
+# define DEBUG_SEARCH ( globs.debug[ 6 ] ) /* show attempts at binding */
+
+# define DEBUG_VARSET ( globs.debug[ 7 ] ) /* show variable settings */
+# define DEBUG_VARGET ( globs.debug[ 8 ] ) /* show variable fetches */
+# define DEBUG_VAREXP ( globs.debug[ 8 ] ) /* show variable expansions */
+# define DEBUG_IF ( globs.debug[ 8 ] ) /* show 'if' calculations */
+# define DEBUG_LISTS ( globs.debug[ 9 ] ) /* show list manipulation */
+# define DEBUG_SCAN ( globs.debug[ 9 ] ) /* show scanner tokens */
+# define DEBUG_MEM ( globs.debug[ 9 ] ) /* show memory use */
+
+# define DEBUG_PROFILE ( globs.debug[ 10 ] ) /* dump rule execution times */
+# define DEBUG_PARSE ( globs.debug[ 11 ] ) /* debug parsing */
+# define DEBUG_GRAPH ( globs.debug[ 12 ] ) /* debug dependencies */
 # define DEBUG_FATE ( globs.debug[ 13 ] ) /* show changes to fate in make0() */
 
 /* Everyone gets the memory definitions. */

Modified: trunk/tools/jam/src/jambase.h
==============================================================================
--- trunk/tools/jam/src/jambase.h (original)
+++ trunk/tools/jam/src/jambase.h 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -8,7 +8,7 @@
  * jambase.h - declaration for the internal jambase
  *
  * The file Jambase is turned into a C array of strings in jambase.c
- * so that it can be built in to the executable. This is the
+ * so that it can be built in to the executable. This is the
  * declaration for that array.
  */
 

Modified: trunk/tools/jam/src/jamgram.c
==============================================================================
--- trunk/tools/jam/src/jamgram.c (original)
+++ trunk/tools/jam/src/jamgram.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -438,17 +438,17 @@
    First, the terminals, then, starting at YYNTOKENS, nonterminals. */
 static const char *const yytname[] =
 {
- "$end", "error", "$undefined", "_BANG_t", "_BANG_EQUALS_t", "_AMPER_t",
- "_AMPERAMPER_t", "_LPAREN_t", "_RPAREN_t", "_PLUS_EQUALS_t", "_COLON_t",
- "_SEMIC_t", "_LANGLE_t", "_LANGLE_EQUALS_t", "_EQUALS_t", "_RANGLE_t",
- "_RANGLE_EQUALS_t", "_QUESTION_EQUALS_t", "_LBRACKET_t", "_RBRACKET_t",
- "ACTIONS_t", "BIND_t", "CASE_t", "CLASS_t", "DEFAULT_t", "ELSE_t",
- "EXISTING_t", "FOR_t", "IF_t", "IGNORE_t", "IN_t", "INCLUDE_t",
- "LOCAL_t", "MODULE_t", "ON_t", "PIECEMEAL_t", "QUIETLY_t", "RETURN_t",
- "RULE_t", "SWITCH_t", "TOGETHER_t", "UPDATED_t", "WHILE_t", "_LBRACE_t",
- "_BAR_t", "_BARBAR_t", "_RBRACE_t", "ARG", "STRING", "$accept", "run",
- "block", "rules", "null", "assign_list_opt", "arglist_opt", "local_opt",
- "rule", "@1", "@2", "assign", "expr", "cases", "case", "lol", "list",
+ "$end", "error", "$undefined", "_BANG_t", "_BANG_EQUALS_t", "_AMPER_t",
+ "_AMPERAMPER_t", "_LPAREN_t", "_RPAREN_t", "_PLUS_EQUALS_t", "_COLON_t",
+ "_SEMIC_t", "_LANGLE_t", "_LANGLE_EQUALS_t", "_EQUALS_t", "_RANGLE_t",
+ "_RANGLE_EQUALS_t", "_QUESTION_EQUALS_t", "_LBRACKET_t", "_RBRACKET_t",
+ "ACTIONS_t", "BIND_t", "CASE_t", "CLASS_t", "DEFAULT_t", "ELSE_t",
+ "EXISTING_t", "FOR_t", "IF_t", "IGNORE_t", "IN_t", "INCLUDE_t",
+ "LOCAL_t", "MODULE_t", "ON_t", "PIECEMEAL_t", "QUIETLY_t", "RETURN_t",
+ "RULE_t", "SWITCH_t", "TOGETHER_t", "UPDATED_t", "WHILE_t", "_LBRACE_t",
+ "_BAR_t", "_BARBAR_t", "_RBRACE_t", "ARG", "STRING", "$accept", "run",
+ "block", "rules", "null", "assign_list_opt", "arglist_opt", "local_opt",
+ "rule", "@1", "@2", "assign", "expr", "cases", "case", "lol", "list",
   "listp", "arg", "@3", "func", "eflags", "eflag", "bindlist", 0
 };
 #endif
@@ -1007,7 +1007,7 @@
 #endif
 #endif
 {
-
+
   register int yystate;
   register int yyn;
   int yyresult;

Modified: trunk/tools/jam/src/jamgram.y
==============================================================================
--- trunk/tools/jam/src/jamgram.y (original)
+++ trunk/tools/jam/src/jamgram.y 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -73,7 +73,7 @@
  *
  * New "[ rule ]" syntax evals rule into a LIST.
  *
- * Lists are now generated by compile_list() and
+ * Lists are now generated by compile_list() and
  * compile_append(), and any other rule that indirectly
  * makes a list, rather than being built directly here,
  * so that lists values can contain rule evaluations.
@@ -81,7 +81,7 @@
  * New 'return' rule sets the return value, though
  * other statements also may have return values.
  *
- * 'run' production split from 'block' production so
+ * 'run' production split from 'block' production so
  * that empty blocks can be handled separately.
  */
 
@@ -201,13 +201,13 @@
                 { $$.parse = pfor( $3.string, $5.parse, $7.parse, $2.number ); }
         | SWITCH_t list _LBRACE_t cases _RBRACE_t
                 { $$.parse = pswitch( $2.parse, $4.parse ); }
- | IF_t expr _LBRACE_t block _RBRACE_t
+ | IF_t expr _LBRACE_t block _RBRACE_t
                 { $$.parse = pif( $2.parse, $4.parse, pnull() ); }
- | MODULE_t list _LBRACE_t block _RBRACE_t
+ | MODULE_t list _LBRACE_t block _RBRACE_t
                 { $$.parse = pmodule( $2.parse, $4.parse ); }
- | CLASS_t lol _LBRACE_t block _RBRACE_t
+ | CLASS_t lol _LBRACE_t block _RBRACE_t
                 { $$.parse = pclass( $2.parse, $4.parse ); }
- | WHILE_t expr _LBRACE_t block _RBRACE_t
+ | WHILE_t expr _LBRACE_t block _RBRACE_t
                 { $$.parse = pwhile( $2.parse, $4.parse ); }
         | IF_t expr _LBRACE_t block _RBRACE_t ELSE_t rule
                 { $$.parse = pif( $2.parse, $4.parse, $7.parse ); }
@@ -217,7 +217,7 @@
                 { $$.parse = pon( $2.parse, $3.parse ); }
         | ACTIONS_t eflags ARG bindlist _LBRACE_t
                 { yymode( SCAN_STRING ); }
- STRING
+ STRING
                 { yymode( SCAN_NORMAL ); }
           _RBRACE_t
                 { $$.parse = psete( $3.string,$4.parse,$7.string,$2.number ); }
@@ -240,23 +240,23 @@
 /*
  * expr - an expression for if
  */
-expr : arg
+expr : arg
                 { $$.parse = peval( EXPR_EXISTS, $1.parse, pnull() ); }
- | expr _EQUALS_t expr
+ | expr _EQUALS_t expr
                 { $$.parse = peval( EXPR_EQUALS, $1.parse, $3.parse ); }
         | expr _BANG_EQUALS_t expr
                 { $$.parse = peval( EXPR_NOTEQ, $1.parse, $3.parse ); }
         | expr _LANGLE_t expr
                 { $$.parse = peval( EXPR_LESS, $1.parse, $3.parse ); }
- | expr _LANGLE_EQUALS_t expr
+ | expr _LANGLE_EQUALS_t expr
                 { $$.parse = peval( EXPR_LESSEQ, $1.parse, $3.parse ); }
- | expr _RANGLE_t expr
+ | expr _RANGLE_t expr
                 { $$.parse = peval( EXPR_MORE, $1.parse, $3.parse ); }
- | expr _RANGLE_EQUALS_t expr
+ | expr _RANGLE_EQUALS_t expr
                 { $$.parse = peval( EXPR_MOREEQ, $1.parse, $3.parse ); }
- | expr _AMPER_t expr
+ | expr _AMPER_t expr
                 { $$.parse = peval( EXPR_AND, $1.parse, $3.parse ); }
- | expr _AMPERAMPER_t expr
+ | expr _AMPERAMPER_t expr
                 { $$.parse = peval( EXPR_AND, $1.parse, $3.parse ); }
         | expr _BAR_t expr
                 { $$.parse = peval( EXPR_OR, $1.parse, $3.parse ); }
@@ -314,7 +314,7 @@
                 { $$.parse = pappend( $1.parse, $2.parse ); }
         ;
 
-arg : ARG
+arg : ARG
                 { $$.parse = plist( $1.string ); }
         | _LBRACKET_t { yymode( SCAN_NORMAL ); } func _RBRACKET_t
                 { $$.parse = $3.parse; }
@@ -329,7 +329,7 @@
                 { $$.parse = prule( $1.string, $2.parse ); }
         | ON_t arg arg lol
                 { $$.parse = pon( $2.parse, prule( $3.string, $4.parse ) ); }
- | ON_t arg RETURN_t list
+ | ON_t arg RETURN_t list
                 { $$.parse = pon( $2.parse, $4.parse ); }
         ;
 
@@ -369,5 +369,3 @@
         | BIND_t list
                 { $$.parse = $2.parse; }
         ;
-
-

Modified: trunk/tools/jam/src/jamgram.yy
==============================================================================
--- trunk/tools/jam/src/jamgram.yy (original)
+++ trunk/tools/jam/src/jamgram.yy 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -29,7 +29,7 @@
  *
  * New "[ rule ]" syntax evals rule into a LIST.
  *
- * Lists are now generated by compile_list() and
+ * Lists are now generated by compile_list() and
  * compile_append(), and any other rule that indirectly
  * makes a list, rather than being built directly here,
  * so that lists values can contain rule evaluations.
@@ -37,7 +37,7 @@
  * New 'return' rule sets the return value, though
  * other statements also may have return values.
  *
- * 'run' production split from 'block' production so
+ * 'run' production split from 'block' production so
  * that empty blocks can be handled separately.
  */
 
@@ -157,13 +157,13 @@
                 { $$.parse = pfor( $3.string, $5.parse, $7.parse, $2.number ); }
         | `switch` list `{` cases `}`
                 { $$.parse = pswitch( $2.parse, $4.parse ); }
- | `if` expr `{` block `}`
+ | `if` expr `{` block `}`
                 { $$.parse = pif( $2.parse, $4.parse, pnull() ); }
- | `module` list `{` block `}`
+ | `module` list `{` block `}`
                 { $$.parse = pmodule( $2.parse, $4.parse ); }
- | `class` lol `{` block `}`
+ | `class` lol `{` block `}`
                 { $$.parse = pclass( $2.parse, $4.parse ); }
- | `while` expr `{` block `}`
+ | `while` expr `{` block `}`
                 { $$.parse = pwhile( $2.parse, $4.parse ); }
         | `if` expr `{` block `}` `else` rule
                 { $$.parse = pif( $2.parse, $4.parse, $7.parse ); }
@@ -173,7 +173,7 @@
                 { $$.parse = pon( $2.parse, $3.parse ); }
         | `actions` eflags ARG bindlist `{`
                 { yymode( SCAN_STRING ); }
- STRING
+ STRING
                 { yymode( SCAN_NORMAL ); }
           `}`
                 { $$.parse = psete( $3.string,$4.parse,$7.string,$2.number ); }
@@ -196,23 +196,23 @@
 /*
  * expr - an expression for if
  */
-expr : arg
+expr : arg
                 { $$.parse = peval( EXPR_EXISTS, $1.parse, pnull() ); }
- | expr `=` expr
+ | expr `=` expr
                 { $$.parse = peval( EXPR_EQUALS, $1.parse, $3.parse ); }
         | expr `!=` expr
                 { $$.parse = peval( EXPR_NOTEQ, $1.parse, $3.parse ); }
         | expr `<` expr
                 { $$.parse = peval( EXPR_LESS, $1.parse, $3.parse ); }
- | expr `<=` expr
+ | expr `<=` expr
                 { $$.parse = peval( EXPR_LESSEQ, $1.parse, $3.parse ); }
- | expr `>` expr
+ | expr `>` expr
                 { $$.parse = peval( EXPR_MORE, $1.parse, $3.parse ); }
- | expr `>=` expr
+ | expr `>=` expr
                 { $$.parse = peval( EXPR_MOREEQ, $1.parse, $3.parse ); }
- | expr `&` expr
+ | expr `&` expr
                 { $$.parse = peval( EXPR_AND, $1.parse, $3.parse ); }
- | expr `&&` expr
+ | expr `&&` expr
                 { $$.parse = peval( EXPR_AND, $1.parse, $3.parse ); }
         | expr `|` expr
                 { $$.parse = peval( EXPR_OR, $1.parse, $3.parse ); }
@@ -270,7 +270,7 @@
                 { $$.parse = pappend( $1.parse, $2.parse ); }
         ;
 
-arg : ARG
+arg : ARG
                 { $$.parse = plist( $1.string ); }
         | `[` { yymode( SCAN_NORMAL ); } func `]`
                 { $$.parse = $3.parse; }
@@ -285,7 +285,7 @@
                 { $$.parse = prule( $1.string, $2.parse ); }
         | `on` arg arg lol
                 { $$.parse = pon( $2.parse, prule( $3.string, $4.parse ) ); }
- | `on` arg `return` list
+ | `on` arg `return` list
                 { $$.parse = pon( $2.parse, $4.parse ); }
         ;
 

Modified: trunk/tools/jam/src/lists.c
==============================================================================
--- trunk/tools/jam/src/lists.c (original)
+++ trunk/tools/jam/src/lists.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -25,7 +25,7 @@
  * 09/07/00 (seiwald) - documented lol_*() functions
  */
 
-static LIST *freelist = 0; /* junkpile for list_free() */
+static LIST *freelist = 0; /* junkpile for list_free() */
 
 /*
  * list_append() - append a list onto another one, returning total
@@ -33,25 +33,25 @@
 
 LIST *
 list_append(
- LIST *l,
- LIST *nl )
+ LIST *l,
+ LIST *nl )
 {
- if( !nl )
- {
- /* Just return l */
- }
- else if( !l )
- {
- l = nl;
- }
- else
- {
- /* Graft two non-empty lists. */
- l->tail->next = nl;
- l->tail = nl->tail;
- }
+ if( !nl )
+ {
+ /* Just return l */
+ }
+ else if( !l )
+ {
+ l = nl;
+ }
+ else
+ {
+ /* Graft two non-empty lists. */
+ l->tail->next = nl;
+ l->tail = nl->tail;
+ }
 
- return l;
+ return l;
 }
 
 /*
@@ -60,41 +60,41 @@
 
 LIST *
 list_new(
- LIST *head,
- char *string )
+ LIST *head,
+ char *string )
 {
- LIST *l;
+ LIST *l;
 
- if( DEBUG_LISTS )
- printf( "list > %s <\n", string );
+ if( DEBUG_LISTS )
+ printf( "list > %s <\n", string );
 
- /* Get list struct from freelist, if one available. */
- /* Otherwise allocate. */
- /* If from freelist, must free string first */
-
- if( freelist )
- {
- l = freelist;
- freestr( l->string );
- freelist = freelist->next;
- }
- else
- {
- l = (LIST *)BJAM_MALLOC( sizeof( LIST ) );
- }
+ /* Get list struct from freelist, if one available. */
+ /* Otherwise allocate. */
+ /* If from freelist, must free string first */
 
- /* If first on chain, head points here. */
- /* If adding to chain, tack us on. */
- /* Tail must point to this new, last element. */
+ if( freelist )
+ {
+ l = freelist;
+ freestr( l->string );
+ freelist = freelist->next;
+ }
+ else
+ {
+ l = (LIST *)BJAM_MALLOC( sizeof( LIST ) );
+ }
 
- if( !head ) head = l;
- else head->tail->next = l;
- head->tail = l;
- l->next = 0;
+ /* If first on chain, head points here. */
+ /* If adding to chain, tack us on. */
+ /* Tail must point to this new, last element. */
+
+ if( !head ) head = l;
+ else head->tail->next = l;
+ head->tail = l;
+ l->next = 0;
 
- l->string = string;
+ l->string = string;
 
- return head;
+ return head;
 }
 
 /*
@@ -103,13 +103,13 @@
 
 LIST *
 list_copy(
- LIST *l,
- LIST *nl )
+ LIST *l,
+ LIST *nl )
 {
- for( ; nl; nl = list_next( nl ) )
- l = list_new( l, copystr( nl->string ) );
+ for( ; nl; nl = list_next( nl ) )
+ l = list_new( l, copystr( nl->string ) );
 
- return l;
+ return l;
 }
 
 /*
@@ -118,19 +118,19 @@
 
 LIST *
 list_sublist(
- LIST *l,
- int start,
- int count )
+ LIST *l,
+ int start,
+ int count )
 {
- LIST *nl = 0;
+ LIST *nl = 0;
 
- for( ; l && start--; l = list_next( l ) )
- ;
+ for( ; l && start--; l = list_next( l ) )
+ ;
 
- for( ; l && count--; l = list_next( l ) )
- nl = list_new( nl, copystr( l->string ) );
+ for( ; l && count--; l = list_next( l ) )
+ nl = list_new( nl, copystr( l->string ) );
 
- return nl;
+ return nl;
 }
 
 static int str_ptr_compare(const void *va, const void *vb)
@@ -177,15 +177,15 @@
  */
 
 void
-list_free( LIST *head )
+list_free( LIST *head )
 {
- /* Just tack onto freelist. */
+ /* Just tack onto freelist. */
 
- if( head )
- {
- head->tail->next = freelist;
- freelist = head;
- }
+ if( head )
+ {
+ head->tail->next = freelist;
+ freelist = head;
+ }
 }
 
 /*
@@ -226,12 +226,12 @@
 int
 list_length( LIST *l )
 {
- int n = 0;
+ int n = 0;
 
- for( ; l; l = list_next( l ), ++n )
- ;
+ for( ; l; l = list_next( l ), ++n )
+ ;
 
- return n;
+ return n;
 }
 
 int
@@ -277,11 +277,11 @@
 
 void
 lol_add(
- LOL *lol,
- LIST *l )
+ LOL *lol,
+ LIST *l )
 {
- if( lol->count < LOL_MAX )
- lol->list[ lol->count++ ] = l;
+ if( lol->count < LOL_MAX )
+ lol->list[ lol->count++ ] = l;
 }
 
 /*
@@ -291,12 +291,12 @@
 void
 lol_free( LOL *lol )
 {
- int i;
+ int i;
 
- for( i = 0; i < lol->count; i++ )
- list_free( lol->list[i] );
+ for( i = 0; i < lol->count; i++ )
+ list_free( lol->list[i] );
 
- lol->count = 0;
+ lol->count = 0;
 }
 
 /*
@@ -305,10 +305,10 @@
 
 LIST *
 lol_get(
- LOL *lol,
- int i )
+ LOL *lol,
+ int i )
 {
- return i < lol->count ? lol->list[i] : 0;
+ return i < lol->count ? lol->list[i] : 0;
 }
 
 /*
@@ -318,12 +318,12 @@
 void
 lol_print( LOL *lol )
 {
- int i;
+ int i;
 
- for( i = 0; i < lol->count; i++ )
- {
- if( i )
- printf( " : " );
- list_print( lol->list[i] );
- }
+ for( i = 0; i < lol->count; i++ )
+ {
+ if( i )
+ printf( " : " );
+ list_print( lol->list[i] );
+ }
 }

Modified: trunk/tools/jam/src/lists.h
==============================================================================
--- trunk/tools/jam/src/lists.h (original)
+++ trunk/tools/jam/src/lists.h 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -19,24 +19,24 @@
  *
  * Structures defined:
  *
- * LIST - list of strings
- * LOL - list of LISTs
+ * LIST - list of strings
+ * LOL - list of LISTs
  *
  * External routines:
  *
- * list_append() - append a list onto another one, returning total
- * list_new() - tack a string onto the end of a list of strings
- * list_copy() - copy a whole list of strings
- * list_sublist() - copy a subset of a list of strings
- * list_free() - free a list of strings
- * list_print() - print a list of strings to stdout
- * list_length() - return the number of items in the list
- *
- * lol_init() - initialize a LOL (list of lists)
- * lol_add() - append a LIST onto an LOL
- * lol_free() - free the LOL and its LISTs
- * lol_get() - return one of the LISTs in the LOL
- * lol_print() - debug print LISTS separated by ":"
+ * list_append() - append a list onto another one, returning total
+ * list_new() - tack a string onto the end of a list of strings
+ * list_copy() - copy a whole list of strings
+ * list_sublist() - copy a subset of a list of strings
+ * list_free() - free a list of strings
+ * list_print() - print a list of strings to stdout
+ * list_length() - return the number of items in the list
+ *
+ * lol_init() - initialize a LOL (list of lists)
+ * lol_add() - append a LIST onto an LOL
+ * lol_free() - free the LOL and its LISTs
+ * lol_get() - return one of the LISTs in the LOL
+ * lol_print() - debug print LISTS separated by ":"
  *
  * 04/13/94 (seiwald) - added shorthand L0 for null list pointer
  * 08/23/94 (seiwald) - new list_append()
@@ -52,9 +52,9 @@
 typedef struct _list LIST;
 
 struct _list {
- LIST *next;
- LIST *tail; /* only valid in head node */
- char *string; /* private copy */
+ LIST *next;
+ LIST *tail; /* only valid in head node */
+ char *string; /* private copy */
 } ;
 
 /*
@@ -66,17 +66,17 @@
 # define LOL_MAX 9
 
 struct _lol {
- int count;
- LIST *list[ LOL_MAX ];
+ int count;
+ LIST *list[ LOL_MAX ];
 } ;
 
-LIST * list_append( LIST *l, LIST *nl );
-LIST * list_copy( LIST *l, LIST *nl );
-void list_free( LIST *head );
-LIST * list_new( LIST *head, char *string );
-void list_print( LIST *l );
-int list_length( LIST *l );
-LIST * list_sublist( LIST *l, int start, int count );
+LIST * list_append( LIST *l, LIST *nl );
+LIST * list_copy( LIST *l, LIST *nl );
+void list_free( LIST *head );
+LIST * list_new( LIST *head, char *string );
+void list_print( LIST *l );
+int list_length( LIST *l );
+LIST * list_sublist( LIST *l, int start, int count );
 LIST * list_pop_front( LIST *l );
 LIST * list_sort( LIST *l);
 LIST * list_unique( LIST *sorted_list);
@@ -86,11 +86,11 @@
 
 # define L0 ((LIST *)0)
 
-void lol_add( LOL *lol, LIST *l );
-void lol_init( LOL *lol );
-void lol_free( LOL *lol );
-LIST * lol_get( LOL *lol, int i );
-void lol_print( LOL *lol );
+void lol_add( LOL *lol, LIST *l );
+void lol_init( LOL *lol );
+void lol_free( LOL *lol );
+LIST * lol_get( LOL *lol, int i );
+void lol_print( LOL *lol );
 void lol_build( LOL* lol, char** elements );
 
 #endif

Modified: trunk/tools/jam/src/make.c
==============================================================================
--- trunk/tools/jam/src/make.c (original)
+++ trunk/tools/jam/src/make.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -23,19 +23,19 @@
  * execution, is in make1.c.
  *
  * External routines:
- * make() - make a target, given its name
+ * make() - make a target, given its name
  *
  * Internal routines:
- * make0() - bind and scan everything to make a TARGET
- * make0sort() - reorder TARGETS chain by their time (newest to oldest)
+ * make0() - bind and scan everything to make a TARGET
+ * make0sort() - reorder TARGETS chain by their time (newest to oldest)
  *
  * 12/26/93 (seiwald) - allow NOTIME targets to be expanded via $(<), $(>)
  * 01/04/94 (seiwald) - print all targets, bounded, when tracing commands
  * 04/08/94 (seiwald) - progress report now reflects only targets with actions
  * 04/11/94 (seiwald) - Combined deps & headers into deps[2] in TARGET.
  * 12/20/94 (seiwald) - NOTIME renamed NOTFILE.
- * 12/20/94 (seiwald) - make0() headers after determining fate of target, so
- * that headers aren't seen as dependents on themselves.
+ * 12/20/94 (seiwald) - make0() headers after determining fate of target, so
+ * that headers aren't seen as dependents on themselves.
  * 01/19/95 (seiwald) - distinguish between CANTFIND/CANTMAKE targets.
  * 02/02/95 (seiwald) - propagate leaf source time for new LEAVES rule.
  * 02/14/95 (seiwald) - NOUPDATE rule means don't update existing target.
@@ -74,29 +74,29 @@
 static void dependGraphOutput( TARGET *t, int depth );
 #endif
 
-static const char *target_fate[] =
+static const char *target_fate[] =
 {
- "init", /* T_FATE_INIT */
- "making", /* T_FATE_MAKING */
- "stable", /* T_FATE_STABLE */
- "newer", /* T_FATE_NEWER */
- "temp", /* T_FATE_ISTMP */
- "touched", /* T_FATE_TOUCHED */
- "rebuild", /* T_FATE_REBUILD */
- "missing", /* T_FATE_MISSING */
- "needtmp", /* T_FATE_NEEDTMP */
- "old", /* T_FATE_OUTDATED */
- "update", /* T_FATE_UPDATE */
- "nofind", /* T_FATE_CANTFIND */
- "nomake" /* T_FATE_CANTMAKE */
+ "init", /* T_FATE_INIT */
+ "making", /* T_FATE_MAKING */
+ "stable", /* T_FATE_STABLE */
+ "newer", /* T_FATE_NEWER */
+ "temp", /* T_FATE_ISTMP */
+ "touched", /* T_FATE_TOUCHED */
+ "rebuild", /* T_FATE_REBUILD */
+ "missing", /* T_FATE_MISSING */
+ "needtmp", /* T_FATE_NEEDTMP */
+ "old", /* T_FATE_OUTDATED */
+ "update", /* T_FATE_UPDATE */
+ "nofind", /* T_FATE_CANTFIND */
+ "nomake" /* T_FATE_CANTMAKE */
 } ;
 
-static const char *target_bind[] =
+static const char *target_bind[] =
 {
- "unbound",
- "missing",
- "parents",
- "exists",
+ "unbound",
+ "missing",
+ "parents",
+ "exists",
 } ;
 
 # define spaces(x) ( " " + ( x > 20 ? 0 : 20-x ) )
@@ -106,77 +106,77 @@
  */
 
 int
-make(
- int n_targets,
- const char **targets,
- int anyhow )
-{
- int i;
- COUNTS counts[1];
- int status = 0; /* 1 if anything fails */
+make(
+ int n_targets,
+ const char **targets,
+ int anyhow )
+{
+ int i;
+ COUNTS counts[1];
+ int status = 0; /* 1 if anything fails */
 
 #ifdef OPT_HEADER_CACHE_EXT
- hcache_init();
+ hcache_init();
 #endif
 
- memset( (char *)counts, 0, sizeof( *counts ) );
+ memset( (char *)counts, 0, sizeof( *counts ) );
 
     /* First bind all targets with LOCATE_TARGET setting. This is
- needed to correctly handle dependencies to generated headers.
+ needed to correctly handle dependencies to generated headers.
     */
     bind_explicitly_located_targets();
 
     { PROFILE_ENTER(MAKE_MAKE0);
- for( i = 0; i < n_targets; i++ )
- {
- TARGET *t = bindtarget( targets[i] );
+ for( i = 0; i < n_targets; i++ )
+ {
+ TARGET *t = bindtarget( targets[i] );
 
- make0( t, 0, 0, counts, anyhow );
- }
+ make0( t, 0, 0, counts, anyhow );
+ }
     PROFILE_EXIT(MAKE_MAKE0); }
-
+
 #ifdef OPT_GRAPH_DEBUG_EXT
- if( DEBUG_GRAPH )
- {
- for( i = 0; i < n_targets; i++ )
- {
- TARGET *t = bindtarget( targets[i] );
- dependGraphOutput( t, 0 );
- }
- }
-#endif
-
- if( DEBUG_MAKE )
- {
- if( counts->targets )
- printf( "...found %d target%s...\n", counts->targets,
- counts->targets > 1 ? "s" : "" );
- if( counts->temp )
- printf( "...using %d temp target%s...\n", counts->temp,
- counts->temp > 1 ? "s" : "" );
- if( counts->updating )
- printf( "...updating %d target%s...\n", counts->updating,
- counts->updating > 1 ? "s" : "" );
- if( counts->cantfind )
- printf( "...can't find %d target%s...\n", counts->cantfind,
- counts->cantfind > 1 ? "s" : "" );
- if( counts->cantmake )
- printf( "...can't make %d target%s...\n", counts->cantmake,
- counts->cantmake > 1 ? "s" : "" );
- }
+ if ( DEBUG_GRAPH )
+ {
+ for( i = 0; i < n_targets; i++ )
+ {
+ TARGET *t = bindtarget( targets[i] );
+ dependGraphOutput( t, 0 );
+ }
+ }
+#endif
+
+ if ( DEBUG_MAKE )
+ {
+ if ( counts->targets )
+ printf( "...found %d target%s...\n", counts->targets,
+ counts->targets > 1 ? "s" : "" );
+ if ( counts->temp )
+ printf( "...using %d temp target%s...\n", counts->temp,
+ counts->temp > 1 ? "s" : "" );
+ if ( counts->updating )
+ printf( "...updating %d target%s...\n", counts->updating,
+ counts->updating > 1 ? "s" : "" );
+ if ( counts->cantfind )
+ printf( "...can't find %d target%s...\n", counts->cantfind,
+ counts->cantfind > 1 ? "s" : "" );
+ if ( counts->cantmake )
+ printf( "...can't make %d target%s...\n", counts->cantmake,
+ counts->cantmake > 1 ? "s" : "" );
+ }
 
 #ifdef OPT_HEADER_CACHE_EXT
- hcache_done();
+ hcache_done();
 #endif
 
- status = counts->cantfind || counts->cantmake;
+ status = counts->cantfind || counts->cantmake;
 
     { PROFILE_ENTER(MAKE_MAKE1);
- for( i = 0; i < n_targets; i++ )
- status |= make1( bindtarget( targets[i] ) );
+ for( i = 0; i < n_targets; i++ )
+ status |= make1( bindtarget( targets[i] ) );
     PROFILE_EXIT(MAKE_MAKE1); }
 
- return status;
+ return status;
 }
 
 /* Force any dependents of t that have already at least begun being
@@ -185,7 +185,7 @@
 static void update_dependents(TARGET* t)
 {
     TARGETS *q;
-
+
     for (q = t->dependents; q; q = q->next)
     {
         TARGET* p = q->target;
@@ -197,13 +197,13 @@
         if (fate0 != T_FATE_INIT && fate0 < T_FATE_BUILD)
         {
             p->fate = T_FATE_UPDATE;
-
+
             if (DEBUG_FATE)
             {
                 printf( "fate change %s from %s to %s (as dependent of %s)\n",
                         p->name, target_fate[fate0], target_fate[p->fate], t->name);
             }
-
+
             /* If we're done visiting it, go back and make sure its
              * dependents get rebuilt.
              */
@@ -227,7 +227,7 @@
             if (DEBUG_FATE)
                 printf( "fate change %s from %s to %s (by rebuild)\n",
                         r->name, target_fate[r->fate], target_fate[T_FATE_REBUILD]);
-
+
             /* Force rebuild it */
             r->fate = T_FATE_REBUILD;
 
@@ -244,376 +244,359 @@
  */
 
 void
-make0(
- TARGET *t,
- TARGET *p, /* parent */
- int depth, /* for display purposes */
- COUNTS *counts, /* for reporting */
- int anyhow ) /* forcibly touch all (real) targets */
-{
- TARGETS *c, *d, *incs;
- TARGET *ptime = t;
- time_t last, leaf, hlast;
- int fate;
- const char *flag = "";
- SETTINGS *s;
-
-#ifdef OPT_GRAPH_DEBUG_EXT
- int savedFate, oldTimeStamp;
-#endif
-
- if( DEBUG_MAKEPROG )
- printf( "make\t--\t%s%s\n", spaces( depth ), t->name );
-
- /*
- * Step 1: initialize
- */
-
- if( DEBUG_MAKEPROG )
- printf( "make\t--\t%s%s\n", spaces( depth ), t->name );
-
- t->fate = T_FATE_MAKING;
-
- /*
- * Step 2: under the influence of "on target" variables,
- * bind the target and search for headers.
- */
-
- /* Step 2a: set "on target" variables. */
-
- s = copysettings( t->settings );
- pushsettings( s );
-
- /* Step 2b: find and timestamp the target file (if it's a file). */
-
- if( t->binding == T_BIND_UNBOUND && !( t->flags & T_FLAG_NOTFILE ) )
- {
- char* another_target;
- t->boundname = search( t->name, &t->time, &another_target,
- (t->flags & T_FLAG_ISFILE));
- /* If it was detected that this target refers to an already
- existing and bound one, we add include dependency, so that
- every target which depends on us will depend on that other
- target. */
- if( another_target )
- {
- TARGET* includes;
- if (!t->includes) {
- t->includes = copytarget(t);
- t->includes->original_target = t;
- }
- includes = t->includes;
- includes->depends = targetlist( includes->depends,
- list_new( L0, another_target ) );
- }
-
- t->binding = t->time ? T_BIND_EXISTS : T_BIND_MISSING;
- }
-
- /* INTERNAL, NOTFILE header nodes have the time of their parents */
-
- if( p && t->flags & T_FLAG_INTERNAL )
- ptime = p;
-
- /* If temp file doesn't exist but parent does, use parent */
- if( p && t->flags & T_FLAG_TEMP &&
- t->binding == T_BIND_MISSING &&
- p->binding != T_BIND_MISSING )
+make0(
+ TARGET *t,
+ TARGET *p, /* parent */
+ int depth, /* for display purposes */
+ COUNTS *counts, /* for reporting */
+ int anyhow ) /* forcibly touch all (real) targets */
+{
+ TARGETS *c, *d, *incs;
+ TARGET *ptime = t;
+ time_t last;
+ time_t leaf;
+ time_t hlast;
+ int fate;
+ const char *flag = "";
+ SETTINGS *s;
+
+#ifdef OPT_GRAPH_DEBUG_EXT
+ int savedFate, oldTimeStamp;
+#endif
+
+ if ( DEBUG_MAKEPROG )
+ printf( "make\t--\t%s%s\n", spaces( depth ), t->name );
+
+ /*
+ * Step 1: initialize
+ */
+
+ if ( DEBUG_MAKEPROG )
+ printf( "make\t--\t%s%s\n", spaces( depth ), t->name );
+
+ t->fate = T_FATE_MAKING;
+
+ /*
+ * Step 2: under the influence of "on target" variables,
+ * bind the target and search for headers.
+ */
+
+ /* Step 2a: set "on target" variables. */
+ s = copysettings( t->settings );
+ pushsettings( s );
+
+ /* Step 2b: find and timestamp the target file (if it is a file). */
+ if ( t->binding == T_BIND_UNBOUND && !( t->flags & T_FLAG_NOTFILE ) )
+ {
+ char * another_target;
+ t->boundname = search( t->name, &t->time, &another_target,
+ t->flags & T_FLAG_ISFILE );
+ /* If it was detected that this target refers to an already existing and
+ * bound one, we add an include dependency, so that every target
+ * depending on us will depend on that other target as well.
+ */
+ if ( another_target )
+ add_include( t, bindtarget( another_target ) );
+
+ t->binding = t->time ? T_BIND_EXISTS : T_BIND_MISSING;
+ }
+
+ /* INTERNAL, NOTFILE header nodes have the time of their parents. */
+ if ( p && t->flags & T_FLAG_INTERNAL )
+ ptime = p;
+
+ /* If temp file doesn't exist but parent does, use parent */
+ if ( p && t->flags & T_FLAG_TEMP &&
+ t->binding == T_BIND_MISSING &&
+ p->binding != T_BIND_MISSING )
     {
- t->binding = T_BIND_PARENTS;
- ptime = p;
+ t->binding = T_BIND_PARENTS;
+ ptime = p;
     }
 
 #ifdef OPT_SEMAPHORE
- {
- LIST *var = var_get( "JAM_SEMAPHORE" );
- if( var )
- {
- TARGET *semaphore = bindtarget( var->string );
-
- semaphore->progress = T_MAKE_SEMAPHORE;
- t->semaphore = semaphore;
- }
- }
-#endif
-
- /* Step 2c: If its a file, search for headers. */
-
- if( t->binding == T_BIND_EXISTS )
- headers( t );
-
- /* Step 2d: reset "on target" variables */
-
- popsettings( s );
- freesettings( s );
-
- /*
- * Pause for a little progress reporting
- */
-
- if( DEBUG_BIND )
-
- {
- if( strcmp( t->name, t->boundname ) )
- {
- printf( "bind\t--\t%s%s: %s\n",
- spaces( depth ), t->name, t->boundname );
- }
-
- switch( t->binding )
- {
- case T_BIND_UNBOUND:
- case T_BIND_MISSING:
- case T_BIND_PARENTS:
- printf( "time\t--\t%s%s: %s\n",
- spaces( depth ), t->name, target_bind[ t->binding ] );
- break;
-
- case T_BIND_EXISTS:
- printf( "time\t--\t%s%s: %s",
- spaces( depth ), t->name, ctime( &t->time ) );
- break;
- }
- }
-
- /*
- * Step 3: recursively make0() dependents & headers
- */
-
- /* Step 3a: recursively make0() dependents */
-
- for( c = t->depends; c; c = c->next )
- {
- int internal = t->flags & T_FLAG_INTERNAL;
+ {
+ LIST * var = var_get( "JAM_SEMAPHORE" );
+ if ( var )
+ {
+ TARGET * semaphore = bindtarget( var->string );
+ semaphore->progress = T_MAKE_SEMAPHORE;
+ t->semaphore = semaphore;
+ }
+ }
+#endif
+
+ /* Step 2c: If its a file, search for headers. */
+ if ( t->binding == T_BIND_EXISTS )
+ headers( t );
+
+ /* Step 2d: reset "on target" variables */
+ popsettings( s );
+ freesettings( s );
+
+ /*
+ * Pause for a little progress reporting .
+ */
+
+ if ( DEBUG_BIND )
+ {
+ if ( strcmp( t->name, t->boundname ) )
+ {
+ printf( "bind\t--\t%s%s: %s\n",
+ spaces( depth ), t->name, t->boundname );
+ }
+
+ switch( t->binding )
+ {
+ case T_BIND_UNBOUND:
+ case T_BIND_MISSING:
+ case T_BIND_PARENTS:
+ printf( "time\t--\t%s%s: %s\n",
+ spaces( depth ), t->name, target_bind[ t->binding ] );
+ break;
+
+ case T_BIND_EXISTS:
+ printf( "time\t--\t%s%s: %s",
+ spaces( depth ), t->name, ctime( &t->time ) );
+ break;
+ }
+ }
+
+ /*
+ * Step 3: recursively make0() dependants & headers.
+ */
+
+ /* Step 3a: recursively make0() dependants. */
+
+ for( c = t->depends; c; c = c->next )
+ {
+ int internal = t->flags & T_FLAG_INTERNAL;
 /* Seems like it's not relevant for us....
- if( DEBUG_DEPENDS )
- printf( "%s \"%s\" : \"%s\" ;\n",
- internal ? "Includes" : "Depends",
- t->name, c->target->name );
+ if ( DEBUG_DEPENDS )
+ printf( "%s \"%s\" : \"%s\" ;\n",
+ internal ? "Includes" : "Depends",
+ t->name, c->target->name );
 */
 
- /* Warn about circular deps, except for includes, */
- /* which include each other alot. */
-
- if( c->target->fate == T_FATE_INIT )
- make0( c->target, ptime, depth + 1, counts, anyhow );
- else if( c->target->fate == T_FATE_MAKING && !internal )
- printf( "warning: %s depends on itself\n", c->target->name );
- }
+ /* Warn about circular deps, except for includes, */
+ /* which include each other alot. */
 
- /* Step 3b: recursively make0() internal includes node */
+ if ( c->target->fate == T_FATE_INIT )
+ make0( c->target, ptime, depth + 1, counts, anyhow );
+ else if ( c->target->fate == T_FATE_MAKING && !internal )
+ printf( "warning: %s depends on itself\n", c->target->name );
+ }
 
- if( t->includes )
- make0( t->includes, p, depth + 1, counts, anyhow );
+ /* Step 3b: recursively make0() internal includes node */
 
- /* Step 3c: add dependents' includes to our direct dependencies */
+ if ( t->includes )
+ make0( t->includes, p, depth + 1, counts, anyhow );
 
- incs = 0;
+ /* Step 3c: add dependents' includes to our direct dependencies */
 
- for( c = t->depends; c; c = c->next )
- if( c->target->includes )
- incs = targetentry( incs, c->target->includes );
+ incs = 0;
 
- t->depends = targetchain( t->depends, incs );
+ for( c = t->depends; c; c = c->next )
+ if ( c->target->includes )
+ incs = targetentry( incs, c->target->includes );
 
- /*
- * Step 4: compute time & fate
- */
+ t->depends = targetchain( t->depends, incs );
 
- /* Step 4a: pick up dependents' time and fate */
+ /*
+ * Step 4: compute time & fate
+ */
 
+ /* Step 4a: pick up dependants' time and fate */
 
- last = 0;
- leaf = 0;
+ last = 0;
+ leaf = 0;
     fate = T_FATE_STABLE;
 
- for( c = t->depends; c; c = c->next )
- {
- /* If LEAVES has been applied, we only heed the timestamps of */
- /* the leaf source nodes. */
-
- leaf = max( leaf, c->target->leaf );
-
- if( t->flags & T_FLAG_LEAVES )
- {
- last = leaf;
- continue;
- }
-
- last = max( last, c->target->time );
- fate = max( fate, c->target->fate );
-
-#ifdef OPT_GRAPH_DEBUG_EXT
- if( DEBUG_FATE )
- if( fate < c->target->fate )
- printf( "fate change %s from %s to %s by dependency %s\n",
- t->name,
- target_fate[fate], target_fate[c->target->fate],
- c->target->name);
-#endif
-
- }
-
- /* Step 4b: pick up included headers time */
-
- /*
- * If a header is newer than a temp source that includes it,
- * the temp source will need building.
- */
-
- hlast = t->includes ? t->includes->time : 0;
-
- /* Step 4c: handle NOUPDATE oddity */
-
- /*
- * If a NOUPDATE file exists, make dependents eternally old.
- * Don't inherit our fate from our dependents. Decide fate
- * based only upon other flags and our binding (done later).
- */
-
- if( t->flags & T_FLAG_NOUPDATE )
- {
-#ifdef OPT_GRAPH_DEBUG_EXT
- if( DEBUG_FATE )
- if( fate != T_FATE_STABLE )
- printf( "fate change %s back to stable, NOUPDATE.\n",
- t->name);
-#endif
-
- last = 0;
- t->time = 0;
-
-
- /*
- * Don't inherit our fate from our dependents. Decide fate
- * based only upon other flags and our binding (done later).
- */
-
- fate = T_FATE_STABLE;
- }
-
- /* Step 4d: determine fate: rebuild target or what? */
-
- /*
- In English:
- If can't find or make child, can't make target.
- If children changed, make target.
- If target missing, make it.
- If children newer, make target.
- If temp's children newer than parent, make temp.
- If temp's headers newer than parent, make temp.
- If deliberately touched, make it.
- If up-to-date temp file present, use it.
- If target newer than non-notfile parent, mark target newer.
- Otherwise, stable!
-
- Note this block runs from least to most stable:
- as we make it further down the list, the target's
- fate is getting stabler.
- */
-
-#ifdef OPT_GRAPH_DEBUG_EXT
- savedFate = fate;
- oldTimeStamp = 0;
-#endif
-
- if( fate >= T_FATE_BROKEN )
- {
- fate = T_FATE_CANTMAKE;
- }
- else if( fate >= T_FATE_SPOIL )
- {
- fate = T_FATE_UPDATE;
- }
- else if( t->binding == T_BIND_MISSING )
- {
- fate = T_FATE_MISSING;
- }
- else if( t->binding == T_BIND_EXISTS && last > t->time )
- {
-#ifdef OPT_GRAPH_DEBUG_EXT
- oldTimeStamp = 1;
-#endif
- fate = T_FATE_OUTDATED;
- }
- else if( t->binding == T_BIND_PARENTS && last > p->time )
- {
-#ifdef OPT_GRAPH_DEBUG_EXT
- oldTimeStamp = 1;
-#endif
- fate = T_FATE_NEEDTMP;
- }
- else if( t->binding == T_BIND_PARENTS && hlast > p->time )
- {
- fate = T_FATE_NEEDTMP;
- }
- else if( t->flags & T_FLAG_TOUCHED )
- {
- fate = T_FATE_TOUCHED;
- }
- else if( anyhow && !( t->flags & T_FLAG_NOUPDATE ) )
- {
- fate = T_FATE_TOUCHED;
- }
- else if( t->binding == T_BIND_EXISTS && t->flags & T_FLAG_TEMP )
- {
- fate = T_FATE_ISTMP;
- }
- else if( t->binding == T_BIND_EXISTS && p &&
- p->binding != T_BIND_UNBOUND && t->time > p->time )
- {
-#ifdef OPT_GRAPH_DEBUG_EXT
- oldTimeStamp = 1;
-#endif
- fate = T_FATE_NEWER;
- }
- else
- {
- fate = T_FATE_STABLE;
- }
-#ifdef OPT_GRAPH_DEBUG_EXT
- if( DEBUG_FATE && fate != savedFate )
- if( savedFate == T_FATE_STABLE )
- printf( "fate change %s set to %s%s\n",
- t->name, target_fate[fate],
- oldTimeStamp ? " (by timestamp)" : "" );
- else
- printf( "fate change %s from %s to %s%s\n",
- t->name, target_fate[savedFate], target_fate[fate],
- oldTimeStamp ? " (by timestamp)" : "" );
-#endif
-
- /* Step 4e: handle missing files */
- /* If it's missing and there are no actions to create it, boom. */
- /* If we can't make a target we don't care about, 'sokay */
- /* We could insist that there are updating actions for all missing */
- /* files, but if they have dependents we just pretend it's NOTFILE. */
-
- if( fate == T_FATE_MISSING && !t->actions && !t->depends )
- {
- if( t->flags & T_FLAG_NOCARE )
- {
-#ifdef OPT_GRAPH_DEBUG_EXT
- if( DEBUG_FATE )
- printf( "fate change %s to STABLE from %s, "
- "no actions, no dependents and don't care\n",
- t->name, target_fate[fate]);
-#endif
- fate = T_FATE_STABLE;
- }
- else
- {
- printf( "don't know how to make %s\n", t->name );
-
- fate = T_FATE_CANTFIND;
- }
- }
+ for ( c = t->depends; c; c = c->next )
+ {
+ /* If LEAVES has been applied, we only heed the timestamps of */
+ /* the leaf source nodes. */
+
+ leaf = max( leaf, c->target->leaf );
+
+ if ( t->flags & T_FLAG_LEAVES )
+ {
+ last = leaf;
+ continue;
+ }
+
+ last = max( last, c->target->time );
+ fate = max( fate, c->target->fate );
+
+#ifdef OPT_GRAPH_DEBUG_EXT
+ if ( DEBUG_FATE )
+ if ( fate < c->target->fate )
+ printf( "fate change %s from %s to %s by dependency %s\n",
+ t->name,
+ target_fate[fate], target_fate[c->target->fate],
+ c->target->name);
+#endif
+
+ }
+
+ /* Step 4b: pick up included headers time */
+
+ /*
+ * If a header is newer than a temp source that includes it,
+ * the temp source will need building.
+ */
+
+ hlast = t->includes ? t->includes->time : 0;
+
+ /* Step 4c: handle NOUPDATE oddity */
+
+ /*
+ * If a NOUPDATE file exists, make dependents eternally old.
+ * Don't inherit our fate from our dependents. Decide fate
+ * based only upon other flags and our binding (done later).
+ */
+
+ if ( t->flags & T_FLAG_NOUPDATE )
+ {
+#ifdef OPT_GRAPH_DEBUG_EXT
+ if ( DEBUG_FATE )
+ if ( fate != T_FATE_STABLE )
+ printf( "fate change %s back to stable, NOUPDATE.\n",
+ t->name);
+#endif
+
+ last = 0;
+ t->time = 0;
+
+ /*
+ * Don't inherit our fate from our dependents. Decide fate
+ * based only upon other flags and our binding (done later).
+ */
+ fate = T_FATE_STABLE;
+ }
+
+ /* Step 4d: determine fate: rebuild target or what? */
+
+ /*
+ In English:
+ If can't find or make child, can't make target.
+ If children changed, make target.
+ If target missing, make it.
+ If children newer, make target.
+ If temp's children newer than parent, make temp.
+ If temp's headers newer than parent, make temp.
+ If deliberately touched, make it.
+ If up-to-date temp file present, use it.
+ If target newer than non-notfile parent, mark target newer.
+ Otherwise, stable!
+
+ Note this block runs from least to most stable:
+ as we make it further down the list, the target's
+ fate is getting stabler.
+ */
 
- /* Step 4f: propagate dependents' time & fate. */
- /* Set leaf time to be our time only if this is a leaf. */
+#ifdef OPT_GRAPH_DEBUG_EXT
+ savedFate = fate;
+ oldTimeStamp = 0;
+#endif
 
- t->time = max( t->time, last );
- t->leaf = leaf ? leaf : t->time ;
+ if ( fate >= T_FATE_BROKEN )
+ {
+ fate = T_FATE_CANTMAKE;
+ }
+ else if ( fate >= T_FATE_SPOIL )
+ {
+ fate = T_FATE_UPDATE;
+ }
+ else if ( t->binding == T_BIND_MISSING )
+ {
+ fate = T_FATE_MISSING;
+ }
+ else if ( t->binding == T_BIND_EXISTS && last > t->time )
+ {
+#ifdef OPT_GRAPH_DEBUG_EXT
+ oldTimeStamp = 1;
+#endif
+ fate = T_FATE_OUTDATED;
+ }
+ else if ( t->binding == T_BIND_PARENTS && last > p->time )
+ {
+#ifdef OPT_GRAPH_DEBUG_EXT
+ oldTimeStamp = 1;
+#endif
+ fate = T_FATE_NEEDTMP;
+ }
+ else if ( t->binding == T_BIND_PARENTS && hlast > p->time )
+ {
+ fate = T_FATE_NEEDTMP;
+ }
+ else if ( t->flags & T_FLAG_TOUCHED )
+ {
+ fate = T_FATE_TOUCHED;
+ }
+ else if ( anyhow && !( t->flags & T_FLAG_NOUPDATE ) )
+ {
+ fate = T_FATE_TOUCHED;
+ }
+ else if ( t->binding == T_BIND_EXISTS && t->flags & T_FLAG_TEMP )
+ {
+ fate = T_FATE_ISTMP;
+ }
+ else if ( t->binding == T_BIND_EXISTS && p &&
+ p->binding != T_BIND_UNBOUND && t->time > p->time )
+ {
+#ifdef OPT_GRAPH_DEBUG_EXT
+ oldTimeStamp = 1;
+#endif
+ fate = T_FATE_NEWER;
+ }
+ else
+ {
+ fate = T_FATE_STABLE;
+ }
+#ifdef OPT_GRAPH_DEBUG_EXT
+ if ( DEBUG_FATE && fate != savedFate )
+ if ( savedFate == T_FATE_STABLE )
+ printf( "fate change %s set to %s%s\n",
+ t->name, target_fate[fate],
+ oldTimeStamp ? " (by timestamp)" : "" );
+ else
+ printf( "fate change %s from %s to %s%s\n",
+ t->name, target_fate[savedFate], target_fate[fate],
+ oldTimeStamp ? " (by timestamp)" : "" );
+#endif
+
+ /* Step 4e: handle missing files */
+ /* If it's missing and there are no actions to create it, boom. */
+ /* If we can't make a target we don't care about, 'sokay */
+ /* We could insist that there are updating actions for all missing */
+ /* files, but if they have dependents we just pretend it's NOTFILE. */
+
+ if ( fate == T_FATE_MISSING && !t->actions && !t->depends )
+ {
+ if ( t->flags & T_FLAG_NOCARE )
+ {
+#ifdef OPT_GRAPH_DEBUG_EXT
+ if ( DEBUG_FATE )
+ printf( "fate change %s to STABLE from %s, "
+ "no actions, no dependents and don't care\n",
+ t->name, target_fate[fate]);
+#endif
+ fate = T_FATE_STABLE;
+ }
+ else
+ {
+ printf( "don't know how to make %s\n", t->name );
+
+ fate = T_FATE_CANTFIND;
+ }
+ }
+
+ /* Step 4f: propagate dependents' time & fate. */
+ /* Set leaf time to be our time only if this is a leaf. */
+
+ t->time = max( t->time, last );
+ t->leaf = leaf ? leaf : t->time ;
     /* This target's fate may have been updated by virtue of following
      * some target's rebuilds list, so only allow it to be increased
      * to the fate we've calculated. Otherwise, grab its new fate.
@@ -627,61 +610,55 @@
      * everything in this target's rebuilds list */
     if (fate >= T_FATE_BUILD && fate < T_FATE_BROKEN)
         force_rebuilds(t);
- /*
- * Step 5: sort dependents by their update time.
- */
+ /*
+ * Step 5: sort dependents by their update time.
+ */
 
- if( globs.newestfirst )
- t->depends = make0sort( t->depends );
+ if ( globs.newestfirst )
+ t->depends = make0sort( t->depends );
 
- /*
- * Step 6: a little harmless tabulating for tracing purposes
- */
+ /*
+ * Step 6: a little harmless tabulating for tracing purposes
+ */
 
- /* Don't count or report interal includes nodes. */
+ /* Don't count or report interal includes nodes. */
 
- if( t->flags & T_FLAG_INTERNAL )
- return;
+ if ( t->flags & T_FLAG_INTERNAL )
+ return;
 
     if (counts) {
 #ifdef OPT_IMPROVED_PATIENCE_EXT
         ++counts->targets;
-#else
- if( !( ++counts->targets % 1000 ) && DEBUG_MAKE )
+#else
+ if ( !( ++counts->targets % 1000 ) && DEBUG_MAKE )
             printf( "...patience...\n" );
 #endif
 
- if( fate == T_FATE_ISTMP )
+ if ( fate == T_FATE_ISTMP )
             counts->temp++;
- else if( fate == T_FATE_CANTFIND )
+ else if ( fate == T_FATE_CANTFIND )
             counts->cantfind++;
- else if( fate == T_FATE_CANTMAKE && t->actions )
+ else if ( fate == T_FATE_CANTMAKE && t->actions )
             counts->cantmake++;
- else if( fate >= T_FATE_BUILD && fate < T_FATE_BROKEN && t->actions )
+ else if ( fate >= T_FATE_BUILD && fate < T_FATE_BROKEN && t->actions )
             counts->updating++;
     }
 
- if( !( t->flags & T_FLAG_NOTFILE ) && fate >= T_FATE_SPOIL )
- flag = "+";
- else if( t->binding == T_BIND_EXISTS && p && t->time > p->time )
- flag = "*";
-
- if( DEBUG_MAKEPROG )
- printf( "made%s\t%s\t%s%s\n",
- flag, target_fate[ t->fate ],
- spaces( depth ), t->name );
-
-/* We don't have DEBUG_CAUSES.
- if( DEBUG_CAUSES &&
- t->fate >= T_FATE_NEWER &&
- t->fate <= T_FATE_MISSING )
- printf( "%s %s\n", target_fate[ t->fate ], t->name );
-*/
+ if ( !( t->flags & T_FLAG_NOTFILE ) && fate >= T_FATE_SPOIL )
+ flag = "+";
+ else if ( t->binding == T_BIND_EXISTS && p && t->time > p->time )
+ flag = "*";
+
+ if ( DEBUG_MAKEPROG )
+ printf( "made%s\t%s\t%s%s\n",
+ flag, target_fate[ t->fate ],
+ spaces( depth ), t->name );
 }
 
+
 #ifdef OPT_GRAPH_DEBUG_EXT
 
-static const char* target_name( TARGET* t )
+static const char * target_name( TARGET * t )
 {
     static char buf[1000];
     if (t->flags & T_FLAG_INTERNAL) {
@@ -692,168 +669,161 @@
     }
 }
 
+
 /*
- * dependGraphOutput() - output the DG after make0 has run
+ * dependGraphOutput() - output the DG after make0 has run.
  */
 
-static void
-dependGraphOutput( TARGET *t, int depth )
+static void dependGraphOutput( TARGET * t, int depth )
 {
- TARGETS *c;
+ TARGETS * c;
 
- if ( (t->flags & T_FLAG_VISITED) != 0
- || !t->name
- || !t->boundname)
- return;
+ if ( ( t->flags & T_FLAG_VISITED ) || !t->name || !t->boundname )
+ return;
 
     t->flags |= T_FLAG_VISITED;
 
- switch (t->fate)
+ switch ( t->fate )
     {
- case T_FATE_TOUCHED:
- case T_FATE_MISSING:
- case T_FATE_OUTDATED:
- case T_FATE_UPDATE:
- printf( "->%s%2d Name: %s\n", spaces(depth), depth, target_name(t) );
- break;
- default:
- printf( " %s%2d Name: %s\n", spaces(depth), depth, target_name(t) );
- break;
- }
-
- if( strcmp (t->name, t->boundname) )
- {
- printf( " %s Loc: %s\n", spaces(depth), t->boundname );
- }
-
- switch( t->fate )
- {
- case T_FATE_STABLE:
- printf( " %s : Stable\n", spaces(depth) );
- break;
- case T_FATE_NEWER:
- printf( " %s : Newer\n", spaces(depth) );
- break;
- case T_FATE_ISTMP:
- printf( " %s : Up to date temp file\n", spaces(depth) );
- break;
- case T_FATE_NEEDTMP:
- printf( " %s : Temporary file, to be updated\n", spaces(depth) );
- break;
- case T_FATE_TOUCHED:
- printf( " %s : Been touched, updating it\n", spaces(depth) );
- break;
- case T_FATE_MISSING:
- printf( " %s : Missing, creating it\n", spaces(depth) );
- break;
- case T_FATE_OUTDATED:
- printf( " %s : Outdated, updating it\n", spaces(depth) );
- break;
- case T_FATE_REBUILD:
- printf( " %s : Rebuild, updating it\n", spaces(depth) );
- break;
- case T_FATE_UPDATE:
- printf( " %s : Updating it\n", spaces(depth) );
- break;
- case T_FATE_CANTFIND:
- printf( " %s : Can not find it\n", spaces(depth) );
- break;
- case T_FATE_CANTMAKE:
- printf( " %s : Can not make it\n", spaces(depth) );
- break;
- }
-
- if( t->flags & ~T_FLAG_VISITED )
- {
- printf( " %s : ", spaces(depth) );
- if( t->flags & T_FLAG_TEMP ) printf ("TEMPORARY ");
- if( t->flags & T_FLAG_NOCARE ) printf ("NOCARE ");
- if( t->flags & T_FLAG_NOTFILE ) printf ("NOTFILE ");
- if( t->flags & T_FLAG_TOUCHED ) printf ("TOUCHED ");
- if( t->flags & T_FLAG_LEAVES ) printf ("LEAVES ");
- if( t->flags & T_FLAG_NOUPDATE ) printf ("NOUPDATE ");
- printf( "\n" );
+ case T_FATE_TOUCHED:
+ case T_FATE_MISSING:
+ case T_FATE_OUTDATED:
+ case T_FATE_UPDATE:
+ printf( "->%s%2d Name: %s\n", spaces(depth), depth, target_name(t) );
+ break;
+ default:
+ printf( " %s%2d Name: %s\n", spaces(depth), depth, target_name(t) );
+ break;
     }
 
- for( c = t->depends; c; c = c->next )
+ if ( strcmp( t->name, t->boundname ) )
+ printf( " %s Loc: %s\n", spaces(depth), t->boundname );
+
+ switch ( t->fate )
     {
- printf( " %s : Depends on %s (%s)", spaces(depth),
- target_name(c->target), target_fate[ c->target->fate ] );
- if (c->target->time == t->time)
- printf( " (max time)");
- printf("\n");
-
+ case T_FATE_STABLE:
+ printf( " %s : Stable\n", spaces(depth) );
+ break;
+ case T_FATE_NEWER:
+ printf( " %s : Newer\n", spaces(depth) );
+ break;
+ case T_FATE_ISTMP:
+ printf( " %s : Up to date temp file\n", spaces(depth) );
+ break;
+ case T_FATE_NEEDTMP:
+ printf( " %s : Temporary file, to be updated\n", spaces(depth) );
+ break;
+ case T_FATE_TOUCHED:
+ printf( " %s : Been touched, updating it\n", spaces(depth) );
+ break;
+ case T_FATE_MISSING:
+ printf( " %s : Missing, creating it\n", spaces(depth) );
+ break;
+ case T_FATE_OUTDATED:
+ printf( " %s : Outdated, updating it\n", spaces(depth) );
+ break;
+ case T_FATE_REBUILD:
+ printf( " %s : Rebuild, updating it\n", spaces(depth) );
+ break;
+ case T_FATE_UPDATE:
+ printf( " %s : Updating it\n", spaces(depth) );
+ break;
+ case T_FATE_CANTFIND:
+ printf( " %s : Can not find it\n", spaces(depth) );
+ break;
+ case T_FATE_CANTMAKE:
+ printf( " %s : Can make it\n", spaces(depth) );
+ break;
     }
 
-
- for( c = t->depends; c; c = c->next )
+ if ( t->flags & ~T_FLAG_VISITED )
     {
+ printf( " %s : ", spaces(depth) );
+ if ( t->flags & T_FLAG_TEMP ) printf( "TEMPORARY " );
+ if ( t->flags & T_FLAG_NOCARE ) printf( "NOCARE " );
+ if ( t->flags & T_FLAG_NOTFILE ) printf( "NOTFILE " );
+ if ( t->flags & T_FLAG_TOUCHED ) printf( "TOUCHED " );
+ if ( t->flags & T_FLAG_LEAVES ) printf( "LEAVES " );
+ if ( t->flags & T_FLAG_NOUPDATE ) printf( "NOUPDATE " );
+ printf( "\n" );
+ }
 
- dependGraphOutput( c->target, depth + 1 );
+ for ( c = t->depends; c; c = c->next )
+ {
+ printf( " %s : Depends on %s (%s)", spaces(depth),
+ target_name(c->target), target_fate[ c->target->fate ] );
+ if ( c->target->time == t->time )
+ printf( " (max time)");
+ printf("\n");
     }
-}
 
+ for ( c = t->depends; c; c = c->next )
+ dependGraphOutput( c->target, depth + 1 );
+}
 #endif
+
+
 /*
  * make0sort() - reorder TARGETS chain by their time (newest to oldest)
  */
 
-static TARGETS *
-make0sort( TARGETS *chain )
+static TARGETS * make0sort( TARGETS * chain )
 {
     PROFILE_ENTER(MAKE_MAKE0SORT);
- TARGETS *result = 0;
+ TARGETS * result = 0;
+
+ /* We walk chain, taking each item and inserting it on the sorted result, */
+ /* with newest items at the front. This involves updating each of the */
+ /* TARGETS' c->next and c->tail. Note that we make c->tail a valid prev */
+ /* pointer for every entry. Normally, it is only valid at the head, where */
+ /* prev == tail. Note also that while tail is a loop, next ends at the */
+ /* end of the chain. */
 
- /* We walk chain, taking each item and inserting it on the */
- /* sorted result, with newest items at the front. This involves */
- /* updating each TARGETS' c->next and c->tail. Note that we */
- /* make c->tail a valid prev pointer for every entry. Normally, */
- /* it is only valid at the head, where prev == tail. Note also */
- /* that while tail is a loop, next ends at the end of the chain. */
-
- /* Walk current target list */
-
- while( chain )
- {
- TARGETS *c = chain;
- TARGETS *s = result;
-
- chain = chain->next;
-
- /* Find point s in result for c */
-
- while( s && s->target->time > c->target->time )
- s = s->next;
-
- /* Insert c in front of s (might be 0). */
- /* Don't even think of deciphering this. */
-
- c->next = s; /* good even if s = 0 */
- if( result == s ) result = c; /* new head of chain? */
- if( !s ) s = result; /* wrap to ensure a next */
- if( result != c ) s->tail->next = c; /* not head? be prev's next */
- c->tail = s->tail; /* take on next's prev */
- s->tail = c; /* make next's prev us */
- }
+ /* Walk the current target list. */
+
+ while( chain )
+ {
+ TARGETS *c = chain;
+ TARGETS *s = result;
+
+ chain = chain->next;
+
+ /* Find point s in result for c. */
+ while( s && s->target->time > c->target->time )
+ s = s->next;
+
+ /* Insert c in front of s (might be 0). */
+ /* Do not even think of deciphering this. */
+ c->next = s; /* good even if s = 0 */
+ if ( result == s ) result = c; /* new head of chain? */
+ if ( !s ) s = result; /* wrap to ensure a next */
+ if ( result != c ) s->tail->next = c; /* not head? be prev's next */
+ c->tail = s->tail; /* take on next's prev */
+ s->tail = c; /* make next's prev us */
+ }
 
     PROFILE_EXIT(MAKE_MAKE0SORT);
- return result;
+ return result;
 }
 
-static LIST *targets_to_update_ = 0;
 
-void mark_target_for_updating(char *target)
+static LIST * targets_to_update_ = 0;
+
+
+void mark_target_for_updating( char * target )
 {
     targets_to_update_ = list_new( targets_to_update_, target );
 }
 
-LIST *targets_to_update()
+
+LIST * targets_to_update()
 {
     return targets_to_update_;
 }
 
+
 void clear_targets_to_update()
 {
- list_free(targets_to_update_);
+ list_free( targets_to_update_ );
     targets_to_update_ = 0;
 }

Modified: trunk/tools/jam/src/make.h
==============================================================================
--- trunk/tools/jam/src/make.h (original)
+++ trunk/tools/jam/src/make.h 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -14,16 +14,16 @@
 int make1( TARGET *t );
 
 typedef struct {
- int temp;
- int updating;
- int cantfind;
- int cantmake;
- int targets;
- int made;
+ int temp;
+ int updating;
+ int cantfind;
+ int cantmake;
+ int targets;
+ int made;
 } COUNTS ;
 
 
-void make0( TARGET *t, TARGET *p, int depth,
+void make0( TARGET *t, TARGET *p, int depth,
             COUNTS *counts, int anyhow );
 
 
@@ -31,7 +31,7 @@
  * Specifies that the target should be updated.
  */
 void mark_target_for_updating(char *target);
-/*
+/*
  * Returns the list of all the target previously passed to 'mark_target_for_updating'.
  */
 LIST *targets_to_update();

Modified: trunk/tools/jam/src/make1.c
==============================================================================
--- trunk/tools/jam/src/make1.c (original)
+++ trunk/tools/jam/src/make1.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -13,27 +13,27 @@
 /*
  * make1.c - execute command to bring targets up to date
  *
- * This module contains make1(), the entry point called by make() to
+ * This module contains make1(), the entry point called by make() to
  * recursively decend the dependency graph executing update actions as
  * marked by make0().
  *
  * External routines:
  *
- * make1() - execute commands to update a TARGET and all its dependents
+ * make1() - execute commands to update a TARGET and all its dependents
  *
  * Internal routines, the recursive/asynchronous command executors:
  *
- * make1a() - recursively traverse target tree, calling make1b()
- * make1b() - dependents of target built, now build target with make1c()
- * make1c() - launch target's next command, call make1b() when done
- * make1d() - handle command execution completion and call back make1c()
+ * make1a() - recursively traverse target tree, calling make1b()
+ * make1b() - dependents of target built, now build target with make1c()
+ * make1c() - launch target's next command, call make1b() when done
+ * make1d() - handle command execution completion and call back make1c()
  *
  * Internal support routines:
  *
- * make1cmds() - turn ACTIONS into CMDs, grouping, splitting, etc
- * make1list() - turn a list of targets into a LIST, for $(<) and $(>)
- * make1settings() - for vars that get bound values, build up replacement lists
- * make1bind() - bind targets that weren't bound in dependency analysis
+ * make1cmds() - turn ACTIONS into CMDs, grouping, splitting, etc
+ * make1list() - turn a list of targets into a LIST, for $(<) and $(>)
+ * make1settings() - for vars that get bound values, build up replacement lists
+ * make1bind() - bind targets that weren't bound in dependency analysis
  *
  * 04/16/94 (seiwald) - Split from make.c.
  * 04/21/94 (seiwald) - Handle empty "updated" actions.
@@ -77,10 +77,10 @@
 /* Ugly static - it's too hard to carry it through the callbacks. */
 
 static struct {
- int failed;
- int skipped;
- int total;
- int made;
+ int failed;
+ int skipped;
+ int total;
+ int made;
 } counts[1] ;
 
 /*
@@ -109,95 +109,104 @@
 
 typedef struct _stack
 {
- state *stack;
+ state * stack;
 } stack;
 
 static stack state_stack = { NULL };
 
 static state *state_freelist = NULL;
 
+
 static state *alloc_state()
 {
- if(state_freelist != NULL)
- {
- state *pState;
-
- pState = state_freelist;
- state_freelist = pState->prev;
- memset(pState, 0, sizeof(state));
- return pState;
- }
- else
- {
- return (state *)BJAM_MALLOC(sizeof(state));
- }
+ if(state_freelist != NULL)
+ {
+ state *pState;
+
+ pState = state_freelist;
+ state_freelist = pState->prev;
+ memset(pState, 0, sizeof(state));
+ return pState;
+ }
+ else
+ {
+ return (state *)BJAM_MALLOC(sizeof(state));
+ }
 }
 
+
 static void free_state(state *pState)
 {
- pState->prev = state_freelist;
- state_freelist = pState;
+ pState->prev = state_freelist;
+ state_freelist = pState;
 }
 
+
 static void clear_state_freelist()
 {
- while(state_freelist != NULL)
- {
- state *pState = state_freelist;
- state_freelist = state_freelist->prev;
- BJAM_FREE(pState);
- }
+ while(state_freelist != NULL)
+ {
+ state *pState = state_freelist;
+ state_freelist = state_freelist->prev;
+ BJAM_FREE(pState);
+ }
 }
 
+
 static state *current_state(stack *pStack)
 {
- return pStack->stack;
+ return pStack->stack;
 }
 
-static void pop_state(stack *pStack)
+
+static void pop_state( stack * pStack )
 {
- state *pState;
+ state * pState;
 
- if(pStack->stack != NULL)
- {
- pState = pStack->stack->prev;
- free_state(pStack->stack);
- pStack->stack = pState;
- }
+ if ( pStack->stack != NULL )
+ {
+ pState = pStack->stack->prev;
+ free_state(pStack->stack);
+ pStack->stack = pState;
+ }
 }
 
+
 static state *push_state(stack *pStack, TARGET *t, TARGET *parent, int curstate)
 {
- state *pState;
+ state *pState;
 
- pState = alloc_state();
+ pState = alloc_state();
 
- pState->t = t;
- pState->parent = parent;
- pState->prev = pStack->stack;
- pState->curstate = curstate;
+ pState->t = t;
+ pState->parent = parent;
+ pState->prev = pStack->stack;
+ pState->curstate = curstate;
 
- pStack->stack = pState;
+ pStack->stack = pState;
 
- return pStack->stack;
+ return pStack->stack;
 }
 
-/* pushes a stack onto another stack, effectively reversing the order */
+
+/*
+ * Pushes a stack onto another stack, effectively reversing the order.
+ */
+
 static void push_stack_on_stack(stack *pDest, stack *pSrc)
 {
- while(pSrc->stack != NULL)
- {
- state *pState;
-
- pState = pSrc->stack;
- pSrc->stack = pSrc->stack->prev;
- pState->prev = pDest->stack;
- pDest->stack = pState;
- }
+ while ( pSrc->stack != NULL )
+ {
+ state * pState = pSrc->stack;
+ pSrc->stack = pSrc->stack->prev;
+ pState->prev = pDest->stack;
+ pDest->stack = pState;
+ }
 }
 
+
 /*
- * make1() - execute commands to update a TARGET and all its dependents
+ * make1() - execute commands to update a TARGET and all its dependants.
  */
 
 static int intr = 0;
@@ -205,137 +214,137 @@
 int
 make1( TARGET *t )
 {
- state *pState;
+ state *pState;
 
- memset( (char *)counts, 0, sizeof( *counts ) );
+ memset( (char *)counts, 0, sizeof( *counts ) );
 
- /* Recursively make the target and its dependents */
- push_state(&state_stack, t, NULL, T_STATE_MAKE1A);
+ /* Recursively make the target and its dependants. */
+ push_state(&state_stack, t, NULL, T_STATE_MAKE1A);
 
- do
- {
- while((pState = current_state(&state_stack)) != NULL)
- {
- if (intr)
+ do
+ {
+ while((pState = current_state(&state_stack)) != NULL)
+ {
+ if (intr)
                 pop_state(&state_stack);
 
- switch(pState->curstate)
- {
- case T_STATE_MAKE1A:
- make1a(pState);
- break;
- case T_STATE_MAKE1ATAIL:
- make1atail(pState);
- break;
- case T_STATE_MAKE1B:
- make1b(pState);
- break;
- case T_STATE_MAKE1C:
- make1c(pState);
- break;
- case T_STATE_MAKE1D:
- make1d(pState);
- break;
- default:
- break;
- }
- }
-
-
- /* Wait for any outstanding commands to finish running. */
- } while( execwait() );
-
- clear_state_freelist();
-
- /* Talk about it */
- if( counts->failed )
- printf( "...failed updating %d target%s...\n", counts->failed,
- counts->failed > 1 ? "s" : "" );
-
- if( DEBUG_MAKE && counts->skipped )
- printf( "...skipped %d target%s...\n", counts->skipped,
- counts->skipped > 1 ? "s" : "" );
-
- if( DEBUG_MAKE && counts->made )
- printf( "...updated %d target%s...\n", counts->made,
- counts->made > 1 ? "s" : "" );
+ switch(pState->curstate)
+ {
+ case T_STATE_MAKE1A:
+ make1a(pState);
+ break;
+ case T_STATE_MAKE1ATAIL:
+ make1atail(pState);
+ break;
+ case T_STATE_MAKE1B:
+ make1b(pState);
+ break;
+ case T_STATE_MAKE1C:
+ make1c(pState);
+ break;
+ case T_STATE_MAKE1D:
+ make1d(pState);
+ break;
+ default:
+ break;
+ }
+ }
+ /* Wait for any outstanding commands to finish running. */
+ } while( execwait() );
+
+ clear_state_freelist();
 
- return counts->total != counts->made;
+ /* Talk about it */
+ if( counts->failed )
+ printf( "...failed updating %d target%s...\n", counts->failed,
+ counts->failed > 1 ? "s" : "" );
+
+ if( DEBUG_MAKE && counts->skipped )
+ printf( "...skipped %d target%s...\n", counts->skipped,
+ counts->skipped > 1 ? "s" : "" );
+
+ if( DEBUG_MAKE && counts->made )
+ printf( "...updated %d target%s...\n", counts->made,
+ counts->made > 1 ? "s" : "" );
+
+ return counts->total != counts->made;
 }
 
+
 /*
- * make1a() - recursively traverse target tree, calling make1b()
+ * make1a() - recursively traverse target tree, calling make1b().
  */
 
 static void
-make1a( state *pState)
+make1a( state *pState )
 {
- TARGET* t = pState->t;
- TARGETS *c;
- TARGETS *inc;
-
- /* If the parent is the first to try to build this target */
- /* or this target is in the make1c() quagmire, arrange for the */
- /* parent to be notified when this target is built. */
-
- if( pState->parent )
- switch( pState->t->progress )
- {
- case T_MAKE_INIT:
- case T_MAKE_ACTIVE:
- case T_MAKE_RUNNING:
- pState->t->parents = targetentry( pState->t->parents, pState->parent );
- pState->parent->asynccnt++;
- }
-
- if( pState->t->progress != T_MAKE_INIT )
- {
- pop_state(&state_stack);
- return;
- }
-
- /* Asynccnt counts the dependents preventing this target from */
- /* proceeding to make1b() for actual building. We start off with */
- /* a count of 1 to prevent anything from happening until we can */
- /* call all dependents. This 1 is accounted for when we call */
- /* make1b() ourselves, below. */
-
- pState->t->asynccnt = 1;
-
- /* Add header node that was created during building process. */
-
- inc = 0;
- for (c = t->depends; c; c = c->next) {
- if (c->target->rescanned && c->target->includes)
- inc = targetentry(inc, c->target->includes);
- }
- t->depends = targetchain(t->depends, inc);
-
- /* against circular dependency. */
-
- pState->t->progress = T_MAKE_ONSTACK;
-
- {
- stack temp_stack = { NULL };
- for( c = t->depends; c && !intr; c = c->next )
+ TARGET *t = pState->t;
+ TARGETS *c;
+
+ /* If the parent is the first to try to build this target */
+ /* or this target is in the make1c() quagmire, arrange for the */
+ /* parent to be notified when this target is built. */
+
+ if( pState->parent )
+ switch( pState->t->progress )
+ {
+ case T_MAKE_INIT:
+ case T_MAKE_ACTIVE:
+ case T_MAKE_RUNNING:
+ pState->t->parents = targetentry( pState->t->parents, pState->parent );
+ pState->parent->asynccnt++;
+ }
+
+ if( pState->t->progress != T_MAKE_INIT )
+ {
+ pop_state(&state_stack);
+ return;
+ }
+
+ /* Asynccnt counts the dependants preventing this target from proceeding to
+ * make1b() for actual building. We start off with a count of 1 to prevent
+ * anything from happening until we can call all dependents. This 1 is
+ * accounted for when we call make1b() ourselves, below. Without this if a
+ * a dependant gets built before we finish processing all of our other
+ * dependants our build would be triggerred prematurely.
+ */
+ pState->t->asynccnt = 1;
+
+ /* Add header nodes created during the building process. */
+ {
+ TARGETS *inc = 0;
+ for ( c = t->depends; c; c = c->next )
+ if (c->target->rescanned && c->target->includes)
+ inc = targetentry(inc, c->target->includes);
+ t->depends = targetchain(t->depends, inc);
+ }
+
+ /* Guard against circular dependency. */
+ pState->t->progress = T_MAKE_ONSTACK;
+
+ {
+ stack temp_stack = { NULL };
+ for( c = t->depends; c && !intr; c = c->next )
             push_state(&temp_stack, c->target, pState->t, T_STATE_MAKE1A);
 
- /* using stacks reverses the order of execution. Reverse it back */
- push_stack_on_stack(&state_stack, &temp_stack);
- }
+ /* Using stacks reverses the order of execution. Reverse it back. */
+ push_stack_on_stack(&state_stack, &temp_stack);
+ }
 
- pState->curstate = T_STATE_MAKE1ATAIL;
+ pState->curstate = T_STATE_MAKE1ATAIL;
 }
 
+
 static void make1atail(state *pState)
 {
- pState->t->progress = T_MAKE_ACTIVE;
+ pState->t->progress = T_MAKE_ACTIVE;
 
- /* Now that all dependents have bumped asynccnt, we now allow */
- /* decrement our reference to asynccnt. */
- pState->curstate = T_STATE_MAKE1B;
+ /* Now that all dependents have bumped asynccnt, we now allow */
+ /* decrement our reference to asynccnt. */
+ pState->curstate = T_STATE_MAKE1B;
 }
 
+
 /*
  * make1b() - dependents of target built, now build target with make1c()
  */
@@ -343,42 +352,39 @@
 static void
 make1b( state *pState )
 {
- TARGET *t = pState->t;
- TARGETS *c;
- TARGET *failed = 0;
- char* failed_name = "dependencies";
-
- /* If any dependents are still outstanding, wait until they */
- /* call make1b() to signal their completion. */
+ TARGET *t = pState->t;
+ TARGETS *c;
+ TARGET *failed = 0;
+ char *failed_name = "dependencies";
 
+ /* If any dependents are still outstanding, wait until they call make1b() */
+ /* to signal their completion. */
     if( --(pState->t->asynccnt) )
- {
- pop_state(&state_stack);
- return;
- }
-
+ {
+ pop_state(&state_stack);
+ return;
+ }
+
     /* Try to aquire a semaphore. If it's locked, wait until the target
        that locked it is build and signals completition. */
 #ifdef OPT_SEMAPHORE
- if( t->semaphore && t->semaphore->asynccnt )
- {
+ if( t->semaphore && t->semaphore->asynccnt )
+ {
         /* Append 't' to the list of targets waiting on semaphore. */
- t->semaphore->parents = targetentry( t->semaphore->parents, t );
- t->asynccnt++;
+ t->semaphore->parents = targetentry( t->semaphore->parents, t );
+ t->asynccnt++;
 
- if( DEBUG_EXECCMD )
- printf( "SEM: %s is busy, delaying launch of %s\n",
- t->semaphore->name, t->name);
- pop_state(&state_stack);
- return;
- }
+ if( DEBUG_EXECCMD )
+ printf( "SEM: %s is busy, delaying launch of %s\n",
+ t->semaphore->name, t->name);
+ pop_state(&state_stack);
+ return;
+ }
 #endif
 
+ /* Now ready to build target 't'... if dependants built OK. */
 
- /* Now ready to build target 't'... if dependents built ok. */
-
- /* Collect status from dependents */
-
+ /* Collect status from dependants. */
 
     for( c = t->depends; c; c = c->next )
         if( c->target->status > t->status && !( c->target->flags & T_FLAG_NOCARE ))
@@ -386,19 +392,20 @@
             failed = c->target;
             pState->t->status = c->target->status;
         }
- /* If a internal header node failed to build, we'd want to output the
- target that it failed on. */
- if (failed && (failed->flags & T_FLAG_INTERNAL)) {
- failed_name = failed->failed;
- } else if (failed) {
- failed_name = failed->name;
+ /* If an internal header node failed to build, we want to output the target
+ that it failed on. */
+ if ( failed )
+ {
+ failed_name = failed->flags & T_FLAG_INTERNAL
+ ? failed->failed
+ : failed->name;
     }
     t->failed = failed_name;
 
- /* If actions on deps have failed, bail. */
- /* Otherwise, execute all actions to make target */
+ /* If actions on any of the dependants have failed, bail. */
+ /* Otherwise, execute all actions to make the current target. */
 
- if( pState->t->status == EXEC_CMD_FAIL && pState->t->actions )
+ if( ( pState->t->status == EXEC_CMD_FAIL ) && pState->t->actions )
     {
         ++counts->skipped;
         if ( ( pState->t->flags & ( T_FLAG_RMOLD | T_FLAG_NOTFILE ) ) == T_FLAG_RMOLD )
@@ -455,223 +462,218 @@
             }
 
             break;
-
- /* All possible fates should have been accounted for by now */
+
+ /* All possible fates should have been accounted for by now. */
         default:
             printf("ERROR: %s has bad fate %d", pState->t->name, pState->t->fate);
             abort();
         }
 
- /* Call make1c() to begin the execution of the chain of commands */
- /* needed to build target. If we're not going to build target */
- /* (because of dependency failures or because no commands need to */
- /* be run) the chain will be empty and make1c() will directly */
- /* signal the completion of target. */
+ /* Call make1c() to begin the execution of the chain of commands */
+ /* needed to build target. If we're not going to build target */
+ /* (because of dependency failures or because no commands need to */
+ /* be run) the chain will be empty and make1c() will directly */
+ /* signal the completion of target. */
 
- /* Recurse on our dependents, manipulating progress to guard */
+ /* Recurse on our dependents, manipulating progress to guard. */
 
 #ifdef OPT_SEMAPHORE
- /* If there is a semaphore, indicate that its in use */
- if( pState->t->semaphore )
- {
- ++(pState->t->semaphore->asynccnt);
-
- if( DEBUG_EXECCMD )
- printf( "SEM: %s now used by %s\n", pState->t->semaphore->name,
- pState->t->name );
- }
+ /* If there is a semaphore, indicate that it is in use. */
+ if ( pState->t->semaphore )
+ {
+ ++(pState->t->semaphore->asynccnt);
+
+ if ( DEBUG_EXECCMD )
+ printf( "SEM: %s now used by %s\n", pState->t->semaphore->name,
+ pState->t->name );
+ }
 #endif
 
- pState->curstate = T_STATE_MAKE1C;
+ pState->curstate = T_STATE_MAKE1C;
 }
 
+
 /*
- * make1c() - launch target's next command, call make1b() when done
+ * make1c() - launch target's next command, call make1b() when done.
  */
 
 static void
 make1c( state *pState )
 {
- CMD *cmd = (CMD *)pState->t->cmds;
+ CMD *cmd = (CMD *)pState->t->cmds;
+
+ /* If there are (more) commands to run to build this target */
+ /* (and we haven't hit an error running earlier comands) we */
+ /* launch the command with execcmd(). */
 
- /* If there are (more) commands to run to build this target */
- /* (and we haven't hit an error running earlier comands) we */
- /* launch the command with execcmd(). */
-
- /* If there are no more commands to run, we collect the status */
- /* from all the actions then report our completion to all the */
- /* parents. */
+ /* If there are no more commands to run, we collect the status */
+ /* from all the actions then report our completion to all the */
+ /* parents. */
 
- if( cmd && pState->t->status == EXEC_CMD_OK )
- {
+ if( cmd && pState->t->status == EXEC_CMD_OK )
+ {
             char *rule_name = 0;
             char *target = 0;
- if( DEBUG_MAKEQ ||
+ if( DEBUG_MAKEQ ||
             ! ( cmd->rule->actions->flags & RULE_QUIETLY ) && DEBUG_MAKE)
- {
+ {
             rule_name = cmd->rule->name;
             target = lol_get(&cmd->args, 0)->string;
             if ( globs.noexec )
             {
                 out_action(rule_name,target,cmd->buf,"","",EXIT_OK);
             }
- }
+ }
 
- if( globs.noexec )
- {
- pState->curstate = T_STATE_MAKE1D;
- pState->status = EXEC_CMD_OK;
- }
- else
- {
- TARGET *t = pState->t;
-
- pop_state(&state_stack); /* pop state first because execcmd could push state */
- execcmd( cmd->buf, make_closure, t, cmd->shell, rule_name, target );
- }
- }
- else
- {
- TARGETS *c;
- ACTIONS *actions;
-
- /* Collect status from actions, and distribute it as well */
-
- for( actions = pState->t->actions; actions; actions = actions->next )
- if( actions->action->status > pState->t->status )
- pState->t->status = actions->action->status;
-
- for( actions = pState->t->actions; actions; actions = actions->next )
- if( pState->t->status > actions->action->status )
- actions->action->status = pState->t->status;
-
- /* Tally success/failure for those we tried to update. */
-
- if( pState->t->progress == T_MAKE_RUNNING )
- switch( pState->t->status )
- {
- case EXEC_CMD_OK:
- ++counts->made;
- break;
- case EXEC_CMD_FAIL:
- ++counts->failed;
- break;
- }
-
- /* Tell parents dependent has been built */
- {
- stack temp_stack = { NULL };
- TARGET *t = pState->t;
- TARGET* additional_includes = NULL;
-
- t->progress = T_MAKE_DONE;
-
- /* Target was updated. Rescan dependencies. */
- if (t->fate >= T_FATE_MISSING &&
- t->status == EXEC_CMD_OK &&
- !t->rescanned) {
+ if( globs.noexec )
+ {
+ pState->curstate = T_STATE_MAKE1D;
+ pState->status = EXEC_CMD_OK;
+ }
+ else
+ {
+ TARGET *t = pState->t;
+
+ pop_state(&state_stack); /* pop state first because execcmd could push state */
+ execcmd( cmd->buf, make_closure, t, cmd->shell, rule_name, target );
+ }
+ }
+ else
+ {
+ TARGETS *c;
+ ACTIONS *actions;
+
+ /* Collect status from actions, and distribute it as well */
+
+ for( actions = pState->t->actions; actions; actions = actions->next )
+ if( actions->action->status > pState->t->status )
+ pState->t->status = actions->action->status;
+
+ for( actions = pState->t->actions; actions; actions = actions->next )
+ if( pState->t->status > actions->action->status )
+ actions->action->status = pState->t->status;
 
+ /* Tally success/failure for those we tried to update. */
+
+ if( pState->t->progress == T_MAKE_RUNNING )
+ switch( pState->t->status )
+ {
+ case EXEC_CMD_OK:
+ ++counts->made;
+ break;
+ case EXEC_CMD_FAIL:
+ ++counts->failed;
+ break;
+ }
+
+ /* Tell parents their dependant has been built. */
+ {
+ stack temp_stack = { NULL };
+ TARGET * t = pState->t;
+ TARGET * additional_includes = NULL;
+
+ t->progress = T_MAKE_DONE;
+
+ /* Target has been updated. Rescan dependencies. */
+ if ( ( t->fate >= T_FATE_MISSING ) &&
+ ( t->status == EXEC_CMD_OK ) &&
+ !t->rescanned )
+ {
                 TARGET *target_to_rescan = t;
- SETTINGS *s;
+ SETTINGS *s;
 
                 target_to_rescan->rescanned = 1;
 
- if (target_to_rescan->flags & T_FLAG_INTERNAL) {
- target_to_rescan = t->original_target;
- }
+ if ( target_to_rescan->flags & T_FLAG_INTERNAL )
+ target_to_rescan = t->original_target;
 
- /* Clean current includes */
- if (target_to_rescan->includes) {
- target_to_rescan->includes = 0;
- }
+ /* Clean current includes. */
+ target_to_rescan->includes = 0;
 
                 s = copysettings( target_to_rescan->settings );
                 pushsettings( s );
- headers(target_to_rescan);
+ headers( target_to_rescan );
                 popsettings( s );
                 freesettings( s );
 
- if (target_to_rescan->includes) {
+ if ( target_to_rescan->includes )
+ {
                     target_to_rescan->includes->rescanned = 1;
- /* Tricky. The parents were already processed, but they
- did not seen the internal node, because it was just
- created. We need to make the calls to make1a that would
- have been done by parents here, and also make sure all
- unprocessed parents will pick up the includes. We must
- make sure processing of the additional make1a invocations
- is done before make1b which means this target is built,
- otherwise the parent will be considered built before this
- make1a processing is even started.
- */
- make0(target_to_rescan->includes, target_to_rescan->parents->target, 0, 0, 0);
- for( c = target_to_rescan->parents; c; c = c->next) {
- c->target->depends = targetentry( c->target->depends,
+ /* Tricky. The parents have already been processed, but they
+ * have not seen the internal node, because it was just
+ * created. We need to make the calls to make1a() that would
+ * have been made by the parents here, and also make sure
+ * all unprocessed parents will pick up the includes. We
+ * must make sure processing of the additional make1a()
+ * invocations is done before make1b() which means this
+ * target is built, otherwise the parent would be considered
+ * built before this make1a() processing has even started.
+ */
+ make0( target_to_rescan->includes, target_to_rescan->parents->target, 0, 0, 0 );
+ for ( c = target_to_rescan->parents; c; c = c->next )
+ {
+ c->target->depends = targetentry( c->target->depends,
                                                           target_to_rescan->includes );
                     }
                     /* Will be processed below. */
                     additional_includes = target_to_rescan->includes;
- }
+ }
             }
 
- if (additional_includes)
- for ( c = t->parents; c; c = c->next ) {
+ if ( additional_includes )
+ for ( c = t->parents; c; c = c->next )
                     push_state(&temp_stack, additional_includes, c->target, T_STATE_MAKE1A);
-
- }
-
- for( c = t->parents; c; c = c->next ) {
- push_state(&temp_stack, c->target, NULL, T_STATE_MAKE1B);
- }
-
 
+ for ( c = t->parents; c; c = c->next )
+ push_state(&temp_stack, c->target, NULL, T_STATE_MAKE1B);
 
 #ifdef OPT_SEMAPHORE
- /* If there is a semaphore, its now free */
- if( t->semaphore )
- {
- assert( t->semaphore->asynccnt == 1 );
- --(t->semaphore->asynccnt);
-
- if( DEBUG_EXECCMD )
- printf( "SEM: %s is now free\n", t->semaphore->name);
-
- /* If anything is waiting, notify the next target. There's no
- point in notifying all waiting targets, since they'll be
- serialized again. */
- if( t->semaphore->parents )
- {
- TARGETS *first = t->semaphore->parents;
- if( first->next )
- first->next->tail = first->tail;
- t->semaphore->parents = first->next;
-
- if( DEBUG_EXECCMD )
- printf( "SEM: placing %s on stack\n", first->target->name);
- push_state(&temp_stack, first->target, NULL, T_STATE_MAKE1B);
- BJAM_FREE( first );
- }
- }
+ /* If there is a semaphore, it is now free. */
+ if ( t->semaphore )
+ {
+ assert( t->semaphore->asynccnt == 1 );
+ --(t->semaphore->asynccnt);
+
+ if ( DEBUG_EXECCMD )
+ printf( "SEM: %s is now free\n", t->semaphore->name);
+
+ /* If anything is waiting, notify the next target. There is no
+ * point in notifying waiting targets, since they will be
+ * notified again.
+ */
+ if ( t->semaphore->parents )
+ {
+ TARGETS * first = t->semaphore->parents;
+ if ( first->next )
+ first->next->tail = first->tail;
+ t->semaphore->parents = first->next;
+
+ if ( DEBUG_EXECCMD )
+ printf( "SEM: placing %s on stack\n", first->target->name);
+ push_state( &temp_stack, first->target, NULL, T_STATE_MAKE1B );
+ BJAM_FREE( first );
+ }
+ }
 #endif
 
-
- /* must pop state before pushing any more */
- pop_state(&state_stack);
-
- /* using stacks reverses the order of execution. Reverse it back */
- push_stack_on_stack(&state_stack, &temp_stack);
-
- }
- }
+ /* Must pop state before pushing any more. */
+ pop_state(&state_stack);
+
+ /* Using stacks reverses the order of execution. Reverse it back. */
+ push_stack_on_stack(&state_stack, &temp_stack);
+ }
+ }
 }
 
-/* Look up the __TIMING_RULE__ variable on the given target, and if
- * non-empty, invoke the rule it names, passing the given
- * timing_info
+
+/* Look up the __TIMING_RULE__ variable on the given target, and if non-empty,
+ * invoke the rule it names, passing the given timing_info.
  */
-static void call_timing_rule(TARGET* target, timing_info* time)
+
+static void call_timing_rule( TARGET * target, timing_info * time )
 {
- LIST* timing_rule;
-
+ LIST * timing_rule;
+
     pushsettings(target->settings);
     timing_rule = var_get( "__TIMING_RULE__" );
     popsettings(target->settings);
@@ -709,10 +711,12 @@
     }
 }
 
-/* Look up the __ACTION_RULE__ variable on the given target, and if
- * non-empty, invoke the rule it names, passing the given info,
- * timing_info, executed command and command output
+
+/* Look up the __ACTION_RULE__ variable on the given target, and if non-empty,
+ * invoke the rule it names, passing the given info, timing_info, executed
+ * command and command output.
  */
+
 static void call_action_rule(TARGET* target, int status, timing_info* time,
     char *executed_command, char *command_output)
 {
@@ -776,10 +780,11 @@
         printf("%f sec system; %f sec user\n", time->system, time->user);
 
     call_action_rule(built, status, time, executed_command, command_output);
-
+
     push_state(&state_stack, built, NULL, T_STATE_MAKE1D)->status = status;
 }
 
+
 /*
  * make1d() - handle command execution completion and call back make1c()
  */
@@ -787,75 +792,74 @@
 static void
 make1d(state *pState)
 {
- TARGET *t = pState->t;
- CMD *cmd = (CMD *)t->cmds;
- int status = pState->status;
-
- /* Execcmd() has completed. All we need to do is fiddle with the */
- /* status and signal our completion so make1c() can run the next */
- /* command. On interrupts, we bail heavily. */
-
- if ( t->flags & T_FLAG_FAIL_EXPECTED )
- {
- /* invert execution result when FAIL_EXPECTED was applied */
- switch (status)
- {
+ TARGET * t = pState->t;
+ CMD * cmd = (CMD *)t->cmds;
+ int status = pState->status;
+
+ /* Execcmd() has completed. All we need to do is fiddle with the */
+ /* status and signal our completion so make1c() can run the next */
+ /* command. On interrupts, we bail heavily. */
+
+ if ( t->flags & T_FLAG_FAIL_EXPECTED )
+ {
+ /* Invert execution result when FAIL_EXPECTED has been applied. */
+ switch ( status )
+ {
             case EXEC_CMD_FAIL: status = EXEC_CMD_OK; break;
             case EXEC_CMD_OK: status = EXEC_CMD_FAIL; break;
- default:
- ;
- }
         }
-
- if( status == EXEC_CMD_FAIL && ( cmd->rule->actions->flags & RULE_IGNORE ) )
- status = EXEC_CMD_OK;
+ }
 
- /* On interrupt, set intr so _everything_ fails */
+ if( status == EXEC_CMD_FAIL && ( cmd->rule->actions->flags & RULE_IGNORE ) )
+ status = EXEC_CMD_OK;
 
- if( status == EXEC_CMD_INTR )
- ++intr;
+ /* On interrupt, set intr so _everything_ fails. */
+ if( status == EXEC_CMD_INTR )
+ ++intr;
 
- if( status == EXEC_CMD_FAIL && DEBUG_MAKE )
- {
- /* Print command text on failure */
+ if( status == EXEC_CMD_FAIL && DEBUG_MAKE )
+ {
+ /* Print command text on failure */
 
- if( !DEBUG_EXEC )
- printf( "%s\n", cmd->buf );
+ if( !DEBUG_EXEC )
+ printf( "%s\n", cmd->buf );
 
- printf( "...failed %s ", cmd->rule->name );
- list_print( lol_get( &cmd->args, 0 ) );
- printf( "...\n" );
- }
+ printf( "...failed %s ", cmd->rule->name );
+ list_print( lol_get( &cmd->args, 0 ) );
+ printf( "...\n" );
+ }
 
- if (status == EXEC_CMD_FAIL)
- if( globs.quitquick ) ++intr;
+ if (status == EXEC_CMD_FAIL)
+ if( globs.quitquick ) ++intr;
 
- /* If the command was interrupted or failed and the target */
- /* is not "precious", remove the targets */
+ /* If the command was interrupted or failed and the target */
+ /* is not "precious", remove the targets */
 
- if( status != EXEC_CMD_OK && !( cmd->rule->actions->flags & RULE_TOGETHER ) )
- {
- LIST *targets = lol_get( &cmd->args, 0 );
+ if( status != EXEC_CMD_OK && !( cmd->rule->actions->flags & RULE_TOGETHER ) )
+ {
+ LIST *targets = lol_get( &cmd->args, 0 );
 
- for( ; targets; targets = list_next( targets ) )
- if( !unlink( targets->string ) )
- printf( "...removing %s\n", targets->string );
- }
+ for( ; targets; targets = list_next( targets ) )
+ if( !unlink( targets->string ) )
+ printf( "...removing %s\n", targets->string );
+ }
 
- /* Free this command and call make1c() to move onto next command. */
+ /* Free this command and call make1c() to move onto next command. */
 
- t->status = status;
- t->cmds = (char *)cmd_next( cmd );
+ t->status = status;
+ t->cmds = (char *)cmd_next( cmd );
 
- cmd_free( cmd );
+ cmd_free( cmd );
 
- pState->curstate = T_STATE_MAKE1C;
+ pState->curstate = T_STATE_MAKE1C;
 }
 
+
 /*
  * swap_settings() - replace the settings from the current module and
  * target with those from the new module and target
  */
+
 static void swap_settings(
     module_t** current_module
     , TARGET** current_target
@@ -864,20 +868,20 @@
 {
     if (new_module == root_module())
         new_module = 0;
-
+
     if (new_target == *current_target && new_module == *current_module)
         return;
 
     if (*current_target)
         popsettings( (*current_target)->settings );
-
+
     if (new_module != *current_module)
     {
         if (*current_module)
             exit_module( *current_module );
 
         *current_module = new_module;
-
+
         if (new_module)
             enter_module( new_module );
     }
@@ -887,266 +891,256 @@
         pushsettings( new_target->settings );
 }
 
+
 /*
- * make1cmds() - turn ACTIONS into CMDs, grouping, splitting, etc
+ * make1cmds() - turn ACTIONS into CMDs, grouping, splitting, etc.
  *
- * Essentially copies a chain of ACTIONs to a chain of CMDs,
- * grouping RULE_TOGETHER actions, splitting RULE_PIECEMEAL actions,
- * and handling RULE_NEWSRCS actions. The result is a chain of
- * CMDs which can be expanded by var_string() and executed with
- * execcmd().
+ * Essentially copies a chain of ACTIONs to a chain of CMDs, grouping
+ * RULE_TOGETHER actions, splitting RULE_PIECEMEAL actions, and handling
+ * RULE_NEWSRCS actions. The result is a chain of CMDs which can be expanded by
+ * var_string() and executed using execcmd().
  */
 
-static CMD *
-make1cmds( TARGET *t )
+static CMD * make1cmds( TARGET * t )
 {
- CMD *cmds = 0;
- LIST *shell = 0;
-
- module_t *settings_module = 0;
- TARGET *settings_target = 0;
-
- /* Step through actions */
- /* Actions may be shared with other targets or grouped with */
- /* RULE_TOGETHER, so actions already seen are skipped. */
-
- ACTIONS* a0;
- for(a0 = t->actions ; a0; a0 = a0->next )
- {
- RULE *rule = a0->action->rule;
- rule_actions *actions = rule->actions;
- SETTINGS *boundvars;
- LIST *nt, *ns;
- ACTIONS *a1;
- int start, chunk, length;
-
- /* Only do rules with commands to execute. */
- /* If this action has already been executed, use saved status */
-
- if( !actions || a0->action->running )
- continue;
-
- a0->action->running = 1;
-
- /* Make LISTS of targets and sources */
- /* If `execute together` has been specified for this rule, tack */
- /* on sources from each instance of this rule for this target. */
-
- nt = make1list( L0, a0->action->targets, 0 );
- ns = make1list( L0, a0->action->sources, actions->flags );
-
- if( actions->flags & RULE_TOGETHER )
- for( a1 = a0->next; a1; a1 = a1->next )
- if( a1->action->rule == rule && !a1->action->running )
- {
- ns = make1list( ns, a1->action->sources, actions->flags );
- a1->action->running = 1;
- }
-
- /* If doing only updated (or existing) sources, but none have */
- /* been updated (or exist), skip this action. */
-
- if( !ns && ( actions->flags & ( RULE_NEWSRCS | RULE_EXISTING ) ) )
- {
- list_free( nt );
- continue;
- }
-
- swap_settings( &settings_module, &settings_target, rule->module, t );
- if (!shell)
- shell = var_get( "JAMSHELL" ); /* shell is per-target */
-
- /* If we had 'actions xxx bind vars' we bind the vars now */
-
- boundvars = make1settings( actions->bindlist );
- pushsettings( boundvars );
-
- /*
- * Build command, starting with all source args.
- *
- * If cmd_new returns 0, it's because the resulting command
- * length is > MAXLINE. In this case, we'll slowly reduce
- * the number of source arguments presented until it does
- * fit. This only applies to actions that allow PIECEMEAL
- * commands.
- *
- * While reducing slowly takes a bit of compute time to get
- * things just right, it's worth it to get as close to MAXLINE
- * as possible, because launching the commands we're executing
- * is likely to be much more compute intensive!
- *
- * Note we loop through at least once, for sourceless actions.
- */
-
- start = 0;
- chunk = length = list_length( ns );
-
- do
- {
- /* Build cmd: cmd_new consumes its lists. */
-
- CMD *cmd = cmd_new( rule,
- list_copy( L0, nt ),
- list_sublist( ns, start, chunk ),
- list_copy( L0, shell ) );
-
- if( cmd )
- {
- /* It fit: chain it up. */
-
- if( !cmds ) cmds = cmd;
- else cmds->tail->next = cmd;
- cmds->tail = cmd;
- start += chunk;
- }
- else if( ( actions->flags & RULE_PIECEMEAL ) && chunk > 1 )
- {
- /* Reduce chunk size slowly. */
-
- chunk = chunk * 9 / 10;
- }
- else
- {
- /* Too long and not splittable. */
+ CMD * cmds = 0;
+ LIST * shell = 0;
+ module_t * settings_module = 0;
+ TARGET * settings_target = 0;
+ ACTIONS * a0;
+
+ /* Step through actions. Actions may be shared with other targets or grouped
+ /* using RULE_TOGETHER, so actions already seen are skipped.
+ */
+ for ( a0 = t->actions ; a0; a0 = a0->next )
+ {
+ RULE * rule = a0->action->rule;
+ rule_actions * actions = rule->actions;
+ SETTINGS * boundvars;
+ LIST * nt;
+ LIST * ns;
+ ACTIONS * a1;
+ int start;
+ int chunk;
+ int length;
+
+ /* Only do rules with commands to execute. */
+ /* If this action has already been executed, use saved status */
+
+ if ( !actions || a0->action->running )
+ continue;
+
+ a0->action->running = 1;
+
+ /* Make LISTS of targets and sources */
+ /* If `execute together` has been specified for this rule, tack */
+ /* on sources from each instance of this rule for this target. */
+
+ nt = make1list( L0, a0->action->targets, 0 );
+ ns = make1list( L0, a0->action->sources, actions->flags );
+
+ if( actions->flags & RULE_TOGETHER )
+ for( a1 = a0->next; a1; a1 = a1->next )
+ if( a1->action->rule == rule && !a1->action->running )
+ {
+ ns = make1list( ns, a1->action->sources, actions->flags );
+ a1->action->running = 1;
+ }
+
+ /* If doing only updated (or existing) sources, but none have */
+ /* been updated (or exist), skip this action. */
+
+ if( !ns && ( actions->flags & ( RULE_NEWSRCS | RULE_EXISTING ) ) )
+ {
+ list_free( nt );
+ continue;
+ }
+
+ swap_settings( &settings_module, &settings_target, rule->module, t );
+ if (!shell)
+ shell = var_get( "JAMSHELL" ); /* shell is per-target */
+
+ /* If we had 'actions xxx bind vars' we bind the vars now. */
+
+ boundvars = make1settings( actions->bindlist );
+ pushsettings( boundvars );
+
+ /*
+ * Build command, starting with all source args.
+ *
+ * If cmd_new returns 0, it's because the resulting command
+ * length is > MAXLINE. In this case, we'll slowly reduce
+ * the number of source arguments presented until it does
+ * fit. This only applies to actions that allow PIECEMEAL
+ * commands.
+ *
+ * While reducing slowly takes a bit of compute time to get
+ * things just right, it's worth it to get as close to MAXLINE
+ * as possible, because launching the commands we're executing
+ * is likely to be much more compute intensive!
+ *
+ * Note we loop through at least once, for sourceless actions.
+ */
+
+ start = 0;
+ chunk = length = list_length( ns );
+
+ do
+ {
+ /* Build cmd: cmd_new consumes its lists. */
+
+ CMD *cmd = cmd_new( rule,
+ list_copy( L0, nt ),
+ list_sublist( ns, start, chunk ),
+ list_copy( L0, shell ) );
+
+ if( cmd )
+ {
+ /* It fit: chain it up. */
+
+ if( !cmds ) cmds = cmd;
+ else cmds->tail->next = cmd;
+ cmds->tail = cmd;
+ start += chunk;
+ }
+ else if( ( actions->flags & RULE_PIECEMEAL ) && chunk > 1 )
+ {
+ /* Reduce chunk size slowly. */
+
+ chunk = chunk * 9 / 10;
+ }
+ else
+ {
+ /* Too long and not splittable. */
 
- printf( "%s actions too long (max %d):\n",
- rule->name, MAXLINE );
+ printf( "%s actions too long (max %d):\n",
+ rule->name, MAXLINE );
 
                     /* Tell the user what didn't fit */
                     cmd = cmd_new(
- rule, list_copy( L0, nt ),
- list_sublist( ns, start, chunk ),
- list_new( L0, newstr( "%" ) ) );
+ rule, list_copy( L0, nt ),
+ list_sublist( ns, start, chunk ),
+ list_new( L0, newstr( "%" ) ) );
 
                     printf( cmd->buf );
-
- exit( EXITBAD );
- }
- }
- while( start < length );
-
- /* These were always copied when used. */
-
- list_free( nt );
- list_free( ns );
-
- /* Free the variables whose values were bound by */
- /* 'actions xxx bind vars' */
-
- popsettings( boundvars );
- freesettings( boundvars );
- }
 
- swap_settings( &settings_module, &settings_target, 0, 0 );
- return cmds;
+ exit( EXITBAD );
+ }
+ }
+ while( start < length );
+
+ /* These were always copied when used. */
+
+ list_free( nt );
+ list_free( ns );
+
+ /* Free the variables whose values were bound by */
+ /* 'actions xxx bind vars' */
+
+ popsettings( boundvars );
+ freesettings( boundvars );
+ }
+
+ swap_settings( &settings_module, &settings_target, 0, 0 );
+ return cmds;
 }
 
+
 /*
- * make1list() - turn a list of targets into a LIST, for $(<) and $(>)
+ * make1list() - turn a list of targets into a LIST, for $(<) and $(>).
  */
 
-static LIST *
-make1list(
- LIST *l,
- TARGETS *targets,
- int flags )
+static LIST * make1list( LIST * l, TARGETS * targets, int flags )
 {
     for( ; targets; targets = targets->next )
     {
- TARGET *t = targets->target;
+ TARGET * t = targets->target;
 
- if( t->binding == T_BIND_UNBOUND )
- make1bind( t );
+ if ( t->binding == T_BIND_UNBOUND )
+ make1bind( t );
 
- if ( ( flags & RULE_EXISTING ) && ( flags & RULE_NEWSRCS ) )
- {
- if ( t->binding != T_BIND_EXISTS && t->fate <= T_FATE_STABLE)
- continue;
- }
- else
- {
- if( ( flags & RULE_EXISTING ) && t->binding != T_BIND_EXISTS )
- continue;
-
- if( ( flags & RULE_NEWSRCS ) && t->fate <= T_FATE_STABLE )
- continue;
- }
-
- /* Prohibit duplicates for RULE_TOGETHER */
+ if ( ( flags & RULE_EXISTING ) && ( flags & RULE_NEWSRCS ) )
+ {
+ if ( t->binding != T_BIND_EXISTS && t->fate <= T_FATE_STABLE )
+ continue;
+ }
+ else
+ {
+ if ( ( flags & RULE_EXISTING ) && t->binding != T_BIND_EXISTS )
+ continue;
 
- if( flags & RULE_TOGETHER )
- {
- LIST *m;
+ if ( ( flags & RULE_NEWSRCS ) && t->fate <= T_FATE_STABLE )
+ continue;
+ }
 
- for( m = l; m; m = m->next )
- if( !strcmp( m->string, t->boundname ) )
- break;
+ /* Prohibit duplicates for RULE_TOGETHER. */
+ if ( flags & RULE_TOGETHER )
+ {
+ LIST * m;
 
- if( m )
- continue;
- }
+ for ( m = l; m; m = m->next )
+ if ( !strcmp( m->string, t->boundname ) )
+ break;
 
- /* Build new list */
+ if ( m )
+ continue;
+ }
 
- l = list_new( l, copystr( t->boundname ) );
+ /* Build new list. */
+ l = list_new( l, copystr( t->boundname ) );
     }
 
     return l;
 }
 
+
 /*
- * make1settings() - for vars that get bound values, build up replacement lists
+ * make1settings() - for vars that get bound values, build up replacement lists.
  */
 
-static SETTINGS *
-make1settings( LIST *vars )
+static SETTINGS * make1settings( LIST * vars )
 {
- SETTINGS *settings = 0;
-
- for( ; vars; vars = list_next( vars ) )
- {
- LIST *l = var_get( vars->string );
- LIST *nl = 0;
-
- for( ; l; l = list_next( l ) )
- {
- TARGET *t = bindtarget( l->string );
+ SETTINGS * settings = 0;
 
- /* Make sure the target is bound */
-
- if( t->binding == T_BIND_UNBOUND )
- make1bind( t );
+ for ( ; vars; vars = list_next( vars ) )
+ {
+ LIST * l = var_get( vars->string );
+ LIST * nl = 0;
 
- /* Build new list */
+ for ( ; l; l = list_next( l ) )
+ {
+ TARGET * t = bindtarget( l->string );
 
- nl = list_new( nl, copystr( t->boundname ) );
- }
+ /* Make sure the target is bound. */
+ if ( t->binding == T_BIND_UNBOUND )
+ make1bind( t );
 
- /* Add to settings chain */
+ /* Build new list. */
+ nl = list_new( nl, copystr( t->boundname ) );
+ }
 
- settings = addsettings( settings, VAR_SET, vars->string, nl );
- }
+ /* Add to settings chain. */
+ settings = addsettings( settings, VAR_SET, vars->string, nl );
+ }
 
- return settings;
+ return settings;
 }
 
+
 /*
- * make1bind() - bind targets that weren't bound in dependency analysis
+ * make1bind() - bind targets that were not bound during dependency analysis
  *
- * Spot the kludge! If a target is not in the dependency tree, it didn't
- * get bound by make0(), so we have to do it here. Ugly.
+ * Spot the kludge! If a target is not in the dependency tree, it did not get
+ * get bound by make0(), so we have to do it here. Ugly.
  */
 
-static void
-make1bind(
- TARGET *t )
+static void make1bind( TARGET * t )
 {
- if( t->flags & T_FLAG_NOTFILE )
- return;
+ if ( t->flags & T_FLAG_NOTFILE )
+ return;
 
- pushsettings( t->settings );
- t->boundname = search( t->name, &t->time, 0,
- (t->flags & T_FLAG_ISFILE) );
- t->binding = t->time ? T_BIND_EXISTS : T_BIND_MISSING;
- popsettings( t->settings );
+ pushsettings( t->settings );
+ t->boundname = search( t->name, &t->time, 0, ( t->flags & T_FLAG_ISFILE ) );
+ t->binding = t->time ? T_BIND_EXISTS : T_BIND_MISSING;
+ popsettings( t->settings );
 }

Modified: trunk/tools/jam/src/mem.c
==============================================================================
--- trunk/tools/jam/src/mem.c (original)
+++ trunk/tools/jam/src/mem.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -16,7 +16,7 @@
     #define ATOMIC_UNCOLLECTABLE
     #define NO_EXECUTE_PERMISSION
     #define ALL_INTERIOR_POINTERS
-
+
     #define LARGE_CONFIG
     /*
     #define NO_SIGNALS
@@ -25,11 +25,11 @@
     #ifndef GC_DEBUG
     #define NO_DEBUGGING
     #endif
-
+
     #ifdef __GLIBC__
     #define __USE_GNU
     #endif
-
+
     #include "boehm_gc/reclaim.c"
     #include "boehm_gc/allchblk.c"
     #include "boehm_gc/misc.c"
@@ -60,7 +60,7 @@
     #include "boehm_gc/gc_dlopen.c"
     #include "boehm_gc/backgraph.c"
     #include "boehm_gc/win32_threads.c"
-
+
     /* Needs to be last. */
     #include "boehm_gc/finalize.c"
 

Modified: trunk/tools/jam/src/mem.h
==============================================================================
--- trunk/tools/jam/src/mem.h (original)
+++ trunk/tools/jam/src/mem.h 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -25,7 +25,7 @@
     #define bjam_calloc_raw_x(n,s) calloc(n,s)
     #define bjam_realloc_raw_x(p,s) realloc(p,s)
     #define bjam_free_raw_x(p) free(p)
-
+
     #ifndef BJAM_NEWSTR_NO_ALLOCATE
     #define BJAM_NEWSTR_NO_ALLOCATE
     #endif
@@ -54,7 +54,7 @@
     #define bjam_calloc_x(n,s) calloc(n,s)
     #define bjam_realloc_x(p,s) realloc(p,s)
     #define bjam_free_x(p) free(p)
-
+
     #ifndef BJAM_NEWSTR_NO_ALLOCATE
     #define BJAM_NEWSTR_NO_ALLOCATE
     #endif

Modified: trunk/tools/jam/src/mkjambase.c
==============================================================================
--- trunk/tools/jam/src/mkjambase.c (original)
+++ trunk/tools/jam/src/mkjambase.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -17,10 +17,10 @@
  *
  * Results look like this:
  *
- * char *jambase[] = {
- * "...\n",
- * ...
- * 0 };
+ * char *jambase[] = {
+ * "...\n",
+ * ...
+ * 0 };
  *
  * Handles \'s and "'s specially; knows to delete blank and comment lines.
  *
@@ -31,101 +31,101 @@
 
 int main( int argc, char **argv, char **envp )
 {
- char buf[ 1024 ];
- FILE *fin;
- FILE *fout;
- char *p;
- int doDotC = 0;
-
- if( argc < 3 )
- {
- fprintf( stderr, "usage: %s jambase.c Jambase ...\n", argv[0] );
- return -1;
- }
-
- if( !( fout = fopen( argv[1], "w" ) ) )
- {
- perror( argv[1] );
- return -1;
- }
-
- /* If the file ends in .c generate a C source file */
-
- if( ( p = strrchr( argv[1], '.' ) ) && !strcmp( p, ".c" ) )
- doDotC++;
-
- /* Now process the files */
-
- argc -= 2, argv += 2;
-
- if( doDotC )
- {
- fprintf( fout, "/* Generated by mkjambase from Jambase */\n" );
- fprintf( fout, "char *jambase[] = {\n" );
- }
-
- for( ; argc--; argv++ )
- {
- if( !( fin = fopen( *argv, "r" ) ) )
- {
- perror( *argv );
- return -1;
- }
-
- if( doDotC )
- {
- fprintf( fout, "/* %s */\n", *argv );
- }
- else
- {
- fprintf( fout, "### %s ###\n", *argv );
- }
-
- while( fgets( buf, sizeof( buf ), fin ) )
- {
- if( doDotC )
- {
- char *p = buf;
-
- /* Strip leading whitespace. */
-
- while( *p == ' ' || *p == '\t' || *p == '\n' )
- p++;
-
- /* Drop comments and empty lines. */
-
- if( *p == '#' || !*p )
- continue;
-
- /* Copy */
-
- putc( '"', fout );
-
- for( ; *p && *p != '\n'; p++ )
- switch( *p )
- {
- case '\\': putc( '\\', fout ); putc( '\\', fout ); break;
- case '"': putc( '\\', fout ); putc( '"', fout ); break;
+ char buf[ 1024 ];
+ FILE *fin;
+ FILE *fout;
+ char *p;
+ int doDotC = 0;
+
+ if( argc < 3 )
+ {
+ fprintf( stderr, "usage: %s jambase.c Jambase ...\n", argv[0] );
+ return -1;
+ }
+
+ if( !( fout = fopen( argv[1], "w" ) ) )
+ {
+ perror( argv[1] );
+ return -1;
+ }
+
+ /* If the file ends in .c generate a C source file */
+
+ if( ( p = strrchr( argv[1], '.' ) ) && !strcmp( p, ".c" ) )
+ doDotC++;
+
+ /* Now process the files */
+
+ argc -= 2, argv += 2;
+
+ if( doDotC )
+ {
+ fprintf( fout, "/* Generated by mkjambase from Jambase */\n" );
+ fprintf( fout, "char *jambase[] = {\n" );
+ }
+
+ for( ; argc--; argv++ )
+ {
+ if( !( fin = fopen( *argv, "r" ) ) )
+ {
+ perror( *argv );
+ return -1;
+ }
+
+ if( doDotC )
+ {
+ fprintf( fout, "/* %s */\n", *argv );
+ }
+ else
+ {
+ fprintf( fout, "### %s ###\n", *argv );
+ }
+
+ while( fgets( buf, sizeof( buf ), fin ) )
+ {
+ if( doDotC )
+ {
+ char *p = buf;
+
+ /* Strip leading whitespace. */
+
+ while( *p == ' ' || *p == '\t' || *p == '\n' )
+ p++;
+
+ /* Drop comments and empty lines. */
+
+ if( *p == '#' || !*p )
+ continue;
+
+ /* Copy */
+
+ putc( '"', fout );
+
+ for( ; *p && *p != '\n'; p++ )
+ switch( *p )
+ {
+ case '\\': putc( '\\', fout ); putc( '\\', fout ); break;
+ case '"': putc( '\\', fout ); putc( '"', fout ); break;
                     case '\r': break;
- default: putc( *p, fout ); break;
- }
+ default: putc( *p, fout ); break;
+ }
 
- fprintf( fout, "\\n\",\n" );
- }
- else
- {
- fprintf( fout, "%s", buf );
- }
-
- }
-
- fclose( fin );
- }
-
- if( doDotC )
- fprintf( fout, "0 };\n" );
+ fprintf( fout, "\\n\",\n" );
+ }
+ else
+ {
+ fprintf( fout, "%s", buf );
+ }
 
- fclose( fout );
+ }
 
- return 0;
+ fclose( fin );
+ }
+
+ if( doDotC )
+ fprintf( fout, "0 };\n" );
+
+ fclose( fout );
+
+ return 0;
 }

Modified: trunk/tools/jam/src/modules.c
==============================================================================
--- trunk/tools/jam/src/modules.c (original)
+++ trunk/tools/jam/src/modules.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -16,11 +16,12 @@
 #include "strings.h"
 #include <assert.h>
 
-static struct hash* module_hash = 0;
+static struct hash * module_hash = 0;
 
-static char* new_module_str( module_t* m, char* suffix )
+
+static char * new_module_str( module_t * m, char * suffix )
 {
- char* result;
+ char * result;
     string s;
     string_copy( &s, m->name );
     string_append( &s, suffix );
@@ -29,10 +30,11 @@
     return result;
 }
 
-module_t* bindmodule( char* name )
+
+module_t * bindmodule( char * name )
 {
     PROFILE_ENTER(BINDMODULE);
-
+
     string s;
     module_t m_, *m = &m_;
 
@@ -45,9 +47,9 @@
         string_append( &s, name );
         string_push_back( &s, '.' );
     }
-
+
     m->name = s.value;
-
+
     if ( hashenter( module_hash, (HASHDATA **)&m ) )
     {
         m->name = newstr( m->name );
@@ -115,46 +117,47 @@
     var_hash_swap( &m->variables );
 }
 
-void exit_module( module_t* m )
+
+void exit_module( module_t * m )
 {
     var_hash_swap( &m->variables );
 }
 
-void import_module(LIST* module_names, module_t* target_module)
+
+void import_module( LIST * module_names, module_t * target_module )
 {
     PROFILE_ENTER(IMPORT_MODULE);
-
- struct hash* h;
-
- if (!target_module->imported_modules)
- target_module->imported_modules = hashinit( sizeof(char*), "imported");
+
+ struct hash * h;
+
+ if ( !target_module->imported_modules )
+ target_module->imported_modules = hashinit( sizeof( char * ), "imported" );
     h = target_module->imported_modules;
 
- for(;module_names; module_names = module_names->next) {
-
- char* s = module_names->string;
- char** ss = &s;
-
- hashenter(h, (HASHDATA**)&ss);
+ for ( ; module_names; module_names = module_names->next )
+ {
+ char * s = module_names->string;
+ char * * ss = &s;
+ hashenter( h, (HASHDATA * *)&ss );
     }
-
+
     PROFILE_EXIT(IMPORT_MODULE);
 }
 
-static void add_module_name( void* r_, void* result_ )
+
+static void add_module_name( void * r_, void * result_ )
 {
- char** r = (char**)r_;
- LIST** result = (LIST**)result_;
+ char * * r = (char * *)r_;
+ LIST * * result = (LIST * *)result_;
 
     *result = list_new( *result, copystr( *r ) );
 }
 
-LIST* imported_modules(module_t* module)
-{
- LIST *result = L0;
 
+LIST * imported_modules( module_t * module )
+{
+ LIST * result = L0;
     if ( module->imported_modules )
         hashenumerate( module->imported_modules, add_module_name, &result );
-
     return result;
 }

Modified: trunk/tools/jam/src/native.h
==============================================================================
--- trunk/tools/jam/src/native.h (original)
+++ trunk/tools/jam/src/native.h 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -24,9 +24,9 @@
 };
 
 /* MSVC debugger gets confused unless this is provided */
-typedef struct native_rule_t native_rule_t ;
+typedef struct native_rule_t native_rule_t ;
 
-void declare_native_rule(char* module, char* rule, char** args,
+void declare_native_rule(char* module, char* rule, char** args,
                          LIST*(*f)(PARSE*, FRAME*), int version);
 
 

Modified: trunk/tools/jam/src/newstr.c
==============================================================================
--- trunk/tools/jam/src/newstr.c (original)
+++ trunk/tools/jam/src/newstr.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -26,7 +26,7 @@
  *
  * Once a string is passed to newstr(), the returned string is readonly.
  *
- * This implementation builds a hash table of all strings, so that multiple
+ * This implementation builds a hash table of all strings, so that multiple
  * calls of newstr() on the same string allocate memory for the string once.
  * Strings are never actually freed.
  */
@@ -104,25 +104,25 @@
 char *
 newstr( char *string )
 {
- STRING str, *s = &str;
+ STRING str, *s = &str;
 
- if( !strhash )
- strhash = hashinit( sizeof( STRING ), "strings" );
+ if( !strhash )
+ strhash = hashinit( sizeof( STRING ), "strings" );
 
- *s = string;
+ *s = string;
 
- if( hashenter( strhash, (HASHDATA **)&s ) )
- {
- int l = strlen( string );
- char *m = (char *)allocate( l + 1 );
-
- strtotal += l + 1;
- memcpy( m, string, l + 1 );
- *s = m;
- }
+ if( hashenter( strhash, (HASHDATA **)&s ) )
+ {
+ int l = strlen( string );
+ char *m = (char *)allocate( l + 1 );
+
+ strtotal += l + 1;
+ memcpy( m, string, l + 1 );
+ *s = m;
+ }
 
     strcount_in += 1;
- return *s;
+ return *s;
 }
 
 /*
@@ -133,7 +133,7 @@
 copystr( char *s )
 {
     strcount_in += 1;
- return s;
+ return s;
 }
 
 /*
@@ -160,11 +160,11 @@
         BJAM_FREE(strblock_chain);
         strblock_chain = n;
     }
-
+
     hashdone( strhash );
-
+
     if( DEBUG_MEM )
         printf( "%dK in strings\n", strtotal / 1024 );
-
+
     /* printf( "--- %d strings of %d dangling\n", strcount_in-strcount_out, strcount_in ); */
 }

Modified: trunk/tools/jam/src/option.c
==============================================================================
--- trunk/tools/jam/src/option.c (original)
+++ trunk/tools/jam/src/option.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -12,9 +12,9 @@
  *
  * {o >o
  * \<>) "Process command line options as defined in <option.h>.
- * Return the number of argv[] elements used up by options,
- * or -1 if an invalid option flag was given or an argument
- * was supplied for an option that does not require one."
+ * Return the number of argv[] elements used up by options,
+ * or -1 if an invalid option flag was given or an argument
+ * was supplied for an option that does not require one."
  */
 
 int
@@ -31,73 +31,68 @@
 
     for( i = 0; i < argc; i++ )
     {
- char *arg;
+ char *arg;
 
- if( argv[i][0] != '-' || ( argv[i][1] != '-' && !isalpha( argv[i][1] ) ) )
- continue;
+ if( argv[i][0] != '-' || ( argv[i][1] != '-' && !isalpha( argv[i][1] ) ) )
+ continue;
 
- if( !optc-- )
- {
- printf( "too many options (%d max)\n", N_OPTS );
- return -1;
- }
-
- for( arg = &argv[i][1]; *arg; arg++ )
- {
- char *f;
-
- for( f = opts; *f; f++ )
- if( *f == *arg )
- break;
-
- if( !*f )
- {
- printf( "Invalid option: -%c\n", *arg );
- return -1;
- }
-
- optv->flag = *f;
-
- if( f[1] != ':' )
- {
- optv++->val = "true";
- }
- else if( arg[1] )
- {
- optv++->val = &arg[1];
- break;
- }
- else if( ++i < argc )
- {
- optv++->val = argv[i];
- break;
- }
- else
- {
- printf( "option: -%c needs argument\n", *f );
- return -1;
- }
- }
+ if( !optc-- )
+ {
+ printf( "too many options (%d max)\n", N_OPTS );
+ return -1;
+ }
+
+ for( arg = &argv[i][1]; *arg; arg++ )
+ {
+ char *f;
+
+ for( f = opts; *f; f++ )
+ if( *f == *arg )
+ break;
+
+ if( !*f )
+ {
+ printf( "Invalid option: -%c\n", *arg );
+ return -1;
+ }
+
+ optv->flag = *f;
+
+ if( f[1] != ':' )
+ {
+ optv++->val = "true";
+ }
+ else if( arg[1] )
+ {
+ optv++->val = &arg[1];
+ break;
+ }
+ else if( ++i < argc )
+ {
+ optv++->val = argv[i];
+ break;
+ }
+ else
+ {
+ printf( "option: -%c needs argument\n", *f );
+ return -1;
+ }
+ }
     }
 
     return i;
 }
 
+
 /*
- * Name: getoptval() - find an option given its character
+ * Name: getoptval() - find an option given its character.
  */
 
-char *
-getoptval(
- option *optv,
- char opt,
- int subopt )
+char * getoptval( option * optv, char opt, int subopt )
 {
- int i;
-
- for( i = 0; i < N_OPTS; i++, optv++ )
- if( optv->flag == opt && !subopt-- )
- return optv->val;
-
- return 0;
+ int i;
+ for ( i = 0; i < N_OPTS; ++i, ++optv )
+ if ( ( optv->flag == opt ) && !subopt-- )
+ return optv->val;
+ return 0;
 }

Modified: trunk/tools/jam/src/option.h
==============================================================================
--- trunk/tools/jam/src/option.h (original)
+++ trunk/tools/jam/src/option.h 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -13,11 +13,11 @@
 
 typedef struct option
 {
- char flag; /* filled in by getoption() */
- char *val; /* set to random address if true */
+ char flag; /* filled in by getoption() */
+ char *val; /* set to random address if true */
 } option;
 
 # define N_OPTS 256
 
-int getoptions( int argc, char **argv, char *opts, option *optv );
-char * getoptval( option *optv, char opt, int subopt );
+int getoptions( int argc, char **argv, char *opts, option *optv );
+char * getoptval( option *optv, char opt, int subopt );

Modified: trunk/tools/jam/src/output.c
==============================================================================
--- trunk/tools/jam/src/output.c (original)
+++ trunk/tools/jam/src/output.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -1,4 +1,4 @@
-/*
+/*
     Copyright 2007 Rene Rivera
     Distributed under the Boost Software License, Version 1.0.
     (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
@@ -12,10 +12,11 @@
 #define bjam_out (stdout)
 #define bjam_err (stderr)
 
-static void out_(
- const char * data,
- FILE * io
- )
+static void out_
+(
+ char const * data,
+ FILE * io
+)
 {
     while ( *data )
     {
@@ -26,36 +27,39 @@
     }
 }
 
-void out_action(
- const char * action,
- const char * target,
- const char * command,
- const char * out_data,
- const char * err_data,
- int exit_reason
- )
+
+void out_action
+(
+ char const * action,
+ char const * target,
+ char const * command,
+ char const * out_data,
+ char const * err_data,
+ int exit_reason
+)
 {
- /* print out the action+target line, if the action is quite
- the action should be null. */
+ /* Print out the action+target line, if the action is quite the action
+ * should be null.
+ */
     if ( action )
     {
- fprintf(bjam_out,"%s %s\n",action,target);
+ fprintf( bjam_out, "%s %s\n", action, target );
     }
-
- /* print out the command executed if given -d+2 */
+
+ /* Print out the command executed if given -d+2. */
     if ( DEBUG_EXEC )
     {
- fputs(command,bjam_out);
- fputc('\n',bjam_out);
+ fputs( command, bjam_out );
+ fputc( '\n', bjam_out );
     }
-
- /* print out the command executed to the command stream */
+
+ /* Print out the command executed to the command stream. */
     if ( globs.cmdout )
     {
- fputs(command,globs.cmdout);
+ fputs( command, globs.cmdout );
     }
 
- switch (exit_reason)
+ switch ( exit_reason )
     {
         case EXIT_OK:
             break;
@@ -63,59 +67,60 @@
             break;
         case EXIT_TIMEOUT:
         {
- /* process expired, make user aware with explicit message */
+ /* Process expired, make user aware with explicit message. */
             if ( action )
             {
- /* but only output for non-quietly actions */
- fprintf(bjam_out, "%d second time limit exceeded\n", globs.timeout);
+ /* But only output for non-quietly actions. */
+ fprintf( bjam_out, "%d second time limit exceeded\n", globs.timeout );
             }
             break;
         }
         default:
           break;
     }
-
- /* print out the command output, if requested */
+
+ /* Print out the command output, if requested. */
     if ( action )
     {
- /* but only output for non-quietly actions */
- if (0 != out_data &&
- ( globs.pipe_action & 1 /* STDOUT_FILENO */ ||
- globs.pipe_action == 0))
+ /* But only output for non-quietly actions. */
+ if ( ( 0 != out_data ) &&
+ ( ( globs.pipe_action & 1 /* STDOUT_FILENO */ ) ||
+ ( globs.pipe_action == 0 ) ) )
         {
- out_(out_data,bjam_out);
+ out_( out_data, bjam_out );
         }
- if (0 != err_data &&
- globs.pipe_action & 2 /* STDERR_FILENO */)
+ if ( ( 0 != err_data ) &&
+ ( globs.pipe_action & 2 /* STDERR_FILENO */ ) )
         {
- out_(err_data,bjam_err);
+ out_( err_data, bjam_err );
         }
     }
-
- fflush(bjam_out);
- fflush(bjam_err);
- fflush(globs.cmdout);
+
+ fflush( bjam_out );
+ fflush( bjam_err );
+ fflush( globs.cmdout );
 }
 
 
 char * outf_int( int value )
 {
     char buffer[50];
- sprintf(buffer, "%i", value);
- return newstr(buffer);
+ sprintf( buffer, "%i", value );
+ return newstr( buffer );
 }
 
+
 char * outf_double( double value )
 {
     char buffer[50];
- sprintf(buffer, "%f", value);
- return newstr(buffer);
+ sprintf( buffer, "%f", value );
+ return newstr( buffer );
 }
 
+
 char * outf_time( time_t value )
 {
     char buffer[50];
- strftime(buffer,49,"%Y-%m-%d %H:%M:%SZ",gmtime(&value));
- return newstr(buffer);
+ strftime( buffer, 49, "%Y-%m-%d %H:%M:%SZ", gmtime( &value ) );
+ return newstr( buffer );
 }
-

Modified: trunk/tools/jam/src/output.h
==============================================================================
--- trunk/tools/jam/src/output.h (original)
+++ trunk/tools/jam/src/output.h 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -1,4 +1,4 @@
-/*
+/*
     Copyright 2007 Rene Rivera
     Distributed under the Boost Software License, Version 1.0.
     (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)

Modified: trunk/tools/jam/src/parse.c
==============================================================================
--- trunk/tools/jam/src/parse.c (original)
+++ trunk/tools/jam/src/parse.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -22,9 +22,9 @@
  * parse.c - make and destroy parse trees as driven by the parser
  *
  * 09/07/00 (seiwald) - ref count on PARSE to avoid freeing when used,
- * as per Matt Armstrong.
+ * as per Matt Armstrong.
  * 09/11/00 (seiwald) - structure reworked to reflect that (*func)()
- * returns a LIST *.
+ * returns a LIST *.
  */
 
 static PARSE *yypsave;
@@ -32,63 +32,63 @@
 void
 parse_file( char *f, FRAME* frame )
 {
- /* Suspend scan of current file */
- /* and push this new file in the stream */
+ /* Suspend scan of current file */
+ /* and push this new file in the stream */
 
- yyfparse(f);
+ yyfparse(f);
 
- /* Now parse each block of rules and execute it. */
- /* Execute it outside of the parser so that recursive */
- /* calls to yyrun() work (no recursive yyparse's). */
+ /* Now parse each block of rules and execute it. */
+ /* Execute it outside of the parser so that recursive */
+ /* calls to yyrun() work (no recursive yyparse's). */
 
- for(;;)
- {
- PARSE *p;
+ for(;;)
+ {
+ PARSE *p;
 
- /* Filled by yyparse() calling parse_save() */
+ /* Filled by yyparse() calling parse_save() */
 
- yypsave = 0;
+ yypsave = 0;
 
- /* If parse error or empty parse, outta here */
+ /* If parse error or empty parse, outta here */
 
- if( yyparse() || !( p = yypsave ) )
- break;
+ if( yyparse() || !( p = yypsave ) )
+ break;
 
- /* Run the parse tree. */
+ /* Run the parse tree. */
 
             parse_evaluate( p, frame );
- parse_free( p );
- }
+ parse_free( p );
+ }
 }
 
 void
 parse_save( PARSE *p )
 {
- yypsave = p;
+ yypsave = p;
 }
 
-PARSE *
-parse_make(
- LIST *(*func)( PARSE *p, FRAME *args ),
- PARSE *left,
- PARSE *right,
- PARSE *third,
- char *string,
- char *string1,
- int num )
-{
- PARSE *p = (PARSE *)BJAM_MALLOC( sizeof( PARSE ) );
-
- p->func = func;
- p->left = left;
- p->right = right;
- p->third = third;
- p->string = string;
- p->string1 = string1;
- p->num = num;
- p->refs = 1;
+
+PARSE * parse_make(
+ LIST *(*func)( PARSE *p, FRAME *args ),
+ PARSE *left,
+ PARSE *right,
+ PARSE *third,
+ char *string,
+ char *string1,
+ int num )
+{
+ PARSE *p = (PARSE *)BJAM_MALLOC( sizeof( PARSE ) );
+
+ p->func = func;
+ p->left = left;
+ p->right = right;
+ p->third = third;
+ p->string = string;
+ p->string1 = string1;
+ p->num = num;
+ p->refs = 1;
         p->rulename = 0;
-
+
         if ( left )
         {
             p->file = left->file;
@@ -99,39 +99,40 @@
             yyinput_stream( &p->file, &p->line );
         }
 
- return p;
+ return p;
 }
 
 void
 parse_refer( PARSE *p )
 {
- ++p->refs;
+ ++p->refs;
 }
 
-void
-parse_free( PARSE *p )
+
+void parse_free( PARSE * p )
 {
- if( --p->refs )
- return;
+ if ( --p->refs )
+ return;
+
+ if ( p->string )
+ freestr( p->string );
+ if ( p->string1 )
+ freestr( p->string1 );
+ if ( p->left )
+ parse_free( p->left );
+ if ( p->right )
+ parse_free( p->right );
+ if ( p->third )
+ parse_free( p->third );
+ if ( p->rulename )
+ freestr( p->rulename );
 
- if( p->string )
- freestr( p->string );
- if( p->string1 )
- freestr( p->string1 );
- if( p->left )
- parse_free( p->left );
- if( p->right )
- parse_free( p->right );
- if( p->third )
- parse_free( p->third );
- if ( p->rulename )
- freestr( p->rulename );
-
- BJAM_FREE( (char *)p );
+ BJAM_FREE( (char *)p );
 }
 
-LIST* parse_evaluate( PARSE *p, FRAME* frame )
+
+LIST * parse_evaluate( PARSE * p, FRAME * frame )
 {
     frame->procedure = p;
- return (*p->func)(p, frame);
+ return (*p->func)( p, frame );
 }

Modified: trunk/tools/jam/src/parse.h
==============================================================================
--- trunk/tools/jam/src/parse.h (original)
+++ trunk/tools/jam/src/parse.h 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -42,7 +42,7 @@
 void parse_file( char *f, FRAME* frame );
 void parse_save( PARSE *p );
 
-PARSE * parse_make(
+PARSE * parse_make(
     LIST *(*func)( PARSE *p, FRAME* frame ),
     PARSE *left,
     PARSE *right,

Modified: trunk/tools/jam/src/pathmac.c
==============================================================================
--- trunk/tools/jam/src/pathmac.c (original)
+++ trunk/tools/jam/src/pathmac.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -22,9 +22,9 @@
  *
  * External routines:
  *
- * path_parse() - split a file name into dir/base/suffix/member
- * path_build() - build a filename given dir/base/suffix/member
- * path_parent() - make a PATHNAME point to its parent dir
+ * path_parse() - split a file name into dir/base/suffix/member
+ * path_build() - build a filename given dir/base/suffix/member
+ * path_parent() - make a PATHNAME point to its parent dir
  *
  * File_parse() and path_build() just manipuate a string and a structure;
  * they do not make system calls.
@@ -41,10 +41,10 @@
  * 03/16/95 (seiwald) - fixed accursed typo on line 69.
  * 05/03/96 (seiwald) - split from filent.c, fileunix.c
  * 12/20/96 (seiwald) - when looking for the rightmost . in a file name,
- * don't include the archive member name.
+ * don't include the archive member name.
  * 01/10/01 (seiwald) - path_parse now strips the trailing : from the
- * directory name, unless the directory name is all
- * :'s, so that $(d:P) works.
+ * directory name, unless the directory name is all
+ * :'s, so that $(d:P) works.
  */
 
 /*
@@ -52,131 +52,131 @@
  */
 
 void
-path_parse(
- char *file,
- PATHNAME *f )
+path_parse(
+ char *file,
+ PATHNAME *f )
 {
- char *p, *q;
- char *end;
-
- memset( (char *)f, 0, sizeof( *f ) );
-
- /* Look for <grist> */
-
- if( file[0] == '<' && ( p = strchr( file, '>' ) ) )
- {
- f->f_grist.ptr = file;
- f->f_grist.len = p - file;
- file = p + 1;
- }
-
- /* Look for dir: */
-
- if( p = strrchr( file, DELIM ) )
- {
- f->f_dir.ptr = file;
- f->f_dir.len = p - file;
- file = p + 1;
-
- /* All :'s? Include last : as part of directory name */
-
- while( p > f->f_dir.ptr && *--p == DELIM )
- ;
-
- if( p == f->f_dir.ptr )
- f->f_dir.len++;
- }
-
- end = file + strlen( file );
-
- /* Look for (member) */
-
- if( ( p = strchr( file, '(' ) ) && end[-1] == ')' )
- {
- f->f_member.ptr = p + 1;
- f->f_member.len = end - p - 2;
- end = p;
- }
-
- /* Look for .suffix */
- /* This would be memrchr() */
-
- p = 0;
- q = file;
-
- while( q = memchr( q, '.', end - q ) )
- p = q++;
-
- if( p )
- {
- f->f_suffix.ptr = p;
- f->f_suffix.len = end - p;
- end = p;
- }
+ char *p, *q;
+ char *end;
 
- /* Leaves base */
+ memset( (char *)f, 0, sizeof( *f ) );
 
- f->f_base.ptr = file;
- f->f_base.len = end - file;
+ /* Look for <grist> */
+
+ if( file[0] == '<' && ( p = strchr( file, '>' ) ) )
+ {
+ f->f_grist.ptr = file;
+ f->f_grist.len = p - file;
+ file = p + 1;
+ }
+
+ /* Look for dir: */
+
+ if( p = strrchr( file, DELIM ) )
+ {
+ f->f_dir.ptr = file;
+ f->f_dir.len = p - file;
+ file = p + 1;
+
+ /* All :'s? Include last : as part of directory name */
+
+ while( p > f->f_dir.ptr && *--p == DELIM )
+ ;
+
+ if( p == f->f_dir.ptr )
+ f->f_dir.len++;
+ }
+
+ end = file + strlen( file );
+
+ /* Look for (member) */
+
+ if( ( p = strchr( file, '(' ) ) && end[-1] == ')' )
+ {
+ f->f_member.ptr = p + 1;
+ f->f_member.len = end - p - 2;
+ end = p;
+ }
+
+ /* Look for .suffix */
+ /* This would be memrchr() */
+
+ p = 0;
+ q = file;
+
+ while( q = memchr( q, '.', end - q ) )
+ p = q++;
+
+ if( p )
+ {
+ f->f_suffix.ptr = p;
+ f->f_suffix.len = end - p;
+ end = p;
+ }
+
+ /* Leaves base */
+
+ f->f_base.ptr = file;
+ f->f_base.len = end - file;
 }
 
 /*
- * path_build() - build a filename given dir/base/suffix/member
+ * path_build() - build a filename given dir/base/suffix/member.
  */
-
-# define DIR_EMPTY 0 /* "" */
-# define DIR_DOT 1 /* : */
-# define DIR_DOTDOT 2 /* :: */
-# define DIR_ABS 3 /* dira:dirb: */
-# define DIR_REL 4 /* :dira:dirb: */
-
-# define G_DIR 0 /* take dir */
-# define G_ROOT 1 /* take root */
-# define G_CAT 2 /* prepend root to dir */
-# define G_DTDR 3 /* :: of rel dir */
-# define G_DDDD 4 /* make it ::: (../..) */
-# define G_MT 5 /* leave it empty */
+
+# define DIR_EMPTY 0 /* "" */
+# define DIR_DOT 1 /* : */
+# define DIR_DOTDOT 2 /* :: */
+# define DIR_ABS 3 /* dira:dirb: */
+# define DIR_REL 4 /* :dira:dirb: */
+
+# define G_DIR 0 /* take dir */
+# define G_ROOT 1 /* take root */
+# define G_CAT 2 /* prepend root to dir */
+# define G_DTDR 3 /* :: of rel dir */
+# define G_DDDD 4 /* make it ::: (../..) */
+# define G_MT 5 /* leave it empty */
 
 char grid[5][5] = {
-/* EMPTY DOT DOTDOT ABS REL */
-/* EMPTY */ { G_MT, G_DIR, G_DIR, G_DIR, G_DIR },
-/* DOT */ { G_ROOT, G_DIR, G_DIR, G_DIR, G_DIR },
-/* DOTDOT */ { G_ROOT, G_ROOT, G_DDDD, G_DIR, G_DTDR },
-/* ABS */ { G_ROOT, G_ROOT, G_ROOT, G_DIR, G_CAT },
-/* REL */ { G_ROOT, G_ROOT, G_ROOT, G_DIR, G_CAT }
+/* EMPTY DOT DOTDOT ABS REL */
+/* EMPTY */ { G_MT, G_DIR, G_DIR, G_DIR, G_DIR },
+/* DOT */ { G_ROOT, G_DIR, G_DIR, G_DIR, G_DIR },
+/* DOTDOT */ { G_ROOT, G_ROOT, G_DDDD, G_DIR, G_DTDR },
+/* ABS */ { G_ROOT, G_ROOT, G_ROOT, G_DIR, G_CAT },
+/* REL */ { G_ROOT, G_ROOT, G_ROOT, G_DIR, G_CAT }
 } ;
 
 static int
-file_flags(
- char *ptr,
- int len )
+file_flags(
+ char *ptr,
+ int len )
 {
- if( !len )
- return DIR_EMPTY;
- if( len == 1 && ptr[0] == DELIM )
- return DIR_DOT;
- if( len == 2 && ptr[0] == DELIM && ptr[1] == DELIM )
- return DIR_DOTDOT;
- if( ptr[0] == DELIM )
- return DIR_REL;
- return DIR_ABS;
+ if( !len )
+ return DIR_EMPTY;
+ if( len == 1 && ptr[0] == DELIM )
+ return DIR_DOT;
+ if( len == 2 && ptr[0] == DELIM && ptr[1] == DELIM )
+ return DIR_DOTDOT;
+ if( ptr[0] == DELIM )
+ return DIR_REL;
+ return DIR_ABS;
 }
 
 void
 path_build(
- PATHNAME *f,
- string* file,
- int binding )
+ PATHNAME *f,
+ string* file,
+ int binding )
 {
     int dflag, rflag, act;
 
     file_build1( f, file );
-
+
     /* Combine root & directory, according to the grid. */
-
+
     dflag = file_flags( f->f_dir.ptr, f->f_dir.len );
     rflag = file_flags( f->f_root.ptr, f->f_root.len );
-
+
     switch( act = grid[ rflag ][ dflag ] )
     {
     case G_DTDR:
@@ -185,35 +185,35 @@
             string_push_back( file, DELIM );
         }
         /* fall through */
-
- case G_DIR:
+
+ case G_DIR:
         /* take dir */
         string_append_range( file, f->f_dir.ptr, f->f_dir.ptr + f->f_dir.len );
         break;
-
- case G_ROOT:
+
+ case G_ROOT:
         /* take root */
         string_append_range( file, f->f_root.ptr, f->f_root.ptr + f->f_root.len );
         break;
-
- case G_CAT:
+
+ case G_CAT:
         /* prepend root to dir */
         string_append_range( file, f->f_root.ptr, f->f_root.ptr + f->f_root.len );
         if( file->value[file->size - 1] == DELIM )
             string_pop_back( file );
         string_append_range( file, f->f_dir.ptr, f->f_dir.ptr + f->f_dir.len );
         break;
-
- case G_DDDD:
+
+ case G_DDDD:
         /* make it ::: (../..) */
         string_append( file, ":::" );
         break;
     }
 
     /* Put : between dir and file (if none already) */
-
- if( act != G_MT &&
- file->value[file->size - 1] != DELIM &&
+
+ if( act != G_MT &&
+ file->value[file->size - 1] != DELIM &&
         ( f->f_base.len || f->f_suffix.len ) )
     {
         string_push_back( file, DELIM );
@@ -235,27 +235,27 @@
         string_append_range( file, f->f_member.ptr, f->f_member.ptr + f->f_member.len );
         string_push_back( file, ')' );
     }
-
+
     if( DEBUG_SEARCH )
         printf(" -> '%s'\n", file->value);
 }
 
 /*
- * path_parent() - make a PATHNAME point to its parent dir
+ * path_parent() - make a PATHNAME point to its parent dir
  */
 
 void
 path_parent( PATHNAME *f )
 {
- /* just set everything else to nothing */
+ /* just set everything else to nothing */
 
- f->f_base.ptr =
- f->f_suffix.ptr =
- f->f_member.ptr = "";
-
- f->f_base.len =
- f->f_suffix.len =
- f->f_member.len = 0;
+ f->f_base.ptr =
+ f->f_suffix.ptr =
+ f->f_member.ptr = "";
+
+ f->f_base.len =
+ f->f_suffix.len =
+ f->f_member.len = 0;
 }
 
 # endif /* OS_MAC */

Modified: trunk/tools/jam/src/pathsys.h
==============================================================================
--- trunk/tools/jam/src/pathsys.h (original)
+++ trunk/tools/jam/src/pathsys.h 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -5,7 +5,7 @@
  */
 
 /*
- * pathsys.h - PATHNAME struct
+ * pathsys.h - PATHNAME struct
  */
 
 /*
@@ -13,7 +13,7 @@
  *
  * <grist> is salt to distinguish between targets that otherwise would
  * have the same name: it never appears in the bound name of a target.
- * (member) is an archive member name: the syntax is arbitrary, but must
+ * (member) is an archive member name: the syntax is arbitrary, but must
  * agree in path_parse(), path_build() and the Jambase.
  *
  * On VMS, we keep track of whether the original path was a directory
@@ -29,22 +29,22 @@
 typedef struct _pathpart PATHPART;
 
 struct _pathpart {
- char *ptr;
- int len;
+ char *ptr;
+ int len;
 };
 
 struct _pathname {
- PATHPART part[6];
+ PATHPART part[6];
 # ifdef OS_VMS
- int parent;
+ int parent;
 # endif
 
-# define f_grist part[0]
-# define f_root part[1]
-# define f_dir part[2]
-# define f_base part[3]
-# define f_suffix part[4]
-# define f_member part[5]
+# define f_grist part[0]
+# define f_root part[1]
+# define f_dir part[2]
+# define f_base part[3]
+# define f_suffix part[4]
+# define f_member part[5]
 
 } ;
 

Modified: trunk/tools/jam/src/pathunix.c
==============================================================================
--- trunk/tools/jam/src/pathunix.c (original)
+++ trunk/tools/jam/src/pathunix.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -29,9 +29,9 @@
  *
  * External routines:
  *
- * path_parse() - split a file name into dir/base/suffix/member
- * path_build() - build a filename given dir/base/suffix/member
- * path_parent() - make a PATHNAME point to its parent dir
+ * path_parse() - split a file name into dir/base/suffix/member
+ * path_build() - build a filename given dir/base/suffix/member
+ * path_parent() - make a PATHNAME point to its parent dir
  *
  * File_parse() and path_build() just manipuate a string and a structure;
  * they do not make system calls.
@@ -48,7 +48,7 @@
  * 03/16/95 (seiwald) - fixed accursed typo on line 69.
  * 05/03/96 (seiwald) - split from filent.c, fileunix.c
  * 12/20/96 (seiwald) - when looking for the rightmost . in a file name,
- * don't include the archive member name.
+ * don't include the archive member name.
  * 01/13/01 (seiwald) - turn on \ handling on UNIX, on by accident
  */
 
@@ -57,87 +57,87 @@
  */
 
 void
-path_parse(
- char *file,
- PATHNAME *f )
+path_parse(
+ char *file,
+ PATHNAME *f )
 {
- char *p, *q;
- char *end;
-
- memset( (char *)f, 0, sizeof( *f ) );
-
- /* Look for <grist> */
-
- if( file[0] == '<' && ( p = strchr( file, '>' ) ) )
- {
- f->f_grist.ptr = file;
- f->f_grist.len = p - file;
- file = p + 1;
- }
+ char *p, *q;
+ char *end;
 
- /* Look for dir/ */
+ memset( (char *)f, 0, sizeof( *f ) );
 
- p = strrchr( file, '/' );
+ /* Look for <grist> */
+
+ if( file[0] == '<' && ( p = strchr( file, '>' ) ) )
+ {
+ f->f_grist.ptr = file;
+ f->f_grist.len = p - file;
+ file = p + 1;
+ }
+
+ /* Look for dir/ */
+
+ p = strrchr( file, '/' );
 
 # if PATH_DELIM == '\\'
- /* On NT, look for dir\ as well */
- {
- char *p1 = strrchr( file, '\\' );
- p = p1 > p ? p1 : p;
- }
+ /* On NT, look for dir\ as well */
+ {
+ char *p1 = strrchr( file, '\\' );
+ p = p1 > p ? p1 : p;
+ }
 # endif
 
- if( p )
- {
- f->f_dir.ptr = file;
- f->f_dir.len = p - file;
-
- /* Special case for / - dirname is /, not "" */
+ if( p )
+ {
+ f->f_dir.ptr = file;
+ f->f_dir.len = p - file;
+
+ /* Special case for / - dirname is /, not "" */
 
- if( !f->f_dir.len )
- f->f_dir.len = 1;
+ if( !f->f_dir.len )
+ f->f_dir.len = 1;
 
 # if PATH_DELIM == '\\'
- /* Special case for D:/ - dirname is D:/, not "D:" */
+ /* Special case for D:/ - dirname is D:/, not "D:" */
 
- if( f->f_dir.len == 2 && file[1] == ':' )
- f->f_dir.len = 3;
+ if( f->f_dir.len == 2 && file[1] == ':' )
+ f->f_dir.len = 3;
 # endif
 
- file = p + 1;
- }
+ file = p + 1;
+ }
 
- end = file + strlen( file );
+ end = file + strlen( file );
 
- /* Look for (member) */
+ /* Look for (member) */
 
- if( ( p = strchr( file, '(' ) ) && end[-1] == ')' )
- {
- f->f_member.ptr = p + 1;
- f->f_member.len = end - p - 2;
- end = p;
- }
+ if( ( p = strchr( file, '(' ) ) && end[-1] == ')' )
+ {
+ f->f_member.ptr = p + 1;
+ f->f_member.len = end - p - 2;
+ end = p;
+ }
 
- /* Look for .suffix */
- /* This would be memrchr() */
+ /* Look for .suffix */
+ /* This would be memrchr() */
 
- p = 0;
- q = file;
+ p = 0;
+ q = file;
 
- while( q = (char *)memchr( q, '.', end - q ) )
- p = q++;
+ while( q = (char *)memchr( q, '.', end - q ) )
+ p = q++;
 
- if( p )
- {
- f->f_suffix.ptr = p;
- f->f_suffix.len = end - p;
- end = p;
- }
+ if( p )
+ {
+ f->f_suffix.ptr = p;
+ f->f_suffix.len = end - p;
+ end = p;
+ }
 
- /* Leaves base */
+ /* Leaves base */
 
- f->f_base.ptr = file;
- f->f_base.len = end - file;
+ f->f_base.ptr = file;
+ f->f_base.len = end - file;
 }
 
 /*
@@ -188,22 +188,22 @@
 
 void
 path_build(
- PATHNAME *f,
- string *file,
- int binding )
+ PATHNAME *f,
+ string *file,
+ int binding )
 {
     file_build1( f, file );
-
+
     /* Don't prepend root if it's . or directory is rooted */
 # if PATH_DELIM == '/'
 
- if( f->f_root.len
+ if( f->f_root.len
         && !( f->f_root.len == 1 && f->f_root.ptr[0] == '.' )
         && !( f->f_dir.len && f->f_dir.ptr[0] == '/' ) )
 
 # else /* unix */
 
- if( f->f_root.len
+ if( f->f_root.len
         && !( f->f_root.len == 1 && f->f_root.ptr[0] == '.' )
         && !( f->f_dir.len && f->f_dir.ptr[0] == '/' )
         && !( f->f_dir.len && f->f_dir.ptr[0] == '\\' )
@@ -213,7 +213,7 @@
 
     {
         string_append_range( file, f->f_root.ptr, f->f_root.ptr + f->f_root.len );
- /* If 'root' already ends with path delimeter,
+ /* If 'root' already ends with path delimeter,
            don't add yet another one. */
         if( ! is_path_delim( f->f_root.ptr[f->f_root.len-1] ) )
             string_push_back( file, as_path_delim( f->f_root.ptr[f->f_root.len] ) );
@@ -258,21 +258,21 @@
 }
 
 /*
- * path_parent() - make a PATHNAME point to its parent dir
+ * path_parent() - make a PATHNAME point to its parent dir
  */
 
 void
 path_parent( PATHNAME *f )
 {
- /* just set everything else to nothing */
+ /* just set everything else to nothing */
 
- f->f_base.ptr =
- f->f_suffix.ptr =
- f->f_member.ptr = "";
-
- f->f_base.len =
- f->f_suffix.len =
- f->f_member.len = 0;
+ f->f_base.ptr =
+ f->f_suffix.ptr =
+ f->f_member.ptr = "";
+
+ f->f_base.len =
+ f->f_suffix.len =
+ f->f_member.len = 0;
 }
 
 #ifdef NT
@@ -296,7 +296,7 @@
     /* Is the string valid? */
     if (!lpszShortPath) {
         SetLastError(ERROR_INVALID_PARAMETER);
- return 0;
+ return 0;
     }
 
     /* Is the path valid? */
@@ -305,7 +305,7 @@
 
     /* Convert "/" to "\" */
     for (i=0;i<len;++i) {
- if (lpszShortPath[i]==_T('/'))
+ if (lpszShortPath[i]==_T('/'))
             path[i]=_T('\\');
         else
             path[i]=lpszShortPath[i];
@@ -331,7 +331,7 @@
         }
         _tcsncpy(ret,path,2);
     }
-
+
     /* Expand the path for each subpath, and strip trailing backslashes */
     for (prev_pos = pos-1;pos<=len;++pos) {
         if (path[pos]==_T('\\') || (path[pos]==_T('\0') &&
@@ -356,9 +356,9 @@
             /* If it's ".." element, we need to append it, not
                the name in parent that FindFirstFile will return.
                Same goes for "." */
-
+
             if (new_element[0] == _T('.') && new_element[1] == _T('\0') ||
- new_element[0] == _T('.') && new_element[1] == _T('.')
+ new_element[0] == _T('.') && new_element[1] == _T('.')
                 && new_element[2] == _T('\0'))
             {
                 _tcscat(ret, new_element);
@@ -378,21 +378,21 @@
             prev_pos = pos;
         }
     }
-
+
     len=_tcslen(ret)+1;
     if (cchBuffer>=len)
         _tcscpy(lpszLongPath,ret);
-
+
     return len;
 }
 
 char* short_path_to_long_path(char* short_path)
-{
+{
     char buffer2[_MAX_PATH];
     int ret = ShortPathToLongPath(short_path, buffer2, _MAX_PATH);
 
     if (ret)
- return newstr(buffer2);
+ return newstr(buffer2);
     else
       return newstr(short_path);
 }
@@ -446,14 +446,14 @@
 const char * path_tmpfile(void)
 {
     const char * result = 0;
-
+
     string file_path;
     string_copy(&file_path,path_tmpdir());
     string_push_back(&file_path,PATH_DELIM);
     string_append(&file_path,path_tmpnam());
     result = newstr(file_path.value);
     string_free(&file_path);
-
+
     return result;
 }
 

Modified: trunk/tools/jam/src/pathvms.c
==============================================================================
--- trunk/tools/jam/src/pathvms.c (original)
+++ trunk/tools/jam/src/pathvms.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -22,14 +22,14 @@
  *
  * External routines:
  *
- * path_parse() - split a file name into dir/base/suffix/member
- * path_build() - build a filename given dir/base/suffix/member
- * path_parent() - make a PATHNAME point to its parent dir
+ * path_parse() - split a file name into dir/base/suffix/member
+ * path_build() - build a filename given dir/base/suffix/member
+ * path_parent() - make a PATHNAME point to its parent dir
  *
  * File_parse() and path_build() just manipuate a string and a structure;
  * they do not make system calls.
  *
- * WARNING! This file contains voodoo logic, as black magic is
+ * WARNING! This file contains voodoo logic, as black magic is
  * necessary for wrangling with VMS file name. Woe be to people
  * who mess with this code.
  *
@@ -42,192 +42,192 @@
  */
 
 void
-path_parse(
- char *file,
- PATHNAME *f )
+path_parse(
+ char *file,
+ PATHNAME *f )
 {
- char *p, *q;
- char *end;
-
- memset( (char *)f, 0, sizeof( *f ) );
+ char *p, *q;
+ char *end;
 
- /* Look for <grist> */
+ memset( (char *)f, 0, sizeof( *f ) );
 
- if( file[0] == '<' && ( p = strchr( file, '>' ) ) )
- {
- f->f_grist.ptr = file;
- f->f_grist.len = p - file;
- file = p + 1;
- }
+ /* Look for <grist> */
 
- /* Look for dev:[dir] or dev: */
+ if( file[0] == '<' && ( p = strchr( file, '>' ) ) )
+ {
+ f->f_grist.ptr = file;
+ f->f_grist.len = p - file;
+ file = p + 1;
+ }
+
+ /* Look for dev:[dir] or dev: */
 
- if( ( p = strchr( file, ']' ) ) || ( p = strchr( file, ':' ) ) )
- {
- f->f_dir.ptr = file;
- f->f_dir.len = p + 1 - file;
- file = p + 1;
- }
+ if( ( p = strchr( file, ']' ) ) || ( p = strchr( file, ':' ) ) )
+ {
+ f->f_dir.ptr = file;
+ f->f_dir.len = p + 1 - file;
+ file = p + 1;
+ }
 
- end = file + strlen( file );
+ end = file + strlen( file );
 
- /* Look for (member) */
+ /* Look for (member) */
 
- if( ( p = strchr( file, '(' ) ) && end[-1] == ')' )
- {
- f->f_member.ptr = p + 1;
- f->f_member.len = end - p - 2;
- end = p;
- }
+ if( ( p = strchr( file, '(' ) ) && end[-1] == ')' )
+ {
+ f->f_member.ptr = p + 1;
+ f->f_member.len = end - p - 2;
+ end = p;
+ }
 
- /* Look for .suffix */
- /* This would be memrchr() */
+ /* Look for .suffix */
+ /* This would be memrchr() */
 
- p = 0;
- q = file;
+ p = 0;
+ q = file;
 
- while( q = (char *)memchr( q, '.', end - q ) )
- p = q++;
+ while( q = (char *)memchr( q, '.', end - q ) )
+ p = q++;
 
- if( p )
- {
- f->f_suffix.ptr = p;
- f->f_suffix.len = end - p;
- end = p;
- }
+ if( p )
+ {
+ f->f_suffix.ptr = p;
+ f->f_suffix.len = end - p;
+ end = p;
+ }
 
- /* Leaves base */
+ /* Leaves base */
 
- f->f_base.ptr = file;
- f->f_base.len = end - file;
+ f->f_base.ptr = file;
+ f->f_base.len = end - file;
 
- /* Is this a directory without a file spec? */
+ /* Is this a directory without a file spec? */
 
- f->parent = 0;
+ f->parent = 0;
 }
 
 /*
- * dir mods result
- * --- --- ------
+ * dir mods result
+ * --- --- ------
  * Rerooting:
  *
- * (none) :R=dev: dev:
- * devd: :R=dev: devd:
- * devd:[dir] :R=dev: devd:[dir]
- * [.dir] :R=dev: dev:[dir] questionable
- * [dir] :R=dev: dev:[dir]
+ * (none) :R=dev: dev:
+ * devd: :R=dev: devd:
+ * devd:[dir] :R=dev: devd:[dir]
+ * [.dir] :R=dev: dev:[dir] questionable
+ * [dir] :R=dev: dev:[dir]
  *
- * (none) :R=[rdir] [rdir] questionable
- * devd: :R=[rdir] devd:
- * devd:[dir] :R=[rdir] devd:[dir]
- * [.dir] :R=[rdir] [rdir.dir] questionable
- * [dir] :R=[rdir] [rdir]
+ * (none) :R=[rdir] [rdir] questionable
+ * devd: :R=[rdir] devd:
+ * devd:[dir] :R=[rdir] devd:[dir]
+ * [.dir] :R=[rdir] [rdir.dir] questionable
+ * [dir] :R=[rdir] [rdir]
  *
- * (none) :R=dev:[root] dev:[root]
- * devd: :R=dev:[root] devd:
- * devd:[dir] :R=dev:[root] devd:[dir]
- * [.dir] :R=dev:[root] dev:[root.dir]
- * [dir] :R=dev:[root] [dir]
+ * (none) :R=dev:[root] dev:[root]
+ * devd: :R=dev:[root] devd:
+ * devd:[dir] :R=dev:[root] devd:[dir]
+ * [.dir] :R=dev:[root] dev:[root.dir]
+ * [dir] :R=dev:[root] [dir]
  *
  * Climbing to parent:
  *
  */
 
-# define DIR_EMPTY 0 /* empty string */
-# define DIR_DEV 1 /* dev: */
-# define DIR_DEVDIR 2 /* dev:[dir] */
-# define DIR_DOTDIR 3 /* [.dir] */
-# define DIR_DASHDIR 4 /* [-] or [-.dir] */
-# define DIR_ABSDIR 5 /* [dir] */
-# define DIR_ROOT 6 /* [000000] or dev:[000000] */
-
-# define G_DIR 0 /* take just dir */
-# define G_ROOT 1 /* take just root */
-# define G_VAD 2 /* root's dev: + [abs] */
-# define G_DRD 3 /* root's dev:[dir] + [.rel] */
-# define G_VRD 4 /* root's dev: + [.rel] made [abs] */
-# define G_DDD 5 /* root's dev:[dir] + . + [dir] */
+# define DIR_EMPTY 0 /* empty string */
+# define DIR_DEV 1 /* dev: */
+# define DIR_DEVDIR 2 /* dev:[dir] */
+# define DIR_DOTDIR 3 /* [.dir] */
+# define DIR_DASHDIR 4 /* [-] or [-.dir] */
+# define DIR_ABSDIR 5 /* [dir] */
+# define DIR_ROOT 6 /* [000000] or dev:[000000] */
+
+# define G_DIR 0 /* take just dir */
+# define G_ROOT 1 /* take just root */
+# define G_VAD 2 /* root's dev: + [abs] */
+# define G_DRD 3 /* root's dev:[dir] + [.rel] */
+# define G_VRD 4 /* root's dev: + [.rel] made [abs] */
+# define G_DDD 5 /* root's dev:[dir] + . + [dir] */
 
 static int grid[7][7] = {
 
-/* root/dir EMPTY DEV DEVDIR DOTDIR DASH, ABSDIR ROOT */
-/* EMPTY */ G_DIR, G_DIR, G_DIR, G_DIR, G_DIR, G_DIR, G_DIR,
-/* DEV */ G_ROOT, G_DIR, G_DIR, G_VRD, G_VAD, G_VAD, G_VAD,
-/* DEVDIR */ G_ROOT, G_DIR, G_DIR, G_DRD, G_VAD, G_VAD, G_VAD,
-/* DOTDIR */ G_ROOT, G_DIR, G_DIR, G_DRD, G_DIR, G_DIR, G_DIR,
-/* DASHDIR */ G_ROOT, G_DIR, G_DIR, G_DRD, G_DDD, G_DIR, G_DIR,
-/* ABSDIR */ G_ROOT, G_DIR, G_DIR, G_DRD, G_DIR, G_DIR, G_DIR,
-/* ROOT */ G_ROOT, G_DIR, G_DIR, G_VRD, G_DIR, G_DIR, G_DIR,
+/* root/dir EMPTY DEV DEVDIR DOTDIR DASH, ABSDIR ROOT */
+/* EMPTY */ G_DIR, G_DIR, G_DIR, G_DIR, G_DIR, G_DIR, G_DIR,
+/* DEV */ G_ROOT, G_DIR, G_DIR, G_VRD, G_VAD, G_VAD, G_VAD,
+/* DEVDIR */ G_ROOT, G_DIR, G_DIR, G_DRD, G_VAD, G_VAD, G_VAD,
+/* DOTDIR */ G_ROOT, G_DIR, G_DIR, G_DRD, G_DIR, G_DIR, G_DIR,
+/* DASHDIR */ G_ROOT, G_DIR, G_DIR, G_DRD, G_DDD, G_DIR, G_DIR,
+/* ABSDIR */ G_ROOT, G_DIR, G_DIR, G_DRD, G_DIR, G_DIR, G_DIR,
+/* ROOT */ G_ROOT, G_DIR, G_DIR, G_VRD, G_DIR, G_DIR, G_DIR,
 
 } ;
 
 struct dirinf {
- int flags;
+ int flags;
 
- struct {
- char *ptr;
- int len;
- } dev, dir;
+ struct {
+ char *ptr;
+ int len;
+ } dev, dir;
 } ;
 
 static char *
-strnchr(
- char *buf,
- int c,
- int len )
+strnchr(
+ char *buf,
+ int c,
+ int len )
 {
- while( len-- )
- if( *buf && *buf++ == c )
- return buf - 1;
+ while( len-- )
+ if( *buf && *buf++ == c )
+ return buf - 1;
 
- return 0;
+ return 0;
 }
 
 static void
-dir_flags(
- char *buf,
- int len,
- struct dirinf *i )
+dir_flags(
+ char *buf,
+ int len,
+ struct dirinf *i )
 {
- char *p;
+ char *p;
 
- if( !buf || !len )
- {
- i->flags = DIR_EMPTY;
- i->dev.ptr =
- i->dir.ptr = 0;
- i->dev.len =
- i->dir.len = 0;
- }
- else if( p = strnchr( buf, ':', len ) )
- {
- i->dev.ptr = buf;
- i->dev.len = p + 1 - buf;
- i->dir.ptr = buf + i->dev.len;
- i->dir.len = len - i->dev.len;
- i->flags = i->dir.len && *i->dir.ptr == '[' ? DIR_DEVDIR : DIR_DEV;
- }
- else
- {
- i->dev.ptr = buf;
- i->dev.len = 0;
- i->dir.ptr = buf;
- i->dir.len = len;
-
- if( *buf == '[' && buf[1] == ']' )
- i->flags = DIR_EMPTY;
- else if( *buf == '[' && buf[1] == '.' )
- i->flags = DIR_DOTDIR;
- else if( *buf == '[' && buf[1] == '-' )
- i->flags = DIR_DASHDIR;
- else
- i->flags = DIR_ABSDIR;
- }
+ if( !buf || !len )
+ {
+ i->flags = DIR_EMPTY;
+ i->dev.ptr =
+ i->dir.ptr = 0;
+ i->dev.len =
+ i->dir.len = 0;
+ }
+ else if( p = strnchr( buf, ':', len ) )
+ {
+ i->dev.ptr = buf;
+ i->dev.len = p + 1 - buf;
+ i->dir.ptr = buf + i->dev.len;
+ i->dir.len = len - i->dev.len;
+ i->flags = i->dir.len && *i->dir.ptr == '[' ? DIR_DEVDIR : DIR_DEV;
+ }
+ else
+ {
+ i->dev.ptr = buf;
+ i->dev.len = 0;
+ i->dir.ptr = buf;
+ i->dir.len = len;
+
+ if( *buf == '[' && buf[1] == ']' )
+ i->flags = DIR_EMPTY;
+ else if( *buf == '[' && buf[1] == '.' )
+ i->flags = DIR_DOTDIR;
+ else if( *buf == '[' && buf[1] == '-' )
+ i->flags = DIR_DASHDIR;
+ else
+ i->flags = DIR_ABSDIR;
+ }
 
- /* But if its rooted in any way */
+ /* But if its rooted in any way */
 
- if( i->dir.len == 8 && !strncmp( i->dir.ptr, "[000000]", 8 ) )
- i->flags = DIR_ROOT;
+ if( i->dir.len == 8 && !strncmp( i->dir.ptr, "[000000]", 8 ) )
+ i->flags = DIR_ROOT;
 }
 
 /*
@@ -236,15 +236,15 @@
 
 void
 path_build(
- PATHNAME *f,
- string *file,
- int binding )
+ PATHNAME *f,
+ string *file,
+ int binding )
 {
     struct dirinf root, dir;
     int g;
 
     file_build1( f, file );
-
+
     /* Get info on root and dir for combining. */
 
     dir_flags( f->f_root.ptr, f->f_root.len, &root );
@@ -254,23 +254,23 @@
 
     switch( g = grid[ root.flags ][ dir.flags ] )
     {
- case G_DIR:
+ case G_DIR:
         /* take dir */
         string_append_range( file, f->f_dir.ptr, f->f_dir.ptr + f->f_dir.len );
         break;
 
- case G_ROOT:
+ case G_ROOT:
         /* take root */
         string_append_range( file, f->f_root.ptr, f->f_root.ptr + f->f_root.len );
         break;
 
- case G_VAD:
+ case G_VAD:
         /* root's dev + abs directory */
         string_append_range( file, root.dev.ptr, root.dev.ptr + root.dev.len );
         string_append_range( file, dir.dir.ptr, dir.dir.ptr + dir.dir.len );
         break;
-
- case G_DRD:
+
+ case G_DRD:
     case G_DDD:
         /* root's dev:[dir] + rel directory */
         string_append_range( file, f->f_root.ptr, f->f_root.ptr + f->f_root.len );
@@ -289,7 +289,7 @@
         string_append_range( file, dir.dir.ptr + 1, dir.dir.ptr + 1 + dir.dir.len - 1 );
         break;
 
- case G_VRD:
+ case G_VRD:
         /* root's dev + rel directory made abs */
         string_append_range( file, root.dev.ptr, root.dev.ptr + root.dev.len );
         string_push_back( file, '[' );
@@ -304,15 +304,15 @@
         printf( "%d x %d = %d (%s)\n", root.flags, dir.flags,
                 grid[ root.flags ][ dir.flags ], file->value );
     }
-# endif
+# endif
 
- /*
+ /*
      * Now do the special :P modifier when no file was present.
- * (none) (none)
- * [dir1.dir2] [dir1]
- * [dir] [000000]
- * [.dir] (none)
- * [] []
+ * (none) (none)
+ * [dir1.dir2] [dir1]
+ * [dir] [000000]
+ * [.dir] (none)
+ * [] []
      */
 
     if( file->value[file->size - 1] == ']' && f->parent )
@@ -337,7 +337,7 @@
                 /* handle .- or - */
                 if( p > file->value && p[-1] == '.' )
                     --p;
-
+
                 *p++ = ']';
                 break;
             }
@@ -388,7 +388,7 @@
 
 # ifdef DEBUG
     if( DEBUG_SEARCH )
- printf("built %.*s + %.*s / %.*s suf %.*s mem %.*s -> %s\n",
+ printf("built %.*s + %.*s / %.*s suf %.*s mem %.*s -> %s\n",
                f->f_root.len, f->f_root.ptr,
                f->f_dir.len, f->f_dir.ptr,
                f->f_base.len, f->f_base.ptr,
@@ -399,26 +399,26 @@
 }
 
 /*
- * path_parent() - make a PATHNAME point to its parent dir
+ * path_parent() - make a PATHNAME point to its parent dir
  */
 
 void
 path_parent( PATHNAME *f )
 {
- if( f->f_base.len )
- {
- f->f_base.ptr =
- f->f_suffix.ptr =
- f->f_member.ptr = "";
-
- f->f_base.len =
- f->f_suffix.len =
- f->f_member.len = 0;
- }
- else
- {
- f->parent = 1;
- }
+ if( f->f_base.len )
+ {
+ f->f_base.ptr =
+ f->f_suffix.ptr =
+ f->f_member.ptr = "";
+
+ f->f_base.len =
+ f->f_suffix.len =
+ f->f_member.len = 0;
+ }
+ else
+ {
+ f->parent = 1;
+ }
 }
 
 # endif /* VMS */

Modified: trunk/tools/jam/src/regexp.c
==============================================================================
--- trunk/tools/jam/src/regexp.c (original)
+++ trunk/tools/jam/src/regexp.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -1,22 +1,22 @@
 /*
  * regcomp and regexec -- regsub and regerror are elsewhere
  *
- * Copyright (c) 1986 by University of Toronto.
- * Written by Henry Spencer. Not derived from licensed software.
+ * Copyright (c) 1986 by University of Toronto.
+ * Written by Henry Spencer. Not derived from licensed software.
  *
- * Permission is granted to anyone to use this software for any
- * purpose on any computer system, and to redistribute it freely,
- * subject to the following restrictions:
- *
- * 1. The author is not responsible for the consequences of use of
- * this software, no matter how awful, even if they arise
- * from defects in it.
+ * Permission is granted to anyone to use this software for any
+ * purpose on any computer system, and to redistribute it freely,
+ * subject to the following restrictions:
+ *
+ * 1. The author is not responsible for the consequences of use of
+ * this software, no matter how awful, even if they arise
+ * from defects in it.
  *
- * 2. The origin of this software must not be misrepresented, either
- * by explicit claim or by omission.
+ * 2. The origin of this software must not be misrepresented, either
+ * by explicit claim or by omission.
  *
- * 3. Altered versions must be plainly marked as such, and must not
- * be misrepresented as being the original software.
+ * 3. Altered versions must be plainly marked as such, and must not
+ * be misrepresented as being the original software.
  *** THIS IS AN ALTERED VERSION. It was altered by John Gilmore,
  *** hoptoad!gnu, on 27 Dec 1986, to add \n as an alternative to |
  *** to assist in implementing egrep.
@@ -55,10 +55,10 @@
  * compile to execute that permits the execute phase to run lots faster on
  * simple cases. They are:
  *
- * regstart char that must begin a match; '\0' if none obvious
- * reganch is the match anchored (at beginning-of-line only)?
- * regmust string (pointer into program) that match must include, or NULL
- * regmlen length of regmust string
+ * regstart char that must begin a match; '\0' if none obvious
+ * reganch is the match anchored (at beginning-of-line only)?
+ * regmust string (pointer into program) that match must include, or NULL
+ * regmlen length of regmust string
  *
  * Regstart and reganch permit very fast decisions on suitable starting points
  * for a match, cutting down the work a lot. Regmust permits fast rejection
@@ -86,45 +86,45 @@
  * to the thing following the set of BRANCHes.) The opcodes are:
  */
 
-/* definition number opnd? meaning */
-#define END 0 /* no End of program. */
-#define BOL 1 /* no Match "" at beginning of line. */
-#define EOL 2 /* no Match "" at end of line. */
-#define ANY 3 /* no Match any one character. */
-#define ANYOF 4 /* str Match any character in this string. */
-#define ANYBUT 5 /* str Match any character not in this string. */
-#define BRANCH 6 /* node Match this alternative, or the next... */
-#define BACK 7 /* no Match "", "next" ptr points backward. */
-#define EXACTLY 8 /* str Match this string. */
-#define NOTHING 9 /* no Match empty string. */
-#define STAR 10 /* node Match this (simple) thing 0 or more times. */
-#define PLUS 11 /* node Match this (simple) thing 1 or more times. */
-#define WORDA 12 /* no Match "" at wordchar, where prev is nonword */
-#define WORDZ 13 /* no Match "" at nonwordchar, where prev is word */
-#define OPEN 20 /* no Mark this point in input as start of #n. */
- /* OPEN+1 is number 1, etc. */
-#define CLOSE 30 /* no Analogous to OPEN. */
+/* definition number opnd? meaning */
+#define END 0 /* no End of program. */
+#define BOL 1 /* no Match "" at beginning of line. */
+#define EOL 2 /* no Match "" at end of line. */
+#define ANY 3 /* no Match any one character. */
+#define ANYOF 4 /* str Match any character in this string. */
+#define ANYBUT 5 /* str Match any character not in this string. */
+#define BRANCH 6 /* node Match this alternative, or the next... */
+#define BACK 7 /* no Match "", "next" ptr points backward. */
+#define EXACTLY 8 /* str Match this string. */
+#define NOTHING 9 /* no Match empty string. */
+#define STAR 10 /* node Match this (simple) thing 0 or more times. */
+#define PLUS 11 /* node Match this (simple) thing 1 or more times. */
+#define WORDA 12 /* no Match "" at wordchar, where prev is nonword */
+#define WORDZ 13 /* no Match "" at nonwordchar, where prev is word */
+#define OPEN 20 /* no Mark this point in input as start of #n. */
+ /* OPEN+1 is number 1, etc. */
+#define CLOSE 30 /* no Analogous to OPEN. */
 
 /*
  * Opcode notes:
  *
- * BRANCH The set of branches constituting a single choice are hooked
- * together with their "next" pointers, since precedence prevents
- * anything being concatenated to any individual branch. The
- * "next" pointer of the last BRANCH in a choice points to the
- * thing following the whole choice. This is also where the
- * final "next" pointer of each individual branch points; each
- * branch starts with the operand node of a BRANCH node.
- *
- * BACK Normal "next" pointers all implicitly point forward; BACK
- * exists to make loop structures possible.
- *
- * STAR,PLUS '?', and complex '*' and '+', are implemented as circular
- * BRANCH structures using BACK. Simple cases (one character
- * per match) are implemented with STAR and PLUS for speed
- * and to minimize recursive plunges.
+ * BRANCH The set of branches constituting a single choice are hooked
+ * together with their "next" pointers, since precedence prevents
+ * anything being concatenated to any individual branch. The
+ * "next" pointer of the last BRANCH in a choice points to the
+ * thing following the whole choice. This is also where the
+ * final "next" pointer of each individual branch points; each
+ * branch starts with the operand node of a BRANCH node.
+ *
+ * BACK Normal "next" pointers all implicitly point forward; BACK
+ * exists to make loop structures possible.
+ *
+ * STAR,PLUS '?', and complex '*' and '+', are implemented as circular
+ * BRANCH structures using BACK. Simple cases (one character
+ * per match) are implemented with STAR and PLUS for speed
+ * and to minimize recursive plunges.
  *
- * OPEN,CLOSE ...are numbered at compile time.
+ * OPEN,CLOSE ...are numbered at compile time.
  */
 
 /*
@@ -137,9 +137,9 @@
  * Using two bytes for the "next" pointer is vast overkill for most things,
  * but allows patterns to get big without disasters.
  */
-#define OP(p) (*(p))
-#define NEXT(p) (((*((p)+1)&0377)<<8) + (*((p)+2)&0377))
-#define OPERAND(p) ((p) + 3)
+#define OP(p) (*(p))
+#define NEXT(p) (((*((p)+1)&0377)<<8) + (*((p)+2)&0377))
+#define OPERAND(p) ((p) + 3)
 
 /*
  * See regmagic.h for one further detail of program structure.
@@ -150,36 +150,36 @@
  * Utility definitions.
  */
 #ifndef CHARBITS
-#define UCHARAT(p) ((int)*(unsigned char *)(p))
+#define UCHARAT(p) ((int)*(unsigned char *)(p))
 #else
-#define UCHARAT(p) ((int)*(p)&CHARBITS)
+#define UCHARAT(p) ((int)*(p)&CHARBITS)
 #endif
 
-#define FAIL(m) { regerror(m); return(NULL); }
-#define ISMULT(c) ((c) == '*' || (c) == '+' || (c) == '?')
+#define FAIL(m) { regerror(m); return(NULL); }
+#define ISMULT(c) ((c) == '*' || (c) == '+' || (c) == '?')
 
 /*
  * Flags to be passed up and down.
  */
-#define HASWIDTH 01 /* Known never to match null string. */
-#define SIMPLE 02 /* Simple enough to be STAR/PLUS operand. */
-#define SPSTART 04 /* Starts with * or +. */
-#define WORST 0 /* Worst case. */
+#define HASWIDTH 01 /* Known never to match null string. */
+#define SIMPLE 02 /* Simple enough to be STAR/PLUS operand. */
+#define SPSTART 04 /* Starts with * or +. */
+#define WORST 0 /* Worst case. */
 
 /*
  * Global work variables for regcomp().
  */
-static char *regparse; /* Input-scan pointer. */
-static int regnpar; /* () count. */
+static char *regparse; /* Input-scan pointer. */
+static int regnpar; /* () count. */
 static char regdummy;
-static char *regcode; /* Code-emit pointer; &regdummy = don't. */
-static long regsize; /* Code size. */
+static char *regcode; /* Code-emit pointer; &regdummy = don't. */
+static long regsize; /* Code size. */
 
 /*
  * Forward declarations for regcomp()'s friends.
  */
 #ifndef STATIC
-#define STATIC static
+#define STATIC static
 #endif
 STATIC char *reg( int paren, int *flagp );
 STATIC char *regbranch( int *flagp );
@@ -213,81 +213,81 @@
 regexp *
 regcomp( char *exp )
 {
- register regexp *r;
- register char *scan;
- register char *longest;
- register unsigned len;
- int flags;
+ register regexp *r;
+ register char *scan;
+ register char *longest;
+ register unsigned len;
+ int flags;
 
- if (exp == NULL)
- FAIL("NULL argument");
+ if (exp == NULL)
+ FAIL("NULL argument");
 
- /* First pass: determine size, legality. */
+ /* First pass: determine size, legality. */
 #ifdef notdef
- if (exp[0] == '.' && exp[1] == '*') exp += 2; /* aid grep */
+ if (exp[0] == '.' && exp[1] == '*') exp += 2; /* aid grep */
 #endif
- regparse = (char *)exp;
- regnpar = 1;
- regsize = 0L;
- regcode = &regdummy;
- regc(MAGIC);
- if (reg(0, &flags) == NULL)
- return(NULL);
-
- /* Small enough for pointer-storage convention? */
- if (regsize >= 32767L) /* Probably could be 65535L. */
- FAIL("regexp too big");
-
- /* Allocate space. */
- r = (regexp *)BJAM_MALLOC(sizeof(regexp) + (unsigned)regsize);
- if (r == NULL)
- FAIL("out of space");
-
- /* Second pass: emit code. */
- regparse = (char *)exp;
- regnpar = 1;
- regcode = r->program;
- regc(MAGIC);
- if (reg(0, &flags) == NULL)
- return(NULL);
-
- /* Dig out information for optimizations. */
- r->regstart = '\0'; /* Worst-case defaults. */
- r->reganch = 0;
- r->regmust = NULL;
- r->regmlen = 0;
- scan = r->program+1; /* First BRANCH. */
- if (OP(regnext(scan)) == END) { /* Only one top-level choice. */
- scan = OPERAND(scan);
-
- /* Starting-point info. */
- if (OP(scan) == EXACTLY)
- r->regstart = *OPERAND(scan);
- else if (OP(scan) == BOL)
- r->reganch++;
-
- /*
- * If there's something expensive in the r.e., find the
- * longest literal string that must appear and make it the
- * regmust. Resolve ties in favor of later strings, since
- * the regstart check works with the beginning of the r.e.
- * and avoiding duplication strengthens checking. Not a
- * strong reason, but sufficient in the absence of others.
- */
- if (flags&SPSTART) {
- longest = NULL;
- len = 0;
- for (; scan != NULL; scan = regnext(scan))
- if (OP(scan) == EXACTLY && strlen(OPERAND(scan)) >= len) {
- longest = OPERAND(scan);
- len = strlen(OPERAND(scan));
- }
- r->regmust = longest;
- r->regmlen = len;
- }
- }
+ regparse = (char *)exp;
+ regnpar = 1;
+ regsize = 0L;
+ regcode = &regdummy;
+ regc(MAGIC);
+ if (reg(0, &flags) == NULL)
+ return(NULL);
+
+ /* Small enough for pointer-storage convention? */
+ if (regsize >= 32767L) /* Probably could be 65535L. */
+ FAIL("regexp too big");
+
+ /* Allocate space. */
+ r = (regexp *)BJAM_MALLOC(sizeof(regexp) + (unsigned)regsize);
+ if (r == NULL)
+ FAIL("out of space");
+
+ /* Second pass: emit code. */
+ regparse = (char *)exp;
+ regnpar = 1;
+ regcode = r->program;
+ regc(MAGIC);
+ if (reg(0, &flags) == NULL)
+ return(NULL);
+
+ /* Dig out information for optimizations. */
+ r->regstart = '\0'; /* Worst-case defaults. */
+ r->reganch = 0;
+ r->regmust = NULL;
+ r->regmlen = 0;
+ scan = r->program+1; /* First BRANCH. */
+ if (OP(regnext(scan)) == END) { /* Only one top-level choice. */
+ scan = OPERAND(scan);
+
+ /* Starting-point info. */
+ if (OP(scan) == EXACTLY)
+ r->regstart = *OPERAND(scan);
+ else if (OP(scan) == BOL)
+ r->reganch++;
+
+ /*
+ * If there's something expensive in the r.e., find the
+ * longest literal string that must appear and make it the
+ * regmust. Resolve ties in favor of later strings, since
+ * the regstart check works with the beginning of the r.e.
+ * and avoiding duplication strengthens checking. Not a
+ * strong reason, but sufficient in the absence of others.
+ */
+ if (flags&SPSTART) {
+ longest = NULL;
+ len = 0;
+ for (; scan != NULL; scan = regnext(scan))
+ if (OP(scan) == EXACTLY && strlen(OPERAND(scan)) >= len) {
+ longest = OPERAND(scan);
+ len = strlen(OPERAND(scan));
+ }
+ r->regmust = longest;
+ r->regmlen = len;
+ }
+ }
 
- return(r);
+ return(r);
 }
 
 /*
@@ -301,69 +301,69 @@
  */
 static char *
 reg(
- int paren, /* Parenthesized? */
- int *flagp )
+ int paren, /* Parenthesized? */
+ int *flagp )
 {
- register char *ret;
- register char *br;
- register char *ender;
- register int parno;
- int flags;
-
- *flagp = HASWIDTH; /* Tentatively. */
-
- /* Make an OPEN node, if parenthesized. */
- if (paren) {
- if (regnpar >= NSUBEXP)
- FAIL("too many ()");
- parno = regnpar;
- regnpar++;
- ret = regnode(OPEN+parno);
- } else
- ret = NULL;
-
- /* Pick up the branches, linking them together. */
- br = regbranch(&flags);
- if (br == NULL)
- return(NULL);
- if (ret != NULL)
- regtail(ret, br); /* OPEN -> first. */
- else
- ret = br;
- if (!(flags&HASWIDTH))
- *flagp &= ~HASWIDTH;
- *flagp |= flags&SPSTART;
- while (*regparse == '|' || *regparse == '\n') {
- regparse++;
- br = regbranch(&flags);
- if (br == NULL)
- return(NULL);
- regtail(ret, br); /* BRANCH -> BRANCH. */
- if (!(flags&HASWIDTH))
- *flagp &= ~HASWIDTH;
- *flagp |= flags&SPSTART;
- }
-
- /* Make a closing node, and hook it on the end. */
- ender = regnode((paren) ? CLOSE+parno : END);
- regtail(ret, ender);
-
- /* Hook the tails of the branches to the closing node. */
- for (br = ret; br != NULL; br = regnext(br))
- regoptail(br, ender);
-
- /* Check for proper termination. */
- if (paren && *regparse++ != ')') {
- FAIL("unmatched ()");
- } else if (!paren && *regparse != '\0') {
- if (*regparse == ')') {
- FAIL("unmatched ()");
- } else
- FAIL("junk on end"); /* "Can't happen". */
- /* NOTREACHED */
- }
+ register char *ret;
+ register char *br;
+ register char *ender;
+ register int parno;
+ int flags;
+
+ *flagp = HASWIDTH; /* Tentatively. */
+
+ /* Make an OPEN node, if parenthesized. */
+ if (paren) {
+ if (regnpar >= NSUBEXP)
+ FAIL("too many ()");
+ parno = regnpar;
+ regnpar++;
+ ret = regnode(OPEN+parno);
+ } else
+ ret = NULL;
+
+ /* Pick up the branches, linking them together. */
+ br = regbranch(&flags);
+ if (br == NULL)
+ return(NULL);
+ if (ret != NULL)
+ regtail(ret, br); /* OPEN -> first. */
+ else
+ ret = br;
+ if (!(flags&HASWIDTH))
+ *flagp &= ~HASWIDTH;
+ *flagp |= flags&SPSTART;
+ while (*regparse == '|' || *regparse == '\n') {
+ regparse++;
+ br = regbranch(&flags);
+ if (br == NULL)
+ return(NULL);
+ regtail(ret, br); /* BRANCH -> BRANCH. */
+ if (!(flags&HASWIDTH))
+ *flagp &= ~HASWIDTH;
+ *flagp |= flags&SPSTART;
+ }
+
+ /* Make a closing node, and hook it on the end. */
+ ender = regnode((paren) ? CLOSE+parno : END);
+ regtail(ret, ender);
+
+ /* Hook the tails of the branches to the closing node. */
+ for (br = ret; br != NULL; br = regnext(br))
+ regoptail(br, ender);
+
+ /* Check for proper termination. */
+ if (paren && *regparse++ != ')') {
+ FAIL("unmatched ()");
+ } else if (!paren && *regparse != '\0') {
+ if (*regparse == ')') {
+ FAIL("unmatched ()");
+ } else
+ FAIL("junk on end"); /* "Can't happen". */
+ /* NOTREACHED */
+ }
 
- return(ret);
+ return(ret);
 }
 
 /*
@@ -374,31 +374,31 @@
 static char *
 regbranch( int *flagp )
 {
- register char *ret;
- register char *chain;
- register char *latest;
- int flags;
-
- *flagp = WORST; /* Tentatively. */
-
- ret = regnode(BRANCH);
- chain = NULL;
- while (*regparse != '\0' && *regparse != ')' &&
- *regparse != '\n' && *regparse != '|') {
- latest = regpiece(&flags);
- if (latest == NULL)
- return(NULL);
- *flagp |= flags&HASWIDTH;
- if (chain == NULL) /* First piece. */
- *flagp |= flags&SPSTART;
- else
- regtail(chain, latest);
- chain = latest;
- }
- if (chain == NULL) /* Loop ran zero times. */
- (void) regnode(NOTHING);
+ register char *ret;
+ register char *chain;
+ register char *latest;
+ int flags;
+
+ *flagp = WORST; /* Tentatively. */
+
+ ret = regnode(BRANCH);
+ chain = NULL;
+ while (*regparse != '\0' && *regparse != ')' &&
+ *regparse != '\n' && *regparse != '|') {
+ latest = regpiece(&flags);
+ if (latest == NULL)
+ return(NULL);
+ *flagp |= flags&HASWIDTH;
+ if (chain == NULL) /* First piece. */
+ *flagp |= flags&SPSTART;
+ else
+ regtail(chain, latest);
+ chain = latest;
+ }
+ if (chain == NULL) /* Loop ran zero times. */
+ (void) regnode(NOTHING);
 
- return(ret);
+ return(ret);
 }
 
 /*
@@ -413,56 +413,56 @@
 static char *
 regpiece( int *flagp )
 {
- register char *ret;
- register char op;
- register char *next;
- int flags;
-
- ret = regatom(&flags);
- if (ret == NULL)
- return(NULL);
-
- op = *regparse;
- if (!ISMULT(op)) {
- *flagp = flags;
- return(ret);
- }
-
- if (!(flags&HASWIDTH) && op != '?')
- FAIL("*+ operand could be empty");
- *flagp = (op != '+') ? (WORST|SPSTART) : (WORST|HASWIDTH);
-
- if (op == '*' && (flags&SIMPLE))
- reginsert(STAR, ret);
- else if (op == '*') {
- /* Emit x* as (x&|), where & means "self". */
- reginsert(BRANCH, ret); /* Either x */
- regoptail(ret, regnode(BACK)); /* and loop */
- regoptail(ret, ret); /* back */
- regtail(ret, regnode(BRANCH)); /* or */
- regtail(ret, regnode(NOTHING)); /* null. */
- } else if (op == '+' && (flags&SIMPLE))
- reginsert(PLUS, ret);
- else if (op == '+') {
- /* Emit x+ as x(&|), where & means "self". */
- next = regnode(BRANCH); /* Either */
- regtail(ret, next);
- regtail(regnode(BACK), ret); /* loop back */
- regtail(next, regnode(BRANCH)); /* or */
- regtail(ret, regnode(NOTHING)); /* null. */
- } else if (op == '?') {
- /* Emit x? as (x|) */
- reginsert(BRANCH, ret); /* Either x */
- regtail(ret, regnode(BRANCH)); /* or */
- next = regnode(NOTHING); /* null. */
- regtail(ret, next);
- regoptail(ret, next);
- }
- regparse++;
- if (ISMULT(*regparse))
- FAIL("nested *?+");
+ register char *ret;
+ register char op;
+ register char *next;
+ int flags;
+
+ ret = regatom(&flags);
+ if (ret == NULL)
+ return(NULL);
+
+ op = *regparse;
+ if (!ISMULT(op)) {
+ *flagp = flags;
+ return(ret);
+ }
+
+ if (!(flags&HASWIDTH) && op != '?')
+ FAIL("*+ operand could be empty");
+ *flagp = (op != '+') ? (WORST|SPSTART) : (WORST|HASWIDTH);
+
+ if (op == '*' && (flags&SIMPLE))
+ reginsert(STAR, ret);
+ else if (op == '*') {
+ /* Emit x* as (x&|), where & means "self". */
+ reginsert(BRANCH, ret); /* Either x */
+ regoptail(ret, regnode(BACK)); /* and loop */
+ regoptail(ret, ret); /* back */
+ regtail(ret, regnode(BRANCH)); /* or */
+ regtail(ret, regnode(NOTHING)); /* null. */
+ } else if (op == '+' && (flags&SIMPLE))
+ reginsert(PLUS, ret);
+ else if (op == '+') {
+ /* Emit x+ as x(&|), where & means "self". */
+ next = regnode(BRANCH); /* Either */
+ regtail(ret, next);
+ regtail(regnode(BACK), ret); /* loop back */
+ regtail(next, regnode(BRANCH)); /* or */
+ regtail(ret, regnode(NOTHING)); /* null. */
+ } else if (op == '?') {
+ /* Emit x? as (x|) */
+ reginsert(BRANCH, ret); /* Either x */
+ regtail(ret, regnode(BRANCH)); /* or */
+ next = regnode(NOTHING); /* null. */
+ regtail(ret, next);
+ regoptail(ret, next);
+ }
+ regparse++;
+ if (ISMULT(*regparse))
+ FAIL("nested *?+");
 
- return(ret);
+ return(ret);
 }
 
 /*
@@ -476,199 +476,199 @@
 static char *
 regatom( int *flagp )
 {
- register char *ret;
- int flags;
+ register char *ret;
+ int flags;
 
- *flagp = WORST; /* Tentatively. */
+ *flagp = WORST; /* Tentatively. */
 
- switch (*regparse++) {
- /* FIXME: these chars only have meaning at beg/end of pat? */
- case '^':
- ret = regnode(BOL);
- break;
- case '$':
- ret = regnode(EOL);
- break;
- case '.':
- ret = regnode(ANY);
- *flagp |= HASWIDTH|SIMPLE;
- break;
- case '[': {
- register int classr;
- register int classend;
-
- if (*regparse == '^') { /* Complement of range. */
- ret = regnode(ANYBUT);
- regparse++;
- } else
- ret = regnode(ANYOF);
- if (*regparse == ']' || *regparse == '-')
- regc(*regparse++);
- while (*regparse != '\0' && *regparse != ']') {
- if (*regparse == '-') {
- regparse++;
- if (*regparse == ']' || *regparse == '\0')
- regc('-');
- else {
- classr = UCHARAT(regparse-2)+1;
- classend = UCHARAT(regparse);
- if (classr > classend+1)
- FAIL("invalid [] range");
- for (; classr <= classend; classr++)
- regc(classr);
- regparse++;
- }
- } else
- regc(*regparse++);
- }
- regc('\0');
- if (*regparse != ']')
- FAIL("unmatched []");
- regparse++;
- *flagp |= HASWIDTH|SIMPLE;
- }
- break;
- case '(':
- ret = reg(1, &flags);
- if (ret == NULL)
- return(NULL);
- *flagp |= flags&(HASWIDTH|SPSTART);
- break;
- case '\0':
- case '|':
- case '\n':
- case ')':
- FAIL("internal urp"); /* Supposed to be caught earlier. */
- break;
- case '?':
- case '+':
- case '*':
- FAIL("?+* follows nothing");
- break;
- case '\\':
- switch (*regparse++) {
- case '\0':
- FAIL("trailing \\");
- break;
- case '<':
- ret = regnode(WORDA);
- break;
- case '>':
- ret = regnode(WORDZ);
- break;
- /* FIXME: Someday handle \1, \2, ... */
- default:
- /* Handle general quoted chars in exact-match routine */
- goto de_fault;
- }
- break;
- de_fault:
- default:
- /*
- * Encode a string of characters to be matched exactly.
- *
- * This is a bit tricky due to quoted chars and due to
- * '*', '+', and '?' taking the SINGLE char previous
- * as their operand.
- *
- * On entry, the char at regparse[-1] is going to go
- * into the string, no matter what it is. (It could be
- * following a \ if we are entered from the '\' case.)
- *
- * Basic idea is to pick up a good char in ch and
- * examine the next char. If it's *+? then we twiddle.
- * If it's \ then we frozzle. If it's other magic char
- * we push ch and terminate the string. If none of the
- * above, we push ch on the string and go around again.
- *
- * regprev is used to remember where "the current char"
- * starts in the string, if due to a *+? we need to back
- * up and put the current char in a separate, 1-char, string.
- * When regprev is NULL, ch is the only char in the
- * string; this is used in *+? handling, and in setting
- * flags |= SIMPLE at the end.
- */
- {
- char *regprev;
- register char ch;
-
- regparse--; /* Look at cur char */
- ret = regnode(EXACTLY);
- for ( regprev = 0 ; ; ) {
- ch = *regparse++; /* Get current char */
- switch (*regparse) { /* look at next one */
-
- default:
- regc(ch); /* Add cur to string */
- break;
-
- case '.': case '[': case '(':
- case ')': case '|': case '\n':
- case '$': case '^':
- case '\0':
- /* FIXME, $ and ^ should not always be magic */
- magic:
- regc(ch); /* dump cur char */
- goto done; /* and we are done */
-
- case '?': case '+': case '*':
- if (!regprev) /* If just ch in str, */
- goto magic; /* use it */
- /* End mult-char string one early */
- regparse = regprev; /* Back up parse */
- goto done;
-
- case '\\':
- regc(ch); /* Cur char OK */
- switch (regparse[1]){ /* Look after \ */
- case '\0':
- case '<':
- case '>':
- /* FIXME: Someday handle \1, \2, ... */
- goto done; /* Not quoted */
- default:
- /* Backup point is \, scan * point is after it. */
- regprev = regparse;
- regparse++;
- continue; /* NOT break; */
- }
- }
- regprev = regparse; /* Set backup point */
- }
- done:
- regc('\0');
- *flagp |= HASWIDTH;
- if (!regprev) /* One char? */
- *flagp |= SIMPLE;
- }
- break;
- }
+ switch (*regparse++) {
+ /* FIXME: these chars only have meaning at beg/end of pat? */
+ case '^':
+ ret = regnode(BOL);
+ break;
+ case '$':
+ ret = regnode(EOL);
+ break;
+ case '.':
+ ret = regnode(ANY);
+ *flagp |= HASWIDTH|SIMPLE;
+ break;
+ case '[': {
+ register int classr;
+ register int classend;
+
+ if (*regparse == '^') { /* Complement of range. */
+ ret = regnode(ANYBUT);
+ regparse++;
+ } else
+ ret = regnode(ANYOF);
+ if (*regparse == ']' || *regparse == '-')
+ regc(*regparse++);
+ while (*regparse != '\0' && *regparse != ']') {
+ if (*regparse == '-') {
+ regparse++;
+ if (*regparse == ']' || *regparse == '\0')
+ regc('-');
+ else {
+ classr = UCHARAT(regparse-2)+1;
+ classend = UCHARAT(regparse);
+ if (classr > classend+1)
+ FAIL("invalid [] range");
+ for (; classr <= classend; classr++)
+ regc(classr);
+ regparse++;
+ }
+ } else
+ regc(*regparse++);
+ }
+ regc('\0');
+ if (*regparse != ']')
+ FAIL("unmatched []");
+ regparse++;
+ *flagp |= HASWIDTH|SIMPLE;
+ }
+ break;
+ case '(':
+ ret = reg(1, &flags);
+ if (ret == NULL)
+ return(NULL);
+ *flagp |= flags&(HASWIDTH|SPSTART);
+ break;
+ case '\0':
+ case '|':
+ case '\n':
+ case ')':
+ FAIL("internal urp"); /* Supposed to be caught earlier. */
+ break;
+ case '?':
+ case '+':
+ case '*':
+ FAIL("?+* follows nothing");
+ break;
+ case '\\':
+ switch (*regparse++) {
+ case '\0':
+ FAIL("trailing \\");
+ break;
+ case '<':
+ ret = regnode(WORDA);
+ break;
+ case '>':
+ ret = regnode(WORDZ);
+ break;
+ /* FIXME: Someday handle \1, \2, ... */
+ default:
+ /* Handle general quoted chars in exact-match routine */
+ goto de_fault;
+ }
+ break;
+ de_fault:
+ default:
+ /*
+ * Encode a string of characters to be matched exactly.
+ *
+ * This is a bit tricky due to quoted chars and due to
+ * '*', '+', and '?' taking the SINGLE char previous
+ * as their operand.
+ *
+ * On entry, the char at regparse[-1] is going to go
+ * into the string, no matter what it is. (It could be
+ * following a \ if we are entered from the '\' case.)
+ *
+ * Basic idea is to pick up a good char in ch and
+ * examine the next char. If it's *+? then we twiddle.
+ * If it's \ then we frozzle. If it's other magic char
+ * we push ch and terminate the string. If none of the
+ * above, we push ch on the string and go around again.
+ *
+ * regprev is used to remember where "the current char"
+ * starts in the string, if due to a *+? we need to back
+ * up and put the current char in a separate, 1-char, string.
+ * When regprev is NULL, ch is the only char in the
+ * string; this is used in *+? handling, and in setting
+ * flags |= SIMPLE at the end.
+ */
+ {
+ char *regprev;
+ register char ch;
+
+ regparse--; /* Look at cur char */
+ ret = regnode(EXACTLY);
+ for ( regprev = 0 ; ; ) {
+ ch = *regparse++; /* Get current char */
+ switch (*regparse) { /* look at next one */
+
+ default:
+ regc(ch); /* Add cur to string */
+ break;
+
+ case '.': case '[': case '(':
+ case ')': case '|': case '\n':
+ case '$': case '^':
+ case '\0':
+ /* FIXME, $ and ^ should not always be magic */
+ magic:
+ regc(ch); /* dump cur char */
+ goto done; /* and we are done */
+
+ case '?': case '+': case '*':
+ if (!regprev) /* If just ch in str, */
+ goto magic; /* use it */
+ /* End mult-char string one early */
+ regparse = regprev; /* Back up parse */
+ goto done;
+
+ case '\\':
+ regc(ch); /* Cur char OK */
+ switch (regparse[1]){ /* Look after \ */
+ case '\0':
+ case '<':
+ case '>':
+ /* FIXME: Someday handle \1, \2, ... */
+ goto done; /* Not quoted */
+ default:
+ /* Backup point is \, scan * point is after it. */
+ regprev = regparse;
+ regparse++;
+ continue; /* NOT break; */
+ }
+ }
+ regprev = regparse; /* Set backup point */
+ }
+ done:
+ regc('\0');
+ *flagp |= HASWIDTH;
+ if (!regprev) /* One char? */
+ *flagp |= SIMPLE;
+ }
+ break;
+ }
 
- return(ret);
+ return(ret);
 }
 
 /*
  - regnode - emit a node
  */
-static char * /* Location. */
+static char * /* Location. */
 regnode( int op )
 {
- register char *ret;
- register char *ptr;
+ register char *ret;
+ register char *ptr;
 
- ret = regcode;
- if (ret == &regdummy) {
- regsize += 3;
- return(ret);
- }
-
- ptr = ret;
- *ptr++ = op;
- *ptr++ = '\0'; /* Null "next" pointer. */
- *ptr++ = '\0';
- regcode = ptr;
+ ret = regcode;
+ if (ret == &regdummy) {
+ regsize += 3;
+ return(ret);
+ }
+
+ ptr = ret;
+ *ptr++ = op;
+ *ptr++ = '\0'; /* Null "next" pointer. */
+ *ptr++ = '\0';
+ regcode = ptr;
 
- return(ret);
+ return(ret);
 }
 
 /*
@@ -677,10 +677,10 @@
 static void
 regc( int b )
 {
- if (regcode != &regdummy)
- *regcode++ = b;
- else
- regsize++;
+ if (regcode != &regdummy)
+ *regcode++ = b;
+ else
+ regsize++;
 }
 
 /*
@@ -690,28 +690,28 @@
  */
 static void
 reginsert(
- char op,
- char *opnd )
+ char op,
+ char *opnd )
 {
- register char *src;
- register char *dst;
- register char *place;
-
- if (regcode == &regdummy) {
- regsize += 3;
- return;
- }
-
- src = regcode;
- regcode += 3;
- dst = regcode;
- while (src > opnd)
- *--dst = *--src;
-
- place = opnd; /* Op node, where operand used to be. */
- *place++ = op;
- *place++ = '\0';
- *place++ = '\0';
+ register char *src;
+ register char *dst;
+ register char *place;
+
+ if (regcode == &regdummy) {
+ regsize += 3;
+ return;
+ }
+
+ src = regcode;
+ regcode += 3;
+ dst = regcode;
+ while (src > opnd)
+ *--dst = *--src;
+
+ place = opnd; /* Op node, where operand used to be. */
+ *place++ = op;
+ *place++ = '\0';
+ *place++ = '\0';
 }
 
 /*
@@ -719,31 +719,31 @@
  */
 static void
 regtail(
- char *p,
- char *val )
+ char *p,
+ char *val )
 {
- register char *scan;
- register char *temp;
- register int offset;
-
- if (p == &regdummy)
- return;
-
- /* Find last node. */
- scan = p;
- for (;;) {
- temp = regnext(scan);
- if (temp == NULL)
- break;
- scan = temp;
- }
-
- if (OP(scan) == BACK)
- offset = scan - val;
- else
- offset = val - scan;
- *(scan+1) = (offset>>8)&0377;
- *(scan+2) = offset&0377;
+ register char *scan;
+ register char *temp;
+ register int offset;
+
+ if (p == &regdummy)
+ return;
+
+ /* Find last node. */
+ scan = p;
+ for (;;) {
+ temp = regnext(scan);
+ if (temp == NULL)
+ break;
+ scan = temp;
+ }
+
+ if (OP(scan) == BACK)
+ offset = scan - val;
+ else
+ offset = val - scan;
+ *(scan+1) = (offset>>8)&0377;
+ *(scan+2) = offset&0377;
 }
 
 /*
@@ -752,13 +752,13 @@
 
 static void
 regoptail(
- char *p,
- char *val )
+ char *p,
+ char *val )
 {
- /* "Operandless" and "op != BRANCH" are synonymous in practice. */
- if (p == NULL || p == &regdummy || OP(p) != BRANCH)
- return;
- regtail(OPERAND(p), val);
+ /* "Operandless" and "op != BRANCH" are synonymous in practice. */
+ if (p == NULL || p == &regdummy || OP(p) != BRANCH)
+ return;
+ regtail(OPERAND(p), val);
 }
 
 /*
@@ -768,10 +768,10 @@
 /*
  * Global work variables for regexec().
  */
-static char *reginput; /* String-input pointer. */
-static char *regbol; /* Beginning of input, for ^ check. */
-static char **regstartp; /* Pointer to startp array. */
-static char **regendp; /* Ditto for endp. */
+static char *reginput; /* String-input pointer. */
+static char *regbol; /* Beginning of input, for ^ check. */
+static char **regstartp; /* Pointer to startp array. */
+static char **regendp; /* Ditto for endp. */
 
 /*
  * Forwards.
@@ -791,90 +791,90 @@
  */
 int
 regexec(
- register regexp *prog,
- register char *string )
+ register regexp *prog,
+ register char *string )
 {
- register char *s;
+ register char *s;
 
- /* Be paranoid... */
- if (prog == NULL || string == NULL) {
- regerror("NULL parameter");
- return(0);
- }
-
- /* Check validity of program. */
- if (UCHARAT(prog->program) != MAGIC) {
- regerror("corrupted program");
- return(0);
- }
-
- /* If there is a "must appear" string, look for it. */
- if (prog->regmust != NULL) {
- s = (char *)string;
- while ((s = strchr(s, prog->regmust[0])) != NULL) {
- if (strncmp(s, prog->regmust, prog->regmlen) == 0)
- break; /* Found it. */
- s++;
- }
- if (s == NULL) /* Not present. */
- return(0);
- }
-
- /* Mark beginning of line for ^ . */
- regbol = (char *)string;
-
- /* Simplest case: anchored match need be tried only once. */
- if (prog->reganch)
- return(regtry(prog, string));
-
- /* Messy cases: unanchored match. */
- s = (char *)string;
- if (prog->regstart != '\0')
- /* We know what char it must start with. */
- while ((s = strchr(s, prog->regstart)) != NULL) {
- if (regtry(prog, s))
- return(1);
- s++;
- }
- else
- /* We don't -- general case. */
- do {
- if (regtry(prog, s))
- return(1);
- } while (*s++ != '\0');
+ /* Be paranoid... */
+ if (prog == NULL || string == NULL) {
+ regerror("NULL parameter");
+ return(0);
+ }
+
+ /* Check validity of program. */
+ if (UCHARAT(prog->program) != MAGIC) {
+ regerror("corrupted program");
+ return(0);
+ }
+
+ /* If there is a "must appear" string, look for it. */
+ if (prog->regmust != NULL) {
+ s = (char *)string;
+ while ((s = strchr(s, prog->regmust[0])) != NULL) {
+ if (strncmp(s, prog->regmust, prog->regmlen) == 0)
+ break; /* Found it. */
+ s++;
+ }
+ if (s == NULL) /* Not present. */
+ return(0);
+ }
+
+ /* Mark beginning of line for ^ . */
+ regbol = (char *)string;
+
+ /* Simplest case: anchored match need be tried only once. */
+ if (prog->reganch)
+ return(regtry(prog, string));
+
+ /* Messy cases: unanchored match. */
+ s = (char *)string;
+ if (prog->regstart != '\0')
+ /* We know what char it must start with. */
+ while ((s = strchr(s, prog->regstart)) != NULL) {
+ if (regtry(prog, s))
+ return(1);
+ s++;
+ }
+ else
+ /* We don't -- general case. */
+ do {
+ if (regtry(prog, s))
+ return(1);
+ } while (*s++ != '\0');
 
- /* Failure. */
- return(0);
+ /* Failure. */
+ return(0);
 }
 
 /*
  - regtry - try match at specific point
  */
-static int /* 0 failure, 1 success */
+static int /* 0 failure, 1 success */
 regtry(
- regexp *prog,
- char *string )
+ regexp *prog,
+ char *string )
 {
- register int i;
- register char **sp;
- register char **ep;
-
- reginput = string;
- regstartp = prog->startp;
- regendp = prog->endp;
-
- sp = prog->startp;
- ep = prog->endp;
- for (i = NSUBEXP; i > 0; i--) {
- *sp++ = NULL;
- *ep++ = NULL;
- }
- if (regmatch(prog->program + 1)) {
- prog->startp[0] = string;
- prog->endp[0] = reginput;
- return(1);
- } else
- return(0);
+ register int i;
+ register char **sp;
+ register char **ep;
+
+ reginput = string;
+ regstartp = prog->startp;
+ regendp = prog->endp;
+
+ sp = prog->startp;
+ ep = prog->endp;
+ for (i = NSUBEXP; i > 0; i--) {
+ *sp++ = NULL;
+ *ep++ = NULL;
+ }
+ if (regmatch(prog->program + 1)) {
+ prog->startp[0] = string;
+ prog->endp[0] = reginput;
+ return(1);
+ } else
+ return(0);
 }
 
 /*
@@ -887,202 +887,202 @@
  * need to know whether the rest of the match failed) by a loop instead of
  * by recursion.
  */
-static int /* 0 failure, 1 success */
+static int /* 0 failure, 1 success */
 regmatch( char *prog )
 {
- register char *scan; /* Current node. */
- char *next; /* Next node. */
+ register char *scan; /* Current node. */
+ char *next; /* Next node. */
 
- scan = prog;
+ scan = prog;
 #ifdef DEBUG
- if (scan != NULL && regnarrate)
- fprintf(stderr, "%s(\n", regprop(scan));
+ if (scan != NULL && regnarrate)
+ fprintf(stderr, "%s(\n", regprop(scan));
 #endif
- while (scan != NULL) {
+ while (scan != NULL) {
 #ifdef DEBUG
- if (regnarrate)
- fprintf(stderr, "%s...\n", regprop(scan));
+ if (regnarrate)
+ fprintf(stderr, "%s...\n", regprop(scan));
 #endif
- next = regnext(scan);
+ next = regnext(scan);
 
- switch (OP(scan)) {
- case BOL:
- if (reginput != regbol)
- return(0);
- break;
- case EOL:
- if (*reginput != '\0')
- return(0);
- break;
- case WORDA:
- /* Must be looking at a letter, digit, or _ */
- if ((!isalnum(*reginput)) && *reginput != '_')
- return(0);
- /* Prev must be BOL or nonword */
- if (reginput > regbol &&
- (isalnum(reginput[-1]) || reginput[-1] == '_'))
- return(0);
- break;
- case WORDZ:
- /* Must be looking at non letter, digit, or _ */
- if (isalnum(*reginput) || *reginput == '_')
- return(0);
- /* We don't care what the previous char was */
- break;
- case ANY:
- if (*reginput == '\0')
- return(0);
- reginput++;
- break;
- case EXACTLY: {
- register int len;
- register char *opnd;
-
- opnd = OPERAND(scan);
- /* Inline the first character, for speed. */
- if (*opnd != *reginput)
- return(0);
- len = strlen(opnd);
- if (len > 1 && strncmp(opnd, reginput, len) != 0)
- return(0);
- reginput += len;
- }
- break;
- case ANYOF:
- if (*reginput == '\0' || strchr(OPERAND(scan), *reginput) == NULL)
- return(0);
- reginput++;
- break;
- case ANYBUT:
- if (*reginput == '\0' || strchr(OPERAND(scan), *reginput) != NULL)
- return(0);
- reginput++;
- break;
- case NOTHING:
- break;
- case BACK:
- break;
- case OPEN+1:
- case OPEN+2:
- case OPEN+3:
- case OPEN+4:
- case OPEN+5:
- case OPEN+6:
- case OPEN+7:
- case OPEN+8:
- case OPEN+9: {
- register int no;
- register char *save;
-
- no = OP(scan) - OPEN;
- save = reginput;
-
- if (regmatch(next)) {
- /*
- * Don't set startp if some later
- * invocation of the same parentheses
- * already has.
- */
- if (regstartp[no] == NULL)
- regstartp[no] = save;
- return(1);
- } else
- return(0);
- }
- break;
- case CLOSE+1:
- case CLOSE+2:
- case CLOSE+3:
- case CLOSE+4:
- case CLOSE+5:
- case CLOSE+6:
- case CLOSE+7:
- case CLOSE+8:
- case CLOSE+9: {
- register int no;
- register char *save;
-
- no = OP(scan) - CLOSE;
- save = reginput;
-
- if (regmatch(next)) {
- /*
- * Don't set endp if some later
- * invocation of the same parentheses
- * already has.
- */
- if (regendp[no] == NULL)
- regendp[no] = save;
- return(1);
- } else
- return(0);
- }
- break;
- case BRANCH: {
- register char *save;
-
- if (OP(next) != BRANCH) /* No choice. */
- next = OPERAND(scan); /* Avoid recursion. */
- else {
- do {
- save = reginput;
- if (regmatch(OPERAND(scan)))
- return(1);
- reginput = save;
- scan = regnext(scan);
- } while (scan != NULL && OP(scan) == BRANCH);
- return(0);
- /* NOTREACHED */
- }
- }
- break;
- case STAR:
- case PLUS: {
- register char nextch;
- register int no;
- register char *save;
- register int min;
-
- /*
- * Lookahead to avoid useless match attempts
- * when we know what character comes next.
- */
- nextch = '\0';
- if (OP(next) == EXACTLY)
- nextch = *OPERAND(next);
- min = (OP(scan) == STAR) ? 0 : 1;
- save = reginput;
- no = regrepeat(OPERAND(scan));
- while (no >= min) {
- /* If it could work, try it. */
- if (nextch == '\0' || *reginput == nextch)
- if (regmatch(next))
- return(1);
- /* Couldn't or didn't -- back up. */
- no--;
- reginput = save + no;
- }
- return(0);
- }
- break;
- case END:
- return(1); /* Success! */
- break;
- default:
- regerror("memory corruption");
- return(0);
- break;
- }
-
- scan = next;
- }
-
- /*
- * We get here only if there's trouble -- normally "case END" is
- * the terminating point.
- */
- regerror("corrupted pointers");
- return(0);
+ switch (OP(scan)) {
+ case BOL:
+ if (reginput != regbol)
+ return(0);
+ break;
+ case EOL:
+ if (*reginput != '\0')
+ return(0);
+ break;
+ case WORDA:
+ /* Must be looking at a letter, digit, or _ */
+ if ((!isalnum(*reginput)) && *reginput != '_')
+ return(0);
+ /* Prev must be BOL or nonword */
+ if (reginput > regbol &&
+ (isalnum(reginput[-1]) || reginput[-1] == '_'))
+ return(0);
+ break;
+ case WORDZ:
+ /* Must be looking at non letter, digit, or _ */
+ if (isalnum(*reginput) || *reginput == '_')
+ return(0);
+ /* We don't care what the previous char was */
+ break;
+ case ANY:
+ if (*reginput == '\0')
+ return(0);
+ reginput++;
+ break;
+ case EXACTLY: {
+ register int len;
+ register char *opnd;
+
+ opnd = OPERAND(scan);
+ /* Inline the first character, for speed. */
+ if (*opnd != *reginput)
+ return(0);
+ len = strlen(opnd);
+ if (len > 1 && strncmp(opnd, reginput, len) != 0)
+ return(0);
+ reginput += len;
+ }
+ break;
+ case ANYOF:
+ if (*reginput == '\0' || strchr(OPERAND(scan), *reginput) == NULL)
+ return(0);
+ reginput++;
+ break;
+ case ANYBUT:
+ if (*reginput == '\0' || strchr(OPERAND(scan), *reginput) != NULL)
+ return(0);
+ reginput++;
+ break;
+ case NOTHING:
+ break;
+ case BACK:
+ break;
+ case OPEN+1:
+ case OPEN+2:
+ case OPEN+3:
+ case OPEN+4:
+ case OPEN+5:
+ case OPEN+6:
+ case OPEN+7:
+ case OPEN+8:
+ case OPEN+9: {
+ register int no;
+ register char *save;
+
+ no = OP(scan) - OPEN;
+ save = reginput;
+
+ if (regmatch(next)) {
+ /*
+ * Don't set startp if some later
+ * invocation of the same parentheses
+ * already has.
+ */
+ if (regstartp[no] == NULL)
+ regstartp[no] = save;
+ return(1);
+ } else
+ return(0);
+ }
+ break;
+ case CLOSE+1:
+ case CLOSE+2:
+ case CLOSE+3:
+ case CLOSE+4:
+ case CLOSE+5:
+ case CLOSE+6:
+ case CLOSE+7:
+ case CLOSE+8:
+ case CLOSE+9: {
+ register int no;
+ register char *save;
+
+ no = OP(scan) - CLOSE;
+ save = reginput;
+
+ if (regmatch(next)) {
+ /*
+ * Don't set endp if some later
+ * invocation of the same parentheses
+ * already has.
+ */
+ if (regendp[no] == NULL)
+ regendp[no] = save;
+ return(1);
+ } else
+ return(0);
+ }
+ break;
+ case BRANCH: {
+ register char *save;
+
+ if (OP(next) != BRANCH) /* No choice. */
+ next = OPERAND(scan); /* Avoid recursion. */
+ else {
+ do {
+ save = reginput;
+ if (regmatch(OPERAND(scan)))
+ return(1);
+ reginput = save;
+ scan = regnext(scan);
+ } while (scan != NULL && OP(scan) == BRANCH);
+ return(0);
+ /* NOTREACHED */
+ }
+ }
+ break;
+ case STAR:
+ case PLUS: {
+ register char nextch;
+ register int no;
+ register char *save;
+ register int min;
+
+ /*
+ * Lookahead to avoid useless match attempts
+ * when we know what character comes next.
+ */
+ nextch = '\0';
+ if (OP(next) == EXACTLY)
+ nextch = *OPERAND(next);
+ min = (OP(scan) == STAR) ? 0 : 1;
+ save = reginput;
+ no = regrepeat(OPERAND(scan));
+ while (no >= min) {
+ /* If it could work, try it. */
+ if (nextch == '\0' || *reginput == nextch)
+ if (regmatch(next))
+ return(1);
+ /* Couldn't or didn't -- back up. */
+ no--;
+ reginput = save + no;
+ }
+ return(0);
+ }
+ break;
+ case END:
+ return(1); /* Success! */
+ break;
+ default:
+ regerror("memory corruption");
+ return(0);
+ break;
+ }
+
+ scan = next;
+ }
+
+ /*
+ * We get here only if there's trouble -- normally "case END" is
+ * the terminating point.
+ */
+ regerror("corrupted pointers");
+ return(0);
 }
 
 /*
@@ -1091,43 +1091,43 @@
 static int
 regrepeat( char *p )
 {
- register int count = 0;
- register char *scan;
- register char *opnd;
-
- scan = reginput;
- opnd = OPERAND(p);
- switch (OP(p)) {
- case ANY:
- count = strlen(scan);
- scan += count;
- break;
- case EXACTLY:
- while (*opnd == *scan) {
- count++;
- scan++;
- }
- break;
- case ANYOF:
- while (*scan != '\0' && strchr(opnd, *scan) != NULL) {
- count++;
- scan++;
- }
- break;
- case ANYBUT:
- while (*scan != '\0' && strchr(opnd, *scan) == NULL) {
- count++;
- scan++;
- }
- break;
- default: /* Oh dear. Called inappropriately. */
- regerror("internal foulup");
- count = 0; /* Best compromise. */
- break;
- }
- reginput = scan;
+ register int count = 0;
+ register char *scan;
+ register char *opnd;
+
+ scan = reginput;
+ opnd = OPERAND(p);
+ switch (OP(p)) {
+ case ANY:
+ count = strlen(scan);
+ scan += count;
+ break;
+ case EXACTLY:
+ while (*opnd == *scan) {
+ count++;
+ scan++;
+ }
+ break;
+ case ANYOF:
+ while (*scan != '\0' && strchr(opnd, *scan) != NULL) {
+ count++;
+ scan++;
+ }
+ break;
+ case ANYBUT:
+ while (*scan != '\0' && strchr(opnd, *scan) == NULL) {
+ count++;
+ scan++;
+ }
+ break;
+ default: /* Oh dear. Called inappropriately. */
+ regerror("internal foulup");
+ count = 0; /* Best compromise. */
+ break;
+ }
+ reginput = scan;
 
- return(count);
+ return(count);
 }
 
 /*
@@ -1136,19 +1136,19 @@
 static char *
 regnext( register char *p )
 {
- register int offset;
+ register int offset;
 
- if (p == &regdummy)
- return(NULL);
+ if (p == &regdummy)
+ return(NULL);
 
- offset = NEXT(p);
- if (offset == 0)
- return(NULL);
-
- if (OP(p) == BACK)
- return(p-offset);
- else
- return(p+offset);
+ offset = NEXT(p);
+ if (offset == 0)
+ return(NULL);
+
+ if (OP(p) == BACK)
+ return(p-offset);
+ else
+ return(p+offset);
 }
 
 #ifdef DEBUG
@@ -1161,40 +1161,40 @@
 void
 regdump( regexp *r )
 {
- register char *s;
- register char op = EXACTLY; /* Arbitrary non-END op. */
- register char *next;
-
-
- s = r->program + 1;
- while (op != END) { /* While that wasn't END last time... */
- op = OP(s);
- printf("%2d%s", s-r->program, regprop(s)); /* Where, what. */
- next = regnext(s);
- if (next == NULL) /* Next ptr. */
- printf("(0)");
- else
- printf("(%d)", (s-r->program)+(next-s));
- s += 3;
- if (op == ANYOF || op == ANYBUT || op == EXACTLY) {
- /* Literal string, where present. */
- while (*s != '\0') {
- putchar(*s);
- s++;
- }
- s++;
- }
- putchar('\n');
- }
-
- /* Header fields of interest. */
- if (r->regstart != '\0')
- printf("start `%c' ", r->regstart);
- if (r->reganch)
- printf("anchored ");
- if (r->regmust != NULL)
- printf("must have \"%s\"", r->regmust);
- printf("\n");
+ register char *s;
+ register char op = EXACTLY; /* Arbitrary non-END op. */
+ register char *next;
+
+
+ s = r->program + 1;
+ while (op != END) { /* While that wasn't END last time... */
+ op = OP(s);
+ printf("%2d%s", s-r->program, regprop(s)); /* Where, what. */
+ next = regnext(s);
+ if (next == NULL) /* Next ptr. */
+ printf("(0)");
+ else
+ printf("(%d)", (s-r->program)+(next-s));
+ s += 3;
+ if (op == ANYOF || op == ANYBUT || op == EXACTLY) {
+ /* Literal string, where present. */
+ while (*s != '\0') {
+ putchar(*s);
+ s++;
+ }
+ s++;
+ }
+ putchar('\n');
+ }
+
+ /* Header fields of interest. */
+ if (r->regstart != '\0')
+ printf("start `%c' ", r->regstart);
+ if (r->reganch)
+ printf("anchored ");
+ if (r->regmust != NULL)
+ printf("must have \"%s\"", r->regmust);
+ printf("\n");
 }
 
 /*
@@ -1203,85 +1203,85 @@
 static char *
 regprop( char *op )
 {
- register char *p;
- static char buf[50];
+ register char *p;
+ static char buf[50];
 
- (void) strcpy(buf, ":");
+ (void) strcpy(buf, ":");
 
- switch (OP(op)) {
- case BOL:
- p = "BOL";
- break;
- case EOL:
- p = "EOL";
- break;
- case ANY:
- p = "ANY";
- break;
- case ANYOF:
- p = "ANYOF";
- break;
- case ANYBUT:
- p = "ANYBUT";
- break;
- case BRANCH:
- p = "BRANCH";
- break;
- case EXACTLY:
- p = "EXACTLY";
- break;
- case NOTHING:
- p = "NOTHING";
- break;
- case BACK:
- p = "BACK";
- break;
- case END:
- p = "END";
- break;
- case OPEN+1:
- case OPEN+2:
- case OPEN+3:
- case OPEN+4:
- case OPEN+5:
- case OPEN+6:
- case OPEN+7:
- case OPEN+8:
- case OPEN+9:
- sprintf(buf+strlen(buf), "OPEN%d", OP(op)-OPEN);
- p = NULL;
- break;
- case CLOSE+1:
- case CLOSE+2:
- case CLOSE+3:
- case CLOSE+4:
- case CLOSE+5:
- case CLOSE+6:
- case CLOSE+7:
- case CLOSE+8:
- case CLOSE+9:
- sprintf(buf+strlen(buf), "CLOSE%d", OP(op)-CLOSE);
- p = NULL;
- break;
- case STAR:
- p = "STAR";
- break;
- case PLUS:
- p = "PLUS";
- break;
- case WORDA:
- p = "WORDA";
- break;
- case WORDZ:
- p = "WORDZ";
- break;
- default:
- regerror("corrupted opcode");
- break;
- }
- if (p != NULL)
- (void) strcat(buf, p);
- return(buf);
+ switch (OP(op)) {
+ case BOL:
+ p = "BOL";
+ break;
+ case EOL:
+ p = "EOL";
+ break;
+ case ANY:
+ p = "ANY";
+ break;
+ case ANYOF:
+ p = "ANYOF";
+ break;
+ case ANYBUT:
+ p = "ANYBUT";
+ break;
+ case BRANCH:
+ p = "BRANCH";
+ break;
+ case EXACTLY:
+ p = "EXACTLY";
+ break;
+ case NOTHING:
+ p = "NOTHING";
+ break;
+ case BACK:
+ p = "BACK";
+ break;
+ case END:
+ p = "END";
+ break;
+ case OPEN+1:
+ case OPEN+2:
+ case OPEN+3:
+ case OPEN+4:
+ case OPEN+5:
+ case OPEN+6:
+ case OPEN+7:
+ case OPEN+8:
+ case OPEN+9:
+ sprintf(buf+strlen(buf), "OPEN%d", OP(op)-OPEN);
+ p = NULL;
+ break;
+ case CLOSE+1:
+ case CLOSE+2:
+ case CLOSE+3:
+ case CLOSE+4:
+ case CLOSE+5:
+ case CLOSE+6:
+ case CLOSE+7:
+ case CLOSE+8:
+ case CLOSE+9:
+ sprintf(buf+strlen(buf), "CLOSE%d", OP(op)-CLOSE);
+ p = NULL;
+ break;
+ case STAR:
+ p = "STAR";
+ break;
+ case PLUS:
+ p = "PLUS";
+ break;
+ case WORDA:
+ p = "WORDA";
+ break;
+ case WORDZ:
+ p = "WORDZ";
+ break;
+ default:
+ regerror("corrupted opcode");
+ break;
+ }
+ if (p != NULL)
+ (void) strcat(buf, p);
+ return(buf);
 }
 #endif
 
@@ -1299,20 +1299,20 @@
 
 static int
 strcspn(
- char *s1,
- char *s2 )
+ char *s1,
+ char *s2 )
 {
- register char *scan1;
- register char *scan2;
- register int count;
-
- count = 0;
- for (scan1 = s1; *scan1 != '\0'; scan1++) {
- for (scan2 = s2; *scan2 != '\0';) /* ++ moved down. */
- if (*scan1 == *scan2++)
- return(count);
- count++;
- }
- return(count);
+ register char *scan1;
+ register char *scan2;
+ register int count;
+
+ count = 0;
+ for (scan1 = s1; *scan1 != '\0'; scan1++) {
+ for (scan2 = s2; *scan2 != '\0';) /* ++ moved down. */
+ if (*scan1 == *scan2++)
+ return(count);
+ count++;
+ }
+ return(count);
 }
 #endif

Modified: trunk/tools/jam/src/regexp.h
==============================================================================
--- trunk/tools/jam/src/regexp.h (original)
+++ trunk/tools/jam/src/regexp.h 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -9,13 +9,13 @@
 
 #define NSUBEXP 10
 typedef struct regexp {
- char *startp[NSUBEXP];
- char *endp[NSUBEXP];
- char regstart; /* Internal use only. */
- char reganch; /* Internal use only. */
- char *regmust; /* Internal use only. */
- int regmlen; /* Internal use only. */
- char program[1]; /* Unwarranted chumminess with compiler. */
+ char *startp[NSUBEXP];
+ char *endp[NSUBEXP];
+ char regstart; /* Internal use only. */
+ char reganch; /* Internal use only. */
+ char *regmust; /* Internal use only. */
+ int regmlen; /* Internal use only. */
+ char program[1]; /* Unwarranted chumminess with compiler. */
 } regexp;
 
 regexp *regcomp( char *exp );
@@ -26,7 +26,7 @@
  * The first byte of the regexp internal "program" is actually this magic
  * number; the start node begins in the second byte.
  */
-#define MAGIC 0234
+#define MAGIC 0234
 
 #endif
 

Modified: trunk/tools/jam/src/rules.c
==============================================================================
--- trunk/tools/jam/src/rules.c (original)
+++ trunk/tools/jam/src/rules.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -53,11 +53,12 @@
 
 typedef struct _located_target LOCATED_TARGET ;
 
-struct _located_target {
- char* file_name;
- TARGET* target;
+struct _located_target
+{
+ char * file_name;
+ TARGET * target;
 };
-static struct hash *located_targets = 0;
+static struct hash * located_targets = 0;
 
 
 /*
@@ -82,16 +83,16 @@
  * enter_rule() - return pointer to RULE, creating it if necessary in
  * target_module.
  */
-static RULE *
-enter_rule( char *rulename, module_t *target_module )
+static RULE * enter_rule( char * rulename, module_t * target_module )
 {
- RULE rule, *r = &rule;
+ RULE rule;
+ RULE * r = &rule;
 
     r->name = rulename;
 
- if ( hashenter( demand_rules( target_module ), (HASHDATA **)&r ) )
+ if ( hashenter( demand_rules( target_module ), (HASHDATA * *)&r ) )
     {
- r->name = newstr( rulename ); /* never freed */
+ r->name = newstr( rulename ); /* never freed */
         r->procedure = (PARSE *)0;
         r->module = 0;
         r->actions = 0;
@@ -105,38 +106,42 @@
     return r;
 }
 
+
 /*
  * define_rule() - return pointer to RULE, creating it if necessary in
  * target_module. Prepare it to accept a body or action originating in
  * src_module.
  */
-static RULE *
-define_rule( module_t *src_module, char *rulename, module_t *target_module )
-{
- RULE *r = enter_rule( rulename, target_module );
 
+static RULE * define_rule
+(
+ module_t * src_module,
+ char * rulename,
+ module_t * target_module
+)
+{
+ RULE * r = enter_rule( rulename, target_module );
     if ( r->module != src_module ) /* if the rule was imported from elsewhere, clear it now */
     {
- set_rule_body( r, 0, 0 );
+ set_rule_body( r, 0, 0 );
         set_rule_actions( r, 0 );
         r->module = src_module; /* r will be executed in the source module */
     }
-
     return r;
 }
 
-void
-rule_free( RULE* r )
+
+void rule_free( RULE * r )
 {
     freestr( r->name );
     r->name = "";
     parse_free( r->procedure );
     r->procedure = 0;
- if ( r->arguments )
- args_free( r->arguments );
+ if ( r->arguments )
+ args_free( r->arguments );
     r->arguments = 0;
     if ( r->actions )
- actions_free( r->actions );
+ actions_free( r->actions );
     r->actions = 0;
 }
 
@@ -147,25 +152,25 @@
 TARGET *
 bindtarget( const char *targetname )
 {
- TARGET target, *t = &target;
+ TARGET target, *t = &target;
 
- if( !targethash )
- targethash = hashinit( sizeof( TARGET ), "targets" );
+ if( !targethash )
+ targethash = hashinit( sizeof( TARGET ), "targets" );
 
     /* Perforce added const everywhere. No time to merge that change. */
 #ifdef NT
     targetname = short_path_to_long_path( (char*)targetname );
 #endif
- t->name = (char*)targetname;
+ t->name = (char*)targetname;
 
- if( hashenter( targethash, (HASHDATA **)&t ) )
- {
- memset( (char *)t, '\0', sizeof( *t ) );
- t->name = newstr( (char*)targetname ); /* never freed */
- t->boundname = t->name; /* default for T_FLAG_NOTFILE */
- }
+ if( hashenter( targethash, (HASHDATA **)&t ) )
+ {
+ memset( (char *)t, '\0', sizeof( *t ) );
+ t->name = newstr( (char*)targetname ); /* never freed */
+ t->boundname = t->name; /* default for T_FLAG_NOTFILE */
+ }
 
- return t;
+ return t;
 }
 
 
@@ -177,8 +182,8 @@
         /* Check if there's a setting for LOCATE */
         SETTINGS* s = t->settings;
         for(; s ; s = s->next)
- {
- if (strcmp(s->symbol, "LOCATE") == 0)
+ {
+ if (strcmp(s->symbol, "LOCATE") == 0)
             {
                 pushsettings(t->settings);
                 /* We're binding a target with explicit LOCATE. So
@@ -192,16 +197,19 @@
     }
 }
 
+
 void bind_explicitly_located_targets()
 {
     if (targethash)
         hashenumerate(targethash, bind_explicitly_located_target, (void*)0);
 }
 
-/* TODO: this is probably not a good idea to use functions in other modules like
+
+/* TODO: it is probably not a good idea to use functions in other modules like
   that. */
 void call_bind_rule(char* target, char* boundname);
 
+
 TARGET* search_for_target ( char * name, LIST* search_path )
 {
     PATHNAME f[1];
@@ -213,7 +221,7 @@
 
     string_new( buf );
 
- path_parse( name, f );
+ path_parse( name, f );
 
     f->f_grist.ptr = 0;
     f->f_grist.len = 0;
@@ -256,7 +264,7 @@
         string_truncate( buf, 0 );
         path_build( f, buf, 1 );
 
- timestamp( buf->value, &time );
+ timestamp( buf->value, &time );
     }
 
     result = bindtarget( name );
@@ -265,32 +273,31 @@
     result->binding = time ? T_BIND_EXISTS : T_BIND_MISSING;
 
     call_bind_rule( result->name, result->boundname );
-
+
     string_free( buf );
 
     return result;
-
 }
 
+
 /*
  * copytarget() - make a new target with the old target's name
  *
  * Not entered into hash table -- for internal nodes.
  */
 
-TARGET *
-copytarget( const TARGET *ot )
+TARGET * copytarget( const TARGET * ot )
 {
- TARGET *t;
+ TARGET *t;
 
- t = (TARGET *)BJAM_MALLOC( sizeof( *t ) );
- memset( (char *)t, '\0', sizeof( *t ) );
- t->name = copystr( ot->name );
- t->boundname = t->name;
+ t = (TARGET *)BJAM_MALLOC( sizeof( *t ) );
+ memset( (char *)t, '\0', sizeof( *t ) );
+ t->name = copystr( ot->name );
+ t->boundname = t->name;
 
- t->flags |= T_FLAG_NOTFILE | T_FLAG_INTERNAL;
+ t->flags |= T_FLAG_NOTFILE | T_FLAG_INTERNAL;
 
- return t;
+ return t;
 }
 
 /*
@@ -300,78 +307,80 @@
 void
 touchtarget( char *t )
 {
- bindtarget( t )->flags |= T_FLAG_TOUCHED;
+ bindtarget( t )->flags |= T_FLAG_TOUCHED;
 }
 
+
 /*
  * targetlist() - turn list of target names into a TARGET chain
  *
  * Inputs:
- * chain existing TARGETS to append to
- * targets list of target names
+ * chain existing TARGETS to append to
+ * targets list of target names
  */
 
 TARGETS *
-targetlist(
- TARGETS *chain,
- LIST *targets )
+targetlist(
+ TARGETS *chain,
+ LIST *targets )
 {
- for( ; targets; targets = list_next( targets ) )
- chain = targetentry( chain, bindtarget( targets->string ) );
+ for( ; targets; targets = list_next( targets ) )
+ chain = targetentry( chain, bindtarget( targets->string ) );
 
- return chain;
+ return chain;
 }
 
+
 /*
  * targetentry() - add a TARGET to a chain of TARGETS
  *
  * Inputs:
- * chain exisitng TARGETS to append to
- * target new target to append
+ * chain existing TARGETS to append to
+ * target new target to append
  */
 
 TARGETS *
-targetentry(
- TARGETS *chain,
- TARGET *target )
+targetentry(
+ TARGETS *chain,
+ TARGET *target )
 {
- TARGETS *c;
+ TARGETS *c;
 
- c = (TARGETS *)BJAM_MALLOC( sizeof( TARGETS ) );
- c->target = target;
+ c = (TARGETS *)BJAM_MALLOC( sizeof( TARGETS ) );
+ c->target = target;
 
- if( !chain ) chain = c;
- else chain->tail->next = c;
- chain->tail = c;
- c->next = 0;
+ if( !chain ) chain = c;
+ else chain->tail->next = c;
+ chain->tail = c;
+ c->next = 0;
 
- return chain;
+ return chain;
 }
 
 /*
  * targetchain() - append two TARGET chains
  *
  * Inputs:
- * chain exisitng TARGETS to append to
- * target new target to append
+ * chain exisitng TARGETS to append to
+ * target new target to append
  */
 
 TARGETS *
-targetchain(
- TARGETS *chain,
- TARGETS *targets )
+targetchain(
+ TARGETS *chain,
+ TARGETS *targets )
 {
- TARGETS *c;
+ TARGETS *c;
 
- if( !targets )
- return chain;
- else if( !chain )
- return targets;
+ if( !targets )
+ return chain;
+ else if( !chain )
+ return targets;
 
- chain->tail->next = targets;
- chain->tail = targets->tail;
+ chain->tail->next = targets;
+ chain->tail = targets->tail;
 
- return chain;
+ return chain;
 }
 
 /*
@@ -380,19 +389,19 @@
 
 ACTIONS *
 actionlist(
- ACTIONS *chain,
- ACTION *action )
+ ACTIONS *chain,
+ ACTION *action )
 {
- ACTIONS *actions = (ACTIONS *)BJAM_MALLOC( sizeof( ACTIONS ) );
+ ACTIONS *actions = (ACTIONS *)BJAM_MALLOC( sizeof( ACTIONS ) );
 
- actions->action = action;
+ actions->action = action;
 
- if( !chain ) chain = actions;
- else chain->tail->next = actions;
- chain->tail = actions;
- actions->next = 0;
+ if( !chain ) chain = actions;
+ else chain->tail->next = actions;
+ chain->tail = actions;
+ actions->next = 0;
 
- return chain;
+ return chain;
 }
 
 static SETTINGS* settings_freelist;
@@ -409,54 +418,54 @@
 
 SETTINGS *
 addsettings(
- SETTINGS *head,
- int flag,
- char *symbol,
- LIST *value )
-{
- SETTINGS *v;
-
- /* Look for previous setting */
-
- for( v = head; v; v = v->next )
- if( !strcmp( v->symbol, symbol ) )
- break;
-
- /* If not previously set, alloc a new. */
- /* If appending, do so. */
- /* Else free old and set new. */
+ SETTINGS *head,
+ int flag,
+ char *symbol,
+ LIST *value )
+{
+ SETTINGS *v;
+
+ /* Look for previous setting */
+
+ for( v = head; v; v = v->next )
+ if( !strcmp( v->symbol, symbol ) )
+ break;
 
- if( !v )
- {
+ /* If not previously set, alloc a new. */
+ /* If appending, do so. */
+ /* Else free old and set new. */
+
+ if( !v )
+ {
         v = settings_freelist;
-
+
         if ( v )
             settings_freelist = v->next;
         else
         {
             v = (SETTINGS *)BJAM_MALLOC( sizeof( *v ) );
         }
-
- v->symbol = newstr( symbol );
- v->value = value;
- v->next = head;
- head = v;
- }
- else if( flag == VAR_APPEND )
- {
- v->value = list_append( v->value, value );
- }
- else if( flag != VAR_DEFAULT )
- {
- list_free( v->value );
- v->value = value;
- }
+
+ v->symbol = newstr( symbol );
+ v->value = value;
+ v->next = head;
+ head = v;
+ }
+ else if( flag == VAR_APPEND )
+ {
+ v->value = list_append( v->value, value );
+ }
+ else if( flag != VAR_DEFAULT )
+ {
+ list_free( v->value );
+ v->value = value;
+ }
         else
             list_free( value );
 
- /* Return (new) head of list. */
+ /* Return (new) head of list. */
 
- return head;
+ return head;
 }
 
 /*
@@ -466,8 +475,8 @@
 void
 pushsettings( SETTINGS *v )
 {
- for( ; v; v = v->next )
- v->value = var_swap( v->symbol, v->value );
+ for( ; v; v = v->next )
+ v->value = var_swap( v->symbol, v->value );
 }
 
 /*
@@ -477,7 +486,7 @@
 void
 popsettings( SETTINGS *v )
 {
- pushsettings( v ); /* just swap again */
+ pushsettings( v ); /* just swap again */
 }
 
 /*
@@ -489,7 +498,7 @@
     SETTINGS *copy = 0, *v;
 
     for (v = head; v; v = v->next)
- copy = addsettings(copy, VAR_SET, v->symbol, list_copy(0, v->value));
+ copy = addsettings(copy, VAR_SET, v->symbol, list_copy(0, v->value));
 
     return copy;
 }
@@ -528,17 +537,17 @@
 void
 freesettings( SETTINGS *v )
 {
- while( v )
- {
- SETTINGS *n = v->next;
+ while( v )
+ {
+ SETTINGS *n = v->next;
 
- freestr( v->symbol );
- list_free( v->value );
+ freestr( v->symbol );
+ list_free( v->value );
         v->next = settings_freelist;
         settings_freelist = v;
 
- v = n;
- }
+ v = n;
+ }
 }
 
 static void freetarget( void *xt, void *data )
@@ -562,7 +571,7 @@
 donerules()
 {
      hashenumerate( targethash, freetarget, 0 );
- hashdone( targethash );
+ hashdone( targethash );
     while ( settings_freelist )
     {
         SETTINGS* n = settings_freelist->next;
@@ -633,7 +642,7 @@
     if ( rule->arguments )
         args_free( rule->arguments );
     rule->arguments = args;
-
+
     if ( procedure )
         parse_refer( procedure );
     if ( rule->procedure )
@@ -688,7 +697,7 @@
     RULE* local = define_rule( m, rulename, m );
     local->exported = exported;
     set_rule_body( local, args, procedure );
-
+
     /* Mark the procedure with the global rule name, regardless of
      * whether the rule is exported. That gives us something
      * reasonably identifiable that we can use, e.g. in profiling
@@ -708,7 +717,7 @@
     if ( rule->actions )
         actions_free( rule->actions );
     rule->actions = actions;
-
+
 }
 
 static rule_actions* actions_new( char* command, LIST* bindlist, int flags )
@@ -732,7 +741,7 @@
 
 /* Looks for a rule in the specified module, and returns it, if found.
    First checks if the rule is present in the module's rule table.
- Second, if name of the rule is in the form name1.name2 and name1 is in
+ Second, if name of the rule is in the form name1.name2 and name1 is in
    the list of imported modules, look in module 'name1' for rule 'name2'.
 */
 RULE *lookup_rule( char *rulename, module_t *m, int local_only )
@@ -757,7 +766,7 @@
                 result = lookup_rule(p+1, bindmodule(rulename), 1);
             }
             *p = '.';
- }
+ }
     }
 
     if (result)
@@ -771,15 +780,15 @@
                Mark it for execution in the instance where we've started lookup.
             */
             int execute_in_class = (result->module == m);
- int execute_in_some_instance =
+ int execute_in_some_instance =
             (result->module->class_module && result->module->class_module == m);
             if (original_module != m && (execute_in_class || execute_in_some_instance))
- result->module = original_module;
+ result->module = original_module;
         }
     }
 
     return result;
-
+
 }
 
 
@@ -790,7 +799,7 @@
     result = lookup_rule(rulename, m, 0);
     if (!result)
         result = lookup_rule(rulename, root_module(), 0);
- /* We've only one caller, 'evaluate_rule', which will complain about
+ /* We've only one caller, 'evaluate_rule', which will complain about
        calling underfined rule. We could issue the error
        here, but we don't have necessary information, such as frame.
     */

Modified: trunk/tools/jam/src/rules.h
==============================================================================
--- trunk/tools/jam/src/rules.h (original)
+++ trunk/tools/jam/src/rules.h 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -26,12 +26,12 @@
  *
  * The following are defined:
  *
- * RULE - a generic jam rule, the product of RULE and ACTIONS
- * ACTIONS - a chain of ACTIONs
- * ACTION - a RULE instance with targets and sources
- * SETTINGS - variables to set when executing a TARGET's ACTIONS
- * TARGETS - a chain of TARGETs
- * TARGET - a file or "thing" that can be built
+ * RULE - a generic jam rule, the product of RULE and ACTIONS
+ * ACTIONS - a chain of ACTIONs
+ * ACTION - a RULE instance with targets and sources
+ * SETTINGS - variables to set when executing a TARGET's ACTIONS
+ * TARGETS - a chain of TARGETs
+ * TARGET - a file or "thing" that can be built
  *
  * 04/11/94 (seiwald) - Combined deps & headers into deps[2] in TARGET.
  * 04/12/94 (seiwald) - actionlist() now just appends a single action.
@@ -77,77 +77,79 @@
 typedef struct rule_actions rule_actions;
 typedef struct argument_list argument_list;
 
-struct _rule {
- char *name;
- PARSE *procedure; /* parse tree from RULE */
- argument_list* arguments; /* argument checking info, or NULL for unchecked */
- rule_actions* actions; /* build actions, or NULL for no actions */
- module_t *module; /* module in which this rule is executed */
- int exported; /* nonzero if this rule is supposed to
- * appear in the global module and be
- * automatically imported into other modules
- */
+struct _rule
+{
+ char * name;
+ PARSE * procedure; /* parse tree from RULE */
+ argument_list * arguments; /* argument checking info, or NULL for unchecked
+ */
+ rule_actions * actions; /* build actions, or NULL for no actions */
+ module_t * module; /* module in which this rule is executed */
+ int exported; /* nonzero if this rule is supposed to appear in
+ * the global module and be automatically
+ * imported into other modules
+ */
 #ifdef HAVE_PYTHON
- PyObject* python_function;
-#endif
+ PyObject * python_function;
+#endif
 };
 
 /* ACTIONS - a chain of ACTIONs */
 
 struct _actions {
- ACTIONS *next;
- ACTIONS *tail; /* valid only for head */
- ACTION *action;
+ ACTIONS *next;
+ ACTIONS *tail; /* valid only for head */
+ ACTION *action;
 } ;
 
 /* ACTION - a RULE instance with targets and sources */
 
 struct _action {
- RULE *rule;
- TARGETS *targets;
- TARGETS *sources; /* aka $(>) */
- char running; /* has been started */
- char status; /* see TARGET status */
+ RULE *rule;
+ TARGETS *targets;
+ TARGETS *sources; /* aka $(>) */
+ char running; /* has been started */
+ char status; /* see TARGET status */
 } ;
 
 /* SETTINGS - variables to set when executing a TARGET's ACTIONS */
 
 struct _settings {
- SETTINGS *next;
- char *symbol; /* symbol name for var_set() */
- LIST *value; /* symbol value for var_set() */
+ SETTINGS *next;
+ char *symbol; /* symbol name for var_set() */
+ LIST *value; /* symbol value for var_set() */
 } ;
 
 /* TARGETS - a chain of TARGETs */
 
 struct _targets {
- TARGETS *next;
- TARGETS *tail; /* valid only for head */
- TARGET *target;
+ TARGETS *next;
+ TARGETS *tail; /* valid only for head */
+ TARGET *target;
 } ;
 
 /* TARGET - a file or "thing" that can be built */
 
 struct _target {
- char *name;
- char *boundname; /* if search() relocates target */
- ACTIONS *actions; /* rules to execute, if any */
- SETTINGS *settings; /* variables to define */
-
- short flags; /* status info */
-
-# define T_FLAG_TEMP 0x0001 /* TEMPORARY applied */
-# define T_FLAG_NOCARE 0x0002 /* NOCARE applied */
-# define T_FLAG_NOTFILE 0x0004 /* NOTFILE applied */
-# define T_FLAG_TOUCHED 0x0008 /* ALWAYS applied or -t target */
-# define T_FLAG_LEAVES 0x0010 /* LEAVES applied */
-# define T_FLAG_NOUPDATE 0x0020 /* NOUPDATE applied */
-# define T_FLAG_VISITED 0x0040 /* CWM: Used in debugging */
+ char *name;
+ char *boundname; /* if search() relocates target */
+ ACTIONS *actions; /* rules to execute, if any */
+ SETTINGS *settings; /* variables to define */
+
+ short flags; /* status info */
+
+# define T_FLAG_TEMP 0x0001 /* TEMPORARY applied */
+# define T_FLAG_NOCARE 0x0002 /* NOCARE applied */
+# define T_FLAG_NOTFILE 0x0004 /* NOTFILE applied */
+# define T_FLAG_TOUCHED 0x0008 /* ALWAYS applied or -t target */
+# define T_FLAG_LEAVES 0x0010 /* LEAVES applied */
+# define T_FLAG_NOUPDATE 0x0020 /* NOUPDATE applied */
+# define T_FLAG_VISITED 0x0040 /* CWM: Used in debugging */
 
 /* this flag was added to support a new builtin rule named "RMBAD" */
 /* it is used to force removal of outdated targets whose dependencies
  * fail to build */
-
+
 # define T_FLAG_RMOLD 0x0080 /* RMBAD applied */
 
 /* this flag was added to support a new builting rule named "FAIL_EXPECTED" */
@@ -166,72 +168,72 @@
 
 
 #ifdef OPT_SEMAPHORE
-# define T_MAKE_SEMAPHORE 5 /* Special target type for semaphores */
+# define T_MAKE_SEMAPHORE 5 /* Special target type for semaphores */
 #endif
 
 
- char binding; /* how target relates to real file */
+ char binding; /* how target relates to real file */
 
-# define T_BIND_UNBOUND 0 /* a disembodied name */
-# define T_BIND_MISSING 1 /* couldn't find real file */
+# define T_BIND_UNBOUND 0 /* a disembodied name */
+# define T_BIND_MISSING 1 /* couldn't find real file */
 #ifdef OPT_SEMAPHORE
- TARGET *semaphore; /* used in serialization */
+ TARGET *semaphore; /* used in serialization */
 #endif
-# define T_BIND_PARENTS 2 /* using parent's timestamp */
-# define T_BIND_EXISTS 3 /* real file, timestamp valid */
+# define T_BIND_PARENTS 2 /* using parent's timestamp */
+# define T_BIND_EXISTS 3 /* real file, timestamp valid */
 
- TARGETS *depends; /* dependencies */
- TARGETS *dependents;/* the inverse of dependencies */
+ TARGETS *depends; /* dependencies */
+ TARGETS *dependents;/* the inverse of dependencies */
     TARGETS *rebuilds; /* targets that should be force-rebuilt whenever this one is */
- TARGET *includes; /* includes */
- TARGET *original_target; /* original_target->includes = this */
+ TARGET *includes; /* internal includes node */
+ TARGET *original_target; /* original_target->includes = this */
     char rescanned;
 
- time_t time; /* update time */
- time_t leaf; /* update time of leaf sources */
+ time_t time; /* update time */
+ time_t leaf; /* update time of leaf sources */
 
- char fate; /* make0()'s diagnosis */
+ char fate; /* make0()'s diagnosis */
 
-# define T_FATE_INIT 0 /* nothing done to target */
-# define T_FATE_MAKING 1 /* make0(target) on stack */
+# define T_FATE_INIT 0 /* nothing done to target */
+# define T_FATE_MAKING 1 /* make0(target) on stack */
 
-# define T_FATE_STABLE 2 /* target didn't need updating */
-# define T_FATE_NEWER 3 /* target newer than parent */
+# define T_FATE_STABLE 2 /* target didn't need updating */
+# define T_FATE_NEWER 3 /* target newer than parent */
 
-# define T_FATE_SPOIL 4 /* >= SPOIL rebuilds parents */
-# define T_FATE_ISTMP 4 /* unneeded temp target oddly present */
+# define T_FATE_SPOIL 4 /* >= SPOIL rebuilds parents */
+# define T_FATE_ISTMP 4 /* unneeded temp target oddly present */
 
-# define T_FATE_BUILD 5 /* >= BUILD rebuilds target */
-# define T_FATE_TOUCHED 5 /* manually touched with -t */
-# define T_FATE_REBUILD 6
-# define T_FATE_MISSING 7 /* is missing, needs updating */
-# define T_FATE_NEEDTMP 8 /* missing temp that must be rebuild */
-# define T_FATE_OUTDATED 9 /* is out of date, needs updating */
-# define T_FATE_UPDATE 10 /* deps updated, needs updating */
+# define T_FATE_BUILD 5 /* >= BUILD rebuilds target */
+# define T_FATE_TOUCHED 5 /* manually touched with -t */
+# define T_FATE_REBUILD 6
+# define T_FATE_MISSING 7 /* is missing, needs updating */
+# define T_FATE_NEEDTMP 8 /* missing temp that must be rebuild */
+# define T_FATE_OUTDATED 9 /* is out of date, needs updating */
+# define T_FATE_UPDATE 10 /* deps updated, needs updating */
 
-# define T_FATE_BROKEN 11 /* >= BROKEN ruins parents */
-# define T_FATE_CANTFIND 11 /* no rules to make missing target */
-# define T_FATE_CANTMAKE 12 /* can't find dependents */
+# define T_FATE_BROKEN 11 /* >= BROKEN ruins parents */
+# define T_FATE_CANTFIND 11 /* no rules to make missing target */
+# define T_FATE_CANTMAKE 12 /* can't find dependents */
 
- char progress; /* tracks make1() progress */
+ char progress; /* tracks make1() progress */
 
-# define T_MAKE_INIT 0 /* make1(target) not yet called */
-# define T_MAKE_ONSTACK 1 /* make1(target) on stack */
-# define T_MAKE_ACTIVE 2 /* make1(target) in make1b() */
-# define T_MAKE_RUNNING 3 /* make1(target) running commands */
-# define T_MAKE_DONE 4 /* make1(target) done */
+# define T_MAKE_INIT 0 /* make1(target) not yet called */
+# define T_MAKE_ONSTACK 1 /* make1(target) on stack */
+# define T_MAKE_ACTIVE 2 /* make1(target) in make1b() */
+# define T_MAKE_RUNNING 3 /* make1(target) running commands */
+# define T_MAKE_DONE 4 /* make1(target) done */
 
- char status; /* execcmd() result */
+ char status; /* execcmd() result */
 
- int asynccnt; /* child deps outstanding */
- TARGETS *parents; /* used by make1() for completion */
- char *cmds; /* type-punned command list */
+ int asynccnt; /* child deps outstanding */
+ TARGETS *parents; /* used by make1() for completion */
+ char *cmds; /* type-punned command list */
 
     char* failed;
 } ;
 
-void add_include( TARGET * including, TARGET * included );
-RULE *bindrule( char *rulename, module_t* );
+void add_include( TARGET * including, TARGET * included );
+RULE * bindrule ( char * rulename, module_t* );
 
 RULE* import_rule( RULE* source, module_t* m, char* name );
 RULE* new_rule_body( module_t* m, char* rulename, argument_list* args, PARSE* procedure, int exprt );
@@ -240,7 +242,7 @@
 TARGET *copytarget( const TARGET *t );
 void bind_explicitly_located_targets();
 TARGET* search_for_target( char * name, LIST* search_path );
-void touchtarget( char *t );
+void touchtarget( char *t );
 TARGETS *targetlist( TARGETS *chain, LIST *targets );
 TARGETS *targetentry( TARGETS *chain, TARGET *target );
 TARGETS *targetchain( TARGETS *chain, TARGETS *targets );
@@ -248,12 +250,12 @@
 ACTIONS *actionlist( ACTIONS *chain, ACTION *action );
 void freeactions( ACTIONS *chain );
 SETTINGS *addsettings( SETTINGS *head, int flag, char *symbol, LIST *value );
-void pushsettings( SETTINGS *v );
-void popsettings( SETTINGS *v );
+void pushsettings( SETTINGS *v );
+void popsettings( SETTINGS *v );
 SETTINGS *copysettings( SETTINGS *v );
-void freesettings( SETTINGS *v );
+void freesettings( SETTINGS *v );
 void rule_free( RULE *r );
-void donerules();
+void donerules();
 
 argument_list* args_new();
 void args_refer( argument_list* );

Modified: trunk/tools/jam/src/scan.c
==============================================================================
--- trunk/tools/jam/src/scan.c (original)
+++ trunk/tools/jam/src/scan.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -17,30 +17,30 @@
  *
  * 12/26/93 (seiwald) - bump buf in yylex to 10240 - yuk.
  * 09/16/94 (seiwald) - check for overflows, unmatched {}'s, etc.
- * Also handle tokens abutting EOF by remembering
- * to return EOF now matter how many times yylex()
- * reinvokes yyline().
+ * Also handle tokens abutting EOF by remembering
+ * to return EOF now matter how many times yylex()
+ * reinvokes yyline().
  * 02/11/95 (seiwald) - honor only punctuation keywords if SCAN_PUNCT.
  * 07/27/95 (seiwald) - Include jamgram.h after scan.h, so that YYSTYPE is
- * defined before Linux's yacc tries to redefine it.
+ * defined before Linux's yacc tries to redefine it.
  */
 
 struct keyword {
- char *word;
- int type;
+ char *word;
+ int type;
 } keywords[] = {
 # include "jamgramtab.h"
- { 0, 0 }
+ { 0, 0 }
 } ;
 
 struct include {
- struct include *next; /* next serial include file */
- char *string; /* pointer into current line */
- char **strings; /* for yyfparse() -- text to parse */
- FILE *file; /* for yyfparse() -- file being read */
- char *fname; /* for yyfparse() -- file name */
- int line; /* line counter for error messages */
- char buf[ 512 ]; /* for yyfparse() -- line buffer */
+ struct include *next; /* next serial include file */
+ char *string; /* pointer into current line */
+ char **strings; /* for yyfparse() -- text to parse */
+ FILE *file; /* for yyfparse() -- file being read */
+ char *fname; /* for yyfparse() -- file name */
+ int line; /* line counter for error messages */
+ char buf[ 512 ]; /* for yyfparse() -- line buffer */
 } ;
 
 static struct include *incp = 0; /* current file; head of chain */
@@ -49,54 +49,54 @@
 static int anyerrors = 0;
 static char *symdump( YYSTYPE *s );
 
-# define BIGGEST_TOKEN 10240 /* no single token can be larger */
+# define BIGGEST_TOKEN 10240 /* no single token can be larger */
 
-/*
+/*
  * Set parser mode: normal, string, or keyword
  */
 
 void
 yymode( int n )
 {
- scanmode = n;
+ scanmode = n;
 }
 
 void
 yyerror( char *s )
 {
- if( incp )
- printf( "%s:%d: ", incp->fname, incp->line );
+ if( incp )
+ printf( "%s:%d: ", incp->fname, incp->line );
 
- printf( "%s at %s\n", s, symdump( &yylval ) );
+ printf( "%s at %s\n", s, symdump( &yylval ) );
 
- ++anyerrors;
+ ++anyerrors;
 }
 
 int
 yyanyerrors()
 {
- return anyerrors != 0;
+ return anyerrors != 0;
 }
 
 void
 yyfparse( char *s )
 {
- struct include *i = (struct include *)BJAM_MALLOC( sizeof( *i ) );
+ struct include *i = (struct include *)BJAM_MALLOC( sizeof( *i ) );
 
- /* Push this onto the incp chain. */
+ /* Push this onto the incp chain. */
 
- i->string = "";
- i->strings = 0;
- i->file = 0;
- i->fname = copystr( s );
- i->line = 0;
- i->next = incp;
- incp = i;
+ i->string = "";
+ i->strings = 0;
+ i->file = 0;
+ i->fname = copystr( s );
+ i->line = 0;
+ i->next = incp;
+ incp = i;
 
- /* If the filename is "+", it means use the internal jambase. */
+ /* If the filename is "+", it means use the internal jambase. */
 
- if( !strcmp( s, "+" ) )
- i->strings = jambase;
+ if( !strcmp( s, "+" ) )
+ i->strings = jambase;
 }
 
 /*
@@ -109,68 +109,68 @@
 int
 yyline()
 {
- struct include *i = incp;
+ struct include *i = incp;
 
- if( !incp )
- return EOF;
+ if( !incp )
+ return EOF;
 
- /* Once we start reading from the input stream, we reset the */
- /* include insertion point so that the next include file becomes */
- /* the head of the list. */
+ /* Once we start reading from the input stream, we reset the */
+ /* include insertion point so that the next include file becomes */
+ /* the head of the list. */
 
- /* If there is more data in this line, return it. */
+ /* If there is more data in this line, return it. */
 
- if( *i->string )
- return *i->string++;
+ if( *i->string )
+ return *i->string++;
 
- /* If we're reading from an internal string list, go to the */
- /* next string. */
+ /* If we're reading from an internal string list, go to the */
+ /* next string. */
 
- if( i->strings )
- {
- if( !*i->strings )
- goto next;
+ if( i->strings )
+ {
+ if( !*i->strings )
+ goto next;
 
- i->line++;
- i->string = *(i->strings++);
- return *i->string++;
- }
+ i->line++;
+ i->string = *(i->strings++);
+ return *i->string++;
+ }
 
- /* If necessary, open the file */
+ /* If necessary, open the file */
 
- if( !i->file )
- {
- FILE *f = stdin;
+ if( !i->file )
+ {
+ FILE *f = stdin;
 
- if( strcmp( i->fname, "-" ) && !( f = fopen( i->fname, "r" ) ) )
- perror( i->fname );
+ if( strcmp( i->fname, "-" ) && !( f = fopen( i->fname, "r" ) ) )
+ perror( i->fname );
 
- i->file = f;
- }
+ i->file = f;
+ }
 
- /* If there's another line in this file, start it. */
+ /* If there's another line in this file, start it. */
 
- if( i->file && fgets( i->buf, sizeof( i->buf ), i->file ) )
- {
- i->line++;
- i->string = i->buf;
- return *i->string++;
- }
+ if( i->file && fgets( i->buf, sizeof( i->buf ), i->file ) )
+ {
+ i->line++;
+ i->string = i->buf;
+ return *i->string++;
+ }
 
     next:
- /* This include is done. */
- /* Free it up and return EOF so yyparse() returns to parse_file(). */
+ /* This include is done. */
+ /* Free it up and return EOF so yyparse() returns to parse_file(). */
 
- incp = i->next;
+ incp = i->next;
 
- /* Close file, free name */
+ /* Close file, free name */
 
- if( i->file && i->file != stdin )
- fclose( i->file );
- freestr( i->fname );
- BJAM_FREE( (char *)i );
+ if( i->file && i->file != stdin )
+ fclose( i->file );
+ freestr( i->fname );
+ BJAM_FREE( (char *)i );
 
- return EOF;
+ return EOF;
 }
 
 /*
@@ -178,8 +178,8 @@
  *
  * Macros to move things along:
  *
- * yychar() - return and advance character; invalid after EOF
- * yyprev() - back up one character; invalid before yychar()
+ * yychar() - return and advance character; invalid after EOF
+ * yyprev() - back up one character; invalid before yychar()
  *
  * yychar() returns a continuous stream of characters, until it hits
  * the EOF of the current include file.
@@ -191,80 +191,80 @@
 int
 yylex()
 {
- int c;
- char buf[BIGGEST_TOKEN];
- char *b = buf;
+ int c;
+ char buf[BIGGEST_TOKEN];
+ char *b = buf;
 
- if( !incp )
- goto eof;
+ if( !incp )
+ goto eof;
 
- /* Get first character (whitespace or of token) */
+ /* Get first character (whitespace or of token) */
 
- c = yychar();
+ c = yychar();
 
- if( scanmode == SCAN_STRING )
- {
- /* If scanning for a string (action's {}'s), look for the */
- /* closing brace. We handle matching braces, if they match! */
+ if( scanmode == SCAN_STRING )
+ {
+ /* If scanning for a string (action's {}'s), look for the */
+ /* closing brace. We handle matching braces, if they match! */
 
- int nest = 1;
+ int nest = 1;
 
- while( c != EOF && b < buf + sizeof( buf ) )
- {
- if( c == '{' )
- nest++;
+ while( c != EOF && b < buf + sizeof( buf ) )
+ {
+ if( c == '{' )
+ nest++;
 
- if( c == '}' && !--nest )
- break;
+ if( c == '}' && !--nest )
+ break;
 
- *b++ = c;
+ *b++ = c;
 
- c = yychar();
+ c = yychar();
 
                     /* turn trailing "\r\n" sequences into plain "\n"
                      * for Cygwin
                      */
                     if (c == '\n' && b[-1] == '\r')
                         --b;
- }
+ }
 
- /* We ate the ending brace -- regurgitate it. */
+ /* We ate the ending brace -- regurgitate it. */
 
- if( c != EOF )
- yyprev();
+ if( c != EOF )
+ yyprev();
 
- /* Check obvious errors. */
+ /* Check obvious errors. */
 
- if( b == buf + sizeof( buf ) )
- {
- yyerror( "action block too big" );
- goto eof;
- }
-
- if( nest )
- {
- yyerror( "unmatched {} in action block" );
- goto eof;
- }
-
- *b = 0;
- yylval.type = STRING;
- yylval.string = newstr( buf );
+ if( b == buf + sizeof( buf ) )
+ {
+ yyerror( "action block too big" );
+ goto eof;
+ }
+
+ if( nest )
+ {
+ yyerror( "unmatched {} in action block" );
+ goto eof;
+ }
+
+ *b = 0;
+ yylval.type = STRING;
+ yylval.string = newstr( buf );
         yylval.file = incp->fname;
         yylval.line = incp->line;
-
- }
- else
- {
- char *b = buf;
- struct keyword *k;
- int inquote = 0;
- int notkeyword;
-
- /* Eat white space */
 
- for( ;; )
- {
+ }
+ else
+ {
+ char *b = buf;
+ struct keyword *k;
+ int inquote = 0;
+ int notkeyword;
+
+ /* Eat white space */
+
+ for( ;; )
+ {
             /* Skip past white space */
 
             while( c != EOF && isspace( c ) )
@@ -276,134 +276,134 @@
                 break;
             while( ( c = yychar() ) != EOF && c != '\n' )
                 ;
- }
+ }
 
- /* c now points to the first character of a token. */
+ /* c now points to the first character of a token. */
 
- if( c == EOF )
- goto eof;
+ if( c == EOF )
+ goto eof;
 
         yylval.file = incp->fname;
         yylval.line = incp->line;
-
- /* While scanning the word, disqualify it for (expensive) */
- /* keyword lookup when we can: $anything, "anything", \anything */
-
- notkeyword = c == '$';
-
- /* look for white space to delimit word */
- /* "'s get stripped but preserve white space */
- /* \ protects next character */
-
- while(
- c != EOF &&
- b < buf + sizeof( buf ) &&
- ( inquote || !isspace( c ) ) )
- {
- if( c == '"' )
- {
- /* begin or end " */
- inquote = !inquote;
- notkeyword = 1;
- }
- else if( c != '\\' )
- {
- /* normal char */
- *b++ = c;
- }
- else if( ( c = yychar()) != EOF )
- {
- /* \c */
- *b++ = c;
- notkeyword = 1;
- }
- else
- {
- /* \EOF */
- break;
- }
-
- c = yychar();
- }
-
- /* Check obvious errors. */
-
- if( b == buf + sizeof( buf ) )
- {
- yyerror( "string too big" );
- goto eof;
- }
-
- if( inquote )
- {
- yyerror( "unmatched \" in string" );
- goto eof;
- }
-
- /* We looked ahead a character - back up. */
-
- if( c != EOF )
- yyprev();
-
- /* scan token table */
- /* don't scan if it's obviously not a keyword or if its */
- /* an alphabetic when were looking for punctuation */
-
- *b = 0;
- yylval.type = ARG;
-
- if( !notkeyword && !( isalpha( *buf ) && scanmode == SCAN_PUNCT ) )
- {
- for( k = keywords; k->word; k++ )
- if( *buf == *k->word && !strcmp( k->word, buf ) )
- {
- yylval.type = k->type;
- yylval.string = k->word; /* used by symdump */
- break;
- }
- }
-
- if( yylval.type == ARG )
- yylval.string = newstr( buf );
- }
 
- if( DEBUG_SCAN )
- printf( "scan %s\n", symdump( &yylval ) );
+ /* While scanning the word, disqualify it for (expensive) */
+ /* keyword lookup when we can: $anything, "anything", \anything */
+
+ notkeyword = c == '$';
+
+ /* look for white space to delimit word */
+ /* "'s get stripped but preserve white space */
+ /* \ protects next character */
+
+ while(
+ c != EOF &&
+ b < buf + sizeof( buf ) &&
+ ( inquote || !isspace( c ) ) )
+ {
+ if( c == '"' )
+ {
+ /* begin or end " */
+ inquote = !inquote;
+ notkeyword = 1;
+ }
+ else if( c != '\\' )
+ {
+ /* normal char */
+ *b++ = c;
+ }
+ else if( ( c = yychar()) != EOF )
+ {
+ /* \c */
+ *b++ = c;
+ notkeyword = 1;
+ }
+ else
+ {
+ /* \EOF */
+ break;
+ }
+
+ c = yychar();
+ }
+
+ /* Check obvious errors. */
+
+ if( b == buf + sizeof( buf ) )
+ {
+ yyerror( "string too big" );
+ goto eof;
+ }
+
+ if( inquote )
+ {
+ yyerror( "unmatched \" in string" );
+ goto eof;
+ }
+
+ /* We looked ahead a character - back up. */
+
+ if( c != EOF )
+ yyprev();
+
+ /* scan token table */
+ /* don't scan if it's obviously not a keyword or if its */
+ /* an alphabetic when were looking for punctuation */
+
+ *b = 0;
+ yylval.type = ARG;
+
+ if( !notkeyword && !( isalpha( *buf ) && scanmode == SCAN_PUNCT ) )
+ {
+ for( k = keywords; k->word; k++ )
+ if( *buf == *k->word && !strcmp( k->word, buf ) )
+ {
+ yylval.type = k->type;
+ yylval.string = k->word; /* used by symdump */
+ break;
+ }
+ }
+
+ if( yylval.type == ARG )
+ yylval.string = newstr( buf );
+ }
+
+ if( DEBUG_SCAN )
+ printf( "scan %s\n", symdump( &yylval ) );
 
- return yylval.type;
+ return yylval.type;
 
 eof:
     yylval.file = "end-of-input"; /* just in case */
     yylval.line = 0;
-
- yylval.type = EOF;
- return yylval.type;
+
+ yylval.type = EOF;
+ return yylval.type;
 }
 
 static char *
 symdump( YYSTYPE *s )
 {
- static char buf[ BIGGEST_TOKEN + 20 ];
+ static char buf[ BIGGEST_TOKEN + 20 ];
 
- switch( s->type )
- {
- case EOF:
- sprintf( buf, "EOF" );
- break;
- case 0:
- sprintf( buf, "unknown symbol %s", s->string );
- break;
- case ARG:
- sprintf( buf, "argument %s", s->string );
- break;
- case STRING:
- sprintf( buf, "string \"%s\"", s->string );
- break;
- default:
- sprintf( buf, "keyword %s", s->string );
- break;
- }
- return buf;
+ switch( s->type )
+ {
+ case EOF:
+ sprintf( buf, "EOF" );
+ break;
+ case 0:
+ sprintf( buf, "unknown symbol %s", s->string );
+ break;
+ case ARG:
+ sprintf( buf, "argument %s", s->string );
+ break;
+ case STRING:
+ sprintf( buf, "string \"%s\"", s->string );
+ break;
+ default:
+ sprintf( buf, "keyword %s", s->string );
+ break;
+ }
+ return buf;
 }
 
 /* Get information about the current file and line, for those epsilon

Modified: trunk/tools/jam/src/scan.h
==============================================================================
--- trunk/tools/jam/src/scan.h (original)
+++ trunk/tools/jam/src/scan.h 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -9,17 +9,17 @@
  *
  * External functions:
  *
- * yyerror( char *s ) - print a parsing error message
- * yyfparse( char *s ) - scan include file s
- * yylex() - parse the next token, returning its type
- * yymode() - adjust lexicon of scanner
- * yyparse() - declaration for yacc parser
- * yyanyerrors() - indicate if any parsing errors occured
+ * yyerror( char *s ) - print a parsing error message
+ * yyfparse( char *s ) - scan include file s
+ * yylex() - parse the next token, returning its type
+ * yymode() - adjust lexicon of scanner
+ * yyparse() - declaration for yacc parser
+ * yyanyerrors() - indicate if any parsing errors occured
  *
  * The yymode() function is for the parser to adjust the lexicon of the
  * scanner. Aside from normal keyword scanning, there is a mode to
- * handle action strings (look only for the closing }) and a mode to
- * ignore most keywords when looking for a punctuation keyword. This
+ * handle action strings (look only for the closing }) and a mode to
+ * ignore most keywords when looking for a punctuation keyword. This
  * allows non-punctuation keywords to be used in lists without quoting.
  */
 
@@ -50,6 +50,6 @@
 int yyparse();
 void yyinput_stream( char** name, int* line );
 
-# define SCAN_NORMAL 0 /* normal parsing */
-# define SCAN_STRING 1 /* look only for matching } */
-# define SCAN_PUNCT 2 /* only punctuation keywords */
+# define SCAN_NORMAL 0 /* normal parsing */
+# define SCAN_STRING 1 /* look only for matching } */
+# define SCAN_PUNCT 2 /* only punctuation keywords */

Modified: trunk/tools/jam/src/search.c
==============================================================================
--- trunk/tools/jam/src/search.c (original)
+++ trunk/tools/jam/src/search.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -40,7 +40,7 @@
         /* No guarantee that target is an allocated string, so be on the
          * safe side */
         char* target = copystr( target_ );
-
+
         /* Likewise, don't rely on implementation details of newstr.c: allocate
          * a copy of boundname */
         char* boundname = copystr( boundname_ );
@@ -49,14 +49,14 @@
             /* Prepare the argument list */
             FRAME frame[1];
             frame_init( frame );
-
+
             /* First argument is the target name */
             lol_add( frame->args, list_new( L0, target ) );
-
+
             lol_add( frame->args, list_new( L0, boundname ) );
             if( lol_get( frame->args, 1 ) )
                 evaluate_rule( bind_rule->string, frame );
-
+
             /* Clean up */
             frame_free( frame );
         }
@@ -71,14 +71,14 @@
 }
 
 /*
- * search.c - find a target along $(SEARCH) or $(LOCATE)
+ * search.c - find a target along $(SEARCH) or $(LOCATE)
  * First, check if LOCATE is set. If so, use it to determine
  * the location of target and return, regardless of whether anything
  * exists on that location.
  *
  * Second, examine all directories in SEARCH. If there's file already
  * or there's another target with the same name which was placed
- * to this location via LOCATE setting, stop and return the location.
+ * to this location via LOCATE setting, stop and return the location.
  * In case of previous target, return it's name via the third argument.
  *
  * This bevahiour allow to handle dependency on generated files. If
@@ -87,14 +87,14 @@
  */
 
 char *
-search(
+search(
     char *target,
     time_t *time,
     char **another_target,
     int file
 )
 {
- PATHNAME f[1];
+ PATHNAME f[1];
     LIST *varlist;
     string buf[1];
     int found = 0;
@@ -106,13 +106,13 @@
         *another_target = 0;
 
     if (! explicit_bindings )
- explicit_bindings = hashinit( sizeof(BINDING),
+ explicit_bindings = hashinit( sizeof(BINDING),
                                      "explicitly specified locations");
 
     string_new( buf );
     /* Parse the filename */
 
- path_parse( target, f );
+ path_parse( target, f );
 
     f->f_grist.ptr = 0;
     f->f_grist.len = 0;
@@ -122,7 +122,7 @@
         f->f_root.ptr = varlist->string;
         f->f_root.len = strlen( varlist->string );
 
- path_build( f, buf, 1 );
+ path_build( f, buf, 1 );
 
         if( DEBUG_SEARCH )
             printf( "locate %s: %s\n", target, buf->value );
@@ -152,16 +152,16 @@
             timestamp( buf->value, time );
 
             b.binding = buf->value;
-
+
             if( hashcheck( explicit_bindings, (HASHDATA**)&ba ) )
             {
                 if( DEBUG_SEARCH )
- printf(" search %s: found explicitly located target %s\n",
+ printf(" search %s: found explicitly located target %s\n",
                            target, ba->target);
                 if( another_target )
                     *another_target = ba->target;
                 found = 1;
- break;
+ break;
             }
             else if( ff && ff->time )
             {
@@ -207,7 +207,7 @@
            compatibility, though. */
         hashenter(explicit_bindings, (HASHDATA**)&ba);
     }
-
+
     /* prepare a call to BINDRULE if the variable is set */
     call_bind_rule( target, boundname );
 

Modified: trunk/tools/jam/src/search.h
==============================================================================
--- trunk/tools/jam/src/search.h (original)
+++ trunk/tools/jam/src/search.h 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -5,7 +5,7 @@
  */
 
 /*
- * search.h - find a target along $(SEARCH) or $(LOCATE)
+ * search.h - find a target along $(SEARCH) or $(LOCATE)
  */
 
 char *search( char *target, time_t *time, char **another_target, int file );

Modified: trunk/tools/jam/src/strings.c
==============================================================================
--- trunk/tools/jam/src/strings.c (original)
+++ trunk/tools/jam/src/strings.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -24,7 +24,7 @@
         assert( self->opt[0] == 0 );
         return;
     }
-
+
     assert( self->size < self->capacity );
     assert( ( self->capacity <= sizeof(self->opt) ) == ( self->value == self->opt ) );
     assert( strlen( self->value ) == self->size );
@@ -106,10 +106,10 @@
     char* p = self->value + self->size;
     char* end = self->value + self->capacity;
     assert_invariants( self );
-
+
     while ( *rhs && p != end)
         *p++ = *rhs++;
-
+
     if ( p != end )
     {
         *p = 0;
@@ -127,10 +127,10 @@
     char* p = self->value + self->size;
     char* end = self->value + self->capacity;
     assert_invariants( self );
-
+
     while ( p != end && start != finish )
         *p++ = *start++;
-
+
     if ( p != end )
     {
         *p = 0;
@@ -182,7 +182,7 @@
     int limit = sizeof(buffer) > 254 ? 254 : sizeof(buffer);
 
     string_new(s);
-
+
     for (i = 0; i < limit; ++i)
     {
         string_push_back( s, (char)(i + 1) );
@@ -195,7 +195,7 @@
     }
 
     string_free(s);
-
+
 }
 #endif
 

Modified: trunk/tools/jam/src/subst.c
==============================================================================
--- trunk/tools/jam/src/subst.c (original)
+++ trunk/tools/jam/src/subst.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -22,13 +22,13 @@
 {
     regex_entry entry, *e = &entry;
     entry.pattern = pattern;
-
+
     if ( !regex_hash )
         regex_hash = hashinit(sizeof(regex_entry), "regex");
-
+
     if ( hashenter( regex_hash, (HASHDATA **)&e ) )
         e->regex = regcomp( (char*)pattern );
-
+
     return e->regex;
 }
 
@@ -36,13 +36,13 @@
 builtin_subst(
     PARSE *parse,
     FRAME *frame )
-{
+{
   LIST* result = L0;
   LIST* arg1 = lol_get( frame->args, 0 );
 
   if ( arg1 && list_next(arg1) && list_next(list_next(arg1)) )
- {
-
+ {
+
       const char* source = arg1->string;
       const char* pattern = list_next(arg1)->string;
       regexp* repat = regex_compile( pattern );
@@ -50,7 +50,7 @@
       if ( regexec( repat, (char*)source) )
       {
           LIST* subst = list_next(arg1);
-
+
           while ((subst = list_next(subst)) != L0)
           {
 # define BUFLEN 4096
@@ -88,7 +88,7 @@
           }
       }
   }
-
+
   return result;
 }
 

Modified: trunk/tools/jam/src/timestamp.c
==============================================================================
--- trunk/tools/jam/src/timestamp.c (original)
+++ trunk/tools/jam/src/timestamp.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -32,20 +32,20 @@
 typedef struct _binding BINDING;
 
 struct _binding {
- char *name;
- short flags;
+ char *name;
+ short flags;
 
-# define BIND_SCANNED 0x01 /* if directory or arch, has been scanned */
+# define BIND_SCANNED 0x01 /* if directory or arch, has been scanned */
 
- short progress;
+ short progress;
 
-# define BIND_INIT 0 /* never seen */
-# define BIND_NOENTRY 1 /* timestamp requested but file never found */
-# define BIND_SPOTTED 2 /* file found but not timed yet */
-# define BIND_MISSING 3 /* file found but can't get timestamp */
-# define BIND_FOUND 4 /* file found and time stamped */
+# define BIND_INIT 0 /* never seen */
+# define BIND_NOENTRY 1 /* timestamp requested but file never found */
+# define BIND_SPOTTED 2 /* file found but not timed yet */
+# define BIND_MISSING 3 /* file found but can't get timestamp */
+# define BIND_FOUND 4 /* file found and time stamped */
 
- time_t time; /* update time - 0 if not exist */
+ time_t time; /* update time - 0 if not exist */
 } ;
 
 static struct hash *bindhash = 0;
@@ -53,11 +53,11 @@
 
 static char *time_progress[] =
 {
- "INIT",
- "NOENTRY",
- "SPOTTED",
- "MISSING",
- "FOUND"
+ "INIT",
+ "NOENTRY",
+ "SPOTTED",
+ "MISSING",
+ "FOUND"
 } ;
 
 
@@ -66,159 +66,159 @@
  */
 
 void
-timestamp(
- char *target,
- time_t *time )
+timestamp(
+ char *target,
+ time_t *time )
 {
     PROFILE_ENTER(timestamp);
-
- PATHNAME f1, f2;
- BINDING binding, *b = &binding;
- string buf[1];
- string path;
- char *p;
+
+ PATHNAME f1, f2;
+ BINDING binding, *b = &binding;
+ string buf[1];
+ string path;
+ char *p;
 
 # ifdef DOWNSHIFT_PATHS
 
         string_copy( &path, target );
         p = path.value;
 
- do
+ do
     {
         *p = tolower( *p );
 # ifdef NT
         /* On NT, we must use backslashes or the file won't be found. */
         if (*p == '/')
             *p = PATH_DELIM;
-# endif
+# endif
     }
- while( *p++ );
+ while( *p++ );
 
- target = path.value;
+ target = path.value;
 # endif
         string_new( buf );
 
- if( !bindhash )
- bindhash = hashinit( sizeof( BINDING ), "bindings" );
-
- /* Quick path - is it there? */
-
- b->name = target;
- b->time = b->flags = 0;
- b->progress = BIND_INIT;
+ if( !bindhash )
+ bindhash = hashinit( sizeof( BINDING ), "bindings" );
 
- if( hashenter( bindhash, (HASHDATA **)&b ) )
- b->name = newstr( target ); /* never freed */
+ /* Quick path - is it there? */
 
- if( b->progress != BIND_INIT )
- goto afterscanning;
+ b->name = target;
+ b->time = b->flags = 0;
+ b->progress = BIND_INIT;
 
- b->progress = BIND_NOENTRY;
+ if( hashenter( bindhash, (HASHDATA **)&b ) )
+ b->name = newstr( target ); /* never freed */
 
- /* Not found - have to scan for it */
+ if( b->progress != BIND_INIT )
+ goto afterscanning;
 
- path_parse( target, &f1 );
+ b->progress = BIND_NOENTRY;
 
- /* Scan directory if not already done so */
+ /* Not found - have to scan for it */
 
- {
- BINDING binding, *b = &binding;
+ path_parse( target, &f1 );
 
- f2 = f1;
- f2.f_grist.len = 0;
- path_parent( &f2 );
- path_build( &f2, buf, 0 );
+ /* Scan directory if not already done so */
 
- b->name = buf->value;
- b->time = b->flags = 0;
- b->progress = BIND_INIT;
-
- if( hashenter( bindhash, (HASHDATA **)&b ) )
- b->name = newstr( buf->value ); /* never freed */
+ {
+ BINDING binding, *b = &binding;
 
- if( !( b->flags & BIND_SCANNED ) )
- {
- file_dirscan( buf->value, time_enter, bindhash );
- b->flags |= BIND_SCANNED;
- }
- }
+ f2 = f1;
+ f2.f_grist.len = 0;
+ path_parent( &f2 );
+ path_build( &f2, buf, 0 );
+
+ b->name = buf->value;
+ b->time = b->flags = 0;
+ b->progress = BIND_INIT;
+
+ if( hashenter( bindhash, (HASHDATA **)&b ) )
+ b->name = newstr( buf->value ); /* never freed */
+
+ if( !( b->flags & BIND_SCANNED ) )
+ {
+ file_dirscan( buf->value, time_enter, bindhash );
+ b->flags |= BIND_SCANNED;
+ }
+ }
 
- /* Scan archive if not already done so */
+ /* Scan archive if not already done so */
 
- if( f1.f_member.len )
- {
- BINDING binding, *b = &binding;
+ if( f1.f_member.len )
+ {
+ BINDING binding, *b = &binding;
 
- f2 = f1;
- f2.f_grist.len = 0;
- f2.f_member.len = 0;
+ f2 = f1;
+ f2.f_grist.len = 0;
+ f2.f_member.len = 0;
             string_truncate( buf, 0 );
- path_build( &f2, buf, 0 );
+ path_build( &f2, buf, 0 );
 
- b->name = buf->value;
- b->time = b->flags = 0;
- b->progress = BIND_INIT;
-
- if( hashenter( bindhash, (HASHDATA **)&b ) )
- b->name = newstr( buf->value ); /* never freed */
-
- if( !( b->flags & BIND_SCANNED ) )
- {
- file_archscan( buf->value, time_enter, bindhash );
- b->flags |= BIND_SCANNED;
- }
- }
+ b->name = buf->value;
+ b->time = b->flags = 0;
+ b->progress = BIND_INIT;
+
+ if( hashenter( bindhash, (HASHDATA **)&b ) )
+ b->name = newstr( buf->value ); /* never freed */
+
+ if( !( b->flags & BIND_SCANNED ) )
+ {
+ file_archscan( buf->value, time_enter, bindhash );
+ b->flags |= BIND_SCANNED;
+ }
+ }
 
     afterscanning:
 
- if( b->progress == BIND_SPOTTED )
- {
- if( file_time( b->name, &b->time ) < 0 )
- b->progress = BIND_MISSING;
- else
- b->progress = BIND_FOUND;
- }
+ if( b->progress == BIND_SPOTTED )
+ {
+ if( file_time( b->name, &b->time ) < 0 )
+ b->progress = BIND_MISSING;
+ else
+ b->progress = BIND_FOUND;
+ }
 
- *time = b->progress == BIND_FOUND ? b->time : 0;
+ *time = b->progress == BIND_FOUND ? b->time : 0;
         string_free( buf );
 # ifdef DOWNSHIFT_PATHS
         string_free( &path );
 #endif
-
+
     PROFILE_EXIT(timestamp);
 }
 
 static void
-time_enter(
- void *closure,
- char *target,
- int found,
- time_t time )
+time_enter(
+ void *closure,
+ char *target,
+ int found,
+ time_t time )
 {
- BINDING binding, *b = &binding;
- struct hash *bindhash = (struct hash *)closure;
+ BINDING binding, *b = &binding;
+ struct hash *bindhash = (struct hash *)closure;
 
 # ifdef DOWNSHIFT_PATHS
- char path[ MAXJPATH ];
- char *p = path;
+ char path[ MAXJPATH ];
+ char *p = path;
 
- do *p++ = tolower( *target );
- while( *target++ );
+ do *p++ = tolower( *target );
+ while( *target++ );
 
- target = path;
+ target = path;
 # endif
 
- b->name = target;
- b->flags = 0;
+ b->name = target;
+ b->flags = 0;
 
- if( hashenter( bindhash, (HASHDATA **)&b ) )
- b->name = newstr( target ); /* never freed */
+ if( hashenter( bindhash, (HASHDATA **)&b ) )
+ b->name = newstr( target ); /* never freed */
 
- b->time = time;
- b->progress = found ? BIND_FOUND : BIND_SPOTTED;
+ b->time = time;
+ b->progress = found ? BIND_FOUND : BIND_SPOTTED;
 
- if( DEBUG_BINDSCAN )
- printf( "time ( %s ) : %s\n", target, time_progress[b->progress] );
+ if( DEBUG_BINDSCAN )
+ printf( "time ( %s ) : %s\n", target, time_progress[b->progress] );
 }
 
 /*
@@ -228,5 +228,5 @@
 void
 donestamps()
 {
- hashdone( bindhash );
+ hashdone( bindhash );
 }

Modified: trunk/tools/jam/src/variable.c
==============================================================================
--- trunk/tools/jam/src/variable.c (original)
+++ trunk/tools/jam/src/variable.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -30,17 +30,17 @@
  *
  * External routines:
  *
- * var_defines() - load a bunch of variable=value settings
- * var_string() - expand a string with variables in it
- * var_get() - get value of a user defined symbol
- * var_set() - set a variable in jam's user defined symbol table
- * var_swap() - swap a variable's value with the given one
- * var_done() - free variable tables
+ * var_defines() - load a bunch of variable=value settings
+ * var_string() - expand a string with variables in it
+ * var_get() - get value of a user defined symbol
+ * var_set() - set a variable in jam's user defined symbol table
+ * var_swap() - swap a variable's value with the given one
+ * var_done() - free variable tables
  *
  * Internal routines:
  *
- * var_enter() - make new var symbol table entry, returning var ptr
- * var_dump() - dump a variable to stdout
+ * var_enter() - make new var symbol table entry, returning var ptr
+ * var_dump() - dump a variable to stdout
  *
  * 04/13/94 (seiwald) - added shorthand L0 for null list pointer
  * 08/23/94 (seiwald) - Support for '+=' (append to variable)
@@ -58,8 +58,8 @@
 typedef struct _variable VARIABLE ;
 
 struct _variable {
- char *symbol;
- LIST *value;
+ char *symbol;
+ LIST *value;
 } ;
 
 static VARIABLE *var_enter( char *symbol );
@@ -99,34 +99,34 @@
 
     string_new( buf );
 
- for( ; *e; e++ )
- {
- char *val;
+ for( ; *e; e++ )
+ {
+ char *val;
 
 # ifdef OS_MAC
- /* On the mac (MPW), the var=val is actually var\0val */
- /* Think different. */
-
- if( ( val = strchr( *e, '=' ) ) || ( val = *e + strlen( *e ) ) )
+ /* On the mac (MPW), the var=val is actually var\0val */
+ /* Think different. */
+
+ if( ( val = strchr( *e, '=' ) ) || ( val = *e + strlen( *e ) ) )
 # else
- if( val = strchr( *e, '=' ) )
+ if( val = strchr( *e, '=' ) )
 # endif
- {
- LIST *l = L0;
- char *pp, *p;
+ {
+ LIST *l = L0;
+ char *pp, *p;
 # ifdef OPT_NO_EXTERNAL_VARIABLE_SPLIT
                 char split = '\0';
 # else
 # ifdef OS_MAC
- char split = ',';
+ char split = ',';
 # else
- char split = ' ';
+ char split = ' ';
 # endif
 # endif
                 size_t len = strlen(val + 1);
 
                 int quoted = val[1] == '"' && val[len] == '"' && len > 1;
-
+
                 if ( quoted && preprocess )
                 {
                     string_append_range( buf, val + 2, val + len );
@@ -142,7 +142,7 @@
                         if( !strncmp( val - 4, "PATH", 4 ) ||
                             !strncmp( val - 4, "Path", 4 ) ||
                             !strncmp( val - 4, "path", 4 ) )
- split = SPLITPATH;
+ split = SPLITPATH;
                     }
 
                     /* Do the split */
@@ -160,12 +160,12 @@
                     l = list_new( l, newstr( pp ) );
                 }
 
- /* Get name */
+ /* Get name */
                 string_append_range( buf, *e, val );
- var_set( buf->value, l, VAR_SET );
+ var_set( buf->value, l, VAR_SET );
                 string_truncate( buf, 0 );
- }
- }
+ }
+ }
         string_free( buf );
 }
 
@@ -187,8 +187,8 @@
 
     while( *in )
     {
- char *lastword;
- int dollar = 0;
+ char *lastword;
+ int dollar = 0;
 
         /* Copy white space */
 
@@ -220,9 +220,9 @@
                 int depth = 1;
                 char *ine = in + 2;
                 char *split = 0;
-
+
                 /* Scan the content of the response file @() section. */
-
+
                 while( *ine && depth > 0 )
                 {
                     switch( *ine )
@@ -242,7 +242,7 @@
                     }
                     ++ine;
                 }
-
+
                 if (!split)
                 {
                     /* the @() reference doesn't match the @(foo:E=bar) format.
@@ -257,13 +257,13 @@
                     if ( out+1 >= oute ) return -1;
                     *(out++) = ')';
                 }
-
+
                 else if ( depth == 0 )
                 {
                     string file_name_v;
                     int file_name_l = 0;
                     const char * file_name_s = 0;
-
+
                     /* expand the temporary file name var inline */
                     #if 0
                     string_copy(&file_name_v,"$(");
@@ -277,7 +277,7 @@
                     string_free(&file_name_v);
                     if ( file_name_l < 0 ) return -1;
                     file_name_s = out;
-
+
                     /* for stdout/stderr we will create a temp file and generate
                        a command that outputs the content as needed. */
                     if ( strcmp( "STDOUT", out ) == 0 || strcmp( "STDERR", out ) == 0 )
@@ -301,14 +301,14 @@
                            get nuked eventually. */
                         file_remove_atexit( file_name_s );
                     }
-
+
                     /* expand the file value into the file reference */
                     var_string_to_file( split+3, ine-split-4, file_name_s, lol );
-
+
                     /* continue on with the expansion */
                     out += strlen(out);
                 }
-
+
                 /* and continue with the parsing just past the @() reference */
                 in = ine;
             }
@@ -324,7 +324,7 @@
             return -1;
         /* Don't increment, intentionally. */
         *out= '\0';
-
+
         /* If a variable encountered, expand it and and embed the */
         /* space-separated members of the list in the output. */
 
@@ -460,7 +460,7 @@
             if ( out_file ) fwrite(output_0,output_1-output_0,1,out_file);
             if ( out_debug ) fwrite(output_0,output_1-output_0,1,stdout);
         }
-
+
         in = output_1;
     }
 
@@ -509,9 +509,9 @@
     #endif
     {
         VARIABLE var, *v = &var;
-
+
         v->symbol = symbol;
-
+
         if( varhash && hashcheck( varhash, (HASHDATA **)&v ) )
         {
             if( DEBUG_VARGET )
@@ -535,36 +535,36 @@
 
 void
 var_set(
- char *symbol,
- LIST *value,
- int flag )
-{
- VARIABLE *v = var_enter( symbol );
-
- if( DEBUG_VARSET )
- var_dump( symbol, value, "set" );
-
- switch( flag )
- {
- case VAR_SET:
- /* Replace value */
- list_free( v->value );
- v->value = value;
- break;
-
- case VAR_APPEND:
- /* Append value */
- v->value = list_append( v->value, value );
- break;
-
- case VAR_DEFAULT:
- /* Set only if unset */
- if( !v->value )
- v->value = value;
- else
- list_free( value );
- break;
- }
+ char *symbol,
+ LIST *value,
+ int flag )
+{
+ VARIABLE *v = var_enter( symbol );
+
+ if( DEBUG_VARSET )
+ var_dump( symbol, value, "set" );
+
+ switch( flag )
+ {
+ case VAR_SET:
+ /* Replace value */
+ list_free( v->value );
+ v->value = value;
+ break;
+
+ case VAR_APPEND:
+ /* Append value */
+ v->value = list_append( v->value, value );
+ break;
+
+ case VAR_DEFAULT:
+ /* Set only if unset */
+ if( !v->value )
+ v->value = value;
+ else
+ list_free( value );
+ break;
+ }
 }
 
 /*
@@ -573,18 +573,18 @@
 
 LIST *
 var_swap(
- char *symbol,
- LIST *value )
+ char *symbol,
+ LIST *value )
 {
- VARIABLE *v = var_enter( symbol );
- LIST *oldvalue = v->value;
+ VARIABLE *v = var_enter( symbol );
+ LIST *oldvalue = v->value;
 
- if( DEBUG_VARSET )
- var_dump( symbol, value, "set" );
+ if( DEBUG_VARSET )
+ var_dump( symbol, value, "set" );
 
- v->value = value;
+ v->value = value;
 
- return oldvalue;
+ return oldvalue;
 }
 
 
@@ -594,20 +594,20 @@
  */
 
 static VARIABLE *
-var_enter( char *symbol )
+var_enter( char *symbol )
 {
- VARIABLE var, *v = &var;
+ VARIABLE var, *v = &var;
 
- if( !varhash )
- varhash = hashinit( sizeof( VARIABLE ), "variables" );
+ if( !varhash )
+ varhash = hashinit( sizeof( VARIABLE ), "variables" );
 
- v->symbol = symbol;
- v->value = 0;
+ v->symbol = symbol;
+ v->value = 0;
 
- if( hashenter( varhash, (HASHDATA **)&v ) )
- v->symbol = newstr( symbol ); /* never freed */
+ if( hashenter( varhash, (HASHDATA **)&v ) )
+ v->symbol = newstr( symbol ); /* never freed */
 
- return v;
+ return v;
 }
 
 /*
@@ -616,13 +616,13 @@
 
 static void
 var_dump(
- char *symbol,
- LIST *value,
- char *what )
-{
- printf( "%s %s = ", what, symbol );
- list_print( value );
- printf( "\n" );
+ char *symbol,
+ LIST *value,
+ char *what )
+{
+ printf( "%s %s = ", what, symbol );
+ list_print( value );
+ printf( "\n" );
 }
 
 /*
@@ -639,5 +639,5 @@
 var_done()
 {
     hashenumerate( varhash, delete_var_, (void*)0 );
- hashdone( varhash );
+ hashdone( varhash );
 }

Modified: trunk/tools/jam/src/variable.h
==============================================================================
--- trunk/tools/jam/src/variable.h (original)
+++ trunk/tools/jam/src/variable.h 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -10,12 +10,12 @@
 
 struct hash;
 
-void var_defines( char* const *e, int preprocess );
-int var_string( char *in, char *out, int outsize, LOL *lol );
-LIST * var_get( char *symbol );
-void var_set( char *symbol, LIST *value, int flag );
-LIST * var_swap( char *symbol, LIST *value );
-void var_done();
+void var_defines( char* const *e, int preprocess );
+int var_string( char *in, char *out, int outsize, LOL *lol );
+LIST * var_get( char *symbol );
+void var_set( char *symbol, LIST *value, int flag );
+LIST * var_swap( char *symbol, LIST *value );
+void var_done();
 void var_hash_swap( struct hash** );
 
 /** Expands the "in" expression directly into the "out" file.
@@ -29,7 +29,7 @@
  * Defines for var_set().
  */
 
-# define VAR_SET 0 /* override previous value */
-# define VAR_APPEND 1 /* append to previous value */
-# define VAR_DEFAULT 2 /* set only if no previous value */
+# define VAR_SET 0 /* override previous value */
+# define VAR_APPEND 1 /* append to previous value */
+# define VAR_DEFAULT 2 /* set only if no previous value */
 

Modified: trunk/tools/jam/src/w32_getreg.c
==============================================================================
--- trunk/tools/jam/src/w32_getreg.c (original)
+++ trunk/tools/jam/src/w32_getreg.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -65,23 +65,23 @@
     char const* path = lol_get(frame->args, 0)->string;
     LIST* result = L0;
     HKEY key = get_key(&path);
-
+
     if (
         key != 0
- && ERROR_SUCCESS == RegOpenKeyEx(key, path, 0, KEY_QUERY_VALUE, &key)
+ && ERROR_SUCCESS == RegOpenKeyEx(key, path, 0, KEY_QUERY_VALUE, &key)
     )
     {
         DWORD type;
         BYTE data[MAX_REGISTRY_DATA_LENGTH];
         DWORD len = sizeof(data);
         LIST const* const field = lol_get(frame->args, 1);
-
+
         if ( ERROR_SUCCESS ==
              RegQueryValueEx(key, field ? field->string : 0, 0, &type, data, &len) )
         {
             switch (type)
             {
-
+
              case REG_EXPAND_SZ:
                  {
                      long len;
@@ -101,7 +101,7 @@
                      string_free( expanded );
                  }
                  break;
-
+
              case REG_MULTI_SZ:
                  {
                      char* s;
@@ -111,7 +111,7 @@
 
                  }
                  break;
-
+
              case REG_DWORD:
                  {
                      char buf[100];
@@ -133,9 +133,9 @@
 static LIST* get_subkey_names(HKEY key, char const* path)
 {
     LIST* result = 0;
-
- if ( ERROR_SUCCESS ==
- RegOpenKeyEx(key, path, 0, KEY_ENUMERATE_SUB_KEYS, &key)
+
+ if ( ERROR_SUCCESS ==
+ RegOpenKeyEx(key, path, 0, KEY_ENUMERATE_SUB_KEYS, &key)
     )
     {
         char name[MAX_REGISTRY_KEYNAME_LENGTH];
@@ -143,47 +143,47 @@
         DWORD index;
         FILETIME last_write_time;
 
- for ( index = 0;
+ for ( index = 0;
               ERROR_SUCCESS == RegEnumKeyEx(
                   key, index, name, &name_size, 0, 0, 0, &last_write_time);
- ++index,
+ ++index,
               name_size = sizeof(name)
         )
         {
             name[name_size] = 0;
             result = list_append(result, list_new(0, newstr(name)));
         }
-
+
         RegCloseKey(key);
     }
-
+
     return result;
 }
 
 static LIST* get_value_names(HKEY key, char const* path)
 {
     LIST* result = 0;
-
+
     if ( ERROR_SUCCESS == RegOpenKeyEx(key, path, 0, KEY_QUERY_VALUE, &key) )
     {
         char name[MAX_REGISTRY_VALUENAME_LENGTH];
         DWORD name_size = sizeof(name);
         DWORD index;
 
- for ( index = 0;
+ for ( index = 0;
               ERROR_SUCCESS == RegEnumValue(
                   key, index, name, &name_size, 0, 0, 0, 0);
- ++index,
+ ++index,
               name_size = sizeof(name)
         )
         {
             name[name_size] = 0;
             result = list_append(result, list_new(0, newstr(name)));
         }
-
+
         RegCloseKey(key);
     }
-
+
     return result;
 }
 
@@ -194,7 +194,7 @@
 {
     char const* path = lol_get(frame->args, 0)->string;
     char const* result_type = lol_get(frame->args, 1)->string;
-
+
     HKEY key = get_key(&path);
 
     if ( !strcmp(result_type, "subkeys") )

Modified: trunk/tools/jam/src/yyacc.c
==============================================================================
--- trunk/tools/jam/src/yyacc.c (original)
+++ trunk/tools/jam/src/yyacc.c 2008-08-29 08:59:49 EDT (Fri, 29 Aug 2008)
@@ -11,11 +11,11 @@
 /*
 # yyacc - yacc wrapper
 #
-# Allows tokens to be written as `literal` and then automatically
+# Allows tokens to be written as `literal` and then automatically
 # substituted with #defined tokens.
 #
 # Usage:
-# yyacc file.y filetab.h file.yy
+# yyacc file.y filetab.h file.yy
 #
 # inputs:
 # file.yy yacc grammar with ` literals
@@ -59,7 +59,7 @@
         FILE * token_output_f = 0;
         FILE * grammar_output_f = 0;
         FILE * grammar_source_f = 0;
-
+
         grammar_source_f = fopen(argv[3],"r");
         if (grammar_source_f == 0) { result = 1; }
         if (result == 0)
@@ -223,7 +223,7 @@
     char * literal = s;
     int l;
     int c;
-
+
     if (strcmp(s,":") == 0) literal = "_colon";
     else if (strcmp(s,"!") == 0) literal = "_bang";
     else if (strcmp(s,"!=") == 0) literal = "_bang_equals";


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk