Initial import from FreeBSD RELENG_4:
[dragonfly.git] / include / histedit.h
1 /* $FreeBSD: src/include/histedit.h,v 1.5 1999/08/27 23:44:50 peter Exp $ */
2 /*      $NetBSD: histedit.h,v 1.5 1997/04/11 17:52:45 christos Exp $    */
3
4 /*-
5  * Copyright (c) 1992, 1993
6  *      The Regents of the University of California.  All rights reserved.
7  *
8  * This code is derived from software contributed to Berkeley by
9  * Christos Zoulas of Cornell University.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions and the following disclaimer.
16  * 2. Redistributions in binary form must reproduce the above copyright
17  *    notice, this list of conditions and the following disclaimer in the
18  *    documentation and/or other materials provided with the distribution.
19  * 3. All advertising materials mentioning features or use of this software
20  *    must display the following acknowledgement:
21  *      This product includes software developed by the University of
22  *      California, Berkeley and its contributors.
23  * 4. Neither the name of the University nor the names of its contributors
24  *    may be used to endorse or promote products derived from this software
25  *    without specific prior written permission.
26  *
27  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
28  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
31  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
32  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
33  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
34  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
35  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
36  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
37  * SUCH DAMAGE.
38  *
39  *      @(#)histedit.h  8.2 (Berkeley) 1/3/94
40  */
41
42 /*
43  * histedit.h: Line editor and history interface.
44  */
45 #ifndef _h_editline
46 #define _h_editline
47
48 #include <sys/types.h>
49 #include <stdio.h>
50
51 /*
52  * ==== Editing ====
53  */
54 typedef struct editline EditLine;
55
56 /*
57  * For user-defined function interface
58  */
59 typedef struct lineinfo {
60     const char *buffer;
61     const char *cursor;
62     const char *lastchar;
63 } LineInfo;
64
65
66 /*
67  * EditLine editor function return codes.
68  * For user-defined function interface
69  */
70 #define CC_NORM         0
71 #define CC_NEWLINE      1
72 #define CC_EOF          2
73 #define CC_ARGHACK      3
74 #define CC_REFRESH      4
75 #define CC_CURSOR       5
76 #define CC_ERROR        6
77 #define CC_FATAL        7
78 #define CC_REDISPLAY    8
79
80 /*
81  * Initialization, cleanup, and resetting
82  */
83 EditLine        *el_init        __P((const char *, FILE *, FILE *));
84 void             el_reset       __P((EditLine *));
85 void             el_end         __P((EditLine *));
86
87
88 /*
89  * Get a line, a character or push a string back in the input queue
90  */
91 const char    *el_gets  __P((EditLine *, int *));
92 int              el_getc        __P((EditLine *, char *));
93 void             el_push        __P((EditLine *, const char *));
94
95 /*
96  * High level function internals control
97  * Parses argc, argv array and executes builtin editline commands
98  */
99 int              el_parse       __P((EditLine *, int, char **)); 
100
101 /*
102  * Low level editline access function
103  */
104 int              el_set         __P((EditLine *, int, ...));
105
106 /*
107  * el_set/el_get parameters
108  */
109 #define EL_PROMPT       0       /* , el_pfunc_t);               */
110 #define EL_TERMINAL     1       /* , const char *);             */
111 #define EL_EDITOR       2       /* , const char *);             */
112 #define EL_SIGNAL       3       /* , int);                      */
113 #define EL_BIND         4       /* , const char *, ..., NULL);  */
114 #define EL_TELLTC       5       /* , const char *, ..., NULL);  */
115 #define EL_SETTC        6       /* , const char *, ..., NULL);  */
116 #define EL_ECHOTC       7       /* , const char *, ..., NULL);  */
117 #define EL_SETTY        8       /* , const char *, ..., NULL);  */
118 #define EL_ADDFN        9       /* , const char *, const char * */
119                                 /* , el_func_t);                */
120 #define EL_HIST         10      /* , hist_fun_t, const char *); */
121
122 /*
123  * Source named file or $PWD/.editrc or $HOME/.editrc
124  */
125 int             el_source       __P((EditLine *, const char *));
126
127 /*
128  * Must be called when the terminal changes size; If EL_SIGNAL
129  * is set this is done automatically otherwise it is the responsibility
130  * of the application
131  */
132 void             el_resize      __P((EditLine *));
133
134 void             el_data_set    __P((EditLine *, void *));
135 void *           el_data_get    __P((EditLine *));
136
137
138 /*
139  * User-defined function interface.
140  */
141 const LineInfo *el_line __P((EditLine *));
142 int               el_insertstr  __P((EditLine *, char *));
143 void              el_deletestr  __P((EditLine *, int));
144
145 /*
146  * ==== History ====
147  */
148
149 typedef struct history History;
150
151 typedef struct HistEvent {
152     int           num;
153     const char *str;
154 } HistEvent;
155
156 /*
157  * History access functions.
158  */
159 History *               history_init    __P((void));
160 void                    history_end     __P((History *));
161
162 const HistEvent *       history         __P((History *, int, ...));
163
164 #define H_FUNC           0      /* , UTSL               */
165 #define H_EVENT          1      /* , const int);        */
166 #define H_FIRST          2      /* , void);             */
167 #define H_LAST           3      /* , void);             */
168 #define H_PREV           4      /* , void);             */
169 #define H_NEXT           5      /* , void);             */
170 #define H_CURR           6      /* , void);             */
171 #define H_ADD            7      /* , const char*);      */
172 #define H_ENTER          8      /* , const char*);      */
173 #define H_END            9      /* , void);             */
174 #define H_NEXT_STR      10      /* , const char*);      */
175 #define H_PREV_STR      11      /* , const char*);      */
176 #define H_NEXT_EVENT    12      /* , const int);        */
177 #define H_PREV_EVENT    13      /* , const int);        */
178 #define H_LOAD          14      /* , const char *);     */
179 #define H_SAVE          15      /* , const char *);     */
180 #define H_CLEAR         16      /* , void);             */
181
182 #endif /* _h_editline */