Subversion Repositories SvarDOS

Compare Revisions

Ignore whitespace Rev 1202 → Rev 1203

/svarcom/tags/svarcom-2023.1/file2c.c
0,0 → 1,93
/*
* translates a binary file to a C include.
* used by the SvarCOM build process to embedd rcom inside COMMAND.COM
*
* Copyright (C) 2021 Mateusz Viste
*/
 
#include <stdio.h>
 
 
static void help(void) {
puts("usage: file2c [/c] [/lxxx] infile.dat outfile.c varname");
puts("");
puts("/c - define the output array as CONST");
puts("/s - define the output array as STATIC");
puts("/lxxx - enforces the output array to be xxx bytes big");
}
 
 
int main(int argc, char **argv) {
char *fnamein = NULL, *fnameout = NULL, *varname = NULL;
char stortype = 0; /* 'c' = const ; 's' = static */
char *flag_l = "";
FILE *fdin, *fdout;
unsigned long len;
int c;
 
for (c = 1; c < argc; c++) {
if ((argv[c][0] == '/') && (argv[c][1] == 'l')) {
flag_l = argv[c] + 2;
continue;
}
if ((argv[c][0] == '/') && (argv[c][1] == 'c')) {
stortype = 'c';
continue;
}
if ((argv[c][0] == '/') && (argv[c][1] == 's')) {
stortype = 's';
continue;
}
if (argv[c][0] == '/') {
help();
return(1);
}
/* not a switch - so it's either infile, outfile or varname */
if (fnamein == NULL) {
fnamein = argv[c];
} else if (fnameout == NULL) {
fnameout = argv[c];
} else if (varname == NULL) {
varname = argv[c];
} else {
help();
return(1);
}
}
 
if (varname == NULL) {
help();
return(1);
}
 
fdin = fopen(fnamein, "rb");
if (fdin == NULL) {
puts("ERROR: failed to open input file");
return(1);
}
 
fdout = fopen(fnameout, "wb");
if (fdout == NULL) {
fclose(fdin);
puts("ERROR: failed to open output file");
return(1);
}
 
if (stortype == 'c') fprintf(fdout, "const ");
if (stortype == 's') fprintf(fdout, "static ");
fprintf(fdout, "char %s[%s] = {", varname, flag_l);
 
for (len = 0;; len++) {
c = getc(fdin);
if (c == EOF) break;
if (len > 0) fprintf(fdout, ",");
if ((len & 15) == 0) fprintf(fdout, "\r\n");
fprintf(fdout, "%3u", c);
}
fprintf(fdout, "};\r\n");
fprintf(fdout, "#define %s_len %lu\r\n", varname, len);
 
fclose(fdin);
fclose(fdout);
return(0);
}