Guest User

Untitled

a guest
Mar 1st, 2013
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.84 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <stdio.h>
  4. #include <string.h>
  5.  
  6. int main(int argc, char *argv[]) {
  7.     unsigned int loopindex[1024];
  8.     unsigned int loopdepth = 0;
  9.     char *code;
  10.  
  11.     /** Read le file */
  12.     if(argc < 2) {
  13.         std::cout << "Unable to open file: no path was given." << std::endl;
  14.         return 0;
  15.     }
  16.  
  17.     bool debug = false;
  18.  
  19.     for(int i = 0; i < argc; ++i) {
  20.         if(argv[i][0] == '-' && argv[i][1] == 'd')
  21.             debug = true;
  22.     }
  23.    
  24.     std::ifstream in(argv[1]);
  25.  
  26.     if(!in.is_open()) {
  27.         std::cout << "Unable to open file: invalid path was given." << std::endl;
  28.         return 0;
  29.     }
  30.  
  31.     in.seekg (0, std::ios::end);
  32.     int length = in.tellg();
  33.     in.seekg (0, std::ios::beg);
  34.  
  35.     code = new char[length];
  36.  
  37.     in.read (code, length);
  38.     in.close();
  39.  
  40.     char data[30000];
  41.     unsigned int codep = 0;
  42.     unsigned int datap = 0;
  43.     unsigned int maxDataP = 0;
  44.  
  45.     /** Do le interpretation */
  46.     while(code[codep] != 0) {
  47.         switch(code[codep]) {
  48.             case'+': ++data[datap]; break;
  49.             case'-': --data[datap]; break;
  50.             case '>': ++datap; break;
  51.             case '<': --datap; break;
  52.             case '.': std::cout << data[datap]; break;
  53.             case ',': std::cin >> data[datap]; break;
  54.             case '[':
  55.                 ++loopdepth;
  56.                 loopindex[loopdepth] = codep;
  57.                 break;
  58.             case ']':
  59.                 if(data[datap]) codep = loopindex[loopdepth]; else loopdepth--;
  60.                 break;
  61.         }
  62.  
  63.         if(datap > maxDataP) {
  64.             maxDataP = datap;
  65.         }
  66.  
  67.         ++codep;
  68.     }
  69.  
  70.     if(debug) {
  71.         std::cout << "\n\nPress any key to show debug data.";
  72.         std::cin.ignore();
  73.         std::cin.get();
  74.         std::cout << "Highest recorded datapointer: " << maxDataP << std::endl;
  75.  
  76.         for(int i = 0; i <= maxDataP; i++) {
  77.             if(data[i] != 0) {
  78.                 std::cout << "Data in cell #" << i << ": " << data[i] << std::endl;
  79.             }
  80.         }
  81.     }
  82.  
  83.     if(!debug) std::cin.ignore();
  84.     std::cout << "\n\nPress any key to continue.";
  85.     std::cin.get();
  86.  
  87.     return 0;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment