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; } } }