Annotation of embedaddon/readline/examples/histexamp.c, revision 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>