Path: utzoo!utgpu!attcan!uunet!mcvax!hp4nl!botter!star.cs.vu.nl!ast@cs.vu.nl
From: ast@cs.vu.nl (Andy Tanenbaum)
Newsgroups: comp.os.minix
Subject: V1.3c posting #5 - commands (3 of 3)
Message-ID: <1434@ast.cs.vu.nl>
Date: 27 Sep 88 20:53:22 GMT
Sender: ast@cs.vu.nl
Reply-To: ast@cs.vu.nl (Andy Tanenbaum)
Organization: VU Informatica, Amsterdam
Lines: 1556
: This is a shar archive. Extract with sh, not csh.
: This archive ends with exit, so do not worry about trailing junk.
: --------------------------- cut here --------------------------
PATH=/bin:/usr/bin:/usr/ucb
echo Extracting 'more.c'
sed 's/^X//' > 'more.c' << '+ END-OF-FILE ''more.c'
X/* more - terminal pager Author: Brandon S. Allbery */
X
X/* Temporary fixes: efth 1988-Aug-16
X - don't display directories and special files
X - don't die on files with '\0' in them
X - don't print non-ASCII characters
X - use termcap for #lines, normal, reverse, clear-line
X */
X
X
X/* Pager commands:
X * display next page
X * scroll up 1 line
X * q quit
X*/
X
Xchar *SO, *SE, *CD;
X
X#define reverse() write(1, SO, strlen(SO)) /* reverse video */
X#define normal() write(1, SE, strlen(SE)) /* undo reverse() */
X#define clearln() write(1,"\r",1); \
X write(1, CD, strlen(CD)) /* clear line */
X
Xint lines; /* lines/screen (- 2 to retain last line) */
X
X#define COLS 80 /* columns/line */
X#define TABSTOP 8 /* tabstop expansion */
X
X#include
X#include
X#include
X#include
X
Xextern int byebye();
Xextern char *index();
X
Xint line = 0; /* current terminal line */
Xint col = 0; /* current terminal column */
Xint fd = -1; /* terminal file descriptor (/dev/tty) */
Xstruct sgttyb ttymode; /* and the terminal modes */
Xchar ibuf[1024]; /* input buffer */
Xchar obuf[1024]; /* output buffer */
Xint ibl = 0; /* chars in input buffer */
Xint ibc = 0; /* position in input buffer */
Xint obc = 0; /* position in output buffer (== chars in) */
Xint isrewind = 0; /* flag: ' command -- next input() rewind */
Xint isdone = 0; /* flag: return EOF next read even if not */
X
Xmain(argc, argv)
Xchar **argv; {
X int ch;
X int fd, arg;
X struct stat s;
X
X get_termcap();
X
X signal(SIGINT, byebye);
X fd = 0;
X cbreak();
X if (argc < 2)
X while ((ch = input(fd)) != -1)
X output(ch);
X else
X for (arg = 1; argv[arg] != (char *) 0; arg++) {
X if ((fd = open(argv[arg], 0)) == -1) {
X write(1, "more: cannot open ", 18);
X write(1, argv[arg], strlen(argv[arg]));
X write(1, "\n", 1);
X nocbreak();
X exit(1);
X }
X
X if ( fstat(fd,&s) < 0 ) {
X write( 1, "more: can not fstat file\n", 25 );
X nocbreak();
X exit(1);
X }
X
X if ( (s.st_mode & S_IFMT) == S_IFREG )
X while ((ch = input(fd)) != -1)
X output(ch);
X else
X write(1, "not file\n", 9 );
X
X close(fd);
X if (argv[arg + 1] != (char *) 0) {
X oflush();
X if (isdone) { /* 'n' command */
X reverse();
X write(1, "*** Skipping to next file ***\n", 30);
X normal();
X isdone = 0;
X }
X reverse();
X write(1, "--More-- (Next file: ", 21);
X write(1, argv[arg + 1], strlen(argv[arg + 1]));
X write(1, ")", 1);
X normal();
X switch (wtch()) {
X case ' ':
X case '\'':
X case 'n':
X case 'N':
X line = 0;
X break;
X case '\r':
X case '\n':
X line = lines - 1;
X break;
X case 'q':
X case 'Q':
X clearln();
X byebye();
X }
X clearln();
X }
X }
X oflush();
X byebye();
X}
X
Xinput(fd) {
X if (isdone) {
X ibl = 0;
X ibc = 0;
X return -1;
X }
X if (isrewind) {
X lseek(fd, 0L, 0);
X ibl = 0;
X ibc = 0;
X isrewind = 0;
X }
X if (ibc == ibl) {
X ibc = 0;
X if ((ibl = read(fd, ibuf, sizeof ibuf)) <= 0)
X return -1;
X }
X return ibuf[ibc++] & 0xff;
X}
X
Xoutput(c)
Xchar c; {
X if (obc == sizeof obuf) {
X lwrite(1, obuf, sizeof obuf);
X obc = 0;
X }
X if (!isrewind)
X obuf[obc++] = c;
X}
X
Xoflush() {
X if (!isdone)
X lwrite(1, obuf, obc);
X obc = 0;
X}
X
Xlwrite(fd, buf, len)
Xchar *buf;
Xunsigned len; {
X unsigned here, start;
X char cmd;
X
X start = 0;
X here = 0;
X while (here != len) {
X cmd = '\0';
X switch (buf[here++]) {
X case '\n':
X col = 0;
X if (++line == lines) {
X write(fd, buf + start, here - start);
X reverse();
X write(1, "--More--", 8);
X normal();
X cmd = wtch();
X clearln();
X line = 0;
X start = here;
X }
X break;
X case '\r':
X col = 0;
X break;
X case '\b':
X if (col != 0)
X col--;
X else {
X line--;
X col = COLS - 1;
X }
X break;
X case '\t':
X do {
X col++;
X } while (col % TABSTOP != 0);
X break;
X default:
X if ( buf[here-1] < ' ' || (buf[here-1] & 0x80) )
X buf[here-1] = '?';
X if (++col == COLS) {
X col = 0;
X if (++line == lines) {
X write(fd, buf + start, here - start);
X reverse();
X write(1, "--More--", 8);
X normal();
X cmd = wtch();
X clearln();
X line = 0;
X start = here;
X }
X }
X }
X switch (cmd) {
X case '\0':
X break;
X case ' ':
X line = 0;
X break;
X case '\r':
X case '\n':
X line = lines - 1;
X break;
X case 'q':
X case 'Q':
X byebye();
X case '\'':
X isrewind = 1;
X reverse();
X write(1, "*** Back ***\n", 13);
X normal();
X return;
X case 'n':
X case 'N':
X isdone = 1;
X return;
X default:
X break;
X }
X }
X if (here != start)
X write(fd, buf + start, here - start);
X}
X
Xwtch() {
X char ch;
X
X do {
X read(fd, &ch, 1);
X } while (index(" \r\nqQ'nN", ch) == (char *) 0);
X return ch;
X}
X
Xcbreak() {
X if (fd != -1)
X return;
X if ((fd = open("/dev/tty", 0)) == -1) {
X write(2, "OOPS -- can't open /dev/tty\n", 28);
X exit(1);
X }
X ioctl(fd, TIOCGETP, &ttymode);
X ttymode.sg_flags |= CBREAK;
X ttymode.sg_flags &= ~ECHO;
X ioctl(fd, TIOCSETP, &ttymode); /* NB: add TIOCSETN! */
X}
X
Xnocbreak() {
X if (fd == -1)
X return;
X ttymode.sg_flags &= ~CBREAK;
X ttymode.sg_flags |= ECHO;
X ioctl(fd, TIOCSETP, &ttymode);
X close(fd);
X fd = -1;
X}
X
Xbyebye() {
X nocbreak();
X exit(0);
X}
X
X
X
Xget_termcap()
X {
X static char termbuf[50];
X extern char *tgetstr(), *getenv();
X char *loc = termbuf;
X char entry[1024];
X
X if (tgetent(entry, getenv("TERM")) <= 0) {
X printf("Unknown terminal.\n");
X exit(1);
X }
X
X lines = tgetnum("li" ) - 2;
X
X SO = tgetstr("so", &loc);
X SE = tgetstr("se", &loc);
X CD = tgetstr("cd", &loc);
X
X if ( CD == (char *) 0 )
X CD = " \r";
X }
+ END-OF-FILE more.c
chmod 'u=rw,g=r,o=r' 'more.c'
set `wc -c 'more.c'`
count=$1
case $count in
5582) :;;
*) echo 'Bad character count in ''more.c' >&2
echo 'Count should be 5582' >&2
esac
echo Extracting 'mount.c.cdif'
sed 's/^X//' > 'mount.c.cdif' << '+ END-OF-FILE ''mount.c.cdif'
X*** /local/ast/minix/tape3b/commands/mount.c Wed Jul 13 13:11:08 1988
X--- mount.c Sun Sep 25 15:25:07 1988
X***************
X*** 30,36 ****
X }
X std_err(argv[1]);
X std_err(" mounted\n");
X! if ((fd = open("/etc/mtab", 2)) < 0) exit(1);
X lseek(fd, 0L, 2); /* seek to EOF */
X write(fd, argv[1], strlen(argv[1]));
X write(fd, " is mounted on ", 15);
X--- 30,36 ----
X }
X std_err(argv[1]);
X std_err(" mounted\n");
X! if ((fd = open(mounttable, 2)) < 0) exit(1);
X lseek(fd, 0L, 2); /* seek to EOF */
X write(fd, argv[1], strlen(argv[1]));
X write(fd, " is mounted on ", 15);
+ END-OF-FILE mount.c.cdif
chmod 'u=rw,g=r,o=r' 'mount.c.cdif'
set `wc -c 'mount.c.cdif'`
count=$1
case $count in
602) :;;
*) echo 'Bad character count in ''mount.c.cdif' >&2
echo 'Count should be 602' >&2
esac
echo Extracting 'mv.c.cdif'
sed 's/^X//' > 'mv.c.cdif' << '+ END-OF-FILE ''mv.c.cdif'
X*** /local/ast/minix/tape3b/commands/mv.c Wed Jul 13 13:11:08 1988
X--- mv.c Sun Sep 25 15:25:07 1988
X***************
X*** 1,13 ****
X /* mv - move files Author: Adri Koppes
X *
X * 4/25/87 - J. Paradis Bug fixes for directory handling
X */
X
X #include
X- #include
X #include
X
X! int error = 0;
X struct stat st, st1;
X
X main (argc, argv)
X--- 1,14 ----
X /* mv - move files Author: Adri Koppes
X *
X * 4/25/87 - J. Paradis Bug fixes for directory handling
X+ * 3/15/88 - P. Housel More directory bug fixes
X */
X
X #include
X #include
X
X! extern char *rindex();
X!
X struct stat st, st1;
X
X main (argc, argv)
X***************
X*** 47,53 ****
X while (--argc)
X move (*++argv, destdir);
X }
X- if (error) exit (1);
X exit(0);
X }
X
X--- 48,53 ----
X***************
X*** 57,65 ****
X {
X int retval;
X char name[64];
X
X /* It's too dangerous to fool with "." or ".." ! */
X! if((strcmp(old, ".") == 0) || (strcmp(old, "..") == 0)) {
X cant(old);
X }
X
X--- 57,73 ----
X {
X int retval;
X char name[64];
X+ char parent[64];
X+ char *oldbase;
X+ int i;
X
X+ if((oldbase = rindex(old, '/')) == 0)
X+ oldbase = old;
X+ else
X+ ++oldbase;
X+
X /* It's too dangerous to fool with "." or ".." ! */
X! if((strcmp(oldbase, ".") == 0) || (strcmp(oldbase, "..") == 0)) {
X cant(old);
X }
X
X***************
X*** 68,91 ****
X st.st_ino == st1.st_ino)
X cant(old);
X
X! if (!stat (new, &st))
X! if((st.st_mode & S_IFMT) != S_IFDIR)
X unlink (new);
X else {
X! char *p, *rindex();
X
X! if ((strlen(old) + strlen(new) + 2) > 64) {
X cant(old);
X! error++;
X! return;
X }
X- strcpy(name, new);
X- strcat(name, "/");
X- p = rindex(old, '/');
X- strcat(name, p ? p : old);
X- new = name;
X }
X! stat (old, &st);
X if (link (old, new))
X if ((st.st_mode & S_IFMT) != S_IFDIR) {
X switch (fork ()) {
X--- 76,137 ----
X st.st_ino == st1.st_ino)
X cant(old);
X
X! /* If source is not writeable, don't move it. */
X! if (access(old, 2) != 0) cant(old);
X!
X! if (stat (new, &st1) == 0)
X! if((st1.st_mode & S_IFMT) != S_IFDIR)
X unlink (new);
X+ else {
X+ if ((strlen(oldbase) + strlen(new) + 2) > 64) {
X+ cant(old);
X+ }
X+ strcpy(name, new);
X+ strcat(name, "/");
X+ strcat(name, oldbase);
X+ new = name;
X+
X+ /* do the 'move-to-itself' check again for the new name */
X+ if (stat(new, &st1)==0 && st.st_dev == st1.st_dev
X+ && st.st_ino == st1.st_ino)
X+ cant(old);
X+ }
X+
X+ strcpy(parent, new);
X+
X+ for(i = (strlen(parent) - 1); i > 0; i--) {
X+ if(parent[i] == '/') break;
X+ }
X+
X+ if(i == 0) {
X+ strcpy(parent, ".");
X+ }
X else {
X! /* null-terminate name at last slash */
X! parent[i] = '\0';
X! }
X
X! /* prevent moving a directory into its own subdirectory */
X! if((st.st_mode & S_IFMT) == S_IFDIR) {
X! char lower[128];
X! short int prevdev = -1;
X! unsigned short previno;
X!
X! strcpy(lower, parent);
X! while(1) {
X! if(stat(lower, &st1) || (st1.st_dev == st.st_dev
X! && st1.st_ino == st.st_ino))
X cant(old);
X!
X! /* stop at root */
X! if(st1.st_dev == prevdev && st1.st_ino == previno)
X! break;
X! prevdev = st1.st_dev;
X! previno = st1.st_ino;
X! strcat(lower, "/..");
X }
X }
X!
X if (link (old, new))
X if ((st.st_mode & S_IFMT) != S_IFDIR) {
X switch (fork ()) {
X***************
X*** 110,141 ****
X ** where else in the tree...)
X */
X if ((st.st_mode & S_IFMT) == S_IFDIR) {
X! int i;
X! char parent[64], dotdot[64];
X!
X! strcpy(parent, new);
X!
X! /* Determine the name for the parent of
X! ** the new name by counting back until we
X! ** hit a '/' or the begining of the string
X! */
X!
X! for(i = (strlen(parent) - 1); i > 0; i--) {
X! if(parent[i] == '/') break;
X! }
X!
X! /* If there are no slashes, then the name is
X! ** in the current directory, so its parent
X! ** is ".". Otherwise, the parent is the name
X! ** up to the last slash.
X! */
X! if(i == 0) {
X! strcpy(parent, ".");
X! }
X! else {
X! /* null-terminate name at last slash */
X! parent[i] = '\0';
X! }
X
X /* Unlink the ".." entry */
X strcpy(dotdot, new);
X--- 156,162 ----
X ** where else in the tree...)
X */
X if ((st.st_mode & S_IFMT) == S_IFDIR) {
X! char dotdot[64];
X
X /* Unlink the ".." entry */
X strcpy(dotdot, new);
+ END-OF-FILE mv.c.cdif
chmod 'u=rw,g=r,o=r' 'mv.c.cdif'
set `wc -c 'mv.c.cdif'`
count=$1
case $count in
4523) :;;
*) echo 'Bad character count in ''mv.c.cdif' >&2
echo 'Count should be 4523' >&2
esac
echo Extracting 'nm.c.cdif'
sed 's/^X//' > 'nm.c.cdif' << '+ END-OF-FILE ''nm.c.cdif'
X*** /local/ast/minix/tape3b/commands/nm.c Wed Jul 13 13:11:09 1988
X--- nm.c Sun Sep 25 15:25:09 1988
X***************
X*** 15,21 ****
X * -g print only external symbols.
X * -n sort numerically rather than alphabetically.
X * -o prepend file name to each line rather than only once.
X! * -p don't sort, print in symbol-table order.
X * -r sort in reverse order.
X * -u print only undefined symbols.
X *
X--- 15,21 ----
X * -g print only external symbols.
X * -n sort numerically rather than alphabetically.
X * -o prepend file name to each line rather than only once.
X! * -p don't sort, pint n symbol-table order.
X * -r sort in reverse order.
X * -u print only undefined symbols.
X *
X***************
X*** 68,74 ****
X break;
X default:
X fprintf(stderr, "illegal flag: -%c\n", **argv);
X! Exit(-1);
X }
X *argv += 1;
X }
X--- 68,74 ----
X break;
X default:
X fprintf(stderr, "illegal flag: -%c\n", **argv);
X! exit(-1);
X }
X *argv += 1;
X }
X***************
X*** 80,95 ****
X nm(*argv);
X argv++;
X }
X! Exit(0);
X }
X
X- Exit(val)
X- int val;
X- {
X- _cleanup();
X- exit(val);
X- }
X-
X nm_sort(stbl1, stbl2)
X struct nlist *stbl1, *stbl2;
X {
X--- 80,88 ----
X nm(*argv);
X argv++;
X }
X! exit(0);
X }
X
X nm_sort(stbl1, stbl2)
X struct nlist *stbl1, *stbl2;
X {
X***************
X*** 175,182 ****
X name[8] = '\0';
X if (!o_flag) printf("%s:\n", file);
X for (last = &stbl[stbl_elems]; stbl != last; stbl++) {
X! if (g_flag && !(stbl->n_sclass & C_EXT)) continue;
X! if (u_flag && stbl->n_sclass & N_SECT != N_UNDF) continue;
X
X n_sclass = stbl->n_sclass & N_SECT;
X if (n_sclass == N_ABS) type = 'a';
X--- 168,175 ----
X name[8] = '\0';
X if (!o_flag) printf("%s:\n", file);
X for (last = &stbl[stbl_elems]; stbl != last; stbl++) {
X! if (g_flag && (stbl->n_sclass & N_CLASS) != C_EXT) continue;
X! if (u_flag && (stbl->n_sclass & N_SECT) != N_UNDF) continue;
X
X n_sclass = stbl->n_sclass & N_SECT;
X if (n_sclass == N_ABS) type = 'a';
X***************
X*** 184,193 ****
X else if (n_sclass == N_DATA) type = 'd';
X else if (n_sclass == N_BSS) type = 'b';
X else type = 'u';
X! if (stbl->n_sclass & C_EXT) type += 'A' -'a';
X strncpy(name, stbl->n_name, 8);
X! if (o_flag) printf("%s:%04X %c %s\n", file,
X stbl->n_value, type, name);
X! else printf("%04X %c %s\n", stbl->n_value, type, name);
X }
X }
X--- 177,186 ----
X else if (n_sclass == N_DATA) type = 'd';
X else if (n_sclass == N_BSS) type = 'b';
X else type = 'u';
X! if ((stbl->n_sclass & N_CLASS) == C_EXT) type += 'A' -'a';
X strncpy(name, stbl->n_name, 8);
X! if (o_flag) printf("%s:%08X %c %s\n", file,
X stbl->n_value, type, name);
X! else printf("%08X %c %s\n", stbl->n_value, type, name);
X }
X }
+ END-OF-FILE nm.c.cdif
chmod 'u=rw,g=r,o=r' 'nm.c.cdif'
set `wc -c 'nm.c.cdif'`
count=$1
case $count in
2777) :;;
*) echo 'Bad character count in ''nm.c.cdif' >&2
echo 'Count should be 2777' >&2
esac
echo Extracting 'paste.c.cdif'
sed 's/^X//' > 'paste.c.cdif' << '+ END-OF-FILE ''paste.c.cdif'
X*** /local/ast/minix/tape3b/commands/paste.c Wed Jul 13 13:11:10 1988
X--- paste.c Sun Sep 25 15:25:10 1988
X***************
X*** 1,3 ****
X--- 1,5 ----
X+ /* paste - laminate files Author: David Ihnat */
X+
X /*
X * paste - a recreation of the Unix(Tm) paste(1) command.
X *
+ END-OF-FILE paste.c.cdif
chmod 'u=rw,g=r,o=r' 'paste.c.cdif'
set `wc -c 'paste.c.cdif'`
count=$1
case $count in
274) :;;
*) echo 'Bad character count in ''paste.c.cdif' >&2
echo 'Count should be 274' >&2
esac
echo Extracting 'pr.c.cdif'
sed 's/^X//' > 'pr.c.cdif' << '+ END-OF-FILE ''pr.c.cdif'
X*** /local/ast/minix/tape3b/commands/pr.c Wed Jul 13 13:11:10 1988
X--- pr.c Sun Sep 25 15:25:10 1988
X***************
X*** 16,25 ****
X * header can be given and used.
X * format changed may occur between printing of several files:
X * pr -l30 file1 -w75 file2
X *
X! * Usage: pr [+page] [-columns] [-h header] [-w with] [-l length] [-nt] [files]
X * -t : Do not print the 5 line header and trailer at the page.
X! * -n : Turn on line numbering.
X * +page : Start printing at page n.
X * -columns : Print files in n-columns.
X * -l length: Take the length of the page to be n instead of 66
X--- 16,32 ----
X * header can be given and used.
X * format changed may occur between printing of several files:
X * pr -l30 file1 -w75 file2
X+ *
X+ * Modified: Rick Thomas. (Sept 12, 1988)
X+ * added "-M" option to cover functionality of old "-n" option,
X+ * and made "-n" option behavior compatible with system V.
X *
X! * Usage: pr [+page] [-columns] [-h header] [-wwidth] [-llength] [-ntm] [files]
X * -t : Do not print the 5 line header and trailer at the page.
X! * -n : Turn on line numbering.
X! * -M : Use "Minix" style line numbering -- Each page begins at
X! * a line number that is an even multiple of the page length.
X! * Like the listings in Appendix E of the book.
X * +page : Start printing at page n.
X * -columns : Print files in n-columns.
X * -l length: Take the length of the page to be n instead of 66
X***************
X*** 54,60 ****
X
X char *header;
X BOOL no_header;
X! BOOL number;
X BOOL ext_header_set = FALSE; /* external header given */
X BOOL back_space = TRUE; /* back space correction in line width */
X BOOL dont_fold = FALSE; /* original. If the line does not fit
X--- 61,68 ----
X
X char *header;
X BOOL no_header;
X! BOOL number = FALSE;
X! BOOL minix_number = FALSE;
X BOOL ext_header_set = FALSE; /* external header given */
X BOOL back_space = TRUE; /* back space correction in line width */
X BOOL dont_fold = FALSE; /* original. If the line does not fit
X***************
X*** 64,69 ****
X--- 72,78 ----
X short start_page = 1;
X short width = DEF_WIDTH;
X short length = DEF_LENGTH;
X+ short linenr;
X char *line_buf; /* used in format for multi-column output */
X
X char output[1024];
X***************
X*** 105,111 ****
X--- 114,125 ----
X break;
X case 'n':
X number = TRUE;
X+ minix_number = FALSE;
X break;
X+ case 'M':
X+ number = TRUE;
X+ minix_number = TRUE;
X+ break;
X case 'h':
X header = argv[index++];
X ext_header_set = TRUE;
X***************
X*** 127,133 ****
X dont_fold = TRUE;
X break;
X default:
X! fprintf(stderr, "Usage: %s [+page] [-columns] [-h header] [-w] [-l] [-nt] [files]\n", argv[0]);
X exit(1);
X }
X continue; /* Scan for next flags */
X--- 141,147 ----
X dont_fold = TRUE;
X break;
X default:
X! fprintf(stderr, "Usage: %s [+page] [-columns] [-h header] [-w] [-l] [-nMt] [files]\n", argv[0]);
X exit(1);
X }
X continue; /* Scan for next flags */
X***************
X*** 229,234 ****
X--- 243,249 ----
X if (dont_fold && c!='\n' && c!=EOF)
X EAT(filep);
X lines--;
X+ if (c == '\n') linenr++;
X } while (lines > 0 && c != EOF);
X
X return c; /* last char read */
X***************
X*** 328,338 ****
X print_page(pagenr, maxcol)
X short pagenr, maxcol;
X {
X- short linenr = (pagenr - 1) * length + 1;
X short pad, i, j, start;
X short width;
X char *p;
X
X if (!no_header)
X out_header(pagenr);
X
X--- 343,355 ----
X print_page(pagenr, maxcol)
X short pagenr, maxcol;
X {
X short pad, i, j, start;
X short width;
X char *p;
X
X+ if (minix_number) linenr = (pagenr -1 ) * length + 1;
X+ else linenr = 1;
X+
X if (!no_header)
X out_header(pagenr);
X
X***************
X*** 340,346 ****
X for (j = 0; j < maxcol; j++) {
X width = cwidth;
X if (number && j == 0) { /* first columns */
X! printf("%*.*d ", NUM_WIDTH-1, NUM_WIDTH-1, linenr++);
X width -= NUM_WIDTH;
X }
X pad = 0;
X--- 357,363 ----
X for (j = 0; j < maxcol; j++) {
X width = cwidth;
X if (number && j == 0) { /* first columns */
X! printf("%7.7d ", linenr++); /* 7 == NUM_WIDTH-1 */
X width -= NUM_WIDTH;
X }
X pad = 0;
X***************
X*** 362,373 ****
X {
X short c = '\0';
X short page_number = 0;
X- short linenr = 1;
X short lines;
X short cnt, i, max;
X short w = width;
X BOOL pr_number = TRUE; /* only real lines are numbered, not folded parts */
X
X if (number)
X width -= NUM_WIDTH;
X
X--- 379,390 ----
X {
X short c = '\0';
X short page_number = 0;
X short lines;
X short cnt, i, max;
X short w = width;
X BOOL pr_number = TRUE; /* only real lines are numbered, not folded parts */
X
X+ linenr = 1;
X if (number)
X width -= NUM_WIDTH;
X
X***************
X*** 386,394 ****
X if (c == EOF)
X return;
X
X! linenr = (page_number -1 ) * length + 1;
X! if (!no_header)
X! out_header(page_number);
X
X if (page_number == start_page)
X c = getc(filep);
X--- 403,409 ----
X if (c == EOF)
X return;
X
X! if (minix_number) linenr = (page_number -1 ) * length + 1;
X
X if (page_number == start_page)
X c = getc(filep);
X***************
X*** 396,407 ****
X /* Print the page */
X lines = length;
X while (lines && c != EOF) {
X if (number )
X if (pr_number)
X! printf("%*.*d ", NUM_WIDTH-1,
X! NUM_WIDTH-1, linenr++);
X else
X! printf("%*c ", NUM_WIDTH-1, ' ');
X pr_number = FALSE;
X cnt = 0;
X while (c != '\n' && c != EOF && cnt < width) {
X--- 411,423 ----
X /* Print the page */
X lines = length;
X while (lines && c != EOF) {
X+ if (lines == length && !no_header)
X+ out_header(page_number);
X if (number )
X if (pr_number)
X! printf("%7.7d ", linenr++); /* 7 == NUM_WIDTH-1 */
X else
X! printf("%7c ", ' '); /* 7 == NUM_WIDTH-1 */
X pr_number = FALSE;
X cnt = 0;
X while (c != '\n' && c != EOF && cnt < width) {
X***************
X*** 429,437 ****
X pr_number = TRUE;
X }
X }
X! if (lines == length)
X! return;
X! if (!no_header)
X printf("\n\n\n\n\n");
X } while (c != EOF);
X
X--- 445,453 ----
X pr_number = TRUE;
X }
X }
X! if (lines == length) /* We never printed anything on this page -- */
X! return; /* even the header, so dont try to fill it up */
X! if (!no_header) /* print the trailer -- 5 blank lines */
X printf("\n\n\n\n\n");
X } while (c != EOF);
X
+ END-OF-FILE pr.c.cdif
chmod 'u=rw,g=r,o=r' 'pr.c.cdif'
set `wc -c 'pr.c.cdif'`
count=$1
case $count in
6596) :;;
*) echo 'Bad character count in ''pr.c.cdif' >&2
echo 'Count should be 6596' >&2
esac
echo Extracting 'readall.c.cdif'
sed 's/^X//' > 'readall.c.cdif' << '+ END-OF-FILE ''readall.c.cdif'
X*** /local/ast/minix/tape3b/commands/readall.c Wed Jul 13 13:11:11 1988
X--- readall.c Mon Sep 26 15:01:14 1988
X***************
X*** 1,3 ****
X--- 1,5 ----
X+ /* readall - read a whole device fast Author: Andy Tanenbaum */
X+
X #define BLK 30
X
X char a[32000];
+ END-OF-FILE readall.c.cdif
chmod 'u=rw,g=r,o=r' 'readall.c.cdif'
set `wc -c 'readall.c.cdif'`
count=$1
case $count in
260) :;;
*) echo 'Bad character count in ''readall.c.cdif' >&2
echo 'Count should be 260' >&2
esac
echo Extracting 'readclock.c.new'
sed 's/^X//' > 'readclock.c.new' << '+ END-OF-FILE ''readclock.c.new'
X/* readclock - read the AT real time clock Authors: T. Holm & E. Froese */
X
X/************************************************************************/
X/* */
X/* readclock.c */
X/* */
X/* Read the AT real time clock, write the time to */
X/* standard output in a form usable by date(1). */
X/* If the system is an AT then the time is read */
X/* from the built-in clock, and written to standard */
X/* output in the form: */
X/* */
X/* mmddyyhhmmss */
X/* */
X/* If the system is not an AT then ``-q'' is written */
X/* to standard output. This is useful for placement in */
X/* the ``/etc/rc'' script: */
X/* */
X/* /usr/bin/date `/usr/bin/readclock` >4) * 10 + (x & 0x0f) )
X
X
Xstruct time
X{ unsigned year;
X unsigned month;
X unsigned day;
X unsigned hour;
X unsigned minute;
X unsigned second;
X};
X
X
X
Xmain()
X{
X struct time time1;
X struct time time2;
X int i;
X
X if ( peek( CPU_TYPE_SEGMENT, CPU_TYPE_OFFSET ) != PC_AT ) {
X printf( "-q\n" );
X exit( 1 );
X }
X
X for ( i=0; i<10; i++ ) {
X get_time( &time1 );
X get_time( &time2 );
X
X if ( time1.year == time2.year &&
X time1.month == time2.month &&
X time1.day == time2.day &&
X time1.hour == time2.hour &&
X time1.minute == time2.minute &&
X time1.second == time2.second )
X {
X printf( "%02d%02d%02d%02d%02d%02d\n",
X time1.month, time1.day, time1.year,
X time1.hour, time1.minute, time1.second );
X exit( 0 );
X }
X }
X
X printf( "-q\n" );
X exit( 1 );
X}
X
X
X
X/***********************************************************************/
X/* */
X/* get_time( time ) */
X/* */
X/* Update the structure pointed to by time with the current time */
X/* as read from the hardware real-time clock of the AT. */
X/* If necessary, the time is converted into a binary format before */
X/* being stored in the structure. */
X/* */
X/***********************************************************************/
X
Xget_time( t )
X struct time *t; {
X t->year = read_register( YEAR );
X t->month = read_register( MONTH );
X t->day = read_register( DAY );
X t->hour = read_register( HOUR );
X t->minute = read_register( MINUTE );
X t->second = read_register( SECOND );
X
X
X
X if ( (read_register(STATUS) & 0x04) == 0) {
X /* convert BCD to binary if necessary */
X t->year = BCD_TO_DEC( t->year );
X t->month = BCD_TO_DEC( t->month );
X t->day = BCD_TO_DEC( t->day );
X t->hour = BCD_TO_DEC( t->hour );
X t->minute = BCD_TO_DEC( t->minute );
X t->second = BCD_TO_DEC( t->second );
X }
X}
X
X
Xread_register( reg_addr )
Xchar reg_addr;
X{
X int val;
X
X port_out( CLK_ELE, reg_addr );
X port_in(CLK_IO, &val);
X return( val );
X}
+ END-OF-FILE readclock.c.new
chmod 'u=rw,g=r,o=r' 'readclock.c.new'
set `wc -c 'readclock.c.new'`
count=$1
case $count in
4113) :;;
*) echo 'Bad character count in ''readclock.c.new' >&2
echo 'Count should be 4113' >&2
esac
echo Extracting 'readfs.c.cdif'
sed 's/^X//' > 'readfs.c.cdif' << '+ END-OF-FILE ''readfs.c.cdif'
X*** /local/ast/minix/tape3b/commands/readfs.c Wed Jul 13 13:11:12 1988
X--- readfs.c Mon Sep 26 15:01:15 1988
X***************
X*** 236,242 ****
X
X /* Read next block of the directory */
X if (get_fileblock(special, ip, b, &bp) < 0)
X! return(-1);
X dp = &bp.b_dir[0];
X if (b++ == (block_nr) 0) {
X dp += 2; /* Skip "." and ".." */
X--- 236,242 ----
X
X /* Read next block of the directory */
X if (get_fileblock(special, ip, b, &bp) < 0)
X! return;
X dp = &bp.b_dir[0];
X if (b++ == (block_nr) 0) {
X dp += 2; /* Skip "." and ".." */
+ END-OF-FILE readfs.c.cdif
chmod 'u=rw,g=r,o=r' 'readfs.c.cdif'
set `wc -c 'readfs.c.cdif'`
count=$1
case $count in
561) :;;
*) echo 'Bad character count in ''readfs.c.cdif' >&2
echo 'Count should be 561' >&2
esac
echo Extracting 'sed.c.cdif'
sed 's/^X//' > 'sed.c.cdif' << '+ END-OF-FILE ''sed.c.cdif'
X*** /local/ast/minix/tape3b/commands/sed.c Wed Jul 13 13:11:14 1988
X--- sed.c Mon Sep 26 15:01:22 1988
X***************
X*** 98,103 ****
X--- 98,105 ----
X
X /* sed.h ends here */
X
X+ #define CMASK 0xFF /* some char type should have been unsigned char? */
X+
X /*+++++++++++++++*/
X
X /* sed - stream editor Author: Eric S. Raymond */
+ END-OF-FILE sed.c.cdif
chmod 'u=rw,g=r,o=r' 'sed.c.cdif'
set `wc -c 'sed.c.cdif'`
count=$1
case $count in
337) :;;
*) echo 'Bad character count in ''sed.c.cdif' >&2
echo 'Count should be 337' >&2
esac
echo Extracting 'strip.c.cdif'
sed 's/^X//' > 'strip.c.cdif' << '+ END-OF-FILE ''strip.c.cdif'
X*** /local/ast/minix/tape3b/commands/strip.c Wed Jul 13 13:11:18 1988
X--- strip.c Mon Sep 26 15:01:26 1988
X***************
X*** 1,4 ****
X! /* strip - remove symbols. Author: Dick van Veen, veench@cs.vu.nl */
X
X #include
X #include
X--- 1,4 ----
X! /* strip - remove symbols. Author: Dick van Veen */
X
X #include
X #include
X***************
X*** 129,146 ****
X int fd1, fd2;
X long size;
X {
X- long count;
X int length;
X
X! count = 0;
X! while (count < size) {
X! length = (int) (size - count);
X! if (length > sizeof(buffer)) length = sizeof(buffer);
X! length = read(fd1, buffer, length);
X! if (length == 0) break;
X if (write(fd2, buffer, length) != length) return(1);
X! count += length;
X }
X- if (count < size) return(1);
X return(0);
X }
X--- 129,143 ----
X int fd1, fd2;
X long size;
X {
X int length;
X
X! while (size > 0) {
X! if (size < sizeof(buffer))
X! length = size;
X! else length = sizeof(buffer);
X! if (read(fd1, buffer, length) != length) return(1);
X if (write(fd2, buffer, length) != length) return(1);
X! size -= length;
X }
X return(0);
X }
+ END-OF-FILE strip.c.cdif
chmod 'u=rw,g=r,o=r' 'strip.c.cdif'
set `wc -c 'strip.c.cdif'`
count=$1
case $count in
1129) :;;
*) echo 'Bad character count in ''strip.c.cdif' >&2
echo 'Count should be 1129' >&2
esac
echo Extracting 'stty.c.cdif'
sed 's/^X//' > 'stty.c.cdif' << '+ END-OF-FILE ''stty.c.cdif'
X*** /local/ast/minix/tape3b/commands/stty.c Wed Jul 13 13:11:18 1988
X--- stty.c Mon Sep 26 15:01:26 1988
X***************
X*** 64,69 ****
X--- 64,79 ----
X prints("\nint = "); prctl(tch.t_intrc);
X prints("\nquit = "); prctl(tch.t_quitc);
X if (ispeed > 0) {
X+ /* Print # bits/char and parity */
X+ if ( (mode & BITS8) == BITS8) prints("\n8 bits/char, ");
X+ if ( (mode & BITS8) == BITS7) prints("\n7 bits/char, ");
X+ if ( (mode & BITS8) == BITS6) prints("\n6 bits/char, ");
X+ if ( (mode & BITS8) == BITS5) prints("\n5 bits/char, ");
X+ if (mode & EVENP) prints("even parity");
X+ else if (mode & ODDP) prints("odd parity");
X+ else prints("no parity");
X+
X+ /* Print line speed. */
X prints("\nspeed = ");
X switch(ispeed) {
X case 100: prints("110"); break;
+ END-OF-FILE stty.c.cdif
chmod 'u=rw,g=r,o=r' 'stty.c.cdif'
set `wc -c 'stty.c.cdif'`
count=$1
case $count in
778) :;;
*) echo 'Bad character count in ''stty.c.cdif' >&2
echo 'Count should be 778' >&2
esac
echo Extracting 'su.c.cdif'
sed 's/^X//' > 'su.c.cdif' << '+ END-OF-FILE ''su.c.cdif'
X*** /local/ast/minix/tape3b/commands/su.c Wed Jul 13 13:11:20 1988
X--- su.c Mon Sep 26 15:01:26 1988
X***************
X*** 48,54 ****
X setuid (pwd->pw_uid);
X if (pwd->pw_shell[0])
X shell = pwd->pw_shell;
X! execl (shell, "-i", 0);
X std_err("No shell\n");
X exit (3);
X }
X--- 48,54 ----
X setuid (pwd->pw_uid);
X if (pwd->pw_shell[0])
X shell = pwd->pw_shell;
X! execl (shell, shell, "-i", 0);
X std_err("No shell\n");
X exit (3);
X }
+ END-OF-FILE su.c.cdif
chmod 'u=rw,g=r,o=r' 'su.c.cdif'
set `wc -c 'su.c.cdif'`
count=$1
case $count in
448) :;;
*) echo 'Bad character count in ''su.c.cdif' >&2
echo 'Count should be 448' >&2
esac
echo Extracting 'tar.c.cdif'
sed 's/^X//' > 'tar.c.cdif' << '+ END-OF-FILE ''tar.c.cdif'
X*** /local/ast/minix/tape3b/commands/tar.c Wed Jul 13 13:11:21 1988
X--- tar.c Mon Sep 26 15:01:28 1988
X***************
X*** 43,48 ****
X--- 43,49 ----
X #define LONG_TYPE (sizeof(header.member.m_size))
X
X #define MKDIR "/bin/mkdir"
X+ #define MKDIR2 "/usr/bin/mkdir"
X
X #define NIL_HEADER ((HEADER *) 0)
X #define NIL_PTR ((char *) 0)
X***************
X*** 252,257 ****
X--- 253,259 ----
X
X if (pid == 0) {
X execl(MKDIR, "mkdir", dir_name, (char *) 0);
X+ execl(MKDIR2, "mkdir", dir_name, (char *) 0);
X error("Cannot find mkdir.", NIL_PTR);
X }
X
+ END-OF-FILE tar.c.cdif
chmod 'u=rw,g=r,o=r' 'tar.c.cdif'
set `wc -c 'tar.c.cdif'`
count=$1
case $count in
561) :;;
*) echo 'Bad character count in ''tar.c.cdif' >&2
echo 'Count should be 561' >&2
esac
echo Extracting 'term.c.cdif'
sed 's/^X//' > 'term.c.cdif' << '+ END-OF-FILE ''term.c.cdif'
X*** /local/ast/minix/tape3b/commands/term.c Sat Jul 16 23:59:42 1988
X--- term.c Mon Sep 26 15:01:29 1988
X***************
X*** 102,108 ****
X /* Fetch the keyboard parameters, save them, and set new ones. */
X ioctl(0, TIOCGETP, &sgtty);
X sgsave2 = sgtty; /* modem parameters */
X! sgtty.sg_flags = RAW;
X ioctl(0, TIOCSETP, &sgtty);
X }
X
X--- 102,108 ----
X /* Fetch the keyboard parameters, save them, and set new ones. */
X ioctl(0, TIOCGETP, &sgtty);
X sgsave2 = sgtty; /* modem parameters */
X! sgtty.sg_flags = (sgtty.sg_flags & 01700) + RAW;
X ioctl(0, TIOCSETP, &sgtty);
X }
X
+ END-OF-FILE term.c.cdif
chmod 'u=rw,g=r,o=r' 'term.c.cdif'
set `wc -c 'term.c.cdif'`
count=$1
case $count in
606) :;;
*) echo 'Bad character count in ''term.c.cdif' >&2
echo 'Count should be 606' >&2
esac
echo Extracting 'tset.c.new'
sed 's/^X//' > 'tset.c.new' << '+ END-OF-FILE ''tset.c.new'
X/* tset - set the TERM variable Author: Terrence Holm */
X
X#include
X
X
X#define LINE_LENGTH 40 /* Max length in /etc/ttytype */
X#define TC_BUFFER 1024 /* Size of termcap(3) buffer */
X
X
XFILE *fopen();
Xchar *ttyname();
Xchar *index();
Xchar *getenv();
X
X/****************************************************************/
X/* */
X/* eval `tset [ device_type ]` */
X/* */
X/* "device_type" is the new name for $TERM. If no */
X/* type is supplied then /etc/ttytype is scanned for */
X/* the current port. */
X/* */
X/* This program returns the string: */
X/* */
X/* TERM= . . . */
X/* */
X/****************************************************************/
X/* */
X/* Login(1) sets a default for $TERM, so for logging-in */
X/* to any terminal place the following in ".profile": */
X/* */
X/* eval `tset` */
X/* */
X/* To change $TERM during a session: */
X/* */
X/* eval `tset device_type` */
X/* */
X/****************************************************************/
X
X
X
Xmain( argc, argv )
X int argc;
X char *argv[];
X
X {
X char *name;
X FILE *f;
X char line[ LINE_LENGTH ];
X
X
X if ( argc > 2 )
X {
X fprintf( stderr, "Usage: %s [ device_type ]\n", argv[0] );
X exit( 1 );
X }
X
X if ( argc == 2 )
X {
X Find_Termcap( argv[1] );
X exit( 0 );
X }
X
X
X /* No terminal name supplied, so use the current device */
X
X if ( (name = ttyname( 0 )) == NULL )
X Error( "Can not determine the user's terminal" );
X
X name += 5; /* Chop off "/dev/" part */
X
X
X /* Look up the default terminal type in /etc/ttytype */
X
X if ( (f = fopen( "/etc/ttytype", "r" )) == NULL )
X Error( "Can not open /etc/ttytype" );
X
X while ( fgets( line, LINE_LENGTH, f ) != NULL )
X {
X char *space = index( line, ' ' );
X
X line[ strlen(line) - 1 ] = '\0'; /* Remove '\n' */
X
X if ( strcmp( space+1, name ) == 0 )
X {
X *space = '\0';
X Find_Termcap( line );
X exit( 0 );
X }
X }
X
X Error( "Can not find your terminal in /etc/ttytype" );
X }
X
X
X
XFind_Termcap( terminal )
X char *terminal;
X
X {
X char termcap[ TC_BUFFER ];
X
X if ( tgetent( termcap, terminal ) != 1 )
X Error( "No termcap for your terminal type" );
X
X /* In real Unix the $TERMCAP would also be returned here */
X
X printf( "TERM=%s;\n", terminal );
X }
X
X
X
XError( msg )
X char *msg;
X
X {
X fprintf( stderr, "tset: %s\n", msg );
X exit( 1 );
X }
+ END-OF-FILE tset.c.new
chmod 'u=rw,g=r,o=r' 'tset.c.new'
set `wc -c 'tset.c.new'`
count=$1
case $count in
2431) :;;
*) echo 'Bad character count in ''tset.c.new' >&2
echo 'Count should be 2431' >&2
esac
echo Extracting 'tty.c.cdif'
sed 's/^X//' > 'tty.c.cdif' << '+ END-OF-FILE ''tty.c.cdif'
X*** /local/ast/minix/tape3b/commands/tty.c Wed Jul 13 13:11:24 1988
X--- tty.c Mon Sep 26 15:01:34 1988
X***************
X*** 1,14 ****
X! /*
X! * tty.c - Return tty name
X! *
X! * Freename P. Pascal IV
X! *
X! */
X! /*
X! * History:
X! *
X! * 31 July 87 fpp Creation
X! */
X #include
X
X char *ttyname();
X--- 1,5 ----
X! /* tty.c - Return tty name Author: Freeman P. Pascal IV */
X!
X #include
X
X char *ttyname();
+ END-OF-FILE tty.c.cdif
chmod 'u=rw,g=r,o=r' 'tty.c.cdif'
set `wc -c 'tty.c.cdif'`
count=$1
case $count in
435) :;;
*) echo 'Bad character count in ''tty.c.cdif' >&2
echo 'Count should be 435' >&2
esac
echo Extracting 'vol.c.cdif'
sed 's/^X//' > 'vol.c.cdif' << '+ END-OF-FILE ''vol.c.cdif'
X*** /local/ast/minix/tape3b/commands/vol.c Wed Jul 13 13:11:26 1988
X--- vol.c Mon Sep 26 15:01:36 1988
X***************
X*** 117,123 ****
X out[1] += n;
X } else {
X out[1] += (n%10);
X! out[2] = '0' + (n/10);
X }
X std_err(out);
X }
X--- 117,123 ----
X out[1] += n;
X } else {
X out[1] += (n%10);
X! out[0] = '0' + (n/10);
X }
X std_err(out);
X }
+ END-OF-FILE vol.c.cdif
chmod 'u=rw,g=r,o=r' 'vol.c.cdif'
set `wc -c 'vol.c.cdif'`
count=$1
case $count in
361) :;;
*) echo 'Bad character count in ''vol.c.cdif' >&2
echo 'Count should be 361' >&2
esac
exit 0