Annotation of embedaddon/readline/examples/histexamp.c, revision 1.1.1.1

1.1       misho       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: 
                     32: main (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: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>