File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / readline / examples / rlevent.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Jul 30 08:16:46 2014 UTC (9 years, 11 months ago) by misho
Branches: readline, MAIN
CVS tags: v6_3p10_cross, v6_3p10, v6_3, p6, HEAD
readline 6.3

    1: /*
    2:  * rl - command-line interface to read a line from the standard input
    3:  *      (or another fd) using readline.
    4:  *
    5:  * usage: rl [-p prompt] [-u unit] [-d default] [-n nchars]
    6:  */
    7: 
    8: /* Copyright (C) 1987-2009 Free Software Foundation, Inc.
    9: 
   10:    This file is part of the GNU Readline Library (Readline), a library for
   11:    reading lines of text with interactive input and history editing.
   12: 
   13:    Readline is free software: you can redistribute it and/or modify
   14:    it under the terms of the GNU General Public License as published by
   15:    the Free Software Foundation, either version 3 of the License, or
   16:    (at your option) any later version.
   17: 
   18:    Readline is distributed in the hope that it will be useful,
   19:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   20:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   21:    GNU General Public License for more details.
   22: 
   23:    You should have received a copy of the GNU General Public License
   24:    along with Readline.  If not, see <http://www.gnu.org/licenses/>.
   25: */
   26: 
   27: #if defined (HAVE_CONFIG_H)
   28: #  include <config.h>
   29: #endif
   30: 
   31: #include <stdio.h>
   32: #include <sys/types.h>
   33: 
   34: #ifdef HAVE_STDLIB_H
   35: #  include <stdlib.h>
   36: #else 
   37: extern void exit();
   38: #endif
   39: 
   40: #if defined (READLINE_LIBRARY)
   41: #  include "posixstat.h"
   42: #  include "readline.h"
   43: #  include "history.h"
   44: #else
   45: #  include <sys/stat.h>
   46: #  include <readline/readline.h>
   47: #  include <readline/history.h>
   48: #endif
   49: 
   50: extern int optind;
   51: extern char *optarg;
   52: 
   53: #if !defined (strchr) && !defined (__STDC__)
   54: extern char *strrchr();
   55: #endif
   56: 
   57: static char *progname;
   58: static char *deftext;
   59: 
   60: static int
   61: event_hook ()
   62: {
   63:   fprintf (stderr, "ding!\n");
   64:   sleep (1);
   65:   return 0;
   66: }
   67: 
   68: static int
   69: set_deftext ()
   70: {
   71:   if (deftext)
   72:     {
   73:       rl_insert_text (deftext);
   74:       deftext = (char *)NULL;
   75:       rl_startup_hook = (rl_hook_func_t *)NULL;
   76:     }
   77:   return 0;
   78: }
   79: 
   80: static void
   81: usage()
   82: {
   83:   fprintf (stderr, "%s: usage: %s [-p prompt] [-u unit] [-d default] [-n nchars]\n",
   84: 		progname, progname);
   85: }
   86: 
   87: int
   88: main (argc, argv)
   89:      int argc;
   90:      char **argv;
   91: {
   92:   char *temp, *prompt;
   93:   struct stat sb;
   94:   int opt, fd, nch;
   95:   FILE *ifp;
   96: 
   97:   progname = strrchr(argv[0], '/');
   98:   if (progname == 0)
   99:     progname = argv[0];
  100:   else
  101:     progname++;
  102: 
  103:   /* defaults */
  104:   prompt = "readline$ ";
  105:   fd = nch = 0;
  106:   deftext = (char *)0;
  107: 
  108:   while ((opt = getopt(argc, argv, "p:u:d:n:")) != EOF)
  109:     {
  110:       switch (opt)
  111: 	{
  112: 	case 'p':
  113: 	  prompt = optarg;
  114: 	  break;
  115: 	case 'u':
  116: 	  fd = atoi(optarg);
  117: 	  if (fd < 0)
  118: 	    {
  119: 	      fprintf (stderr, "%s: bad file descriptor `%s'\n", progname, optarg);
  120: 	      exit (2);
  121: 	    }
  122: 	  break;
  123: 	case 'd':
  124: 	  deftext = optarg;
  125: 	  break;
  126: 	case 'n':
  127: 	  nch = atoi(optarg);
  128: 	  if (nch < 0)
  129: 	    {
  130: 	      fprintf (stderr, "%s: bad value for -n: `%s'\n", progname, optarg);
  131: 	      exit (2);
  132: 	    }
  133: 	  break;
  134: 	default:
  135: 	  usage ();
  136: 	  exit (2);
  137: 	}
  138:     }
  139: 
  140:   if (fd != 0)
  141:     {
  142:       if (fstat (fd, &sb) < 0)
  143: 	{
  144: 	  fprintf (stderr, "%s: %d: bad file descriptor\n", progname, fd);
  145: 	  exit (1);
  146: 	}
  147:       ifp = fdopen (fd, "r");
  148:       rl_instream = ifp;
  149:     }
  150: 
  151:   if (deftext && *deftext)
  152:     rl_startup_hook = set_deftext;
  153: 
  154:   if (nch > 0)
  155:     rl_num_chars_to_read = nch;
  156: 
  157:   rl_event_hook = event_hook;
  158:   temp = readline (prompt);
  159: 
  160:   /* Test for EOF. */
  161:   if (temp == 0)
  162:     exit (1);
  163: 
  164:   printf ("%s\n", temp);
  165:   exit (0);
  166: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>