/* nebi.c 
 * Author: Nico Golde <nico@ngolde.de>
 * License: GPL
 * Homepage: http://www.ngolde.de
 * YES ITS NOT A SECURE SOURCE CODE ITS OLD AND I WAS TOO LAZY TO ADAPT IT :)
 * THIS CODE IS EASILY EXPLOITABLE BUT I DONT CARE, WAS JUST A QUICK HACK
 */  
  
#include <stdio.h>
void wandel (char *i);
int a, b, c;
char d[5000], e[5000], f, g, *h = e;
int main (int argc, char *argv[]) 
{
  FILE * k;
  c = argc;
  if ((k = fopen (argv[1], "r"))) {
    while ((f = getc (k)) > 0)
      *h++ = f;
    *h = 0;
    wandel (e);
  }
  return 0;
}
void wandel (char *i) 
{
  char *j;
  int tmp;

  b++;
  while (*i) {
    
      /*switcht alle möglichen Zeichen(<>+-,.[]) */ 
      switch (g = 1, *i++) {
    case '<':
      a--;
      break;
    case '>':
      a++;
      break;
    case '+':
      d[a]++;
      break;
    case '-':
      d[a]--;
      break;
    case '.':
      putchar (d[a]);
      fflush (stdout);
      break;
    case ',':
      tmp = getchar ();
      if (tmp == EOF)
        d[a] = 0;
      
      else
        d[a] = tmp;
      break;
    case '[':
      for (f = 1, j = i; f && *i; i++)
        f += *i == '[', f -= *i == ']';
      if (!f) {
        i[-1] = 0;
        while (d[a])
          wandel (j);
        i[-1] = ']';
        break;
      }
    case ']':
      puts ("fehlerhafter Code..."), exit (0);
    default:
      g = 0;
    }
    if (a < 0 || a > 100)
      puts ("fehlerhafter Code..."), exit (0);
  }
  b--;
}


