home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / usr.bin / sed / defs.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-12-02  |  4.5 KB  |  145 lines

  1. /*-
  2.  * Copyright (c) 1992 Diomidis Spinellis.
  3.  * Copyright (c) 1992 The Regents of the University of California.
  4.  * All rights reserved.
  5.  *
  6.  * This code is derived from software contributed to Berkeley by
  7.  * Diomidis Spinellis of Imperial College, University of London.
  8.  *
  9.  * Redistribution and use in source and binary forms, with or without
  10.  * modification, are permitted provided that the following conditions
  11.  * are met:
  12.  * 1. Redistributions of source code must retain the above copyright
  13.  *    notice, this list of conditions and the following disclaimer.
  14.  * 2. Redistributions in binary form must reproduce the above copyright
  15.  *    notice, this list of conditions and the following disclaimer in the
  16.  *    documentation and/or other materials provided with the distribution.
  17.  * 3. All advertising materials mentioning features or use of this software
  18.  *    must display the following acknowledgement:
  19.  *    This product includes software developed by the University of
  20.  *    California, Berkeley and its contributors.
  21.  * 4. Neither the name of the University nor the names of its contributors
  22.  *    may be used to endorse or promote products derived from this software
  23.  *    without specific prior written permission.
  24.  *
  25.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  26.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  27.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  28.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  29.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  30.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  31.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  32.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  33.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  34.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  35.  * SUCH DAMAGE.
  36.  *
  37.  *    @(#)defs.h    5.3 (Berkeley) 8/28/92
  38.  */
  39.  
  40. /*
  41.  * Types of address specifications
  42.  */
  43. enum e_atype {
  44.     AT_RE,                    /* Line that match RE */
  45.     AT_LINE,                /* Specific line */
  46.     AT_LAST,                /* Last line */
  47. };
  48.  
  49. /*
  50.  * Format of an address
  51.  */
  52. struct s_addr {
  53.     enum e_atype type;            /* Address type */
  54.     union {
  55.         u_long l;            /* Line number */
  56.         regex_t *r;            /* Regular expression */
  57.     } u;
  58. };
  59.  
  60. /*
  61.  * Substitution command
  62.  */
  63. struct s_subst {
  64.     int n;                    /* Occurrence to subst. */
  65.     int p;                    /* True if p flag */
  66.     char *wfile;                /* NULL if no wfile */
  67.     int wfd;                /* Cached file descriptor */
  68.     regex_t *re;                /* Regular expression */
  69.     int maxbref;                /* Largest backreference. */
  70.     u_long linenum;                /* Line number. */
  71.     char *new;                /* Replacement text */
  72. };
  73.  
  74.  
  75. /*
  76.  * An internally compiled command.
  77.  * Initialy, label references are stored in u.t, on a second pass they
  78.  * are updated to pointers.
  79.  */
  80. struct s_command {
  81.     struct s_command *next;            /* Pointer to next command */
  82.     struct s_addr *a1, *a2;            /* Start and end address */
  83.     char *t;                /* Text for : a c i r w */
  84.     union {
  85.         struct s_command *c;        /* Command(s) for b t { */
  86.         struct s_subst *s;        /* Substitute command */
  87.         u_char *y;            /* Replace command array */
  88.         int fd;                /* File descriptor for w */
  89.     } u;
  90.     char code;                /* Command code */
  91.     u_int nonsel:1;                /* True if ! */
  92.     u_int inrange:1;            /* True if in range */
  93. };
  94.  
  95. /*
  96.  * Types of command arguments recognised by the parser
  97.  */
  98. enum e_args {
  99.     EMPTY,            /* d D g G h H l n N p P q x = \0 */
  100.     TEXT,            /* a c i */
  101.     NONSEL,            /* ! */
  102.     GROUP,            /* { */
  103.     COMMENT,        /* # */
  104.     BRANCH,            /* b t */
  105.     LABEL,            /* : */
  106.     RFILE,            /* r */
  107.     WFILE,            /* w */
  108.     SUBST,            /* s */
  109.     TR            /* y */
  110. };
  111.  
  112. /*
  113.  * Structure containing things to append before a line is read
  114.  */
  115. struct s_appends {
  116.     enum {AP_STRING, AP_FILE} type;
  117.     char *s;
  118. };
  119.  
  120. enum e_spflag {
  121.     APPEND,                    /* Append to the contents. */
  122.     APPENDNL,                /* Append, with newline. */
  123.     REPLACE,                /* Replace the contents. */
  124. };
  125.  
  126. /*
  127.  * Structure for a space (process, hold, otherwise).
  128.  */
  129. typedef struct {
  130.     char *space;        /* Current space pointer. */
  131.     size_t len;        /* Current length. */
  132.     int deleted;        /* If deleted. */
  133.     char *back;        /* Backing memory. */
  134.     size_t blen;        /* Backing memory length. */
  135. } SPACE;
  136.  
  137. /*
  138.  * Error severity codes:
  139.  */
  140. #define    FATAL        0    /* Exit immediately with 1 */
  141. #define    ERROR        1    /* Continue, but change exit value */
  142. #define    WARNING        2    /* Just print the warning */
  143. #define    COMPILE        3    /* Print error, count and finish script */
  144. #define    COMPILE2    3    /* Print error, count and finish script */
  145.