august/my.c
int m[40000];
int main() {
int *q,s,f,r,o,l,p,c,b;
char *d;
d=" \t\n;{}\0AP@赁gE챰0q";
/*
char d[]={
0x20,0x5c,0x74,0x5c,0x6e,0x3b,0x7b,0x7d,
0x5c,0x30,0x41,0xca,0x50,0x80,0xb3,0x06,
0xb2,0x89,0x8a,0x40,0x13,0xc9,0xb5,0x81,
0x67,0x04,0x45,0xcf,0xcd,0xb1,0xb0,0x8c,
0x30,0x17,0x8d,0x8e,0x8b,0x71 };
*/
b=256;
q=m;
getchar() ;
o=getchar() ;
c=getchar() ;
c=c+getchar()*b;
p=c;
/* Reading input part */
if(o) {
 while (p) {
  o=getchar();
  if(o==59) { /* o==';' */
   r=2; }
  else if(o=='{') {
   r=5; }
  else if(o=='}') {
   r=8; }
  else r=0;
  if(r) {
   r=r+getchar()%4;
   l=1-getchar()-r;
   while(r--) {
    *q=q[l];
    q++;
    p--; } }
  else {
   if((o==32)+(o==9)+(o==10)) {
    r= getchar() ;
    o=o%4+(r+(r==123))%8*3;
    if(8<o)o=o+getchar()%4*9;
    o=d[o]+b; }
   *q++=o%b;
   p--; } }
 while(getchar()!=12);
 getchar(); }
else {
 while(p--) *q++=getchar(); }
/* end of reading input */
s=40000;
p=0;
while(1) {
 o=m[p++];
 if(o==17) { /* C NOT : n -> !n */
   m[s]=!m[s]; }
 else if(o==18) { /* UNARY MINUS: n -> -n */
  m[s]=-m[s]; }
 else if(o==12) { /* PLUS: n1,n2 -> n1+n2 */
  r=m[s++];
  m[s]=m[s]+r; }
 else if(o==13) { /* MINUS: n1,n2 -> n1-n2 */
  r=m[s++];
  m[s]=m[s]-r; }
 else if(o==14) { /* MUL: n1,n2 -> n1*n2 */
  r=m[s++];
  m[s]=m[s]*r; }
 else if(o==15) { /* DIV: n1,n2 -> n1/n2 */
  r=m[s++];
  m[s]=m[s]/r; }
 else if(o==16) { /* DIV REST: n1,n2 -> n1%n2 */
  r=m[s++];
  m[s]=m[s]%r; }
 else if(o==6) { /* EQUAL: n1,n2 -> n1==n2 */
  r=m[s++];
  m[s]=m[s]==r; }
 else if(o==7) { /* NOT EQUAL: n1,n2 -> n1!=n2 */
  r=m[s++];
  m[s]=m[s]!=r; }
 else if(o==8) { /* LESS: n1,n2 -> n1<n2 */
  r=m[s++];
  m[s]=m[s]<r; }
 else if(o==1) { /* ASSIGN AND SAVE:  Stack: ptr,n -> n  Also: *ptr=n */
  r=m[s++];
  m[m[s]]=r;
  m[s]=r; }
 else if(o==9) { /* ASSIGN:  Stack: ptr,n ->  Also: *ptr=n */
  r=m[s++];
  m[m[s]]=r;
  s++; }
 else if(o==10) { /* RETURN: retval -> as before calling [,retval] */
  r=m[s];	  /* Also: procedure frame pointer: as before calling */
  s=f;
  p=m[s-1];
  f=m[s-2];
  l=m[s-3];
  s=s+l/2;
  m[s] =r;
  if(l%2) s++; }
 else if(o==22) { /* DROP: n -> */
  s++; }
 else if(o==27) { /* EXIT */
  return m[s]; }
 else if(o==21) { /* DUP: n -> n,n */
  r=m[s];
  s--;
  m[s]=r; }
 else if(o==23) { /* FETCH: ptr -> *ptr */
  m[s]=m[m[s]]; }
 else if(o==19) { /* FETCH++: ptr -> *ptr++ */
  m[s]=m[m[s]]++; }
 else if(o==25) { /* FETCH--: ptr -> *ptr-- */
  m[s]=m[m[s]]--; }
 else {
  l=o%16;
  o=o/16;
  if(l==7) {
   l=m[p++];
   l=l+m[p++]*b; }
  else if(7<l) l=l+m[p++]*8-1;
   /* compound command divided into two parts: */
   /* o - new command number */
   /* l - some parameter */
  if(o==2){ /* Get address of function argunet */
   s--;
   m[s]=f+l; }
  else if(o==4) { /* Get address of local function variable */
   s--;
   m[s]=f-l-4; }
  else if(o==3) { /* Get function argument (of type int) */
   s--;
   m[s]=m[f+l]; }
  else if(o==5) { /* Get local function variable (of type int) */
   s--;
   m[s]=m[f-l-4]; }
  else if(o==6) { /* Get address of l-th free memory byte */
   s--;
   m[s]=c+l; }
  else if(o==7) { /* Get value in l-th free memory byte */
   s--;
   m[s]=m[c+l]; }
  else if(o==12) { /* LIT: -> n */
   s--;
   m[s]=l; }
  else if(o==8) { /* LIT: -> n */
   s--;
   m[s]=l; }
  else if(o==9) { /* CALL:  Stack: -> retAddr  Also: jump to another place */
   s--;
   m[s]=p;
   p=p+l; }
  else if(o==11) { /* CALL procedure with parameters or putchar/getchar */
   r=m[s+l/2];
   if(r<3) {
    if(r) r=putchar(m[s]);
    else r=getchar();
    s=s+l/2;
    m[s]=r;
    if(l%2) s++; }
   else {
    m[s-1]=p;
    m[s-2]=f;
    m[s-3]=l;
    f=s;
    s=s-19;
    p=r; }; }
  else if(o==13) { /* JMP */
   p=l; }
  else if(o==15) {
   if(m[s++]) p=l; } /* JZ  flag -> */
  else if(o==14) {
   if(!m[s++]) p=l; } /* JNZ flag -> */
  else; } } }