29949e866e40b95795203f3ee46f44a197c946e4stevel/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
29949e866e40b95795203f3ee46f44a197c946e4stevel/*
29949e866e40b95795203f3ee46f44a197c946e4stevel * make_commands.c
29949e866e40b95795203f3ee46f44a197c946e4stevel *
29949e866e40b95795203f3ee46f44a197c946e4stevel * util/ss/mk_cmds.c
29949e866e40b95795203f3ee46f44a197c946e4stevel *
29949e866e40b95795203f3ee46f44a197c946e4stevel * Copyright 1987, 1988 by MIT Student Information Processing Board
29949e866e40b95795203f3ee46f44a197c946e4stevel *
29949e866e40b95795203f3ee46f44a197c946e4stevel * For copyright information, see copyright.h.
29949e866e40b95795203f3ee46f44a197c946e4stevel */
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel/*
29949e866e40b95795203f3ee46f44a197c946e4stevel * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
29949e866e40b95795203f3ee46f44a197c946e4stevel */
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel#include "copyright.h"
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <stdio.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/param.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/types.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/file.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <string.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include "ss_internal.h"
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevelstatic const char copyright[] =
29949e866e40b95795203f3ee46f44a197c946e4stevel "Copyright 1987 by MIT Student Information Processing Board";
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevelextern pointer malloc (unsigned);
29949e866e40b95795203f3ee46f44a197c946e4stevelextern char *last_token;
29949e866e40b95795203f3ee46f44a197c946e4stevelextern FILE *output_file;
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevelextern FILE *yyin, *yyout;
29949e866e40b95795203f3ee46f44a197c946e4stevel#ifndef NO_YYLINENO
29949e866e40b95795203f3ee46f44a197c946e4stevelextern int yylineno;
29949e866e40b95795203f3ee46f44a197c946e4stevel#endif
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevelint main(argc, argv)
29949e866e40b95795203f3ee46f44a197c946e4stevel int argc;
29949e866e40b95795203f3ee46f44a197c946e4stevel char **argv;
29949e866e40b95795203f3ee46f44a197c946e4stevel{
29949e866e40b95795203f3ee46f44a197c946e4stevel char c_file[MAXPATHLEN];
29949e866e40b95795203f3ee46f44a197c946e4stevel int result;
29949e866e40b95795203f3ee46f44a197c946e4stevel char *path, *p, *q;
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel if (argc != 2) {
29949e866e40b95795203f3ee46f44a197c946e4stevel fputs("Usage: ", stderr);
29949e866e40b95795203f3ee46f44a197c946e4stevel fputs(argv[0], stderr);
29949e866e40b95795203f3ee46f44a197c946e4stevel fputs("cmdtbl.ct\n", stderr);
29949e866e40b95795203f3ee46f44a197c946e4stevel exit(1);
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel path = malloc(strlen(argv[1])+4); /* extra space to add ".ct" */
29949e866e40b95795203f3ee46f44a197c946e4stevel strcpy(path, argv[1]);
29949e866e40b95795203f3ee46f44a197c946e4stevel p = strrchr(path, '/');
29949e866e40b95795203f3ee46f44a197c946e4stevel if (p == (char *)NULL)
29949e866e40b95795203f3ee46f44a197c946e4stevel p = path;
29949e866e40b95795203f3ee46f44a197c946e4stevel else
29949e866e40b95795203f3ee46f44a197c946e4stevel p++;
29949e866e40b95795203f3ee46f44a197c946e4stevel p = strrchr(p, '.');
29949e866e40b95795203f3ee46f44a197c946e4stevel if (p == (char *)NULL || strcmp(p, ".ct"))
29949e866e40b95795203f3ee46f44a197c946e4stevel strcat(path, ".ct");
29949e866e40b95795203f3ee46f44a197c946e4stevel /* Solaris Kerberos */
29949e866e40b95795203f3ee46f44a197c946e4stevel yyin = fopen(path, "rF");
29949e866e40b95795203f3ee46f44a197c946e4stevel if (!yyin) {
29949e866e40b95795203f3ee46f44a197c946e4stevel perror(path);
29949e866e40b95795203f3ee46f44a197c946e4stevel exit(1);
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel p = strrchr(path, '.');
29949e866e40b95795203f3ee46f44a197c946e4stevel *p = '\0';
29949e866e40b95795203f3ee46f44a197c946e4stevel q = rindex(path, '/');
29949e866e40b95795203f3ee46f44a197c946e4stevel strncpy(c_file, (q) ? q + 1 : path, sizeof(c_file) - 1);
29949e866e40b95795203f3ee46f44a197c946e4stevel c_file[sizeof(c_file) - 1] = '\0';
29949e866e40b95795203f3ee46f44a197c946e4stevel strncat(c_file, ".c", sizeof(c_file) - 1 - strlen(c_file));
29949e866e40b95795203f3ee46f44a197c946e4stevel *p = '.';
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel /* Solaris Kerberos */
29949e866e40b95795203f3ee46f44a197c946e4stevel output_file = fopen(c_file, "w+F");
29949e866e40b95795203f3ee46f44a197c946e4stevel if (!output_file) {
29949e866e40b95795203f3ee46f44a197c946e4stevel perror(c_file);
29949e866e40b95795203f3ee46f44a197c946e4stevel exit(1);
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel fputs("/* ", output_file);
29949e866e40b95795203f3ee46f44a197c946e4stevel fputs(c_file, output_file);
29949e866e40b95795203f3ee46f44a197c946e4stevel fputs(" - automatically generated from ", output_file);
29949e866e40b95795203f3ee46f44a197c946e4stevel fputs(path, output_file);
29949e866e40b95795203f3ee46f44a197c946e4stevel fputs(" */\n", output_file);
29949e866e40b95795203f3ee46f44a197c946e4stevel fputs("#include <ss/ss.h>\n\n", output_file);
29949e866e40b95795203f3ee46f44a197c946e4stevel fputs("#ifndef __STDC__\n#define const\n#endif\n\n", output_file);
29949e866e40b95795203f3ee46f44a197c946e4stevel /* parse it */
29949e866e40b95795203f3ee46f44a197c946e4stevel result = yyparse();
29949e866e40b95795203f3ee46f44a197c946e4stevel /* put file descriptors back where they belong */
29949e866e40b95795203f3ee46f44a197c946e4stevel fclose(yyin); /* bye bye input file */
29949e866e40b95795203f3ee46f44a197c946e4stevel fclose(output_file); /* bye bye output file */
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel return result;
29949e866e40b95795203f3ee46f44a197c946e4stevel}
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevelyyerror(s)
29949e866e40b95795203f3ee46f44a197c946e4stevelchar *s;
29949e866e40b95795203f3ee46f44a197c946e4stevel{
29949e866e40b95795203f3ee46f44a197c946e4stevel fputs(s, stderr);
29949e866e40b95795203f3ee46f44a197c946e4stevel#ifdef NO_YYLINENO
29949e866e40b95795203f3ee46f44a197c946e4stevel fprintf(stderr, "\nLast token was '%s'\n", last_token);
29949e866e40b95795203f3ee46f44a197c946e4stevel#else
29949e866e40b95795203f3ee46f44a197c946e4stevel fprintf(stderr, "\nLine %d; last token was '%s'\n",
29949e866e40b95795203f3ee46f44a197c946e4stevel yylineno, last_token);
29949e866e40b95795203f3ee46f44a197c946e4stevel#endif
29949e866e40b95795203f3ee46f44a197c946e4stevel}
29949e866e40b95795203f3ee46f44a197c946e4stevel