0024837: Visualization - revise design and implementation of connected Interactive...
[occt.git] / src / QABugs / QABugs_11.cxx
old mode 100755 (executable)
new mode 100644 (file)
index 65440a7..a7099d5
@@ -1,28 +1,23 @@
 // Created on: 2002-03-20
 // Created by: QA Admin
-// Copyright (c) 2002-2012 OPEN CASCADE SAS
+// Copyright (c) 2002-2014 OPEN CASCADE SAS
 //
-// The content of this file is subject to the Open CASCADE Technology Public
-// License Version 6.5 (the "License"). You may not use the content of this file
-// except in compliance with the License. Please obtain a copy of the License
-// at http://www.opencascade.org and read it completely before using this file.
+// This file is part of Open CASCADE Technology software library.
 //
-// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
-// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
 //
-// The Original Code and all software distributed under the License is
-// distributed on an "AS IS" basis, without warranty of any kind, and the
-// Initial Developer hereby disclaims all such warranties, including without
-// limitation, any warranties of merchantability, fitness for a particular
-// purpose or non-infringement. Please see the License for the specific terms
-// and conditions governing the rights and limitations under the License.
-
-
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
 
 #include <stdio.h>
 
 #include <QABugs.hxx>
 
+#include <Draw.hxx>
 #include <Draw_Interpretor.hxx>
 #include <DBRep.hxx>
 #include <DrawTrSurf.hxx>
@@ -93,8 +88,6 @@
 #include <BRepFeat_SplitShape.hxx>
 #include <BRepAlgoAPI_Section.hxx>
 
-#include <tcl.h>
-
 #if ! defined(WNT)
 extern ViewerTest_DoubleMapOfInteractiveAndName& GetMapOfAIS();
 #else
@@ -164,7 +157,7 @@ static Standard_Integer  OCC128 (Draw_Interpretor& di, Standard_Integer /*argc*/
 //
 //    Standard_Integer aNum = -1;
 //
-//    if(atoi(argv[2])) {
+//    if(Draw::Atoi(argv[2])) {
 //      aNum = anAISCtx->OpenLocalContext();
 //    }
 //
@@ -255,7 +248,7 @@ static int BUC60610(Draw_Interpretor& di, Standard_Integer argc, const char ** a
     printf("Usage: %s  iges_input [name]\n",argv[0]);
     return(1);
   }
-  Standard_Character *Ch;
+  Standard_Character *Ch = NULL;
 
   if(argc > 2) {
     Ch = new Standard_Character[strlen(argv[2])+3];
@@ -274,60 +267,13 @@ static int BUC60610(Draw_Interpretor& di, Standard_Integer argc, const char ** a
     di << "Num points = " << plin.NbPoints() << "\n";
     if(argc > 2) {
       i++;
-      sprintf(Ch,"%s_%i",argv[2],1);
+      Sprintf(Ch,"%s_%i",argv[2],1);
       DBRep::Set(Ch,E);
     }
   }
   return (1);
 }
 
-static Standard_Integer BUC60661(Draw_Interpretor& di, Standard_Integer argc, const char ** a)
-{
-  if(argc!=2)
-    {
-      di << "Usage : " << a[0] << " file.igs" << "\n";
-      return -1;
-    }
-
-  Handle(AIS_InteractiveContext) myContext = ViewerTest::GetAISContext();
-
-  if(myContext.IsNull()) {
-    di << "use 'vinit' command before " << a[0] << "\n";
-    return -1;
-  }
-
-  // MKV 30.03.05
-#if ((TCL_MAJOR_VERSION > 8) || ((TCL_MAJOR_VERSION == 8) && (TCL_MINOR_VERSION >= 4))) && !defined(USE_NON_CONST)
-  const Standard_Character *DD = Tcl_GetVar(di.Interp(),"Draw_DataDir",TCL_GLOBAL_ONLY);
-#else
-  Standard_Character *DD = Tcl_GetVar(di.Interp(),"Draw_DataDir",TCL_GLOBAL_ONLY);
-#endif
-
-  Standard_Character  *file1 = new Standard_Character [strlen(DD)+strlen(a[1])+2];
-  sprintf(file1,"%s/%s",DD,a[1]);
-
-  IGESToBRep_Reader reader;
-  Standard_Integer status = reader.LoadFile(file1);
-  if( !status ) {
-    IGESToBRep::Init();
-      reader.TransferRoots();
-      TopoDS_Shape shape = reader.OneShape();
-
-      Handle(AIS_Shape) importedShape = new AIS_Shape(shape);
-
-      Handle(V3d_Viewer) myPView = myContext->CurrentViewer();
-
-      if( ! myPView.IsNull() && (myPView->DefaultVisualization() == V3d_WIREFRAME) )
-       importedShape->SetDisplayMode(AIS_WireFrame);
-      else importedShape->SetDisplayMode(AIS_Shaded);
-      myContext->Display(importedShape);
-    }
-
-  printf("\n End of my  IGES to 3D-viewer *****************>\n");
-  return 0;
-}
-
-
 //====================================================
 //
 // Following code is inserted from
@@ -360,7 +306,7 @@ static int OCC105(Draw_Interpretor& di, Standard_Integer argc, const char ** arg
   }
 //  TopoDS_Wire myTopoDSWire = TopoDS::Wire(DBRep::Get("aa.brep"));
   TopoDS_Wire myTopoDSWire = TopoDS::Wire(DBRep::Get(argv[1]));
-  Standard_Real l = 0.5; //atof(argv[2]);
+  Standard_Real l = 0.5; //Draw::Atof(argv[2]);
   // Find the first vertex of the wire
   BRepTools_WireExplorer wire_exp(myTopoDSWire);
   TopoDS_Vertex vlast;
@@ -445,10 +391,10 @@ static int pipe_OCC9 (Draw_Interpretor& di,
   GeomFill_Pipe aPipe(Handle(Geom_Curve)::DownCast( aCurveSeq(1) ),
                      Handle(Geom_Curve)::DownCast( aCurveSeq(2) ),
                      Handle(Geom_Curve)::DownCast( aCurveSeq(3) ),
-                     atof (a[5]) );
+                     Draw::Atof (a[5]) );
 
   if (n == 7) {
-    aPipe.Perform(atof (a[6]), Standard_True);
+    aPipe.Perform(Draw::Atof (a[6]), Standard_True);
   } else {
     aPipe.Perform(Standard_True/*, Standard_True*/);
   }
@@ -530,7 +476,7 @@ Standard_Integer  OCC157(Draw_Interpretor& di,
     di << "Invalid input shape"<< "\n";
     return 1;
   }
-  Standard_Real toler = atof(a[3]);
+  Standard_Real toler = Draw::Atof(a[3]);
   TopoDS_Wire aWire = TopoDS::Wire(inputShape);
   BRepLib_FindSurface FS(aWire, toler, Standard_True);
   if(FS.Found()) {
@@ -829,17 +775,32 @@ static Standard_Integer OCC381_Save (Draw_Interpretor& di, Standard_Integer nb,
   PCDM_StoreStatus theStatus = A->Save(D, theStatusMessage);
   if (theStatus != PCDM_SS_OK ) {
     switch ( theStatus ) {
-    case PCDM_SS_DriverFailure: {
-      di << " Could not store , no driver found to make it " <<"\n" ;
-      break ;
-    }
-    case PCDM_SS_WriteFailure: {
-      di << " Write access failure " << "\n" ;
-      break;
-    }
-    case PCDM_SS_Failure: {
-      di << " Write failure " << "\n" ;
-    }
+      case PCDM_SS_DriverFailure: {
+        di << "Error saving document: Could not store , no driver found to make it" << "\n";
+        break ;
+      }
+      case PCDM_SS_WriteFailure: {
+        di << "Error saving document: Write access failure" << "\n";
+        break;
+      }
+      case PCDM_SS_Failure: {
+        di << "Error saving document: Write failure" << "\n" ;
+        break;
+      }
+      case PCDM_SS_Doc_IsNull: {
+        di << "Error saving document: No document to save" << "\n";
+        break ;
+      }
+      case PCDM_SS_No_Obj: {
+        di << "Error saving document: No objects written" << "\n";
+        break;
+      }
+      case PCDM_SS_Info_Section_Error: {
+        di << "Error saving document: Write info section failure" << "\n" ;
+        break;
+      }
+      default:
+          break;
     }
     return 1;
   }
@@ -864,17 +825,32 @@ static Standard_Integer OCC381_SaveAs (Draw_Interpretor& di, Standard_Integer nb
   PCDM_StoreStatus theStatus = A->SaveAs(D,path, theStatusMessage);
   if (theStatus != PCDM_SS_OK ) {
     switch ( theStatus ) {
-    case PCDM_SS_DriverFailure: {
-      di << " Could not store , no driver found to make it " <<"\n" ;
-      break ;
-    }
-    case PCDM_SS_WriteFailure: {
-      di << " Write access failure " << "\n" ;
-      break;
-    }
-    case PCDM_SS_Failure: {
-      di << " Write failure " << "\n" ;
-    }
+      case PCDM_SS_DriverFailure: {
+        di << "Error saving document: Could not store , no driver found to make it" << "\n";
+        break ;
+      }
+      case PCDM_SS_WriteFailure: {
+        di << "Error saving document: Write access failure" << "\n";
+        break;
+      }
+      case PCDM_SS_Failure: {
+        di << "Error saving document: Write failure" << "\n" ;
+        break;
+      }
+      case PCDM_SS_Doc_IsNull: {
+        di << "Error saving document: No document to save" << "\n";
+        break ;
+      }
+      case PCDM_SS_No_Obj: {
+        di << "Error saving document: No objects written" << "\n";
+        break;
+      }
+      case PCDM_SS_Info_Section_Error: {
+        di << "Error saving document: Write info section failure" << "\n" ;
+        break;
+      }
+      default:
+          break;
     }
     return 1;
   }
@@ -884,76 +860,47 @@ static Standard_Integer OCC381_SaveAs (Draw_Interpretor& di, Standard_Integer nb
 
 #include <BRepClass3d_SolidClassifier.hxx>
 
-Standard_Integer OCC299bug (Draw_Interpretor& di,
-                           Standard_Integer n,
-                           const char ** a)
+Standard_Integer OCC299bug (Draw_Interpretor& theDi,
+                            Standard_Integer  theArgNb,
+                            const char**      theArgVec)
 {
-  char sbf[512];
-
-  if (n < 3) {
-    di << "Usage : " << a[0] << " Solid Point [Tolerance=1.e-7]" << "\n";
+  if (theArgNb < 3)
+  {
+    theDi << "Usage : " << theArgVec[0] << " Solid Point [Tolerance=1.e-7]\n";
     return -1;
   }
 
-  TopoDS_Shape aS = DBRep::Get(a[1]);
-  if (aS.IsNull()) {
-    sprintf(sbf, " Null Shape is not allowed here\n");
-    di<<sbf;
+  TopoDS_Shape aS = DBRep::Get (theArgVec[1]);
+  if (aS.IsNull())
+  {
+    theDi << " Null Shape is not allowed here\n";
     return 1;
   }
-
-  if (aS.ShapeType()!=TopAbs_SOLID) {
-    sprintf(sbf, " Shape type must be SOLID\n");
-    di<<sbf;
+  else if (aS.ShapeType() != TopAbs_SOLID)
+  {
+    theDi << " Shape type must be SOLID\n";
     return 1;
   }
-  //
-  Standard_Real aTol=1.e-7;
-  TCollection_AsciiString sIN("IN"), sOUT("OUT of"), sON("ON"), sUNKNOWN("UNKNOWN");
-  TopAbs_State aState = TopAbs_UNKNOWN;
-  gp_Pnt aP(8., 9., 10.);
-
-  if (!DrawTrSurf::GetPoint(a[2], aP) ) {
-    sprintf(sbf, " Null Point is not allowed here\n");
-    di<<sbf;
+
+  gp_Pnt aP (8., 9., 10.);
+  if (!DrawTrSurf::GetPoint (theArgVec[2], aP))
+  {
+    theDi << " Null Point is not allowed here\n";
     return 1;
   }
+  const Standard_Real aTol = (theArgNb == 4) ? Draw::Atof (theArgVec[3]) : 1.e-7;
 
-  aTol=1.e-7;
-  if (n==4) {
-    aTol=atof(a[3]);
-  }
-  //
-  BRepClass3d_SolidClassifier aSC(aS);
-  aSC.Perform(aP,aTol);
-  //
-  aState = aSC.State();
-  //
-  sprintf(sbf, "The point is "); di<<sbf;
-  //
-  switch (aState) {
-  case TopAbs_IN:
-    sprintf(sbf, sIN.ToCString());
-    break;
-  case TopAbs_OUT:
-    sprintf(sbf, sOUT.ToCString());
-    break;
-  case TopAbs_ON:
-    sprintf(sbf, sON.ToCString());
-    break;
-  case TopAbs_UNKNOWN:
-    sprintf(sbf, sUNKNOWN.ToCString());
-    break;
-  default:
-    sprintf(sbf, sUNKNOWN.ToCString());
-    break;
-  }
-  di<<sbf;
-       //
-  sprintf(sbf, " shape\n");
-  di<<sbf;
+  BRepClass3d_SolidClassifier aSC (aS);
+  aSC.Perform (aP, aTol);
 
-  return 0;
+  switch (aSC.State())
+  {
+    case TopAbs_IN:      theDi << "The point is IN shape\n";      return 0;
+    case TopAbs_OUT:     theDi << "The point is OUT of shape\n";  return 0;
+    case TopAbs_ON:      theDi << "The point is ON shape\n";      return 0;
+    case TopAbs_UNKNOWN:
+    default:             theDi << "The point is UNKNOWN shape\n"; return 0;
+  }
 }
 
 #include <OSD_Process.hxx>
@@ -1006,7 +953,7 @@ static Standard_Integer OCC277bug (Draw_Interpretor& di, Standard_Integer nb, co
   }
   Standard_Boolean IsBRepAlgoAPI = Standard_True;
   if (nb == 2) {
-    Standard_Integer IsB = atoi(a[1]);
+    Standard_Integer IsB = Draw::Atoi(a[1]);
     if (IsB != 1) {
       IsBRepAlgoAPI = Standard_False;
     }
@@ -1068,9 +1015,9 @@ static Standard_Integer OCC333bug (Draw_Interpretor& di, Standard_Integer n, con
   Standard_Real aDistDomain = 0.0;
   Standard_Integer k = 3;
   if(k < n)
-    aTol = atof(a[k++]);
+    aTol = Draw::Atof(a[k++]);
   if(k < n)
-    aDistDomain = atof(a[k++]);
+    aDistDomain = Draw::Atof(a[k++]);
 
   ShapeAnalysis_Edge sae;
   if(sae.CheckOverlapping(e1,e2,aTol,aDistDomain)) {
@@ -1203,9 +1150,9 @@ static Standard_Integer OCC377 (Draw_Interpretor& di, Standard_Integer argc, con
 
     // 2. Initialize parameters
     gp_Pnt2d p2d;
-    p2d.SetX ( atof(argv[2]) );
-    p2d.SetY ( atof(argv[3]) );
-    Standard_Real precuv = atof (argv[4] );
+    p2d.SetX ( Draw::Atof(argv[2]) );
+    p2d.SetY ( Draw::Atof(argv[3]) );
+    Standard_Real precuv = Draw::Atof (argv[4] );
 
     // 3. Read shape
     BRep_Builder B;
@@ -1401,7 +1348,7 @@ static Standard_Integer OCC369(Draw_Interpretor& di, Standard_Integer argc, cons
     if(aShape.IsNull()) {di << "OCC369 FAULTY. Entry shape is NULL \n"; return 0;}
 
     // 3. Build mesh
-    BRepMesh_IncrementalMesh aMesh(aShape, 0.2, Standard_True, M_PI/6);
+    BRepMesh_IncrementalMesh aMesh(aShape, 0.2, Standard_True, M_PI / 6);
 
   }
   catch (Standard_Failure) {di << "OCC369 Exception \n" ;return 0;}
@@ -1418,14 +1365,14 @@ static Standard_Integer OCC524 (Draw_Interpretor& di, Standard_Integer argc, con
     di<<"Usage : " << argv[0] << " LowerVector UpperVector InitialValueVector LowerRowMatrix UpperRowMatrix LowerColMatrix UpperColMatrix InitialValueMatrix\n";
     return 1;
   }
-  Standard_Integer LowerVector = atoi(argv[1]);
-  Standard_Integer UpperVector = atoi(argv[2]);
-  Standard_Real InitialValueVector = atof(argv[3]);
-  Standard_Integer LowerRowMatrix = atoi(argv[4]);
-  Standard_Integer UpperRowMatrix = atoi(argv[5]);
-  Standard_Integer LowerColMatrix = atoi(argv[6]);
-  Standard_Integer UpperColMatrix = atoi(argv[7]);
-  Standard_Real InitialValueMatrix = atof(argv[8]);
+  Standard_Integer LowerVector = Draw::Atoi(argv[1]);
+  Standard_Integer UpperVector = Draw::Atoi(argv[2]);
+  Standard_Real InitialValueVector = Draw::Atof(argv[3]);
+  Standard_Integer LowerRowMatrix = Draw::Atoi(argv[4]);
+  Standard_Integer UpperRowMatrix = Draw::Atoi(argv[5]);
+  Standard_Integer LowerColMatrix = Draw::Atoi(argv[6]);
+  Standard_Integer UpperColMatrix = Draw::Atoi(argv[7]);
+  Standard_Real InitialValueMatrix = Draw::Atof(argv[8]);
 
   math_Vector Vector1(LowerVector, UpperVector);
   math_Vector Vector2(LowerVector, UpperVector);
@@ -1447,6 +1394,9 @@ static Standard_Integer OCC524 (Draw_Interpretor& di, Standard_Integer argc, con
   di << aSStream1;
   di<<"\n";
 
+  if (Matrix.RowNumber() > 1) {
+    Matrix(Matrix.LowerRow() + 1, Matrix.LowerCol()) += 1.;
+  }
   Vector2.TMultiply(Vector, Matrix);
 
   //Vector2.Dump(cout);
@@ -1478,50 +1428,6 @@ static Standard_Integer OCC525(Draw_Interpretor& di, Standard_Integer /*argc*/,
   return 0;
 }
 
-#include <Viewer2dTest.hxx>
-#include <Viewer2dTest_DoubleMapOfInteractiveAndName.hxx>
-
-#include <AIS2D_InteractiveContext.hxx>
-#include <V2d_View.hxx>
-#include <AIS2D_InteractiveObject.hxx>
-#include <TColStd_HSequenceOfInteger.hxx>
-
-#if ! defined(WNT)
-extern Viewer2dTest_DoubleMapOfInteractiveAndName& GetMapOfAIS2D();
-#else
-Standard_EXPORT Viewer2dTest_DoubleMapOfInteractiveAndName& GetMapOfAIS2D();
-#endif
-
-//=======================================================================
-//function :  OCC543
-//purpose  :
-//=======================================================================
-static Standard_Integer OCC543 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
-{
-  Handle(AIS2D_InteractiveContext) aContext = Viewer2dTest::GetAIS2DContext();
-  if(aContext.IsNull()) {
-    di << "ERROR: Use 'v2dinit' command before " << argv[0] << "\n";
-    return -1;
-  }
-  if(argc != 2){
-    di<<"Usage : " << argv[0] << " name\n";
-    return -1;
-  }
-  Handle(V2d_View) V = Viewer2dTest::CurrentView();
-
-  TCollection_AsciiString name = argv[1];
-
-  if (!GetMapOfAIS2D().IsBound2(name)) {
-//    di << "There is not an object with name " << name.ToCString() << "\n";
-//    return -1;
-  }
-
-  Handle(AIS2D_InteractiveObject) aShape = GetMapOfAIS2D().Find2(name);
-  Standard_Integer PickedIndex = aShape->PickedIndex();
-  di << "PickedIndex = " << PickedIndex << "\n";
-  return 0;
-}
-
 #include <BRepPrimAPI_MakeWedge.hxx>
 #include <gce_MakeRotation.hxx>
 #include <gce_MakeTranslation.hxx>
@@ -1547,7 +1453,7 @@ static Standard_Integer OCC578 (Draw_Interpretor& di, Standard_Integer argc, con
   }
   Standard_Boolean IsBRepAlgoAPI = Standard_True;
   if (argc == 5) {
-    Standard_Integer IsB = atoi(argv[4]);
+    Standard_Integer IsB = Draw::Atoi(argv[4]);
     if (IsB != 1) {
       IsBRepAlgoAPI = Standard_False;
 //      di << "Error: There is not BRepAlgo_Fuse class" << "\n";
@@ -1658,34 +1564,6 @@ static Standard_Integer OCC578 (Draw_Interpretor& di, Standard_Integer argc, con
   return 0;
 }
 
-#include <Graphic2d_DisplayList.hxx>
-#include <Graphic2d_View.hxx>
-
-//=======================================================================
-//function :  OCC627
-//purpose  :
-//=======================================================================
-static Standard_Integer OCC627 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
-{
-  Handle(AIS2D_InteractiveContext) aContext = Viewer2dTest::GetAIS2DContext();
-  if(aContext.IsNull()) {
-    di << "ERROR: Use 'v2dinit' command before " << argv[0] << "\n";
-    return -1;
-  }
-  if(argc != 1){
-    di<<"Usage : " << argv[0] << "\n";
-    return -1;
-  }
-
-  Handle(V2d_View) V = Viewer2dTest::CurrentView();
-  Handle(Graphic2d_View) View = V->View();
-  Handle(Graphic2d_DisplayList) DisplayList = View->DisplayList();
-  Standard_Integer Length = DisplayList->Length();
-  di << "Length = " << Length << "\n";
-
-  return 0;
-}
-
 #include <Standard_GUID.hxx>
 //=======================================================================
 //function :  OCC669
@@ -1781,7 +1659,7 @@ static Standard_Integer OCC708 (Draw_Interpretor& di, Standard_Integer argc, con
     return 1;
   }
   
-  Standard_Boolean updateviewer = Standard_True, PutInCollector = Standard_True;
+  Standard_Boolean updateviewer = Standard_True;
 
   ViewerTest_DoubleMapOfInteractiveAndName& aMap = GetMapOfAIS();
   
@@ -1797,11 +1675,11 @@ static Standard_Integer OCC708 (Draw_Interpretor& di, Standard_Integer argc, con
       di << argv[1] << " : No interactive object" << "\n";
       return 1;
     } 
-    AISObj->UnsetTransformation();
+    AISObj->ResetTransformation();
     if (!aContext->HasOpenedContext()) {
       aContext->OpenLocalContext();
     }
-    aContext->Erase(AISObj, updateviewer, PutInCollector);
+    aContext->Erase(AISObj, updateviewer);
     aContext->UpdateCurrentViewer();
     aContext->Display(AISObj, updateviewer);
     aContext->UpdateCurrentViewer();
@@ -1841,10 +1719,10 @@ static Standard_Integer OCC867(Draw_Interpretor& di, Standard_Integer argc, cons
   gp_Pnt aPoint3d;        
   DrawTrSurf::GetPoint(argv[1],aPoint3d);
   Handle (Geom_Surface) aSurface=DrawTrSurf::GetSurface(argv[2]);
-  Standard_Real             Umin=atof(argv[3]);
-  Standard_Real             Usup=atof(argv[4]);
-  Standard_Real             Vmin=atof(argv[5]);
-  Standard_Real             Vsup=atof(argv[6]);
+  Standard_Real             Umin=Draw::Atof(argv[3]);
+  Standard_Real             Usup=Draw::Atof(argv[4]);
+  Standard_Real             Vmin=Draw::Atof(argv[5]);
+  Standard_Real             Vsup=Draw::Atof(argv[6]);
  
   if (aSurface.IsNull()) {
     di << argv[2] << " Null surface \n" ;
@@ -1971,7 +1849,7 @@ static Standard_Integer OCC1029_AISTransparency (Draw_Interpretor& di,
     Handle(TPrsStd_AISPresentation) prs;
     if(L.FindAttribute( TPrsStd_AISPresentation::GetID(), prs) ) {   
       if( nb == 4 ) {
-       prs->SetTransparency(atof(arg[3]));
+       prs->SetTransparency(Draw::Atof(arg[3]));
        TPrsStd_AISViewer::Update(L);
       }
       else {
@@ -2005,7 +1883,7 @@ static Standard_Integer OCC1030_AISColor (Draw_Interpretor& di,
     Handle(TPrsStd_AISPresentation) prs;
     if(L.FindAttribute( TPrsStd_AISPresentation::GetID(), prs) ) {   
       if( nb == 4 ) {
-       prs->SetColor((Quantity_NameOfColor)atoi(arg[3]));
+       prs->SetColor((Quantity_NameOfColor)Draw::Atoi(arg[3]));
        TPrsStd_AISViewer::Update(L);
       }
       else
@@ -2038,7 +1916,7 @@ static Standard_Integer OCC1031_AISMaterial (Draw_Interpretor& di,
     Handle(TPrsStd_AISPresentation) prs;
     if(L.FindAttribute( TPrsStd_AISPresentation::GetID(), prs) ) {   
       if( nb == 4 ) {
-       prs->SetMaterial((Graphic3d_NameOfMaterial)atoi(arg[3]));
+       prs->SetMaterial((Graphic3d_NameOfMaterial)Draw::Atoi(arg[3]));
        TPrsStd_AISViewer::Update(L);
       }
       else {
@@ -2072,7 +1950,7 @@ static Standard_Integer OCC1032_AISWidth (Draw_Interpretor& di,
     Handle(TPrsStd_AISPresentation) prs;
     if(L.FindAttribute( TPrsStd_AISPresentation::GetID(), prs) ) {   
       if( nb == 4 ) {
-       prs->SetWidth(atof(arg[3]));
+       prs->SetWidth(Draw::Atof(arg[3]));
        TPrsStd_AISViewer::Update(L);
       }
       else {
@@ -2106,7 +1984,7 @@ static Standard_Integer OCC1033_AISMode (Draw_Interpretor& di,
     Handle(TPrsStd_AISPresentation) prs;
     if(L.FindAttribute( TPrsStd_AISPresentation::GetID(), prs) ) {   
       if( nb == 4 ) {
-       prs->SetMode(atoi(arg[3]));
+       prs->SetMode(Draw::Atoi(arg[3]));
        TPrsStd_AISViewer::Update(L);
       }
       else {
@@ -2140,7 +2018,7 @@ static Standard_Integer OCC1034_AISSelectionMode (Draw_Interpretor& di,
     Handle(TPrsStd_AISPresentation) prs;
     if(L.FindAttribute( TPrsStd_AISPresentation::GetID(), prs) ) {   
       if( nb == 4 ) {
-       prs->SetSelectionMode(atoi(arg[3]));
+       prs->SetSelectionMode(Draw::Atoi(arg[3]));
        TPrsStd_AISViewer::Update(L);
       }
       else {
@@ -2171,7 +2049,7 @@ static Standard_Integer OCC1487 (Draw_Interpretor& di, Standard_Integer argc, co
   }
   Standard_Boolean IsBRepAlgoAPI = Standard_True;
   if (argc == 6) {
-    Standard_Integer IsB = atoi(argv[5]);
+    Standard_Integer IsB = Draw::Atoi(argv[5]);
     if (IsB != 1) {
       IsBRepAlgoAPI = Standard_False;
 //      di << "Error: There is not BRepAlgo_Cut class" << "\n";
@@ -2179,7 +2057,7 @@ static Standard_Integer OCC1487 (Draw_Interpretor& di, Standard_Integer argc, co
     }
   }
 
-  Standard_Integer CaseNumber = atoi(argv[1]);
+  Standard_Integer CaseNumber = Draw::Atoi(argv[1]);
 
   //BRepPrimAPI_MakeCylinder o_mc1 (gp_Ax2 (gp_Pnt(0,-50,140), gp_Dir(1,0,0)), 50,1000);
   gp_Dir myDir(1,0,0);
@@ -2258,7 +2136,7 @@ TopoDS_Shape OCC1077_boolbl(BRepAlgoAPI_BooleanOperation& aBoolenaOperation,cons
   TopoDS_Shape ShapeCut = aBoolenaOperation.Shape();
 
 //#ifdef OCC40 
-//  Handle_TopOpeBRepBuild_HBuilder build = aBoolenaOperation.Builder();
+//  Handle(TopOpeBRepBuild_HBuilder) build = aBoolenaOperation.Builder();
 //#endif 
   TopTools_ListIteratorOfListOfShape its;
 
@@ -2324,7 +2202,7 @@ TopoDS_Shape OCC1077_Bug()
   TopoDS_Shape theCylinder3 = BRepPrimAPI_MakeCylinder(gp_Ax2(gp_Pnt(0, - 10, 0),
                                                              gp_Dir(0, 1, 0)), 3, 20).Shape();
   TopoDS_Shape theTmp1 = OCC1077_cut_blend(theCommon,theCylinder1,0.7);
-  Handle_ShapeFix_Shape fixer = new ShapeFix_Shape(theTmp1);
+  Handle(ShapeFix_Shape) fixer = new ShapeFix_Shape(theTmp1);
   fixer->Perform();
   theTmp1 = fixer->Shape();
   TopoDS_Shape theTmp2 = OCC1077_cut_blend(theTmp1,theCylinder2,0.7);
@@ -2378,7 +2256,7 @@ static Standard_Integer OCC5739_UniAbs (Draw_Interpretor& di, Standard_Integer a
     }
     adapCurve = new BRepAdaptor_CompCurve(TopoDS::Wire(wire));
   }
-  double step = atof(argv[3]);
+  double step = Draw::Atof(argv[3]);
   GCPnts_UniformAbscissa aUni(*adapCurve, step);
   int res;
   if (!aUni.IsDone())
@@ -2394,7 +2272,7 @@ static Standard_Integer OCC5739_UniAbs (Draw_Interpretor& di, Standard_Integer a
       double par = aUni.Parameter(i+1);
       gp_Pnt p = adapCurve->Value(par);
       char n[20], *pname=n;
-      sprintf(n,"%s_%d",name,i+1);
+      Sprintf(n,"%s_%d",name,i+1);
       DrawTrSurf::Set(pname,p);
       di<<pname<<" ";
     }
@@ -2412,8 +2290,8 @@ static Standard_Integer OCC6046 (Draw_Interpretor& di, Standard_Integer argc, co
     return 1;
   }
 
-  Standard_Integer nb = atoi(argv[1]);
-  Standard_Integer sz = atoi(argv[2]);
+  Standard_Integer nb = Draw::Atoi(argv[1]);
+  Standard_Integer sz = Draw::Atoi(argv[2]);
   Standard_Real val = 10;
   math_Vector **pv = new math_Vector *[nb];
 
@@ -2479,28 +2357,16 @@ static Standard_Integer OCC5698 (Draw_Interpretor& di, Standard_Integer argc, co
   return 0;
 }
 
-static char sarr[2000];
-static int si=1;
-static int StackOverflow(int i = -1)
+#ifdef WNT
+static int StackOverflow (int i = -1)
 {
   char arr[2000];
-  if (si == 1) {
-    si = 0;
-    memcpy(arr,sarr,2000);
-    arr[1999]=0;
-    int n = strlen(arr), s=0;
-    while (n--)
-      s += StackOverflow(i-1);
-    return i + s + StackOverflow(i-1);
-  }
-  else if (i != 0) {
-    return i + StackOverflow(i-1);
-  }
-  si = 1;
+  memset (arr, 0, sizeof(arr));
+  if (i < 0)
+    StackOverflow(i-1);
   return i;
 }
 
-#ifdef WNT
 // this code does not work with optimize mode on Windows
 #pragma optimize( "", off )
 #endif
@@ -2508,7 +2374,7 @@ static Standard_Integer OCC6143 (Draw_Interpretor& di, Standard_Integer argc, co
 {
   if (argc != 1)
     {
-      di << "Usage : " << argv[0] << "\n";
+      cout << "Usage : " << argv[0] << "\n";
       return 1;
     }
   Standard_Boolean Succes;
@@ -2519,6 +2385,7 @@ static Standard_Integer OCC6143 (Draw_Interpretor& di, Standard_Integer argc, co
   {//==== Test Divide ByZero (Integer) ========================================
     try{
       OCC_CATCH_SIGNALS
+      cout << "(Integer) Divide By Zero..." << endl;
       di << "(Integer) Divide By Zero...";
       //cout.flush();
       di << "\n";
@@ -2554,6 +2421,7 @@ static Standard_Integer OCC6143 (Draw_Interpretor& di, Standard_Integer argc, co
   {//==== Test Divide ByZero (Real) ===========================================
     try{
       OCC_CATCH_SIGNALS
+      cout << "(Real) Divide By Zero..." << endl;
       di << "(Real) Divide By Zero...";
       //cout.flush();
       di << "\n";
@@ -2562,13 +2430,13 @@ static Standard_Integer OCC6143 (Draw_Interpretor& di, Standard_Integer argc, co
       di << " 4.0 / 0.0 = " << res << "  Does not Caught... KO"<< "\n";
       Succes = Standard_False;
     }
-#if defined(SOLARIS) || defined(WNT)
-    catch(Standard_DivideByZero)
-#else
-    catch(Standard_NumericError)
-#endif
+    catch(Standard_DivideByZero) // Solaris, Windows w/o SSE2
     {
-      di << " Ok"<< "\n";
+      di << " Ok" << "\n";
+    }
+    catch(Standard_NumericError) // Linux, Windows with SSE2
+    {
+      di << " Ok" << "\n";
     }
     catch(Standard_Failure) {
       //cout << " Caught (" << Standard_Failure::Caught() << ")... KO" << endl;
@@ -2582,6 +2450,7 @@ static Standard_Integer OCC6143 (Draw_Interpretor& di, Standard_Integer argc, co
   {//==== Test Overflow (Integer) =============================================
     try{
       OCC_CATCH_SIGNALS
+      cout << "(Integer) Overflow..." << endl;
       di << "(Integer) Overflow...";
       //cout.flush();
       di << "\n";
@@ -2606,24 +2475,25 @@ static Standard_Integer OCC6143 (Draw_Interpretor& di, Standard_Integer argc, co
   {//==== Test Overflow (Real) ================================================ 
     try{
       OCC_CATCH_SIGNALS
+      cout << "(Real) Overflow..." << endl;
       di << "(Real) Overflow...";
       //cout.flush();
       di << "\n";
       Standard_Real res, r=RealLast();
       res = r * r;
       
-      sin(1.); //this function tests FPU flags and raises signal (tested on LINUX).
+      (void)sin(1.); //this function tests FPU flags and raises signal (tested on LINUX).
 
       di << "-- "<<res<<"="<<r<<"*"<<r<<"   Does not Caught... KO"<< "\n";
       Succes = Standard_False;
     }
-#if defined(SOLARIS) || defined(WNT)
-    catch(Standard_Overflow)
-#else
-    catch(Standard_NumericError)
-#endif
+    catch(Standard_Overflow) // Solaris, Windows w/o SSE2
     {
-      di << " Ok"<< "\n";
+      di << " Ok" << "\n";
+    }
+    catch(Standard_NumericError) // Linux, Windows with SSE2
+    {
+      di << " Ok" << "\n";
     }
     catch(Standard_Failure) {
       //cout << " Caught (" << Standard_Failure::Caught() << ")... KO" << endl;
@@ -2637,6 +2507,7 @@ static Standard_Integer OCC6143 (Draw_Interpretor& di, Standard_Integer argc, co
   {//==== Test Underflow (Real) ===============================================
     try{
       OCC_CATCH_SIGNALS
+      cout << "(Real) Underflow" << endl; // to have message in log even if process crashed
       di << "(Real) Underflow";
       //cout.flush();
       di << "\n";
@@ -2647,13 +2518,13 @@ static Standard_Integer OCC6143 (Draw_Interpretor& di, Standard_Integer argc, co
       //++++ Succes = Standard_False;
       di<<" -- "<<res<<"="<<r<<"*"<<r<<"   Does not Caught... (But) Ok"<<"\n";
     }
-#if defined(SOLARIS) || defined(WNT)
-    catch(Standard_Underflow)
-#else
-    catch(Standard_NumericError)
-#endif
+    catch(Standard_Underflow) // could be on Solaris, Windows w/o SSE2
     {
-      di << " Ok"<< "\n";
+      di << " Ok" << "\n";
+    }
+    catch(Standard_NumericError) // could be on Linux, Windows with SSE2
+    {
+      di << " Ok" << "\n";
     }
     catch(Standard_Failure) {
       //cout << " Caught (" << Standard_Failure::Caught() << ")... KO" << endl;
@@ -2667,6 +2538,7 @@ static Standard_Integer OCC6143 (Draw_Interpretor& di, Standard_Integer argc, co
   {//==== Test Invalid Operation (Real) ===============================================
     try{
       OCC_CATCH_SIGNALS
+      cout << "(Real) Invalid Operation..." << endl;
       di << "(Real) Invalid Operation...";
       //cout.flush();
       di << "\n";
@@ -2690,6 +2562,7 @@ static Standard_Integer OCC6143 (Draw_Interpretor& di, Standard_Integer argc, co
   {//==== Test Access Violation ===============================================
     try {
       OCC_CATCH_SIGNALS
+      cout << "Segmentation Fault..." << endl;
       di << "Segmentation Fault...";
       //cout.flush();
       di << "\n";
@@ -2718,6 +2591,7 @@ static Standard_Integer OCC6143 (Draw_Interpretor& di, Standard_Integer argc, co
   {//==== Test Stack Overflow ===============================================
     try {
       OCC_CATCH_SIGNALS
+      cout << "Stack Overflow..." << endl;
       di << "Stack Overflow...";
       //cout.flush();
       di << "\n";
@@ -2773,18 +2647,19 @@ static Standard_Integer OCC7141 (Draw_Interpretor& di, Standard_Integer argc, co
 {
   int nCount = 10;
 
-  if (argc > 2)
+  if (argc > 3)
     {
-      di << "Usage : " << argv[0] << " [nCount]" << "\n";
+      di << "Usage : " << argv[0] << " [nCount] path" << "\n";
       return 1;
     }
 
-  if (argc > 1)
-    nCount = atoi(argv[1]);
+  if (argc > 2)
+    nCount = Draw::Atoi(argv[1]);
+    TCollection_AsciiString aFilePath = argv[2];
   STEPCAFControl_Writer writer;
-  Handle_TDocStd_Document document;
+  Handle(TDocStd_Document) document;
   document = new TDocStd_Document("Pace Test-StepExporter-");
-  Handle_XCAFDoc_ShapeTool shapeTool;
+  Handle(XCAFDoc_ShapeTool) shapeTool;
   shapeTool = XCAFDoc_DocumentTool::ShapeTool(document->Main());
   shapeTool->AddShape(AddTestStructure(nCount), Standard_True);
   STEPControl_StepModelType mode = STEPControl_AsIs;
@@ -2795,8 +2670,7 @@ static Standard_Integer OCC7141 (Draw_Interpretor& di, Standard_Integer argc, co
   try {
     OCC_CATCH_SIGNALS
     if( writer.Transfer(document, mode)) {
-      IFSelect_ReturnStatus stat =
-       writer.Write("TestExportStructure.step");
+       writer.Write(aFilePath.ToCString());
     }
   }
   catch(OSD_Exception_STACK_OVERFLOW) {
@@ -2940,8 +2814,8 @@ static Standard_Integer OCC10138 (Draw_Interpretor& di, Standard_Integer argc, c
     return 1;
   }
 
-  Standard_Integer LOWER = atoi(argv[1]);
-  Standard_Integer UPPER = atoi(argv[2]);
+  Standard_Integer LOWER = Draw::Atoi(argv[1]);
+  Standard_Integer UPPER = Draw::Atoi(argv[2]);
 
   //! 0. Create an empty document with several test labels
   Handle(TDocStd_Document) doc = new TDocStd_Document("XmlOcaf");
@@ -3154,8 +3028,8 @@ static Standard_Integer OCC7639 (Draw_Interpretor& di, Standard_Integer argc, co
   NCollection_Vector<int> vec;
   for (i = 0; i < argc - 1; i++) {
     i++;
-    aValue = atoi(argv[i]);
-    aPosition = atoi(argv[i+1]);
+    aValue = Draw::Atoi(argv[i]);
+    aPosition = Draw::Atoi(argv[i+1]);
     vec.SetValue(aValue, aPosition);
   }
   NCollection_Vector<int>::Iterator it(vec);
@@ -3256,18 +3130,6 @@ static Standard_Integer OCC7068 (Draw_Interpretor& di, Standard_Integer argc, co
     }
   }
 
-  // ObjectsInCollector
-  AIS_ListOfInteractive ListOfIO_2;
-  AISContext->ObjectsInCollector(ListOfIO_2);
-  di<< "ObjectsInCollector = " << ListOfIO_2.Extent() <<"\n";
-  if (!ListOfIO_2.IsEmpty() ) {
-    AIS_ListIteratorOfListOfInteractive iter;
-    for (iter.Initialize(ListOfIO_2); iter.More() ; iter.Next() ) {
-      Handle(AIS_InteractiveObject) aIO=iter.Value();
-      di<< GetMapOfAIS().Find1(aIO).ToCString() <<"\n";
-    }
-  }
-
   return 0;
 }
 
@@ -3282,7 +3144,7 @@ static Standard_Integer OCC11457 (Draw_Interpretor& di, Standard_Integer argc, c
   BRepBuilderAPI_MakePolygon W;
   j = 3;
   for (i = 1; i <= np; i ++) {
-    W.Add(gp_Pnt(atof(argv[j]),atof(argv[j+1]),atof(argv[j+2])));
+    W.Add(gp_Pnt(Draw::Atof(argv[j]),Draw::Atof(argv[j+1]),Draw::Atof(argv[j+2])));
     j += 3;
   }
   W.Close();
@@ -3300,12 +3162,12 @@ static Standard_Integer OCC13963 (Draw_Interpretor& di, Standard_Integer argc, c
   gp_Ax2 aPln (gp_Pnt(0.,0.,0.),
                gp_Dir(1., -1., 0.));
   gp_GTrsf aTrf;
-  aTrf.SetAffinity (aPln, atof(argv[4]));
-  gp_XYZ aOrigin (atof(argv[1]),atof(argv[2]),atof(argv[3]));
+  aTrf.SetAffinity (aPln, Draw::Atof(argv[4]));
+  gp_XYZ aOrigin (Draw::Atof(argv[1]),Draw::Atof(argv[2]),Draw::Atof(argv[3]));
   gp_XYZ aResult (aOrigin);
   aTrf.Transforms(aResult);
   char sbf[512];
-  sprintf(sbf, "( %8.3f %8.3f %8.3f ) => ( %8.3f %8.3f %8.3f )\n",
+  Sprintf(sbf, "( %8.3f %8.3f %8.3f ) => ( %8.3f %8.3f %8.3f )\n",
           aOrigin.X(), aOrigin.Y(), aOrigin.Z(),
           aResult.X(), aResult.Y(), aResult.Z());
   di<<sbf;
@@ -3328,11 +3190,11 @@ Standard_Integer OCC14376(Draw_Interpretor& di, Standard_Integer argc, const cha
 
   Standard_Real aDeflection = 0.45110277533;
   if (argc > 2) {
-    aDeflection = atof(argv[2]);
+    aDeflection = Draw::Atof(argv[2]);
   }
   di<<"deflection="<< aDeflection << "\n";
 
-  BRepMesh_IncrementalMesh aIMesh(aShape, aDeflection, Standard_False, M_PI/9.);
+  BRepMesh_IncrementalMesh aIMesh(aShape, aDeflection, Standard_False, M_PI / 9.);
   TopLoc_Location aLocation;
   Handle(Poly_Triangulation) aTriang = BRep_Tool::Triangulation(TopoDS::Face(aShape), aLocation);
 
@@ -3354,7 +3216,7 @@ static Standard_Integer OCC15489 (Draw_Interpretor& di, Standard_Integer argc, c
   }
   try
     {
-      gp_Lin2d aLin2d (atof(argv[1]),atof(argv[2]),atof(argv[3]));
+      gp_Lin2d aLin2d (Draw::Atof(argv[1]),Draw::Atof(argv[2]),Draw::Atof(argv[3]));
       gp_Pnt2d anOrigin = aLin2d.Location();
       di << "X_0 = " << anOrigin.X() << "   Y_0 = " << anOrigin.Y() << "\n" ;
     }
@@ -4657,7 +4519,7 @@ static Standard_Integer OCC12584 (Draw_Interpretor& di, Standard_Integer argc, c
   Standard_Integer mode = 0;
   if (argc == 2)
   {
-    mode = atoi(argv[1]);
+    mode = Draw::Atoi(argv[1]);
   }
   if (mode > 2 || mode < 0)
   {
@@ -4761,7 +4623,7 @@ static Standard_Integer OCC18612igesbrep (Draw_Interpretor& di, Standard_Integer
 // amv 26.09.2003 : this is used to avoid error of enter's simbol        
       char str[80];                                                             
       cin>>str;                                                                 
-      modepri = atoi(str);   
+      modepri = Draw::Atoi(str);   
     }
 
     if (modepri == 0) {  //fin
@@ -4796,7 +4658,7 @@ static Standard_Integer OCC18612igesbrep (Draw_Interpretor& di, Standard_Integer
         //amv 26.09.2003                                                        
         char str_a[80];                                                         
         cin >> str_a;                                                           
-        answer = atoi(str_a);    
+        answer = Draw::Atoi(str_a);    
       }
       if ( answer == 0) continue;
       if ( answer == 1 || answer == 3) {
@@ -4804,7 +4666,7 @@ static Standard_Integer OCC18612igesbrep (Draw_Interpretor& di, Standard_Integer
        // save the shape
        if (shape.IsNull()) { di<<"No Shape produced"<<"\n"; continue; }
        char fname[110];
-       sprintf(fname, "%s", rnom.ToCString());
+       Sprintf(fname, "%s", rnom.ToCString());
        di << "Saving shape in variable Draw : " << fname << "\n";
        if (answer == 3) IGESToBRep::WriteShape (shape,1);
        try {
@@ -4827,7 +4689,7 @@ static Standard_Integer OCC18612igesbrep (Draw_Interpretor& di, Standard_Integer
          TopoDS_Shape shape = Reader.Shape(inum);
          if (shape.IsNull()) { di<<"No Shape produced"<<"\n"; continue; }
          char fname[110];
-         sprintf(fname, "%s_%d", rnom.ToCString(),inum);
+         Sprintf(fname, "%s_%d", rnom.ToCString(),inum);
          di << "Saving shape in variable Draw : " << fname << "\n";
          if (answer == 4) IGESToBRep::WriteShape (shape,inum);
          try {
@@ -4854,7 +4716,7 @@ static Standard_Integer OCC18612igesbrep (Draw_Interpretor& di, Standard_Integer
       if (!Reader.TransferOne (nent)) di<<"Transfer entity n0 "<<nent<<" : no result"<<"\n";
       else {
        nbs = Reader.NbShapes();
-       char shname[30];  sprintf (shname,"%s_%d",rnom.ToCString(),nent);
+       char shname[30];  Sprintf (shname,"%s_%d",rnom.ToCString(),nent);
        di<<"Transfer entity n0 "<<nent<<" OK  -> DRAW Shape: "<<shname<<"\n";
        di<<"Now, "<<nbs<<" Shapes produced"<<"\n";
        TopoDS_Shape sh = Reader.Shape(nbs);
@@ -4892,7 +4754,7 @@ static Standard_Integer OCC18612igesbrep (Draw_Interpretor& di, Standard_Integer
         TopoDS_Shape shape = Reader.OneShape();
         // save the shape
         char fname[110];
-        sprintf(fname, "%s", rnom.ToCString());
+        Sprintf(fname, "%s", rnom.ToCString());
         di << "Saving shape in variable Draw : " << fname << "\n";
         try {
           OCC_CATCH_SIGNALS
@@ -4940,7 +4802,7 @@ static Standard_Integer OCC18612igesbrep (Draw_Interpretor& di, Standard_Integer
           // anv 26.09.2003                                                     
           char str_answer[80];                                                  
           cin>>str_answer;                                                      
-          answer = atoi(str_answer);    
+          answer = Draw::Atoi(str_answer);    
        }
        if (answer <= 0 || answer > 3) continue;
        if (answer == 3) {
@@ -4967,7 +4829,7 @@ static Standard_Integer OCC18612igesbrep (Draw_Interpretor& di, Standard_Integer
            if (!Reader.TransferOne(nent)) di<<"Transfer entity n0 "<<nent<<" : no result"<<"\n";
            else {
              nbs = Reader.NbShapes();
-             char shname[30];  sprintf (shname,"%s_%d",rnom.ToCString(),nbs);
+             char shname[30];  Sprintf (shname,"%s_%d",rnom.ToCString(),nbs);
              di<<"Transfer entity n0 "<<nent<<" OK  -> DRAW Shape: "<<shname<<"\n";
              di<<"Now, "<<nbs<<" Shapes produced"<<"\n";
              TopoDS_Shape sh = Reader.Shape(nbs);
@@ -5010,10 +4872,10 @@ static Standard_Integer OCC20766 (Draw_Interpretor& di, Standard_Integer argc, c
     return 1;
   }
 
-  Standard_Real A = atof(argv[2]);
-  Standard_Real B = atof(argv[3]);
-  Standard_Real C = atof(argv[4]);
-  Standard_Real D = atof(argv[5]);
+  Standard_Real A = Draw::Atof(argv[2]);
+  Standard_Real B = Draw::Atof(argv[3]);
+  Standard_Real C = Draw::Atof(argv[4]);
+  Standard_Real D = Draw::Atof(argv[5]);
 
   Handle(Geom_Geometry) result;
 
@@ -5031,7 +4893,7 @@ static Standard_Integer OCC20627 (Draw_Interpretor& di, Standard_Integer argc, c
       di << "Usage : " << argv[0] << " MaxNbr" << "\n";
       return -1;
     }
-  Standard_Integer aMaxNbr = atoi(argv[1]);
+  Standard_Integer aMaxNbr = Draw::Atoi(argv[1]);
 
   for (Standard_Integer i=0;i<aMaxNbr;i++)
     {
@@ -5054,12 +4916,12 @@ Standard_Integer OCC22762 (Draw_Interpretor& di, Standard_Integer argc, const ch
            di << "Wrong number of arguments" << "\n";
            return -1;
        }
-    Standard_Real X1_Pnt = atof(argv[1]);
-    Standard_Real Y1_Pnt = atof(argv[2]);
-    Standard_Real Z1_Pnt = atof(argv[3]);
-    Standard_Real X2_Pnt = atof(argv[4]);
-    Standard_Real Y2_Pnt = atof(argv[5]);
-    Standard_Real Z2_Pnt = atof(argv[6]);
+    Standard_Real X1_Pnt = Draw::Atof(argv[1]);
+    Standard_Real Y1_Pnt = Draw::Atof(argv[2]);
+    Standard_Real Z1_Pnt = Draw::Atof(argv[3]);
+    Standard_Real X2_Pnt = Draw::Atof(argv[4]);
+    Standard_Real Y2_Pnt = Draw::Atof(argv[5]);
+    Standard_Real Z2_Pnt = Draw::Atof(argv[6]);
     
     Graphic3d_Vector AV1(X1_Pnt, Y1_Pnt, Z1_Pnt);
     Graphic3d_Vector AV2(X2_Pnt, Y2_Pnt, Z2_Pnt);
@@ -5088,15 +4950,15 @@ Standard_Integer OCC17424 (Draw_Interpretor& di, Standard_Integer argc, const ch
     return 1;
   }
 
-  Standard_Real X_Pnt = atof(argv[2]);
-  Standard_Real Y_Pnt = atof(argv[3]);
-  Standard_Real Z_Pnt = atof(argv[4]);
+  Standard_Real X_Pnt = Draw::Atof(argv[2]);
+  Standard_Real Y_Pnt = Draw::Atof(argv[3]);
+  Standard_Real Z_Pnt = Draw::Atof(argv[4]);
 
-  Standard_Real X_Dir = atof(argv[5]);
-  Standard_Real Y_Dir = atof(argv[6]);
-  Standard_Real Z_Dir = atof(argv[7]);
+  Standard_Real X_Dir = Draw::Atof(argv[5]);
+  Standard_Real Y_Dir = Draw::Atof(argv[6]);
+  Standard_Real Z_Dir = Draw::Atof(argv[7]);
 
-  Standard_Real PInf  = atof(argv[8]);
+  Standard_Real PInf  = Draw::Atof(argv[8]);
 
   IntCurvesFace_ShapeIntersector intersector;
   intersector.Load(shape, Precision::Intersection());
@@ -5181,10 +5043,10 @@ Standard_Integer OCC22744 (Draw_Interpretor& di, Standard_Integer argc, const ch
   
   TCollection_ExtendedString anExtString;
   
-  Standard_ExtCharacter aNonAsciiChar = 0xff00;
+  Standard_ExtCharacter aNonAsciiChar = 0x0f00;
   anExtString.Insert(1, aNonAsciiChar);
 
-  di << "Is ASCII: " << ( anExtString.IsAscii() ? "true" : "false" ) << "\n";
+  di << "Is ASCII: " << ( anExtString.IsAscii() ? "true : Error" : "false : OK" ) << "\n";
   NCollection_DataMap<TCollection_ExtendedString, Standard_Integer> aMap;
   aMap.Bind(anExtString, 0);
   
@@ -5199,17 +5061,17 @@ Standard_Integer OCC22558 (Draw_Interpretor& di, Standard_Integer argc, const ch
        return 1;
     }
     
-    Standard_Real X_vec = atof(argv[1]);
-    Standard_Real Y_vec = atof(argv[2]);
-    Standard_Real Z_vec = atof(argv[3]);
+    Standard_Real X_vec = Draw::Atof(argv[1]);
+    Standard_Real Y_vec = Draw::Atof(argv[2]);
+    Standard_Real Z_vec = Draw::Atof(argv[3]);
     
-    Standard_Real X_dir = atof(argv[4]);
-    Standard_Real Y_dir = atof(argv[5]);
-    Standard_Real Z_dir = atof(argv[6]);
+    Standard_Real X_dir = Draw::Atof(argv[4]);
+    Standard_Real Y_dir = Draw::Atof(argv[5]);
+    Standard_Real Z_dir = Draw::Atof(argv[6]);
     
-    Standard_Real X_pnt = atof(argv[7]);
-    Standard_Real Y_pnt = atof(argv[8]);
-    Standard_Real Z_pnt = atof(argv[9]);
+    Standard_Real X_pnt = Draw::Atof(argv[7]);
+    Standard_Real Y_pnt = Draw::Atof(argv[8]);
+    Standard_Real Z_pnt = Draw::Atof(argv[9]);
     
     gp_Dir toSym(X_vec, Y_vec, Z_vec);
     gp_Dir dir(X_dir, Y_dir, Z_dir);
@@ -5230,14 +5092,14 @@ Standard_Integer OCC22736 (Draw_Interpretor& di, Standard_Integer argc, const ch
     return 1;
   }
 
-  Standard_Real X_mirrorFirstPoint = atof(argv[1]);
-  Standard_Real Y_mirrorFirstPoint = atof(argv[2]);
-  Standard_Real X_mirrorSecondPoint = atof(argv[3]);
-  Standard_Real Y_mirrorSecondPoint = atof(argv[4]);
-  Standard_Real X_p1 = atof(argv[5]);
-  Standard_Real Y_p1 = atof(argv[6]);
-  Standard_Real X_p2 = atof(argv[7]);
-  Standard_Real Y_p2 = atof(argv[8]);
+  Standard_Real X_mirrorFirstPoint = Draw::Atof(argv[1]);
+  Standard_Real Y_mirrorFirstPoint = Draw::Atof(argv[2]);
+  Standard_Real X_mirrorSecondPoint = Draw::Atof(argv[3]);
+  Standard_Real Y_mirrorSecondPoint = Draw::Atof(argv[4]);
+  Standard_Real X_p1 = Draw::Atof(argv[5]);
+  Standard_Real Y_p1 = Draw::Atof(argv[6]);
+  Standard_Real X_p2 = Draw::Atof(argv[7]);
+  Standard_Real Y_p2 = Draw::Atof(argv[8]);
   
   gp_Trsf2d identityTransformation;
 
@@ -5282,7 +5144,7 @@ Standard_Integer OCC22736 (Draw_Interpretor& di, Standard_Integer argc, const ch
   return 0;
 }
 
-Standard_Integer OCC23429(Draw_Interpretor& di,
+Standard_Integer OCC23429(Draw_Interpretor& /*di*/,
                           Standard_Integer narg, const char** a)
 {
   if (narg < 4) return 1;
@@ -5330,56 +5192,6 @@ Standard_Integer OCC23429(Draw_Interpretor& di,
   return 0;
 }
 
-#include <BOPTColStd_CArray1OfInteger.hxx>
-//=======================================================================
-//function : DumpArray
-//purpose  : 
-//=======================================================================
-void DumpArray(const BOPTColStd_CArray1OfInteger& aC,
-              Draw_Interpretor& aDI)
-{
-  Standard_Integer iLength, iFactLength, iBlockLength;
-  //
-  iLength=aC.Length();
-  iFactLength=aC.FactLength();
-  iBlockLength=aC.BlockLength();
-  //
-  aDI<< "Length: " <<iLength << "\n";
-  aDI<< "FactLength: " <<iFactLength << "\n";
-  aDI<< "BlockLength: " <<iBlockLength << "\n";
-}
-//=======================================================================
-//function : bcarray
-//purpose  : 
-//=======================================================================
-Standard_Integer bcarray (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
-{
-       
-  if (argc != 1) {
-    di << "Usage : " << argv[0] << "\n";
-    return 1;
-  }
-
-  Standard_Integer i, aBL;
-  BOPTColStd_CArray1OfInteger aC;
-  //
-  aBL=100000;
-  aC.SetBlockLength(aBL);
-  //
-  for (i=1; i<=10; ++i) {
-    aC.Append(-i*10);
-  }
-  di<< "\nstate before release the unused memory\n";
-  DumpArray(aC, di);
-  //
-  aC.Purge();
-  //
-  di<< "\nstate after release the unused memory\n";
-  DumpArray(aC, di);
-  //
-  return 0;
-}
-
 #include <ExprIntrp_GenExp.hxx>
 Standard_Integer CR23403 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
 {
@@ -5403,6 +5215,59 @@ Standard_Integer CR23403 (Draw_Interpretor& di, Standard_Integer argc, const cha
   return 0;
 }
 
+#include <Quantity_NameOfColor.hxx>
+#include <TopAbs_ShapeEnum.hxx>
+Standard_Integer CR23234 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
+{
+  // Check the command arguments
+  if (argc != 2)
+  {
+    di <<"Error: "<<argv[0]<<" - invalid number of arguments"<< "\n";
+    di << "Usage : " << argv[0] << " mode(0/1)\n";
+    return 1; //TCL_ERROR
+  }
+
+  const Standard_Integer aMode = Draw::Atoi(argv[1]);
+
+  //===================================================================
+
+  Handle(AIS_InteractiveContext) aisContext = ViewerTest::GetAISContext();
+  if (aisContext.IsNull())
+  {
+    di <<"Error: call 'vinit' first"<< "\n";
+    return 1; //TCL_ERROR
+  }
+
+  if (aisContext->HasOpenedContext())
+  {
+    aisContext->CloseAllContexts();
+    aisContext->RemoveAll(false);
+    aisContext->EraseSelected(false);
+  }
+  aisContext->EraseAll(false);
+  Handle(Geom_Axis2Placement) trihedronAxis = new Geom_Axis2Placement(gp::XOY());
+  Handle(AIS_Trihedron) trihedron = new AIS_Trihedron(trihedronAxis);
+  if (aMode)
+    trihedron->UnsetSelectionMode(); // this line causes an exception on OpenLocalContext
+  trihedron->SetSize(20);
+  trihedron->SetColor(Quantity_NOC_GRAY30);
+  trihedron->SetArrowColor(Quantity_NOC_GRAY30);
+  trihedron->SetTextColor(Quantity_NOC_DARKSLATEBLUE);
+
+  //trihedron->SetColor(Quantity_NameOfColor::Quantity_NOC_GRAY30);
+  //trihedron->SetArrowColor(Quantity_NameOfColor::Quantity_NOC_GRAY30);
+  //trihedron->SetTextColor(Quantity_NameOfColor::Quantity_NOC_DARKSLATEBLUE);
+
+
+  aisContext->Display(trihedron, true);
+  aisContext->OpenLocalContext();
+  //aisContext->ActivateStandardMode(TopAbs_ShapeEnum::TopAbs_EDGE);
+  aisContext->ActivateStandardMode(TopAbs_EDGE);
+  aisContext->SetSensitivity(8);
+
+  return 0; //TCL_OK
+}
+
 void QABugs::Commands_11(Draw_Interpretor& theCommands) {
   const char *group = "QABugs";
 
@@ -5413,7 +5278,6 @@ void QABugs::Commands_11(Draw_Interpretor& theCommands) {
 
   theCommands.Add("OCC136", "OCC136", __FILE__, OCC136, group);
   theCommands.Add("BUC60610","BUC60610 iges_input [name]",__FILE__,BUC60610,group);
-  theCommands.Add("BUC60661","BUC60661 file.igs",__FILE__,BUC60661,  group);
 
 //====================================================
 //
@@ -5458,10 +5322,8 @@ void QABugs::Commands_11(Draw_Interpretor& theCommands) {
   theCommands.Add("OCC369", "OCC369 Shape", __FILE__, OCC369, group);
   theCommands.Add("OCC524", "OCC524 LowerVector UpperVector InitialValueVector LowerRowMatrix UpperRowMatrix LowerColMatrix UpperColMatrix InitialValueMatrix", __FILE__, OCC524, group);
   theCommands.Add("OCC525", "OCC525", __FILE__, OCC525, group);
-  theCommands.Add("OCC543", "OCC543 name", __FILE__, OCC543, group);
   //theCommands.Add("OCC578", "OCC578 shape1 shape2 shape3", __FILE__, OCC578, group);
   theCommands.Add("OCC578", "OCC578 shape1 shape2 shape3 [BRepAlgoAPI/BRepAlgo = 1/0]", __FILE__, OCC578, group);
-  theCommands.Add("OCC627", "OCC627", __FILE__, OCC627, group);
   theCommands.Add("OCC669", "OCC669 GUID", __FILE__, OCC669, group);
   theCommands.Add("OCC738_ShapeRef", "OCC738_ShapeRef", __FILE__, OCC738_ShapeRef, group);
   theCommands.Add("OCC738_Assembly", "OCC738_Assembly", __FILE__, OCC738_Assembly, group);
@@ -5487,7 +5349,7 @@ void QABugs::Commands_11(Draw_Interpretor& theCommands) {
   theCommands.Add("OCC6046", "OCC6046 nb_of_vectors size", __FILE__, OCC6046, group);
   theCommands.Add("OCC5698", "OCC5698 wire", __FILE__, OCC5698, group);
   theCommands.Add("OCC6143", "OCC6143", __FILE__, OCC6143, group);
-  theCommands.Add("OCC7141", "OCC7141 [nCount]", __FILE__, OCC7141, group);
+  theCommands.Add("OCC7141", "OCC7141 [nCount] aPath", __FILE__, OCC7141, group);
   theCommands.Add("OCC7372", "OCC7372", __FILE__, OCC7372, group);
   theCommands.Add("OCC8169", "OCC8169 edge1 edge2 plane", __FILE__, OCC8169, group);
   theCommands.Add("OCC10138", "OCC10138 lower upper", __FILE__, OCC10138, group);
@@ -5509,10 +5371,10 @@ void QABugs::Commands_11(Draw_Interpretor& theCommands) {
   theCommands.Add("OCC22586", "OCC22586 shape resshape", __FILE__, OCC22586, group);
   theCommands.Add("OCC22736", "OCC22736 X_mirrorFirstPoint Y_mirrorFirstPoint X_mirrorSecondPoint Y_mirrorSecondPoint X_p1 Y_p1 X_p2 Y_p2", __FILE__, OCC22736, group);
   theCommands.Add("OCC22744", "OCC22744", __FILE__, OCC22744, group);
-  theCommands.Add("bcarray", "bcarray", __FILE__, bcarray, group);
   theCommands.Add("OCC22762", "OCC22762 x1 y1 z1 x2 y2 z3", __FILE__, OCC22762, group);
   theCommands.Add("OCC22558", "OCC22558 x_vec y_vec z_vec x_dir y_dir z_dit x_pnt y_pnt z_pnt", __FILE__, OCC22558, group);
   theCommands.Add("CR23403", "CR23403 string", __FILE__, CR23403, group);
   theCommands.Add("OCC23429", "OCC23429 res shape tool [appr]", __FILE__, OCC23429, group);
+  theCommands.Add("CR23234", "CR23234 mode(0/1)", __FILE__, CR23234, group);
   return;
 }