Add original unix v6
This commit is contained in:
+215
@@ -0,0 +1,215 @@
|
||||
# include "ne.h"
|
||||
# define SIGPIPE 13 /* nroff has stopped reading */
|
||||
|
||||
int ESC 033;
|
||||
int HREV '8';
|
||||
int HFWD '9';
|
||||
int SI 017;
|
||||
int SO 016;
|
||||
int ESCOUT 033;
|
||||
int HFWDOUT '9';
|
||||
int HREVOUT '8';
|
||||
int BKSPOUT '\b';
|
||||
int FWDOUT '~';
|
||||
|
||||
char in[400]; /* input buffer */
|
||||
int exit();
|
||||
|
||||
main(argc,argv) int argc; char *argv[];{
|
||||
int i, type;
|
||||
flush();
|
||||
first = 0;
|
||||
lefteq = righteq = '\0';
|
||||
signal(SIGPIPE, &exit);
|
||||
setfile(argc,argv);
|
||||
while( (type=getline(in)) != '\0' ){
|
||||
eqline = linect;
|
||||
if( in[0]=='.' && in[1]=='E' && in[2]=='Q' ){
|
||||
for( i=11; i<100; used[i++]=0 );
|
||||
printf(".tr ~\n");
|
||||
printf("%s",in);
|
||||
init();
|
||||
yyparse();
|
||||
if( eqnreg>0 )
|
||||
printf(".ne %d\n.rs\n'sp %d\n\\*(%d\n'sp %d\n",
|
||||
(eqnht+1)/2, (eqnht-eqnbase-2)/2,eqnreg,eqnbase/2);
|
||||
printf(".EN");
|
||||
if( lastchar == '\0' ){
|
||||
putchar('\n');
|
||||
break;
|
||||
}
|
||||
if( putchar(lastchar) != '\n' )
|
||||
while( putchar(getc()) != '\n' );
|
||||
flush();
|
||||
} else if( type != lefteq )
|
||||
printf("%s",in);
|
||||
else
|
||||
inline();
|
||||
}
|
||||
putchar('\0');
|
||||
flush();
|
||||
exit();
|
||||
}
|
||||
|
||||
getline(s) char *s; {
|
||||
char c;
|
||||
while((*s++=c=getc())!='\n' && c!='\0' && c!=lefteq );
|
||||
if( c==lefteq )
|
||||
s--;
|
||||
*s++ = '\0';
|
||||
return(c);
|
||||
}
|
||||
|
||||
inline() {
|
||||
int i,j,ds[20],t;
|
||||
i = -1;
|
||||
do{
|
||||
if( i>=17 ){
|
||||
while((j=getline(in))!='\n' && j!='\0');
|
||||
error(!FATAL,"missing right delim (?) at %.20s",in);
|
||||
break;
|
||||
}
|
||||
ds[++i] = oalloc();
|
||||
printf(".ds %d \"%s\n", ds[i], in);
|
||||
init();
|
||||
yyparse();
|
||||
if( eqnreg > 0 )
|
||||
ds[++i] = eqnreg;
|
||||
} while( (t=getline(in)) == lefteq );
|
||||
ds[++i] = oalloc();
|
||||
printf(".ds %d \"%s", ds[i], in);
|
||||
for( j=0; j<=i; j++){
|
||||
printf("\\*(%d", ds[j]);
|
||||
ofree(ds[j]);
|
||||
}
|
||||
putchar('\n');
|
||||
flush();
|
||||
}
|
||||
|
||||
putout(p1) int p1; {
|
||||
if(dbg)printf(".\tanswer <- S%d\n",p1);
|
||||
eqnht = eht[p1];
|
||||
eqnbase = ebase[p1];
|
||||
eqnreg = p1;
|
||||
}
|
||||
|
||||
abs(v) int v; {
|
||||
return( v>0 ? v : -v );
|
||||
}
|
||||
|
||||
max(i,j) int i,j; {
|
||||
return( i>j ? i : j );
|
||||
}
|
||||
|
||||
oalloc(){
|
||||
int i;
|
||||
for( i=11; i<100; i++)
|
||||
if( used[i]++ == 0 ) return(i);
|
||||
error( FATAL, "no strings left", i);
|
||||
}
|
||||
|
||||
ofree(n) int n; {
|
||||
used[n] = 0;
|
||||
}
|
||||
|
||||
setfile(argc, argv) int argc; char *argv[]; {
|
||||
svargc = --argc;
|
||||
svargv = argv;
|
||||
while( svargc > 0 && svargv[1][0] == '-'){
|
||||
switch( svargv[1][1] ){
|
||||
|
||||
case 'd': lefteq=svargv[1][2]; righteq=svargv[1][3]; break;
|
||||
case 's': break;
|
||||
case 'f': break;
|
||||
default:
|
||||
dbg = 1;
|
||||
ESCOUT = 'E';
|
||||
HFWDOUT = 'F';
|
||||
HREVOUT = 'R';
|
||||
BKSPOUT = 'B';
|
||||
FWDOUT = 'S';
|
||||
}
|
||||
svargc--;
|
||||
svargv++;
|
||||
}
|
||||
if( svargc == 0 )
|
||||
fin = dup(0);
|
||||
else if( (fin = open(svargv[1], 0)) < 0)
|
||||
error( FATAL,"can't open file %s", argv[1]);
|
||||
ptr = 0;
|
||||
fout = dup(1);
|
||||
ifile = 1;
|
||||
linect = 1;
|
||||
}
|
||||
|
||||
yyerror(){;}
|
||||
|
||||
int gsize 10;
|
||||
int gfont 'I';
|
||||
|
||||
init(){
|
||||
ct = 0;
|
||||
first++;
|
||||
}
|
||||
|
||||
error(fatal, s1, s2) int fatal; char *s1, *s2; {
|
||||
int sfout;
|
||||
printf("NEQN ERROR HERE");
|
||||
flush(fout);
|
||||
sfout = fout;
|
||||
fout = 2;
|
||||
if( fatal>0 )
|
||||
printf("fatal error: ");
|
||||
printf(s1,s2);
|
||||
printf(" file %s, between lines %d and %d\n",
|
||||
svargv[ifile], eqline, linect);
|
||||
flush(2);
|
||||
fout = sfout;
|
||||
if( fatal > 0 )
|
||||
exit(1);
|
||||
}
|
||||
|
||||
down(n) int n; {
|
||||
int c;
|
||||
if( n<= 0 )
|
||||
c = HREVOUT;
|
||||
else
|
||||
c = HFWDOUT;
|
||||
n = abs(n);
|
||||
while( n-- > 0 ){
|
||||
putchar(ESCOUT); putchar(c);
|
||||
}
|
||||
}
|
||||
|
||||
up(n) int n; {
|
||||
int c;
|
||||
if( n<= 0 )
|
||||
c = HFWDOUT;
|
||||
else
|
||||
c = HREVOUT;
|
||||
n = abs(n);
|
||||
while( n-- > 0 ){
|
||||
putchar(ESCOUT); putchar(HREVOUT);
|
||||
}
|
||||
}
|
||||
|
||||
fwd(n) int n; {
|
||||
int c,i;
|
||||
c = n<0 ? BKSPOUT : FWDOUT;
|
||||
n = abs(n);
|
||||
while( n-- > 0 )
|
||||
putchar(c);
|
||||
}
|
||||
|
||||
back(n) int n; {
|
||||
int c,i;
|
||||
c = n>0 ? BKSPOUT : FWDOUT;
|
||||
n = abs(n);
|
||||
while( n-- > 0 )
|
||||
putchar(c);
|
||||
}
|
||||
|
||||
line(n) int n; {
|
||||
while( n-- > 0 )
|
||||
putchar('_');
|
||||
}
|
||||
Reference in New Issue
Block a user