#include <string.h>
#include <stdlib.h>
#include <iostream.h>
#include "history.h"

void History::printhistory(void)
{
  for(int i = 0 ; i < hist.len() ; i++)
    cout << hist[i].cmdnum << ": " << hist[i].cmd << "\n";
}

void History::operator<<(const char *str)
{
  histent h;
  h.cmdnum = curcmd++;
  h.cmd=strdup(str);
  hist.listappend(h);

  while(hist.len() > maxhist)
    hist.listdelete(0);
}

char *History::subst(const char *cmd)
{
  static char buf[256];

  if(cmd[0] == '!')
  {
    if(cmd[1] == '!') {
      strcpy(buf, hist[hist.len()-1].cmd);
    } else {
      int i=0, j = atoi(cmd+1);
      if(j < hist[0].cmdnum) {
        cerr << "Event "<<j<<" not found.\n";
        substerr = 1;
        return 0;
      } else if( (i=j-hist[0].cmdnum) > maxhist) {
        cerr << "Event "<<j<<" not found.\n";
        substerr = 1;
        return 0;
      }
      substerr = 0;
      strcpy(buf, hist[i].cmd);
    }
    cout << buf <<"\n";
    return buf;
  }
  return (char *)cmd;
}

