#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <mba/msgno.h>
#include <mba/csv.h>
/* generate text.h prototypes from text.csv
* (only used once)
*/
#define DO_STRING 1
#define DO_WCHAR 2
#define DO_PROTOS 4
int
run(FILE *input, int flags)
{
char buf[4096];
char *row[9];
/* 0 char ret
* 1 char name
* 2 char args
* 3 wchar_t ret
* 4 wchar_t name
* 5 wchar_t args
* 6 tchar ret
* 7 tchar name
* 8 tchar args
*/
while (csv_row_fread(input, buf, 1024, row, 10, 1)) {
if (row[7] == NULL || *row[7] == '\0') {
continue;
}
if ((flags & DO_PROTOS)) {
char *str = row[6];
char *fmt = str[strlen(str) - 1] == '*' ? "%s%s%s\n" : "%s %s%s\n";
if ((flags & DO_STRING)) {
printf(fmt, row[0], row[1], row[2]);
} else if ((flags & DO_WCHAR)) {
printf(fmt, row[3], row[4], row[5]);
} else {
printf(fmt, row[6], row[7], row[8]);
}
} else {
int which = (flags & DO_WCHAR) ? 4 : 1;
printf("#define %s %s\n", row[7], row[which]);
}
}
return 0;
}
int
main(int argc, char *argv[])
{
FILE *input;
int flags = 0;
int argi;
char *arg, *filename = NULL;
errno = 0;
argi = 1;
while (argi < argc) {
arg = argv[argi];
if (strcmp(arg, "-s") == 0) {
flags |= DO_STRING;
} else if (strcmp(arg, "-w") == 0) {
flags |= DO_WCHAR;
} else if (strcmp(arg, "-p") == 0) {
flags |= DO_PROTOS;
} else {
filename = arg;
}
argi++;
}
if (filename == NULL) {
goto err;
}
if ((input = fopen(filename, "r")) == NULL || run(input, flags) == -1) {
MNF(errno, ": %s", argv[1]);
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
err:
fprintf(stderr, "usage: %s [-w] <csvfile>\n", argv[0]);
return EXIT_FAILURE;
}
syntax highlighted by Code2HTML, v. 0.9.1