Advertisement
Guest User

Untitled

a guest
Apr 1st, 2012
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.83 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define d_BufferSize (size_t)65536
  6.  
  7. int opr0x3e(char **s1, FILE *s2);
  8. int opr0x3c(char **s1, FILE *s2);
  9. int opr0x2b(char **s1, FILE *s2);
  10. int opr0x2d(char **s1, FILE *s2);
  11. int opr0x2e(char **s1, FILE *s2);
  12. int opr0x2c(char **s1, FILE *s2);
  13. int opr0x5b(char **s1, FILE *s2);
  14. int opr0x5d(char **s1, FILE *s2);
  15. int oprnop(char **s1, FILE *s2);
  16.  
  17. int main(int argc, char **argv){
  18.     FILE *fin = NULL;
  19.     char *buffer = NULL, *bufferdp, *iuput = NULL, *inputdp;
  20.     int (*swch[0x100])(char **s1, FILE *s2), (**swchdp)(char **s1, FILE *s2) = swch, opr, i;
  21.  
  22.     if(argc == 2){
  23.         if((fin = fopen(argv[1], "rb")) != NULL){
  24.             if((bufferdp = (buffer = calloc(d_BufferSize, sizeof(char)))) != NULL){
  25.                 for(i = 0; i < 0x100; i++) *swchdp++ = &oprnop;
  26.                 swch['>'] = &opr0x3e;
  27.                 swch['<'] = &opr0x3c;
  28.                 swch['+'] = &opr0x2b;
  29.                 swch['-'] = &opr0x2d;
  30.                 swch['.'] = &opr0x2e;
  31.                 swch[','] = &opr0x2c;
  32.                 swch['['] = &opr0x5b;
  33.                 swch[']'] = &opr0x5d;
  34.                 while((opr = fgetc(fin)) != EOF) if(swch[opr](&bufferdp, fin)) break;
  35.             }
  36.             else fputs("memory error.", stdout);
  37.             fclose(fin);
  38.             free(buffer);
  39.             free(input);
  40.         }
  41.         else fputs("file open error.", stdout);
  42.     }
  43.     else fputs("main [inputfile]", stdout);
  44.  
  45.     return 0;
  46.  
  47. }
  48.  
  49. int opr0x3e(char **s1, FILE *s2){
  50.  
  51.     (*s1)++;
  52.  
  53.     return 0;
  54. }
  55.  
  56. int opr0x3c(char **s1, FILE *s2){
  57.  
  58.     (*s1)--;
  59.  
  60.     return 0;
  61. }
  62.  
  63. int opr0x2b(char **s1, FILE *s2){
  64.  
  65.     (**s1)++;
  66.  
  67.     return 0;
  68. }
  69.  
  70. int opr0x2d(char **s1, FILE *s2){
  71.  
  72.     (**s1)--;
  73.  
  74.     return 0;
  75. }
  76.  
  77. int opr0x2e(char **s1, FILE *s2){
  78.  
  79.     fputc(**s1, stdout);
  80.  
  81.     return 0;
  82. }
  83.  
  84. int opr0x2c(char **s1, FILE *s2){
  85.  
  86.     **s1 = fgetc(stdin);
  87.  
  88.     return 0;
  89. }
  90.  
  91. int opr0x5b(char **s1, FILE *s2){
  92.     int oprbuf;
  93.  
  94.     if(!(**s1)){
  95.         do{
  96.             if((oprbuf = fgetc(s2)) == EOF) return EOF;
  97.         }while(oprbuf != ']');
  98.     }
  99.  
  100.     return 0;
  101. }
  102.  
  103. int opr0x5d(char **s1, FILE *s2){
  104.     int oprbuf;
  105.  
  106.     do{
  107.         fseek(s2, -2L, SEEK_CUR);
  108.         if((oprbuf = fgetc(s2)) == EOF) return EOF;
  109.     }while(oprbuf != '[');
  110.     fseek(s2, -1L, SEEK_CUR);
  111.  
  112.     return 0;
  113. }
  114.  
  115. int oprnop(char **s1, FILE *s2){
  116.  
  117.     return 0;
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement