DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ T

⟦52778d895⟧ TextFile

    Length: 2308 (0x904)
    Types: TextFile
    Names: »TeXExpand.c«

Derivation

└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
    └─ ⟦this⟧ »EUUGD11/euug-87hel/sec1/textools/TeXExpand.c« 

TextFile

/* expand TeX and LaTeX's \input and \include */

#include        <stdio.h>
TeXExpand(fp,big,maxlen)

FILE *fp;
char *big;
int maxlen;
{
char bigg[50000];
FILE *fpp;
int c,c1;
char w[100];
int i,j;
extern wflag;

while ((c = getc(fp)) != EOF)
	{
	if (c == '%' || c1 == '%')
		{
		while ((c =getc(fp)) != EOF)
			if (c == '\n')
				{
				*big++=c;
				break;
				}
		c1=c;
		continue;
		}
	if (c != '\\')
		*big++=c;
	else			/* detect TeX commands (backslash) */
		{
		/* see if \input or \include is the control sequence */
		i=0;
		c1=c;		/* update last character */
		while ((c = getc(fp)) != EOF)
			{
			if(c == ' ' || c=='\n' || c=='$' || c=='#' || c=='%'
			|| c=='{' || c=='(' || c==')' || c == '\\') break;
			w[i++]=c;
			}
			if(w[1]=='n' && w[2]=='p' && w[3]=='u' && w[4]=='t'
			   || w[1]=='n' && w[2]=='c' && w[3]=='l' && w[4]=='u'
			   && w[5]=='d' && w[6]=='e')
					{
/* if it is \input or \include , get the file name */
					i=0;
					while (( c = getc(fp)) != EOF)
						{
						if (c==' ' || c=='\n' || c=='}')
							break;
						w[i++]=c;
						}
					w[i]='\0';
					fpp=fopen(w, "r"); /* open the new file */
					if( fpp == NULL )
					     {
/* if file is not found, try file.tex  */
					     strcat(w,".tex");
					     fpp=fopen(w, "r");
					     if( fpp == NULL )
						{
						fprintf(stderr,
						"TeXExpand: Cannot open %s\n",w);
						bigg[0]='\0';
						}
					     else
						{
						if (wflag != 1)
						{
						fprintf(stderr,"%s:\n",w);
						TeXMatch(fpp);
						fprintf(stderr,"\n");
						fseek(fpp,0,0);
						}
						TeXExpand(fpp,bigg,maxlen);
						fclose(fpp);
						}
					     }
					else
						{
						if (wflag != 1)
						{
						fprintf(stderr,"%s:\n",w);
						TeXMatch(fpp);
						fprintf(stderr,"\n");
						fseek(fpp,0,0);
						}
						TeXExpand(fpp,bigg,maxlen);
						fclose(fpp);
						}
					strcat(big,bigg);
					big += strlen(bigg);
					w[0]='\0';
					}
				else
/* if the control sequence is not \input or \include write it out */
					{
					*big++='\\';
					for (j=0; j < i; j++)
						*big++=w[j];
/* do not write commented text */
					if (c1 != '\\' && c != '%')
						*big++=c;
					else
						if (c1 == '\\')
							{
							*big++=c;
							c=' ';
							}
					}
		}
	c1=c;				/* update last character */
	}
*big++ = '\0';
}