]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - crypto/heimdal/lib/editline/edit_compat.c
import of heimdal 0.3f
[FreeBSD/FreeBSD.git] / crypto / heimdal / lib / editline / edit_compat.c
1 /*
2  * Copyright (c) 1995 - 2000 Kungliga Tekniska Högskolan
3  * (Royal Institute of Technology, Stockholm, Sweden).
4  * All rights reserved.
5  * 
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 
17  * 3. Neither the name of the Institute nor the names of its contributors
18  *    may be used to endorse or promote products derived from this software
19  *    without specific prior written permission.
20  * 
21  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31  * SUCH DAMAGE.
32  */
33
34 #include <config.h>
35 #include <stdio.h>
36 #include <string.h>
37 #include <histedit.h>
38
39 RCSID("$Id: edit_compat.c,v 1.8 2000/03/01 20:53:05 assar Exp $");
40
41 void
42 rl_reset_terminal(char *p)
43 {
44 }
45
46 void
47 rl_initialize()
48 {
49 }
50
51 static const char *pr;
52 static const char* ret_prompt(EditLine *e)
53 {
54     return pr;
55 }
56
57 static History *h;
58
59 #ifdef H_SETSIZE
60 #define EL_INIT_FOUR 1
61 #else
62 #ifdef H_SETMAXSIZE
63 /* backwards compatibility */
64 #define H_SETSIZE H_SETMAXSIZE
65 #endif
66 #endif
67
68 char *
69 readline(const char* prompt)
70 {
71     static EditLine *e;
72 #ifdef H_SETSIZE
73     HistEvent ev;
74 #endif
75     int count;
76     const char *str;
77
78     if(e == NULL){
79 #ifdef EL_INIT_FOUR
80         e = el_init("", stdin, stdout, stderr);
81 #else
82         e = el_init("", stdin, stdout);
83 #endif
84         el_set(e, EL_PROMPT, ret_prompt);
85         h = history_init();
86 #ifdef H_SETSIZE
87         history(h, &ev, H_SETSIZE, 25);
88 #else
89         history(h, H_EVENT, 25);
90 #endif
91         el_set(e, EL_HIST, history, h);
92         el_set(e, EL_EDITOR, "emacs"); /* XXX? */
93     }
94     pr = prompt ? prompt : "";
95     str = el_gets(e, &count);
96     if (str && count > 0) {
97         char *ret = strdup (str);
98
99         if (ret == NULL)
100             return NULL;
101
102         if (ret[strlen(ret) - 1] == '\n')
103             ret[strlen(ret) - 1] = '\0';
104         return ret;
105     } 
106     return NULL;
107 }
108
109 void
110 add_history(char *p)
111 {
112 #ifdef H_SETSIZE
113     HistEvent ev;
114     history(h, &ev, H_ENTER, p);
115 #else
116     history(h, H_ENTER, p);
117 #endif
118 }