- Subject: Re: Readline terminal input
- From: Goran Koruga <goran.koruga@xxxxxxxxx>
- Date: Mon, 3 Mar 2003 07:20:17 +0100
On Sat, 1 Mar 2003 13:03:04 -0600, Joe Robertson wrote:
Hi.
> Hi All,
>
> I want to write a small terminal program that just reads a few line inputs.
> Um, how do I do a 'readline' input? gets?
>
> Do I open a file STDIN for read, then use fgets?
>
> I didn't want to 'take over' the terminal with smg.
> Anyone written a module/wrapper for gnu readline?
>
> This kind of thing needs to be in the docs somewhere, simple line input.
> I'm interested to know how others are doing this task.
Well you have two options, either handle STDIN by yourself, or use
SLang_read_line(). I use both in two of my applications that are using
slang for tty handling. Here's a sample code :
SLang_RLine_Info_Type *bm_rli; /* readline stuff */
unsigned char rl_buf[512]; /* readline buffer */
Init the structure :
bm_rli = (SLang_RLine_Info_Type *) malloc(sizeof(SLang_RLine_Info_Type));
memset ((char *) bm_rli, 0, sizeof(SLang_RLine_Info_Type));
bm_rli->buf = rl_buf;
bm_rli->buf_len = 511;
bm_rli->tab = 5;
bm_rli->dhscroll = 10;
bm_rli->getkey = SLang_getkey;
bm_rli->tt_goto_column = NULL;
bm_rli->update_hook = NULL;
A functin that does the reading :
SLtt_set_cursor_visibility(1);
bm_rli->edit_width = SLtt_Screen_Cols - 1;
bm_rli->prompt = prompt; /* char * pointer passed to function */
/* if buf has something insert it into edit buffer - another parameter */
if (*buf)
strmcpy(bm_rli->buf, buf, 511);
else
*bm_rli->buf = '\0';
bm_rli->point = strlen(bm_rli->buf);
i = SLang_read_line(bm_rli);
if (i >= 0 && !SLang_Error && !SLKeyBoard_Quit)
{
SLang_rline_save_line(bm_rli);
strmcpy(buf, bm_rli->buf, len);
}
G.
> Thanks,
> Joe Robertson
> jmrobert5@xxxxxxxxx
--
Goran Koruga goran.koruga@xxxxxxxxx
HERMES Softlab, Litijska 51 phone: +386 1 586 5530
1000 Ljubljana, Slovenia
[2003 date index]
[2003 thread index]
[Thread Prev] [Thread Next]
[Date Prev] [Date Next]