4.4BSD/usr/src/contrib/nvi/nvi/seq.h
/*-
* Copyright (c) 1992, 1993
* The Regents of the University of California. All rights reserved.
*
* 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.
*
* @(#)seq.h 8.1 (Berkeley) 6/9/93
*/
/*
* Map and abbreviation structures.
*
* The map structure is an UCHAR_MAX size array of SEQ pointers which are
* NULL or valid depending if the offset key begins any map or abbreviation
* sequences. If the pointer is valid, it references a doubly linked list
* of SEQ pointers, threaded through the snext and sprev pointers. This is
* based on the belief that most normal characters won't start sequences so
* lookup will be fast on non-mapped characters. Only a single pointer is
* maintained to keep the overhead of the map array fairly small, so the first
* element of the linked list has a NULL sprev pointer and the last element
* of the list has a NULL snext pointer. The structures in this list are
* ordered by length, shortest to longest. This is so that short matches
* will happen before long matches when the list is searched.
*
* In addition, each SEQ structure is on another doubly linked list of SEQ
* pointers, threaded through the next and prev pointers. This is a list
* of all of the sequences. This list is used by the routines that display
* all of the sequences to the screen or write them to a file.
*/
/* Sequence type. */
enum seqtype { SEQ_ABBREV, SEQ_COMMAND, SEQ_INPUT };
typedef struct _seq {
struct _seq *next, *prev; /* Linked list of all sequences. */
struct _seq *snext, *sprev; /* Linked list of ch sequences. */
enum seqtype stype; /* Sequence type. */
char *name; /* Name of the sequence, if any. */
char *input; /* Input key sequence. */
size_t ilen; /* Input key sequence length. */
char *output; /* Output key sequence. */
size_t olen; /* Output key sequence length. */
#define S_USERDEF 0x01 /* If sequence user defined. */
u_char flags;
} SEQ;
int abbr_save __P((struct _scr *, FILE *));
int map_save __P((struct _scr *, FILE *));
int seq_delete __P((struct _scr *, char *, enum seqtype));
int seq_dump __P((struct _scr *, enum seqtype, int));
SEQ *seq_find __P((struct _scr *, char *, size_t, enum seqtype, int *));
void seq_init __P((struct _scr *));
int seq_save __P((struct _scr *, FILE *, char *, enum seqtype));
int seq_set __P((struct _scr *,
char *, char *, char *, enum seqtype, int));