Example #1
0
int main( int argc, char **argv )
/*******************************/
{
    FILE        *fp;
    char        drive[ _MAX_DRIVE ];
    char        dir[ _MAX_DIR ];
    char        fname[ _MAX_FNAME ];
    char        ext[ _MAX_EXT ];
    char        file[ _MAX_PATH ];
    char        *fn;
    int         i;
    bool        list_file;
    FILE        *fh;
    bool        is_intel;

    OutputInit();
    OutputSetFH( stdout );

    Descriptions = FALSE;
    InterpretComent = TRUE;
    TranslateIndex = FALSE;
    list_file = FALSE;
    is_intel = FALSE;
    quiet = FALSE;
    for( i = 1; i < argc; ++i ) {
        if( argv[i][0] == '-' ) {
            switch( tolower( argv[i][1] ) ) {
            case 'l':
                list_file = TRUE;
                break;
            case 'd':
                Descriptions = TRUE;
                break;
            case 'c':
                InterpretComent = FALSE;
                break;
            case 'r':
                if( strnicmp( argv[i] + 1, "rec=", 4 ) == 0 ) {
                    if( rec_count < 10 ) {
                        if( isdigit( argv[i][5] ) ) {
                            rec_type[ rec_count++ ] = atoi( argv[i] + 5 );
                        } else {
                            rec_type[ rec_count++ ] = RecNameToNumber( argv[i] + 5 );
                        }
                    } else {
                        Output( "Maximum 10 record type allowed." CRLF );
                        OutputFini();
                    }
                } else {
                    DumpRaw = TRUE;
                }
                break;
            case 'i':
                is_intel = FALSE;
                break;
            case 'q':
                quiet = TRUE;
                break;
            case 't':
                TranslateIndex = TRUE;
                break;
            default:
                usage();
            }
        } else {
            break;
        }
    }
    if( i == argc ) {
        usage();
    }

    ShowProductInfo();
    for( ; i < argc; ++i ) {
        _splitpath( argv[i], drive, dir, fname, ext );
        if( ext[0] == 0 ) {
            _makepath( file, drive, dir, fname, OBJSUFFIX );
            fn = file;
        } else {
            fn = argv[i];
        }
        fp = fopen( fn, "rb" );
        if( fp == NULL ) {
            Output( "Cannot open '%s' for reading" CRLF, fn );
            leave( 20 );
        }
        if( list_file ) {
            _makepath( file, drive, dir, fname, LSTSUFFIX );
            fh = fopen( file, "w" );
            if( fh == NULL ) {
                Output( "Cannot open '%s' for writing" CRLF, file );
                leave( 20 );
            }
            OutputSetFH( fh );
        }
        ProcFile( fp, is_intel );
        fclose( fp );
        OutputSetFH( stdout );  /* does fclose() if necessary */
    }
    leave( 0 );
    return( 0 );  // for the less intelligent compilers
}
Example #2
0
int
main(int ac, char *av[])
{
	int c;
	struct timeval tp;
#ifdef DEBUG
	char *optstr = "A:ab:def:G:ghikOpt:U:uwx:z";
#else	/* DEBUG */
	char *optstr = "A:ab:ef:G:ghikOpt:U:uwx:";
#endif	/* DEBUG */

	Program = av[0];

	gettimeofday(&tp, NULL);
	Now = tp.tv_sec;

	while ((c = getopt(ac, av, optstr)) != EOF) {
		switch (c) {
		case 'A':	/* arg (admin set) */
			OptFlags |= OPTA;
			ProcAdminArg(optarg);
			break;

		case 'a':
			OptFlags |= OPTa;
			AddRecord(SAM_QUOTA_ADMIN, -1);
			break;

		case 'b':	/* arg (block count) */
			OptFlags |= OPTb;
			ProcBlockArg(optarg);
			break;

#ifdef DEBUG
		case 'd':
			OptFlags |= OPTd;
			dflag++;
			break;
#endif	/* DEBUG */

		case 'e':
			OptFlags |= OPTe;
			eflag++;
			pflag++;
			break;

		case 'f':	/* arg (file count) */
			OptFlags |= OPTf;
			ProcFileArg(optarg);
			break;

		case 'G':	/* arg (group ID) */
			OptFlags |= OPTG;
			ProcGroupArg(optarg);
			break;

		case 'g':
			OptFlags |= OPTg;
			AddRecord(SAM_QUOTA_GROUP, getegid());
			break;

		case 'h':	/* help.  No return */
			Help(0);
			break;

		case 'i':
			OptFlags |= OPTi;
			iflag = INIT_LIMITS_ZERO;
			break;

		case 'k':
			OptFlags |= OPTk;
			kflag++;
			break;

		case 'O':	/* Don't print total counts */
			OptFlags |= OPTO;
			tflag = 0;
			break;

		case 'p':
			OptFlags |= OPTp;
			pflag++;
			break;

		case 't':	/* arg (grace period) */
			OptFlags |= OPTt;
			ProcTimeArg(optarg);
			break;

		case 'U':	/* arg (user ID) */
			OptFlags |= OPTU;
			ProcUserArg(optarg);
			break;

		case 'u':
			OptFlags |= OPTu;
			AddRecord(SAM_QUOTA_USER, geteuid());
			break;

		case 'w':
			OptFlags |= OPTw;
			wflag = 0;
			break;

		case 'x':	/* arg (expiry) */
			OptFlags |= OPTx;
			ProcExpireArg(optarg);
			break;

#ifdef DEBUG
		case 'z':
			OptFlags |= OPTz;
			iflag = INIT_ALL_ZERO;
			break;
#endif	/* DEBUG */

		default:
			Help(1);
		}
	}

	for (; optind < ac; optind++) {
		ProcFile(av[optind]);
	}

	/*
	 *	Check options for validity.
	 */
#define	TWOBITS(a, b, c) ((a & (b | c)) == (b | c))

	if (OptFlags & OPTMASK_Set) {
		if (NFiles == 0 || (OptFlags & (OPTa | OPTg | OPTu))) {
			fprintf(stderr,
			    "%s:  The options require a file.\n", Program);
			Help(1);
		}

	} else {	/* just reporting */
	}
	if (TWOBITS(OptFlags, OPTa, OPTA) || TWOBITS(OptFlags, OPTg, OPTG) ||
	    TWOBITS(OptFlags, OPTu, OPTU)) {
		fprintf(stderr, "%s:  Incorrect option usage.\n", Program);
		Help(1);
	}

	if (!Err)
		ProcessFiles();
	return (Err ? 10 : 0);
}