Example #1
0
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) ));
   }
}
Example #2
0
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;
    }
}
Example #10
0
ParseTreePatternMatcher::CannotInvokeStartRule::CannotInvokeStartRule(
    const RuntimeException& e)
    : RuntimeException(e.what()) {}
Example #11
0
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;
     }
}
Example #12
0
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() );
}