freebsd-dev/contrib/libreadline/examples/rl.c

159 lines
3.2 KiB
C
Raw Normal View History

/*
* rl - command-line interface to read a line from the standard input
* (or another fd) using readline.
*
2000-03-19 21:18:09 +00:00
* usage: rl [-p prompt] [-u unit] [-d default] [-n nchars]
*/
2003-08-31 17:55:46 +00:00
/* Copyright (C) 1987-2002 Free Software Foundation, Inc.
This file is part of the GNU Readline Library, a library for
reading lines of text with interactive input and history editing.
The GNU Readline Library is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2, or
(at your option) any later version.
The GNU Readline Library is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied warranty
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
The GNU General Public License is often shipped with GNU software, and
is generally kept in a file called COPYING or LICENSE. If you do not
have a copy of the license, write to the Free Software Foundation,
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
#if defined (HAVE_CONFIG_H)
1998-04-28 06:22:20 +00:00
# include <config.h>
#endif
#include <stdio.h>
#include <sys/types.h>
2006-03-27 22:47:12 +00:00
#ifdef HAVE_STDLIB_H
# include <stdlib.h>
#else
extern void exit();
#endif
2000-03-19 21:18:09 +00:00
#if defined (READLINE_LIBRARY)
2006-03-27 22:47:12 +00:00
# include "posixstat.h"
2000-03-19 21:18:09 +00:00
# include "readline.h"
# include "history.h"
#else
2006-03-27 22:47:12 +00:00
# include <sys/stat.h>
2000-03-19 21:18:09 +00:00
# include <readline/readline.h>
# include <readline/history.h>
#endif
extern int optind;
extern char *optarg;
1998-04-28 06:22:20 +00:00
#if !defined (strchr) && !defined (__STDC__)
extern char *strrchr();
1998-04-28 06:22:20 +00:00
#endif
static char *progname;
static char *deftext;
static int
set_deftext ()
{
if (deftext)
{
rl_insert_text (deftext);
deftext = (char *)NULL;
2001-04-11 02:33:07 +00:00
rl_startup_hook = (rl_hook_func_t *)NULL;
}
2000-03-19 21:18:09 +00:00
return 0;
}
1999-05-28 01:59:23 +00:00
static void
usage()
{
2000-03-19 21:18:09 +00:00
fprintf (stderr, "%s: usage: %s [-p prompt] [-u unit] [-d default] [-n nchars]\n",
progname, progname);
}
2000-03-19 21:18:09 +00:00
int
main (argc, argv)
int argc;
char **argv;
{
char *temp, *prompt;
struct stat sb;
2000-03-19 21:18:09 +00:00
int opt, fd, nch;
FILE *ifp;
progname = strrchr(argv[0], '/');
if (progname == 0)
progname = argv[0];
else
progname++;
/* defaults */
prompt = "readline$ ";
2000-03-19 21:18:09 +00:00
fd = nch = 0;
deftext = (char *)0;
2000-03-19 21:18:09 +00:00
while ((opt = getopt(argc, argv, "p:u:d:n:")) != EOF)
{
switch (opt)
{
case 'p':
prompt = optarg;
break;
case 'u':
fd = atoi(optarg);
if (fd < 0)
{
fprintf (stderr, "%s: bad file descriptor `%s'\n", progname, optarg);
exit (2);
}
break;
case 'd':
deftext = optarg;
break;
2000-03-19 21:18:09 +00:00
case 'n':
nch = atoi(optarg);
if (nch < 0)
{
fprintf (stderr, "%s: bad value for -n: `%s'\n", progname, optarg);
exit (2);
}
break;
default:
usage ();
exit (2);
}
}
if (fd != 0)
{
if (fstat (fd, &sb) < 0)
{
fprintf (stderr, "%s: %d: bad file descriptor\n", progname, fd);
exit (1);
}
ifp = fdopen (fd, "r");
rl_instream = ifp;
}
if (deftext && *deftext)
rl_startup_hook = set_deftext;
2000-03-19 21:18:09 +00:00
if (nch > 0)
rl_num_chars_to_read = nch;
temp = readline (prompt);
/* Test for EOF. */
if (temp == 0)
exit (1);
2001-04-11 02:33:07 +00:00
printf ("%s\n", temp);
exit (0);
}