1/* histexamp.c - history library example program. */ 2 3/* Copyright (C) 1987-2009 Free Software Foundation, Inc. 4 5 This file is part of the GNU Readline Library (Readline), a library for 6 reading lines of text with interactive input and history editing. 7 8 Readline is free software: you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation, either version 3 of the License, or 11 (at your option) any later version. 12 13 Readline is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with Readline. If not, see <http://www.gnu.org/licenses/>. 20*/ 21 22#include <stdio.h> 23 24#ifdef READLINE_LIBRARY 25# include "history.h" 26#else 27# include <readline/history.h> 28#endif 29 30#include <string.h> 31 32main (argc, argv) 33 int argc; 34 char **argv; 35{ 36 char line[1024], *t; 37 int len, done; 38 39 line[0] = 0; 40 done = 0; 41 42 using_history (); 43 while (!done) 44 { 45 printf ("history$ "); 46 fflush (stdout); 47 t = fgets (line, sizeof (line) - 1, stdin); 48 if (t && *t) 49 { 50 len = strlen (t); 51 if (t[len - 1] == '\n') 52 t[len - 1] = '\0'; 53 } 54 55 if (!t) 56 strcpy (line, "quit"); 57 58 if (line[0]) 59 { 60 char *expansion; 61 int result; 62 63 using_history (); 64 65 result = history_expand (line, &expansion); 66 if (result) 67 fprintf (stderr, "%s\n", expansion); 68 69 if (result < 0 || result == 2) 70 { 71 free (expansion); 72 continue; 73 } 74 75 add_history (expansion); 76 strncpy (line, expansion, sizeof (line) - 1); 77 free (expansion); 78 } 79 80 if (strcmp (line, "quit") == 0) 81 done = 1; 82 else if (strcmp (line, "save") == 0) 83 write_history ("history_file"); 84 else if (strcmp (line, "read") == 0) 85 read_history ("history_file"); 86 else if (strcmp (line, "list") == 0) 87 { 88 register HIST_ENTRY **the_list; 89 register int i; 90 time_t tt; 91 char timestr[128]; 92 93 the_list = history_list (); 94 if (the_list) 95 for (i = 0; the_list[i]; i++) 96 { 97 tt = history_get_time (the_list[i]); 98 if (tt) 99 strftime (timestr, sizeof (timestr), "%a %R", localtime(&tt)); 100 else 101 strcpy (timestr, "??"); 102 printf ("%d: %s: %s\n", i + history_base, timestr, the_list[i]->line); 103 } 104 } 105 else if (strncmp (line, "delete", 6) == 0) 106 { 107 int which; 108 if ((sscanf (line + 6, "%d", &which)) == 1) 109 { 110 HIST_ENTRY *entry = remove_history (which); 111 if (!entry) 112 fprintf (stderr, "No such entry %d\n", which); 113 else 114 { 115 free (entry->line); 116 free (entry); 117 } 118 } 119 else 120 { 121 fprintf (stderr, "non-numeric arg given to `delete'\n"); 122 } 123 } 124 } 125} 126