home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_03_01
/
3n01062a
< prev
next >
Wrap
Text File
|
1991-11-24
|
3KB
|
113 lines
/*
* WINEXT.C - DOS program to fix up bextstr output for Windows.
*/
#include <stdio.h>
#include <stdlib.h>
/* Biggest line we can handle */
#define MAX_LINE (1024*1)
typedef unsigned long ULONG;
FILE *OpenFile(char *FileName, char *OpenMode)
{
FILE *File = fopen(FileName, OpenMode);
if(File == NULL)
{
fprintf(stderr, "Can't open file '%s' for '%s'\n",
FileName, OpenMode);
exit(EXIT_FAILURE);
}
else
return File;
}
ULONG GetLineCount(FILE *InputFile, char *InputLine)
{
if(fgets(InputLine, MAX_LINE, InputFile))
return atol(InputLine);
else
{
fprintf(stderr, "Input file is empty\n");
exit(EXIT_FAILURE);
}
}
size_t ConvertLine(FILE *OutputFile, char *InputLine)
{
size_t LineLength = 0;
char C;
for(; (C=*InputLine++); ++LineLength)
if(C == '\\')
switch(C = *InputLine++)
{
/* RC chokes on "\"" */
case '"' :
fputs("\\042", OutputFile);
break;
default :
fputc('\\', OutputFile);
fputc(C, OutputFile);
}
else
fputc(C, OutputFile);
return LineLength + 1; /* add one for end-of-string */
}
ULONG Convert(FILE *InputFile, FILE *OutputFile,
char *InputLine, ULONG TotalLines)
{
ULONG CharCount = 0;
ULONG LineCount = 0;
while((TotalLines>0) && fgets(InputLine, MAX_LINE, InputFile))
{
--TotalLines;
if(strlen(InputLine))
InputLine[strlen(InputLine)-1] = '\0';
/* LineCount+1 because bexstr starts numbering
* at 2 for some reason. */
fprintf(OutputFile, "\t%lu\t\"", ++LineCount+1);
CharCount += ConvertLine(OutputFile, InputLine);
fputs("\"\n", OutputFile);
}
if(TotalLines != 0)
{
fprintf(stderr, "Error: string file delivered %lu less lines than delivered\n", TotalLines);
exit(EXIT_FAILURE);
}
return CharCount;
}
int main(int argc, char **argv)
{
FILE *InputFile, *OutputFile, *CountFile;
char *InputLine = (char *)malloc(MAX_LINE);
ULONG TotalLines, TotalChars;
if(InputLine == NULL)
{
fprintf(stderr, "Can't allocate %ul bytes\n", MAX_LINE);
exit(EXIT_FAILURE);
}
InputFile = OpenFile("ext.str", "r");
OutputFile = OpenFile("ext.rc", "w");
CountFile = OpenFile("extcnt.h", "w");
TotalLines = GetLineCount(InputFile, InputLine);
fprintf(stdout, "Processing %lu lines\n", TotalLines);
TotalChars = Convert(InputFile, OutputFile,
InputLine, TotalLines);
fprintf(CountFile, "#define WINEXT_LINES (%lu)\n", TotalLines);
fprintf(CountFile, "#define WINEXT_CHARS (%lu)\n", TotalChars);
fclose(InputFile);
fclose(OutputFile);
fclose(CountFile);
exit(EXIT_SUCCESS);
}