1*d0ef721eSBaptiste Daroussin /* $NetBSD: histedit.h,v 1.57 2017/09/01 10:19:10 christos Exp $ */ 2*d0ef721eSBaptiste Daroussin 3*d0ef721eSBaptiste Daroussin /*- 4*d0ef721eSBaptiste Daroussin * Copyright (c) 1992, 1993 5*d0ef721eSBaptiste Daroussin * The Regents of the University of California. All rights reserved. 6*d0ef721eSBaptiste Daroussin * 7*d0ef721eSBaptiste Daroussin * This code is derived from software contributed to Berkeley by 8*d0ef721eSBaptiste Daroussin * Christos Zoulas of Cornell University. 9*d0ef721eSBaptiste Daroussin * 10*d0ef721eSBaptiste Daroussin * Redistribution and use in source and binary forms, with or without 11*d0ef721eSBaptiste Daroussin * modification, are permitted provided that the following conditions 12*d0ef721eSBaptiste Daroussin * are met: 13*d0ef721eSBaptiste Daroussin * 1. Redistributions of source code must retain the above copyright 14*d0ef721eSBaptiste Daroussin * notice, this list of conditions and the following disclaimer. 15*d0ef721eSBaptiste Daroussin * 2. Redistributions in binary form must reproduce the above copyright 16*d0ef721eSBaptiste Daroussin * notice, this list of conditions and the following disclaimer in the 17*d0ef721eSBaptiste Daroussin * documentation and/or other materials provided with the distribution. 18*d0ef721eSBaptiste Daroussin * 3. Neither the name of the University nor the names of its contributors 19*d0ef721eSBaptiste Daroussin * may be used to endorse or promote products derived from this software 20*d0ef721eSBaptiste Daroussin * without specific prior written permission. 21*d0ef721eSBaptiste Daroussin * 22*d0ef721eSBaptiste Daroussin * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 23*d0ef721eSBaptiste Daroussin * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24*d0ef721eSBaptiste Daroussin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25*d0ef721eSBaptiste Daroussin * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 26*d0ef721eSBaptiste Daroussin * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27*d0ef721eSBaptiste Daroussin * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28*d0ef721eSBaptiste Daroussin * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29*d0ef721eSBaptiste Daroussin * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30*d0ef721eSBaptiste Daroussin * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31*d0ef721eSBaptiste Daroussin * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32*d0ef721eSBaptiste Daroussin * SUCH DAMAGE. 33*d0ef721eSBaptiste Daroussin * 34*d0ef721eSBaptiste Daroussin * @(#)histedit.h 8.2 (Berkeley) 1/3/94 35*d0ef721eSBaptiste Daroussin */ 36*d0ef721eSBaptiste Daroussin 37*d0ef721eSBaptiste Daroussin /* 38*d0ef721eSBaptiste Daroussin * histedit.h: Line editor and history interface. 39*d0ef721eSBaptiste Daroussin */ 40*d0ef721eSBaptiste Daroussin #ifndef _HISTEDIT_H_ 41*d0ef721eSBaptiste Daroussin #define _HISTEDIT_H_ 42*d0ef721eSBaptiste Daroussin 43*d0ef721eSBaptiste Daroussin #define LIBEDIT_MAJOR 2 44*d0ef721eSBaptiste Daroussin #define LIBEDIT_MINOR 11 45*d0ef721eSBaptiste Daroussin 46*d0ef721eSBaptiste Daroussin #include <sys/types.h> 47*d0ef721eSBaptiste Daroussin #include <stdio.h> 48*d0ef721eSBaptiste Daroussin 49*d0ef721eSBaptiste Daroussin #ifdef __cplusplus 50*d0ef721eSBaptiste Daroussin extern "C" { 51*d0ef721eSBaptiste Daroussin #endif 52*d0ef721eSBaptiste Daroussin 53*d0ef721eSBaptiste Daroussin /* 54*d0ef721eSBaptiste Daroussin * ==== Editing ==== 55*d0ef721eSBaptiste Daroussin */ 56*d0ef721eSBaptiste Daroussin 57*d0ef721eSBaptiste Daroussin typedef struct editline EditLine; 58*d0ef721eSBaptiste Daroussin 59*d0ef721eSBaptiste Daroussin /* 60*d0ef721eSBaptiste Daroussin * For user-defined function interface 61*d0ef721eSBaptiste Daroussin */ 62*d0ef721eSBaptiste Daroussin typedef struct lineinfo { 63*d0ef721eSBaptiste Daroussin const char *buffer; 64*d0ef721eSBaptiste Daroussin const char *cursor; 65*d0ef721eSBaptiste Daroussin const char *lastchar; 66*d0ef721eSBaptiste Daroussin } LineInfo; 67*d0ef721eSBaptiste Daroussin 68*d0ef721eSBaptiste Daroussin /* 69*d0ef721eSBaptiste Daroussin * EditLine editor function return codes. 70*d0ef721eSBaptiste Daroussin * For user-defined function interface 71*d0ef721eSBaptiste Daroussin */ 72*d0ef721eSBaptiste Daroussin #define CC_NORM 0 73*d0ef721eSBaptiste Daroussin #define CC_NEWLINE 1 74*d0ef721eSBaptiste Daroussin #define CC_EOF 2 75*d0ef721eSBaptiste Daroussin #define CC_ARGHACK 3 76*d0ef721eSBaptiste Daroussin #define CC_REFRESH 4 77*d0ef721eSBaptiste Daroussin #define CC_CURSOR 5 78*d0ef721eSBaptiste Daroussin #define CC_ERROR 6 79*d0ef721eSBaptiste Daroussin #define CC_FATAL 7 80*d0ef721eSBaptiste Daroussin #define CC_REDISPLAY 8 81*d0ef721eSBaptiste Daroussin #define CC_REFRESH_BEEP 9 82*d0ef721eSBaptiste Daroussin 83*d0ef721eSBaptiste Daroussin /* 84*d0ef721eSBaptiste Daroussin * Initialization, cleanup, and resetting 85*d0ef721eSBaptiste Daroussin */ 86*d0ef721eSBaptiste Daroussin EditLine *el_init(const char *, FILE *, FILE *, FILE *); 87*d0ef721eSBaptiste Daroussin EditLine *el_init_fd(const char *, FILE *, FILE *, FILE *, 88*d0ef721eSBaptiste Daroussin int, int, int); 89*d0ef721eSBaptiste Daroussin void el_end(EditLine *); 90*d0ef721eSBaptiste Daroussin void el_reset(EditLine *); 91*d0ef721eSBaptiste Daroussin 92*d0ef721eSBaptiste Daroussin /* 93*d0ef721eSBaptiste Daroussin * Get a line, a character or push a string back in the input queue 94*d0ef721eSBaptiste Daroussin */ 95*d0ef721eSBaptiste Daroussin const char *el_gets(EditLine *, int *); 96*d0ef721eSBaptiste Daroussin int el_getc(EditLine *, char *); 97*d0ef721eSBaptiste Daroussin void el_push(EditLine *, const char *); 98*d0ef721eSBaptiste Daroussin 99*d0ef721eSBaptiste Daroussin /* 100*d0ef721eSBaptiste Daroussin * Beep! 101*d0ef721eSBaptiste Daroussin */ 102*d0ef721eSBaptiste Daroussin void el_beep(EditLine *); 103*d0ef721eSBaptiste Daroussin 104*d0ef721eSBaptiste Daroussin /* 105*d0ef721eSBaptiste Daroussin * High level function internals control 106*d0ef721eSBaptiste Daroussin * Parses argc, argv array and executes builtin editline commands 107*d0ef721eSBaptiste Daroussin */ 108*d0ef721eSBaptiste Daroussin int el_parse(EditLine *, int, const char **); 109*d0ef721eSBaptiste Daroussin 110*d0ef721eSBaptiste Daroussin /* 111*d0ef721eSBaptiste Daroussin * Low level editline access functions 112*d0ef721eSBaptiste Daroussin */ 113*d0ef721eSBaptiste Daroussin int el_set(EditLine *, int, ...); 114*d0ef721eSBaptiste Daroussin int el_get(EditLine *, int, ...); 115*d0ef721eSBaptiste Daroussin unsigned char _el_fn_complete(EditLine *, int); 116*d0ef721eSBaptiste Daroussin 117*d0ef721eSBaptiste Daroussin /* 118*d0ef721eSBaptiste Daroussin * el_set/el_get parameters 119*d0ef721eSBaptiste Daroussin * 120*d0ef721eSBaptiste Daroussin * When using el_wset/el_wget (as opposed to el_set/el_get): 121*d0ef721eSBaptiste Daroussin * Char is wchar_t, otherwise it is char. 122*d0ef721eSBaptiste Daroussin * prompt_func is el_wpfunc_t, otherwise it is el_pfunc_t . 123*d0ef721eSBaptiste Daroussin 124*d0ef721eSBaptiste Daroussin * Prompt function prototypes are: 125*d0ef721eSBaptiste Daroussin * typedef char *(*el_pfunct_t) (EditLine *); 126*d0ef721eSBaptiste Daroussin * typedef wchar_t *(*el_wpfunct_t) (EditLine *); 127*d0ef721eSBaptiste Daroussin * 128*d0ef721eSBaptiste Daroussin * For operations that support set or set/get, the argument types listed are for 129*d0ef721eSBaptiste Daroussin * the "set" operation. For "get", each listed type must be a pointer. 130*d0ef721eSBaptiste Daroussin * E.g. EL_EDITMODE takes an int when set, but an int* when get. 131*d0ef721eSBaptiste Daroussin * 132*d0ef721eSBaptiste Daroussin * Operations that only support "get" have the correct argument types listed. 133*d0ef721eSBaptiste Daroussin */ 134*d0ef721eSBaptiste Daroussin #define EL_PROMPT 0 /* , prompt_func); set/get */ 135*d0ef721eSBaptiste Daroussin #define EL_TERMINAL 1 /* , const char *); set/get */ 136*d0ef721eSBaptiste Daroussin #define EL_EDITOR 2 /* , const Char *); set/get */ 137*d0ef721eSBaptiste Daroussin #define EL_SIGNAL 3 /* , int); set/get */ 138*d0ef721eSBaptiste Daroussin #define EL_BIND 4 /* , const Char *, ..., NULL); set */ 139*d0ef721eSBaptiste Daroussin #define EL_TELLTC 5 /* , const Char *, ..., NULL); set */ 140*d0ef721eSBaptiste Daroussin #define EL_SETTC 6 /* , const Char *, ..., NULL); set */ 141*d0ef721eSBaptiste Daroussin #define EL_ECHOTC 7 /* , const Char *, ..., NULL); set */ 142*d0ef721eSBaptiste Daroussin #define EL_SETTY 8 /* , const Char *, ..., NULL); set */ 143*d0ef721eSBaptiste Daroussin #define EL_ADDFN 9 /* , const Char *, const Char, set */ 144*d0ef721eSBaptiste Daroussin /* el_func_t); */ 145*d0ef721eSBaptiste Daroussin #define EL_HIST 10 /* , hist_fun_t, const void *); set */ 146*d0ef721eSBaptiste Daroussin #define EL_EDITMODE 11 /* , int); set/get */ 147*d0ef721eSBaptiste Daroussin #define EL_RPROMPT 12 /* , prompt_func); set/get */ 148*d0ef721eSBaptiste Daroussin #define EL_GETCFN 13 /* , el_rfunc_t); set/get */ 149*d0ef721eSBaptiste Daroussin #define EL_CLIENTDATA 14 /* , void *); set/get */ 150*d0ef721eSBaptiste Daroussin #define EL_UNBUFFERED 15 /* , int); set/get */ 151*d0ef721eSBaptiste Daroussin #define EL_PREP_TERM 16 /* , int); set */ 152*d0ef721eSBaptiste Daroussin #define EL_GETTC 17 /* , const Char *, ..., NULL); get */ 153*d0ef721eSBaptiste Daroussin #define EL_GETFP 18 /* , int, FILE **); get */ 154*d0ef721eSBaptiste Daroussin #define EL_SETFP 19 /* , int, FILE *); set */ 155*d0ef721eSBaptiste Daroussin #define EL_REFRESH 20 /* , void); set */ 156*d0ef721eSBaptiste Daroussin #define EL_PROMPT_ESC 21 /* , prompt_func, Char); set/get */ 157*d0ef721eSBaptiste Daroussin #define EL_RPROMPT_ESC 22 /* , prompt_func, Char); set/get */ 158*d0ef721eSBaptiste Daroussin #define EL_RESIZE 23 /* , el_zfunc_t, void *); set */ 159*d0ef721eSBaptiste Daroussin #define EL_ALIAS_TEXT 24 /* , el_afunc_t, void *); set */ 160*d0ef721eSBaptiste Daroussin 161*d0ef721eSBaptiste Daroussin #define EL_BUILTIN_GETCFN (NULL) 162*d0ef721eSBaptiste Daroussin 163*d0ef721eSBaptiste Daroussin /* 164*d0ef721eSBaptiste Daroussin * Source named file or $PWD/.editrc or $HOME/.editrc 165*d0ef721eSBaptiste Daroussin */ 166*d0ef721eSBaptiste Daroussin int el_source(EditLine *, const char *); 167*d0ef721eSBaptiste Daroussin 168*d0ef721eSBaptiste Daroussin /* 169*d0ef721eSBaptiste Daroussin * Must be called when the terminal changes size; If EL_SIGNAL 170*d0ef721eSBaptiste Daroussin * is set this is done automatically otherwise it is the responsibility 171*d0ef721eSBaptiste Daroussin * of the application 172*d0ef721eSBaptiste Daroussin */ 173*d0ef721eSBaptiste Daroussin void el_resize(EditLine *); 174*d0ef721eSBaptiste Daroussin 175*d0ef721eSBaptiste Daroussin /* 176*d0ef721eSBaptiste Daroussin * User-defined function interface. 177*d0ef721eSBaptiste Daroussin */ 178*d0ef721eSBaptiste Daroussin const LineInfo *el_line(EditLine *); 179*d0ef721eSBaptiste Daroussin int el_insertstr(EditLine *, const char *); 180*d0ef721eSBaptiste Daroussin void el_deletestr(EditLine *, int); 181*d0ef721eSBaptiste Daroussin 182*d0ef721eSBaptiste Daroussin 183*d0ef721eSBaptiste Daroussin /* 184*d0ef721eSBaptiste Daroussin * ==== History ==== 185*d0ef721eSBaptiste Daroussin */ 186*d0ef721eSBaptiste Daroussin 187*d0ef721eSBaptiste Daroussin typedef struct history History; 188*d0ef721eSBaptiste Daroussin 189*d0ef721eSBaptiste Daroussin typedef struct HistEvent { 190*d0ef721eSBaptiste Daroussin int num; 191*d0ef721eSBaptiste Daroussin const char *str; 192*d0ef721eSBaptiste Daroussin } HistEvent; 193*d0ef721eSBaptiste Daroussin 194*d0ef721eSBaptiste Daroussin /* 195*d0ef721eSBaptiste Daroussin * History access functions. 196*d0ef721eSBaptiste Daroussin */ 197*d0ef721eSBaptiste Daroussin History * history_init(void); 198*d0ef721eSBaptiste Daroussin void history_end(History *); 199*d0ef721eSBaptiste Daroussin 200*d0ef721eSBaptiste Daroussin int history(History *, HistEvent *, int, ...); 201*d0ef721eSBaptiste Daroussin 202*d0ef721eSBaptiste Daroussin #define H_FUNC 0 /* , UTSL */ 203*d0ef721eSBaptiste Daroussin #define H_SETSIZE 1 /* , const int); */ 204*d0ef721eSBaptiste Daroussin #define H_GETSIZE 2 /* , void); */ 205*d0ef721eSBaptiste Daroussin #define H_FIRST 3 /* , void); */ 206*d0ef721eSBaptiste Daroussin #define H_LAST 4 /* , void); */ 207*d0ef721eSBaptiste Daroussin #define H_PREV 5 /* , void); */ 208*d0ef721eSBaptiste Daroussin #define H_NEXT 6 /* , void); */ 209*d0ef721eSBaptiste Daroussin #define H_CURR 8 /* , const int); */ 210*d0ef721eSBaptiste Daroussin #define H_SET 7 /* , int); */ 211*d0ef721eSBaptiste Daroussin #define H_ADD 9 /* , const wchar_t *); */ 212*d0ef721eSBaptiste Daroussin #define H_ENTER 10 /* , const wchar_t *); */ 213*d0ef721eSBaptiste Daroussin #define H_APPEND 11 /* , const wchar_t *); */ 214*d0ef721eSBaptiste Daroussin #define H_END 12 /* , void); */ 215*d0ef721eSBaptiste Daroussin #define H_NEXT_STR 13 /* , const wchar_t *); */ 216*d0ef721eSBaptiste Daroussin #define H_PREV_STR 14 /* , const wchar_t *); */ 217*d0ef721eSBaptiste Daroussin #define H_NEXT_EVENT 15 /* , const int); */ 218*d0ef721eSBaptiste Daroussin #define H_PREV_EVENT 16 /* , const int); */ 219*d0ef721eSBaptiste Daroussin #define H_LOAD 17 /* , const char *); */ 220*d0ef721eSBaptiste Daroussin #define H_SAVE 18 /* , const char *); */ 221*d0ef721eSBaptiste Daroussin #define H_CLEAR 19 /* , void); */ 222*d0ef721eSBaptiste Daroussin #define H_SETUNIQUE 20 /* , int); */ 223*d0ef721eSBaptiste Daroussin #define H_GETUNIQUE 21 /* , void); */ 224*d0ef721eSBaptiste Daroussin #define H_DEL 22 /* , int); */ 225*d0ef721eSBaptiste Daroussin #define H_NEXT_EVDATA 23 /* , const int, histdata_t *); */ 226*d0ef721eSBaptiste Daroussin #define H_DELDATA 24 /* , int, histdata_t *);*/ 227*d0ef721eSBaptiste Daroussin #define H_REPLACE 25 /* , const char *, histdata_t); */ 228*d0ef721eSBaptiste Daroussin #define H_SAVE_FP 26 /* , FILE *); */ 229*d0ef721eSBaptiste Daroussin #define H_NSAVE_FP 27 /* , size_t, FILE *); */ 230*d0ef721eSBaptiste Daroussin 231*d0ef721eSBaptiste Daroussin 232*d0ef721eSBaptiste Daroussin 233*d0ef721eSBaptiste Daroussin /* 234*d0ef721eSBaptiste Daroussin * ==== Tokenization ==== 235*d0ef721eSBaptiste Daroussin */ 236*d0ef721eSBaptiste Daroussin 237*d0ef721eSBaptiste Daroussin typedef struct tokenizer Tokenizer; 238*d0ef721eSBaptiste Daroussin 239*d0ef721eSBaptiste Daroussin /* 240*d0ef721eSBaptiste Daroussin * String tokenization functions, using simplified sh(1) quoting rules 241*d0ef721eSBaptiste Daroussin */ 242*d0ef721eSBaptiste Daroussin Tokenizer *tok_init(const char *); 243*d0ef721eSBaptiste Daroussin void tok_end(Tokenizer *); 244*d0ef721eSBaptiste Daroussin void tok_reset(Tokenizer *); 245*d0ef721eSBaptiste Daroussin int tok_line(Tokenizer *, const LineInfo *, 246*d0ef721eSBaptiste Daroussin int *, const char ***, int *, int *); 247*d0ef721eSBaptiste Daroussin int tok_str(Tokenizer *, const char *, 248*d0ef721eSBaptiste Daroussin int *, const char ***); 249*d0ef721eSBaptiste Daroussin 250*d0ef721eSBaptiste Daroussin /* 251*d0ef721eSBaptiste Daroussin * Begin Wide Character Support 252*d0ef721eSBaptiste Daroussin */ 253*d0ef721eSBaptiste Daroussin #include <wchar.h> 254*d0ef721eSBaptiste Daroussin #include <wctype.h> 255*d0ef721eSBaptiste Daroussin 256*d0ef721eSBaptiste Daroussin /* 257*d0ef721eSBaptiste Daroussin * ==== Editing ==== 258*d0ef721eSBaptiste Daroussin */ 259*d0ef721eSBaptiste Daroussin typedef struct lineinfow { 260*d0ef721eSBaptiste Daroussin const wchar_t *buffer; 261*d0ef721eSBaptiste Daroussin const wchar_t *cursor; 262*d0ef721eSBaptiste Daroussin const wchar_t *lastchar; 263*d0ef721eSBaptiste Daroussin } LineInfoW; 264*d0ef721eSBaptiste Daroussin 265*d0ef721eSBaptiste Daroussin typedef int (*el_rfunc_t)(EditLine *, wchar_t *); 266*d0ef721eSBaptiste Daroussin 267*d0ef721eSBaptiste Daroussin const wchar_t *el_wgets(EditLine *, int *); 268*d0ef721eSBaptiste Daroussin int el_wgetc(EditLine *, wchar_t *); 269*d0ef721eSBaptiste Daroussin void el_wpush(EditLine *, const wchar_t *); 270*d0ef721eSBaptiste Daroussin 271*d0ef721eSBaptiste Daroussin int el_wparse(EditLine *, int, const wchar_t **); 272*d0ef721eSBaptiste Daroussin 273*d0ef721eSBaptiste Daroussin int el_wset(EditLine *, int, ...); 274*d0ef721eSBaptiste Daroussin int el_wget(EditLine *, int, ...); 275*d0ef721eSBaptiste Daroussin 276*d0ef721eSBaptiste Daroussin int el_cursor(EditLine *, int); 277*d0ef721eSBaptiste Daroussin const LineInfoW *el_wline(EditLine *); 278*d0ef721eSBaptiste Daroussin int el_winsertstr(EditLine *, const wchar_t *); 279*d0ef721eSBaptiste Daroussin #define el_wdeletestr el_deletestr 280*d0ef721eSBaptiste Daroussin 281*d0ef721eSBaptiste Daroussin /* 282*d0ef721eSBaptiste Daroussin * ==== History ==== 283*d0ef721eSBaptiste Daroussin */ 284*d0ef721eSBaptiste Daroussin typedef struct histeventW { 285*d0ef721eSBaptiste Daroussin int num; 286*d0ef721eSBaptiste Daroussin const wchar_t *str; 287*d0ef721eSBaptiste Daroussin } HistEventW; 288*d0ef721eSBaptiste Daroussin 289*d0ef721eSBaptiste Daroussin typedef struct historyW HistoryW; 290*d0ef721eSBaptiste Daroussin 291*d0ef721eSBaptiste Daroussin HistoryW * history_winit(void); 292*d0ef721eSBaptiste Daroussin void history_wend(HistoryW *); 293*d0ef721eSBaptiste Daroussin 294*d0ef721eSBaptiste Daroussin int history_w(HistoryW *, HistEventW *, int, ...); 295*d0ef721eSBaptiste Daroussin 296*d0ef721eSBaptiste Daroussin /* 297*d0ef721eSBaptiste Daroussin * ==== Tokenization ==== 298*d0ef721eSBaptiste Daroussin */ 299*d0ef721eSBaptiste Daroussin typedef struct tokenizerW TokenizerW; 300*d0ef721eSBaptiste Daroussin 301*d0ef721eSBaptiste Daroussin /* Wide character tokenizer support */ 302*d0ef721eSBaptiste Daroussin TokenizerW *tok_winit(const wchar_t *); 303*d0ef721eSBaptiste Daroussin void tok_wend(TokenizerW *); 304*d0ef721eSBaptiste Daroussin void tok_wreset(TokenizerW *); 305*d0ef721eSBaptiste Daroussin int tok_wline(TokenizerW *, const LineInfoW *, 306*d0ef721eSBaptiste Daroussin int *, const wchar_t ***, int *, int *); 307*d0ef721eSBaptiste Daroussin int tok_wstr(TokenizerW *, const wchar_t *, 308*d0ef721eSBaptiste Daroussin int *, const wchar_t ***); 309*d0ef721eSBaptiste Daroussin 310*d0ef721eSBaptiste Daroussin #ifdef __cplusplus 311*d0ef721eSBaptiste Daroussin } 312*d0ef721eSBaptiste Daroussin #endif 313*d0ef721eSBaptiste Daroussin 314*d0ef721eSBaptiste Daroussin #endif /* _HISTEDIT_H_ */ 315