/* New for v2.0: readline support -- daw */ /* random code to save history, expand !'s, etc */ #include "tintin.h" #include <readline/readline.h> #include <readline/history.h> extern HIST_ENTRY **history_list(); extern char *mystrdup(); void rlhist_show( /* void */ ) { HIST_ENTRY **a; int i; char msg[256]; a = history_list(); if (a == 0 || *a == 0) { tintin_puts("#No history.", 0); return; } for (i = 0; *a; i++) { sprintf(msg, "%2d %s", i, (*a++)->line); tintin_puts(msg, 0); } } char * rlhist_expand(line) char *line; { char error_msg[256]; char *expansion; if (*line == '\0') return (line); /* don't try to do history expansion on "say hi there!; bow" */ if (*line != '!') { add_history(line); return (line); } /* hack to make "!" work as it used to */ if (strcmp(line, "!") == 0) { free(line); line = mystrdup("!!"); } if (history_expand(line, &expansion) < 0) { strcpy(error_msg, "Expansion error. "); if (expansion) strcat(error_msg, expansion); tintin_puts(error_msg, (struct session *) 0); free(line); free(expansion); return ((char *) 0); } free(line); add_history(expansion); return (expansion); }