Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <stdio.h>
- #include <string.h>
- int main(int argc, char *argv[]) {
- unsigned int loopindex[1024];
- unsigned int loopdepth = 0;
- char *code;
- /** Read le file */
- if(argc < 2) {
- std::cout << "Unable to open file: no path was given." << std::endl;
- return 0;
- }
- bool debug = false;
- for(int i = 0; i < argc; ++i) {
- if(argv[i][0] == '-' && argv[i][1] == 'd')
- debug = true;
- }
- std::ifstream in(argv[1]);
- if(!in.is_open()) {
- std::cout << "Unable to open file: invalid path was given." << std::endl;
- return 0;
- }
- in.seekg (0, std::ios::end);
- int length = in.tellg();
- in.seekg (0, std::ios::beg);
- code = new char[length];
- in.read (code, length);
- in.close();
- char data[30000];
- unsigned int codep = 0;
- unsigned int datap = 0;
- unsigned int maxDataP = 0;
- /** Do le interpretation */
- while(code[codep] != 0) {
- switch(code[codep]) {
- case'+': ++data[datap]; break;
- case'-': --data[datap]; break;
- case '>': ++datap; break;
- case '<': --datap; break;
- case '.': std::cout << data[datap]; break;
- case ',': std::cin >> data[datap]; break;
- case '[':
- ++loopdepth;
- loopindex[loopdepth] = codep;
- break;
- case ']':
- if(data[datap]) codep = loopindex[loopdepth]; else loopdepth--;
- break;
- }
- if(datap > maxDataP) {
- maxDataP = datap;
- }
- ++codep;
- }
- if(debug) {
- std::cout << "\n\nPress any key to show debug data.";
- std::cin.ignore();
- std::cin.get();
- std::cout << "Highest recorded datapointer: " << maxDataP << std::endl;
- for(int i = 0; i <= maxDataP; i++) {
- if(data[i] != 0) {
- std::cout << "Data in cell #" << i << ": " << data[i] << std::endl;
- }
- }
- }
- if(!debug) std::cin.ignore();
- std::cout << "\n\nPress any key to continue.";
- std::cin.get();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment