|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T t
Length: 5314 (0x14c2) Types: TextFile Names: »texeqn2.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦this⟧ »EUUGD11/euug-87hel/sec1/textools/texeqn2.c«
/* texeqn: TeX equation stripping * to compile: cc texeqn.c -o texeqn */ char *documentation[] = { " SYNTAX", " texeqn [-iw] [parameters] [inputfiles]", "", " flags:", " -i ignores TeX's and LaTeX's \input and \include commands", " -w does not check matching", "", " parameters:", " in=filename filename is the input file", " (Default: in=stdin)", "", " out=filename filename is the output file", " (Default: out=stdout)", "" }; /* Author: Kamal Al-Yahya, Stanford University, 11/1/83 */ /* Modified: 6/30/86 */ int doclength = { sizeof documentation/sizeof documentation[0] }; #include <stdio.h> #include <sys/ioctl.h> #include <sgtty.h> #define MAXLEN 100000 char string[100],filename[100]; struct sgttyb ttystat; extern char *strcpy(), *mktemp(); char scratch_file[100]; FILE *out_file; int wflag; int xargc; char **xargv; main(argc,argv) int argc; char *argv[]; { char big[MAXLEN]; FILE *temp,*scr; register char *cptr; int piped_in; int iflag,i; /* If no arguments, and not in a pipeline, self document */ piped_in = ioctl ((fileno (stdin)), TIOCGETP, &ttystat); if (argc == 1 && !piped_in) { for( i=0; i<doclength; i++) printf("%s\n",documentation[i]); exit (0); } out_file=stdout; /* default standard output */ /* process option flags */ xargc = argc; xargv = argv; for (xargc--,xargv++; xargc; xargc--,xargv++) { cptr = *xargv; if( *cptr=='-' ) { while( *(++cptr)) { switch( *cptr ) { case 'i': iflag=1; break; case 'w': wflag=1; break; default: fprintf(stderr, "unknown flag -%c\n",*cptr); break; } } } } /* process getpar parameters */ xargc = argc; xargv = argv; if(getpar_("out","s",string)) { sscanf(string,"%s",filename); if((temp=fopen(filename,"w")) == NULL) fprintf(stderr,"texeqn: Cannot open output file %s\n",filename); else out_file = temp; } /* first process pipe input */ if(piped_in) { /* need to buffer; can't seek in pipes */ /* make a temporary and volatile file in /tmp */ strcpy(scratch_file,"/tmp/texXXXXXX"); mktemp(scratch_file); scr=fopen(scratch_file,"w"); scrbuf(stdin,scr); fclose(scr); scr=fopen(scratch_file,"r"); unlink(scratch_file); if (wflag != 1) { fprintf(stderr,"Checking matching...\n"); TeXMatch(scr); fseek(scr,0,0); } /* either expand or buffer */ if (iflag != 1) { TeXExpand(scr,big,MAXLEN); fclose(scr); } else { tmpbuf(scr,big); fclose(scr); } if (wflag != 1) fprintf(stderr,"Checking matching done\n"); TeXEqn(big,out_file); fclose(scr); } /* next process in=inputfiles */ if(getpar_("in","s",string)) { sscanf(string,"%s",filename); if((temp=fopen(filename,"r")) != NULL) { if (wflag != 1) { fprintf(stderr,"Checking matching...\n"); fprintf(stderr,"%s:\n",cptr); TeXMatch(temp); fprintf(stderr,"\n"); fseek(temp,0,0); } /* either expand or buffer */ if (iflag != 1) { TeXExpand(temp,big,MAXLEN); fclose(temp); } else { tmpbuf(temp,big); fclose(temp); } if (wflag != 1) fprintf(stderr,"Checking matching done\n\n"); TeXEqn(big,out_file); fclose(temp); } else fprintf(stderr,"texeqn: Cannot open %s\n",filename); } /* then process input line for arguments and assume they are input files */ for (xargc--,xargv++; xargc; xargc--,xargv++) { cptr = *xargv; if( *cptr=='-' ) continue; /* this is a flag */ while (*cptr) { if (*cptr == '=') break; /* this is for getpar */ cptr++; } if (*cptr) continue; cptr = *xargv; if((temp=fopen(cptr,"r")) != NULL) { if (wflag != 1) { fprintf(stderr,"Checking matching...\n"); fprintf(stderr,"%s:\n",cptr); TeXMatch(temp); fprintf(stderr,"\n"); fseek(temp,0,0); } /* either expand or buffer */ if (iflag != 1) { TeXExpand(temp,big,MAXLEN); fclose(temp); } else { tmpbuf(temp,big); fclose(temp); } if (wflag != 1) fprintf(stderr,"Checking matching done\n\n"); TeXEqn(big,out_file); fclose(temp); } else fprintf(stderr,"texeqn: Cannot open %s\n",cptr); } } TeXEqn(buffer,out_file) /* srips TEX equations */ FILE *out_file; char *buffer; { int c,d; int i,j,be; while ((c = *buffer++) != '\0') { if(c == '%') { while ((c = *buffer++) != '\0') if (c == '\n') break; } if(c == '$') { if ((d = *buffer++) == '$') { putc(c,out_file); putc(d,out_file); while ((c = *buffer++) != '\0') { if(c != '$') putc(c,out_file); else { buffer++; fprintf(out_file,"$$ \n"); break; } } } } if(c == '\\') { /* check for LaTeX \begin{equation} */ if ((c = *buffer++) =='b') if ((i=begin_end_buf(buffer,&be)) == 0) { if (be == 1) { fprintf(out_file,"\\begin{equation}"); buffer += 14; while ((c = *buffer++) != '\0') { if (c != '\\') putc(c,out_file); else putc('\\',out_file); if((i=begin_end_buf(buffer,&be)) > 0) { for (j=0; j < i; j++) { c = *buffer++; putc(c,out_file); } } else if (be == 2) { fprintf(out_file,"end{equation}\n"); break; } } } } } } }