aboutsummaryrefslogtreecommitdiffstats
path: root/textproc
diff options
context:
space:
mode:
authorvd <vd@FreeBSD.org>2006-07-04 22:04:31 +0800
committervd <vd@FreeBSD.org>2006-07-04 22:04:31 +0800
commit520e62a22589da347eed0e7dfad8d53ab14c7be6 (patch)
treec8cf57234d557daffedefa8aefd40f502280d2a6 /textproc
parent7ea09cb3638eaa1850d8fcb541603d4d2ff0b70d (diff)
downloadfreebsd-ports-graphics-520e62a22589da347eed0e7dfad8d53ab14c7be6.tar.gz
freebsd-ports-graphics-520e62a22589da347eed0e7dfad8d53ab14c7be6.tar.zst
freebsd-ports-graphics-520e62a22589da347eed0e7dfad8d53ab14c7be6.zip
Remove expired leaf ports:
2006-07-01 emulators/linux_base-fc3 2006-06-15 misc/linux-opengroupware 2006-07-01 net/opengk 2006-07-01 security/p5-Crypt-OpenPGP 2006-07-01 textproc/sed_inplace 2006-07-01 textproc/xml4j 2006-07-01 x11-wm/aewm++
Diffstat (limited to 'textproc')
-rw-r--r--textproc/Makefile2
-rw-r--r--textproc/sed_inplace/Makefile39
-rw-r--r--textproc/sed_inplace/pkg-descr2
-rw-r--r--textproc/sed_inplace/src/Makefile12
-rw-r--r--textproc/sed_inplace/src/compile.c871
-rw-r--r--textproc/sed_inplace/src/defs.h136
-rw-r--r--textproc/sed_inplace/src/extern.h58
-rw-r--r--textproc/sed_inplace/src/main.c467
-rw-r--r--textproc/sed_inplace/src/misc.c73
-rw-r--r--textproc/sed_inplace/src/process.c648
-rw-r--r--textproc/xml4j/Makefile75
-rw-r--r--textproc/xml4j/distinfo3
-rw-r--r--textproc/xml4j/pkg-descr24
13 files changed, 0 insertions, 2410 deletions
diff --git a/textproc/Makefile b/textproc/Makefile
index 3ba94954a28..d32ea00844d 100644
--- a/textproc/Makefile
+++ b/textproc/Makefile
@@ -767,7 +767,6 @@
SUBDIR += scrollkeeper
SUBDIR += sdf
SUBDIR += sdocbook-xml
- SUBDIR += sed_inplace
SUBDIR += senna
SUBDIR += sgmlformat
SUBDIR += sgmls
@@ -862,7 +861,6 @@
SUBDIR += xml-lite.el
SUBDIR += xml-parse.el
SUBDIR += xml2rfc
- SUBDIR += xml4j
SUBDIR += xmlada
SUBDIR += xmlcatmgr
SUBDIR += xmlcharent
diff --git a/textproc/sed_inplace/Makefile b/textproc/sed_inplace/Makefile
deleted file mode 100644
index e899f07472f..00000000000
--- a/textproc/sed_inplace/Makefile
+++ /dev/null
@@ -1,39 +0,0 @@
-# New ports collection makefile for: sed_inplace
-# Date created: 17 June 2002
-# Whom: Maxim Sobolev <sobomax@FreeBSD.org>
-#
-# $FreeBSD$
-#
-
-PORTNAME= sed_inplace
-PORTVERSION= 2002.10.19
-CATEGORIES= textproc
-MASTER_SITES= #
-DISTNAME= #
-
-MAINTAINER= ports@FreeBSD.org
-COMMENT= A modified version of the sed(1) which can do in-place editing of files
-
-DEPRECATED= This port is not required anymore
-EXPIRATION_DATE=2006-07-01
-
-NO_WRKSUBDIR= yes
-PLIST_FILES= bin/sed_inplace
-
-MAKEFILE= ${PKGDIR}/src/Makefile
-MAKE_ENV= PKGDIR="${PKGDIR}"
-
-.ifdef USE_REINPLACE
-IGNORE= cannot be installed: you have `USE_REINPLACE' variable defined either in environment or in make(1) arguments. Please undefine and try again
-.endif
-
-.include <bsd.port.pre.mk>
-
-.if ${OSVERSION} > 500033
-IGNORE= is in the base system
-.endif
-
-do-install:
- ${INSTALL_PROGRAM} ${WRKSRC}/sed_inplace ${PREFIX}/bin
-
-.include <bsd.port.post.mk>
diff --git a/textproc/sed_inplace/pkg-descr b/textproc/sed_inplace/pkg-descr
deleted file mode 100644
index 51ce4f9a5e4..00000000000
--- a/textproc/sed_inplace/pkg-descr
+++ /dev/null
@@ -1,2 +0,0 @@
-Modified version of the FreeBSD sed(1) command which can do in-place editing
-of files.
diff --git a/textproc/sed_inplace/src/Makefile b/textproc/sed_inplace/src/Makefile
deleted file mode 100644
index b3b3e410f6d..00000000000
--- a/textproc/sed_inplace/src/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-# $FreeBSD$
-
-.PATH: ${PKGDIR}/src
-
-PROG= sed_inplace
-SRCS= compile.c main.c misc.c process.c
-
-CFLAGS+= -I${PKGDIR}/src
-
-MAN1=
-
-.include <bsd.prog.mk>
diff --git a/textproc/sed_inplace/src/compile.c b/textproc/sed_inplace/src/compile.c
deleted file mode 100644
index 19c421c6fe9..00000000000
--- a/textproc/sed_inplace/src/compile.c
+++ /dev/null
@@ -1,871 +0,0 @@
-/*-
- * Copyright (c) 1992 Diomidis Spinellis.
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Diomidis Spinellis of Imperial College, University of London.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 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
- * SUCH DAMAGE.
- */
-
-#ifndef lint
-static const char sccsid[] = "@(#)compile.c 8.1 (Berkeley) 6/6/93";
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <ctype.h>
-#include <err.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <regex.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "defs.h"
-#include "extern.h"
-
-#define LHSZ 128
-#define LHMASK (LHSZ - 1)
-static struct labhash {
- struct labhash *lh_next;
- u_int lh_hash;
- struct s_command *lh_cmd;
- int lh_ref;
-} *labels[LHSZ];
-
-static char *compile_addr(char *, struct s_addr *);
-static char *compile_ccl(char **, char *);
-static char *compile_delimited(char *, char *);
-static char *compile_flags(char *, struct s_subst *);
-static char *compile_re(char *, regex_t **);
-static char *compile_subst(char *, struct s_subst *);
-static char *compile_text(void);
-static char *compile_tr(char *, char **);
-static struct s_command
- **compile_stream(struct s_command **);
-static char *duptoeol(char *, const char *);
-static void enterlabel(struct s_command *);
-static struct s_command
- *findlabel(char *);
-static void fixuplabel(struct s_command *, struct s_command *);
-static void uselabel(void);
-
-/*
- * Command specification. This is used to drive the command parser.
- */
-struct s_format {
- char code; /* Command code */
- int naddr; /* Number of address args */
- enum e_args args; /* Argument type */
-};
-
-static struct s_format cmd_fmts[] = {
- {'{', 2, GROUP},
- {'}', 0, ENDGROUP},
- {'a', 1, TEXT},
- {'b', 2, BRANCH},
- {'c', 2, TEXT},
- {'d', 2, EMPTY},
- {'D', 2, EMPTY},
- {'g', 2, EMPTY},
- {'G', 2, EMPTY},
- {'h', 2, EMPTY},
- {'H', 2, EMPTY},
- {'i', 1, TEXT},
- {'l', 2, EMPTY},
- {'n', 2, EMPTY},
- {'N', 2, EMPTY},
- {'p', 2, EMPTY},
- {'P', 2, EMPTY},
- {'q', 1, EMPTY},
- {'r', 1, RFILE},
- {'s', 2, SUBST},
- {'t', 2, BRANCH},
- {'w', 2, WFILE},
- {'x', 2, EMPTY},
- {'y', 2, TR},
- {'!', 2, NONSEL},
- {':', 0, LABEL},
- {'#', 0, COMMENT},
- {'=', 1, EMPTY},
- {'\0', 0, COMMENT},
-};
-
-/* The compiled program. */
-struct s_command *prog;
-
-/*
- * Compile the program into prog.
- * Initialise appends.
- */
-void
-compile()
-{
- *compile_stream(&prog) = NULL;
- fixuplabel(prog, NULL);
- uselabel();
- if (appendnum == 0)
- appends = NULL;
- else if ((appends = malloc(sizeof(struct s_appends) * appendnum)) ==
- NULL)
- err(1, "malloc");
- if ((match = malloc((maxnsub + 1) * sizeof(regmatch_t))) == NULL)
- err(1, "malloc");
-}
-
-#define EATSPACE() do { \
- if (p) \
- while (*p && isspace((unsigned char)*p)) \
- p++; \
- } while (0)
-
-static struct s_command **
-compile_stream(link)
- struct s_command **link;
-{
- char *p;
- static char lbuf[_POSIX2_LINE_MAX + 1]; /* To save stack */
- struct s_command *cmd, *cmd2, *stack;
- struct s_format *fp;
- int naddr; /* Number of addresses */
-
- stack = 0;
- for (;;) {
- if ((p = cu_fgets(lbuf, sizeof(lbuf), NULL)) == NULL) {
- if (stack != 0)
- errx(1, "%lu: %s: unexpected EOF (pending }'s)",
- linenum, fname);
- return (link);
- }
-
-semicolon: EATSPACE();
- if (p) {
- if (*p == '#' || *p == '\0')
- continue;
- else if (*p == ';') {
- p++;
- goto semicolon;
- }
- }
- if ((*link = cmd = malloc(sizeof(struct s_command))) == NULL)
- err(1, "malloc");
- link = &cmd->next;
- cmd->nonsel = cmd->inrange = 0;
- /* First parse the addresses */
- naddr = 0;
-
-/* Valid characters to start an address */
-#define addrchar(c) (strchr("0123456789/\\$", (c)))
- if (addrchar(*p)) {
- naddr++;
- if ((cmd->a1 = malloc(sizeof(struct s_addr))) == NULL)
- err(1, "malloc");
- p = compile_addr(p, cmd->a1);
- EATSPACE(); /* EXTENSION */
- if (*p == ',') {
- p++;
- EATSPACE(); /* EXTENSION */
- naddr++;
- if ((cmd->a2 = malloc(sizeof(struct s_addr)))
- == NULL)
- err(1, "malloc");
- p = compile_addr(p, cmd->a2);
- EATSPACE();
- } else
- cmd->a2 = 0;
- } else
- cmd->a1 = cmd->a2 = 0;
-
-nonsel: /* Now parse the command */
- if (!*p)
- errx(1, "%lu: %s: command expected", linenum, fname);
- cmd->code = *p;
- for (fp = cmd_fmts; fp->code; fp++)
- if (fp->code == *p)
- break;
- if (!fp->code)
- errx(1, "%lu: %s: invalid command code %c", linenum, fname, *p);
- if (naddr > fp->naddr)
- errx(1,
- "%lu: %s: command %c expects up to %d address(es), found %d",
- linenum, fname, *p, fp->naddr, naddr);
- switch (fp->args) {
- case NONSEL: /* ! */
- p++;
- EATSPACE();
- cmd->nonsel = ! cmd->nonsel;
- goto nonsel;
- case GROUP: /* { */
- p++;
- EATSPACE();
- cmd->next = stack;
- stack = cmd;
- link = &cmd->u.c;
- if (*p)
- goto semicolon;
- break;
- case ENDGROUP:
- /*
- * Short-circuit command processing, since end of
- * group is really just a noop.
- */
- cmd->nonsel = 1;
- if (stack == 0)
- errx(1, "%lu: %s: unexpected }", linenum, fname);
- cmd2 = stack;
- stack = cmd2->next;
- cmd2->next = cmd;
- /*FALLTHROUGH*/
- case EMPTY: /* d D g G h H l n N p P q x = \0 */
- p++;
- EATSPACE();
- if (*p == ';') {
- p++;
- link = &cmd->next;
- goto semicolon;
- }
- if (*p)
- errx(1, "%lu: %s: extra characters at the end of %c command",
- linenum, fname, cmd->code);
- break;
- case TEXT: /* a c i */
- p++;
- EATSPACE();
- if (*p != '\\')
- errx(1,
-"%lu: %s: command %c expects \\ followed by text", linenum, fname, cmd->code);
- p++;
- EATSPACE();
- if (*p)
- errx(1,
- "%lu: %s: extra characters after \\ at the end of %c command",
- linenum, fname, cmd->code);
- cmd->t = compile_text();
- break;
- case COMMENT: /* \0 # */
- break;
- case WFILE: /* w */
- p++;
- EATSPACE();
- if (*p == '\0')
- errx(1, "%lu: %s: filename expected", linenum, fname);
- cmd->t = duptoeol(p, "w command");
- if (aflag)
- cmd->u.fd = -1;
- else if ((cmd->u.fd = open(p,
- O_WRONLY|O_APPEND|O_CREAT|O_TRUNC,
- DEFFILEMODE)) == -1)
- err(1, "%s", p);
- break;
- case RFILE: /* r */
- p++;
- EATSPACE();
- if (*p == '\0')
- errx(1, "%lu: %s: filename expected", linenum, fname);
- else
- cmd->t = duptoeol(p, "read command");
- break;
- case BRANCH: /* b t */
- p++;
- EATSPACE();
- if (*p == '\0')
- cmd->t = NULL;
- else
- cmd->t = duptoeol(p, "branch");
- break;
- case LABEL: /* : */
- p++;
- EATSPACE();
- cmd->t = duptoeol(p, "label");
- if (strlen(p) == 0)
- errx(1, "%lu: %s: empty label", linenum, fname);
- enterlabel(cmd);
- break;
- case SUBST: /* s */
- p++;
- if (*p == '\0' || *p == '\\')
- errx(1,
-"%lu: %s: substitute pattern can not be delimited by newline or backslash",
- linenum, fname);
- if ((cmd->u.s = malloc(sizeof(struct s_subst))) == NULL)
- err(1, "malloc");
- p = compile_re(p, &cmd->u.s->re);
- if (p == NULL)
- errx(1,
- "%lu: %s: unterminated substitute pattern", linenum, fname);
- --p;
- p = compile_subst(p, cmd->u.s);
- p = compile_flags(p, cmd->u.s);
- EATSPACE();
- if (*p == ';') {
- p++;
- link = &cmd->next;
- goto semicolon;
- }
- break;
- case TR: /* y */
- p++;
- p = compile_tr(p, (char **)&cmd->u.y);
- EATSPACE();
- if (*p == ';') {
- p++;
- link = &cmd->next;
- goto semicolon;
- }
- if (*p)
- errx(1,
-"%lu: %s: extra text at the end of a transform command", linenum, fname);
- break;
- }
- }
-}
-
-/*
- * Get a delimited string. P points to the delimeter of the string; d points
- * to a buffer area. Newline and delimiter escapes are processed; other
- * escapes are ignored.
- *
- * Returns a pointer to the first character after the final delimiter or NULL
- * in the case of a non-terminated string. The character array d is filled
- * with the processed string.
- */
-static char *
-compile_delimited(p, d)
- char *p, *d;
-{
- char c;
-
- c = *p++;
- if (c == '\0')
- return (NULL);
- else if (c == '\\')
- errx(1, "%lu: %s: \\ can not be used as a string delimiter",
- linenum, fname);
- else if (c == '\n')
- errx(1, "%lu: %s: newline can not be used as a string delimiter",
- linenum, fname);
- while (*p) {
- if (*p == '[') {
- if ((d = compile_ccl(&p, d)) == NULL)
- errx(1, "%lu: %s: unbalanced brackets ([])", linenum, fname);
- continue;
- } else if (*p == '\\' && p[1] == '[') {
- *d++ = *p++;
- } else if (*p == '\\' && p[1] == c)
- p++;
- else if (*p == '\\' && p[1] == 'n') {
- *d++ = '\n';
- p += 2;
- continue;
- } else if (*p == '\\' && p[1] == '\\')
- *d++ = *p++;
- else if (*p == c) {
- *d = '\0';
- return (p + 1);
- }
- *d++ = *p++;
- }
- return (NULL);
-}
-
-
-/* compile_ccl: expand a POSIX character class */
-static char *
-compile_ccl(sp, t)
- char **sp;
- char *t;
-{
- int c, d;
- char *s = *sp;
-
- *t++ = *s++;
- if (*s == '^')
- *t++ = *s++;
- if (*s == ']')
- *t++ = *s++;
- for (; *s && (*t = *s) != ']'; s++, t++)
- if (*s == '[' && ((d = *(s+1)) == '.' || d == ':' || d == '=')) {
- *++t = *++s, t++, s++;
- for (c = *s; (*t = *s) != ']' || c != d; s++, t++)
- if ((c = *s) == '\0')
- return NULL;
- } else if (*s == '\\' && s[1] == 'n')
- *t = '\n', s++;
- return (*s == ']') ? *sp = ++s, ++t : NULL;
-}
-
-/*
- * Get a regular expression. P points to the delimiter of the regular
- * expression; repp points to the address of a regexp pointer. Newline
- * and delimiter escapes are processed; other escapes are ignored.
- * Returns a pointer to the first character after the final delimiter
- * or NULL in the case of a non terminated regular expression. The regexp
- * pointer is set to the compiled regular expression.
- * Cflags are passed to regcomp.
- */
-static char *
-compile_re(p, repp)
- char *p;
- regex_t **repp;
-{
- int eval;
- char re[_POSIX2_LINE_MAX + 1];
-
- p = compile_delimited(p, re);
- if (p && strlen(re) == 0) {
- *repp = NULL;
- return (p);
- }
- if ((*repp = malloc(sizeof(regex_t))) == NULL)
- err(1, "malloc");
- if (p && (eval = regcomp(*repp, re, rflags)) != 0)
- errx(1, "%lu: %s: RE error: %s",
- linenum, fname, strregerror(eval, *repp));
- if (maxnsub < (*repp)->re_nsub)
- maxnsub = (*repp)->re_nsub;
- return (p);
-}
-
-/*
- * Compile the substitution string of a regular expression and set res to
- * point to a saved copy of it. Nsub is the number of parenthesized regular
- * expressions.
- */
-static char *
-compile_subst(p, s)
- char *p;
- struct s_subst *s;
-{
- static char lbuf[_POSIX2_LINE_MAX + 1];
- int asize, size;
- u_char ref;
- char c, *text, *op, *sp;
- int more = 1, sawesc = 0;
-
- c = *p++; /* Terminator character */
- if (c == '\0')
- return (NULL);
-
- s->maxbref = 0;
- s->linenum = linenum;
- asize = 2 * _POSIX2_LINE_MAX + 1;
- if ((text = malloc(asize)) == NULL)
- err(1, "malloc");
- size = 0;
- do {
- op = sp = text + size;
- for (; *p; p++) {
- if (*p == '\\' || sawesc) {
- /*
- * If this is a continuation from the last
- * buffer, we won't have a character to
- * skip over.
- */
- if (sawesc)
- sawesc = 0;
- else
- p++;
-
- if (*p == '\0') {
- /*
- * This escaped character is continued
- * in the next part of the line. Note
- * this fact, then cause the loop to
- * exit w/ normal EOL case and reenter
- * above with the new buffer.
- */
- sawesc = 1;
- p--;
- continue;
- } else if (strchr("123456789", *p) != NULL) {
- *sp++ = '\\';
- ref = *p - '0';
- if (s->re != NULL &&
- ref > s->re->re_nsub)
- errx(1, "%lu: %s: \\%c not defined in the RE",
- linenum, fname, *p);
- if (s->maxbref < ref)
- s->maxbref = ref;
- } else if (*p == '&' || *p == '\\')
- *sp++ = '\\';
- } else if (*p == c) {
- if (*++p == '\0' && more) {
- if (cu_fgets(lbuf, sizeof(lbuf), &more))
- p = lbuf;
- }
- *sp++ = '\0';
- size += sp - op;
- if ((s->new = realloc(text, size)) == NULL)
- err(1, "realloc");
- return (p);
- } else if (*p == '\n') {
- errx(1,
-"%lu: %s: unescaped newline inside substitute pattern", linenum, fname);
- /* NOTREACHED */
- }
- *sp++ = *p;
- }
- size += sp - op;
- if (asize - size < _POSIX2_LINE_MAX + 1) {
- asize *= 2;
- if ((text = realloc(text, asize)) == NULL)
- err(1, "realloc");
- }
- } while (cu_fgets(p = lbuf, sizeof(lbuf), &more));
- errx(1, "%lu: %s: unterminated substitute in regular expression",
- linenum, fname);
- /* NOTREACHED */
-}
-
-/*
- * Compile the flags of the s command
- */
-static char *
-compile_flags(p, s)
- char *p;
- struct s_subst *s;
-{
- int gn; /* True if we have seen g or n */
- char wfile[_POSIX2_LINE_MAX + 1], *q;
-
- s->n = 1; /* Default */
- s->p = 0;
- s->wfile = NULL;
- s->wfd = -1;
- for (gn = 0;;) {
- EATSPACE(); /* EXTENSION */
- switch (*p) {
- case 'g':
- if (gn)
- errx(1,
-"%lu: %s: more than one number or 'g' in substitute flags", linenum, fname);
- gn = 1;
- s->n = 0;
- break;
- case '\0':
- case '\n':
- case ';':
- return (p);
- case 'p':
- s->p = 1;
- break;
- case '1': case '2': case '3':
- case '4': case '5': case '6':
- case '7': case '8': case '9':
- if (gn)
- errx(1,
-"%lu: %s: more than one number or 'g' in substitute flags", linenum, fname);
- gn = 1;
- /* XXX Check for overflow */
- s->n = (int)strtol(p, &p, 10);
- break;
- case 'w':
- p++;
-#ifdef HISTORIC_PRACTICE
- if (*p != ' ') {
- warnx("%lu: %s: space missing before w wfile", linenum, fname);
- return (p);
- }
-#endif
- EATSPACE();
- q = wfile;
- while (*p) {
- if (*p == '\n')
- break;
- *q++ = *p++;
- }
- *q = '\0';
- if (q == wfile)
- errx(1, "%lu: %s: no wfile specified", linenum, fname);
- s->wfile = strdup(wfile);
- if (!aflag && (s->wfd = open(wfile,
- O_WRONLY|O_APPEND|O_CREAT|O_TRUNC,
- DEFFILEMODE)) == -1)
- err(1, "%s", wfile);
- return (p);
- default:
- errx(1, "%lu: %s: bad flag in substitute command: '%c'",
- linenum, fname, *p);
- break;
- }
- p++;
- }
-}
-
-/*
- * Compile a translation set of strings into a lookup table.
- */
-static char *
-compile_tr(p, transtab)
- char *p;
- char **transtab;
-{
- int i;
- char *lt, *op, *np;
- char old[_POSIX2_LINE_MAX + 1];
- char new[_POSIX2_LINE_MAX + 1];
-
- if (*p == '\0' || *p == '\\')
- errx(1,
- "%lu: %s: transform pattern can not be delimited by newline or backslash",
- linenum, fname);
- p = compile_delimited(p, old);
- if (p == NULL)
- errx(1, "%lu: %s: unterminated transform source string",
- linenum, fname);
- p = compile_delimited(--p, new);
- if (p == NULL)
- errx(1, "%lu: %s: unterminated transform target string",
- linenum, fname);
- EATSPACE();
- if (strlen(new) != strlen(old))
- errx(1, "%lu: %s: transform strings are not the same length",
- linenum, fname);
- /* We assume characters are 8 bits */
- if ((lt = malloc(UCHAR_MAX)) == NULL)
- err(1, "malloc");
- for (i = 0; i <= UCHAR_MAX; i++)
- lt[i] = (char)i;
- for (op = old, np = new; *op; op++, np++)
- lt[(u_char)*op] = *np;
- *transtab = lt;
- return (p);
-}
-
-/*
- * Compile the text following an a or i command.
- */
-static char *
-compile_text()
-{
- int asize, esc_nl, size;
- char *text, *p, *op, *s;
- char lbuf[_POSIX2_LINE_MAX + 1];
-
- asize = 2 * _POSIX2_LINE_MAX + 1;
- if ((text = malloc(asize)) == NULL)
- err(1, "malloc");
- size = 0;
- while (cu_fgets(lbuf, sizeof(lbuf), NULL)) {
- op = s = text + size;
- p = lbuf;
- EATSPACE();
- for (esc_nl = 0; *p != '\0'; p++) {
- if (*p == '\\' && p[1] != '\0' && *++p == '\n')
- esc_nl = 1;
- *s++ = *p;
- }
- size += s - op;
- if (!esc_nl) {
- *s = '\0';
- break;
- }
- if (asize - size < _POSIX2_LINE_MAX + 1) {
- asize *= 2;
- if ((text = realloc(text, asize)) == NULL)
- err(1, "realloc");
- }
- }
- text[size] = '\0';
- if ((p = realloc(text, size + 1)) == NULL)
- err(1, "realloc");
- return (p);
-}
-
-/*
- * Get an address and return a pointer to the first character after
- * it. Fill the structure pointed to according to the address.
- */
-static char *
-compile_addr(p, a)
- char *p;
- struct s_addr *a;
-{
- char *end;
-
- switch (*p) {
- case '\\': /* Context address */
- ++p;
- /* FALLTHROUGH */
- case '/': /* Context address */
- p = compile_re(p, &a->u.r);
- if (p == NULL)
- errx(1, "%lu: %s: unterminated regular expression", linenum, fname);
- a->type = AT_RE;
- return (p);
-
- case '$': /* Last line */
- a->type = AT_LAST;
- return (p + 1);
- /* Line number */
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- a->type = AT_LINE;
- a->u.l = strtol(p, &end, 10);
- return (end);
- default:
- errx(1, "%lu: %s: expected context address", linenum, fname);
- return (NULL);
- }
-}
-
-/*
- * duptoeol --
- * Return a copy of all the characters up to \n or \0.
- */
-static char *
-duptoeol(s, ctype)
- char *s;
- const char *ctype;
-{
- size_t len;
- int ws;
- char *p, *start;
-
- ws = 0;
- for (start = s; *s != '\0' && *s != '\n'; ++s)
- ws = isspace((unsigned char)*s);
- *s = '\0';
- if (ws)
- warnx("%lu: %s: whitespace after %s", linenum, fname, ctype);
- len = s - start + 1;
- if ((p = malloc(len)) == NULL)
- err(1, "malloc");
- return (memmove(p, start, len));
-}
-
-/*
- * Convert goto label names to addresses, and count a and r commands, in
- * the given subset of the script. Free the memory used by labels in b
- * and t commands (but not by :).
- *
- * TODO: Remove } nodes
- */
-static void
-fixuplabel(cp, end)
- struct s_command *cp, *end;
-{
-
- for (; cp != end; cp = cp->next)
- switch (cp->code) {
- case 'a':
- case 'r':
- appendnum++;
- break;
- case 'b':
- case 't':
- /* Resolve branch target. */
- if (cp->t == NULL) {
- cp->u.c = NULL;
- break;
- }
- if ((cp->u.c = findlabel(cp->t)) == NULL)
- errx(1, "%lu: %s: undefined label '%s'", linenum, fname, cp->t);
- free(cp->t);
- break;
- case '{':
- /* Do interior commands. */
- fixuplabel(cp->u.c, cp->next);
- break;
- }
-}
-
-/*
- * Associate the given command label for later lookup.
- */
-static void
-enterlabel(cp)
- struct s_command *cp;
-{
- struct labhash **lhp, *lh;
- u_char *p;
- u_int h, c;
-
- for (h = 0, p = (u_char *)cp->t; (c = *p) != 0; p++)
- h = (h << 5) + h + c;
- lhp = &labels[h & LHMASK];
- for (lh = *lhp; lh != NULL; lh = lh->lh_next)
- if (lh->lh_hash == h && strcmp(cp->t, lh->lh_cmd->t) == 0)
- errx(1, "%lu: %s: duplicate label '%s'", linenum, fname, cp->t);
- if ((lh = malloc(sizeof *lh)) == NULL)
- err(1, "malloc");
- lh->lh_next = *lhp;
- lh->lh_hash = h;
- lh->lh_cmd = cp;
- lh->lh_ref = 0;
- *lhp = lh;
-}
-
-/*
- * Find the label contained in the command l in the command linked
- * list cp. L is excluded from the search. Return NULL if not found.
- */
-static struct s_command *
-findlabel(name)
- char *name;
-{
- struct labhash *lh;
- u_char *p;
- u_int h, c;
-
- for (h = 0, p = (u_char *)name; (c = *p) != 0; p++)
- h = (h << 5) + h + c;
- for (lh = labels[h & LHMASK]; lh != NULL; lh = lh->lh_next) {
- if (lh->lh_hash == h && strcmp(name, lh->lh_cmd->t) == 0) {
- lh->lh_ref = 1;
- return (lh->lh_cmd);
- }
- }
- return (NULL);
-}
-
-/*
- * Warn about any unused labels. As a side effect, release the label hash
- * table space.
- */
-static void
-uselabel()
-{
- struct labhash *lh, *next;
- int i;
-
- for (i = 0; i < LHSZ; i++) {
- for (lh = labels[i]; lh != NULL; lh = next) {
- next = lh->lh_next;
- if (!lh->lh_ref)
- warnx("%lu: %s: unused label '%s'",
- linenum, fname, lh->lh_cmd->t);
- free(lh);
- }
- }
-}
diff --git a/textproc/sed_inplace/src/defs.h b/textproc/sed_inplace/src/defs.h
deleted file mode 100644
index 0e77014fcf8..00000000000
--- a/textproc/sed_inplace/src/defs.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/*-
- * Copyright (c) 1992 Diomidis Spinellis.
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Diomidis Spinellis of Imperial College, University of London.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 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
- * SUCH DAMAGE.
- *
- * @(#)defs.h 8.1 (Berkeley) 6/6/93
- */
-
-/*
- * Types of address specifications
- */
-enum e_atype {
- AT_RE, /* Line that match RE */
- AT_LINE, /* Specific line */
- AT_LAST, /* Last line */
-};
-
-/*
- * Format of an address
- */
-struct s_addr {
- enum e_atype type; /* Address type */
- union {
- u_long l; /* Line number */
- regex_t *r; /* Regular expression */
- } u;
-};
-
-/*
- * Substitution command
- */
-struct s_subst {
- int n; /* Occurrence to subst. */
- int p; /* True if p flag */
- char *wfile; /* NULL if no wfile */
- int wfd; /* Cached file descriptor */
- regex_t *re; /* Regular expression */
- int maxbref; /* Largest backreference. */
- u_long linenum; /* Line number. */
- char *new; /* Replacement text */
-};
-
-
-/*
- * An internally compiled command.
- * Initialy, label references are stored in t, on a second pass they
- * are updated to pointers.
- */
-struct s_command {
- struct s_command *next; /* Pointer to next command */
- struct s_addr *a1, *a2; /* Start and end address */
- char *t; /* Text for : a c i r w */
- union {
- struct s_command *c; /* Command(s) for b t { */
- struct s_subst *s; /* Substitute command */
- u_char *y; /* Replace command array */
- int fd; /* File descriptor for w */
- } u;
- char code; /* Command code */
- u_int nonsel:1; /* True if ! */
- u_int inrange:1; /* True if in range */
-};
-
-/*
- * Types of command arguments recognised by the parser
- */
-enum e_args {
- EMPTY, /* d D g G h H l n N p P q x = \0 */
- TEXT, /* a c i */
- NONSEL, /* ! */
- GROUP, /* { */
- ENDGROUP, /* } */
- COMMENT, /* # */
- BRANCH, /* b t */
- LABEL, /* : */
- RFILE, /* r */
- WFILE, /* w */
- SUBST, /* s */
- TR /* y */
-};
-
-/*
- * Structure containing things to append before a line is read
- */
-struct s_appends {
- enum {AP_STRING, AP_FILE} type;
- char *s;
- size_t len;
-};
-
-enum e_spflag {
- APPEND, /* Append to the contents. */
- REPLACE, /* Replace the contents. */
-};
-
-/*
- * Structure for a space (process, hold, otherwise).
- */
-typedef struct {
- char *space; /* Current space pointer. */
- size_t len; /* Current length. */
- int deleted; /* If deleted. */
- char *back; /* Backing memory. */
- size_t blen; /* Backing memory length. */
-} SPACE;
diff --git a/textproc/sed_inplace/src/extern.h b/textproc/sed_inplace/src/extern.h
deleted file mode 100644
index df49f7e36ee..00000000000
--- a/textproc/sed_inplace/src/extern.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*-
- * Copyright (c) 1992 Diomidis Spinellis.
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Diomidis Spinellis of Imperial College, University of London.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 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
- * SUCH DAMAGE.
- *
- * @(#)extern.h 8.1 (Berkeley) 6/6/93
- * $FreeBSD$
- */
-
-extern struct s_command *prog;
-extern struct s_appends *appends;
-extern regmatch_t *match;
-extern size_t maxnsub;
-extern u_long linenum;
-extern int appendnum;
-extern int aflag, eflag, nflag;
-extern const char *fname;
-extern int rflags; /* regex flags to use */
-
-void cfclose(struct s_command *, struct s_command *);
-void compile(void);
-void cspace(SPACE *, const char *, size_t, enum e_spflag);
-char *cu_fgets(char *, int, int *);
-int mf_fgets(SPACE *, enum e_spflag);
-int lastline(void);
-void process(void);
-char *strregerror(int, regex_t *);
diff --git a/textproc/sed_inplace/src/main.c b/textproc/sed_inplace/src/main.c
deleted file mode 100644
index d5af94b7c73..00000000000
--- a/textproc/sed_inplace/src/main.c
+++ /dev/null
@@ -1,467 +0,0 @@
-/*-
- * Copyright (c) 1992 Diomidis Spinellis.
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Diomidis Spinellis of Imperial College, University of London.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 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
- * SUCH DAMAGE.
- */
-
-#ifndef lint
-static const char copyright[] =
-"@(#) Copyright (c) 1992, 1993\n\
- The Regents of the University of California. All rights reserved.\n";
-#endif
-
-#ifndef lint
-static const char sccsid[] = "@(#)main.c 8.2 (Berkeley) 1/3/94";
-#endif
-
-#include <sys/types.h>
-#include <sys/mman.h>
-#include <sys/param.h>
-#include <sys/stat.h>
-
-#include <err.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <locale.h>
-#include <regex.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "defs.h"
-#include "extern.h"
-
-/*
- * Linked list of units (strings and files) to be compiled
- */
-struct s_compunit {
- struct s_compunit *next;
- enum e_cut {CU_FILE, CU_STRING} type;
- char *s; /* Pointer to string or fname */
-};
-
-/*
- * Linked list pointer to compilation units and pointer to current
- * next pointer.
- */
-static struct s_compunit *script, **cu_nextp = &script;
-
-/*
- * Linked list of files to be processed
- */
-struct s_flist {
- char *fname;
- struct s_flist *next;
-};
-
-/*
- * Linked list pointer to files and pointer to current
- * next pointer.
- */
-static struct s_flist *files, **fl_nextp = &files;
-
-static FILE *curfile; /* Current open file */
-
-int aflag, eflag, nflag;
-int rflags = 0;
-static int rval; /* Exit status */
-
-/*
- * Current file and line number; line numbers restart across compilation
- * units, but span across input files.
- */
-const char *fname; /* File name. */
-const char *inplace; /* Inplace edit file extension. */
-u_long linenum;
-
-static void add_compunit(enum e_cut, char *);
-static void add_file(char *);
-static int inplace_edit(char **);
-static void usage(void);
-
-int
-main(argc, argv)
- int argc;
- char *argv[];
-{
- int c, fflag;
- char *temp_arg;
-
- (void) setlocale(LC_ALL, "");
-
- fflag = 0;
- inplace = NULL;
-
- while ((c = getopt(argc, argv, "Eae:f:i:n")) != -1)
- switch (c) {
- case 'E':
- rflags = REG_EXTENDED;
- break;
- case 'a':
- aflag = 1;
- break;
- case 'e':
- eflag = 1;
- if ((temp_arg = malloc(strlen(optarg) + 2)) == NULL)
- err(1, "malloc");
- strcpy(temp_arg, optarg);
- strcat(temp_arg, "\n");
- add_compunit(CU_STRING, temp_arg);
- break;
- case 'f':
- fflag = 1;
- add_compunit(CU_FILE, optarg);
- break;
- case 'i':
- inplace = optarg;
- break;
- case 'n':
- nflag = 1;
- break;
- default:
- case '?':
- usage();
- }
- argc -= optind;
- argv += optind;
-
- /* First usage case; script is the first arg */
- if (!eflag && !fflag && *argv) {
- add_compunit(CU_STRING, *argv);
- argv++;
- }
-
- compile();
-
- /* Continue with first and start second usage */
- if (*argv)
- for (; *argv; argv++)
- add_file(*argv);
- else
- add_file(NULL);
- process();
- cfclose(prog, NULL);
- if (fclose(stdout))
- err(1, "stdout");
- exit(rval);
-}
-
-static void
-usage()
-{
- (void)fprintf(stderr, "%s\n%s\n",
- "usage: sed script [-Ean] [-i extension] [file ...]",
- " sed [-an] [-i extension] [-e script] ... [-f script_file] ... [file ...]");
- exit(1);
-}
-
-/*
- * Like fgets, but go through the chain of compilation units chaining them
- * together. Empty strings and files are ignored.
- */
-char *
-cu_fgets(buf, n, more)
- char *buf;
- int n;
- int *more;
-{
- static enum {ST_EOF, ST_FILE, ST_STRING} state = ST_EOF;
- static FILE *f; /* Current open file */
- static char *s; /* Current pointer inside string */
- static char string_ident[30];
- char *p;
-
-again:
- switch (state) {
- case ST_EOF:
- if (script == NULL) {
- if (more != NULL)
- *more = 0;
- return (NULL);
- }
- linenum = 0;
- switch (script->type) {
- case CU_FILE:
- if ((f = fopen(script->s, "r")) == NULL)
- err(1, "%s", script->s);
- fname = script->s;
- state = ST_FILE;
- goto again;
- case CU_STRING:
- if ((snprintf(string_ident,
- sizeof(string_ident), "\"%s\"", script->s)) >=
- sizeof(string_ident) - 1)
- (void)strcpy(string_ident +
- sizeof(string_ident) - 6, " ...\"");
- fname = string_ident;
- s = script->s;
- state = ST_STRING;
- goto again;
- }
- case ST_FILE:
- if ((p = fgets(buf, n, f)) != NULL) {
- linenum++;
- if (linenum == 1 && buf[0] == '#' && buf[1] == 'n')
- nflag = 1;
- if (more != NULL)
- *more = !feof(f);
- return (p);
- }
- script = script->next;
- (void)fclose(f);
- state = ST_EOF;
- goto again;
- case ST_STRING:
- if (linenum == 0 && s[0] == '#' && s[1] == 'n')
- nflag = 1;
- p = buf;
- for (;;) {
- if (n-- <= 1) {
- *p = '\0';
- linenum++;
- if (more != NULL)
- *more = 1;
- return (buf);
- }
- switch (*s) {
- case '\0':
- state = ST_EOF;
- if (s == script->s) {
- script = script->next;
- goto again;
- } else {
- script = script->next;
- *p = '\0';
- linenum++;
- if (more != NULL)
- *more = 0;
- return (buf);
- }
- case '\n':
- *p++ = '\n';
- *p = '\0';
- s++;
- linenum++;
- if (more != NULL)
- *more = 0;
- return (buf);
- default:
- *p++ = *s++;
- }
- }
- }
- /* NOTREACHED */
- return (NULL);
-}
-
-/*
- * Like fgets, but go through the list of files chaining them together.
- * Set len to the length of the line.
- */
-int
-mf_fgets(sp, spflag)
- SPACE *sp;
- enum e_spflag spflag;
-{
- size_t len;
- char *p;
- int c;
- static int firstfile;
-
- if (curfile == NULL) {
- /* stdin? */
- if (files->fname == NULL) {
- if (inplace != NULL)
- errx(1, "-i may not be used with stdin");
- curfile = stdin;
- fname = "stdin";
- }
- firstfile = 1;
- }
-
- for (;;) {
- if (curfile != NULL && (c = getc(curfile)) != EOF) {
- (void)ungetc(c, curfile);
- break;
- }
- /* If we are here then either eof or no files are open yet */
- if (curfile == stdin) {
- sp->len = 0;
- return (0);
- }
- if (curfile != NULL) {
- fclose(curfile);
- }
- if (firstfile == 0) {
- files = files->next;
- } else
- firstfile = 0;
- if (files == NULL) {
- sp->len = 0;
- return (0);
- }
- if (inplace != NULL) {
- if (inplace_edit(&files->fname) == -1)
- continue;
- }
- fname = files->fname;
- if ((curfile = fopen(fname, "r")) == NULL) {
- warn("%s", fname);
- rval = 1;
- continue;
- }
- if (inplace != NULL && *inplace == '\0')
- unlink(fname);
- }
- /*
- * We are here only when curfile is open and we still have something
- * to read from it.
- *
- * Use fgetln so that we can handle essentially infinite input data.
- * Can't use the pointer into the stdio buffer as the process space
- * because the ungetc() can cause it to move.
- */
- p = fgetln(curfile, &len);
- if (ferror(curfile))
- errx(1, "%s: %s", fname, strerror(errno ? errno : EIO));
- if (len != 0 && p[len - 1] == '\n')
- len--;
- cspace(sp, p, len, spflag);
-
- linenum++;
-
- return (1);
-}
-
-/*
- * Add a compilation unit to the linked list
- */
-static void
-add_compunit(type, s)
- enum e_cut type;
- char *s;
-{
- struct s_compunit *cu;
-
- if ((cu = malloc(sizeof(struct s_compunit))) == NULL)
- err(1, "malloc");
- cu->type = type;
- cu->s = s;
- cu->next = NULL;
- *cu_nextp = cu;
- cu_nextp = &cu->next;
-}
-
-/*
- * Add a file to the linked list
- */
-static void
-add_file(s)
- char *s;
-{
- struct s_flist *fp;
-
- if ((fp = malloc(sizeof(struct s_flist))) == NULL)
- err(1, "malloc");
- fp->next = NULL;
- *fl_nextp = fp;
- fp->fname = s;
- fl_nextp = &fp->next;
-}
-
-/*
- * Modify a pointer to a filename for inplace editing and reopen stdout
- */
-static int
-inplace_edit(filename)
- char **filename;
-{
- struct stat orig;
- char backup[MAXPATHLEN];
-
- if (lstat(*filename, &orig) == -1)
- err(1, "lstat");
- if ((orig.st_mode & S_IFREG) == 0) {
- warnx("cannot inplace edit %s, not a regular file", *filename);
- return -1;
- }
-
- if (*inplace == '\0') {
- /*
- * This is a bit of a hack: we use mkstemp() to avoid the
- * mktemp() link-time warning, although mktemp() would fit in
- * this context much better. We're only interested in getting
- * a name for use in the rename(); there aren't any security
- * issues here that don't already exist in relation to the
- * original file and its directory.
- */
- int fd;
- strlcpy(backup, *filename, sizeof(backup));
- strlcat(backup, ".XXXXXXXXXX", sizeof(backup));
- fd = mkstemp(backup);
- if (fd == -1)
- errx(1, "could not create backup of %s", *filename);
- else
- close(fd);
- } else {
- strlcpy(backup, *filename, sizeof(backup));
- strlcat(backup, inplace, sizeof(backup));
- }
-
- if (rename(*filename, backup) == -1)
- err(1, "rename(\"%s\", \"%s\")", *filename, backup);
- if (freopen(*filename, "w", stdout) == NULL)
- err(1, "open(\"%s\")", *filename);
- if (fchmod(fileno(stdout), orig.st_mode) == -1)
- err(1, "chmod(\"%s\")", *filename);
- *filename = strdup(backup);
- if (*filename == NULL)
- err(1, "malloc");
- return 0;
-}
-
-int
-lastline(void)
-{
- int ch;
-
- if (files->next != NULL)
- return (0);
- if ((ch = getc(curfile)) == EOF)
- return (1);
- ungetc(ch, curfile);
- return (0);
-}
diff --git a/textproc/sed_inplace/src/misc.c b/textproc/sed_inplace/src/misc.c
deleted file mode 100644
index 881189e79b4..00000000000
--- a/textproc/sed_inplace/src/misc.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/*-
- * Copyright (c) 1992 Diomidis Spinellis.
- * Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Diomidis Spinellis of Imperial College, University of London.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 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
- * SUCH DAMAGE.
- */
-
-#ifndef lint
-static const char sccsid[] = "@(#)misc.c 8.1 (Berkeley) 6/6/93";
-#endif
-
-#include <sys/types.h>
-
-#include <err.h>
-#include <regex.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "defs.h"
-#include "extern.h"
-
-/*
- * Return a string for a regular expression error passed. This is a overkill,
- * because of the silly semantics of regerror (we can never know the size of
- * the buffer).
- */
-char *
-strregerror(errcode, preg)
- int errcode;
- regex_t *preg;
-{
- static char *oe;
- size_t s;
-
- if (oe != NULL)
- free(oe);
- s = regerror(errcode, preg, NULL, 0);
- if ((oe = malloc(s)) == NULL)
- err(1, "malloc");
- (void)regerror(errcode, preg, oe, s);
- return (oe);
-}
diff --git a/textproc/sed_inplace/src/process.c b/textproc/sed_inplace/src/process.c
deleted file mode 100644
index 7407fd2f640..00000000000
--- a/textproc/sed_inplace/src/process.c
+++ /dev/null
@@ -1,648 +0,0 @@
-/*-
- * Copyright (c) 1992 Diomidis Spinellis.
- * Copyright (c) 1992, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Diomidis Spinellis of Imperial College, University of London.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 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
- * SUCH DAMAGE.
- */
-
-#ifndef lint
-static const char sccsid[] = "@(#)process.c 8.6 (Berkeley) 4/20/94";
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/ioctl.h>
-#include <sys/uio.h>
-
-#include <ctype.h>
-#include <err.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <regex.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "defs.h"
-#include "extern.h"
-
-static SPACE HS, PS, SS;
-#define pd PS.deleted
-#define ps PS.space
-#define psl PS.len
-#define hs HS.space
-#define hsl HS.len
-
-static __inline int applies(struct s_command *);
-static void flush_appends(void);
-static void lputs(char *);
-static __inline int regexec_e(regex_t *, const char *, int, int, size_t);
-static void regsub(SPACE *, char *, char *);
-static int substitute(struct s_command *);
-
-struct s_appends *appends; /* Array of pointers to strings to append. */
-static int appendx; /* Index into appends array. */
-int appendnum; /* Size of appends array. */
-
-static int lastaddr; /* Set by applies if last address of a range. */
-static int sdone; /* If any substitutes since last line input. */
- /* Iov structure for 'w' commands. */
-static regex_t *defpreg;
-size_t maxnsub;
-regmatch_t *match;
-
-#define OUT(s) { fwrite(s, sizeof(u_char), psl, stdout); putchar('\n'); }
-
-void
-process()
-{
- struct s_command *cp;
- SPACE tspace;
- size_t len, oldpsl = 0;
- char *p;
-
- p = NULL;
-
- for (linenum = 0; mf_fgets(&PS, REPLACE);) {
- pd = 0;
-top:
- cp = prog;
-redirect:
- while (cp != NULL) {
- if (!applies(cp)) {
- cp = cp->next;
- continue;
- }
- switch (cp->code) {
- case '{':
- cp = cp->u.c;
- goto redirect;
- case 'a':
- if (appendx >= appendnum)
- if ((appends = realloc(appends,
- sizeof(struct s_appends) *
- (appendnum *= 2))) == NULL)
- err(1, "realloc");
- appends[appendx].type = AP_STRING;
- appends[appendx].s = cp->t;
- appends[appendx].len = strlen(cp->t);
- appendx++;
- break;
- case 'b':
- cp = cp->u.c;
- goto redirect;
- case 'c':
- pd = 1;
- psl = 0;
- if (cp->a2 == NULL || lastaddr)
- (void)printf("%s", cp->t);
- break;
- case 'd':
- pd = 1;
- goto new;
- case 'D':
- if (pd)
- goto new;
- if (psl == 0 ||
- (p = memchr(ps, '\n', psl)) == NULL) {
- pd = 1;
- goto new;
- } else {
- psl -= (p + 1) - ps;
- memmove(ps, p + 1, psl);
- goto top;
- }
- case 'g':
- cspace(&PS, hs, hsl, REPLACE);
- break;
- case 'G':
- cspace(&PS, "\n", 1, 0);
- cspace(&PS, hs, hsl, 0);
- break;
- case 'h':
- cspace(&HS, ps, psl, REPLACE);
- break;
- case 'H':
- cspace(&HS, "\n", 1, 0);
- cspace(&HS, ps, psl, 0);
- break;
- case 'i':
- (void)printf("%s", cp->t);
- break;
- case 'l':
- lputs(ps);
- break;
- case 'n':
- if (!nflag && !pd)
- OUT(ps)
- flush_appends();
- if (!mf_fgets(&PS, REPLACE))
- exit(0);
- pd = 0;
- break;
- case 'N':
- flush_appends();
- cspace(&PS, "\n", 1, 0);
- if (!mf_fgets(&PS, 0))
- exit(0);
- break;
- case 'p':
- if (pd)
- break;
- OUT(ps)
- break;
- case 'P':
- if (pd)
- break;
- if (psl != 0 &&
- (p = memchr(ps, '\n', psl)) != NULL) {
- oldpsl = psl;
- psl = p - ps;
- }
- OUT(ps)
- if (p != NULL)
- psl = oldpsl;
- break;
- case 'q':
- if (!nflag && !pd)
- OUT(ps)
- flush_appends();
- exit(0);
- case 'r':
- if (appendx >= appendnum)
- if ((appends = realloc(appends,
- sizeof(struct s_appends) *
- (appendnum *= 2))) == NULL)
- err(1, "realloc");
- appends[appendx].type = AP_FILE;
- appends[appendx].s = cp->t;
- appends[appendx].len = strlen(cp->t);
- appendx++;
- break;
- case 's':
- sdone |= substitute(cp);
- break;
- case 't':
- if (sdone) {
- sdone = 0;
- cp = cp->u.c;
- goto redirect;
- }
- break;
- case 'w':
- if (pd)
- break;
- if (cp->u.fd == -1 && (cp->u.fd = open(cp->t,
- O_WRONLY|O_APPEND|O_CREAT|O_TRUNC,
- DEFFILEMODE)) == -1)
- err(1, "%s", cp->t);
- if (write(cp->u.fd, ps, psl) != psl ||
- write(cp->u.fd, "\n", 1) != 1)
- err(1, "%s", cp->t);
- break;
- case 'x':
- if (hs == NULL)
- cspace(&HS, "", 0, REPLACE);
- tspace = PS;
- PS = HS;
- HS = tspace;
- break;
- case 'y':
- if (pd || psl == 0)
- break;
- for (p = ps, len = psl; len--; ++p)
- *p = cp->u.y[(unsigned char)*p];
- break;
- case ':':
- case '}':
- break;
- case '=':
- (void)printf("%lu\n", linenum);
- }
- cp = cp->next;
- } /* for all cp */
-
-new: if (!nflag && !pd)
- OUT(ps)
- flush_appends();
- } /* for all lines */
-}
-
-/*
- * TRUE if the address passed matches the current program state
- * (lastline, linenumber, ps).
- */
-#define MATCH(a) \
- (a)->type == AT_RE ? regexec_e((a)->u.r, ps, 0, 1, psl) : \
- (a)->type == AT_LINE ? linenum == (a)->u.l : lastline()
-
-/*
- * Return TRUE if the command applies to the current line. Sets the inrange
- * flag to process ranges. Interprets the non-select (``!'') flag.
- */
-static __inline int
-applies(cp)
- struct s_command *cp;
-{
- int r;
-
- lastaddr = 0;
- if (cp->a1 == NULL && cp->a2 == NULL)
- r = 1;
- else if (cp->a2)
- if (cp->inrange) {
- if (MATCH(cp->a2)) {
- cp->inrange = 0;
- lastaddr = 1;
- }
- r = 1;
- } else if (MATCH(cp->a1)) {
- /*
- * If the second address is a number less than or
- * equal to the line number first selected, only
- * one line shall be selected.
- * -- POSIX 1003.2
- */
- if (cp->a2->type == AT_LINE &&
- linenum >= cp->a2->u.l)
- lastaddr = 1;
- else
- cp->inrange = 1;
- r = 1;
- } else
- r = 0;
- else
- r = MATCH(cp->a1);
- return (cp->nonsel ? ! r : r);
-}
-
-/*
- * substitute --
- * Do substitutions in the pattern space. Currently, we build a
- * copy of the new pattern space in the substitute space structure
- * and then swap them.
- */
-static int
-substitute(cp)
- struct s_command *cp;
-{
- SPACE tspace;
- regex_t *re;
- size_t re_off, slen;
- int lastempty, n;
- char *s;
-
- s = ps;
- re = cp->u.s->re;
- if (re == NULL) {
- if (defpreg != NULL && cp->u.s->maxbref > defpreg->re_nsub) {
- linenum = cp->u.s->linenum;
- errx(1, "%lu: %s: \\%d not defined in the RE",
- linenum, fname, cp->u.s->maxbref);
- }
- }
- if (!regexec_e(re, s, 0, 0, psl))
- return (0);
-
- SS.len = 0; /* Clean substitute space. */
- slen = psl;
- n = cp->u.s->n;
- lastempty = 1;
-
- switch (n) {
- case 0: /* Global */
- do {
- if (lastempty || match[0].rm_so != match[0].rm_eo) {
- /* Locate start of replaced string. */
- re_off = match[0].rm_so;
- /* Copy leading retained string. */
- cspace(&SS, s, re_off, APPEND);
- /* Add in regular expression. */
- regsub(&SS, s, cp->u.s->new);
- }
-
- /* Move past this match. */
- if (match[0].rm_so != match[0].rm_eo) {
- s += match[0].rm_eo;
- slen -= match[0].rm_eo;
- lastempty = 0;
- } else if (match[0].rm_so == slen) {
- s += match[0].rm_so;
- slen = 0;
- } else {
- if (match[0].rm_so == 0)
- cspace(&SS, s, match[0].rm_so + 1,
- APPEND);
- else
- cspace(&SS, s + match[0].rm_so, 1,
- APPEND);
- s += match[0].rm_so + 1;
- slen -= match[0].rm_so + 1;
- lastempty = 1;
- }
- } while (slen > 0 && regexec_e(re, s, REG_NOTBOL, 0, slen));
- /* Copy trailing retained string. */
- if (slen > 0)
- cspace(&SS, s, slen, APPEND);
- break;
- default: /* Nth occurrence */
- while (--n) {
- s += match[0].rm_eo;
- slen -= match[0].rm_eo;
- if (!regexec_e(re, s, REG_NOTBOL, 0, slen))
- return (0);
- }
- /* FALLTHROUGH */
- case 1: /* 1st occurrence */
- /* Locate start of replaced string. */
- re_off = match[0].rm_so + (s - ps);
- /* Copy leading retained string. */
- cspace(&SS, ps, re_off, APPEND);
- /* Add in regular expression. */
- regsub(&SS, s, cp->u.s->new);
- /* Copy trailing retained string. */
- s += match[0].rm_eo;
- slen -= match[0].rm_eo;
- cspace(&SS, s, slen, APPEND);
- break;
- }
-
- /*
- * Swap the substitute space and the pattern space, and make sure
- * that any leftover pointers into stdio memory get lost.
- */
- tspace = PS;
- PS = SS;
- SS = tspace;
- SS.space = SS.back;
-
- /* Handle the 'p' flag. */
- if (cp->u.s->p)
- OUT(ps)
-
- /* Handle the 'w' flag. */
- if (cp->u.s->wfile && !pd) {
- if (cp->u.s->wfd == -1 && (cp->u.s->wfd = open(cp->u.s->wfile,
- O_WRONLY|O_APPEND|O_CREAT|O_TRUNC, DEFFILEMODE)) == -1)
- err(1, "%s", cp->u.s->wfile);
- if (write(cp->u.s->wfd, ps, psl) != psl ||
- write(cp->u.s->wfd, "\n", 1) != 1)
- err(1, "%s", cp->u.s->wfile);
- }
- return (1);
-}
-
-/*
- * Flush append requests. Always called before reading a line,
- * therefore it also resets the substitution done (sdone) flag.
- */
-static void
-flush_appends()
-{
- FILE *f;
- int count, i;
- char buf[8 * 1024];
-
- for (i = 0; i < appendx; i++)
- switch (appends[i].type) {
- case AP_STRING:
- fwrite(appends[i].s, sizeof(char), appends[i].len,
- stdout);
- break;
- case AP_FILE:
- /*
- * Read files probably shouldn't be cached. Since
- * it's not an error to read a non-existent file,
- * it's possible that another program is interacting
- * with the sed script through the filesystem. It
- * would be truly bizarre, but possible. It's probably
- * not that big a performance win, anyhow.
- */
- if ((f = fopen(appends[i].s, "r")) == NULL)
- break;
- while ((count = fread(buf, sizeof(char), sizeof(buf), f)))
- (void)fwrite(buf, sizeof(char), count, stdout);
- (void)fclose(f);
- break;
- }
- if (ferror(stdout))
- errx(1, "stdout: %s", strerror(errno ? errno : EIO));
- appendx = sdone = 0;
-}
-
-static void
-lputs(s)
- char *s;
-{
- int count;
- const char *escapes;
- char *p;
- struct winsize win;
- static int termwidth = -1;
-
- if (termwidth == -1) {
- if ((p = getenv("COLUMNS")) && *p != '\0')
- termwidth = atoi(p);
- else if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &win) == 0 &&
- win.ws_col > 0)
- termwidth = win.ws_col;
- else
- termwidth = 60;
- }
-
- for (count = 0; *s; ++s) {
- if (count + 5 >= termwidth) {
- (void)printf("\\\n");
- count = 0;
- }
- if (isprint((unsigned char)*s) && *s != '\\') {
- (void)putchar(*s);
- count++;
- } else if (*s == '\n') {
- (void)putchar('$');
- (void)putchar('\n');
- count = 0;
- } else {
- escapes = "\\\a\b\f\r\t\v";
- (void)putchar('\\');
- if ((p = strchr(escapes, *s))) {
- (void)putchar("\\abfrtv"[p - escapes]);
- count += 2;
- } else {
- (void)printf("%03o", *(u_char *)s);
- count += 4;
- }
- }
- }
- (void)putchar('$');
- (void)putchar('\n');
- if (ferror(stdout))
- errx(1, "stdout: %s", strerror(errno ? errno : EIO));
-}
-
-static __inline int
-regexec_e(preg, string, eflags, nomatch, slen)
- regex_t *preg;
- const char *string;
- int eflags, nomatch;
- size_t slen;
-{
- int eval;
-
- if (preg == NULL) {
- if (defpreg == NULL)
- errx(1, "first RE may not be empty");
- } else
- defpreg = preg;
-
- /* Set anchors */
- match[0].rm_so = 0;
- match[0].rm_eo = slen;
-
- eval = regexec(defpreg, string,
- nomatch ? 0 : maxnsub + 1, match, eflags | REG_STARTEND);
- switch(eval) {
- case 0:
- return (1);
- case REG_NOMATCH:
- return (0);
- }
- errx(1, "RE error: %s", strregerror(eval, defpreg));
- /* NOTREACHED */
-}
-
-/*
- * regsub - perform substitutions after a regexp match
- * Based on a routine by Henry Spencer
- */
-static void
-regsub(sp, string, src)
- SPACE *sp;
- char *string, *src;
-{
- int len, no;
- char c, *dst;
-
-#define NEEDSP(reqlen) \
- if (sp->len >= sp->blen - (reqlen) - 1) { \
- sp->blen += (reqlen) + 1024; \
- if ((sp->space = sp->back = realloc(sp->back, sp->blen)) \
- == NULL) \
- err(1, "realloc"); \
- dst = sp->space + sp->len; \
- }
-
- dst = sp->space + sp->len;
- while ((c = *src++) != '\0') {
- if (c == '&')
- no = 0;
- else if (c == '\\' && isdigit((unsigned char)*src))
- no = *src++ - '0';
- else
- no = -1;
- if (no < 0) { /* Ordinary character. */
- if (c == '\\' && (*src == '\\' || *src == '&'))
- c = *src++;
- NEEDSP(1);
- *dst++ = c;
- ++sp->len;
- } else if (match[no].rm_so != -1 && match[no].rm_eo != -1) {
- len = match[no].rm_eo - match[no].rm_so;
- NEEDSP(len);
- memmove(dst, string + match[no].rm_so, len);
- dst += len;
- sp->len += len;
- }
- }
- NEEDSP(1);
- *dst = '\0';
-}
-
-/*
- * aspace --
- * Append the source space to the destination space, allocating new
- * space as necessary.
- */
-void
-cspace(sp, p, len, spflag)
- SPACE *sp;
- const char *p;
- size_t len;
- enum e_spflag spflag;
-{
- size_t tlen;
-
- /* Make sure SPACE has enough memory and ramp up quickly. */
- tlen = sp->len + len + 1;
- if (tlen > sp->blen) {
- sp->blen = tlen + 1024;
- if ((sp->space = sp->back = realloc(sp->back, sp->blen)) ==
- NULL)
- err(1, "realloc");
- }
-
- if (spflag == REPLACE)
- sp->len = 0;
-
- memmove(sp->space + sp->len, p, len);
-
- sp->space[sp->len += len] = '\0';
-}
-
-/*
- * Close all cached opened files and report any errors
- */
-void
-cfclose(cp, end)
- struct s_command *cp, *end;
-{
-
- for (; cp != end; cp = cp->next)
- switch(cp->code) {
- case 's':
- if (cp->u.s->wfd != -1 && close(cp->u.s->wfd))
- err(1, "%s", cp->u.s->wfile);
- cp->u.s->wfd = -1;
- break;
- case 'w':
- if (cp->u.fd != -1 && close(cp->u.fd))
- err(1, "%s", cp->t);
- cp->u.fd = -1;
- break;
- case '{':
- cfclose(cp->u.c, cp->next);
- break;
- }
-}
diff --git a/textproc/xml4j/Makefile b/textproc/xml4j/Makefile
deleted file mode 100644
index 4e031a2f054..00000000000
--- a/textproc/xml4j/Makefile
+++ /dev/null
@@ -1,75 +0,0 @@
-# New ports collection makefile for: XML for Java
-# Date created: 21 Feb 2000
-# Whom: Jun Kuriyama <kuriyama@FreeBSD.org>
-#
-# $FreeBSD$
-#
-
-PORTNAME= xml4j
-PORTVERSION= 4.3.0
-CATEGORIES= textproc
-MASTER_SITES= http://dl.alphaworks.ibm.com/technologies/xml4j/
-DISTNAME= XML4J-bin.${PORTVERSION}
-
-MAINTAINER= ports@FreeBSD.org
-COMMENT= XML for Java parser
-
-DEPRECATED= it has been replaced by textproc/xerces-j 8 years ago
-EXPIRATION_DATE=2006-07-01
-
-WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION:S/./_/g}
-USE_JAVA= yes
-JAVA_VERSION= 1.2+
-NO_BUILD= YES
-DATADIR= ${JAVASHAREDIR}/${PORTNAME}
-
-CONFLICTS= xerces-j-2.*
-
-SAMPLES= dom sax simpletype socket ui xni xs
-JARFILES= resolver.jar xercesImpl.jar xercesSamples.jar xml-apis.jar xmlParserAPIs.jar
-DATAFILES= personal-schema.xml personal.dtd personal.xml personal.xsd
-.if !defined(NOPORTDOCS)
-PORTDOCS= *.html graphics images javadocs resources
-.endif
-
-PLIST_FILES= ${JARFILES:S,^,%%JAVAJARDIR%%/,} \
- ${DATAFILES:S,^,%%DATADIR%%/,}
-PLIST_DIRS= %%DATADIR%%
-
-do-install:
- @${MKDIR} ${JAVAJARDIR}
- @${ECHO_MSG} -n ">> Installing JAR in ${JAVAJARDIR}..."
- @cd ${WRKSRC} && \
- ${INSTALL_DATA} ${JARFILES} ${JAVAJARDIR}/
- @${ECHO_MSG} " [ DONE ]"
- @${ECHO_MSG} -n ">> Installing data in ${DATADIR}..."
- @${MKDIR} ${DATADIR}
- @cd ${WRKSRC}/data && \
- ${INSTALL_DATA} ${DATAFILES} ${DATADIR}/
- @${ECHO_MSG} " [ DONE ]"
-.if !defined(NOPORTDOCS)
- @${ECHO_MSG} -n ">> Installing documentation in ${DOCSDIR}..."
- @${MKDIR} ${DOCSDIR}
- @cd ${WRKSRC}/docs && \
- ${FIND} ${PORTDOCS} -type d -exec ${MKDIR} ${DOCSDIR}/{} \;
- @cd ${WRKSRC}/docs && \
- ${FIND} ${PORTDOCS} -type f -exec ${INSTALL_DATA} {} ${DOCSDIR}/{} \;
- @${ECHO_MSG} " [ DONE ]"
- @${ECHO_MSG} -n ">> Installing samples in ${EXAMPLESDIR}..."
- @${MKDIR} ${EXAMPLESDIR}
- @cd ${WRKSRC}/samples && \
- ${FIND} ${SAMPLES} -type d -exec ${MKDIR} ${EXAMPLESDIR}/{} \;
- @cd ${WRKSRC}/samples && \
- ${FIND} ${SAMPLES} -type f -exec ${INSTALL_DATA} {} ${EXAMPLESDIR}/{} \;
- @${ECHO_MSG} " [ DONE ]"
-.endif
-
-.if !defined(NOPORTDOCS)
-post-install:
- @${FIND} -s ${WRKSRC}/samples -not -type d | \
- ${SED} -ne 's,^${WRKSRC}/samples,${EXAMPLESDIR:S,${PREFIX}/,,},p' >> ${TMPPLIST}
- @${FIND} -s -d ${WRKSRC}/samples -type d | \
- ${SED} -ne 's,^${WRKSRC}/samples,@dirrm ${EXAMPLESDIR:S,${PREFIX}/,,},p' >> ${TMPPLIST}
-.endif
-
-.include <bsd.port.mk>
diff --git a/textproc/xml4j/distinfo b/textproc/xml4j/distinfo
deleted file mode 100644
index 3bd0bef8972..00000000000
--- a/textproc/xml4j/distinfo
+++ /dev/null
@@ -1,3 +0,0 @@
-MD5 (XML4J-bin.4.3.0.tar.gz) = 7057f645a03ad6500c07f11ddb62820a
-SHA256 (XML4J-bin.4.3.0.tar.gz) = 6fbb28c1966b69bad21efba2696533b80262e1d8718ec953741d9ee71600a20c
-SIZE (XML4J-bin.4.3.0.tar.gz) = 4302876
diff --git a/textproc/xml4j/pkg-descr b/textproc/xml4j/pkg-descr
deleted file mode 100644
index 45e4451c75f..00000000000
--- a/textproc/xml4j/pkg-descr
+++ /dev/null
@@ -1,24 +0,0 @@
-XML Parser for Java is a validating XML parser and processor written in 100%
-pure Java. It is a library for parsing and generating XML documents. This
-parser easily enables an application to read and write XML data. Version 4.3.0
-and above incorporate support for the following:
-
-- Extensible Markup Language (XML) 1.0, Third Edition Recommendation
-- Namespaces in XML Recommendation
-- Extensible Markup Language (XML) 1.1 Recommendation, excluding support for
- normalization checking
-- Namespaces in XML 1.1 Recommendation
-- Experimental implementation of XML Inclusions (XInclude) 1.0 Working Draft
- (November 2003) in Last Call, excluding support for XPointer
-- W3C XML Schema 1.0 Structures and Datatypes Recommendations
-- OASIS XML Catalogs
-- SAX 1.0 and 2.0.1
-- DOM Level 1, DOM Level 2, and an experimental implementation of the DOM Level
- 3 Core and Load/Save Proposed Recommendations
-- JAXP 1.2
-- The XML Schema API, which provides access to the post-schema validation
- "infoset" (PSVI)
-- Use of the "Xerces Native Interface" API throughout the product, allowing
- unprecedented customizing.
-
-WWW: http://www.alphaworks.ibm.com/tech/xml4j/