histedit.h revision 170547
118334Speter/*-
218334Speter * Copyright (c) 1992, 1993
318334Speter *	The Regents of the University of California.  All rights reserved.
418334Speter *
518334Speter * This code is derived from software contributed to Berkeley by
618334Speter * Christos Zoulas of Cornell University.
718334Speter *
818334Speter * Redistribution and use in source and binary forms, with or without
918334Speter * modification, are permitted provided that the following conditions
1018334Speter * are met:
1118334Speter * 1. Redistributions of source code must retain the above copyright
1218334Speter *    notice, this list of conditions and the following disclaimer.
1318334Speter * 2. Redistributions in binary form must reproduce the above copyright
1418334Speter *    notice, this list of conditions and the following disclaimer in the
1518334Speter *    documentation and/or other materials provided with the distribution.
1618334Speter * 3. Neither the name of the University nor the names of its contributors
1718334Speter *    may be used to endorse or promote products derived from this software
1818334Speter *    without specific prior written permission.
1918334Speter *
2018334Speter * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2118334Speter * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2218334Speter * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2318334Speter * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2418334Speter * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2518334Speter * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2618334Speter * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2718334Speter * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2818334Speter * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2918334Speter * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3018334Speter * SUCH DAMAGE.
3118334Speter *
3218334Speter *	@(#)histedit.h	8.2 (Berkeley) 1/3/94
3318334Speter *	$NetBSD: histedit.h,v 1.32 2007/06/10 20:20:28 christos Exp $
3418334Speter * $FreeBSD: head/include/histedit.h 170547 2007-06-11 06:25:19Z stefanf $
3518334Speter */
3618334Speter
3718334Speter/*
3818334Speter * histedit.h: Line editor and history interface.
3918334Speter */
4018334Speter#ifndef _HISTEDIT_H_
4118334Speter#define	_HISTEDIT_H_
4218334Speter
4318334Speter#include <sys/types.h>
4418334Speter#include <stdio.h>
4518334Speter
4618334Speter__BEGIN_DECLS
4718334Speter
4818334Speter/*
4918334Speter * ==== Editing ====
5018334Speter */
5118334Speter
5218334Spetertypedef struct editline EditLine;
5318334Speter
5418334Speter/*
5518334Speter * For user-defined function interface
5618334Speter */
5718334Spetertypedef struct lineinfo {
5818334Speter	const char	*buffer;
5918334Speter	const char	*cursor;
6018334Speter	const char	*lastchar;
6118334Speter} LineInfo;
6218334Speter
6318334Speter/*
6418334Speter * EditLine editor function return codes.
6518334Speter * For user-defined function interface
6618334Speter */
6718334Speter#define	CC_NORM		0
6818334Speter#define	CC_NEWLINE	1
6918334Speter#define	CC_EOF		2
7018334Speter#define	CC_ARGHACK	3
7118334Speter#define	CC_REFRESH	4
7218334Speter#define	CC_CURSOR	5
7318334Speter#define	CC_ERROR	6
7418334Speter#define	CC_FATAL	7
7518334Speter#define	CC_REDISPLAY	8
7618334Speter#define	CC_REFRESH_BEEP	9
7718334Speter
7818334Speter/*
7918334Speter * Initialization, cleanup, and resetting
8018334Speter */
8118334SpeterEditLine	*el_init(const char *, FILE *, FILE *, FILE *);
8218334Spetervoid		 el_end(EditLine *);
8318334Spetervoid		 el_reset(EditLine *);
8418334Speter
8518334Speter/*
8618334Speter * Get a line, a character or push a string back in the input queue
8718334Speter */
8818334Speterconst char	*el_gets(EditLine *, int *);
8950397Sobrienint		 el_getc(EditLine *, char *);
9018334Spetervoid		 el_push(EditLine *, char *);
9118334Speter
9218334Speter/*
9318334Speter * Beep!
9418334Speter */
9518334Spetervoid		 el_beep(EditLine *);
9618334Speter
9718334Speter/*
9818334Speter * High level function internals control
9918334Speter * Parses argc, argv array and executes builtin editline commands
10018334Speter */
10118334Speterint		 el_parse(EditLine *, int, const char **);
10218334Speter
10318334Speter/*
10418334Speter * Low level editline access functions
10518334Speter */
10618334Speterint		 el_set(EditLine *, int, ...);
10718334Speterint		 el_get(EditLine *, int, ...);
10818334Speter#if 0
10918334Speterunsigned char	_el_fn_complete(EditLine *, int);
11018334Speter#endif
11118334Speter
11218334Speter/*
11318334Speter * el_set/el_get parameters
11418334Speter */
11518334Speter#define	EL_PROMPT	0	/* , el_pfunc_t);		*/
11618334Speter#define	EL_TERMINAL	1	/* , const char *);		*/
11718334Speter#define	EL_EDITOR	2	/* , const char *);		*/
11818334Speter#define	EL_SIGNAL	3	/* , int);			*/
11918334Speter#define	EL_BIND		4	/* , const char *, ..., NULL);	*/
12018334Speter#define	EL_TELLTC	5	/* , const char *, ..., NULL);	*/
12118334Speter#define	EL_SETTC	6	/* , const char *, ..., NULL);	*/
12218334Speter#define	EL_ECHOTC	7	/* , const char *, ..., NULL);	*/
12318334Speter#define	EL_SETTY	8	/* , const char *, ..., NULL);	*/
12418334Speter#define	EL_ADDFN	9	/* , const char *, const char *	*/
12518334Speter				/* , el_func_t);		*/
12618334Speter#define	EL_HIST		10	/* , hist_fun_t, const char *);	*/
12718334Speter#define	EL_EDITMODE	11	/* , int);			*/
12818334Speter#define	EL_RPROMPT	12	/* , el_pfunc_t);		*/
12918334Speter#define	EL_GETCFN	13	/* , el_rfunc_t);		*/
13018334Speter#define	EL_CLIENTDATA	14	/* , void *);			*/
13118334Speter#define	EL_UNBUFFERED	15	/* , int);			*/
13218334Speter#define	EL_PREP_TERM    16      /* , int);                      */
13318334Speter#define	EL_GETTC	17	/* , const char *, ..., NULL);	*/
13418334Speter#define	EL_GETFP	18	/* , int, FILE **)		*/
13518334Speter#define	EL_SETFP	19	/* , int, FILE *)		*/
13618334Speter
13718334Speter#define	EL_BUILTIN_GETCFN	(NULL)
13818334Speter
13918334Speter/*
14018334Speter * Source named file or $PWD/.editrc or $HOME/.editrc
14118334Speter */
14218334Speterint		el_source(EditLine *, const char *);
14318334Speter
14418334Speter/*
14518334Speter * Must be called when the terminal changes size; If EL_SIGNAL
14618334Speter * is set this is done automatically otherwise it is the responsibility
14718334Speter * of the application
14818334Speter */
14918334Spetervoid		 el_resize(EditLine *);
15018334Speter
15118334Speter
15218334Speter/*
15318334Speter * Set user private data.
15418334Speter */
15518334Spetervoid            el_data_set    __P((EditLine *, void *));
15618334Spetervoid *          el_data_get    __P((EditLine *));
15718334Speter
15818334Speter/*
15918334Speter * User-defined function interface.
16018334Speter */
16118334Speterconst LineInfo	*el_line(EditLine *);
16218334Speterint		 el_insertstr(EditLine *, const char *);
16318334Spetervoid		 el_deletestr(EditLine *, int);
16418334Speter
16518334Speter
16618334Speter/*
16718334Speter * ==== History ====
16818334Speter */
16918334Speter
17018334Spetertypedef struct history History;
17118334Speter
17218334Spetertypedef struct HistEvent {
17318334Speter	int		 num;
17418334Speter	const char	*str;
17518334Speter} HistEvent;
17618334Speter
17718334Speter/*
17818334Speter * History access functions.
17918334Speter */
18018334SpeterHistory *	history_init(void);
18118334Spetervoid		history_end(History *);
18218334Speter
18318334Speterint		history(History *, HistEvent *, int, ...);
18418334Speter
18518334Speter#define	H_FUNC		 0	/* , UTSL		*/
18618334Speter#define	H_SETSIZE	 1	/* , const int);	*/
18718334Speter#define	H_EVENT		 1	/* , const int);	*/
18818334Speter#define	H_GETSIZE	 2	/* , void);		*/
18918334Speter#define	H_FIRST		 3	/* , void);		*/
19018334Speter#define	H_LAST		 4	/* , void);		*/
19118334Speter#define	H_PREV		 5	/* , void);		*/
19218334Speter#define	H_NEXT		 6	/* , void);		*/
19318334Speter#define	H_CURR		 8	/* , const int);	*/
19418334Speter#define	H_SET		 7	/* , int);		*/
19518334Speter#define	H_ADD		 9	/* , const char *);	*/
19618334Speter#define	H_ENTER		10	/* , const char *);	*/
19718334Speter#define	H_APPEND	11	/* , const char *);	*/
19818334Speter#define	H_END		12	/* , void);		*/
19918334Speter#define	H_NEXT_STR	13	/* , const char *);	*/
20018334Speter#define	H_PREV_STR	14	/* , const char *);	*/
20118334Speter#define	H_NEXT_EVENT	15	/* , const int);	*/
20218334Speter#define	H_PREV_EVENT	16	/* , const int);	*/
20318334Speter#define	H_LOAD		17	/* , const char *);	*/
20418334Speter#define	H_SAVE		18	/* , const char *);	*/
20518334Speter#define	H_CLEAR		19	/* , void);		*/
20618334Speter#define	H_SETUNIQUE	20	/* , int);		*/
20718334Speter#define	H_GETUNIQUE	21	/* , void);		*/
20818334Speter#define	H_DEL		22	/* , int);		*/
20918334Speter
21018334Speter
21118334Speter/*
21218334Speter * ==== Tokenization ====
21318334Speter */
21418334Speter
21518334Spetertypedef struct tokenizer Tokenizer;
21618334Speter
21718334Speter/*
21818334Speter * String tokenization functions, using simplified sh(1) quoting rules
21918334Speter */
22018334SpeterTokenizer	*tok_init(const char *);
22118334Spetervoid		 tok_end(Tokenizer *);
22218334Spetervoid		 tok_reset(Tokenizer *);
22318334Speterint		 tok_line(Tokenizer *, const LineInfo *,
22418334Speter		    int *, const char ***, int *, int *);
22518334Speterint		 tok_str(Tokenizer *, const char *,
22618334Speter		    int *, const char ***);
22718334Speter
22818334Speter__END_DECLS
22918334Speter
23018334Speter#endif /* _HISTEDIT_H_ */
23118334Speter