* Copyright (c) 1980 Regents of the University of California.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
"@(#) Copyright (c) 1980 Regents of the University of California.\n\
static char sccsid
[] = "@(#)script.c 5.13 (Berkeley) 3/5/91";
char line
[] = "/dev/ptyXX";
while ((ch
= getopt(argc
, argv
, "a")) != EOF
)
fprintf(stderr
, "usage: script [-a] [file]\n");
if ((fscript
= fopen(fname
, aflg
? "a" : "w")) == NULL
) {
printf("Script started, file is %s\n", fname
);
(void) signal(SIGCHLD
, finish
);
subchild
= child
= fork();
while ((cc
= read(0, ibuf
, BUFSIZ
)) > 0)
(void) write(master
, ibuf
, cc
);
while ((pid
= wait3((int *)&status
, WNOHANG
, 0)) > 0)
char obuf
[BUFSIZ
], *ctime();
tvec
= time((time_t *)NULL
);
fprintf(fscript
, "Script started on %s", ctime(&tvec
));
cc
= read(master
, obuf
, sizeof (obuf
));
(void) write(1, obuf
, cc
);
(void) fwrite(obuf
, 1, cc
, fscript
);
t = open(_PATH_TTY, O_RDWR);
(void) ioctl(t, TIOCNOTTY, (char *)0);
execl(shell
, "sh", "-i", 0);
(void) tcsetattr(0, TCSAFLUSH
, &rtt
);
tvec
= time((time_t *)NULL
);
fprintf(fscript
,"\nScript done on %s", ctime(&tvec
));
(void) tcsetattr(0, TCSAFLUSH
, &tt
);
printf("Script done, file is %s\n", fname
);
pty
= &line
[strlen("/dev/ptyp")];
for (bank
= "pqrs"; *bank
; bank
++) {
line
[strlen("/dev/pty")] = *bank
;
if (stat(line
, &stb
) < 0)
for (cp
= "0123456789abcdef"; *cp
; cp
++) {
master
= open(line
, O_RDWR
);
char *tp
= &line
[strlen("/dev/")];
/* verify slave side is usable */
ok
= access(line
, R_OK
|W_OK
) == 0;
(void) tcgetattr(0, &tt
);
(void) ioctl(0, TIOCGWINSZ
,
fprintf(stderr
, "Out of pty's\n");
line
[strlen("/dev/")] = 't';
slave
= open(line
, O_RDWR
);
(void) tcsetattr(slave
, TCSAFLUSH
, &tt
);
(void) ioctl(slave
, TIOCSWINSZ
, (char *)&win
);
(void) ioctl(slave
, TIOCSCTTY
, 0);