9514a707a1511eb39e23f8e010ad799295c5b640
[dragonfly.git] / lib / libedit / el.h
1 /*-
2  * Copyright (c) 1992, 1993
3  *      The Regents of the University of California.  All rights reserved.
4  *
5  * This code is derived from software contributed to Berkeley by
6  * Christos Zoulas of Cornell University.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 3. All advertising materials mentioning features or use of this software
17  *    must display the following acknowledgement:
18  *      This product includes software developed by the University of
19  *      California, Berkeley and its contributors.
20  * 4. Neither the name of the University nor the names of its contributors
21  *    may be used to endorse or promote products derived from this software
22  *    without specific prior written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34  * SUCH DAMAGE.
35  *
36  *      @(#)el.h        8.1 (Berkeley) 6/4/93
37  */
38
39 /*
40  * el.h: Internal structures.
41  */
42 #ifndef _h_el
43 #define _h_el
44 /*
45  * Local defaults
46  */
47 #define KSHVI
48 #define VIDEFAULT
49 #define ANCHOR
50
51 #include <stdio.h>
52 #include <sys/types.h>
53
54 #define EL_BUFSIZ       1024            /* Maximum line size            */
55
56 #define HANDLE_SIGNALS  1
57
58 typedef int bool_t;                     /* True or not                  */
59
60 typedef unsigned char el_action_t;      /* Index to command array       */
61
62 typedef struct coord_t {                /* Position on the screen       */
63     int h, v;
64 } coord_t;
65
66 typedef struct el_line_t {
67     char *buffer,                       /* Input line                   */
68          *cursor,                       /* Cursor position              */
69          *lastchar,                     /* Last character               */
70          *limit;                        /* Max position                 */
71 } el_line_t;
72
73 /*
74  * Editor state
75  */
76 typedef struct el_state_t {
77     int         inputmode;              /* What mode are we in?         */
78     int         doingarg;               /* Are we getting an argument?  */
79     int         argument;               /* Numeric argument             */
80     int         metanext;               /* Is the next char a meta char */
81     el_action_t lastcmd;                /* Previous command             */
82 } el_state_t;
83
84 /*
85  * Until we come up with something better...
86  */
87 #define el_malloc(a)    malloc(a)
88 #define el_realloc(a,b) realloc(a, b)
89 #define el_reallocf(a,b) reallocf(a, b)
90 #define el_free(a)      free(a)
91
92 #include "tty.h"
93 #include "prompt.h"
94 #include "key.h"
95 #include "term.h"
96 #include "refresh.h"
97 #include "chared.h"
98 #include "common.h"
99 #include "search.h"
100 #include "hist.h"
101 #include "map.h"
102 #include "parse.h"
103 #include "sig.h"
104 #include "help.h"
105
106 struct editline {
107     char         *el_prog;      /* the program name                     */
108     FILE         *el_outfile;   /* Stdio stuff                          */
109     FILE         *el_errfile;   /* Stdio stuff                          */
110     int           el_infd;      /* Input file descriptor                */
111     int           el_flags;     /* Various flags.                       */
112     coord_t       el_cursor;    /* Cursor location                      */
113     char        **el_display,   /* Real screen image = what is there    */
114                 **el_vdisplay;  /* Virtual screen image = what we see   */
115
116     el_line_t     el_line;      /* The current line information         */
117     el_state_t    el_state;     /* Current editor state                 */
118     el_term_t     el_term;      /* Terminal dependent stuff             */
119     el_tty_t      el_tty;       /* Tty dependent stuff                  */
120     el_refresh_t  el_refresh;   /* Refresh stuff                        */
121     el_prompt_t   el_prompt;    /* Prompt stuff                         */
122     el_chared_t   el_chared;    /* Characted editor stuff               */
123     el_map_t      el_map;       /* Key mapping stuff                    */
124     el_key_t      el_key;       /* Key binding stuff                    */
125     el_history_t  el_history;   /* History stuff                        */
126     el_search_t   el_search;    /* Search stuff                         */
127     el_signal_t   el_signal;    /* Signal handling stuff                */
128
129     void         *data;         /* user data */
130 };
131
132 #endif /* _h_el */