#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define C :Q==38
#define R !(X=Y=0)
#define U (_=r,S?r=S->p,s=S->q,free(S),S=s,r:(r=0))
#define Z struct c
#define B (i=U,j=U)%W==j&&i%H==i?z[W*i+j]
Z{int p;Z*q;}*S,*s;int z[2000],W=80,H=25,x,y,X,Y,i,j,q,Q,r,_;FILE*F;int u(int r)
{s=S;S=(Z*)malloc(sizeof(Z));S->q=s;return S->p=r;}int main(int v,char**V){v-2?\
exit(!printf(".tokinized present\nBefunge-93 Interpreter; version 0.20\nby Toki\
gun <zenith@tokigun.net>\n\nUsage: %s program.bf\n",*V)):(F=fopen(*++V,"r"))?sr\
and(time(0)):exit(!!printf(".error: File Not Found. %s\n",*V));while(i<W*H)z[i++
]=32;for(X=R;j<H&&~(r=fgetc(F));Q=r)r==13||(r==10&&Q-13)?_=!++j:_<W?z[j*W+_++]=r
:0;for(;q|(Q=z[W*y+x])^64;x=(W+x+X)%W,y=(H+y+Y)%H)Q==34?q=~q:q?u(Q):Q>47&&Q<58?u
(Q-48)C+5?u(U+U)C+7?U,u(U-_)C+4?u(U*U)C+9?U?u(U/_):U C-1?U?u(U%_):U C-5?u(!U)C+\
58?u(U<U)C+24?X=R C+22?X=-R C+56?Y=-R C+W?Y=R C+H?*((i=rand())&2?&X:&Y)=i&R?1:-1
C+57?X=U?-R:R C+86?Y=U?-R:R C-3?x+=X,y+=Y C+20?u(u(U))C+54?U,U,u(_),u(r)C-2?U C+
8?printf("%d ",U)C+6?putchar(U)C+88?u(getchar())C?scanf("%d",&i),u(i)C+65?u(B:32
)C+74?B=U:U:0;while(S)U;exit(-fclose(F));}

