BSD 2 development
[unix-history] / .ref-BSD-1 / ex-1.1 / ex_source.c
#
/*
* Ex - a text editor
* Bill Joy UCB September 1977
*/
#include "ex.h"
#include "ex_io.h"
STATIC int slevel;
int onintr();
source(file, okfail)
char *file;
int okfail;
{
int osetexit[3], tty[3];
register int saveinp, ointty, oerrno;
char reenter;
signal(INTR, 1);
saveinp = dup(0);
if (saveinp < 0)
error("Too many nested sources");
close(0);
if (open(file, 0) < 0) {
oerrno = errno;
if (ruptible)
signal(INTR, onintr);
dup(saveinp);
close(saveinp);
errno = oerrno;
if (!okfail)
filioerr(file);
return;
}
slevel++;
ointty = intty;
intty = gtty(0, tty) == 0;
reenter = 0;
getexit(osetexit);
setexit();
if (ruptible)
signal(INTR, onintr);
if (reenter == 0) {
reenter++;
commands(1, 1);
} else if (slevel > 1) {
close(0);
dup(saveinp);
close(saveinp);
slevel--;
resexit(osetexit);
reset();
}
intty = ointty;
close(0);
dup(saveinp);
close(saveinp);
slevel--;
resexit(osetexit);
}