diff options
Diffstat (limited to 'usr/src/cmd/avs/errgen/errgen.c')
-rw-r--r-- | usr/src/cmd/avs/errgen/errgen.c | 379 |
1 files changed, 0 insertions, 379 deletions
diff --git a/usr/src/cmd/avs/errgen/errgen.c b/usr/src/cmd/avs/errgen/errgen.c deleted file mode 100644 index ea7eb756b6..0000000000 --- a/usr/src/cmd/avs/errgen/errgen.c +++ /dev/null @@ -1,379 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License (the "License"). - * You may not use this file except in compliance with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -/* - * Read an errgen status resource file (*.err) from standard input and - * write an SPCS error code C header file (-c), Java resource file (-j), - * libspcs Java exception class file(-e), error text file (-m) or JNI - * exception trinket table to standard output. Lines starting with "#" - * are ignored. - * - * Use "errgen -h" to get usage info including module codes and example - * input and output. - */ - - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <ctype.h> -#include <libgen.h> -#include <limits.h> -#include <sys/param.h> - -/* The public error info header file. */ - -#include <sys/unistat/spcs_s.h> - -/* The private error info header file */ - -#include <sys/unistat/spcs_s_impl.h> - - -/* locals */ - -static enum {C_MODE, J_MODE, M_MODE, E_MODE, T_MODE, X_MODE} mode = E_MODE; -static char key[SPCS_S_MAXKEY]; -static char text[SPCS_S_MAXTEXT]; -static int mod_number; - -static char help_path[PATH_MAX]; - -static int count = 1; - -static char key[SPCS_S_MAXKEY]; -static char text[SPCS_S_MAXTEXT]; -static char modname[SPCS_S_MAXMODNAME]; - -/* - * Display help info - */ - -static void -help() -{ - char line[SPCS_S_MAXLINE]; - FILE *h = fopen(help_path, "r"); - - if (h) { - while (! feof(h)) { - (void) fgets(line, SPCS_S_MAXLINE, h); - if (! feof(h)) - (void) fputs(line, stderr); - } - } else { - perror(strcat("could not open: ", help_path)); - exit(1); - } -} - -/* - * Put out a message with terse instructions and err out - */ - -static void -fatal(char *msg) -{ - (void) fprintf(stderr, "%s\n\n", msg); - (void) fprintf(stderr, "use errgen -h for help\n"); - exit(1); -} - -/* - * Put out the output file preamble - */ - -static void -do_preamble() -{ - switch (mode) { - case M_MODE: - (void) fprintf(stdout, - "static\nchar *SPCS_MSG_%s[] = {\n", modname); - (void) fprintf(stdout, "\t\"\",\n"); - break; - case T_MODE: - (void) fprintf(stdout, - "static\nchar *SPCS_TRNK_%s[] = {\n", modname); - (void) fprintf(stdout, "\t\"\",\n"); - break; - } -} - -/* - * Put out the output file trailer - */ - -static void -do_trailer() -{ - switch (mode) { - case M_MODE: - (void) fprintf(stdout, "};\n"); - (void) fprintf(stdout, - "#define\tSPCS_MSGLEN_%s %d\t/* total codes */\n", - modname, count-1); - break; - case T_MODE: - (void) fprintf(stdout, "};\n"); - (void) fprintf(stdout, - "#define\tSPCS_TRNKLEN_%s %d\t/* total codes */\n", - modname, count-1); - break; - } -} - -/* - * Process a single input line - */ - -static void -do_line() -{ - spcs_s_udata_t c; - int fc = 0; - int len = 0; - char ptext[SPCS_S_MAXTEXT]; - char keystring[SPCS_S_MAXKEY+SPCS_S_MAXPRE]; - char *p = text; - int tlen; - char *pt = ptext; - char havebytestream = 0; - - c.i = 0; - (void) sprintf(keystring, "%s_E%s", modname, key); - while (*p) { - if (*p == '%') { - if (*(p + 1) != 's') { - (void) fprintf(stderr, - "ERRGEN: Error in .err file\n"); - (void) fprintf(stderr, - "%c is an illegal format spec after %%", - *p); - (void) fprintf(stderr, - " at line: %d pos: %d\n", count, - /* LINTED possible ptrdiff_t overflow */ - (int)(p - text)); - fatal(""); - } - len = sprintf(pt, "{%d}", fc); - pt += len; - p++; - fc += 1; - if (fc > SPCS_S_MAXSUPP) { - (void) fprintf(stderr, - "ERRGEN: Error in .err file\n"); - (void) fprintf(stderr, - "SPCS_S_MAXSUPP exceeeded\n"); - fatal("Too many %%s specifiers"); - } - } else - *pt++ = *p; - p++; - } - - /* look for a bytestream indicator */ - - tlen = strlen(text); - - if ((tlen > 2) && (text[tlen - 1] == '@') && (text[tlen - 2] == '@')) { - if (fc) - fatal("ERRGEN: cannot have %%s and @@ ending too"); - - /* bump the item count and set the bytestream flag */ - fc += 1; - havebytestream = 1; - } - - *pt = 0; - - switch (mode) { - case C_MODE: - c.f.bytestream = havebytestream; - c.f.sup_count = fc; - c.f.module = mod_number; - c.f.code = count; - (void) fprintf(stdout, "#define\t%s 0x%x /* %s */\n", - keystring, c.i, text); - break; - case J_MODE: - (void) fprintf(stdout, "`%s` = %s\n", keystring, ptext); - break; - case X_MODE: - (void) fprintf(stdout, - "#define\tT_%s \"`%s`\"\n", keystring, keystring); - break; - case T_MODE: - (void) fprintf(stdout, "\t\"`%s`\",\n", keystring); - break; - case M_MODE: - (void) fprintf(stdout, "\t\"%s\",\n", text); - break; - case E_MODE: - (void) fprintf(stdout, " /**\n * %s\n **/\n", - text); - (void) fprintf(stdout, " public static final String %s", - keystring); - (void) fprintf(stdout, " = `%s`;\n\n", keystring); - break; - } -} - -int -main(int argc, char **argv) -{ - int i; - int searching = 1; - char searchname[SPCS_S_MAXMODNAME]; - char line[SPCS_S_MAXLINE]; - char tline[SPCS_S_MAXLINE]; - char *p, *p2; - - (void) strcpy(help_path, dirname(argv[0])); - (void) strcat(help_path, "/errgen.help"); - if ((argc == 1) || ((argc == 2) && (strcmp(argv[1], "-h") == 0))) { - help(); - exit(0); - } - - if (argc != 3) - fatal("Bad number of arguments"); - - p = argv[2]; - p2 = modname; - - while (*p) - *p2++ = toupper(*p++); - *p2 = 0; - - switch (argv[1][1]) { - case 'c': - mode = C_MODE; - break; - case 'j': - mode = J_MODE; - break; - case 'e': - mode = E_MODE; - break; - case 'm': - mode = M_MODE; - break; - case 't': - mode = T_MODE; - break; - case 'x': - mode = X_MODE; - break; - default: - fatal("Unknown option switch"); - } - - if (strcmp(modname, "DSW") == 0) { - (void) strcpy(searchname, "II"); - } else if (strcmp(modname, "RDC") == 0) { - (void) strcpy(searchname, "SNDR"); - } else if (strcmp(modname, "SDCTL") == 0) { - (void) strcpy(searchname, "NSCTL"); - } else { - (void) strcpy(searchname, modname); - } - - i = 0; - do { - if (strcmp(module_names[i++], searchname) == 0) { - searching = 0; - mod_number = i - 1; - break; - } - } while (module_names[i]); - - if (searching) { - if (i != SPCS_M_MAX) - (void) fprintf(stderr, - "NULL in module_names before SPCS_M_MAX\n"); - fatal("Undefined module name"); - } - - do_preamble(); - - while (!feof(stdin)) { - (void) fgets(line, SPCS_S_MAXLINE, stdin); - if (feof(stdin)) { - if (count == 0) - fatal("errgen file empty"); - - do_trailer(); - exit(0); - } - line[strlen(line)-1] = 0; - if ((strlen(line) != 0) && (line[0] != '#')) { - (void) strcpy(tline, line); - p = strchr(tline, ' '); - if (p == NULL) { - (void) fprintf(stderr, - "blank separator missing at line: %d\n", - count); - fatal(""); - } - *p = 0; - if (strlen(p) > SPCS_S_MAXKEY) { - (void) fprintf(stderr, - "message label too long at line: %d\n", count); - fatal(""); - } - (void) strcpy(key, tline); - if (strlen(key) == 0) { - (void) fprintf(stderr, - "leading blank at line: %d\n", count); - fatal(""); - } - p++; - if (*p != '=') { - (void) fprintf(stderr, - "= separator missing at line: %d\n", count); - fatal(""); - } - p++; - if (*p != ' ') { - (void) fprintf(stderr, - "blank separator missing at line: %d\n", count); - fatal(""); - } - p++; - if (! *p) { - (void) fprintf(stderr, - "msg text missing at line:%d\n", count); - fatal(""); - } - (void) strcpy(text, p); - - do_line(); - count++; - } - } - - return (0); -} |