| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * rl - command-line interface to read a line from the standard input | 
					
						
							|  |  |  |  *      (or another fd) using readline. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2000-03-17 21:46:59 +00:00
										 |  |  |  * usage: rl [-p prompt] [-u unit] [-d default] [-n nchars] | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-12 13:36:28 +00:00
										 |  |  | /* Copyright (C) 1987-2009 Free Software Foundation, Inc.
 | 
					
						
							| 
									
										
										
										
											2002-07-17 14:10:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-12 13:36:28 +00:00
										 |  |  |    This file is part of the GNU Readline Library (Readline), a library for | 
					
						
							| 
									
										
										
										
											2002-07-17 14:10:11 +00:00
										 |  |  |    reading lines of text with interactive input and history editing. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-12 13:36:28 +00:00
										 |  |  |    Readline 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 3 of the License, or | 
					
						
							| 
									
										
										
										
											2002-07-17 14:10:11 +00:00
										 |  |  |    (at your option) any later version. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-12 13:36:28 +00:00
										 |  |  |    Readline 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 | 
					
						
							| 
									
										
										
										
											2002-07-17 14:10:11 +00:00
										 |  |  |    GNU General Public License for more details. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-12 13:36:28 +00:00
										 |  |  |    You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  |    along with Readline.  If not, see <http://www.gnu.org/licenses/>.
 | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2002-07-17 14:10:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  | #if defined (HAVE_CONFIG_H)
 | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  | #  include <config.h>
 | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <stdio.h>
 | 
					
						
							|  |  |  | #include <sys/types.h>
 | 
					
						
							| 
									
										
										
										
											2005-12-07 14:08:12 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifdef HAVE_STDLIB_H
 | 
					
						
							|  |  |  | #  include <stdlib.h>
 | 
					
						
							|  |  |  | #else 
 | 
					
						
							|  |  |  | extern void exit(); | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2000-03-17 21:46:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #if defined (READLINE_LIBRARY)
 | 
					
						
							| 
									
										
										
										
											2005-12-07 14:08:12 +00:00
										 |  |  | #  include "posixstat.h"
 | 
					
						
							| 
									
										
										
										
											2000-03-17 21:46:59 +00:00
										 |  |  | #  include "readline.h"
 | 
					
						
							|  |  |  | #  include "history.h"
 | 
					
						
							|  |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2005-12-07 14:08:12 +00:00
										 |  |  | #  include <sys/stat.h>
 | 
					
						
							| 
									
										
										
										
											2000-03-17 21:46:59 +00:00
										 |  |  | #  include <readline/readline.h>
 | 
					
						
							|  |  |  | #  include <readline/history.h>
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | extern int optind; | 
					
						
							|  |  |  | extern char *optarg; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  | #if !defined (strchr) && !defined (__STDC__)
 | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  | extern char *strrchr(); | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | static char *progname; | 
					
						
							|  |  |  | static char *deftext; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							|  |  |  | set_deftext () | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   if (deftext) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       rl_insert_text (deftext); | 
					
						
							|  |  |  |       deftext = (char *)NULL; | 
					
						
							| 
									
										
										
										
											2001-04-06 19:14:31 +00:00
										 |  |  |       rl_startup_hook = (rl_hook_func_t *)NULL; | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2000-03-17 21:46:59 +00:00
										 |  |  |   return 0; | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  | static void | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  | usage() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2000-03-17 21:46:59 +00:00
										 |  |  |   fprintf (stderr, "%s: usage: %s [-p prompt] [-u unit] [-d default] [-n nchars]\n", | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  | 		progname, progname); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-03-17 21:46:59 +00:00
										 |  |  | int | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  | main (argc, argv) | 
					
						
							|  |  |  |      int argc; | 
					
						
							|  |  |  |      char **argv; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   char *temp, *prompt; | 
					
						
							|  |  |  |   struct stat sb; | 
					
						
							| 
									
										
										
										
											2000-03-17 21:46:59 +00:00
										 |  |  |   int opt, fd, nch; | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  |   FILE *ifp; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   progname = strrchr(argv[0], '/'); | 
					
						
							|  |  |  |   if (progname == 0) | 
					
						
							|  |  |  |     progname = argv[0]; | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     progname++; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* defaults */ | 
					
						
							|  |  |  |   prompt = "readline$ "; | 
					
						
							| 
									
										
										
										
											2000-03-17 21:46:59 +00:00
										 |  |  |   fd = nch = 0; | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  |   deftext = (char *)0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-03-17 21:46:59 +00:00
										 |  |  |   while ((opt = getopt(argc, argv, "p:u:d:n:")) != EOF) | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  |     { | 
					
						
							|  |  |  |       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-17 21:46:59 +00:00
										 |  |  | 	case 'n': | 
					
						
							|  |  |  | 	  nch = atoi(optarg); | 
					
						
							|  |  |  | 	  if (nch < 0) | 
					
						
							|  |  |  | 	    { | 
					
						
							|  |  |  | 	      fprintf (stderr, "%s: bad value for -n: `%s'\n", progname, optarg); | 
					
						
							|  |  |  | 	      exit (2); | 
					
						
							|  |  |  | 	    } | 
					
						
							|  |  |  | 	  break; | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  | 	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-17 21:46:59 +00:00
										 |  |  |   if (nch > 0) | 
					
						
							|  |  |  |     rl_num_chars_to_read = nch; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  |   temp = readline (prompt); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Test for EOF. */ | 
					
						
							|  |  |  |   if (temp == 0) | 
					
						
							|  |  |  |     exit (1); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-06 19:14:31 +00:00
										 |  |  |   printf ("%s\n", temp); | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  |   exit (0); | 
					
						
							|  |  |  | } |