Aslai

BF Compiler

Oct 7th, 2011
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.16 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stack>
  3.  
  4. int main(){
  5.     std::stack<int> s;
  6.     int pos;
  7.     char in[100000];
  8.     printf( "BF: "); gets( in );
  9.     FILE* a = fopen( "out.bin", "w" );
  10.     int p = 0x9D93;
  11.    
  12.  
  13.  
  14.     fprintf( a, "%c%c%c%c%c", 0xBB, 0x6D, 0x21, 0xEC, 0x86 ); p+=5;
  15.      fprintf( a, "%c", 0x76 ); p+=1;
  16.     fprintf( a, "%c%c", 0x3E, 0xFF ); p+=2;
  17.     fprintf( a, "%c%c%c%c%c%c%c%c%c", 0x36, 0, 0x23, 0x3D, 0xFE, 0, 0xC2, p&0xFF, (p>>8)&0xFF ); p+=9;
  18.     fprintf( a, "%c%c%c", 0x21, 0xEC, 0x86 ); p+=3;
  19.  
  20.     for( int i = 0; in[i] != 0; i ++ ){
  21.         switch( in[i] ){
  22.             case '+':
  23.                 fprintf( a, "%c", 0x34 ); p++;
  24.                 break;
  25.             case '-':
  26.                 fprintf( a, "%c", 0x35 ); p++;
  27.                 break;
  28.             case '>':
  29.                 fprintf( a, "%c", 0x23 ); p++;
  30.                 break;
  31.             case '<':
  32.                 fprintf( a, "%c", 0x2B ); p++;
  33.                 break;
  34.             case '[':
  35.             {
  36.                 s.push( p+6 );
  37.                 int pp = p;
  38.                 for( int j = i+1, depth = 1; in[j] != 0; j++ ){
  39.                     if( in[j] == '[' ) depth ++;
  40.                     if( in[j] == ']' ) depth --;
  41.  
  42.                     if( in[j] == '+' || in[j] == '-' || in[j] == '<' || in[j] == '>' ){
  43.                         pp++;
  44.                     }
  45.                     if( in[j] == '[' || in[j] == ']' ){
  46.                         pp+=6;
  47.                     }
  48.                     if( in[j] == '.' || in[j] == ',' ){
  49.                         pp+=4;
  50.                     }
  51.                     if( depth <= 0 ) break;
  52.                 }
  53.                 fprintf( a, "%c%c%c%c%c%c", 0x7E, 0xFE, 0x00, 0xCA, pp&0xFF, (pp>>8)&0xFF ); p+=6;
  54.             } break;
  55.             case ']':
  56.             {
  57.                 int pp = s.top( );
  58.                 s.pop();
  59.                 fprintf( a, "%c%c%c%c%c%c", 0x7E, 0xFE, 0x00, 0xC2, pp&0xFF, (pp>>8)&0xFF ); p+=6;
  60.             } break;
  61.             case '.':
  62.             {
  63.                 fprintf( a, "%c%c%c%c", 0x7E, 0xEF, 0x04, 0x45 ); p+=4;
  64.             } break;
  65.         }
  66.     }
  67.     fprintf( a, "%c", 0xC9 ); p+=1;
  68. }
  69.  
  70.  
Advertisement
Add Comment
Please, Sign In to add comment