Home | History | Annotate | Line # | Download | only in libedit
histedit.h revision 1.1
      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  *	@(#)histedit.h	8.2 (Berkeley) 1/3/94
     37  */
     38 
     39 /*
     40  * histedit.h: Line editor and history interface.
     41  */
     42 #ifndef _h_editline
     43 #define _h_editline
     44 
     45 #include <sys/types.h>
     46 #include <stdio.h>
     47 
     48 /*
     49  * ==== Editing ====
     50  */
     51 typedef struct editline EditLine;
     52 
     53 /*
     54  * For user-defined function interface
     55  */
     56 typedef struct lineinfo {
     57     __const char *buffer;
     58     __const char *cursor;
     59     __const char *lastchar;
     60 } LineInfo;
     61 
     62 
     63 /*
     64  * EditLine editor function return codes.
     65  * For user-defined function interface
     66  */
     67 #define	CC_NORM		0
     68 #define	CC_NEWLINE	1
     69 #define	CC_EOF		2
     70 #define CC_ARGHACK	3
     71 #define CC_REFRESH	4
     72 #define	CC_CURSOR	5
     73 #define	CC_ERROR	6
     74 #define CC_FATAL	7
     75 
     76 /*
     77  * Initialization, cleanup, and resetting
     78  */
     79 EditLine	*el_init	__P((const char *, FILE *, FILE *));
     80 void		 el_reset	__P((EditLine *));
     81 void		 el_end		__P((EditLine *));
     82 
     83 
     84 /*
     85  * Get a line, a character or push a string back in the input queue
     86  */
     87 __const char    *el_gets	__P((EditLine *, int *));
     88 int		 el_getc	__P((EditLine *, char *));
     89 void		 el_push	__P((EditLine *, const char *));
     90 
     91 /*
     92  * High level function internals control
     93  * Parses argc, argv array and executes builtin editline commands
     94  */
     95 int		 el_parse	__P((EditLine *, int, char **));
     96 
     97 /*
     98  * Low level editline access function
     99  */
    100 int 		 el_set		__P((EditLine *, int, ...));
    101 
    102 /*
    103  * el_set/el_get parameters
    104  */
    105 #define EL_PROMPT	0	/* , el_pfunc_t);		*/
    106 #define EL_TERMINAL	1	/* , const char *);		*/
    107 #define EL_EDITOR	2	/* , const char *);		*/
    108 #define EL_SIGNAL	3	/* , int);			*/
    109 #define	EL_BIND		4	/* , const char *, ..., NULL);	*/
    110 #define	EL_TELLTC	5	/* , const char *, ..., NULL);	*/
    111 #define	EL_SETTC	6	/* , const char *, ..., NULL);	*/
    112 #define	EL_ECHOTC	7	/* , const char *, ..., NULL);	*/
    113 #define	EL_SETTY	8	/* , const char *, ..., NULL);	*/
    114 #define	EL_ADDFN	9	/* , const char *, const char *	*/
    115 				/* , el_func_t);		*/
    116 #define EL_HIST		10	/* , hist_fun_t, const char *);	*/
    117 
    118 /*
    119  * Source named file or $PWD/.editrc or $HOME/.editrc
    120  */
    121 int		el_source	__P((EditLine *, const char *));
    122 
    123 /*
    124  * Must be called when the terminal changes size; If EL_SIGNAL
    125  * is set this is done automatically otherwise it is the responsibility
    126  * of the application
    127  */
    128 void		 el_resize	__P((EditLine *));
    129 
    130 
    131 /*
    132  * User-defined function interface.
    133  */
    134 __const LineInfo *el_line	__P((EditLine *));
    135 int   		  el_insertstr	__P((EditLine *, char *));
    136 void		  el_deletestr	__P((EditLine *, int));
    137 
    138 /*
    139  * ==== History ====
    140  */
    141 
    142 typedef struct history History;
    143 
    144 typedef struct HistEvent {
    145     int 	  num;
    146     __const char *str;
    147 } HistEvent;
    148 
    149 /*
    150  * History access functions.
    151  */
    152 History *		history_init	__P((void));
    153 void 			history_end	__P((History *));
    154 
    155 __const HistEvent *	history		__P((History *, int, ...));
    156 
    157 #define H_FUNC		 0	/* , UTSL		*/
    158 #define H_EVENT		 1	/* , const int);	*/
    159 #define H_FIRST		 2	/* , void);		*/
    160 #define H_LAST		 3	/* , void);		*/
    161 #define H_PREV		 4	/* , void);		*/
    162 #define H_NEXT		 5	/* , void);		*/
    163 #define H_CURR		 6	/* , void);		*/
    164 #define H_ADD		 7	/* , const char*);	*/
    165 #define H_ENTER		 8	/* , const char*);	*/
    166 #define H_END		 9	/* , void);		*/
    167 #define H_NEXT_STR	10	/* , const char*);	*/
    168 #define H_PREV_STR	11	/* , const char*);	*/
    169 #define H_NEXT_EVENT	12	/* , const int);	*/
    170 #define H_PREV_EVENT	13	/* , const int);	*/
    171 
    172 #endif /* _h_editline */
    173