Annotation of embedaddon/readline/examples/rl-callbacktest.c, revision 1.1.1.1
1.1 misho 1: /* Standard include files. stdio.h is required. */
2: #include <stdlib.h>
3: #include <unistd.h>
4: #include <string.h>
5:
6: /* Used for select(2) */
7: #include <sys/types.h>
8: #include <sys/select.h>
9:
10: #include <stdio.h>
11:
12: /* Standard readline include files. */
13: #if defined (READLINE_LIBRARY)
14: # include "readline.h"
15: # include "history.h"
16: #else
17: # include <readline/readline.h>
18: # include <readline/history.h>
19: #endif
20:
21: static void cb_linehandler (char *);
22:
23: int running;
24: const char *prompt = "rltest$ ";
25:
26: /* Callback function called for each line when accept-line executed, EOF
27: seen, or EOF character read. This sets a flag and returns; it could
28: also call exit(3). */
29: static void
30: cb_linehandler (char *line)
31: {
32: /* Can use ^D (stty eof) or `exit' to exit. */
33: if (line == NULL || strcmp (line, "exit") == 0)
34: {
35: if (line == 0)
36: printf ("\n");
37: printf ("exit\n");
38: /* This function needs to be called to reset the terminal settings,
39: and calling it from the line handler keeps one extra prompt from
40: being displayed. */
41: rl_callback_handler_remove ();
42:
43: running = 0;
44: }
45: else
46: {
47: if (*line)
48: add_history (line);
49: printf ("input line: %s\n", line);
50: free (line);
51: }
52: }
53:
54: int
55: main (int c, char **v)
56: {
57: fd_set fds;
58: int r;
59:
60: /* Install the line handler. */
61: rl_callback_handler_install (prompt, cb_linehandler);
62:
63: /* Enter a simple event loop. This waits until something is available
64: to read on readline's input stream (defaults to standard input) and
65: calls the builtin character read callback to read it. It does not
66: have to modify the user's terminal settings. */
67: running = 1;
68: while (running)
69: {
70: FD_ZERO (&fds);
71: FD_SET (fileno (rl_instream), &fds);
72:
73: r = select (FD_SETSIZE, &fds, NULL, NULL, NULL);
74: if (r < 0)
75: {
76: perror ("rltest: select");
77: rl_callback_handler_remove ();
78: break;
79: }
80:
81: if (FD_ISSET (fileno (rl_instream), &fds))
82: rl_callback_read_char ();
83: }
84:
85: printf ("rltest: Event loop has exited\n");
86: return 0;
87: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>