BSD 4_3_Tahoe release
[unix-history] / usr / src / ucb / script.c
index fc518f5..04f7d49 100644 (file)
@@ -1,41 +1,48 @@
 /*
  * Copyright (c) 1980 Regents of the University of California.
 /*
  * Copyright (c) 1980 Regents of the University of California.
- * All rights reserved.  The Berkeley software License Agreement
- * specifies the terms and conditions for redistribution.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Berkeley.  The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  */
 
 #ifndef lint
 char copyright[] =
 "@(#) Copyright (c) 1980 Regents of the University of California.\n\
  All rights reserved.\n";
  */
 
 #ifndef lint
 char copyright[] =
 "@(#) Copyright (c) 1980 Regents of the University of California.\n\
  All rights reserved.\n";
-#endif not lint
+#endif /* not lint */
 
 #ifndef lint
 
 #ifndef lint
-static char sccsid[] = "@(#)script.c   5.4 (Berkeley) 11/13/85";
-#endif not lint
+static char sccsid[] = "@(#)script.c   5.6 (Berkeley) 6/29/88";
+#endif /* not lint */
 
 /*
  * script
  */
 
 /*
  * script
  */
-#include <stdio.h>
-#include <signal.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/ioctl.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/ioctl.h>
-#include <sgtty.h>
 #include <sys/time.h>
 #include <sys/file.h>
 #include <sys/time.h>
 #include <sys/file.h>
+#include <stdio.h>
+#include <signal.h>
 
 
-char   *getenv();
-char   *ctime();
 char   *shell;
 FILE   *fscript;
 int    master;
 int    slave;
 int    child;
 int    subchild;
 char   *shell;
 FILE   *fscript;
 int    master;
 int    slave;
 int    child;
 int    subchild;
-char   *fname = "typescript";
-int    finish();
+char   *fname;
 
 struct sgttyb b;
 struct tchars tc;
 
 struct sgttyb b;
 struct tchars tc;
@@ -50,31 +57,38 @@ main(argc, argv)
        int argc;
        char *argv[];
 {
        int argc;
        char *argv[];
 {
+       extern char *optarg;
+       extern int optind;
+       int ch;
+       int finish();
+       char *getenv();
 
 
-       shell = getenv("SHELL");
-       if (shell == 0)
-               shell = "/bin/sh";
-       argc--, argv++;
-       while (argc > 0 && argv[0][0] == '-') {
-               switch (argv[0][1]) {
-
+       while ((ch = getopt(argc, argv, "a")) != EOF)
+               switch((char)ch) {
                case 'a':
                        aflg++;
                        break;
                case 'a':
                        aflg++;
                        break;
-
+               case '?':
                default:
                default:
-                       fprintf(stderr,
-                           "usage: script [ -a ] [ typescript ]\n");
+                       fprintf(stderr, "usage: script [-a] [file]\n");
                        exit(1);
                }
                        exit(1);
                }
-               argc--, argv++;
-       }
+       argc -= optind;
+       argv += optind;
+
        if (argc > 0)
                fname = argv[0];
        if (argc > 0)
                fname = argv[0];
+       else
+               fname = "typescript";
        if ((fscript = fopen(fname, aflg ? "a" : "w")) == NULL) {
                perror(fname);
                fail();
        }
        if ((fscript = fopen(fname, aflg ? "a" : "w")) == NULL) {
                perror(fname);
                fail();
        }
+
+       shell = getenv("SHELL");
+       if (shell == NULL)
+               shell = "/bin/sh";
+
        getmaster();
        printf("Script started, file is %s\n", fname);
        fixtty();
        getmaster();
        printf("Script started, file is %s\n", fname);
        fixtty();
@@ -101,8 +115,8 @@ main(argc, argv)
 
 doinput()
 {
 
 doinput()
 {
+       register int cc;
        char ibuf[BUFSIZ];
        char ibuf[BUFSIZ];
-       int cc;
 
        (void) fclose(fscript);
        while ((cc = read(0, ibuf, BUFSIZ)) > 0)
 
        (void) fclose(fscript);
        while ((cc = read(0, ibuf, BUFSIZ)) > 0)
@@ -128,12 +142,12 @@ finish()
 
 dooutput()
 {
 
 dooutput()
 {
-       time_t tvec;
-       char obuf[BUFSIZ];
-       int cc;
+       register int cc;
+       time_t tvec, time();
+       char obuf[BUFSIZ], *ctime();
 
        (void) close(0);
 
        (void) close(0);
-       tvec = time((time_t *)0);
+       tvec = time((time_t *)NULL);
        fprintf(fscript, "Script started on %s", ctime(&tvec));
        for (;;) {
                cc = read(master, obuf, sizeof (obuf));
        fprintf(fscript, "Script started on %s", ctime(&tvec));
        for (;;) {
                cc = read(master, obuf, sizeof (obuf));
@@ -185,10 +199,11 @@ fail()
 
 done()
 {
 
 done()
 {
-       time_t tvec;
+       time_t tvec, time();
+       char *ctime();
 
        if (subchild) {
 
        if (subchild) {
-               tvec = time((time_t *)0);
+               tvec = time((time_t *)NULL);
                fprintf(fscript,"\nscript done on %s", ctime(&tvec));
                (void) fclose(fscript);
                (void) close(master);
                fprintf(fscript,"\nscript done on %s", ctime(&tvec));
                (void) fclose(fscript);
                (void) close(master);