/* Modifications: 12.05.94 Joe Holman Created to count max # of bytes in platform product(s). 03.14.95 Joe Holman Provide #s for local source in Winnt and Winnt32. xx.xx.95 Joe Holman Add code to look at value in DOSNET.INF and error out if we go over the current value. Overview: tally%platform% values are the # of bytes needed on the machine for all of the system files in their UNCOMPRESSED state. localSrc%platform% values are the # of bytes to copy the compressed and uncompressed files to the local source directories for a Winnt or Winnt32 operation. */ #include #include #include #include #include #include "general.h" FILE* logFile; struct _list { char name[15]; // name of file }; struct _list arrayX86[2000]; struct _list arrayMips[2000]; struct _list arrayAlpha[2000]; struct _list arrayPpc[2000]; // Tally up the # of bytes required for the system from the files included. // long tallyX86, tallyMips, tallyAlpha, tallyPpc; int iX86=0, iMips=0, iAlpha=0, iPpc=0; long localSrcX86=0, localSrcMips=0, localSrcAlpha=0, localSrcPpc=0; BOOL NotListedYetX86 ( const char * strName ) { int i; for ( i = 0; i < iX86; ++i ) { if ( !_stricmp ( arrayX86[i].name, strName ) ) { return (FALSE); // name is already in list. } } sprintf ( arrayX86[iX86].name, "%s", strName ); ++iX86; return (TRUE); // not previously in list. } BOOL NotListedYetMips ( const char * strName ) { int i; for ( i = 0; i < iMips; ++i ) { if ( !_stricmp ( arrayMips[i].name, strName ) ) { return (FALSE); // name is already in list. } } sprintf ( arrayMips[iMips].name, "%s", strName ); ++iMips; return (TRUE); // not previously in list. } BOOL NotListedYetAlpha ( const char * strName ) { int i; for ( i = 0; i < iAlpha; ++i ) { if ( !_stricmp ( arrayAlpha[i].name, strName ) ) { return (FALSE); // name is already in list. } } sprintf ( arrayAlpha[iAlpha].name, "%s", strName ); ++iAlpha; return (TRUE); // not previously in list. } BOOL NotListedYetPpc ( const char * strName ) { int i; for ( i = 0; i < iPpc; ++i ) { if ( !_stricmp ( arrayPpc[i].name, strName ) ) { return (FALSE); // name is already in list. } } sprintf ( arrayPpc[iPpc].name, "%s", strName ); ++iPpc; return (TRUE); // not previously in list. } void Msg ( const char * szFormat, ... ) { va_list vaArgs; va_start ( vaArgs, szFormat ); vprintf ( szFormat, vaArgs ); vfprintf ( logFile, szFormat, vaArgs ); va_end ( vaArgs ); } void Header(argv) char* argv[]; { time_t t; Msg ("\n=========== MBYTES =============\n"); Msg("Log file: %s\n", argv[1]); Msg("Input BOM: %s\n",argv[2]); Msg("Product: %s\n",argv[3]); time(&t); Msg("Time: %s",ctime(&t)); Msg("================================\n\n"); } void Usage() { printf("PURPOSE: Provides # of bytes in product, Workstation or Server.\n"); printf("\n"); printf("PARAMETERS:\n"); printf("\n"); printf("[LogFile] - Path to append a log of actions and errors.\n"); printf("[InBom] - Path of BOM layout file to get sizes from.\n"); printf("[Product] - Product to lay out.\n"); printf(" NTCD = Workstation on CD\n"); printf(" LMCD = Server on CD\n"); } __cdecl main(argc,argv) int argc; char* argv[]; { Entry *e; int records,i; char *buf; if (argc!=4) { Usage(); return(1); } if ((logFile=fopen(argv[1],"a"))==NULL) { printf("ERROR Couldn't open log file %s\n",argv[1]); return(1); } Header(argv); // Get files for product, either Workstation(NTCD) or Server(ASCD). // LoadFile(argv[2],&buf,&e,&records,argv[3]); /** for ( i = 0; i < records; ++i ) { Msg ( "record #%d, %s, size=%d, csize=%d, disk=%d\n", i, e[i].name, e[i].size, e[i].csize, e[i].disk ); } **/ // This adds the number of bytes for x86bins, mipsbins, alphabins, // and ppcbins. // NOTE: Some files are listed more than 1 time due to multiple inf // entries in multiple inf files, so our #s we get a just a tad // bigger than actual #s. for ( i = 0; i < records; ++i ) { // Tally up the bytes. // if ( !_stricmp ( e[i].source, "ppcbins" ) ) { if ( NotListedYetPpc( e[i].name ) ) { tallyPpc += e[i].size; if ( e[i].nocompress[0] ) { localSrcPpc += e[i].size; } else { localSrcPpc += e[i].csize; } } } else if ( !_stricmp ( e[i].source, "x86bins" ) ) { if ( NotListedYetX86( e[i].name ) ) { tallyX86 += e[i].size; if ( e[i].nocompress[0] ) { localSrcX86 += e[i].size; } else { localSrcX86 += e[i].csize; } } } else if ( !_stricmp ( e[i].source, "mipsbins" ) ) { if ( NotListedYetMips( e[i].name ) ) { tallyMips += e[i].size; if ( e[i].nocompress[0] ) { localSrcMips += e[i].size; } else { localSrcMips += e[i].csize; } } } else if ( !_stricmp ( e[i].source, "alphabins" ) ){ if ( NotListedYetAlpha( e[i].name ) ) { tallyAlpha += e[i].size; if ( e[i].nocompress[0] ) { localSrcAlpha += e[i].size; } else { localSrcAlpha += e[i].csize; } } } else if ( !_stricmp ( e[i].source, "ppcdbg" ) || !_stricmp ( e[i].source, "alphadbg" ) || !_stricmp ( e[i].source, "mipsdbg" ) || !_stricmp ( e[i].source, "x86dbg" ) || !_stricmp ( e[i].source, "infs" ) ) { // Do nothing with these. } else { Msg ( "ERROR: source = %s\n", e[i].source ); } } Msg ( "%d X86 files are %ld bytes\n", iX86, tallyX86 ); Msg ( "%d Mips files are %ld bytes\n", iMips, tallyMips ); Msg ( "%d Alpha files are %ld bytes\n", iAlpha,tallyAlpha ); Msg ( "%d Ppc files are %ld bytes\n", iPpc, tallyPpc ); Msg ( "\n\n" ); // For x86 local sources, add 3M in for the boot floppies, in case // someone does a /b option. // localSrcX86 += (3*1024*1024); // Add in a fudge factor to help out people with larger cluster // sizes. We'll work with 16K clusters // localSrcX86 += (16*1024*iX86); localSrcMips += (16*1024*iMips); localSrcAlpha += (16*1024*iAlpha); localSrcPpc += (16*1024*iPpc); // Add in a for 20M pagefile we need to reserve for. // localSrcX86 += (20*1024*1024); localSrcMips += (20*1024*1024); localSrcAlpha += (20*1024*1024); localSrcPpc += (20*1024*1024); Msg ( "%d X86 local source %ld bytes\n", iX86, localSrcX86 ); Msg ( "%d Mips local source %ld bytes\n", iMips, localSrcMips ); Msg ( "%d Alpha local source %ld bytes\n", iAlpha,localSrcAlpha ); Msg ( "%d Ppc local source %ld bytes\n", iPpc, localSrcPpc ); fclose(logFile); free(e); return(0); }