/*********************************************************************/ /* file: history.c - functions for the history stuff */ /* TINTIN III */ /* (T)he K(I)cki(N) (T)ickin D(I)kumud Clie(N)t */ /* coded by peter unold 1992 */ /*********************************************************************/ #include <ctype.h> #include <string.h> #include "tintin.h" #if IRIX #include <stdlib.h> #endif void insert_history(); extern char *space_out(); extern char *mystrdup(); extern struct session *parse_input(); /************************/ /* the #history command */ /************************/ void history_command(ses) struct session *ses; { if(ses) { int i; char temp[240]; for(i=HISTORY_SIZE-1; i>=0; i--) if(ses->history[i]) { sprintf(temp, "%2d %s ", i, ses->history[i]); tintin_puts2(temp, ses); } } else tintin_puts("#NO SESSION ACTIVE => NO HISTORY DUMMY!", ses); prompt(NULL); } void do_history(buffer, ses) char *buffer; struct session *ses; { char result[BUFFER_SIZE], *cptr; cptr=space_out(buffer); if(*cptr) { if(*cptr=='!') { if(*(cptr+1)=='!') { if(ses->history[0]) { strcpy(result, ses->history[0]); strcat(result, cptr+2); strcpy(buffer, result); } } else if(isdigit(*(cptr+1))) { int i=atoi(cptr+1); if(i>=0 && i<HISTORY_SIZE && ses->history[i]) { strcpy(result, ses->history[i]); strcat(result, cptr+2); strcpy(buffer, result); } } else { int i; for(i=0; i<HISTORY_SIZE && ses->history[i]; i++) if(is_abrev(cptr+1, ses->history[i])) { strcpy(buffer, ses->history[i]); break; } } } } insert_history(buffer, ses); } /***********************************************/ /* insert buffer into a session`s history list */ /***********************************************/ void insert_history(buffer, ses) char *buffer; struct session *ses; { int i; for(i=HISTORY_SIZE-1; i>0; i--) ses->history[i]=ses->history[i-1]; ses->history[0]=mystrdup(buffer); } /************************************************************/ /* do all the parse stuff for !XXXX history commands */ /* i'm a nihilist alright(hell i felt like writing that..) */ /************************************************************/ struct session *parse_history_command(command, arg, ses) char *command; char *arg; struct session *ses; { if(ses) { if((*(command+1)=='!' || !*(command+1)) && ses->history[0]) return parse_input(ses->history[0], ses); else if(isdigit(*(command+1))) { int i=atoi(command+1); if(i>=0 && i<HISTORY_SIZE && ses->history[i]) { return parse_input(ses->history[i], ses); } } else { } } tintin_puts("#I DON'T REMEMBER THAT COMMAND.", ses); return ses; }