script.c revision 7c478bd95313f5f23a4c958a745db2134aa03244
/*
* Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
/* All Rights Reserved */
/*
* Copyright (c) 1980 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
/* Portions Copyright(c) 1988, Sun Microsystems, Inc. */
/* All Rights Reserved. */
#pragma ident "%Z%%M% %I% %E% SMI"
/*
* script
*/
#include <stdio.h>
#include <signal.h>
#include <fcntl.h>
#include <locale.h>
#include <time.h>
#include <errno.h>
int grantpt();
int unlockpt();
char *ptsname();
char *getenv();
char *shell;
int master; /* file descriptor for master pseudo-tty */
int slave; /* file descriptor for slave pseudo-tty */
int child;
int subchild;
char *fname = "typescript";
void sigwinch();
void finish();
struct termios b;
int lb;
int l;
int aflg;
int argc;
char *argv[];
{
#if !defined(TEXT_DOMAIN)
#define TEXT_DOMAIN "SYS_TEST"
#endif
(void) textdomain(TEXT_DOMAIN);
if (shell == 0)
switch (argv[0][1]) {
case 'a':
aflg++;
break;
default:
gettext("usage: script [ -a ] [ typescript ]\n"));
exit(1);
}
}
if (argc > 0)
fail();
}
getmaster();
fixtty();
if (child < 0) {
perror("fork");
fail();
}
if (child == 0) {
if (child < 0) {
perror("fork");
fail();
}
if (child)
dooutput();
else
doshell();
}
doinput();
}
doinput()
{
int cc;
if (cc == -1) {
continue;
} else {
break;
}
}
}
done();
}
void
sigwinch()
{
}
void
finish()
{
int status;
register int pid;
register int die = 0;
die = 1;
if (die)
done();
}
dooutput()
{
int cc;
(void) close(0);
for (;;) {
if (cc <= 0)
break;
}
done();
}
doshell()
{
setpgrp(); /* relinquish control terminal */
getslave();
fail();
}
fixtty()
{
sbuf = b;
}
fail()
{
done();
}
done()
{
if (subchild) {
} else {
}
exit(0);
}
{
return;
} else { /* out of pseudo-tty's */
fail();
}
}
getslave()
{
char *slavename; /* name of slave pseudo-tty */
if (slave < 0) { /* error on opening slave */
fail();
}
}