rl.c revision 47558
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] 6 */ 7 8/* 9 * Remove the next line if you're compiling this against an installed 10 * libreadline.a 11 */ 12#define READLINE_LIBRARY 13 14#if defined (HAVE_CONFIG_H) 15# include <config.h> 16#endif 17 18#include <stdio.h> 19#include <sys/types.h> 20#include "posixstat.h" 21#include "readline.h" 22#include "history.h" 23 24extern int optind; 25extern char *optarg; 26 27#if !defined (strchr) && !defined (__STDC__) 28extern char *strrchr(); 29#endif 30 31static char *progname; 32static char *deftext; 33 34static int 35set_deftext () 36{ 37 if (deftext) 38 { 39 rl_insert_text (deftext); 40 deftext = (char *)NULL; 41 rl_startup_hook = (Function *)NULL; 42 } 43} 44 45static void 46usage() 47{ 48 fprintf (stderr, "%s: usage: %s [-p prompt] [-u unit] [-d default]\n", 49 progname, progname); 50} 51 52main (argc, argv) 53 int argc; 54 char **argv; 55{ 56 char *temp, *prompt; 57 struct stat sb; 58 int opt, fd; 59 FILE *ifp; 60 61 progname = strrchr(argv[0], '/'); 62 if (progname == 0) 63 progname = argv[0]; 64 else 65 progname++; 66 67 /* defaults */ 68 prompt = "readline$ "; 69 fd = 0; 70 deftext = (char *)0; 71 72 while ((opt = getopt(argc, argv, "p:u:d:")) != EOF) 73 { 74 switch (opt) 75 { 76 case 'p': 77 prompt = optarg; 78 break; 79 case 'u': 80 fd = atoi(optarg); 81 if (fd < 0) 82 { 83 fprintf (stderr, "%s: bad file descriptor `%s'\n", progname, optarg); 84 exit (2); 85 } 86 break; 87 case 'd': 88 deftext = optarg; 89 break; 90 default: 91 usage (); 92 exit (2); 93 } 94 } 95 96 if (fd != 0) 97 { 98 if (fstat (fd, &sb) < 0) 99 { 100 fprintf (stderr, "%s: %d: bad file descriptor\n", progname, fd); 101 exit (1); 102 } 103 ifp = fdopen (fd, "r"); 104 rl_instream = ifp; 105 } 106 107 if (deftext && *deftext) 108 rl_startup_hook = set_deftext; 109 110 temp = readline (prompt); 111 112 /* Test for EOF. */ 113 if (temp == 0) 114 exit (1); 115 116 puts (temp); 117 exit (0); 118} 119