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