rendered paste body/*Return scripting language2009 Return*/#include <stdio.h>#include <stdlib.h>#include <time.h>#include <stdbool.h>void junk(void);void r_push(int val);int r_pop(void);#define STACK_SIZE 10#define random(a) rand()%aFILE *script;int PTR=0; //aktualnie odczytywany znakunsigned int *stack[STACK_SIZE];int MM=STACK_SIZE-1; //pozycja stosuint *R1; //akumulator (I/O)int R2=0; //rejestr działania (I/O)int J=0; //rejestr skoku (I)int CMP=0; //rejestr porównania (I)char RS=0; //stan rejestrówchar MD='k'; //tryb pracychar znk=0; int main (int argc, char **argv){ printf("%u", &znk); srand(time(NULL)); if(argc!=2) { puts("Return\n2009 Return\n\nUSAGE: return <scriptname>"); getchar(); return 0; } for(PTR=0; PTR < sizeof (*stack); PTR++) { *stack[PTR]=0; } script=fopen(argv[1], "r"); if(fgetc(script)!='!') { puts("Co to za badziewie?! To nie jest skrypt!"); return 0;} R1 = &znk; while ((znk=fgetc(script))!=EOF) { if(znk=='[') { RS=1; //odblokowanie R1 R1 =malloc(4); //ustalamy pozycje R1 w pamieci } if(znk=='r') { MD=fgetc(script); //wybór trybu if(RS==0 && (MD=='S' || MD=='R' || MD=='p' || MD=='t' || MD=='n' || MD==' ')) { puts("Blad 1: Dla bezpieczenstwa tryb zostal zablokowany"); return 0; } } else { switch(MD) { case 'S': //przełączenie rejstru r_push(*R1); *R1=R2; R2=r_pop(); case 'R': //operacje arytmetyczne if(znk=='e') { *R1++; } else { *R1--; } break; case 'p': //pozycja if(znk=='q') { //przenieś (dosłownie :D) wartość do rej. skoku J=*R1; *R1=255; //wiem, jestem wredny - happy debugging } else { //zapamiętaj pozycję do rej. J J=ftell(script); } case 't': //we/wy if(znk=='u') putchar(*R1); //wyśiwetlanie znaku else *R1=getchar(); //pobieranie znaku break; case 'w': //skoki if(znk=='=') fseek(script,J,SEEK_CUR); //skok względny o wartość J else if(znk=='*') fseek(script,J,SEEK_SET); //skok bezwzględny do J else fseek(script,-J,SEEK_CUR); //skok względny o wartość -J break; case 'x': //porównanie if(znk=='4'){ if(*R1==CMP) fseek(script,J,SEEK_SET); //skok bezwzględny, CMP } else if(znk=='3'){ if(*R1==CMP) fseek(script,J,SEEK_CUR); //skok względny, CMP } else if(znk=='7'){ if(*R1!=CMP) fseek(script,J,SEEK_SET); //skok bezwzględny, !=CMP } else { if(*R1!=CMP) fseek(script,J,SEEK_CUR); //skok względny, !=CMP } break; case 'n': //stos if(znk=='o') { //push r_push(*R1); *R1=0; //utrudnienia przede wszystkim! :D } else { //pop *R1=r_pop(); } if(MM < 0 || MM > STACK_SIZE) { //zabezpieczenie junk(); puts("Stos sie rozjechal"); return 0; } break; case 'k': //bezczynność, komentarz break; case ' ': //ukryte ;) if(znk=='q') { //quine r_push(ftell(script)); fseek(script,0,SEEK_SET); while ((znk=fgetc(script))!=EOF) { putc(znk,stdout); } fseek(script,r_pop(),SEEK_SET); } break; default: junk(); puts("Chyba nie ma takiego trybu: "); putc(MD,stdout); return 0; } } } fclose(script); return 0;}void r_push(int val) { *stack[MM]=val; MM--; }int r_pop(void) { MM++; return *stack[MM]; }void junk(void) { int i; for(i=0; i < random(100) + 50; i++) { putc(random(255-32)+32,stdout); } fputs("KvrWa!",stdout); for(i=0; i < random(100) + 50; i++) { putc(random(255-32)+32,stdout); }}