112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*	$NetBSD: histedit.h,v 1.51 2013/07/12 17:48:29 christos Exp $	*/
212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*-
412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Copyright (c) 1992, 1993
512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *	The Regents of the University of California.  All rights reserved.
612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *
712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * This code is derived from software contributed to Berkeley by
812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Christos Zoulas of Cornell University.
912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *
1012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Redistribution and use in source and binary forms, with or without
1112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * modification, are permitted provided that the following conditions
1212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * are met:
1312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * 1. Redistributions of source code must retain the above copyright
1412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *    notice, this list of conditions and the following disclaimer.
1512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * 2. Redistributions in binary form must reproduce the above copyright
1612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *    notice, this list of conditions and the following disclaimer in the
1712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *    documentation and/or other materials provided with the distribution.
1812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * 3. Neither the name of the University nor the names of its contributors
1912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *    may be used to endorse or promote products derived from this software
2012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *    without specific prior written permission.
2112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *
2212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
3012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
3112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * SUCH DAMAGE.
3312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *
3412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *	@(#)histedit.h	8.2 (Berkeley) 1/3/94
3512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
3612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
3712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*
3812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * histedit.h: Line editor and history interface.
3912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
4012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#ifndef _HISTEDIT_H_
4112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	_HISTEDIT_H_
4212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
4312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	LIBEDIT_MAJOR 2
4412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	LIBEDIT_MINOR 11
4512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
4612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#include <sys/types.h>
4712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#include <stdio.h>
4812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
4912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#ifdef __cplusplus
5012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaextern "C" {
5112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#endif
5212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
5312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*
5412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * ==== Editing ====
5512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
5612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
5712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialatypedef struct editline EditLine;
5812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
5912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*
6012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * For user-defined function interface
6112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
6212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialatypedef struct lineinfo {
6312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala	const char	*buffer;
6412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala	const char	*cursor;
6512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala	const char	*lastchar;
6612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} LineInfo;
6712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
6812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*
6912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * EditLine editor function return codes.
7012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * For user-defined function interface
7112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
7212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	CC_NORM		0
7312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	CC_NEWLINE	1
7412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	CC_EOF		2
7512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	CC_ARGHACK	3
7612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	CC_REFRESH	4
7712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	CC_CURSOR	5
7812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	CC_ERROR	6
7912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	CC_FATAL	7
8012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	CC_REDISPLAY	8
8112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	CC_REFRESH_BEEP	9
8212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
8312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*
8412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Initialization, cleanup, and resetting
8512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
8612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd FialaEditLine	*el_init(const char *, FILE *, FILE *, FILE *);
8712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd FialaEditLine	*el_init_fd(const char *, FILE *, FILE *, FILE *,
8812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala    int, int, int);
8912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialavoid		 el_end(EditLine *);
9012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialavoid		 el_reset(EditLine *);
9112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
9212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*
9312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Get a line, a character or push a string back in the input queue
9412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
9512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaconst char	*el_gets(EditLine *, int *);
9612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaint		 el_getc(EditLine *, char *);
9712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialavoid		 el_push(EditLine *, const char *);
9812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
9912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*
10012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Beep!
10112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
10212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialavoid		 el_beep(EditLine *);
10312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
10412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*
10512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * High level function internals control
10612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Parses argc, argv array and executes builtin editline commands
10712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
10812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaint		 el_parse(EditLine *, int, const char **);
10912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
11012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*
11112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Low level editline access functions
11212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
11312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaint		 el_set(EditLine *, int, ...);
11412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaint		 el_get(EditLine *, int, ...);
11512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaunsigned char	_el_fn_complete(EditLine *, int);
11612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
11712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*
11812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * el_set/el_get parameters
11912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *
12012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * When using el_wset/el_wget (as opposed to el_set/el_get):
12112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *   Char is wchar_t, otherwise it is char.
12212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *   prompt_func is el_wpfunc_t, otherwise it is el_pfunc_t .
12312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
12412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Prompt function prototypes are:
12512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *   typedef char    *(*el_pfunct_t)  (EditLine *);
12612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *   typedef wchar_t *(*el_wpfunct_t) (EditLine *);
12712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *
12812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * For operations that support set or set/get, the argument types listed are for
12912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * the "set" operation. For "get", each listed type must be a pointer.
13012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * E.g. EL_EDITMODE takes an int when set, but an int* when get.
13112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala *
13212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Operations that only support "get" have the correct argument types listed.
13312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
13412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_PROMPT	0	/* , prompt_func);		      set/get */
13512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_TERMINAL	1	/* , const char *);		      set/get */
13612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_EDITOR	2	/* , const Char *);		      set/get */
13712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_SIGNAL	3	/* , int);			      set/get */
13812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_BIND		4	/* , const Char *, ..., NULL);	      set     */
13912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_TELLTC	5	/* , const Char *, ..., NULL);	      set     */
14012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_SETTC	6	/* , const Char *, ..., NULL);	      set     */
14112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_ECHOTC	7	/* , const Char *, ..., NULL);        set     */
14212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_SETTY	8	/* , const Char *, ..., NULL);        set     */
14312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_ADDFN	9	/* , const Char *, const Char,        set     */
14412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala				/*   el_func_t);		 	      */
14512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_HIST		10	/* , hist_fun_t, const void *);	      set     */
14612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_EDITMODE	11	/* , int);			      set/get */
14712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_RPROMPT	12	/* , prompt_func);		      set/get */
14812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_GETCFN	13	/* , el_rfunc_t);		      set/get */
14912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_CLIENTDATA	14	/* , void *);			      set/get */
15012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_UNBUFFERED	15	/* , int);			      set/get */
15112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_PREP_TERM	16	/* , int);			      set     */
15212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_GETTC	17	/* , const Char *, ..., NULL);		  get */
15312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_GETFP	18	/* , int, FILE **);		          get */
15412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_SETFP	19	/* , int, FILE *);		      set     */
15512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_REFRESH	20	/* , void);			      set     */
15612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_PROMPT_ESC	21	/* , prompt_func, Char);	      set/get */
15712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_RPROMPT_ESC	22	/* , prompt_func, Char);	      set/get */
15812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_RESIZE	23	/* , el_zfunc_t, void *);	      set     */
15912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
16012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	EL_BUILTIN_GETCFN	(NULL)
16112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
16212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*
16312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Source named file or $PWD/.editrc or $HOME/.editrc
16412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
16512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaint		el_source(EditLine *, const char *);
16612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
16712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*
16812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Must be called when the terminal changes size; If EL_SIGNAL
16912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * is set this is done automatically otherwise it is the responsibility
17012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * of the application
17112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
17212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialavoid		 el_resize(EditLine *);
17312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
17412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*
17512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * User-defined function interface.
17612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
17712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaconst LineInfo	*el_line(EditLine *);
17812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaint		 el_insertstr(EditLine *, const char *);
17912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialavoid		 el_deletestr(EditLine *, int);
18012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
18112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
18212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*
18312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * ==== History ====
18412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
18512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
18612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialatypedef struct history History;
18712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
18812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialatypedef struct HistEvent {
18912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala	int		 num;
19012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala	const char	*str;
19112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} HistEvent;
19212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
19312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*
19412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * History access functions.
19512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
19612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd FialaHistory *	history_init(void);
19712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialavoid		history_end(History *);
19812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
19912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaint		history(History *, HistEvent *, int, ...);
20012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
20112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_FUNC		 0	/* , UTSL		*/
20212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_SETSIZE	 1	/* , const int);	*/
20312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_GETSIZE	 2	/* , void);		*/
20412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_FIRST		 3	/* , void);		*/
20512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_LAST		 4	/* , void);		*/
20612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_PREV		 5	/* , void);		*/
20712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_NEXT		 6	/* , void);		*/
20812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_CURR		 8	/* , const int);	*/
20912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_SET		 7	/* , int);		*/
21012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_ADD		 9	/* , const wchar_t *);	*/
21112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_ENTER		10	/* , const wchar_t *);	*/
21212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_APPEND	11	/* , const wchar_t *);	*/
21312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_END		12	/* , void);		*/
21412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_NEXT_STR	13	/* , const wchar_t *);	*/
21512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_PREV_STR	14	/* , const wchar_t *);	*/
21612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_NEXT_EVENT	15	/* , const int);	*/
21712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_PREV_EVENT	16	/* , const int);	*/
21812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_LOAD		17	/* , const char *);	*/
21912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_SAVE		18	/* , const char *);	*/
22012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_CLEAR		19	/* , void);		*/
22112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_SETUNIQUE	20	/* , int);		*/
22212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_GETUNIQUE	21	/* , void);		*/
22312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_DEL		22	/* , int);		*/
22412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_NEXT_EVDATA	23	/* , const int, histdata_t *);	*/
22512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_DELDATA	24	/* , int, histdata_t *);*/
22612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define	H_REPLACE	25	/* , const char *, histdata_t);	*/
22712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
22812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
22912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
23012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*
23112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * ==== Tokenization ====
23212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
23312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
23412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialatypedef struct tokenizer Tokenizer;
23512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
23612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*
23712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * String tokenization functions, using simplified sh(1) quoting rules
23812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
23912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd FialaTokenizer	*tok_init(const char *);
24012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialavoid		 tok_end(Tokenizer *);
24112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialavoid		 tok_reset(Tokenizer *);
24212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaint		 tok_line(Tokenizer *, const LineInfo *,
24312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala		    int *, const char ***, int *, int *);
24412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaint		 tok_str(Tokenizer *, const char *,
24512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala		    int *, const char ***);
24612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
24712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*
24812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Begin Wide Character Support
24912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
25012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#ifdef __linux__
25112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* Apparently we need _GNU_SOURCE defined to get access to wcsdup on Linux */
25212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#ifndef _GNU_SOURCE
25312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define _GNU_SOURCE
25412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#endif
25512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#endif
25612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
25712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#include <wchar.h>
25812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#include <wctype.h>
25912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
26012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*
26112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * Wide character versions
26212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
26312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
26412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*
26512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * ==== Editing ====
26612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
26712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialatypedef struct lineinfow {
26812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala	const wchar_t	*buffer;
26912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala	const wchar_t	*cursor;
27012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala	const wchar_t	*lastchar;
27112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} LineInfoW;
27212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
27312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaconst wchar_t	*el_wgets(EditLine *, int *);
27412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaint		 el_wgetc(EditLine *, wchar_t *);
27512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialavoid		 el_wpush(EditLine *, const wchar_t *);
27612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
27712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaint		 el_wparse(EditLine *, int, const wchar_t **);
27812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
27912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaint		 el_wset(EditLine *, int, ...);
28012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaint		 el_wget(EditLine *, int, ...);
28112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
28212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaint		 el_cursor(EditLine *, int);
28312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaconst LineInfoW	*el_wline(EditLine *);
28412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaint		 el_winsertstr(EditLine *, const wchar_t *);
28512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#define          el_wdeletestr  el_deletestr
28612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
28712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*
28812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * ==== History ====
28912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
29012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialatypedef struct histeventW {
29112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala	int		 num;
29212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala	const wchar_t	*str;
29312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala} HistEventW;
29412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
29512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialatypedef struct historyW HistoryW;
29612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
29712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd FialaHistoryW *	history_winit(void);
29812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialavoid		history_wend(HistoryW *);
29912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
30012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaint		history_w(HistoryW *, HistEventW *, int, ...);
30112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
30212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/*
30312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala * ==== Tokenization ====
30412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala */
30512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialatypedef struct tokenizerW TokenizerW;
30612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
30712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala/* Wide character tokenizer support */
30812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd FialaTokenizerW	*tok_winit(const wchar_t *);
30912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialavoid		 tok_wend(TokenizerW *);
31012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialavoid		 tok_wreset(TokenizerW *);
31112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaint		 tok_wline(TokenizerW *, const LineInfoW *,
31212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala		    int *, const wchar_t ***, int *, int *);
31312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialaint		 tok_wstr(TokenizerW *, const wchar_t *,
31412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala		    int *, const wchar_t ***);
31512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
31612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#ifdef __cplusplus
31712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala}
31812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#endif
31912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
32012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala#endif /* _HISTEDIT_H_ */
321