/* * * Copyright (c) 1990, 2015, Oracle and/or its affiliates. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * */ #include #include #include #include "cmc.h" /* ** Options and Arguments */ char *display_name = NULL; /* -display */ int warn_flag = 0; /* -warn */ char *basename_arg = NULL; /* optional argument */ char *program; void fatal_error (const char *format, ...) { va_list args; va_start(args, format); (void) fprintf(stderr, "%s: error: ", program); (void) vfprintf(stderr, format, args); (void) fprintf(stderr, "\n"); va_end(args); exit(1); } void warning (const char *format, ...) { va_list args; va_start(args, format); (void) fprintf(stderr, "Warning: "); (void) vfprintf(stderr, format, args); (void) fprintf(stderr, "\n"); va_end(args); exit(1); } static void usage (void) { /* Note: optional filename arg explicitly not documented */ fprintf(stderr, "usage: %s [-display name] [-warn]\n", program); fprintf(stderr, " = save | init | discard | dealloc | show | NeWSinit\n"); exit(1); } /* ** Parse arguments */ void process_arguments (char **argv) { register char **a; for (a = argv; *a; a++) { if (**a == '-') { if (!strcmp(*a, "-warn")) { warn_flag = 1; } else if (!strcmp(*a, "-display")) { if (*++a) display_name = *a; else { fprintf(stderr, "error: -display needs an argument\n"); usage(); } } else { fprintf(stderr, "error: unrecognized option '%s'\n", *a); usage(); } } else { if (basename_arg) { fprintf(stderr, "error: unrecognized argument '%s'\n", *a); usage(); } else basename_arg = *a; } } } /*ARGSUSED*/ int main (int argc, char **argv) { void (*op)(void); /* Initialize error handling */ program = argv[0]; /* determine operation */ if (argc <= 1) usage(); ++argv; if (!strcmp("save", *argv)) op = cmc_save; else if (!strcmp("init", *argv)) op = cmc_init; else if (!strcmp("show", *argv)) op = cmc_show; else if (!strcmp("discard", *argv)) op = cmc_discard; else if (!strcmp("dealloc", *argv)) op = cmc_dealloc; else if (!strcmp("NeWSinit", *argv)) op = cmc_NeWSinit; else usage(); /* parse rest of arguments */ process_arguments(++argv); /* invoke operation */ op(); exit(0); }