histexamp.c revision 21308
1main () 2{ 3 char line[1024], *t; 4 int len, done = 0; 5 6 line[0] = 0; 7 8 using_history (); 9 while (!done) 10 { 11 printf ("history$ "); 12 fflush (stdout); 13 t = fgets (line, sizeof (line) - 1, stdin); 14 if (t && *t) 15 { 16 len = strlen (t); 17 if (t[len - 1] == '\n') 18 t[len - 1] = '\0'; 19 } 20 21 if (!t) 22 strcpy (line, "quit"); 23 24 if (line[0]) 25 { 26 char *expansion; 27 int result; 28 29 using_history (); 30 31 result = history_expand (line, &expansion); 32 if (result) 33 fprintf (stderr, "%s\n", expansion); 34 35 if (result < 0 || result == 2) 36 { 37 free (expansion); 38 continue; 39 } 40 41 add_history (expansion); 42 strncpy (line, expansion, sizeof (line) - 1); 43 free (expansion); 44 } 45 46 if (strcmp (line, "quit") == 0) 47 done = 1; 48 else if (strcmp (line, "save") == 0) 49 write_history ("history_file"); 50 else if (strcmp (line, "read") == 0) 51 read_history ("history_file"); 52 else if (strcmp (line, "list") == 0) 53 { 54 register HIST_ENTRY **the_list; 55 register int i; 56 57 the_list = history_list (); 58 if (the_list) 59 for (i = 0; the_list[i]; i++) 60 printf ("%d: %s\n", i + history_base, the_list[i]->line); 61 } 62 else if (strncmp (line, "delete", 6) == 0) 63 { 64 int which; 65 if ((sscanf (line + 6, "%d", &which)) == 1) 66 { 67 HIST_ENTRY *entry = remove_history (which); 68 if (!entry) 69 fprintf (stderr, "No such entry %d\n", which); 70 else 71 { 72 free (entry->line); 73 free (entry); 74 } 75 } 76 else 77 { 78 fprintf (stderr, "non-numeric arg given to `delete'\n"); 79 } 80 } 81 } 82} 83