home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d6xx
/
d671
/
tr2tex.lha
/
tr2tex
/
tr2tex.zoo
/
tr2tex.c
(
.txt
)
< prev
next >
Wrap
LaTeX Document
|
1990-12-07
|
5KB
|
153 lines
/* COPYRIGHT (C) 1987 Kamal Al-Yahya */
/* tr2tex: troff to tex translator */
/* Author: Kamal Al-Yahya, Stanford University, 9/4/86 */
/* Last modified: 1/1/87 */
/* Keyword: convert translate tex troff */
char *documentation[] = {
" SYNTAX",
" tr2tex [-m] file1 file2 ...",
"or",
" tr2tex [-m] < file1 file2 ...",
" Use the -m flag for manual",
int doclength = { sizeof documentation/sizeof documentation[0] };
#include "setups.h"
#ifdef tops20
#define TEMPFILE "texXXXXXX"
#else
#ifndef AMIGA
#define TEMPFILE "/tmp/texXXXXXX"
#endif
#endif
#ifdef AMIGA
#include <string.h>
#include <time.h>
#define TEMPFILE "t:texXXXXXX"
#endif
FILE *out_file;
#ifdef MSC
#include <time.h>
#else
#ifndef AMIGA
struct sgttyb ttystat;
#endif
#endif
extern char *mktemp();
char scratch_file[MAXWORD];
int man;
int xargc;
char **xargv;
main(argc,argv)
int argc;
char *argv[];
char *inbuf, *outbuf;
FILE *temp,*scr;
register char *cptr;
int piped_in;
int i;
long timeval; /* clock value from time() for ctime() */
char *document = "article"; /* document type */
char *options = "[troffms,11pt]"; /* style options */
/* Allocate large arrays dynamically to conserve stack space */
if (((inbuf = (char *)malloc(MAXLEN*sizeof(char))) == (char *)NULL) ||
((outbuf = (char *)malloc(MAXLEN*sizeof(char))) == (char *)NULL))
fprintf(stderr,"tr2tex: Cannot malloc() internal buffer space\n\
Need two arrays of %d characters each\n",MAXLEN);
exit(-1);
/* If no arguments, and not in a pipeline, self document */
#ifdef MSC /* MS-DOS cannot distinguish piped input from no input */
piped_in = (argc == 1);
#else
#ifndef AMIGA
piped_in = ioctl ((fileno (stdin)), TIOCGETP, &ttystat);
#else
piped_in = 0;
#endif
#endif
if (argc == 1 && !piped_in)
for( i=0; i<doclength; i++)
printf("%s\n",documentation[i]);
exit (0);
/* initialize spacing and indentation parameters */
strcpy(linespacing.def_units,"\\normalbaselineskip");
strcpy(linespacing.old_units,"\\normalbaselineskip");
strcpy(indent.def_units,"em"); strcpy(indent.old_units,"em");
strcpy(tmpind.def_units,"em"); strcpy(tmpind.old_units,"em");
strcpy(space.def_units,"\\baselineskip");
strcpy(space.old_units,"\\baselineskip");
strcpy(vspace.def_units,"pt"); strcpy(vspace.old_units,"pt");
linespacing.value = 1.; linespacing.old_value = 1.;
indent.value = 0.; indent.old_value = 0.;
tmpind.value = 0.; tmpind.old_value = 0.;
space.value = 1.; space.old_value = 1.;
vspace.value = 1.; vspace.old_value = 1.;
linespacing.def_value = 0;
indent.def_value = 0;
tmpind.def_value = 0;
space.def_value = 1;
vspace.def_value = 1;
out_file = stdout; /* default output */
math_mode = 0; /* start with non-math mode */
de_arg = 0; /* not a .de argument */
/* process option flags */
xargc = argc;
xargv = argv;
for (xargc--,xargv++; xargc; xargc--,xargv++)
cptr = *xargv;
if( *cptr=='-' )
while( *(++cptr))
switch( *cptr )
{
case 'm':
man = 1;
strcpy(options,"[troffman]");
break;
default:
fprintf(stderr,
"tr2tex: unknown flag -%c\n",*cptr);
break;
}
/* start of translated document */
timeval = time((time_t*)0);
fprintf(out_file,"%% -*-LaTeX-*-\n\
%% Converted automatically from troff to LaTeX by tr2tex on %s",ctime(&timeval));
fprintf(out_file,"%% tr2tex was written by Kamal Al-Yahya at Stanford University\n\
%% (Kamal%%Hanauma@SU-SCORE.ARPA)\n\n\n");
/* document style and options */
fprintf(out_file,"\\documentstyle%s{%s}\n\\begin{document}\n",options,document);
/* first process pipe input */
if(piped_in)
/* need to buffer; can't seek in pipes */
/* make a temporary and volatile file */
strcpy(scratch_file,TEMPFILE);
mktemp(scratch_file);
if ((scr=fopen(scratch_file,"w")) == (FILE *)NULL)
fprintf(stderr,
"tr2tex: Cannot open scratch file [%s]\n",scratch_file);
exit(-1);
scrbuf(stdin,scr);
fclose(scr);
scr=fopen(scratch_file,"r");
unlink(scratch_file);
tmpbuf(scr,inbuf);
fclose(scr);
troff_tex(inbuf,outbuf,0);
fprintf(out_file,"%%\n%% input file: stdin\n%%\n");
fputs(outbuf,out_file);
/* then process input line for arguments and assume they are input files */
xargc = argc;
xargv = argv;
for (xargc--,xargv++; xargc; xargc--,xargv++)
cptr = *xargv;
if( *cptr=='-' ) continue; /* this is a flag */
if((temp=fopen(cptr,"r")) != (FILE *)NULL)
tmpbuf(temp,inbuf);
fclose(temp);
troff_tex(inbuf,outbuf,0);
fprintf(out_file,"%%\n%% input file: %s\n%%\n",cptr);
fputs(outbuf,out_file);
else
fprintf(stderr,"tr2tex: Cannot open %s\n",cptr);
/* close translated document */
fputs("\\end{document}\n",out_file);
exit(0);