Improve MinGW support in Readline
[deliverable/binutils-gdb.git] / readline / examples / rl.c
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 }
This page took 0.032498 seconds and 4 git commands to generate.