summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/Makefile.lint1
-rw-r--r--usr/src/cmd/Makefile1
-rw-r--r--usr/src/cmd/bfs/Makefile45
-rw-r--r--usr/src/cmd/bfs/bfs.c1504
-rw-r--r--usr/src/man/man1/Makefile1
-rw-r--r--usr/src/man/man1/bfs.1346
-rw-r--r--usr/src/man/man1/ed.12
-rw-r--r--usr/src/pkg/manifests/system-extended-system-utilities.mf2
8 files changed, 1 insertions, 1901 deletions
diff --git a/usr/src/Makefile.lint b/usr/src/Makefile.lint
index 520ea04c86..dd5d1edc72 100644
--- a/usr/src/Makefile.lint
+++ b/usr/src/Makefile.lint
@@ -51,7 +51,6 @@ COMMON_SUBDIRS = \
cmd/bart \
cmd/basename \
cmd/bdiff \
- cmd/bfs \
cmd/busstat \
cmd/boot \
cmd/cal \
diff --git a/usr/src/cmd/Makefile b/usr/src/cmd/Makefile
index a158d4af7c..16750703b5 100644
--- a/usr/src/cmd/Makefile
+++ b/usr/src/cmd/Makefile
@@ -74,7 +74,6 @@ COMMON_SUBDIRS= \
bc \
bdiff \
beadm \
- bfs \
bnu \
boot \
busstat \
diff --git a/usr/src/cmd/bfs/Makefile b/usr/src/cmd/bfs/Makefile
deleted file mode 100644
index fe0b1185b7..0000000000
--- a/usr/src/cmd/bfs/Makefile
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License"). You may not use this file except in compliance
-# with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-#
-# Copyright (c) 1989 by Sun Microsystems, Inc.
-#
-
-PROG= bfs
-
-include ../Makefile.cmd
-
-LDLIBS += -lgen
-CERRWARN += -_gcc=-Wno-char-subscripts
-CERRWARN += -_gcc=-Wno-parentheses
-CERRWARN += -_gcc=-Wno-uninitialized
-
-.KEEP_STATE:
-
-all: $(PROG)
-
-install: all $(ROOTPROG)
-
-clean:
-
-lint: lint_PROG
-
-include ../Makefile.targ
diff --git a/usr/src/cmd/bfs/bfs.c b/usr/src/cmd/bfs/bfs.c
deleted file mode 100644
index 44b5608bb2..0000000000
--- a/usr/src/cmd/bfs/bfs.c
+++ /dev/null
@@ -1,1504 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * 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 */
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#include <setjmp.h>
-#include <signal.h>
-#include <stdlib.h>
-#include <regexpr.h>
-#include <limits.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include <locale.h>
-#include <stdio.h>
-#include <string.h>
-#include <wait.h>
-#include <fcntl.h>
-int setjmp();
-static jmp_buf env;
-
-extern int scrwidth(wchar_t);
-
-#define BRKTYP char
-#define BRKSIZ 8192
-#define BRKTWO 4
-#define BFSAND
-#define BFSLIM 511
-#define BFSTRU 511
-#define BFSBUF 512
-
-struct Comd {
- int Cnumadr;
- int Cadr[2];
- char Csep;
- char Cop;
-};
-
-static int Dot, Dollar;
-static int markarray[26], *mark;
-static int fstack[15] = {1, -1};
-static int infildes = 0;
-static int outfildes = 1;
-static char internal[512], *intptr;
-static char comdlist[100];
-static char *endds;
-static char charbuf = '\n';
-static int peeked;
-static char currex[100];
-static int trunc = BFSTRU;
-static int crunch = -1;
-static int segblk[512], segoff[512], txtfd, prevblk, prevoff;
-static int oldfd = 0;
-static int flag4 = 0;
-static int flag3 = 0;
-static int flag2 = 0;
-static int flag1 = 0;
-static int flag = 0;
-static int lprev = 1;
-static int status[1];
-static BRKTYP *lincnt;
-static char *perbuf;
-static char *rebuf;
-static char *glbuf;
-static char tty, *bigfile;
-static char fle[80];
-static char prompt = 1;
-static char verbose = 1; /* 1=print # of bytes read in; 0=silent. */
-static char varray[10][100]; /* Holds xv cmd parameters. */
-static double outcnt;
-static char strtmp[32];
-
-static void reset();
-static void begin(struct Comd *p);
-static int bigopen(char file[]);
-static void sizeprt(int blk, int off);
-static void bigread(int l, char rec[]);
-static int gcomd(struct Comd *p, int k);
-static int fcomd(struct Comd *p);
-static void ecomd();
-static int kcomd(struct Comd *p);
-static int xncomd(struct Comd *p);
-static int pcomd(struct Comd *p);
-static int qcomd();
-static int xcomds(struct Comd *p);
-static int xbcomd(struct Comd *p);
-static int xccomd(struct Comd *p);
-static int xfcomd(struct Comd *p);
-static int xocomd(struct Comd *p);
-static int xtcomd(struct Comd *p);
-static int xvcomd();
-static int wcomd(struct Comd *p);
-static int nlcomd(struct Comd *p);
-static int eqcomd(struct Comd *p);
-static int colcomd(struct Comd *p);
-static int excomd();
-static int xcomdlist(struct Comd *p);
-static int defaults(struct Comd *p, int prt, int max,
- int def1, int def2, int setdot, int errsok);
-static int getcomd(struct Comd *p, int prt);
-static int getadrs(struct Comd *p, int prt);
-static int getadr(struct Comd *p, int prt);
-static int getnumb(struct Comd *p, int prt);
-static int rdnumb(int prt);
-static int getrel(struct Comd *p, int prt);
-static int getmark(struct Comd *p, int prt);
-static int getrex(struct Comd *p, int prt, char c);
-static int hunt(int prt, char rex[], int start, int down, int wrap, int errsok);
-static int jump(int prt, char label[]);
-static int getstr(int prt, char buf[], char brk, char ignr, int nonl);
-static int regerr(int c);
-static int err(int prt, char msg[]);
-static char mygetc();
-static int readc(int f, char *c);
-static int percent(char line[256]);
-static int newfile(int prt, char f[]);
-static void push(int s[], int d);
-static int pop(int s[]);
-static int peekc();
-static void eat();
-static int more();
-static void quit();
-static void out(char *ln);
-static char *untab(char l[]);
-static int patoi(char *b);
-static int equal(char *a, char *b);
-
-int
-main(int argc, char *argv[])
-{
- struct Comd comdstruct, *p;
- (void) setlocale(LC_ALL, "");
- if (argc < 2 || argc > 3) {
- (void) err(1, "arg count");
- quit();
- }
- mark = markarray-'a';
- if (argc == 3) {
- verbose = 0;
- }
- setbuf(stdout, 0);
- if (bigopen(bigfile = argv[argc-1]))
- quit();
- tty = isatty(0);
- p = &comdstruct;
- /* Look for 0 or more non-'%' char followed by a '%' */
- perbuf = compile("[^%]*%", (char *)0, (char *)0);
- if (regerrno)
- (void) regerr(regerrno);
- (void) setjmp(env);
-#if defined(__STDC__)
- (void) signal(SIGINT, (void (*)(int))reset);
-#else
- (void) signal(SIGINT, reset);
-#endif
- (void) err(0, "");
- (void) printf("\n");
- flag = 0;
- prompt = 0;
- /*CONSTCOND*/ for (;;)
- begin(p);
-
- /* NOTREACHED */
- return (0);
-}
-
-static void
-reset() /* for longjmp on signal */
-{
- longjmp(env, 1);
-}
-
-static void
-begin(struct Comd *p)
-{
- char line[256];
- strtagn:
- if (flag == 0)
- eat();
- if (infildes != 100) {
- if (infildes == 0 && prompt)
- (void) printf("*");
- flag3 = 1;
- if (getstr(1, line, 0, 0, 0))
- exit(1);
- flag3 = 0;
- if (percent(line) < 0)
- goto strtagn;
- (void) newfile(1, "");
- }
- if (!(getcomd(p, 1) < 0)) {
- switch (p->Cop) {
- case 'e':
- if (!flag)
- ecomd();
- else
- (void) err(0, "");
- break;
-
- case 'f':
- (void) fcomd(p);
- break;
-
- case 'g':
- if (flag == 0)
- (void) gcomd(p, 1);
- else
- (void) err(0, "");
- break;
-
- case 'k':
- (void) kcomd(p);
- break;
-
- case 'p':
- (void) pcomd(p);
- break;
-
- case 'q':
- (void) qcomd();
- break;
-
- case 'v':
- if (flag == 0)
- (void) gcomd(p, 0);
- else
- (void) err(0, "");
- break;
-
- case 'x':
- if (!flag)
- (void) xcomds(p);
- else
- (void) err(0, "");
- break;
-
- case 'w':
- (void) wcomd(p);
- break;
-
- case '\n':
- (void) nlcomd(p);
- break;
-
- case '=':
- (void) eqcomd(p);
- break;
-
- case ':':
- (void) colcomd(p);
- break;
-
- case '!':
- (void) excomd();
- break;
-
- case 'P':
- prompt = !prompt;
- break;
-
- default:
- if (flag)
- (void) err(0, "");
- else
- (void) err(1, "bad command");
- break;
- }
- }
-}
-
-static int
-bigopen(char file[])
-{
- int l, off, cnt;
- int blk, newline, n, s;
- char block[512];
- size_t totsiz;
- BRKTYP *tptr;
- if ((txtfd = open(file, 0)) < 0)
- return (err(1, "can't open"));
- blk = -1;
- newline = 1;
- l = cnt = s = 0;
- off = 512;
- totsiz = 0;
- if ((lincnt = (BRKTYP *)malloc(BRKSIZ)) == (BRKTYP *)NULL)
- return (err(1, "too many lines"));
- endds = (BRKTYP *)lincnt;
- totsiz += BRKSIZ;
- while ((n = read(txtfd, block, 512)) > 0) {
- blk++;
- for (off = 0; off < n; off++) {
- if (newline) {
- newline = 0;
- if (l > 0 && !(l&07777)) {
- totsiz += BRKSIZ;
- tptr = (BRKTYP *)
- realloc(lincnt, totsiz);
- if (tptr == NULL)
- return
- (err(1, "too many lines"));
- else
- lincnt = tptr;
- }
- lincnt[l] = (char)cnt;
- cnt = 0;
- if (!(l++ & 077)) {
- segblk[s] = blk;
- segoff[s++] = off;
- }
- if (l < 0 || l > 32767)
- return (err(1, "too many lines"));
- }
- if (block[off] == '\n') newline = 1;
- cnt++;
- }
- }
- if (!(l&07777)) {
- totsiz += BRKTWO;
- tptr = (BRKTYP *)realloc(lincnt, totsiz);
- if (tptr == NULL)
- return (err(1, "too many lines"));
- else
- lincnt = tptr;
- }
- lincnt[Dot = Dollar = l] = (char)cnt;
- sizeprt(blk, off);
- return (0);
-}
-
-static void
-sizeprt(int blk, int off)
-{
- if (verbose)
- (void) printf("%.0f", 512.*blk+off);
-}
-
-static int saveblk = -1;
-
-static void
-bigread(int l, char rec[])
-{
- int i;
- char *r, *b;
- int off;
- static char savetxt[512];
-
- if ((i = l-lprev) == 1) prevoff += lincnt[lprev]BFSAND;
- else if (i >= 0 && i <= 32)
- for (i = lprev; i < l; i++) prevoff += lincnt[i]BFSAND;
- else if (i < 0 && i >= -32)
- for (i = lprev-1; i >= l; i--) prevoff -= lincnt[i]BFSAND;
- else {
- prevblk = segblk[i = (l-1)>>6];
- prevoff = segoff[i];
- for (i = (i<<6)+1; i < l; i++) prevoff += lincnt[i]BFSAND;
- }
-
- prevblk += prevoff>>9;
- prevoff &= 0777;
- lprev = l;
- if (prevblk != saveblk) {
- (void) lseek(txtfd, ((long)(saveblk = prevblk))<<9, 0);
- (void) read(txtfd, savetxt, 512);
- }
- r = rec;
- off = prevoff;
- /*CONSTCOND*/while (1) {
- for (b = savetxt+off; b < savetxt+512; b++) {
- if ((*r++ = *b) == '\n') {
- *(r-1) = '\0';
- return;
- }
- if (((unsigned)r - (unsigned)rec) > BFSLIM) {
-
- (void) write(2,
- "Line too long--output truncated\n", 32);
- return;
- }
- }
- (void) read(txtfd, savetxt, 512);
- off = 0;
- saveblk++;
- }
-}
-
-static void
-ecomd()
-{
- int i = 0;
- while (peekc() == ' ')
- (void) mygetc();
- while ((fle[i++] = mygetc()) != '\n');
- fle[--i] = '\0';
- /* Without this, ~20 "e" cmds gave "can't open" msg. */
- (void) close(txtfd);
- free(endds);
- /* Reset parameters. */
- lprev = 1;
- prevblk = 0;
- prevoff = 0;
- saveblk = -1;
- if (bigopen(bigfile = fle))
- quit();
- (void) printf("\n");
-}
-
-static int
-fcomd(struct Comd *p)
-{
- if (more() || defaults(p, 1, 0, 0, 0, 0, 0))
- return (-1);
- (void) printf("%s\n", bigfile);
- return (0);
-}
-
-static int
-gcomd(struct Comd *p, int k)
-{
- char d;
- int i, end;
- char line[BFSBUF];
- if (defaults(p, 1, 2, 1, Dollar, 0, 0))
- return (-1);
- if ((d = mygetc()) == '\n')
- return (err(1, "syntax"));
- if (peekc() == d)
- (void) mygetc();
- else
- if (getstr(1, currex, d, 0, 1))
- return (-1);
- glbuf = compile(currex, (char *)0, (char *)0);
- if (regerrno) {
- (void) regerr(regerrno);
- return (-1);
- } else {
- if (glbuf)
- free(glbuf);
- }
-
- if (getstr(1, comdlist, 0, 0, 0))
- return (-1);
- i = p->Cadr[0];
- end = p->Cadr[1];
- while (i <= end) {
- bigread(i, line);
- if (!(step(line, glbuf))) {
- if (!k) {
- Dot = i;
- if (xcomdlist(p))
- return (err(1, "bad comd list"));
- }
- i++;
- } else {
- if (k) {
- Dot = i;
- if (xcomdlist(p))
- return (err(1, "bad comd list"));
- }
- i++;
- }
- }
- return (0);
-}
-
-static int
-kcomd(struct Comd *p)
-{
- char c;
- if ((c = peekc()) < 'a' || c > 'z')
- return (err(1, "bad mark"));
- (void) mygetc();
- if (more() || defaults(p, 1, 1, Dot, 0, 1, 0))
- return (-1);
- mark[c] = Dot = p->Cadr[0];
- return (0);
-}
-
-static int
-xncomd(struct Comd *p)
-{
- char c;
- if (more() || defaults(p, 1, 0, 0, 0, 0, 0))
- return (-1);
-
- for (c = 'a'; c <= 'z'; c++)
- if (mark[c])
- (void) printf("%c\n", c);
-
- return (0);
-}
-
-static int
-pcomd(struct Comd *p)
-{
- int i;
- char line[BFSBUF];
- if (more() || defaults(p, 1, 2, Dot, Dot, 1, 0))
- return (-1);
- for (i = p->Cadr[0]; i <= p->Cadr[1] && i > 0; i++) {
- bigread(i, line);
- out(line);
- }
- return (0);
-}
-
-static int
-qcomd()
-{
- if (more())
- return (-1);
- quit();
- return (0);
-}
-
-static int
-xcomds(struct Comd *p)
-{
- switch (mygetc()) {
- case 'b': return (xbcomd(p));
- case 'c': return (xccomd(p));
- case 'f': return (xfcomd(p));
- case 'n': return (xncomd(p));
- case 'o': return (xocomd(p));
- case 't': return (xtcomd(p));
- case 'v': return (xvcomd());
- default: return (err(1, "bad command"));
- }
-}
-
-static int
-xbcomd(struct Comd *p)
-{
- int fail, n;
- char d;
- char str[50];
-
- fail = 0;
- if (defaults(p, 0, 2, Dot, Dot, 0, 1))
- fail = 1;
- else {
- if ((d = mygetc()) == '\n')
- return (err(1, "syntax"));
- if (d == 'z') {
- if (status[0] != 0)
- return (0);
- (void) mygetc();
- if (getstr(1, str, 0, 0, 0))
- return (-1);
- return (jump(1, str));
- }
- if (d == 'n') {
- if (status[0] == 0)
- return (0);
- (void) mygetc();
- if (getstr(1, str, 0, 0, 0))
- return (-1);
- return (jump(1, str));
- }
- if (getstr(1, str, d, ' ', 0))
- return (-1);
- if ((n = hunt(0, str, p->Cadr[0]-1, 1, 0, 1)) < 0)
- fail = 1;
- if (getstr(1, str, 0, 0, 0))
- return (-1);
- if (more())
- return (err(1, "syntax"));
- }
- if (!fail) {
- Dot = n;
- return (jump(1, str));
- }
- return (0);
-}
-
-static int
-xccomd(struct Comd *p)
-{
- char arg[100];
- if (getstr(1, arg, 0, ' ', 0) || defaults(p, 1, 0, 0, 0, 0, 0))
- return (-1);
- if (equal(arg, ""))
- crunch = -crunch;
- else if (equal(arg, "0"))
- crunch = -1;
- else if (equal(arg, "1"))
- crunch = 1;
- else
- return (err(1, "syntax"));
-
- return (0);
-}
-
-static int
-xfcomd(struct Comd *p)
-{
- char fl[100];
- char *f;
- if (defaults(p, 1, 0, 0, 0, 0, 0))
- return (-1);
-
- while (peekc() == ' ')
- (void) mygetc();
- for (f = fl; (*f = mygetc()) != '\n'; f++);
- if (f == fl)
- return (err(1, "no file"));
- *f = '\0';
-
- return (newfile(1, fl));
-}
-
-static int
-xocomd(struct Comd *p)
-{
- int fd;
- char arg[100];
-
- if (getstr(1, arg, 0, ' ', 0) || defaults(p, 1, 0, 0, 0, 0, 0))
- return (-1);
-
- if (!arg[0]) {
- if (outfildes == 1)
- return (err(1, "no diversion"));
- (void) close(outfildes);
- outfildes = 1;
- } else {
- if (outfildes != 1)
- return (err(1, "already diverted"));
- if ((fd = open(arg, O_WRONLY|O_CREAT|O_TRUNC,
- (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH))) < 0)
- return (err(1, "can't create"));
- outfildes = fd;
- }
- return (0);
-}
-
-static int
-xtcomd(struct Comd *p)
-{
- int t;
-
- while (peekc() == ' ')
- (void) mygetc();
- if ((t = rdnumb(1)) < 0 || more() || defaults(p, 1, 0, 0, 0, 0, 0))
- return (-1);
-
- trunc = t;
- return (0);
-}
-
-static int
-xvcomd()
-{
- char c;
- int i;
- int temp0, temp1, temp2;
- int fildes[2];
-
- if ((c = peekc()) < '0' || c > '9')
- return (err(1, "digit required"));
- (void) mygetc();
- c -= '0';
- while (peekc() == ' ')
- (void) mygetc();
- if (peekc() == '\\')
- (void) mygetc();
- else if (peekc() == '!') {
- if (pipe(fildes) < 0) {
- (void) printf("Try again");
- return (-1);
- }
- temp0 = dup(0);
- temp1 = dup(1);
- temp2 = infildes;
- (void) close(0);
- (void) dup(fildes[0]);
- (void) close(1);
- (void) dup(fildes[1]);
- (void) close(fildes[0]);
- (void) close(fildes[1]);
- (void) mygetc();
- flag4 = 1;
- (void) excomd();
- (void) close(1);
- infildes = 0;
- }
- for (i = 0; (varray[c][i] = mygetc()) != '\n'; i++);
- varray[c][i] = '\0';
- if (flag4) {
- infildes = temp2;
- (void) close(0);
- (void) dup(temp0);
- (void) close(temp0);
- (void) dup(temp1);
- (void) close(temp1);
- flag4 = 0;
- charbuf = ' ';
- }
- return (0);
-}
-
-static int
-wcomd(struct Comd *p)
-{
- int i, fd, savefd;
- int savecrunch, savetrunc;
- char arg[100], line[BFSBUF];
-
- if (getstr(1, arg, 0, ' ', 0) || defaults(p, 1, 2, 1, Dollar, 1, 0))
- return (-1);
- if (!arg[0])
- return (err(1, "no file name"));
- if (equal(arg, bigfile))
- return (err(1, "no change indicated"));
- if ((fd = open(arg, O_WRONLY|O_CREAT|O_TRUNC,
- (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH))) < 0)
- return (err(1, "can't create"));
-
- savefd = outfildes;
- savetrunc = trunc;
- savecrunch = crunch;
- outfildes = fd;
- trunc = BFSTRU;
- crunch = -1;
-
- outcnt = 0;
- for (i = p->Cadr[0]; i <= p->Cadr[1] && i > 0; i++) {
- bigread(i, line);
- out(line);
- }
- if (verbose)
- (void) printf("%.0f\n", outcnt);
- (void) close(fd);
-
- outfildes = savefd;
- trunc = savetrunc;
- crunch = savecrunch;
- return (0);
-}
-
-static int
-nlcomd(struct Comd *p)
-{
- if (defaults(p, 1, 2, Dot+1, Dot+1, 1, 0)) {
- (void) mygetc();
- return (-1);
- }
- return (pcomd(p));
-}
-
-static int
-eqcomd(struct Comd *p)
-{
- if (more() || defaults(p, 1, 1, Dollar, 0, 0, 0))
- return (-1);
- (void) printf("%d\n", p->Cadr[0]);
- return (0);
-}
-
-static int
-colcomd(struct Comd *p)
-{
- return (defaults(p, 1, 0, 0, 0, 0, 0));
-}
-
-static int
-xcomdlist(struct Comd *p)
-{
- flag = 1;
- flag2 = 1;
- (void) newfile(1, "");
- while (flag2)
- begin(p);
- if (flag == 0)
- return (1);
- flag = 0;
- return (0);
-}
-
-static int
-excomd()
-{
- pid_t i;
- int j;
- if (infildes != 100)
- charbuf = '\n';
- while ((i = fork()) < (pid_t)0)
- (void) sleep(10);
- if (i == (pid_t)0) {
- /* Guarantees child can be intr. */
- (void) signal(SIGINT, SIG_DFL);
- if (infildes == 100 || flag4) {
- (void) execl("/usr/bin/sh", "sh", "-c", intptr, 0);
- exit(0);
- }
- if (infildes != 0) {
- (void) close(0);
- (void) dup(infildes);
- }
- for (j = 3; j < 15; j++) (void) close(j);
- (void) execl("/usr/bin/sh", "sh", "-t", 0);
- exit(0);
- }
- (void) signal(SIGINT, SIG_IGN);
- while (wait(status) != i);
- status[0] = status[0] >> 8;
-
-#if defined(__STDC__)
- (void) signal(SIGINT, (void (*)(int))reset);
-#else
- (void) signal(SIGINT, reset); /* Restore signal to previous status */
-#endif
-
- if (((infildes == 0) || ((infildes == 100) &&
- (fstack[fstack[0]] == 0)))&& verbose && (!flag4))
- (void) printf("!\n");
- return (0);
-}
-
-static int
-defaults(struct Comd *p, int prt, int max,
- int def1, int def2, int setdot, int errsok)
-{
- if (!def1)
- def1 = Dot;
- if (!def2)
- def2 = def1;
- if (p->Cnumadr >= max)
- return (errsok?-1:err(prt, "adr count"));
- if (p->Cnumadr < 0) {
- p->Cadr[++p->Cnumadr] = def1;
- p->Cadr[++p->Cnumadr] = def2;
- } else if (p->Cnumadr < 1)
- p->Cadr[++p->Cnumadr] = p->Cadr[0];
- if (p->Cadr[0] < 1 || p->Cadr[0] > Dollar ||
- p->Cadr[1] < 1 || p->Cadr[1] > Dollar)
- return (errsok?-1:err(prt, "range"));
- if (p->Cadr[0] > p->Cadr[1])
- return (errsok?-1:err(prt, "adr1 > adr2"));
- if (setdot)
- Dot = p->Cadr[1];
- return (0);
-}
-
-static int
-getcomd(struct Comd *p, int prt)
-{
- int r;
- int c;
-
- p->Cnumadr = -1;
- p->Csep = ' ';
- switch (c = peekc()) {
- case ',':
- case ';': p->Cop = mygetc();
- return (0);
- }
-
- if ((r = getadrs(p, prt)) < 0)
- return (r);
-
- if ((c = peekc()) < 0)
- return (err(prt, "syntax"));
- if (c == '\n')
- p->Cop = '\n';
- else
- p->Cop = mygetc();
-
- return (0);
-}
-
-static int
-getadrs(struct Comd *p, int prt)
-{
- int r;
- char c;
-
- if ((r = getadr(p, prt)) < 0)
- return (r);
-
- switch (c = peekc()) {
- case ';':
- Dot = p->Cadr[0];
- (void) mygetc();
- p->Csep = c;
- return (getadr(p, prt));
- case ',':
- (void) mygetc();
- p->Csep = c;
- return (getadr(p, prt));
- }
-
- return (0);
-}
-
-static int
-getadr(struct Comd *p, int prt)
-{
- int r;
- char c;
-
- r = 0;
- while (peekc() == ' ')
- (void) mygetc(); /* Ignore leading spaces */
- switch (c = peekc()) {
- case '\n':
- case ',':
- case ';': return (0);
- case '\'': (void) mygetc();
- r = getmark(p, prt);
- break;
-
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': r = getnumb(p, prt);
- break;
- case '.': (void) mygetc();
- p->Cadr[++p->Cnumadr] = Dot;
- break;
- case '+':
- case '-': p->Cadr[++p->Cnumadr] = Dot;
- break;
- case '$': (void) mygetc();
- p->Cadr[++p->Cnumadr] = Dollar;
- break;
- case '^': (void) mygetc();
- p->Cadr[++p->Cnumadr] = Dot - 1;
- break;
- case '/':
- case '?':
- case '>':
- case '<': (void) mygetc();
- r = getrex(p, prt, c);
- break;
- default: return (0);
- }
-
- if (r == 0)
- r = getrel(p, prt);
- return (r);
-}
-
-static int
-getnumb(struct Comd *p, int prt)
-{
- int i;
-
- if ((i = rdnumb(prt)) < 0)
- return (-1);
- p->Cadr[++p->Cnumadr] = i;
- return (0);
-}
-
-static int
-rdnumb(int prt)
-{
- char num[20], *n;
- int i;
-
- n = num;
- while ((*n = peekc()) >= '0' && *n <= '9') {
- n++;
- (void) mygetc();
- }
-
- *n = '\0';
- if ((i = patoi(num)) >= 0)
- return (i);
- return (err(prt, "bad num"));
-}
-
-static int
-getrel(struct Comd *p, int prt)
-{
- int op, n;
- char c;
- int j;
-
- n = 0;
- op = 1;
- while ((c = peekc()) == '+' || c == '-') {
- if (c == '+')
- n++;
- else
- n--;
- (void) mygetc();
- }
- j = n;
- if (n < 0)
- op = -1;
- if (c == '\n')
- p->Cadr[p->Cnumadr] += n;
- else {
- if ((n = rdnumb(0)) > 0 && p->Cnumadr >= 0) {
- p->Cadr[p->Cnumadr] += op*n;
- (void) getrel(p, prt);
- } else {
- p->Cadr[p->Cnumadr] += j;
- }
- }
- return (0);
-}
-
-static int
-getmark(struct Comd *p, int prt)
-{
- char c;
-
- if ((c = peekc()) < 'a' || c > 'z')
- return (err(prt, "bad mark"));
- (void) mygetc();
-
- if (!mark[c])
- return (err(prt, "undefined mark"));
- p->Cadr[++p->Cnumadr] = mark[c];
- return (0);
-}
-
-static int
-getrex(struct Comd *p, int prt, char c)
-{
- int down, wrap, start;
-
- if (peekc() == c)
- (void) mygetc();
- else if (getstr(prt, currex, c, 0, 1))
- return (-1);
-
- switch (c) {
- case '/': down = 1; wrap = 1; break;
- case '?': down = 0; wrap = 1; break;
- case '>': down = 1; wrap = 0; break;
- case '<': down = 0; wrap = 0; break;
- }
-
- if (p->Csep == ';')
- start = p->Cadr[0];
- else
- start = Dot;
-
- if ((p->Cadr[++p->Cnumadr] = hunt(prt, currex, start, down, wrap, 0))
- < 0)
- return (-1);
- return (0);
-}
-
-static int
-hunt(int prt, char rex[], int start, int down, int wrap, int errsok)
-{
- int i, end1, incr;
- int start1, start2;
- char line[BFSBUF];
-
- if (down) {
- start1 = start + 1;
- end1 = Dollar;
- start2 = 1;
- incr = 1;
- } else {
- start1 = start - 1;
- end1 = 1;
- start2 = Dollar;
- incr = -1;
- }
-
- rebuf = compile(rex, (char *)0, (char *)0);
- if (regerrno)
- (void) regerr(regerrno);
- else
- if (rebuf)
- free(rebuf);
-
- for (i = start1; i != end1+incr; i += incr) {
- bigread(i, line);
- if (step(line, rebuf)) {
- return (i);
- }
- }
-
- if (!wrap)
- return (errsok?-1:err(prt, "not found"));
-
- for (i = start2; i != start1; i += incr) {
- bigread(i, line);
- if (step(line, rebuf)) {
- return (i);
- }
- }
-
- return (errsok?-1:err(prt, "not found"));
-}
-
-static int
-jump(int prt, char label[])
-{
- char *l;
- char line[256];
-
- if (infildes == 0 && tty)
- return (err(prt, "jump on tty"));
- if (infildes == 100)
- intptr = internal;
- else
- (void) lseek(infildes, 0L, 0);
-
- (void) snprintf(strtmp,
- sizeof (strtmp) * sizeof (char), "^: *%s$", label);
- rebuf = compile(strtmp, (char *)0, (char *)0);
- if (regerrno) {
- (void) regerr(regerrno);
- return (-1);
- }
-
- for (l = line; readc(infildes, l); l++) {
- if (*l == '\n') {
- *l = '\0';
- if (step(line, rebuf)) {
- charbuf = '\n';
- return (peeked = 0);
- }
- l = line - 1;
- }
- }
-
- return (err(prt, "label not found"));
-}
-
-static int
-getstr(int prt, char buf[], char brk, char ignr, int nonl)
-{
- char *b, c, prevc;
-
- prevc = 0;
- for (b = buf; c = peekc(); prevc = c) {
- if (c == '\n') {
- if (prevc == '\\' && (!flag3)) *(b-1) = mygetc();
- else if (prevc == '\\' && flag3) {
- *b++ = mygetc();
- } else if (nonl)
- break;
- else
- return (*b = '\0');
- } else {
- (void) mygetc();
- if (c == brk) {
- if (prevc == '\\') *(b-1) = c;
- else return (*b = '\0');
- } else if (b != buf || c != ignr) *b++ = c;
- }
- }
- return (err(prt, "syntax"));
-}
-
-static int
-regerr(int c)
-{
- if (prompt) {
- switch (c) {
- case 11: (void) printf("Range endpoint too large.\n");
- break;
- case 16: (void) printf("Bad number.\n");
- break;
- case 25: (void) printf("``\\digit'' out of range.\n");
- break;
- case 41: (void) printf("No remembered search string.\n");
- break;
- case 42: (void) printf("() imbalance.\n");
- break;
- case 43: (void) printf("Too many (.\n");
- break;
- case 44: (void) printf("More than 2 numbers given in { }.\n");
- break;
- case 45: (void) printf("} expected after \\.\n");
- break;
- case 46: (void) printf("First number exceeds second in { }.\n");
- break;
- case 49: (void) printf("[] imbalance.\n");
- break;
- case 50: (void) printf("Regular expression overflow.\n");
- break;
- case 67: (void) printf("Illegal byte sequence.\n");
- break;
- default: (void) printf("RE error.\n");
- break;
- }
- } else {
- (void) printf("?\n");
- }
- return (-1);
-}
-
-static int
-err(int prt, char msg[])
-{
- if (prt) (prompt? (void) printf("%s\n", msg): (void) printf("?\n"));
- if (infildes != 0) {
- infildes = pop(fstack);
- charbuf = '\n';
- peeked = 0;
- flag3 = 0;
- flag2 = 0;
- flag = 0;
- }
- return (-1);
-}
-
-static char
-mygetc()
-{
- if (!peeked) {
- while ((!(infildes == oldfd && flag)) && (!flag1) &&
- (!readc(infildes, &charbuf))) {
- if (infildes == 100 && (!flag)) flag1 = 1;
- if ((infildes = pop(fstack)) == -1) quit();
- if ((!flag1) && infildes == 0 && flag3 && prompt)
- (void) printf("*");
- }
- if (infildes == oldfd && flag) flag2 = 0;
- flag1 = 0;
- } else peeked = 0;
- return (charbuf);
-}
-
-static int
-readc(int f, char *c)
-{
- if (f == 100) {
- if (!(*c = *intptr++)) {
- intptr--;
- charbuf = '\n';
- return (0);
- }
- } else if (read(f, c, 1) != 1) {
- (void) close(f);
- charbuf = '\n';
- return (0);
- }
- return (1);
-}
-
-static int
-percent(char line[256])
-{
- char *lp, *var;
- char *front, *per, c[2], *olp, p[2], fr[256];
- int i, j;
-
- per = p;
- var = c;
- front = fr;
- j = 0;
- while (!j) {
- j = 1;
- olp = line;
- intptr = internal;
- while (step(olp, perbuf)) {
- while (loc1 < loc2) *front++ = *loc1++;
- *(--front) = '\0';
- front = fr;
- *per++ = '%';
- *per = '\0';
- per = p;
- *var = *loc2;
- if ((i = 1 + strlen(front)) >= 2 && fr[i-2] == '\\') {
- (void) strcat(front, "");
- --intptr;
- (void) strcat(per, "");
- } else {
- if (!(*var >= '0' && *var <= '9'))
- return (err(1, "usage: %digit"));
- (void) strcat(front, "");
- (void) strcat(varray[*var-'0'], "");
- j = 0;
- loc2++; /* Compensate for removing --lp above */
- }
- olp = loc2;
- }
- (void) strcat(olp, "");
- *intptr = '\0';
- if (!j) {
- intptr = internal;
- lp = line;
- (void)
- strncpy(intptr, lp, sizeof (intptr)*sizeof (char));
- }
- }
- return (0);
-}
-
-static int
-newfile(int prt, char f[])
-{
- int fd;
-
- if (!*f) {
- if (flag != 0) {
- oldfd = infildes;
- intptr = comdlist;
- } else intptr = internal;
- fd = 100;
- } else if ((fd = open(f, 0)) < 0) {
- (void) snprintf(strtmp, sizeof (strtmp) * sizeof (char),
- "cannot open %s", f);
- return (err(prt, strtmp));
- }
-
- push(fstack, infildes);
- if (flag4) oldfd = fd;
- infildes = fd;
- return (peeked = 0);
-}
-
-static void
-push(int s[], int d)
-{
- s[++s[0]] = d;
-}
-
-static int
-pop(int s[])
-{
- return (s[s[0]--]);
-}
-
-static int
-peekc()
-{
- int c;
-
- c = mygetc();
- peeked = 1;
-
- return (c);
-}
-
-static void
-eat()
-{
- if (charbuf != '\n')
- while (mygetc() != '\n');
- peeked = 0;
-}
-
-static int
-more()
-{
- if (mygetc() != '\n')
- return (err(1, "syntax"));
- return (0);
-}
-
-static void
-quit()
-{
- exit(0);
-}
-
-static void
-out(char *ln)
-{
- char *rp, *wp, prev;
- int w, width;
- char *oldrp;
- wchar_t cl;
- int p;
- ptrdiff_t lim;
- if (crunch > 0) {
-
- ln = untab(ln);
- rp = wp = ln - 1;
- prev = ' ';
-
- while (*++rp) {
- if (prev != ' ' || *rp != ' ')
- *++wp = *rp;
- prev = *rp;
- }
- *++wp = '\n';
- lim = (ptrdiff_t)wp - (ptrdiff_t)ln;
- *++wp = '\0';
-
- if (*ln == '\n')
- return;
- } else
- ln[lim = strlen(ln)] = '\n';
-
- if (MB_CUR_MAX <= 1) {
- if (lim > trunc)
- ln[lim = trunc] = '\n';
- } else {
- if ((trunc < (BFSBUF -1)) || (lim > trunc)) {
- w = 0;
- oldrp = rp = ln;
- /*CONSTCOND*/while (1) {
- if ((p = mbtowc(&cl, rp, MB_LEN_MAX)) == 0) {
- break;
- }
- if (p == -1) {
- width = p = 1;
- } else {
- width = scrwidth(cl);
- if (width == 0)
- width = 1;
- }
- if ((w += width) > trunc)
- break;
- rp += p;
- }
- *rp = '\n';
- lim = (ptrdiff_t)rp - (ptrdiff_t)oldrp;
- }
- }
-
- outcnt += write(outfildes, ln, lim+1);
-}
-
-static char *
-untab(char l[])
-{
- static char line[BFSBUF];
- char *q, *s;
-
- s = l;
- q = line;
- do {
- if (*s == '\t')
- do
- *q++ = ' ';
- while (((ptrdiff_t)q-(ptrdiff_t)line)%8);
- else *q++ = *s;
- } while (*s++);
- return (line);
-}
-
-/*
- * Function to convert ascii string to integer. Converts
- * positive numbers only. Returns -1 if non-numeric
- * character encountered.
- */
-
-static int
-patoi(char *b)
-{
- int i;
- char *a;
-
- a = b;
- i = 0;
- while (*a >= '0' && *a <= '9') i = 10 * i + *a++ - '0';
-
- if (*a)
- return (-1);
- return (i);
-}
-
-/*
- * Compares 2 strings. Returns 1 if equal, 0 if not.
- */
-
-static int
-equal(char *a, char *b)
-{
- char *x, *y;
-
- x = a;
- y = b;
- while (*x == *y++)
- if (*x++ == 0)
- return (1);
- return (0);
-}
diff --git a/usr/src/man/man1/Makefile b/usr/src/man/man1/Makefile
index 0820ad8a26..4503a71450 100644
--- a/usr/src/man/man1/Makefile
+++ b/usr/src/man/man1/Makefile
@@ -45,7 +45,6 @@ MANFILES= acctcom.1 \
basename.1 \
bc.1 \
bdiff.1 \
- bfs.1 \
break.1 \
builtin.1 \
cal.1 \
diff --git a/usr/src/man/man1/bfs.1 b/usr/src/man/man1/bfs.1
deleted file mode 100644
index 4c36bf0b62..0000000000
--- a/usr/src/man/man1/bfs.1
+++ /dev/null
@@ -1,346 +0,0 @@
-'\" te
-.\" Copyright (c) 1996, Sun Microsystems, Inc. All Rights Reserved
-.\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License"). You may not use this file except in compliance with the License.
-.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing. See the License for the specific language governing permissions and limitations under the License.
-.\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE. If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
-.TH BFS 1 "May 20, 1996"
-.SH NAME
-bfs \- big file scanner
-.SH SYNOPSIS
-.LP
-.nf
-\fB/usr/bin/bfs\fR [\fB-\fR] \fIfilename\fR
-.fi
-
-.SH DESCRIPTION
-.sp
-.LP
-The \fBbfs\fR command is (almost) like \fBed\fR(1) except that it is read-only
-and processes much larger files. Files can be up to 1024K bytes and 32K lines,
-with up to 512 characters, including new-line, per line (255 for 16-bit
-machines). \fBbfs\fR is usually more efficient than \fBed\fR(1) for scanning a
-file, since the file is not copied to a buffer. It is most useful for
-identifying sections of a large file where \fBcsplit\fR(1) can be used to
-divide it into more manageable pieces for editing.
-.sp
-.LP
-Normally, the size of the file being scanned is printed, as is the size of any
-file written with the \fBw\fR (write) command. The optional \fB\(mi\fR
-suppresses printing of sizes. Input is prompted with \fB*\fR if \fBP\fR and a
-carriage return are typed, as in \fBed\fR(1). Prompting can be turned off again
-by inputting another \fBP\fR and carriage return. Note that messages are given
-in response to errors if prompting is turned on.
-.sp
-.LP
-All address expressions described under \fBed\fR(1) are supported. In addition,
-regular expressions may be surrounded with two symbols besides \fB/\fR and
-\fB?\fR:
-.sp
-.ne 2
-.na
-\fB\fB>\fR\fR
-.ad
-.RS 5n
-indicates downward search without wrap-around, and
-.RE
-
-.sp
-.ne 2
-.na
-\fB\fB<\fR\fR
-.ad
-.RS 5n
-indicates upward search without wrap-around.
-.RE
-
-.sp
-.LP
-There is a slight difference in mark names; that is, only the letters \fBa\fR
-through \fBz\fR may be used, and all 26 marks are remembered.
-.SS "bfs Commands"
-.sp
-.LP
-The \fBe\fR, \fBg\fR, \fBv\fR, \fBk\fR, \fBp\fR, \fBq\fR, \fBw\fR, \fB=\fR,
-\fB!\fR, and null commands operate as described under \fBed\fR(1). Commands
-such as \fB\(mi\(mi\(mi\fR, \fB+++\(mi\fR, \fB+++=\fR, \fB\(mi12\fR, and
-\fB+4p\fR are accepted. Note that \fB1,10p\fR and \fB1,10\fR will both print
-the first ten lines. The \fBf\fR command only prints the name of the file being
-scanned; there is no \fIremembered\fR file name. The \fB w\fR command is
-independent of output diversion, truncation, or crunching (see the \fBxo\fR,\fB
-xt\fR, and\fB xc\fR commands, below). The following additional commands are
-available:
-.sp
-.ne 2
-.na
-\fB\fBxf\fR\fI file\fR\fR
-.ad
-.sp .6
-.RS 4n
-Further commands are taken from the named \fBfile\fR. When an end-of-file is
-reached, an interrupt signal is received or an error occurs, reading resumes
-with the file containing the \fBxf\fR. The \fBxf\fR commands may be nested to a
-depth of 10.
-.RE
-
-.sp
-.ne 2
-.na
-\fB\fBxn\fR\fR
-.ad
-.sp .6
-.RS 4n
-List the marks currently in use (marks are set by the \fBk\fR command).
-.RE
-
-.sp
-.ne 2
-.na
-\fB\fBxo\fR\fI [\|file\|]\fR\fR
-.ad
-.sp .6
-.RS 4n
-Further output from the \fBp\fR and null commands is diverted to the named
-\fBfile\fR, which, if necessary, is created mode 666 (readable and writable by
-everyone), unless your \fBumask\fR setting (see \fBumask\fR(1)) dictates
-otherwise. If \fBfile\fR is missing, output is diverted to the standard output.
-Note that each diversion causes truncation or creation of the file.
-.RE
-
-.sp
-.ne 2
-.na
-\fB\fB:\fR\fI label\fR\fR
-.ad
-.sp .6
-.RS 4n
-This positions a \fIlabel\fR in a command file. The \fIlabel\fR is terminated
-by new-line, and blanks between the \fB:\fR (colon) and the start of the
-\fIlabel\fR are ignored. This command may also be used to insert comments into
-a command file, since labels need not be referenced.
-.RE
-
-.sp
-.ne 2
-.na
-\fB( \fB\&. \fR, \fB\&. \fR)\fBxb\fR/\fIregular expression\fR/\fIlabel\fR\fR
-.ad
-.sp .6
-.RS 4n
-A jump (either upward or downward) is made to \fIlabel\fR if the command
-succeeds. It fails under any of the following conditions:
-.RS +4
-.TP
-1.
-Either address is not between \fB1\fR and \fB$\fR.
-.RE
-.RS +4
-.TP
-2.
-The second address is less than the first.
-.RE
-.RS +4
-.TP
-3.
-The regular expression does not match at least one line in the specified
-range, including the first and last lines.
-.RE
-On success, \fB\&.\fR (dot) is set to the line matched and a jump is made to
-\fIlabel\fR. This command is the only one that does not issue an error message
-on bad addresses, so it may be used to test whether addresses are bad before
-other commands are executed. Note that the command, \fBxb/^/ label\fR, is an
-unconditional jump.
-.sp
-The \fBxb\fR command is allowed only if it is read from someplace other than a
-terminal. If it is read from a pipe, only a downward jump is possible.
-.RE
-
-.sp
-.ne 2
-.na
-\fB\fBxt\fR\fI number\fR\fR
-.ad
-.sp .6
-.RS 4n
-Output from the \fBp\fR and null commands is truncated to, at most,
-\fInumber\fR characters. The initial number is \fB255\fR.
-.RE
-
-.sp
-.ne 2
-.na
-\fB\fBxv\fR[\fIdigit\fR]\|[\fIspaces\fR]\|[\fIvalue\fR]\fR
-.ad
-.sp .6
-.RS 4n
-The variable name is the specified \fIdigit\fR following the \fBxv\fR. The
-commands \fBxv5100\fR or \fBxv5 100\fR both assign the value \fB100\fR to the
-variable \fB5\fR. The command \fBxv61,100p\fR assigns the value \fB1,100p\fR to
-the variable \fB6\fR. To reference a variable, put a \fB%\fR in front of the
-variable name. For example, using the above assignments for variables \fB5\fR
-and \fB6\fR:
-.sp
-.in +2
-.nf
-1,%5p
-1,%5
-%6
-.fi
-.in -2
-.sp
-
-will all print the first 100 lines.
-.sp
-\fBg/%5/p\fR
-.sp
-would globally search for the characters \fB100\fR and print each line
-containing a match. To escape the special meaning of \fB%\fR, a \fB\e\fR must
-precede it.
-.sp
-\fBg/".*\e%\fR[cds]\fB/p\fR
-.sp
-could be used to match and list %c, %d, or %s formats (for example,
-"printf"-like statements) of characters, decimal integers, or strings. Another
-feature of the \fBxv\fR command is that the first line of output from a
-\fBUNIX\fR system command can be stored into a variable. The only requirement
-is that the first character of \fIvalue\fR be an \fB!\fR. For example:
-.sp
-.in +2
-.nf
-\fB\&.w junk
-xv5!cat junk
-!rm junk
-!echo "%5"
-xv6!expr %6 + 1\fR
-.fi
-.in -2
-.sp
-
-would put the current line into variable \fB35\fR, print it, and increment the
-variable \fB36\fR by one. To escape the special meaning of \fB!\fR as the first
-character of \fIvalue\fR, precede it with a \fB\e\fR\&.
-.sp
-\fBxv7\e!date\fR
-.sp
-stores the value \fB!date\fR into variable \fB7\fR.
-.RE
-
-.sp
-.ne 2
-.na
-\fB\fBxbz\fR\fI label\fR\fR
-.ad
-.br
-.na
-\fB\fBxbn\fR\fI label\fR\fR
-.ad
-.sp .6
-.RS 4n
-These two commands will test the last saved \fIreturn code\fR from the
-execution of a \fBUNIX\fR system command (\fB!\fR\fBcommand\fR) or nonzero
-value, respectively, to the specified label. The two examples below both
-search for the next five lines containing the string \fBsize\fR:
-.sp
-.ne 2
-.na
-\fBExample 1:\fR
-.ad
-.RS 14n
-.sp
-.in +2
-.nf
-\fBxv55
-: l
-/size/
-xv5!expr %5 \(mi 1
-!if 0%5 != 0 exit 2
-xbn l\fR
-.fi
-.in -2
-.sp
-
-.RE
-
-.sp
-.ne 2
-.na
-\fBExample 2:\fR
-.ad
-.RS 14n
-.sp
-.in +2
-.nf
-\fBxv45
-: l
-/size/
-xv4!expr %4 \(mi 1
-!if 0%4 = 0 exit 2
-xbz l\fR
-.fi
-.in -2
-.sp
-
-.RE
-
-.RE
-
-.sp
-.ne 2
-.na
-\fB\fBxc\fR [\fBswitch\fR]\fR
-.ad
-.sp .6
-.RS 4n
-If \fBswitch\fR is \fB1\fR, output from the \fBp\fR and null commands is
-crunched; if \fBswitch\fR is \fB0\fR, it is not. Without an argument, \fBxc\fR
-reverses \fBswitch\fR. Initially, \fBswitch\fR is set for no crunching.
-Crunched output has strings of tabs and blanks reduced to one blank and blank
-lines suppressed.
-.RE
-
-.SH OPERANDS
-.sp
-.LP
-The following operand is supported:
-.sp
-.ne 2
-.na
-\fB\fIfilename\fR\fR
-.ad
-.RS 12n
-Any file up to 1024K bytes and 32K lines, with up to 512 characters, including
-new-line, per line (255 for 16-bit machines). \fIfilename\fR can be a section
-of a larger file which has been divided into more manageable sections for
-editing by the use of \fBcsplit\fR(1).
-.RE
-
-.SH EXIT STATUS
-.sp
-.LP
-The following exit values are returned:
-.sp
-.ne 2
-.na
-\fB\fB0\fR\fR
-.ad
-.RS 6n
-Successful completion without any file or command errors.
-.RE
-
-.sp
-.ne 2
-.na
-\fB\fB>0\fR\fR
-.ad
-.RS 6n
-An error occurred.
-.RE
-
-.SH SEE ALSO
-.sp
-.LP
-\fBcsplit\fR(1), \fBed\fR(1), \fBumask\fR(1), \fBattributes\fR(5)
-.SH DIAGNOSTICS
-.sp
-.LP
-Message is \fB?\fR for errors in commands, if prompting is turned off.
-Self-explanatory error messages are displayed when prompting is on.
diff --git a/usr/src/man/man1/ed.1 b/usr/src/man/man1/ed.1
index 922aaa12bf..e601197692 100644
--- a/usr/src/man/man1/ed.1
+++ b/usr/src/man/man1/ed.1
@@ -1159,7 +1159,7 @@ Interface Stability Standard
.SH SEE ALSO
.sp
.LP
-\fBbfs\fR(1), \fBedit\fR(1), \fBex\fR(1), \fBgrep\fR(1), \fBksh\fR(1),
+\fBedit\fR(1), \fBex\fR(1), \fBgrep\fR(1), \fBksh\fR(1),
\fBsed\fR(1), \fBsh\fR(1), \fBstty\fR(1), \fBumask\fR(1), \fBvi\fR(1),
\fBfspec\fR(4), \fBattributes\fR(5), \fBenviron\fR(5), \fBlargefile\fR(5),
\fBregex\fR(5), \fBstandards\fR(5)
diff --git a/usr/src/pkg/manifests/system-extended-system-utilities.mf b/usr/src/pkg/manifests/system-extended-system-utilities.mf
index 22b4f5a26f..652008d327 100644
--- a/usr/src/pkg/manifests/system-extended-system-utilities.mf
+++ b/usr/src/pkg/manifests/system-extended-system-utilities.mf
@@ -96,7 +96,6 @@ file path=usr/bin/banner mode=0555
file path=usr/bin/batch mode=0555
file path=usr/bin/bc mode=0555
file path=usr/bin/bdiff mode=0755
-file path=usr/bin/bfs mode=0555
file path=usr/bin/cal mode=0555
file path=usr/bin/calendar mode=0555
file path=usr/bin/col mode=0555
@@ -166,7 +165,6 @@ file path=usr/share/man/man1/awk.1
file path=usr/share/man/man1/banner.1
file path=usr/share/man/man1/bc.1
file path=usr/share/man/man1/bdiff.1
-file path=usr/share/man/man1/bfs.1
file path=usr/share/man/man1/cal.1
file path=usr/share/man/man1/calendar.1
file path=usr/share/man/man1/col.1