/*****************************************************************************\
*                                                                             *
* 				    klone2ic                                   *
*                                                                             *
\*****************************************************************************/
/* V 1.0 July 9 1991 Colas Nahaboo Copyright 1991 Groupe Bull
 */

char *USAGE[] = {
    "klone2ic string-name klone-files...",
    "Converts to a C string of name <string-name> klone files given as the",
    "other arguments. Writes result on stdout",
    0
};

#include <stdio.h>

#define in_string 1
#define in_comment 2
#define in_back 3

main(argc, argv)
    int argc;
    char *argv[];

{
    char *stringname, *filename;
    FILE *fd;
    int i, c;
    int curcol = 4;
    int state;

    if (argc < 2) {
	char **help_line = USAGE;

	while (*help_line) {
	    puts(*help_line);
	    help_line++;
	}
	exit(1);
    }
    /* echo header */
    stringname = argv[1];
    printf("/* C-included KLONE code generated by klone2ic from files:\n * ");
    for (i = 2; i < argc; i++) {
	printf("%s ", argv[i]);
    }

    printf("\n */\n\nchar %s[] = {\n  ", stringname);

    for (i = 2; i < argc; i++) {
	filename = argv[i];
	if (!(fd = fopen(filename, "r"))) {
	    fprintf(stderr, "%s: Cannot open file %s -- Aborting\n",
		argv[0], filename);
	    exit(1);
	}
	state = 0;
	while ((c = getc(fd)) != EOF) {
	    /* strip comments */
	    switch (state) {
	    case 0:
		if (c == ';') {
		    state = in_comment;
		    continue;
		} else if (c == '"') {
		    state = in_string;
		}
		break;
	    case in_comment:
		if (c == '\n') {
		    state = 0;
		}
		continue;
		break;
	    case in_string:
		if (c == '\\') {
		    state = in_back;
		} else if (c == '"') {
		    state = 0;
		}
		break;
	    case in_back:
		state = in_string;
	    }

	    if (c < 10)
		curcol += 2;
	    else if (c < 100)
		curcol += 3;
	    else
		curcol += 4;
	    if (curcol > 75) {
		curcol = 2;
		printf("\n  ");
	    }
	    printf("%d,", c);
	}
    }
    printf("\n  0};\n");
    exit(0);
}


syntax highlighted by Code2HTML, v. 0.9.1