/*++ Copyright (c) 1994 - 1995 Microsoft Corporation Module Name: inf.c Abstract: Create New Inf from Old Inf Author: Muhunthan Sivapragasam (MuhuntS) 5-Oct-1995 Revision History: --*/ #include #include #include #include #include #include #include #include #define COUNT 1000 #define LEN 25 #define LEN2 55 #define MANF 4 int main (argc, argv) int argc; char *argv[]; { FILE *OldInf, *NewInf; char Line[MAX_PATH]; char *DriverName, *ui, *secn, *type, *p; char Section[COUNT][LEN], Model[COUNT][LEN2]; int i, Lines; if ( argc != 3 ) { printf("Usage: %s \n", argv[0]); return; } OldInf = NewInf = NULL; OldInf = fopen(argv[1], "r"); NewInf = fopen(argv[2], "w"); if ( !OldInf ) { printf("%s: Can't open %s to read\n", argv[0], argv[1]); goto Cleanup; } if ( !NewInf ) { printf("%s: Can't open %s to write\n", argv[0], argv[2]); goto Cleanup; } Lines = 0; while ( fgets(Line, MAX_PATH-1, OldInf) ) { DriverName = strtok(Line+1, "\""); strtok(NULL, "="); ui = strtok(NULL, ","); secn = strtok(NULL, ",") + 1; type = strtok(NULL, "\n"); while ( *ui == ' ' ) ++ui; while ( *secn == ' ' ) ++secn; while ( *type == ' ' ) ++type; strcpy(Section[Lines], secn); strcpy(Model[Lines], DriverName); for ( p = Section[Lines] ; *p ; ++p ) *p = toupper(*p); for ( p = DriverName ; *p ; ++p ) { if ( isalpha(*p) ) *p = toupper(*p); else if ( !isdigit(*p) ) *p = '_'; } if ( strcmp(type, "rasdd") ) strcat(Section[Lines], ".DLL"); else if ( strcmp(type, "pscript") ) strcat(Section[Lines], ".PPD"); else if ( strcmp(type, "plotter") ) strcat(Section[Lines], ".PCD"); else printf("Error: <%s> <%s> <%s> <%s> on Line %d\n", DriverName, ui, secn, type, Lines); if ( !Lines || strncmp(Model[Lines], Model[Lines-1], 3) ) fprintf(NewInf, "\n[%s]\n", DriverName); fprintf(NewInf, "%%%s%%", DriverName); for ( i = strlen(DriverName)+1 ; i < 54 ; ++i ) fputc(' ', NewInf); fprintf(NewInf, "= %s\n", Section[Lines]); ++Lines; } fprintf(NewInf,"\n\n\n\n\n"); qsort(Section, Lines, LEN, strcmp); i = 0; while ( i < Lines ) { fprintf(NewInf, "\[%s\]\n", Section[i]); fprintf(NewInf, "CopyFiles=@%s,", Section[i]); p = Section[i] + strlen(Section[i]) - 3; if ( strcmp(p, "DLL") ) { fprintf(NewInf, "RASDD\nDataSection=RASDD_DATA\n\n"); } else if ( strcmp(p, "PPD") ) { fprintf(NewInf, "PSCRIPT\nDataSection=PSCRIPT_DATA\n\n"); } else if ( strcmp(p, "PCD") ) { fprintf(NewInf, "PLOTTER\nDataSection=PLOTTER_DATA\n\n"); } else printf("%s -- ???\n", p); ++i; } fprintf(NewInf, "\n\n\n\n\n"); fprintf(NewInf, "[PSCRIPT]\n"); fprintf(NewInf, "PSCRIPT.DLL\n"); fprintf(NewInf, "PSCRPTUI.DLL\n"); fprintf(NewInf, "PSCRIPT.HLP\n\n"); fprintf(NewInf, "[RASDD]\n"); fprintf(NewInf, "RASDD.DLL\n"); fprintf(NewInf, "RASDDUI.DLL\n"); fprintf(NewInf, "RASDDUI.HLP\n\n"); fprintf(NewInf, "[PLOTTER]\n"); fprintf(NewInf, "PLOTTER.DLL\n"); fprintf(NewInf, "PLOTUI.DLL\n"); fprintf(NewInf, "PLOTUI.HLP\n\n"); fprintf(NewInf, "\n\n\n\n\n"); fprintf(NewInf, "[PSCRIPT_DATA]\n"); fprintf(NewInf, "DriverFile=PSCRIPT.DLL\n"); fprintf(NewInf, "ConfigFile=PSCRPTUI.DLL\n"); fprintf(NewInf, "HelpFile=PSCRIPT.HLP\n\n"); fprintf(NewInf, "[RASDD_DATA]\n"); fprintf(NewInf, "DriverFile=RASDD.DLL\n"); fprintf(NewInf, "ConfigFile=RASDDUI.DLL\n"); fprintf(NewInf, "HelpFile=RASDD.HLP\n\n"); fprintf(NewInf, "[PLOTTER_DATA]\n"); fprintf(NewInf, "DriverFile=PLOTTER.DLL\n"); fprintf(NewInf, "ConfigFile=PLOTUI.DLL\n"); fprintf(NewInf, "HelpFile=PLOTUI.HLP\n\n"); fprintf(NewInf, "\n\n\n\n\n"); fprintf(NewInf, "[Strings]\n"); i = 0; for ( i = 0 ; i < Lines ; ++i ) { for ( p = Model[i] ; *p ; ++p ) { if ( isalpha(*p) ) fputc(toupper(*p), NewInf); else if ( !isdigit(*p) ) fputc('_', NewInf); else fputc(*p, NewInf); } fprintf(NewInf, "=\"%s\"\n", Model[i]); } Cleanup: if ( OldInf ) fclose(OldInf); if ( NewInf ) fclose(NewInf); }