Bool ZGameWindow_Programmable::MouseButtonClick  (UShort nButton, Short Absolute_x, Short Absolute_y)
{
  Bool Res;
  Res = ZFrame::MouseButtonClick(nButton, Absolute_x, Absolute_y);

  if (RobotProgramLoad.Is_MouseClick(true))
  {
    // VoxelExtension->SetScriptNum(floor(RobotProgramNum.GetValue()));
    VoxelExtension->CompileAndRunScript(ZVoxelExtension_Programmable::CONTEXT_PROGRAMCHANGE, floor(RobotProgramNum.GetValue()));
  }

  if (CloseBox.Is_MouseClick())
  {
    Hide();
  }

  if (RobotProgramNum.Is_MouseClick())
  {
    DisplayProgramName();
  }

  if (RobotProgramEdit.Is_MouseClick(true))
  {
    ZString FileName, FileSpec;

    FileName << (ULong)floor(RobotProgramNum.GetValue()) << ".nut";
    FileSpec = GameEnv->Path_UserScripts_Squirrel;
    FileSpec.AddToPath(FileName);

    // If the file does not exists, create it.

    if (!ZStream_File::File_IsExists(FileSpec.String))
    {
      ZString InFileSpec, Template;
      ZStream_File Stream;
      InFileSpec = GameEnv->Path_GameFiles;
      InFileSpec.AddToPath("Misc");
      InFileSpec.AddToPath("new_file_squirrel.nut");
      Stream.SetFileName(InFileSpec.String);
      Stream.GetFileContent(Template);
      Stream.SetFileName(FileSpec.String);
      Stream.PutFileContent(Template);
    }

    ZEditCode::EditCode(&GameEnv->Settings_Hardware->Setting_Favorite_Editor,&FileSpec);
  }

  return (Res);
}
Bool ZGameWindow_ProgRobot_Asm::MouseButtonClick  (UShort nButton, Short Absolute_x, Short Absolute_y)
{
  Bool Res;
  Res = ZFrame::MouseButtonClick(nButton, Absolute_x, Absolute_y);

  if (RobotProgramLoad.Is_MouseClick(true))
  {
    // VoxelExtension->SetScriptNum(floor(RobotProgramNum.GetValue()));
    VoxelExtension->CompileAndRunScript(ZVoxelExtension_Programmable::CONTEXT_PROGRAMCHANGE, floor(RobotProgramNum.GetValue()));
  }

  if (RobotProgramDebug.Is_MouseClick(true))
  {
    if (VoxelExtension->CompileAndRunScript(ZVoxelExtension_Programmable::CONTEXT_PROGRAMCHANGE, floor(RobotProgramNum.GetValue()), true ))
    {
      //Hide();
      GameEnv->GuiManager.RemoveFrame(MainWindow);
      Flag_Shown = false;
      GameEnv->GameWindow_AsmDebug->SetVoxelExtension(VoxelExtension);
      GameEnv->GameWindow_AsmDebug->Show();
    }
    else
    {
      ZString ErrorMessage, ErrorExp, ErrorDetail;
      ZMacroAssembler::ZError * Error;
      ZMemSize Pos, Pos2, i;

      Error = VoxelExtension->Status.Error;

      if (!Error)
      {
        ErrorMessage  = "ERROR IN FILE";
        ErrorExp = " ";
      }
      else if (Error->CantLoadFile)
      {
        ErrorMessage  = "UNABLE TO READ PROGRAM FILE";
        ErrorExp = " ";
        ErrorDetail << Error->FileName;
      }
      else
      {
        //ErrorMessage = Error->ErrorMessage;
        ErrorDetail<< "ERROR : " << Error->ErrorMessage << "\n";
        ErrorDetail<< "WHERE : AT LINE " << (ULong)Error->Offset_ErrorLine << "\n";
        ErrorDetail<< "FILE  : " << Error->FileName << "\n\n";
        ErrorDetail<< "...............................ERROR DETAIL.............................\n\n";

        Pos = Error->Offset_ErrorLine;
        for (i=0;i<4;i++) Error->FileText.SearchPredLineStart(Pos);
        ErrorDetail.Append_Mids(&Error->FileText, Pos, Error->Offset_ErrorLine-1);
        ErrorDetail.Append_Mids(&Error->FileText, Error->Offset_ErrorLine, Error->Offset_ErrorStart - 1);
        ErrorDetail<<"~01:FF0000:[";
        ErrorDetail.Append_Mids(&Error->FileText, Error->Offset_ErrorStart, Error->Offset_ErrorEnd - 1);
        ErrorDetail<<"]~01:FFFFFF:";
        Pos = Error->Offset_ErrorEnd;
        Error->FileText.SearchNextLineStart(Pos);
        ErrorDetail.Append_Mids(&Error->FileText, Error->Offset_ErrorEnd,Pos-1);
        Pos2 = Pos;
        for (i=0;i<4;i++) Error->FileText.SearchNextLineStart(Pos2);
        ErrorDetail.Append_Mids(&Error->FileText, Pos, Pos2);

        //ErrorDetail.SearchReplace(' ', '.');
      }

      GameEnv->GameWindow_Compilation_Result->SetError(ErrorMessage.String, ErrorExp.String, ErrorDetail.String);
      GameEnv->GameWindow_Compilation_Result->Show();
    }

    //VoxelExtension->CompileAndRunScript(ZVoxelExtension_Programmable::CONTEXT_PROGRAMCHANGE, floor(RobotProgramNum.GetValue()));
  }

  if (RobotProgramDebugShow.Is_MouseClick(true))
  {
    if (VoxelExtension->IsAllowedToRun)
    {
      //Hide();
      GameEnv->GuiManager.RemoveFrame(MainWindow);
      Flag_Shown = false;
      GameEnv->GameWindow_AsmDebug->SetVoxelExtension(VoxelExtension);
      GameEnv->GameWindow_AsmDebug->Show();
    }

    //VoxelExtension->CompileAndRunScript(ZVoxelExtension_Programmable::CONTEXT_PROGRAMCHANGE, floor(RobotProgramNum.GetValue()));
  }

  if (CloseBox.Is_MouseClick(true))
  {
    Hide();
  }

  if (Manual.Is_MouseClick(true))
  {
    ZViewDoc::ViewDocPage(1585,false);
  }

  if (RobotProgramNum.Is_MouseClick())
  {
    DisplayProgramName();
  }

  if (RobotProgramEdit.Is_MouseClick(true))
  {
    ZString FileName, FileSpec;

    FileName << (ULong)floor(RobotProgramNum.GetValue()) << ".asm";
    FileSpec = GameEnv->Path_UserScripts_Asm_1;
    FileSpec.AddToPath(FileName);

    // If the file does not exists, create it.

    if (!ZStream_File::File_IsExists(FileSpec.String))
    {
      ZString InFileSpec, Template;
      ZStream_File Stream;
      InFileSpec = GameEnv->Path_GameFiles;
      InFileSpec.AddToPath("Misc");
      InFileSpec.AddToPath("new_file_asm1.tmasm");
      Stream.SetFileName(InFileSpec.String);
      Stream.GetFileContent(Template);
      Stream.SetFileName(FileSpec.String);
      Stream.PutFileContent(Template);
    }

    ZEditCode::EditCode(&GameEnv->Settings_Hardware->Setting_Favorite_Editor,&FileSpec);
  }


  return (Res);
}