diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/xetal/main.c |
Initial commit
Diffstat (limited to 'support/xetal/main.c')
-rw-r--r-- | support/xetal/main.c | 344 |
1 files changed, 344 insertions, 0 deletions
diff --git a/support/xetal/main.c b/support/xetal/main.c new file mode 100644 index 0000000000..25b7855eee --- /dev/null +++ b/support/xetal/main.c @@ -0,0 +1,344 @@ +/* + main function of xetal, + Copyright (C) 1991 Raphael Cerf (e-mail: cerf@ens.ens.fr) + + This file is part of xetal. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "proto.h" + +/* + * main + */ + +main(argc, argv) +int argc; +char **argv; +{ + extern char *optarg; + extern int optind; + + int i, j, c; + /* option flags */ + int Aflg, aflg, bflg, Cflg, cflg, dflg; + int eflg, Eflg, errflg, Fflg, fflg, gflg, hflg; + int iflg, jflg, Mflg, mflg, Nflg, nflg; + int oflg, pflg, rflg, Sflg, sflg, tflg; + int uflg, wflg, zflg; + char *nN, *el; + char i_name[W_LGTH]; + + +#ifdef MALDEBUG + malloc_debug(2); +#endif + + if ((devnull=fopen("/dev/null", "w"))==(FILE *)NULL) { + fprintf(stderr, "Can't open /dev/null\n"); + exit(2); + } + +/* + * default options + */ + + d_accent=0; + d_bl=1; + d_bls=1; + d_comment=0; + d_command=0; + d_error=1; + d_fname=1; + d_macrodef=0; + d_math=0; + d_mot=1; + d_nl=1; + d_operator=1; + d_punct=1; + d_report=0; + d_slashed=1; + d_special=1; + d_text=1; + d_unknown=0; + d_warning=1; + do_fill=1; + do_fill_acco=0; + do_fill_slash=0; + do_incl=1; + c_fill=' '; + s_accent=(char)0; + n_nl=0;N=0; + +/* + * options handling + */ + + Aflg=aflg=bflg=Cflg=cflg=dflg=eflg=Eflg=errflg=0; + Fflg=fflg=gflg=hflg=iflg=jflg=Mflg=mflg=Nflg=0; + nflg=oflg=pflg=rflg=Sflg=sflg=tflg=uflg=wflg=0; + zflg=0; +while ((c = getopt(argc, argv, "a:AbcCde:Ef:FghijmMn:oNpsSrtuwz")) != -1) + switch (c) { + case 'A': + Aflg=1; + break; + case 'a': + aflg=1; + s_accent = optarg[0]; + break; + case 'b': + bflg=1; + break; + case 'C': + Cflg=1; + break; + case 'c': + cflg=1; + break; + case 'd': + dflg=1; + break; + case 'e': + eflg=1; + el=strdup(optarg); + break; + case 'E': + Eflg=1; + break; + case 'F': + Fflg=1; + break; + case 'f': + fflg=1; + c_fill = optarg[0]; + break; + case 'g': + gflg=1; + break; + case 'h': + hflg=1; + break; + case 'i': + iflg=1; + break; + case 'j': + jflg=1; + break; + case 'M': + Mflg=1; + break; + case 'm': + mflg=1; + break; + case 'N': + Nflg=1; + break; + case 'n': + nflg=1; + nN = optarg; + break; + case 'o': + oflg=1; + break; + case 'p': + pflg=1; + break; + case 'r': + rflg=1; + break; + case 'S': + Sflg=1; + break; + case 's': + sflg=1; + break; + case 't': + tflg=1; + break; + case 'u': + uflg=1; + break; + case 'w': + wflg=1; + break; + case 'z': + zflg=1; + break; + case '?': + errflg++; + } + if (hflg) { + fprintf(stderr, "usage:"); + fprintf(stderr, + "xetal \-\[a:AbcCde:Ef:FghijmMn:oNpsSrtuwz\] \[file1\] \[file2\] ...\n"); + exit (2); + } + + /* test for .tex suffix */ + for (i=optind; i < argc; i++) { + strcpy(i_name, argv[i]);strcat(i_name, ".tex"); + if (access(argv[i], R_OK) && access(i_name, R_OK)) { + fprintf(stderr,"Can't access file: %s\n", argv[i]); + exit(2); + } + } + + if (Aflg) { d_accent=!d_accent; s_accent=(char)NULL; } + if (aflg) d_accent=!d_accent; + if (bflg) d_bls=!d_bls; + if (cflg) d_command=!d_command; + if (Cflg) d_comment=!d_comment; + if (Eflg) d_error=!d_error; + if (Fflg) do_fill=0; + if (gflg) do_fill_acco=1; + if (iflg) do_incl=0; + if (jflg); + if (mflg) d_math=!d_math; + if (Nflg) d_fname=-1; + if (nflg) { N=atoi(nN); n_nl=1; if (N==0) n_nl=0; } + if (oflg) d_macrodef=!d_macrodef; + if (pflg) d_punct=!d_punct; + if (rflg) d_report=!d_report; + if (sflg) d_special=!d_special; + if (tflg) d_text=!d_text; + if (uflg) d_unknown=1; + if (wflg) d_warning=0; + if (zflg) d_anything=!d_anything; + + if (eflg) { + char *p=el; + if ((envrt[n_envrt++]=strtok(p, ","))!=(char *)NULL) { + p=(char *)NULL; + while ((envrt[n_envrt++]=strtok(p, ","))!=(char *)NULL); + n_envrt--; + } + } + if (Sflg) { + d_text=d_command=d_comment=d_accent=0; + d_punct=d_special=d_slashed=d_math=0; + d_operator=d_bl=d_nl=d_mot=d_punct=0; + d_bls=do_fill=n_nl=0; + } + +/* + * initialization of lexical analyzer + */ + init_lex(); + +/* + * initialization of symbol list + */ + + init_symbol(envrt, n_envrt); + +/* + * begining of program + */ + + if (dflg) +#ifdef YYDEBUG + yydebug=1; +#else + { +fprintf(stderr, "You little joker ! The manual said don't try -d ...\n"); + exit(2); + } +#endif + +#ifdef MALDEBUG + if (Mflg) { fprintf(stderr, "mallocmap\n");mallocmap(); } +#else + if (Mflg) { fprintf(stderr, "Sorry, mallocmap not available\n"); } +#endif + + if (optind==argc) { + /* only one file name in argument line */ + fich_t n_fich; + n_fich.name=""; + n_fich.fd=stdin; + n_fich.line=0L; + n_fich.last_string=(char *)NULL; + n_fich.last_char=(char)NULL; + f_push(&n_fich); + + *f_in=stdin; + f_name=""; + lineno=0L; + + if (dflg) fprintf(stderr, "yyparse()==%d\n",yyparse()); + else yyparse(); + + for (j=0; j<n_ionly; j++) { + str_destroy(if_name[j]); + } + n_ionly=-1; + } else { + + /* several file names in argument line */ + for (i=optind; i < argc; i++) { + strcpy(i_name, argv[i]);strcat(i_name, ".tex"); + if ((*f_in=fopen(argv[i], "r"))==(FILE *)NULL) { + if ((*f_in=fopen(i_name, "r"))==(FILE *)NULL) { + if (d_warning) + fprintf(stderr, "\nCan't open file: %s\n", argv[i]); + } + } + if (*f_in!=(FILE *)NULL) { + fich_t n_fich; + + n_fich.name=strdup(argv[i]); + n_fich.fd=*f_in; + n_fich.line=lineno; + n_fich.last_string=(char *)NULL; + n_fich.last_char=(char)NULL; + f_push(&n_fich); + + f_name=n_fich.name; + lineno=0L; + + init_lex(); + if (dflg) fprintf(stderr, "yyparse()==%d\n",yyparse()); + else yyparse(); + + } + for (j=0; j<n_ionly; j++) { + str_destroy(if_name[j]); + } + n_ionly=-1; + } /* for */ + + } /* else */ + + for (i=0; i<n_adsymbol; i++) { + str_destroy(adsymbol[i].name); + } + +#ifdef MALDEBUG + if (Mflg) { fprintf(stderr, "mallocmap\n");mallocmap(); } +#else + if (Mflg) { fprintf(stderr, "Sorry, mallocmap not available\n"); } +#endif + + if (d_report) { + fprintf(stderr, "*** xetal report ***\n"); + fprintf(stderr, "%d lines, %d characters\n", total_lines, charpos); + fprintf(stderr, "%d formulas\n", n_formule); + fprintf(stderr, "%d charaters skipped\n", c_skipped); + } + + fclose(devnull); +} |