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