int RunIt( char *cmd, bool ignore_errors, bool *res_nolog ) { int res; #define BUILTIN( b ) \ (strnicmp( cmd, b, sizeof( b ) - 1 ) == 0 && cmd[sizeof(b)-1] == ' ') *res_nolog = false; if( BUILTIN( "CD" ) ) { res = SysChdir( SkipBlanks( cmd + sizeof( "CD" ) ) ); if( res == 0 ) { getcwd( IncludeStk->cwd, sizeof( IncludeStk->cwd ) ); } } else if( BUILTIN( "CDSAY" ) ) { res = SysChdir( SkipBlanks( cmd + sizeof( "CDSAY" ) ) ); if( res == 0 ) { getcwd( IncludeStk->cwd, sizeof( IncludeStk->cwd ) ); LogDir( IncludeStk->cwd ); } } else if( BUILTIN( "SET" ) ) { res = ProcSet( SkipBlanks( cmd + sizeof( "SET" ) ) ); } else if( BUILTIN( "ECHO" ) ) { Log( Quiet, "%s\n", SkipBlanks( cmd + sizeof( "ECHO" ) ) ); res = 0; } else if( BUILTIN( "ERROR" ) ) { Log( Quiet, "%s\n", SkipBlanks( cmd + sizeof( "ERROR" ) ) ); res = 1; } else if( BUILTIN( "COPY" ) ) { res = ProcCopy( SkipBlanks( cmd + sizeof( "COPY" ) ), false, false, ignore_errors ); *res_nolog = true; } else if( BUILTIN( "ACOPY" ) ) { res = ProcCopy( SkipBlanks( cmd + sizeof( "ACOPY" ) ), true, false, ignore_errors ); *res_nolog = true; } else if( BUILTIN( "CCOPY" ) ) { res = ProcCopy( SkipBlanks( cmd + sizeof( "CCOPY" ) ), false, true, ignore_errors ); *res_nolog = true; } else if( BUILTIN( "ACCOPY" ) ) { res = ProcCopy( SkipBlanks( cmd + sizeof( "ACCOPY" ) ), true, true, ignore_errors ); *res_nolog = true; } else if( BUILTIN( "MKDIR" ) ) { res = ProcMkdir( SkipBlanks( cmd + sizeof( "MKDIR" ) ) ); } else if( BUILTIN( "PMAKE" ) ) { res = ProcPMake( SkipBlanks( cmd + sizeof( "PMAKE" ) ), ignore_errors ); *res_nolog = ignore_errors; } else if( BUILTIN( "RM" ) ) { res = ProcRm( SkipBlanks( cmd + sizeof( "RM" ) ) ); } else if( cmd[0] == '!' ) { res = SysRunCommand( SkipBlanks( cmd + 1 ) ); } else { res = SysRunCommand( cmd ); } return( res ); }
unsigned RunIt( char *cmd, bool ignore_errors ) { unsigned res; #define BUILTIN( b ) \ (strnicmp( cmd, b, sizeof( b ) - 1 ) == 0 && cmd[sizeof(b)-1] == ' ') res = 0; if( BUILTIN( "CD" ) ) { res = SysChdir( SkipBlanks( cmd + sizeof( "CD" ) ) ); if( res == 0 ) { getcwd( IncludeStk->cwd, sizeof( IncludeStk->cwd ) ); } } else if( BUILTIN( "CDSAY" ) ) { res = SysChdir( SkipBlanks( cmd + sizeof( "CDSAY" ) ) ); if( res == 0 ) { getcwd( IncludeStk->cwd, sizeof( IncludeStk->cwd ) ); LogDir( IncludeStk->cwd ); } } else if( BUILTIN( "SET" ) ) { res = ProcSet( SkipBlanks( cmd + sizeof( "SET" ) ) ); } else if( BUILTIN( "ECHO" ) ) { Log( Quiet, "%s\n", SkipBlanks( cmd + sizeof( "ECHO" ) ) ); } else if( BUILTIN( "ERROR" ) ) { Log( Quiet, "%s\n", SkipBlanks( cmd + sizeof( "ERROR" ) ) ); res = 1; } else if( BUILTIN( "COPY" ) ) { res = ProcCopy( SkipBlanks( cmd + sizeof( "COPY" ) ), FALSE, FALSE ); } else if( BUILTIN( "ACOPY" ) ) { res = ProcCopy( SkipBlanks( cmd + sizeof( "ACOPY" ) ), TRUE, FALSE ); } else if( BUILTIN( "CCOPY" ) ) { res = ProcCopy( SkipBlanks( cmd + sizeof( "CCOPY" ) ), FALSE, TRUE ); } else if( BUILTIN( "ACCOPY" ) ) { res = ProcCopy( SkipBlanks( cmd + sizeof( "ACCOPY" ) ), TRUE, TRUE ); } else if( BUILTIN( "MKDIR" ) ) { res = ProcMkdir( SkipBlanks( cmd + sizeof( "MKDIR" ) ) ); } else if( BUILTIN( "PMAKE" ) ) { res = ProcPMake( SkipBlanks( cmd + sizeof( "PMAKE" ) ), ignore_errors ); } else { res = SysRunCommand( cmd ); } return( res ); }