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