Annotation of embedaddon/readline/examples/rl-callbacktest.c, revision 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>