void add()// add <eax><const><const> | add <reg><mem> | add <mem><reg> | add <reg><reg> | add <reg> <reg><reg> reg_check_ret( { double p0 = strtol(prog(2, IP++, "").c_str(), NULL, 2); double p1 = strtol(prog(2, IP++, "").c_str(), NULL, 2); double p2 = strtol(prog(2, IP++, "").c_str(), NULL, 2); if(p0 == 20) EAX = p1 + p2; else { RuntimeException re; if((reg_check_ret(p1) == null) && (reg_check_ret(p2) == null)) re.introduce("NullpointerException", "cannot perform math on null element"); if(SFC == DOUBLE)// double addition reg_check_set( p0, reg_check_ret(p1) + reg_check_ret(p2)); else if(SFC == FLOAT)// float addition reg_check_set(p0, ((float) reg_check_ret(p1) + reg_check_ret(p2)) ); else if(SFC == INT)// int addition reg_check_set( p0, ((long) reg_check_ret(p1) + reg_check_ret(p2) )); else if(SFC == SHORT)// short addition reg_check_set( p0, ((int) reg_check_ret(p1) + reg_check_ret(p2) )); else // int addition reg_check_set( p0, ((long) reg_check_ret(p1) + reg_check_ret(p2) )); } }
SDL_Surface* MickSDLAssets::Load_BMP(const char* pathfile) { if(! MickUtil::CheckFileExists(pathfile)) { string fname(pathfile); RuntimeException e; e.setMessage( "MickSDLAssets::Load_BMP-Resource not found: " + fname); throw e; } return SDL_LoadBMP(pathfile); }
void push() { double p0 = strtol(prog(2, IP++, "").c_str(), NULL, 2); IP++; IP++; RuntimeException x; if(!inFunc){ inFunc = true; core0.setr(0, p0, IP); ignore = true; } else x.introduce("FunctionCallException", "cannot initalize a function inside another function!"); }
void neg(){ double p0 = strtol(prog(2, IP++, "").c_str(), NULL, 2); IP++; IP++; RuntimeException re; if(SFC == INT || SFC == DOUBLE || SFC == SHORT || SFC == FLOAT) reg_check_set( p0, (reg_check_ret( p0) * -1)); else if(SFC == BOOL){ if(reg_check_ret( p0) == 0) reg_check_set( p0, 1); else if(reg_check_ret( p0) == 1) reg_check_set( p0, 0); } else re.introduce("UnsatisfiedTypeException","must specify correct type to be inverted"); }
void aaload() // aaload numbers 0 num1 { double p0 = strtol(prog(2, IP++, "").c_str(), NULL, 2); double p1 = strtol(prog(2, IP++, "").c_str(), NULL, 2); double p2 = strtol(prog(2, IP++, "").c_str(), NULL, 2); long length = (long) core0.getr(0, p0); long index = (long) reg_check_ret(p1); if(index >= length){ RuntimeException re; stringstream ss, ss1; ss << index; ss1 << length; re.introduce("ArrayLengthOutOfBoundsException", "index >= length; could not access array at index[" + ss.str() + "] length is: " + ss1.str()); } TMP = p0 + 2; TMP += index; reg_check_set(p2, core0.getr(0, TMP)); }
void aload() // aload numbers sdx i4 { double p0 = strtol(prog(2, IP++, "").c_str(), NULL, 2); double p1 = strtol(prog(2, IP++, "").c_str(), NULL, 2); double p2 = strtol(prog(2, IP++, "").c_str(), NULL, 2); long length = (long) core0.getr(0, p0); long index = (long) reg_check_ret(p1); if(index >= length){ RuntimeException re; stringstream ss, ss1; ss << index; ss1 << length; re.introduce("ArrayLengthOutOfBoundsException", "index >= length; could not access array at index[" + ss.str() + "] length is: " + ss1.str()); } long addr = p0 + 2; addr += index; TMP = (long) core0.getr(0, p0 + 1); if(TMP == INT) core0.setr(0, addr, (long) reg_check_ret(p2)); else if(TMP == SHORT) core0.setr(0, addr, (int) reg_check_ret(p2)); else if(TMP == DOUBLE) core0.setr(0, addr, (double) reg_check_ret(p2)); else if(TMP == FLOAT) core0.setr(0, addr, (float) reg_check_ret(p2)); else if(TMP == BOOL) core0.setr(0, addr, tibool(reg_check_ret(p2)) ); else if(TMP == CHAR) core0.setr(0, addr, _char((long) reg_check_ret(p2))); else { RuntimeException re; stringstream ss; ss << TMP; re.introduce("ArrayTypeNotFoundException", "the specified array type: " + ss.str() + " was not found"); } }
void array() // array numbers sdx int { double p0 = strtol(prog(2, IP++, "").c_str(), NULL, 2); double p1 = strtol(prog(2, IP++, "").c_str(), NULL, 2); double p2 = strtol(prog(2, IP++, "").c_str(), NULL, 2); if(p1 == 0){ SCR = -5; return; } core0.setr(0, p0, (int) reg_check_ret(p1)); // check type if(p2 == INT || p2 == BOOL || p2 == CHAR || p2 == FLOAT || p2 == DOUBLE || p2 == SHORT) { } else { RuntimeException re; stringstream ss; ss << p2; re.introduce("ArrayTypeNotFoundException", "the specified array type: " + ss.str() + " was not found"); } core0.setr(0, (p0 + 1), p2); TMP = p0 + 2; for(int i = 0; i < p1; i++) core0.setr(0, TMP++, 0); }
void _throw() { double p0 = strtol(prog(2, IP++, "").c_str(), NULL, 2); double p1 = strtol(prog(2, IP++, "").c_str(), NULL, 2); IP++; stringstream ss, ss1; TMP = p0 + 1; // the exception char ch; for(int i = 0; i < core0.getr(0, p0); i++){ ch = core0.getr(0, TMP++); if((ch == '\n') || (ch == ' ') || (ch == '\t') || (ch == 10)){ } else ss << ch; } TMP = p1 + 1; // the msg for(int i = 0; i < core0.getr(0, p1); i++){ ch = core0.getr(0, TMP++); ss1 << ch; } RuntimeException re; re.introduce(ss.str(), ss1.str()); }
void t_cast() { double p0 = strtol(prog(2, IP++, "").c_str(), NULL, 2); double p1 = strtol(prog(2, IP++, "").c_str(), NULL, 2); IP++; RuntimeException re; switch( (long) p1 ){ case 0: // short core0.setr(0, p0, (int) core0.getr(0, p0)); break; case 1: // int core0.setr(0, p0, (long) core0.getr(0, p0)); break; case 2: // float core0.setr(0, p0, (float) core0.getr(0, p0)); break; case 3: // double core0.setr(0, p0, (double) core0.getr(0, p0)); break; case 4: // char { char ch = core0.getr(0, p0); int c = ch; core0.setr(0, p0, c); } break; case 5: // bool core0.setr(0, p0, ibool(core0.getr(0, p0))); break; default: // err stringstream ss; ss << "the specified cast value [" << p1 << "] is not a valid arg[double(3),float(2),int(1),short(0)]"; re.introduce("UnknownCastException", ss.str()); break; } }
ParseTreePatternMatcher::CannotInvokeStartRule::CannotInvokeStartRule( const RuntimeException& e) : RuntimeException(e.what()) {}
void invoke() { double p0 = strtol(prog(2, IP++, "").c_str(), NULL, 2); double p1 = strtol(prog(2, IP++, "").c_str(), NULL, 2); IP++; switch((long) p0 ) { case 0: // os system call { stringstream ss; long TMP = SDX + 1; // the command char ch; for(int i = 0; i < core0.getr(0, SDX); i++){ ch = core0.getr(0, TMP++); if((ch == '\n') || (ch == ' ') || (ch == '\t') || (ch == 10)){ } else ss << ch; } string command = "" + ss.str();; system(command.c_str()); } break; case 1: // log settings if(LG == 1) lg.On(); else if(LG == 0) lg.Shutdown(); SetPriority(LSL); break; case 2: Ram rm; SCR = rm.info(p1); break; case 3: // push code to Ram { TMP = SDX; string bin = ""; stringstream ss1; for(long i = SDX + 1; i < (SDX + core0.getr(0, SDX)); i++){ ss1 << core0.getr(0, i); } bin += "" + ss1.str(); for(int i = 0; i < bin.length(); i++) { if(bin.at(i) != '1' || bin.at(i) != '0') { SCR = -1; return; } } // verify is binary cout << "setting to addr " << TMP << endl; prog(1, TMP, bin); } break; case 4: // get code from ram { string bin = prog(2, SDX, ""); SDX = bin.length(); TMP = 0; for(long i = SCX; TMP < bin.length(); i++){ core0.setr(0, i, bin.at(TMP)); TMP++; } } break; case 5:// I/O for GPIO pins InputOutput io; long data[8]; switch( SFC ) { case 0: SCR = io.Read(0,data); if(SCR == -1) EBX = 3; break; case 1: SCR = io.Write(0,data); if(SCR == -1) EBX = 3; break; } break; case 6: // Os Calls for GPIO switch( SFC ) { case 0:// set dir SCR = GPIODirection(SDX, SCX); if(SCR == -1) EBX = 3; break; case 1: // unexport SCR = GPIOUnexport(SDX); if(SCR == -1) EBX = 3; break; case 2: // export SCR = GPIOExport(SDX); if(SCR == -1) EBX = 3; break; } break; case 10: // goto <address>(could be used for multitasking) core0.Interrupt(SDX); break; case 11: // set IP back to original pos before it was interrupted IP = auto_ipi; break; case 12: { // Set terminal to raw mode system("stty raw"); // Wait for single character if(SFC != CHAR){ // do not print char to screen SDX = (int) getchar(); cout << "\b \b" << std::flush; } else SDX = (int) getchar(); // Reset terminal to normal "cooked" mode system("stty cooked"); } break; case 18: // assemble data { string bin = disasm.assemble(SDX); SDX = bin.length(); TMP= 0; for(long i = SCX; TMP < bin.length(); i++){ core0.setr(0, i, bin.at(TMP)); TMP++; } } break; case 19: // dissassemble data { string bin = ""; stringstream ss1; // sdx - start addr // scx - length for(long i = SDX; i < (SDX + SCX); i++){ ss1 << core0.getr(0, i); } bin += "" + ss1.str(); for(int i = 0; i < bin.length(); i++) { if(bin.at(i) != '1' || bin.at(i) != '0') { SCR = -1; return; } } // verify is binary SDX = (long) disasm.disassemble(bin); } break; case 35: { core0.setr(0, SDX, prog_args.length()); long start_addr = SDX; int ch; for(int i = 0; i < prog_args.length(); i++){ ch = prog_args.at(i); core0.setr(0, start_addr + i, ch); } SCX = arg_c - 2; } break; case 40: ucache(); break; case 42: { stringstream ss, ss1; long start_addr = SDX + 1; // the tag char ch; for(int i = 0; i < core0.getr(0, SDX); i++){ ch = core0.getr(0, start_addr++); if((ch == '\n') || (ch == ' ') || (ch == '\t') || (ch == 10)){ } else ss << ch; } start_addr = SCX + 1; // the tag for(int i = 0; i < core0.getr(0, SCX); i++){ ch = core0.getr(0, start_addr++); if((ch == '\n') || (ch == 10)){ } else ss1 << ch; } if(p1 <= 2) lg.v(ss.str(), ss1.str()); else if(p1 == 3) lg.d(ss.str(), ss1.str()); else if(p1 == 4) lg.i(ss.str(), ss1.str()); else if(p1 == 5) lg.w(ss.str(), ss1.str()); else if(p1 == 6) lg.e(ss.str(), ss1.str()); else lg.a(ss.str(), ss1.str()); } break; case 50: // read to a file { data[0] = p1; SCR = io.Read(1,data); // read to a file } break; case 51: // write to a file { data[0] = p1; SCR = io.Write(1,data); // write to a file } break; case 100: // cursor maniputation { stringstream ss; string cursorpos = ""; if(SFC == 0){ ss << "\033[" << SDX << ";" << SCX << "f"; cursorpos = ss.str(); cout << cursorpos; } else if(SFC == 1){ // move up N lines ss << "\033[" << SDX << "A"; cursorpos = ss.str(); cout << cursorpos; } else if(SFC == 2){ // move down N lines ss << "\033[" << SDX << "B"; cursorpos = ss.str(); cout << cursorpos; } else if(SFC == 3){ // move forward N colums ss << "\033[" << SDX << "C"; cursorpos = ss.str(); cout << cursorpos; } else if(SFC == 4){ // move backward N colums ss << "\033[" << SDX << "D"; cursorpos = ss.str(); cout << cursorpos; } else if(SFC == 5){ // move to (0,0) cursorpos = "\033[2J"; cout << cursorpos; } else if(SFC == 6){ // erase to end of line cursorpos = "\033[K"; cout << cursorpos; } else if(SFC == 7){ // save cursor pos cursorpos = "\033[s"; cout << cursorpos; } else if(SFC == 8){ // restore cursor pos cursorpos = "\033[u"; cout << cursorpos; } } break; case 128: SCR = alloc(tibool(SDX), SCX); break; case 132: SystemColor color; SCR = color.getSystemColorInfo((int) SDX); break; case 250: // get total internal time the cpu has been running(in secs | nanosecs) { switch( SFC ) { case 0: core0.setr(0, SDX, core0.GetTime()); break; case 1: core0.setr(0, SDX, core0.Get_UTime()); break; case 2: core0.resetTime(); break; case 3: core0.reset_UTime(); break; } } break; default: stringstream ss; ss << p0; RuntimeException re; re.introduce("IllegalSystemCallExcpetion", "code is not a system call [" + ss.str() + "]"); break; } }
void SystemColor::changeColor() { RuntimeException re; if(syscolor.ctone == LIGHT) { switch(syscolor.ccolor) { case DARK_GRAY: cout << d_gray; return; break; case LIGHT_BLUE: cout << l_blue; return; break; case LIGHT_GREEN: cout << l_green; return; break; case LIGHT_CYAN: cout << l_cyan; return; break; case LIGHT_RED: cout << l_red; return; break; case LIGHT_PURPLE: cout << l_purple; return; break; case YELLOW: cout << yellow; return; break; case WHITE: cout << white; return; break; case NO_COLOR: cout << n_color; return; break; } } else if(syscolor.ctone == REG) { switch( syscolor.ccolor ) { case BLACK: cout << black; return; break; case BLUE: cout << blue; return; break; case GREEN: cout << green; return; break; case CYAN: cout << cyan; return; break; case RED: cout << red; return; break; case PURPLE: cout << purple; return; break; case BROWN: cout << brown; return; break; case LIGHT_GRAY: cout << l_gray; return; break; case NO_COLOR: cout << n_color; return; break; } } else re.introduce("SystemColorFaultException","unknown color tone"); }
RuntimeException::RuntimeException(const RuntimeException& exception) throw() : ::fwCore::Exception(std::string(exception.what())) { SLM_WARN( this->what() ); }