Annotation of embedaddon/readline/examples/rl.c, revision 1.1.1.1
1.1 misho 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: set_deftext ()
62: {
63: if (deftext)
64: {
65: rl_insert_text (deftext);
66: deftext = (char *)NULL;
67: rl_startup_hook = (rl_hook_func_t *)NULL;
68: }
69: return 0;
70: }
71:
72: static void
73: usage()
74: {
75: fprintf (stderr, "%s: usage: %s [-p prompt] [-u unit] [-d default] [-n nchars]\n",
76: progname, progname);
77: }
78:
79: int
80: main (argc, argv)
81: int argc;
82: char **argv;
83: {
84: char *temp, *prompt;
85: struct stat sb;
86: int opt, fd, nch;
87: FILE *ifp;
88:
89: progname = strrchr(argv[0], '/');
90: if (progname == 0)
91: progname = argv[0];
92: else
93: progname++;
94:
95: /* defaults */
96: prompt = "readline$ ";
97: fd = nch = 0;
98: deftext = (char *)0;
99:
100: while ((opt = getopt(argc, argv, "p:u:d:n:")) != EOF)
101: {
102: switch (opt)
103: {
104: case 'p':
105: prompt = optarg;
106: break;
107: case 'u':
108: fd = atoi(optarg);
109: if (fd < 0)
110: {
111: fprintf (stderr, "%s: bad file descriptor `%s'\n", progname, optarg);
112: exit (2);
113: }
114: break;
115: case 'd':
116: deftext = optarg;
117: break;
118: case 'n':
119: nch = atoi(optarg);
120: if (nch < 0)
121: {
122: fprintf (stderr, "%s: bad value for -n: `%s'\n", progname, optarg);
123: exit (2);
124: }
125: break;
126: default:
127: usage ();
128: exit (2);
129: }
130: }
131:
132: if (fd != 0)
133: {
134: if (fstat (fd, &sb) < 0)
135: {
136: fprintf (stderr, "%s: %d: bad file descriptor\n", progname, fd);
137: exit (1);
138: }
139: ifp = fdopen (fd, "r");
140: rl_instream = ifp;
141: }
142:
143: if (deftext && *deftext)
144: rl_startup_hook = set_deftext;
145:
146: if (nch > 0)
147: rl_num_chars_to_read = nch;
148:
149: temp = readline (prompt);
150:
151: /* Test for EOF. */
152: if (temp == 0)
153: exit (1);
154:
155: printf ("%s\n", temp);
156: exit (0);
157: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>