0031939: Coding - correction of spelling errors in comments [part 4]
[occt.git] / src / IFSelect / IFSelect_Functions.cxx
1 // Copyright (c) 1999-2014 OPEN CASCADE SAS
2 //
3 // This file is part of Open CASCADE Technology software library.
4 //
5 // This library is free software; you can redistribute it and/or modify it under
6 // the terms of the GNU Lesser General Public License version 2.1 as published
7 // by the Free Software Foundation, with special exception defined in the file
8 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9 // distribution for complete text of the license and disclaimer of any warranty.
10 //
11 // Alternatively, this file may be used under the terms of Open CASCADE
12 // commercial license or contractual agreement.
13
14 //#58 rln 28.12.98 Versioning
15
16 #include <IFSelect_Act.hxx>
17 #include <IFSelect_CheckCounter.hxx>
18 #include <IFSelect_Dispatch.hxx>
19 #include <IFSelect_DispGlobal.hxx>
20 #include <IFSelect_DispPerCount.hxx>
21 #include <IFSelect_DispPerFiles.hxx>
22 #include <IFSelect_DispPerOne.hxx>
23 #include <IFSelect_DispPerSignature.hxx>
24 #include <IFSelect_EditForm.hxx>
25 #include <IFSelect_Editor.hxx>
26 #include <IFSelect_Functions.hxx>
27 #include <IFSelect_GeneralModifier.hxx>
28 #include <IFSelect_GraphCounter.hxx>
29 #include <IFSelect_IntParam.hxx>
30 #include <IFSelect_ListEditor.hxx>
31 #include <IFSelect_Modifier.hxx>
32 #include <IFSelect_ModifReorder.hxx>
33 #include <IFSelect_SelectDeduct.hxx>
34 #include <IFSelect_SelectDiff.hxx>
35 #include <IFSelect_SelectEntityNumber.hxx>
36 #include <IFSelect_SelectErrorEntities.hxx>
37 #include <IFSelect_SelectIncorrectEntities.hxx>
38 #include <IFSelect_SelectIntersection.hxx>
39 #include <IFSelect_Selection.hxx>
40 #include <IFSelect_SelectModelEntities.hxx>
41 #include <IFSelect_SelectModelRoots.hxx>
42 #include <IFSelect_SelectPointed.hxx>
43 #include <IFSelect_SelectRange.hxx>
44 #include <IFSelect_SelectRoots.hxx>
45 #include <IFSelect_SelectShared.hxx>
46 #include <IFSelect_SelectSharing.hxx>
47 #include <IFSelect_SelectSignature.hxx>
48 #include <IFSelect_SelectSuite.hxx>
49 #include <IFSelect_SelectUnion.hxx>
50 #include <IFSelect_SelectUnknownEntities.hxx>
51 #include <IFSelect_SessionFile.hxx>
52 #include <IFSelect_SessionPilot.hxx>
53 #include <IFSelect_ShareOut.hxx>
54 #include <IFSelect_Signature.hxx>
55 #include <IFSelect_SignatureList.hxx>
56 #include <IFSelect_SignCounter.hxx>
57 #include <IFSelect_SignType.hxx>
58 #include <IFSelect_Transformer.hxx>
59 #include <IFSelect_WorkLibrary.hxx>
60 #include <IFSelect_WorkSession.hxx>
61 #include <Interface_Category.hxx>
62 #include <Interface_CheckIterator.hxx>
63 #include <Interface_EntityIterator.hxx>
64 #include <Interface_InterfaceModel.hxx>
65 #include <Interface_Macros.hxx>
66 #include <Interface_MSG.hxx>
67 #include <Interface_Static.hxx>
68 #include <Interface_Version.hxx>
69 #include <Message.hxx>
70 #include <Message_Messenger.hxx>
71 #include <Standard_Transient.hxx>
72 #include <TCollection_AsciiString.hxx>
73 #include <TCollection_HAsciiString.hxx>
74 #include <TColStd_HSequenceOfAsciiString.hxx>
75 #include <TColStd_HSequenceOfHAsciiString.hxx>
76 #include <TColStd_HSequenceOfTransient.hxx>
77 #include <TColStd_MapOfInteger.hxx>
78
79 #include <stdio.h>
80 //  Decomposition of a file name in its parts : prefix, root, suffix
81 static void SplitFileName
82   (const Standard_CString filename,
83    TCollection_AsciiString& prefix,
84    TCollection_AsciiString& fileroot,
85    TCollection_AsciiString& suffix)
86 {
87   Standard_Integer nomdeb, nomfin, nomlon;
88   TCollection_AsciiString resfile (filename);
89   nomlon = resfile.Length();
90   nomdeb = resfile.SearchFromEnd ("/");
91   if (nomdeb <= 0) nomdeb = resfile.SearchFromEnd("\\");  // pour NT
92   if (nomdeb <  0) nomdeb = 0;
93   nomfin = resfile.SearchFromEnd (".");
94   if (nomfin < nomdeb) nomfin = nomlon + 1;
95
96   if (nomdeb > 0) prefix = resfile.SubString (1,nomdeb);
97   fileroot = resfile.SubString(nomdeb+1,nomfin-1);
98   if (nomfin <= nomlon) suffix = resfile.SubString (nomfin,nomlon);
99 }
100
101
102
103 //  Functions definit un certain nombre de commandes
104 //  enregistrees dans le Dictionnaire de Activator (par des Act unitaires)
105 //  Les actions elles-memes sont regroupees en fin de fichier
106
107 //  Les definitions
108
109 static IFSelect_ReturnStatus funstatus
110   (const Handle(IFSelect_SessionPilot)& )
111 {
112 //        ****    Version & cie     ****
113   //#58 rln
114   Message_Messenger::StreamBuffer sout = Message::SendInfo();
115   sout<<"Processor Version : "<<XSTEP_PROCESSOR_VERSION<<std::endl;
116   sout<<"OL Version        : "<<XSTEP_SYSTEM_VERSION<<std::endl;
117   sout<<"Configuration     : "<<XSTEP_Config<<std::endl;
118   sout<<"UL Names          : "<<XSTEP_ULNames<<std::endl;
119   return IFSelect_RetVoid;
120 }
121
122 static IFSelect_ReturnStatus fun1
123   (const Handle(IFSelect_SessionPilot)& pilot)
124 {
125   Handle(IFSelect_WorkSession) WS = pilot->Session();
126 //        ****    ToggleHandler     ****
127   Standard_Boolean hand = !WS->ErrorHandle();
128   Message_Messenger::StreamBuffer sout = Message::SendInfo();
129   if (hand) sout << " --  Mode Catch Error now Active"   <<std::endl;
130   else      sout << " --  Mode Catch Error now Inactive" <<std::endl;
131   WS->SetErrorHandle(hand);
132   return IFSelect_RetDone;
133 }
134
135 static IFSelect_ReturnStatus fun3
136   (const Handle(IFSelect_SessionPilot)& pilot)
137 {
138   Handle(IFSelect_WorkSession) WS = pilot->Session();
139   Standard_Integer argc = pilot->NbWords();
140   const Standard_CString arg1 = pilot->Arg(1);
141 //        ****    XRead / Load         ****
142   Message_Messenger::StreamBuffer sout = Message::SendInfo();
143   if (argc < 2) { sout<<"Read/Load : give file name !"<<std::endl; return IFSelect_RetError; }
144   if (WS->Protocol().IsNull()) { sout<<"Protocol not defined"<<std::endl; return IFSelect_RetError; }
145   if (WS->WorkLibrary().IsNull()) { sout<<"WorkLibrary not defined"<<std::endl; return IFSelect_RetError; }
146
147   IFSelect_ReturnStatus status = WS->ReadFile (arg1);
148 // status : 0 OK, 1 erreur lecture, 2 Fail(try/catch),
149 //          -1 fichier non trouve, -2 lecture faite mais resultat vide
150   switch (status) {
151     case IFSelect_RetVoid  : sout<<"file:"<<arg1<<" gives empty result"<<std::endl; break;
152     case IFSelect_RetError : sout<<"file:"<<arg1<<" could not be opened"<<std::endl; break;
153     case IFSelect_RetDone  : sout<<"file:"<<arg1<<" read"<<std::endl; break;
154     case IFSelect_RetFail  : sout<<"file:"<<arg1<<" : error while reading"<<std::endl; break;
155     case IFSelect_RetStop  : sout<<"file:"<<arg1<<" : EXCEPTION while reading"<<std::endl; break;
156     default : sout<<"file:"<<arg1<<" could not be read"<<std::endl; break;
157   }
158   if (status != IFSelect_RetDone) return status;
159 //      sout<<" - clearing list of already written files"<<std::endl;
160   WS->BeginSentFiles(Standard_True);
161   return status;
162 }
163
164 static IFSelect_ReturnStatus fun4
165   (const Handle(IFSelect_SessionPilot)& pilot)
166 {
167   Handle(IFSelect_WorkSession) WS = pilot->Session();
168   Standard_Integer argc = pilot->NbWords();
169   const Standard_CString arg1 = pilot->Arg(1);
170 //        ****    Write All         ****
171   Message_Messenger::StreamBuffer sout = Message::SendInfo();
172   if (argc < 2) { sout<<"Write All : give file name !"<<std::endl; return IFSelect_RetError; }
173   return WS->SendAll (arg1);
174 }
175
176 static IFSelect_ReturnStatus fun5
177   (const Handle(IFSelect_SessionPilot)& pilot)
178 {
179   Handle(IFSelect_WorkSession) WS = pilot->Session();
180   Standard_Integer argc = pilot->NbWords();
181   const Standard_CString arg1 = pilot->Arg(1);
182 //  const Standard_CString arg2 = pilot->Arg(2);
183 //        ****    Write Selected         ****
184   Message_Messenger::StreamBuffer sout = Message::SendInfo();
185   if (argc < 3) { sout<<"Write Selected : give file name + givelist !"<<std::endl; return IFSelect_RetError; }
186   Handle(TColStd_HSequenceOfTransient) result =
187     IFSelect_Functions::GiveList (WS,pilot->CommandPart( 2));
188   if (result.IsNull()) { sout<<"No entity selected"<<std::endl; return IFSelect_RetError; }
189   else sout<<"Nb Entities selected : "<<result->Length()<<std::endl;
190   Handle(IFSelect_SelectPointed) sp = new IFSelect_SelectPointed;
191   sp->SetList (result);
192   return WS->SendSelected (arg1,sp);
193 }
194
195 static IFSelect_ReturnStatus fun6
196   (const Handle(IFSelect_SessionPilot)& pilot)
197 {
198   Handle(IFSelect_WorkSession) WS = pilot->Session();
199   Standard_Integer argc = pilot->NbWords();
200   const Standard_CString arg1 = pilot->Arg(1);
201 //        ****    Write Entite(s)         ****
202   Message_Messenger::StreamBuffer sout = Message::SendInfo();
203   if (argc < 3) { sout<<"Write Entitie(s) : give file name + n0s entitie(s)!"<<std::endl; return IFSelect_RetError; }
204   int ko = 0;
205   Handle(IFSelect_SelectPointed) sp = new IFSelect_SelectPointed;
206   for (Standard_Integer ia = 2; ia < argc ; ia ++) {
207     Standard_Integer id = pilot->Number(pilot->Arg(ia));
208     if (id > 0) {
209       Handle(Standard_Transient) item = WS->StartingEntity(id);
210       if (sp->Add(item)) sout<<"Added:no."<<id<<std::endl;
211       else { sout<<" Fail Add n0."<<id<<std::endl; ko ++; }
212     }
213     else { sout<<"Not an entity number:"<<pilot->Arg(ia)<<std::endl; ko ++; }
214   }
215   if (ko > 0) { sout<<ko<<" bad arguments, abandon"<<std::endl; return IFSelect_RetError; }
216   return WS->SendSelected (arg1,sp);
217 }
218
219 static IFSelect_ReturnStatus fun7
220   (const Handle(IFSelect_SessionPilot)& pilot)
221 {
222   Handle(IFSelect_WorkSession) WS = pilot->Session();
223   Standard_Integer argc = pilot->NbWords();
224   const Standard_CString arg1 = pilot->Arg(1);
225 //        ****    Entity Label       ****
226   Message_Messenger::StreamBuffer sout = Message::SendInfo();
227   if (argc < 2) { sout<<"Give entity number"<<std::endl; return IFSelect_RetError; }
228   if (!WS->HasModel()) { sout<<"No loaded model, abandon"<<std::endl; return IFSelect_RetError; }
229   Standard_Integer nument = WS->NumberFromLabel (arg1);
230   if (nument <= 0 || nument > WS->NbStartingEntities())
231     { sout<<"Not a suitable number: "<<arg1<<std::endl;  return IFSelect_RetError; }
232   sout<<"N0."<<nument<<" ->Label in Model : ";
233   WS->Model()->PrintLabel(WS->StartingEntity(nument), sout);
234   sout<<std::endl;
235   return IFSelect_RetVoid;
236 }
237
238 static IFSelect_ReturnStatus fun8
239   (const Handle(IFSelect_SessionPilot)& pilot)
240 {
241   Handle(IFSelect_WorkSession) WS = pilot->Session();
242   Standard_Integer argc = pilot->NbWords();
243   const Standard_CString arg1 = pilot->Arg(1);
244 //        ****    Entity Number      ****
245   Message_Messenger::StreamBuffer sout = Message::SendInfo();
246   if (argc < 2) { sout<<"Give label to search"<<std::endl; return IFSelect_RetError; }
247   if (!WS->HasModel()) { sout<<"No loaded model, abandon"<<std::endl; return IFSelect_RetError; }
248   const Handle(Interface_InterfaceModel) &model = WS->Model();
249   Standard_Integer i, cnt = 0;
250   Standard_Boolean exact = Standard_False;
251   sout<<" **  Search Entity Number for Label : "<<arg1<<std::endl;
252   for (i = model->NextNumberForLabel (arg1, 0, exact)  ; i != 0;
253        i = model->NextNumberForLabel (arg1, i, exact)) {
254     cnt ++;
255     sout<<" **  Found n0/id:"; 
256     model->Print (model->Value(i), sout);
257     sout<<std::endl;
258   }
259   
260   if (cnt == 0) sout<<" **  No Match"<<std::endl;
261   else if (cnt == 1) sout<<" **  1 Match"<<std::endl;
262   else sout<<cnt<<" Matches"<<std::endl;
263   return IFSelect_RetVoid;
264 }
265
266 static IFSelect_ReturnStatus fun9
267   (const Handle(IFSelect_SessionPilot)& pilot)
268 {
269 //        ****    List Types         ****
270   Handle(IFSelect_WorkSession) WS = pilot->Session();
271   Handle(IFSelect_Signature) signtype = WS->SignType();
272   if (signtype.IsNull()) signtype = new IFSelect_SignType;
273   Handle(IFSelect_SignCounter) counter =
274     new IFSelect_SignCounter(signtype,Standard_False);
275   return pilot->ExecuteCounter (counter,1);
276 }
277
278 static IFSelect_ReturnStatus funcount
279   (const Handle(IFSelect_SessionPilot)& pilot)
280 {
281   Handle(IFSelect_WorkSession) WS = pilot->Session();
282   Standard_Integer argc = pilot->NbWords();
283   const Standard_CString arg0 = pilot->Arg(0);
284   const Standard_CString arg1 = pilot->Arg(1);
285   Standard_Boolean listmode = (arg0[0] == 'l');
286 //        ****    List Counter         ****
287
288   Message_Messenger::StreamBuffer sout = Message::SendInfo();
289   if (argc < 2) {
290     sout<<"Designer signature ou compteur, + facultatif selection + facultatif entite"<<std::endl;
291     sout<<" signature/compteur seul -> tout le modele"<<std::endl
292       <<  " sign/compteur + selection -> cette selection, evaluation normale"<<std::endl
293         <<" sign/compteur + sel + num -> cette selection evaluee sur entite n0 num"<<std::endl;
294     return IFSelect_RetError;
295   }
296   DeclareAndCast(IFSelect_SignCounter,counter,WS->NamedItem(arg1));
297   if (counter.IsNull()) {
298     DeclareAndCast(IFSelect_Signature,signa,WS->NamedItem(arg1));
299     if (!signa.IsNull()) counter = new IFSelect_SignCounter(signa,Standard_False,listmode);
300   }
301 //  Handle(IFSelect_Selection) sel;
302 //  Standard_Integer n3 = 0;  if (argc > 3) n3 = WS->NumberFromLabel(arg3);
303 //  if (argc > 2) sel = GetCasted(IFSelect_Selection,WS->NamedItem(arg2));
304 //  if (counter.IsNull() || (argc > 2 && n3 <= 0 && sel.IsNull()) ) {
305 //    sout<<"Nom:"<<arg1; if (argc > 2) sout<<" et/ou "<<arg2;
306 //    sout<<" incorrect (demande: compteur ou signature [selection])"<<std::endl;
307 //    return IFSelect_RetError;
308 //  }
309
310 //  Ajout : si Selection, on applique un GraphCounter
311 //   Et en ce cas, on peut en avoir plusieurs : la limite est le mot-cle "on"
312   Standard_Integer onflag = 0;
313   Standard_Integer i; // svv Jan11 2000 : porting on DEC
314   for (i = 2; i < argc; i ++) {
315     if (!strcmp (pilot->Arg(i),"on")) { onflag = i; break; }
316   }
317
318   Handle(IFSelect_Selection) sel = WS->GiveSelection(arg1);
319   DeclareAndCast(IFSelect_SelectDeduct,seld,sel);
320   if (!seld.IsNull()) {
321 //  Si onflag, faire une SelectSuite
322     if (onflag > 2) {
323       Handle(IFSelect_SelectSuite) suite = new IFSelect_SelectSuite;
324       for (i = 1; i < onflag; i ++) {
325         sel = WS->GiveSelection(pilot->Arg(i));
326         if (!suite->AddInput(sel)) {
327           sout<<"Incorrect definition for applied selection"<<std::endl;
328           return IFSelect_RetError;
329         }
330       }
331       seld = suite;
332     }
333
334     Handle(IFSelect_GraphCounter) gc = new IFSelect_GraphCounter(Standard_False,listmode);
335     gc->SetApplied (seld);
336     counter = gc;
337   }
338
339   if (counter.IsNull()) {
340     sout<<"Neither Counter nor Signature : "<<arg1<<std::endl;
341     return IFSelect_RetError;
342   }
343
344   if (onflag == 0) onflag = 1;
345   IFSelect_PrintCount pcm = IFSelect_ListByItem;
346   if (arg0[0] == 'c') pcm = IFSelect_CountByItem;
347   if (arg0[0] == 's') pcm = IFSelect_CountSummary;
348   return pilot->ExecuteCounter (counter,onflag+1, pcm);
349 }
350
351 static IFSelect_ReturnStatus funsigntype
352   (const Handle(IFSelect_SessionPilot)& pilot)
353 {
354   Handle(IFSelect_WorkSession) WS = pilot->Session();
355   Standard_Integer argc = pilot->NbWords();
356   const Standard_CString arg1 = pilot->Arg(1);
357 //        ****    Sign Type              ****
358   Handle(IFSelect_Signature) signtype = WS->SignType();
359   Message_Messenger::StreamBuffer sout = Message::SendInfo();
360   if (signtype.IsNull()) sout<<"signtype actually undefined"<<std::endl;
361   else {
362     Handle(TCollection_HAsciiString) str = WS->Name (signtype);
363     Standard_Integer id = WS->ItemIdent (signtype);
364     sout<<signtype->Label()<<std::endl;
365     if (str.IsNull()) {
366       if (id > 0) sout<<"signtype : item n0 "<<id<<std::endl;
367     } else {
368       sout<<"signtype : also named as "<<str->ToCString()<<std::endl;
369     }
370   }
371   if (argc < 2) sout<<"signtype newitem  to change, signtype . to clear"<<std::endl;
372   else {
373     if (arg1[0] == '.' && arg1[1] == '\0') {
374       signtype.Nullify();
375       sout<<"signtype now cleared"<<std::endl;
376     } else {
377       signtype = GetCasted(IFSelect_Signature,WS->NamedItem(arg1));
378       if (signtype.IsNull()) { sout<<"Not a Signature : "<<arg1<<std::endl; return IFSelect_RetError; }
379       else sout<<"signtype now set to "<<arg1<<std::endl;
380     }
381     WS->SetSignType(signtype);
382     return IFSelect_RetDone;
383   }
384   return IFSelect_RetVoid;
385 }
386
387 static IFSelect_ReturnStatus funsigncase
388   (const Handle(IFSelect_SessionPilot)& pilot)
389 {
390   Handle(IFSelect_WorkSession) WS = pilot->Session();
391   const Standard_CString arg1 = pilot->Arg(1);
392 //        ****    Sign Case              ****
393   Handle(IFSelect_Signature) signcase = GetCasted(IFSelect_Signature,WS->NamedItem(arg1));
394   Message_Messenger::StreamBuffer sout = Message::SendInfo();
395   if (signcase.IsNull()) sout<<"Not a Signature : "<<arg1<<std::endl;
396   else {
397     Standard_Boolean hasmin,hasmax;  Standard_Integer valmin,valmax;
398     if (signcase->IsIntCase(hasmin,valmin,hasmax,valmax)) {
399       sout<<"Signature "<<arg1<<" : Integer Case";
400       if (hasmin) sout<<" - Mini:"<<valmin;
401       if (hasmax) sout<<" - Maxi:"<<valmax;
402       sout<<std::endl;
403     }
404     Handle(TColStd_HSequenceOfAsciiString) caselist = signcase->CaseList();
405     if (caselist.IsNull()) sout<<"Signature "<<arg1<<" : no predefined case, see command  count "<<arg1<<std::endl;
406     else {
407       Standard_Integer i, nb = caselist->Length();
408       sout<<"Signature "<<arg1<<" : "<<nb<<" basic cases :"<<std::endl;
409       for (i = 1; i <= nb; i ++) sout<<"  "<<caselist->Value(i);
410       sout<<std::endl;
411     }
412   }
413   return IFSelect_RetVoid;
414 }
415
416
417 static IFSelect_ReturnStatus fun10
418   (const Handle(IFSelect_SessionPilot)& pilot)
419 {
420   Handle(IFSelect_WorkSession) WS = pilot->Session();
421   Standard_Integer argc = pilot->NbWords();
422   const Standard_CString arg1 = pilot->Arg(1);
423 //        ****    Entity Status          ****
424   Standard_Integer i,nb;
425   Message_Messenger::StreamBuffer sout = Message::SendInfo();
426   if (argc < 2) {
427     nb = Interface_Category::NbCategories();
428     sout<<" Categories defined :"<<nb<<" i.e. :\n";
429     for (i = 0; i <= nb; i ++)
430       sout<<"Cat."<<i<<"  : "<<Interface_Category::Name(i)<<"\n";
431     sout<<" On a given entity : give its number"<<std::endl;
432     return IFSelect_RetVoid;
433   }
434   Standard_Integer num = pilot->Number(arg1);
435   if (num <= 0 || num > WS->NbStartingEntities())
436     { sout<<"Not a suitable entity number : "<<arg1<<std::endl; return IFSelect_RetError; }
437   Handle(Standard_Transient) ent = WS->StartingEntity(num);
438   WS->PrintEntityStatus (ent, sout);
439   return IFSelect_RetVoid;
440 }
441
442 static IFSelect_ReturnStatus fun11
443   (const Handle(IFSelect_SessionPilot)& pilot)
444 {
445   Handle(IFSelect_WorkSession) WS = pilot->Session();
446 //  Standard_Integer argc = pilot->NbWords();
447   const Standard_CString arg1 = pilot->Arg(1);
448 //        ****    DumpModel (Data)  ****
449   Standard_Integer niv = 0;
450 //  char arg10 = arg1[0];
451 //  if (argc < 2) arg10 = '?';
452   Message_Messenger::StreamBuffer sout = Message::SendInfo();
453   switch (arg1[0]) {
454     case '?' :
455      sout<<"? for this help, else give a listing mode (first letter suffices) :\n"
456         <<" general    General Statistics\n roots    Roots\n"
457         <<" entities   All Entities\n"
458         <<" listfails  CheckList (fails)    per entity\n"
459         <<" messages   CheckList (complete) per entity\n"
460         <<" fails      CheckList (fails)    per message (counting)\n"
461         <<" check      CheckList (complete) per message (counting)\n"
462         <<" totalcheck CheckList (complete) per message (listing n0 ents)\n"
463         <<" FAILS      CheckList (fails)    per message (listing complete)\n"
464         <<" TOTALCHECK CheckList (complete) per message (listing complete)"<<std::endl;
465      return IFSelect_RetVoid;
466     case 'g' : niv = 0; break;
467     case 'r' : niv = 1; break;
468     case 'e' : niv = 2; break;
469     case 'l' : niv = 3; break;
470     case 'm' : niv = 4; break;
471     case 'c' : niv = 5; break;
472     case 't' : niv = 6; break;
473     case 'T' : niv = 7; break;
474     case 'f' : niv = 8; break;
475     case 'F' : niv =10; break;
476     default  : sout<<"Unknown Mode .  data tout court pour help"<<std::endl; return IFSelect_RetError;
477   }
478   WS->TraceDumpModel(niv);
479   return IFSelect_RetVoid;
480 }
481
482 static IFSelect_ReturnStatus fundumpent
483   (const Handle(IFSelect_SessionPilot)& pilot)
484 {
485   Handle(IFSelect_WorkSession) WS = pilot->Session();
486   Standard_Integer argc = pilot->NbWords();
487   Handle(IFSelect_WorkLibrary) WL = WS->WorkLibrary();
488   Standard_Integer levdef=0,levmax=10,level;
489   WL->DumpLevels (levdef,levmax);
490   Message_Messenger::StreamBuffer sout = Message::SendInfo();
491   if (argc < 2 || (argc == 2 && levmax < 0)) {
492     sout<<"Give n0 or id of entity";
493     if (levmax < 0) sout<<"  and dump level"<<std::endl;
494     else sout<<"  + optional, dump level in [0 - "<<levmax<<"] , default = "<<levdef<<std::endl;
495     for (level = 0; level <= levmax; level ++) {
496       Standard_CString help = WL->DumpHelp (level);
497       if (help[0] != '\0') sout<<level<<" : "<<help<<std::endl;
498     }
499     return IFSelect_RetError;
500   }
501
502   const Standard_CString arg1 = pilot->Arg(1);
503   const Standard_CString arg2 = pilot->Arg(2);
504   Standard_Integer num = pilot->Number(arg1);
505   if (num == 0) return IFSelect_RetError;
506   level = levdef;
507   if (argc > 2) level = atoi(arg2);
508   Handle(Standard_Transient) ent = WS->StartingEntity(num);
509   if ( ent.IsNull() ) {
510     sout << "No entity with given id " << arg1 << " (" << num << ") is found in the current model" << std::endl;
511   }
512   else {
513     sout << "  --   DUMP  Entity n0 " << num << "  level " << level << std::endl;
514     WL->DumpEntity (WS->Model(),WS->Protocol(),ent,sout,level);
515
516     Interface_CheckIterator chl = WS->CheckOne (ent);
517     if (!chl.IsEmpty(Standard_False)) chl.Print(sout,WS->Model(),Standard_False);
518   }
519 //  sout << std::flush;
520
521   return IFSelect_RetVoid;
522 }
523
524 static IFSelect_ReturnStatus funsign
525   (const Handle(IFSelect_SessionPilot)& pilot)
526 {
527   Handle(IFSelect_WorkSession) WS = pilot->Session();
528   Standard_Integer argc = pilot->NbWords();
529   const Standard_CString arg1 = pilot->Arg(1);
530   const Standard_CString arg2 = pilot->Arg(2);
531   Message_Messenger::StreamBuffer sout = Message::SendInfo();
532   if (argc < 3) { sout<<" Give signature name + n0 or id of entity"<<std::endl; return IFSelect_RetError; }
533   DeclareAndCast(IFSelect_Signature,sign,WS->NamedItem(arg1));
534   if (sign.IsNull()) { sout<<"Not a signature : "<<arg1<<std::endl; return IFSelect_RetError; }
535   Standard_Integer num = pilot->Number(arg2);
536   Handle(Standard_Transient) ent = WS->StartingEntity (num);
537   if (num == 0) return IFSelect_RetError;
538   sout<<"Entity n0 "<<num<<" : "<<WS->SignValue(sign,ent)<<std::endl;
539   return IFSelect_RetVoid;
540 }
541
542 static IFSelect_ReturnStatus funqp
543   (const Handle(IFSelect_SessionPilot)& pilot)
544 {
545   Handle(IFSelect_WorkSession) WS = pilot->Session();
546   Standard_Integer argc = pilot->NbWords();
547   const Standard_CString arg1 = pilot->Arg(1);
548   const Standard_CString arg2 = pilot->Arg(2);
549   Message_Messenger::StreamBuffer sout = Message::SendInfo();
550   if (argc < 3) { sout<<" Give 2 numeros or labels : dad son"<<std::endl; return IFSelect_RetError; }
551   Standard_Integer n1 = WS->NumberFromLabel(arg1);
552   Standard_Integer n2 = WS->NumberFromLabel(arg2);
553   sout<<"QueryParent for dad:"<<arg1<<":"<<n1<<" and son:"<<arg2<<":"<<n2<<std::endl;
554   Standard_Integer qp = WS->QueryParent(WS->StartingEntity(n1),WS->StartingEntity(n2));
555   if (qp < 0) sout<<arg1<<" is not super-entity of "<<arg2<<std::endl;
556   else if (qp == 0) sout<<arg1<<" is same as "<<arg2<<std::endl;
557   else sout<<arg1<<" is super-entity of "<<arg2<<" , max level found="<<qp<<std::endl;
558 //  sout<<" Trouve "<<qp<<std::endl;
559   return IFSelect_RetVoid;
560 }
561   
562
563 static IFSelect_ReturnStatus fun12
564   (const Handle(IFSelect_SessionPilot)& pilot)
565 {
566   Handle(IFSelect_WorkSession) WS = pilot->Session();
567 //        ****    DumpShare         ****
568   WS->DumpShare();  return IFSelect_RetVoid;
569 }
570
571 static IFSelect_ReturnStatus fun13
572   (const Handle(IFSelect_SessionPilot)& pilot)
573 {
574   Handle(IFSelect_WorkSession) WS = pilot->Session();
575 //        ****    ListItems         ****
576   WS->ListItems(pilot->Arg(1));  return IFSelect_RetVoid;
577 }
578
579 static IFSelect_ReturnStatus fun14
580   (const Handle(IFSelect_SessionPilot)& pilot)
581 {
582   Handle(IFSelect_WorkSession) WS = pilot->Session();
583   Standard_Integer argc = pilot->NbWords();
584   const Standard_CString arg1 = pilot->Arg(1);
585 //        ****    NewInt            ****
586   Message_Messenger::StreamBuffer sout = Message::SendInfo();
587   if (argc < 1) { sout<<"Donner la valeur entiere pour IntParam"<<std::endl; return IFSelect_RetError; }
588   Handle(IFSelect_IntParam) intpar = new IFSelect_IntParam;
589   if (argc >= 1)       intpar->SetValue(atoi(arg1));
590   return pilot->RecordItem (intpar);
591 }
592
593 static IFSelect_ReturnStatus fun15
594   (const Handle(IFSelect_SessionPilot)& pilot)
595 {
596   Handle(IFSelect_WorkSession) WS = pilot->Session();
597   Standard_Integer argc = pilot->NbWords();
598   const Standard_CString arg1 = pilot->Arg(1);
599   const Standard_CString arg2 = pilot->Arg(2);
600 //        ****    SetInt            ****
601   Message_Messenger::StreamBuffer sout = Message::SendInfo();
602   if (argc < 3)
603     { sout<<"Donner 2 arguments : nom Parametre et Valeur"<<std::endl; return IFSelect_RetError; }
604   Standard_Integer val = atoi(arg2);
605   DeclareAndCast(IFSelect_IntParam,par,WS->NamedItem(arg1));
606   if (!WS->SetIntValue(par,val)) return IFSelect_RetFail;
607   return IFSelect_RetDone;
608 }
609
610 static IFSelect_ReturnStatus fun16
611   (const Handle(IFSelect_SessionPilot)& pilot)
612 {
613   Handle(IFSelect_WorkSession) WS = pilot->Session();
614   Standard_Integer argc = pilot->NbWords();
615   const Standard_CString arg1 = pilot->Arg(1);
616 //        ****    NewText           ****
617   Message_Messenger::StreamBuffer sout = Message::SendInfo();
618   if (argc < 1) { sout<<"Donner la valeur texte pour TextParam"<<std::endl; return IFSelect_RetError; }
619   Handle(TCollection_HAsciiString) textpar = new TCollection_HAsciiString();
620   if (argc >= 1) textpar->AssignCat(arg1);
621   return pilot->RecordItem (textpar);
622 }
623
624 static IFSelect_ReturnStatus fun17
625   (const Handle(IFSelect_SessionPilot)& pilot)
626 {
627   Handle(IFSelect_WorkSession) WS = pilot->Session();
628   Standard_Integer argc = pilot->NbWords();
629   const Standard_CString arg1 = pilot->Arg(1);
630   const Standard_CString arg2 = pilot->Arg(2);
631 //        ****    SetText           ****
632   Message_Messenger::StreamBuffer sout = Message::SendInfo();
633   if (argc < 3)
634     { sout<<"Donner 2 arguments : nom Parametre et Valeur"<<std::endl; return IFSelect_RetError; }
635   DeclareAndCast(TCollection_HAsciiString,par,WS->NamedItem(arg1));
636   if (!WS->SetTextValue(par,arg2)) return IFSelect_RetFail;
637   return IFSelect_RetDone;
638 }
639
640 static IFSelect_ReturnStatus fun19
641   (const Handle(IFSelect_SessionPilot)& pilot)
642 {
643   Handle(IFSelect_WorkSession) WS = pilot->Session();
644   Standard_Integer argc = pilot->NbWords();
645   const Standard_CString arg1 = pilot->Arg(1);
646 //        ****    DumpSel           ****
647   Message_Messenger::StreamBuffer sout = Message::SendInfo();
648   if (argc < 2) { sout<<"Give 1 argument : Selection Name"<<std::endl; return IFSelect_RetError; }
649   WS->DumpSelection (GetCasted(IFSelect_Selection,WS->NamedItem(arg1)));
650   return IFSelect_RetVoid;
651 }
652
653 static IFSelect_ReturnStatus fun20
654   (const Handle(IFSelect_SessionPilot)& pilot)
655 {
656   Handle(IFSelect_WorkSession) WS = pilot->Session();
657   Standard_Integer argc = pilot->NbWords();
658 //        ****    EvalSel           ****
659 //        ****    GiveList          ****
660 //        ****    GiveShort GivePointed  ****
661 //        ****    MakeList          ****
662   char mode = pilot->Arg(0)[0];  // givelist/makelist
663   if (mode == 'g') mode = pilot->Arg(0)[4];  // l list  s short  p pointed
664   Message_Messenger::StreamBuffer sout = Message::SendInfo();
665   if (argc < 2) { sout<<"Give Entity ID, or Selection Name [+ optional other selection or entity]"<<std::endl; return IFSelect_RetError; }
666
667 //    MakeList : sur Pointed existante ou a creer
668   Handle(IFSelect_SelectPointed) pnt;
669   if (mode == 'm') {
670     const Standard_CString arg1 = pilot->Arg(1);
671     Handle(Standard_Transient) item = WS->NamedItem (arg1);
672     pnt = GetCasted(IFSelect_SelectPointed,item);
673     if (!pnt.IsNull()) {
674       sout<<arg1<<":Already existing Selection for List, cleared then filled"<<std::endl;
675       pnt->Clear();
676     } else if (!item.IsNull()) {
677       sout<<arg1<<":Already existing Item not for a List, command ignored"<<std::endl;
678       return IFSelect_RetFail;
679     } else {
680       pnt = new IFSelect_SelectPointed;
681       WS->AddNamedItem (arg1,pnt);
682     }
683   }
684
685   Handle(TColStd_HSequenceOfTransient) result =
686     IFSelect_Functions::GiveList (WS,pilot->CommandPart( (mode == 'm' ? 2 : 1) ));
687   if (result.IsNull()) return IFSelect_RetError;
688   Interface_EntityIterator iter (result);
689   sout<<pilot->CommandPart( (mode == 'm' ? 2 : 1) )<<" : ";
690   if      (mode == 'l')   WS->ListEntities (iter, 0, sout);
691   else if (mode == 's' || mode == 'm') WS->ListEntities (iter, 2, sout);
692   else if (mode == 'p') {
693     sout<<iter.NbEntities()<<" Entities : ";
694     for (iter.Start(); iter.More(); iter.Next())
695       sout<<" +"<<WS->StartingNumber (iter.Value());
696     sout<<std::endl;
697   }
698
699   if (!pnt.IsNull()) {
700     pnt->SetList (result);
701     sout<<"List set to a SelectPointed : "<<pilot->Arg(1)<<std::endl;
702     sout<<"Later editable by command setlist"<<std::endl;
703   }
704
705   return IFSelect_RetVoid;
706 }
707
708 static IFSelect_ReturnStatus fun20c
709   (const Handle(IFSelect_SessionPilot)& pilot)
710 {
711   Handle(IFSelect_WorkSession) WS = pilot->Session();
712   Standard_Integer argc = pilot->NbWords();
713 //        ****    GiveCount         ****
714   Message_Messenger::StreamBuffer sout = Message::SendInfo();
715   if (argc < 2) { sout<<"Give Entity ID, or Selection Name [+ optional other selection or entity]"<<std::endl; return IFSelect_RetError; }
716 //  WS->EvaluateSelection(GetCasted(IFSelect_Selection,WS->NamedItem(arg1)));
717   Handle(TColStd_HSequenceOfTransient) result =
718     IFSelect_Functions::GiveList (WS,pilot->CommandPart(1));
719   if (result.IsNull()) return IFSelect_RetError;
720   sout<<pilot->CommandPart(1)<<" : List of "<<result->Length()<<" Entities"<<std::endl;
721   return IFSelect_RetVoid;
722 }
723
724 static IFSelect_ReturnStatus funselsuite
725   (const Handle(IFSelect_SessionPilot)& pilot)
726 {
727   Handle(IFSelect_WorkSession) WS = pilot->Session();
728   Standard_Integer argc = pilot->NbWords();
729 //        ****    SelSuite         ****
730   Message_Messenger::StreamBuffer sout = Message::SendInfo();
731   if (argc < 2) { sout<<"Give Entity ID, or Selection Name [+ optional other selection or entity]"<<std::endl; return IFSelect_RetError; }
732 //  WS->EvaluateSelection(GetCasted(IFSelect_Selection,WS->NamedItem(arg1)));
733   Handle(IFSelect_SelectSuite) selsuite = new IFSelect_SelectSuite;
734
735   for (Standard_Integer i = 1; i < argc; i ++) {
736     Handle(IFSelect_Selection) sel = WS->GiveSelection(pilot->Arg(i));
737     if (!selsuite->AddInput(sel)) {
738       sout<<pilot->Arg(i-1)<<" : not a SelectDeduct, no more can be added. Abandon"<<std::endl;
739       return IFSelect_RetError;
740     }
741   }
742   selsuite->SetLabel (pilot->CommandPart(1));
743   return pilot->RecordItem (selsuite);
744 }
745
746
747 static IFSelect_ReturnStatus fun21
748   (const Handle(IFSelect_SessionPilot)& pilot)
749 {
750   Handle(IFSelect_WorkSession) WS = pilot->Session();
751 //        ****    ClearItems           ****
752   WS->ClearItems();  WS->ClearFinalModifiers();  WS->ClearShareOut(Standard_False);
753   return IFSelect_RetDone;
754 }
755
756 static IFSelect_ReturnStatus fun22
757   (const Handle(IFSelect_SessionPilot)& pilot)
758 {
759   Handle(IFSelect_WorkSession) WS = pilot->Session();
760   Standard_Integer argc = pilot->NbWords();
761   const Standard_CString arg1 = pilot->Arg(1);
762 //        ****    ClearData           ****
763   Standard_Integer mode = -1;
764   if (argc >= 2) {
765     if (arg1[0] == 'a') mode = 1;
766     if (arg1[0] == 'g') mode = 2;
767     if (arg1[0] == 'c') mode = 3;
768     if (arg1[0] == 'p') mode = 4;
769     if (arg1[0] == '?') mode = -1;
770   }
771   else mode = 0;
772   Message_Messenger::StreamBuffer sout = Message::SendInfo();
773   if (mode <= 0) {
774     if (mode < 0) sout<<"Give a suitable mode";
775     sout<<"  Available Modes :\n"
776       <<" a : all data    g : graph+check  c : check  p : selectpointed"<<std::endl;
777     return (mode < 0 ? IFSelect_RetError : IFSelect_RetVoid);
778   }
779   WS->ClearData (mode);
780   return IFSelect_RetDone;
781 }
782
783 static IFSelect_ReturnStatus fun24
784   (const Handle(IFSelect_SessionPilot)& pilot)
785 {
786   Handle(IFSelect_WorkSession) WS = pilot->Session();
787   Standard_Integer argc = pilot->NbWords();
788 //        ****    Item Label         ****
789   Message_Messenger::StreamBuffer sout = Message::SendInfo();
790   TCollection_AsciiString label;
791   if (argc < 2) { sout<<" Give  label to search"<<std::endl;  return IFSelect_RetError;  }
792   for (int i = 1; i < argc; i ++) {
793     label.AssignCat(pilot->Arg(i));
794     if (i < argc-1) label.AssignCat(" ");
795   }
796   for (int mode = 0; mode <= 2; mode ++) {
797     int nbitems = 0;  int id;
798     sout<<"Searching label : "<<label<<". in mode ";
799     if (mode == 0) sout <<" exact" << std::endl;
800     if (mode == 1) sout <<" same head" << std::endl;
801     if (mode == 2) sout <<" search if present" << std::endl;
802     for (id = WS->NextIdentForLabel(label.ToCString(), 0,mode)  ; id != 0;
803          id = WS->NextIdentForLabel(label.ToCString(),id,mode)) {
804       sout<<" "<<id;  nbitems ++;
805     }
806     sout<<" -- giving " << nbitems << " found" << std::endl;
807   }
808   return IFSelect_RetVoid;
809 }
810
811 static IFSelect_ReturnStatus fun25
812   (const Handle(IFSelect_SessionPilot)& pilot)
813 {
814   Handle(IFSelect_WorkSession) WS = pilot->Session();
815   Standard_Integer argc = pilot->NbWords();
816   const Standard_CString arg1 = pilot->Arg(1);
817 //        ****    Save (Dump)       ****
818   Message_Messenger::StreamBuffer sout = Message::SendInfo();
819   if (argc < 2) { sout<<"Donner nom du Fichier"<<std::endl; return IFSelect_RetError; }
820   IFSelect_SessionFile dumper(WS,arg1);
821   if (!dumper.IsDone()) return IFSelect_RetFail;
822   return IFSelect_RetDone;
823 }
824
825 static IFSelect_ReturnStatus fun26
826   (const Handle(IFSelect_SessionPilot)& pilot)
827 {
828   Handle(IFSelect_WorkSession) WS = pilot->Session();
829   Standard_Integer argc = pilot->NbWords();
830   const Standard_CString arg1 = pilot->Arg(1);
831 //        ****    Restore (Dump)    ****
832   Message_Messenger::StreamBuffer sout = Message::SendInfo();
833   if (argc < 2) { sout<<"Donner nom du Fichier"<<std::endl; return IFSelect_RetError; }
834   IFSelect_SessionFile dumper(WS);
835   Standard_Integer readstat = dumper.Read(arg1);
836   if      (readstat == 0) return IFSelect_RetDone;
837   else if (readstat >  0) sout << "-- Erreur Lecture Fichier "<<arg1<<std::endl;
838   else                    sout << "-- Pas pu ouvrir Fichier "<<arg1<<std::endl;
839   return IFSelect_RetDone;
840 }
841
842 static IFSelect_ReturnStatus fun27
843   (const Handle(IFSelect_SessionPilot)& pilot)
844 {
845   Standard_Integer argc = pilot->NbWords();
846   Handle(IFSelect_WorkSession) WS = pilot->Session();
847   const Standard_CString arg1 = pilot->Arg(1);
848   const Standard_CString arg2 = pilot->Arg(2);
849 //        ****    Param(Value)         ****
850   Message_Messenger::StreamBuffer sout = Message::SendInfo();
851   if (argc < 2) {
852     Handle(TColStd_HSequenceOfHAsciiString) li = Interface_Static::Items();
853     Standard_Integer i,nb = li->Length();
854     sout<<" List of parameters : "<<nb<<" items : "<<std::endl;
855     for (i = 1; i <= nb; i ++) {
856       sout<<li->Value(i)->String();
857       sout<<" : "<<Interface_Static::CVal(li->Value(i)->ToCString())<<std::endl;
858     }
859     return IFSelect_RetVoid;
860   } else if (atoi(arg1) > 0) {
861     Standard_Integer use = atoi (arg1);
862     WS->TraceStatics (use);
863   } else {
864     if (argc > 2) sout<<"     FORMER STATUS of Static Parameter "<<arg1<<std::endl;
865     else          sout<<"     ACTUAL STATUS of Static Parameter "<<arg1<<std::endl;
866     if (!Interface_Static::IsPresent(arg1)) { sout<<" Parameter "<<arg1<<" undefined"<<std::endl; return IFSelect_RetError; }
867     if (!Interface_Static::IsSet(arg1)) sout<<" Parameter "<<arg1<<" not valued"<<std::endl;
868     else if (argc == 2) Interface_Static::Static (arg1) -> Print (sout);
869     else sout<<" Value : "<<Interface_Static::CVal(arg1)<<std::endl;
870
871     if (argc == 2) sout<<"To modify, param name_param new_val"<<std::endl;
872     else {
873       sout<<" New demanded value : "<<arg2;
874       if (Interface_Static::SetCVal (arg1,arg2))
875         {  sout<<"   OK"<<std::endl;  return IFSelect_RetDone;  }
876       else  {  sout <<" , refused"<<std::endl;  return IFSelect_RetError;  }
877     }
878   }
879   return IFSelect_RetVoid;
880 }
881
882 static IFSelect_ReturnStatus fun29
883   (const Handle(IFSelect_SessionPilot)& pilot)
884 {
885   Handle(IFSelect_WorkSession) WS = pilot->Session();
886 //        ****    SentFiles         ****
887   Handle(TColStd_HSequenceOfHAsciiString) list = WS->SentFiles();
888   Message_Messenger::StreamBuffer sout = Message::SendInfo();
889   if (list.IsNull())
890     { sout<<"List of Sent Files not enabled"<<std::endl; return IFSelect_RetVoid; }
891   Standard_Integer i, nb = list->Length();
892   sout<<"  Sent Files : "<<nb<<" : "<<std::endl;
893   for (i = 1; i <= nb; i ++)
894     sout<<list->Value(i)->ToCString()<<std::endl; 
895   return IFSelect_RetVoid;
896 }
897
898 static IFSelect_ReturnStatus fun30
899   (const Handle(IFSelect_SessionPilot)& pilot)
900 {
901   Handle(IFSelect_WorkSession) WS = pilot->Session();
902   Standard_Integer argc = pilot->NbWords();
903   const Standard_CString arg1 = pilot->Arg(1);
904 //        ****    FilePrefix        ****
905   Message_Messenger::StreamBuffer sout = Message::SendInfo();
906   if (argc < 2) {
907     if (WS->FilePrefix().IsNull()) sout<<"Pas de prefixe defini"<<std::endl;
908     else sout<<"Prefixe : "<<WS->FilePrefix()->ToCString()<<std::endl;
909     sout<<"Pour changer :  filepref newprefix"<<std::endl;
910     return IFSelect_RetVoid;
911   }
912   WS->SetFilePrefix(arg1);
913   return IFSelect_RetDone;
914 }
915
916 static IFSelect_ReturnStatus fun31
917   (const Handle(IFSelect_SessionPilot)& pilot)
918 {
919   Handle(IFSelect_WorkSession) WS = pilot->Session();
920   Standard_Integer argc = pilot->NbWords();
921   const Standard_CString arg1 = pilot->Arg(1);
922 //        ****    FileExtension     ****
923   Message_Messenger::StreamBuffer sout = Message::SendInfo();
924   if (argc < 2) {
925     if (WS->FileExtension().IsNull()) sout<<"Pas d extension definie"<<std::endl;
926     else sout<<"Extension : "<<WS->FileExtension()->ToCString()<<std::endl;
927     sout<<"Pour changer :  fileext newext"<<std::endl;
928     return IFSelect_RetVoid;
929   }
930   WS->SetFileExtension(arg1);
931   return IFSelect_RetDone;
932 }
933
934 static IFSelect_ReturnStatus fun32
935   (const Handle(IFSelect_SessionPilot)& pilot)
936 {
937   Handle(IFSelect_WorkSession) WS = pilot->Session();
938   Standard_Integer argc = pilot->NbWords();
939   const Standard_CString arg1 = pilot->Arg(1);
940   const Standard_CString arg2 = pilot->Arg(2);
941 //        ****    FileRoot          ****
942   Message_Messenger::StreamBuffer sout = Message::SendInfo();
943   if (argc < 2) { sout<<"Donner Dispatch et nom de Root"<<std::endl; return IFSelect_RetError; }
944   DeclareAndCast(IFSelect_Dispatch,disp,WS->NamedItem(arg1));
945   if (argc < 3) {
946     if (WS->FileRoot(disp).IsNull()) sout<<"Pas de racine definie pour "<<arg1<<std::endl;
947     else sout<<"Racine pour "<<arg1<<" : "<<WS->FileRoot(disp)->ToCString()<<std::endl;
948     sout<<"Pour changer :  fileroot nomdisp newroot"<<std::endl;
949     return IFSelect_RetVoid;
950   }
951   if (!WS->SetFileRoot(disp,arg2)) return IFSelect_RetFail;
952   return IFSelect_RetDone;
953 }
954
955 static IFSelect_ReturnStatus fun33
956   (const Handle(IFSelect_SessionPilot)& pilot)
957 {
958   Handle(IFSelect_WorkSession) WS = pilot->Session();
959   Standard_Integer argc = pilot->NbWords();
960   const Standard_CString arg1 = pilot->Arg(1);
961 //        ****    Default File Root     ****
962   Message_Messenger::StreamBuffer sout = Message::SendInfo();
963   if (argc < 2) {
964     if (WS->DefaultFileRoot().IsNull()) sout<<"Pas de racine par defaut definie"<<std::endl;
965     else sout<<"Racine par defaut : "<<WS->DefaultFileRoot()->ToCString()<<std::endl;
966     sout<<"Pour changer :  filedef newdef"<<std::endl;
967     return IFSelect_RetVoid;
968   }
969   WS->SetDefaultFileRoot(arg1);
970   return IFSelect_RetDone;
971 }
972
973 static IFSelect_ReturnStatus fun34
974   (const Handle(IFSelect_SessionPilot)& pilot)
975 {
976   Handle(IFSelect_WorkSession) WS = pilot->Session();
977 //        ****    EvalFile          ****
978   Message_Messenger::StreamBuffer sout = Message::SendInfo();
979   if (!WS->HasModel()) 
980     {  sout<<"Pas de Modele charge, abandon"<<std::endl;  return IFSelect_RetFail; }
981
982   sout<<"Evaluation avec Memorisation des resultats"<<std::endl;
983   WS->EvaluateFile();
984   Standard_Integer nbf = WS->NbFiles();
985   for (Standard_Integer i = 1; i <= nbf; i ++) {
986     Handle(Interface_InterfaceModel) mod = WS->FileModel(i);
987     if (mod.IsNull())
988       {  sout<<"Modele "<<i<<" Model non genere ..."<<std::endl; continue;  }
989     TCollection_AsciiString name = WS->FileName(i);
990     sout<<"Fichier n0 "<<i<<" Nb Entites : "<<mod->NbEntities()<<"  Nom: ";
991     sout<<name<<std::endl;
992   }
993   return IFSelect_RetDone;
994 }
995
996 static IFSelect_ReturnStatus fun35
997   (const Handle(IFSelect_SessionPilot)& pilot)
998 {
999   Handle(IFSelect_WorkSession) WS = pilot->Session();
1000 //        ****    ClearFile          ****
1001   WS->ClearFile();  return IFSelect_RetDone;
1002 }
1003
1004 static IFSelect_ReturnStatus fun36
1005   (const Handle(IFSelect_SessionPilot)& pilot)
1006 {
1007   Handle(IFSelect_WorkSession) WS = pilot->Session();
1008   Standard_Integer argc = pilot->NbWords();
1009 //        ****    Split              ****
1010   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1011   IFSelect_ReturnStatus stat = IFSelect_RetVoid;
1012   if (argc < 2) sout<<"Split : derniere liste de dispatches definie"<<std::endl;
1013   else {
1014     WS->ClearShareOut(Standard_True);
1015     for (Standard_Integer i = 1; i < argc; i ++) {
1016       DeclareAndCast(IFSelect_Dispatch,disp,WS->NamedItem(pilot->Arg(i)));
1017       if (disp.IsNull()) {
1018         sout<<"Pas un dispatch:"<<pilot->Arg(i)<<", Splitt abandonne"<<std::endl;
1019         stat = IFSelect_RetError;
1020       }
1021       else WS->SetActive(disp,Standard_True);
1022     }
1023   }
1024   if (stat ==  IFSelect_RetError) return stat;
1025   WS->BeginSentFiles(Standard_True);
1026   if (!WS->SendSplit()) return IFSelect_RetFail;
1027   return IFSelect_RetDone;
1028 }
1029
1030 static IFSelect_ReturnStatus fun37
1031   (const Handle(IFSelect_SessionPilot)& pilot)
1032 {
1033   Handle(IFSelect_WorkSession) WS = pilot->Session();
1034   Standard_Integer argc = pilot->NbWords();
1035   const Standard_CString arg1 = pilot->Arg(1);
1036 //        ****    Remaining Data     ****
1037   char mode = '?';  IFSelect_RemainMode numod = IFSelect_RemainDisplay;
1038   if (argc >= 2) mode = arg1[0];
1039   if      (mode == 'u') numod = IFSelect_RemainUndo;
1040   else if (mode == 'l') numod = IFSelect_RemainDisplay;
1041   else if (mode == 'c') numod = IFSelect_RemainCompute;
1042   else if (mode == 'f') numod = IFSelect_RemainForget;
1043   else {
1044     Message_Messenger::StreamBuffer sout = Message::SendInfo();
1045     if (argc<2) sout<<"Donner un Mode - ";
1046     sout<<"Modes possibles : l  list, c compute, u undo, f forget"<<std::endl;
1047     if (mode == '?') return IFSelect_RetDone;   else return IFSelect_RetError;
1048   }
1049   if (!WS->SetRemaining(numod)) return IFSelect_RetVoid;
1050   return IFSelect_RetDone;
1051 }
1052
1053 static IFSelect_ReturnStatus fun38
1054   (const Handle(IFSelect_SessionPilot)& pilot)
1055 {
1056   Handle(IFSelect_WorkSession) WS = pilot->Session();
1057   Standard_Integer argc = pilot->NbWords();
1058   const Standard_CString arg1 = pilot->Arg(1);
1059   const Standard_CString arg2 = pilot->Arg(2);
1060 //        ****    SetModelContent    ****
1061   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1062   if (argc < 3) { sout<<"Donner nom selection et mode (k=keep,r=remove)"<<std::endl;  return IFSelect_RetError; }
1063   Standard_Boolean keepmode;
1064   DeclareAndCast(IFSelect_Selection,sel,WS->NamedItem(arg1));
1065   if (sel.IsNull())
1066     { sout<<"Pas de Selection de Nom : "<<arg1<<std::endl; return IFSelect_RetError; }
1067   if      (arg2[0] == 'k') {  sout<<" -- SetContent keep ..."; keepmode = Standard_True; }
1068   else if (arg2[0] == 'r') {  sout<<" -- SetContent remove ..."; keepmode = Standard_False; }
1069   else { sout<<"Donner nom selection et mode (k=keep,r=remove)"<<std::endl;  return IFSelect_RetError; }
1070   
1071   if (WS->SetModelContent(sel,keepmode)) sout<<" Done"<<std::endl;
1072   else sout<<" Result empty, ignored"<<std::endl;
1073   return IFSelect_RetDone;
1074 }
1075
1076 static IFSelect_ReturnStatus fun40
1077   (const Handle(IFSelect_SessionPilot)& pilot)
1078 {
1079   Handle(IFSelect_WorkSession) WS = pilot->Session();
1080 //        ****    ListModif          ****
1081   WS->ListFinalModifiers(Standard_True);
1082   WS->ListFinalModifiers(Standard_False);  return IFSelect_RetVoid;
1083 }
1084
1085 static IFSelect_ReturnStatus fun41
1086   (const Handle(IFSelect_SessionPilot)& pilot)
1087 {
1088   Handle(IFSelect_WorkSession) WS = pilot->Session();
1089   Standard_Integer argc = pilot->NbWords();
1090   const Standard_CString arg1 = pilot->Arg(1);
1091 //        ****    Modifier           ****
1092   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1093   if (argc < 2) { sout<<"Donner Nom du Modifier"<<std::endl;  return IFSelect_RetError; }
1094   DeclareAndCast(IFSelect_GeneralModifier,modif,WS->NamedItem(arg1));
1095   if (modif.IsNull())
1096     { sout<<"Pas de Modifier de Nom : "<<arg1<<std::endl; return IFSelect_RetVoid; }
1097   Handle(IFSelect_IntParam) low,up;
1098
1099   Handle(IFSelect_Dispatch) disp = modif->Dispatch();
1100   sout<<"Modifier : "<<arg1<<" Label : "<<modif->Label()<<std::endl;
1101   Standard_Integer rank = WS->ModifierRank(modif);
1102   if (modif->IsKind(STANDARD_TYPE(IFSelect_Modifier)))
1103     sout<< "Model Modifier n0." << rank;
1104   else sout<< "File Modifier n0." << rank;
1105   if (disp.IsNull()) sout<<"  Applique a tous les Dispatchs" << std::endl;
1106   else {
1107     sout << "  Dispatch : "<<disp->Label();
1108     if (WS->HasName(disp)) sout << " - Nom:"<<WS->Name(disp)->ToCString();
1109     sout<<std::endl;
1110   }
1111
1112   Handle(IFSelect_Selection) sel = modif->Selection();
1113   if (!sel.IsNull()) sout<<"  Selection : "<< sel->Label();
1114   if (WS->HasName(sel)) sout<<" - Nom:"<< WS->Name(sel)->ToCString();
1115   sout<<std::endl;
1116   return IFSelect_RetVoid;
1117 }
1118
1119 static IFSelect_ReturnStatus fun42
1120   (const Handle(IFSelect_SessionPilot)& pilot)
1121 {
1122   Handle(IFSelect_WorkSession) WS = pilot->Session();
1123   Standard_Integer argc = pilot->NbWords();
1124   const Standard_CString arg1 = pilot->Arg(1);
1125   const Standard_CString arg2 = pilot->Arg(2);
1126 //        ****    ModifSel           ****
1127   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1128   if (argc < 2) { sout<<"Donner Nom Modifier; + Nom Selection optionnel\n"
1129                       <<"Selection pour Mettre une Selection, sinon Annule"<<std::endl; return IFSelect_RetError; }
1130   DeclareAndCast(IFSelect_GeneralModifier,modif,WS->NamedItem(arg1));
1131   if (modif.IsNull())
1132     { sout<<"Pas un nom de Modifier : "<<arg1<<std::endl; return IFSelect_RetError;  }
1133   Handle(IFSelect_Selection) sel;
1134   if (arg2[0] != '\0') {
1135     sel = GetCasted(IFSelect_Selection,WS->NamedItem(arg2));
1136     if (sel.IsNull())
1137       { sout<<"Pas un nom de Selection : "<<arg2<<std::endl;  return IFSelect_RetError;  }
1138   }
1139   if (!WS->SetItemSelection(modif,sel)) return IFSelect_RetFail;
1140   return IFSelect_RetDone;
1141 }
1142
1143 static IFSelect_ReturnStatus fun43
1144   (const Handle(IFSelect_SessionPilot)& pilot)
1145 {
1146   Handle(IFSelect_WorkSession) WS = pilot->Session();
1147   Standard_Integer argc = pilot->NbWords();
1148   const Standard_CString arg1 = pilot->Arg(1);
1149   const Standard_CString arg2 = pilot->Arg(2);
1150 //        ****    SetAppliedModifier           ****
1151   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1152   if (argc < 2) { sout<<"Donner Nom Modifier; + Nom Dispatch ou Transformer optionnel :\n"
1153                       <<" - rien : tous Dispatches\n - Dispatch : ce Dispatch seul\n"
1154                       <<" - Transformer : pas un Dispatch mais un Transformer"<<std::endl;
1155                   return IFSelect_RetError;  }
1156   DeclareAndCast(IFSelect_GeneralModifier,modif,WS->NamedItem(arg1));
1157   if (modif.IsNull())
1158     { sout<<"Pas un nom de Modifier : "<<arg1<<std::endl;  return IFSelect_RetError;  }
1159   Handle(Standard_Transient) item;
1160   if (arg2[0] != '\0') {
1161     item = WS->NamedItem(arg2);
1162     if (item.IsNull())
1163       { sout<<"Pas un nom connu : "<<arg2<<std::endl;  return IFSelect_RetError;  }
1164   }
1165   else item = WS->ShareOut();
1166   if (!WS->SetAppliedModifier(modif,item)) return IFSelect_RetFail;
1167   return IFSelect_RetDone;
1168 }
1169
1170 static IFSelect_ReturnStatus fun44
1171   (const Handle(IFSelect_SessionPilot)& pilot)
1172 {
1173   Handle(IFSelect_WorkSession) WS = pilot->Session();
1174   Standard_Integer argc = pilot->NbWords();
1175   const Standard_CString arg1 = pilot->Arg(1);
1176 //        ****    ResetApplied (modifier)    ****
1177   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1178   if (argc < 2) { sout<<"Designer un modifier"<<std::endl; return IFSelect_RetError; }
1179   DeclareAndCast(IFSelect_GeneralModifier,modif,WS->NamedItem(arg1));
1180   if (modif.IsNull())
1181     { sout<<"Pas un nom de Modifier : "<<arg1<<std::endl;  return IFSelect_RetError;  }
1182   if (!WS->ResetAppliedModifier(modif)) return IFSelect_RetFail;
1183   return IFSelect_RetDone;
1184 }
1185
1186 static IFSelect_ReturnStatus fun45
1187   (const Handle(IFSelect_SessionPilot)& pilot)
1188 {
1189   Handle(IFSelect_WorkSession) WS = pilot->Session();
1190   Standard_Integer argc = pilot->NbWords();
1191   const Standard_CString arg1 = pilot->Arg(1);
1192   const Standard_CString arg2 = pilot->Arg(2);
1193   const Standard_CString arg3 = pilot->Arg(3);
1194 //        ****    ModifMove         ****
1195   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1196   if (argc < 4) { sout<<"modifmove MF rang1 rang2, M pour Model F pour File"<<std::endl; return IFSelect_RetError; }
1197   Standard_Boolean formodel;
1198   if      (arg1[0] == 'm' || arg1[0] == 'M') formodel = Standard_True;
1199   else if (arg1[0] == 'f' || arg1[0] == 'F') formodel = Standard_False;
1200   else { sout<<"preciser M pour Model, F pour File"<<std::endl; return IFSelect_RetError; }
1201   Standard_Integer before = atoi(arg2);
1202   Standard_Integer after  = atoi(arg3);
1203   if (before == 0 || after == 0) { sout<<"Donner 2 Entiers Positifs"<<std::endl; return IFSelect_RetError; }
1204   if (!WS->ChangeModifierRank(formodel,before,after)) return IFSelect_RetFail;
1205   return IFSelect_RetDone;
1206 }
1207
1208 static IFSelect_ReturnStatus fun51
1209   (const Handle(IFSelect_SessionPilot)& pilot)
1210 {
1211   Handle(IFSelect_WorkSession) WS = pilot->Session();
1212   Standard_Integer argc = pilot->NbWords();
1213   const Standard_CString arg1 = pilot->Arg(1);
1214   const Standard_CString arg2 = pilot->Arg(2);
1215 //        ****    DispSel           ****
1216   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1217   if (argc < 3) { sout<<"Donner Noms Dispatch et Selection Finale"<<std::endl; return IFSelect_RetError; }
1218   DeclareAndCast(IFSelect_Dispatch,disp,WS->NamedItem(arg1));
1219   if (disp.IsNull())
1220     { sout<<"Pas un nom de Dispatch : "<<arg1<<std::endl;  return IFSelect_RetError;  }
1221   DeclareAndCast(IFSelect_Selection,sel,WS->NamedItem(arg2));
1222   if (sel.IsNull())
1223     { sout<<"Pas un nom de Selection : "<<arg2<<std::endl;  return IFSelect_RetError;  }
1224   if (!WS->SetItemSelection(disp,sel)) return IFSelect_RetFail;
1225   return IFSelect_RetDone;
1226 }
1227
1228 static IFSelect_ReturnStatus fun_dispone
1229   (const Handle(IFSelect_SessionPilot)& pilot)
1230 {
1231   Handle(IFSelect_WorkSession) WS = pilot->Session();
1232 //        ****    DispOne           ****
1233   Handle(IFSelect_DispPerOne) disp = new IFSelect_DispPerOne;
1234   return pilot->RecordItem(disp);
1235 }
1236
1237 static IFSelect_ReturnStatus fun_dispglob
1238   (const Handle(IFSelect_SessionPilot)& pilot)
1239 {
1240   Handle(IFSelect_WorkSession) WS = pilot->Session();
1241 //        ****    DispGlob          ****
1242   Handle(IFSelect_DispGlobal) disp = new IFSelect_DispGlobal;
1243   return pilot->RecordItem(disp);
1244 }
1245
1246 static IFSelect_ReturnStatus fun_dispcount
1247   (const Handle(IFSelect_SessionPilot)& pilot)
1248 {
1249   Handle(IFSelect_WorkSession) WS = pilot->Session();
1250   Standard_Integer argc = pilot->NbWords();
1251   const Standard_CString arg1 = pilot->Arg(1);
1252 //        ****    DispCount         ****
1253   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1254   if (argc < 2) { sout<<"Donner Nom IntParam pour Count"<<std::endl;  return IFSelect_RetError; }
1255   DeclareAndCast(IFSelect_IntParam,par,WS->NamedItem(arg1));
1256   if (par.IsNull())
1257     { sout<<"Pas un nom de IntParam : "<<arg1<<std::endl;  return IFSelect_RetError;  }
1258   Handle(IFSelect_DispPerCount) disp = new IFSelect_DispPerCount;
1259   disp->SetCount (par);
1260   return pilot->RecordItem(disp);
1261 }
1262
1263 static IFSelect_ReturnStatus fun_dispfiles
1264   (const Handle(IFSelect_SessionPilot)& pilot)
1265 {
1266   Handle(IFSelect_WorkSession) WS = pilot->Session();
1267   Standard_Integer argc = pilot->NbWords();
1268   const Standard_CString arg1 = pilot->Arg(1);
1269 //        ****    DispFiles         ****
1270   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1271   if (argc < 2) { sout<<"Donner Nom IntParam pour NbFiles"<<std::endl;  return IFSelect_RetError; }
1272   DeclareAndCast(IFSelect_IntParam,par,WS->NamedItem(arg1));
1273   if (par.IsNull())
1274     { sout<<"Pas un nom de IntParam : "<<arg1<<std::endl;  return IFSelect_RetError;  }
1275   Handle(IFSelect_DispPerFiles) disp = new IFSelect_DispPerFiles;
1276   disp->SetCount (par);
1277   return pilot->RecordItem(disp);
1278 }
1279
1280
1281 static IFSelect_ReturnStatus fun_dispsign
1282   (const Handle(IFSelect_SessionPilot)& pilot)
1283 {
1284   Handle(IFSelect_WorkSession) WS = pilot->Session();
1285   Standard_Integer argc = pilot->NbWords();
1286   const Standard_CString arg1 = pilot->Arg(1);
1287 //        ****    DispFiles         ****
1288   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1289   if (argc < 2) { sout<<"Donner Nom Signature"<<std::endl;  return IFSelect_RetError; }
1290   DeclareAndCast(IFSelect_Signature,sig,WS->NamedItem(arg1));
1291   if (sig.IsNull())
1292     { sout<<"Pas un nom de Signature : "<<arg1<<std::endl;  return IFSelect_RetError;  }
1293   Handle(IFSelect_DispPerSignature) disp = new IFSelect_DispPerSignature;
1294   disp->SetSignCounter (new IFSelect_SignCounter(sig));
1295   return pilot->RecordItem(disp);
1296 }
1297
1298
1299 static IFSelect_ReturnStatus fun56
1300   (const Handle(IFSelect_SessionPilot)& pilot)
1301 {
1302   Handle(IFSelect_WorkSession) WS = pilot->Session();
1303   Standard_Integer argc = pilot->NbWords();
1304   const Standard_CString arg1 = pilot->Arg(1);
1305 //        ****    Dispatch           ****
1306   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1307   if (argc < 2) { sout<<"Donner Nom du Dispatch"<<std::endl;  return IFSelect_RetError; }
1308   DeclareAndCast(IFSelect_Dispatch,disp,WS->NamedItem(arg1));
1309   if (disp.IsNull()) { sout<<"Pas un dispatch : "<<arg1<<std::endl; return IFSelect_RetError;  }
1310   Standard_Integer num = WS->DispatchRank(disp);
1311   sout<<"Dispatch de Nom : "<<arg1<<" , en ShareOut, Numero "<<num<<" : ";
1312   Handle(IFSelect_Selection) sel = WS->ItemSelection(disp);
1313   Handle(TCollection_HAsciiString) selname = WS->Name(sel);
1314   if (sel.IsNull())  sout<<"Pas de Selection Finale"<<std::endl;
1315   else if (selname.IsNull()) sout<<"Selection Finale : #"<<WS->ItemIdent(sel)<<std::endl;
1316   else sout<<"Selection Finale : "<<selname->ToCString()<<std::endl;
1317   if (disp->HasRootName()) sout<<"-- Racine nom de fichier : "
1318     <<disp->RootName()->ToCString()<<std::endl;
1319   return IFSelect_RetVoid;
1320 }
1321
1322 static IFSelect_ReturnStatus fun57
1323   (const Handle(IFSelect_SessionPilot)& pilot)
1324 {
1325   Handle(IFSelect_WorkSession) WS = pilot->Session();
1326   Standard_Integer argc = pilot->NbWords();
1327   const Standard_CString arg1 = pilot->Arg(1);
1328 //        ****    Remove           ****
1329   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1330   if (argc < 2) { sout<<"Give Name to Remove !"<<std::endl;  return IFSelect_RetError; }
1331   if (!WS->RemoveNamedItem(arg1)) return IFSelect_RetFail;
1332   return IFSelect_RetDone;
1333 }
1334
1335 static IFSelect_ReturnStatus fun58
1336   (const Handle(IFSelect_SessionPilot)& pilot)
1337 {
1338   Handle(IFSelect_WorkSession) WS = pilot->Session();
1339   Standard_Integer argc = pilot->NbWords();
1340   const Standard_CString arg1 = pilot->Arg(1);
1341 //        ****    EvalDisp          ****
1342   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1343   if (argc < 3) { sout<<"evaldisp mode disp [disp ...] :  Mode + Name(s) of Dispatch(es). Mode:\n"
1344                     <<"  0 brief  1 +forgotten ents  2 +duplicata  3 1+2"<<std::endl
1345                     <<"See also : evaladisp  writedisp  xsplit"<<std::endl;
1346                   return IFSelect_RetVoid;  }
1347   Standard_Boolean OK = Standard_True;
1348   Standard_Integer i , mode = atoi(arg1);  sout<<" Mode "<<mode<<"\n";
1349   for (i = 2; i < argc; i ++) {
1350     DeclareAndCast(IFSelect_Dispatch,disp,WS->NamedItem(pilot->Arg(i)));
1351     if (disp.IsNull())
1352       { sout<<"Not a dispatch:"<<pilot->Arg(i)<<std::endl; OK = Standard_False; }
1353   }
1354   if (!OK) {
1355     sout<<"Some of the parameters are not correct"<<std::endl;
1356     return IFSelect_RetError;
1357   }
1358
1359   WS->ClearShareOut(Standard_True);
1360   for (i = 2; i < argc; i ++) {
1361     DeclareAndCast(IFSelect_Dispatch,disp,WS->NamedItem(pilot->Arg(i)));
1362     WS->SetActive(disp,Standard_True);
1363   }
1364 //      WS->EvaluateDispatch(disp,mode);
1365   WS->EvaluateComplete(mode);
1366   return IFSelect_RetVoid;
1367 }
1368
1369
1370 static IFSelect_ReturnStatus fun_evaladisp
1371   (const Handle(IFSelect_SessionPilot)& pilot)
1372 {
1373   Handle(IFSelect_WorkSession) WS = pilot->Session();
1374   Standard_Integer argc = pilot->NbWords();
1375   const Standard_CString arg1 = pilot->Arg(1);
1376 //        ****    EvalADisp [GiveList]         ****
1377   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1378   if (argc < 3) { sout<<"evaladisp mode(=0-1-2-3) disp [givelist] :  Mode + Dispatch [+ GiveList]\n  If GiveList not given, computed from Selection of the Dispatch. Mode:\n"
1379                     <<"  0 brief  1 +forgotten ents  2 +duplicata  3 1+2"<<std::endl
1380                     <<"See also : writedisp"<<std::endl;
1381                   return IFSelect_RetVoid;  }
1382   if (arg1[1] != '\0') { sout<<"first parameter : mode, must be a number between 0 and 3"<<std::endl; return IFSelect_RetError; }
1383   Standard_Integer mode = atoi(arg1);  sout<<" Mode "<<mode<<"\n";
1384 //  DeclareAndCast(IFSelect_Dispatch,disp,WS->NamedItem(pilot->Arg(2)));
1385   Handle(IFSelect_Dispatch) disp = IFSelect_Functions::GiveDispatch (WS,pilot->Arg(2),Standard_True);
1386   if (disp.IsNull())
1387     { sout<<"Not a dispatch:"<<pilot->Arg(2)<<std::endl; return IFSelect_RetError; }
1388   Handle(IFSelect_Selection) selsav = disp->FinalSelection();
1389   Handle(IFSelect_Selection) sel;
1390   if (argc > 3) {
1391     Handle(IFSelect_SelectPointed) sp = new IFSelect_SelectPointed;
1392     Handle(TColStd_HSequenceOfTransient) list = IFSelect_Functions::GiveList
1393       (pilot->Session(),pilot->CommandPart(3));
1394     Standard_Integer nb = (list.IsNull() ? 0 : list->Length());
1395     if (nb > 0)  {  sp->AddList (list);  sel = sp;  }
1396   }
1397
1398   if (sel.IsNull() && selsav.IsNull())
1399     { sout<<"No Selection nor GiveList defined"<<std::endl; return IFSelect_RetError; }
1400   if (sel.IsNull() && !selsav.IsNull()) {
1401     if (argc > 3) sout<<"GiveList is empty, hence computed from the Selection of the Dispatch"<<std::endl;
1402     sel = selsav;
1403   }
1404   disp->SetFinalSelection(sel);
1405 //  WS->ClearShareOut(Standard_True);
1406 //  WS->SetActive(disp,Standard_True);
1407   WS->EvaluateDispatch(disp,mode);
1408   disp->SetFinalSelection(selsav);
1409
1410   return IFSelect_RetVoid;
1411 }
1412
1413 static IFSelect_ReturnStatus fun_writedisp
1414   (const Handle(IFSelect_SessionPilot)& pilot)
1415 {
1416   Handle(IFSelect_WorkSession) WS = pilot->Session();
1417   Standard_Integer argc = pilot->NbWords();
1418   const Standard_CString arg1 = pilot->Arg(1);
1419 //        ****    EvalADisp [GiveList]         ****
1420   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1421   if (argc < 3) { sout<<"writedisp filename disp [givelist] :  FileName + Dispatch [+ GiveList]\n  If GiveList not given, computed from Selection of the Dispatch.\n"
1422                     <<"FileName : rootname.ext will gives rootname_1.ext etc...\n"
1423                     <<"  path/rootname.ext gives  path/rootname_1.ext etc...\n"
1424                     <<"See also : evaladisp"<<std::endl;
1425                   return IFSelect_RetVoid;  }
1426   TCollection_AsciiString prefix,rootname,suffix;
1427   SplitFileName (arg1,prefix,rootname,suffix);
1428   if (rootname.Length() == 0 || suffix.Length() == 0) {
1429     sout<<"Empty Root Name or Extension"<<std::endl;
1430     return IFSelect_RetError;
1431   }
1432
1433 //  DeclareAndCast(IFSelect_Dispatch,disp,WS->NamedItem(pilot->Arg(2)));
1434   Handle(IFSelect_Dispatch) disp = IFSelect_Functions::GiveDispatch (WS,pilot->Arg(2),Standard_True);
1435   if (disp.IsNull())
1436     { sout<<"Not a dispatch:"<<pilot->Arg(2)<<std::endl; return IFSelect_RetError; }
1437   Handle(IFSelect_Selection) selsav = disp->FinalSelection();
1438   Handle(IFSelect_Selection) sel;
1439   if (argc > 3) {
1440     Handle(IFSelect_SelectPointed) sp = new IFSelect_SelectPointed;
1441     Handle(TColStd_HSequenceOfTransient) list = IFSelect_Functions::GiveList
1442       (pilot->Session(),pilot->CommandPart(3));
1443     Standard_Integer nb = (list.IsNull() ? 0 : list->Length());
1444     if (nb > 0)  {  sp->AddList (list);  sel = sp;  }
1445   }
1446
1447   if (sel.IsNull() && selsav.IsNull())
1448     { sout<<"No Selection nor GiveList defined"<<std::endl; return IFSelect_RetError; }
1449   if (sel.IsNull() && !selsav.IsNull()) {
1450     if (argc > 3) sout<<"GiveList is empty, hence computed from the Selection of the Dispatch"<<std::endl;
1451     sel = selsav;
1452   }
1453
1454   WS->ClearShareOut(Standard_True);
1455   disp->SetFinalSelection(sel);
1456   WS->SetActive(disp,Standard_True);
1457   WS->BeginSentFiles(Standard_True);
1458
1459   WS->SetFilePrefix    (prefix.ToCString());
1460   WS->SetFileExtension (suffix.ToCString());
1461   WS->SetFileRoot(disp,rootname.ToCString());
1462
1463   Standard_Boolean OK = WS->SendSplit();
1464   disp->SetFinalSelection(selsav);
1465   return (OK ? IFSelect_RetDone : IFSelect_RetFail);
1466 }
1467
1468
1469 static IFSelect_ReturnStatus fun59
1470   (const Handle(IFSelect_SessionPilot)& pilot)
1471 {
1472   Handle(IFSelect_WorkSession) WS = pilot->Session();
1473   Standard_Integer argc = pilot->NbWords();
1474   const Standard_CString arg1 = pilot->Arg(1);
1475 //        ****    EvalComplete      ****
1476   Standard_Integer mode = 0;
1477   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1478   if (argc < 2) sout << " -- mode par defaut 0\n";
1479   else { mode = atoi(arg1); sout << " -- mode : " << mode << std::endl;  }
1480   WS->EvaluateComplete(mode);  return IFSelect_RetVoid;
1481 }
1482
1483 static IFSelect_ReturnStatus fun60
1484   (const Handle(IFSelect_SessionPilot)& pilot)
1485 {
1486   Handle(IFSelect_WorkSession) WS = pilot->Session();
1487 //        ****    LastRunCheckList    ****
1488   Interface_CheckIterator chlist = WS->LastRunCheckList();
1489   Handle(IFSelect_CheckCounter) counter = new IFSelect_CheckCounter(0);
1490   counter->Analyse(chlist,WS->Model(),Standard_False);
1491   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1492   counter->PrintCount (sout);
1493   return IFSelect_RetVoid;
1494 }
1495
1496 static IFSelect_ReturnStatus fun61
1497   (const Handle(IFSelect_SessionPilot)& pilot)
1498 {
1499   Handle(IFSelect_WorkSession) WS = pilot->Session();
1500   Standard_Integer argc = pilot->NbWords();
1501   const Standard_CString arg1 = pilot->Arg(1);
1502 //        ****    RunTransformer    ****
1503   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1504   if (argc < 2) { sout<<"Donner Nom de Transformer"<<std::endl; return IFSelect_RetError;  }
1505   DeclareAndCast(IFSelect_Transformer,tsf,WS->NamedItem(arg1));
1506   Standard_Integer effect = WS->RunTransformer(tsf);
1507   switch (effect) {
1508     case -4 : sout<<"Edition sur place, nouveau Protocole, erreur recalcul graphe"<<std::endl; break;
1509     case -3 : sout<<"Erreur, Transformation ignoree"<<std::endl; break;
1510     case -2 : sout<<"Erreur sur edition sur place, risque de corruption (verifier)"<<std::endl; break;
1511     case -1 : sout<<"Erreur sur edition locale, risque de corruption (verifier)"<<std::endl; break;
1512     case  0 :
1513       if   (tsf.IsNull()) sout<<"Erreur, pas un Transformer: "<<arg1<<std::endl;
1514       else sout<<"Execution non faite"<<std::endl;
1515               break;
1516     case  1 : sout<<"Transformation locale (graphe non touche)"<<std::endl; break;
1517     case  2 : sout<<"Edition sur place (graphe recalcule)"<<std::endl;  break;
1518     case  3 : sout<<"Modele reconstruit"<<std::endl; break;
1519     case  4 : sout<<"Edition sur place, nouveau Protocole"<<std::endl;  break;
1520     case  5 : sout<<"Nouveau Modele avec nouveau Protocole"<<std::endl; break;
1521     default : break;
1522   }
1523   return ((effect > 0) ? IFSelect_RetDone : IFSelect_RetFail);
1524 }
1525
1526 static IFSelect_ReturnStatus fun62
1527   (const Handle(IFSelect_SessionPilot)& pilot)
1528 {
1529   Handle(IFSelect_WorkSession) WS = pilot->Session();
1530 //        ****    TransformStandard Copy         ****
1531   return pilot->RecordItem(WS->NewTransformStandard(Standard_True));
1532 }
1533
1534 static IFSelect_ReturnStatus fun63
1535   (const Handle(IFSelect_SessionPilot)& pilot)
1536 {
1537   Handle(IFSelect_WorkSession) WS = pilot->Session();
1538 //        ****    TransformStandard OntheSpot         ****
1539   return pilot->RecordItem(WS->NewTransformStandard(Standard_False));
1540 }
1541
1542 static IFSelect_ReturnStatus fun6465
1543   (const Handle(IFSelect_SessionPilot)& pilot)
1544 {
1545   Handle(IFSelect_WorkSession) WS = pilot->Session();
1546   Standard_Integer argc = pilot->NbWords();
1547   const Standard_CString arg1 = pilot->Arg(1);
1548 //        ****    Run Modifier avec Standard Copy     ****
1549 //        ****    Run Modifier avec OnTheSpot         ****
1550   Standard_Boolean runcopy = (pilot->Arg(0)[3] == 'c');
1551 //  soit c est un nom, sinon c est une commande
1552   Handle(IFSelect_Modifier) modif;
1553   if (WS->NameIdent(arg1) > 0)
1554     modif = GetCasted(IFSelect_Modifier,WS->NamedItem(arg1));
1555   else {
1556     pilot->RemoveWord(0);    // c etait la commande run
1557     pilot->Perform();
1558     modif = GetCasted(IFSelect_Modifier,pilot->RecordedItem());
1559   }
1560   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1561   if (modif.IsNull())
1562     { sout<<"Pas un nom de Modifier : "<<arg1<<std::endl;  return IFSelect_RetError;  }
1563
1564   Handle(TColStd_HSequenceOfTransient) list;
1565   Handle(IFSelect_SelectPointed) sp;
1566   if (argc > 2) {
1567     list = IFSelect_Functions::GiveList (WS,pilot->CommandPart(2));
1568     sp = new IFSelect_SelectPointed;
1569     sp->SetList (list);
1570   }
1571
1572   Standard_Integer effect = 0;
1573   effect = WS->RunModifierSelected (modif,sp,runcopy);
1574 //      sout<<"Modifier applique sur TransformStandard #"<<WS->ItemIdent(tsf)<<std::endl;
1575   switch (effect) {
1576     case -4 : sout<<"Edition sur place, nouveau Protocole, erreur recalcul graphe"<<std::endl; break;
1577     case -3 : sout<<"Erreur, Transformation ignoree"<<std::endl; break;
1578     case -2 : sout<<"Erreur sur edition sur place, risque de corruption (verifier)"<<std::endl; break;
1579     case -1 : sout<<"Erreur sur edition locale, risque de corruption (verifier)"<<std::endl; break;
1580     case  0 :
1581       if   (modif.IsNull()) sout<<"Erreur, pas un Modifier: "<<arg1<<std::endl;
1582       else sout<<"Execution non faite"<<std::endl;
1583               break;
1584     case  1 : sout<<"Transformation locale (graphe non touche)"<<std::endl; break;
1585     case  2 : sout<<"Edition sur place (graphe recalcule)"<<std::endl;  break;
1586     case  3 : sout<<"Modele reconstruit"<<std::endl; break;
1587     case  4 : sout<<"Edition sur place, nouveau Protocole"<<std::endl;  break;
1588     case  5 : sout<<"Nouveau Modele avec nouveau Protocole"<<std::endl; break;
1589     default : break;
1590   }
1591   return ((effect > 0) ? IFSelect_RetDone : IFSelect_RetFail);
1592 }
1593
1594 static IFSelect_ReturnStatus fun66
1595   (const Handle(IFSelect_SessionPilot)& pilot)
1596 {
1597 //        ****    (xset) ModifReorder         ****
1598   char opt = ' ';
1599   Standard_Integer argc = pilot->NbWords();
1600   if (argc >= 2) opt = pilot->Word(1).Value(1);
1601   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1602   if (opt != 'f' && opt != 'l')
1603     { sout<<"Donner option : f -> root-first  l -> root-last"<<std::endl; return IFSelect_RetError; }
1604   return pilot->RecordItem(new IFSelect_ModifReorder(opt == 'l'));
1605 }
1606
1607 static IFSelect_ReturnStatus fun70
1608   (const Handle(IFSelect_SessionPilot)& pilot)
1609 {
1610   Handle(IFSelect_WorkSession) WS = pilot->Session();
1611   Standard_Integer argc = pilot->NbWords();
1612   const Standard_CString arg1 = pilot->Arg(1);
1613 //        ****    SelToggle         ****
1614   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1615   if (argc < 2) { sout<<"Donner Nom de Selection"<<std::endl; return IFSelect_RetError;  }
1616   DeclareAndCast(IFSelect_Selection,sel,WS->NamedItem(arg1));
1617   if (!WS->ToggleSelectExtract(sel))
1618     { sout<<"Pas une SelectExtract : "<<arg1<<std::endl; return IFSelect_RetFail;  }
1619   if (WS->IsReversedSelectExtract(sel)) sout<<arg1<<" a present Reversed"<<std::endl;
1620   else sout<<arg1<<" a present Directe"<<std::endl;
1621   return IFSelect_RetDone;
1622 }
1623
1624 static IFSelect_ReturnStatus fun71
1625   (const Handle(IFSelect_SessionPilot)& pilot)
1626 {
1627   Handle(IFSelect_WorkSession) WS = pilot->Session();
1628   Standard_Integer argc = pilot->NbWords();
1629   const Standard_CString arg1 = pilot->Arg(1);
1630   const Standard_CString arg2 = pilot->Arg(2);
1631 //        ****    SelInput          ****
1632   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1633   if (argc < 3) { sout<<"Donner Noms Selections cible et input"<<std::endl; return IFSelect_RetError; }
1634   DeclareAndCast(IFSelect_Selection,sel,WS->NamedItem(arg1));
1635   DeclareAndCast(IFSelect_Selection,sou,WS->NamedItem(arg2));
1636   if (sel.IsNull() || sou.IsNull())
1637     {  sout<<"Incorrect : "<<arg1<<","<<arg2<<std::endl;  return IFSelect_RetError;  }
1638   if (!WS->SetInputSelection(sel,sou)) { 
1639     sout<<"Nom incorrect ou Selection "<<arg1<<" ni Extract ni Deduct"<<std::endl;
1640     return IFSelect_RetFail;
1641   }
1642   return IFSelect_RetDone;
1643 }
1644
1645 static IFSelect_ReturnStatus fun72
1646   (const Handle(IFSelect_SessionPilot)& pilot)
1647 {
1648   Handle(IFSelect_WorkSession) WS = pilot->Session();
1649 //        ****    SelModelRoots     ****
1650   return pilot->RecordItem (new IFSelect_SelectModelRoots);
1651 }
1652
1653 static IFSelect_ReturnStatus fun73
1654   (const Handle(IFSelect_SessionPilot)& pilot)
1655 {
1656   Handle(IFSelect_WorkSession) WS = pilot->Session();
1657   Standard_Integer argc = pilot->NbWords();
1658   const Standard_CString arg1 = pilot->Arg(1);
1659   const Standard_CString arg2 = pilot->Arg(2);
1660 //        ****    SelRange          ****
1661   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1662   if (argc >= 2 && arg1[0] == '?') argc = 1;
1663   if (argc < 2) {
1664     sout<<"Donner la description du SelectRange"
1665       <<"    Formes admises :\n <n1> <n2>  : Range de <n1> a <n2>\n"
1666       <<" <n1> tout seul : Range n0 <n1>\n  from <n1>  : Range From <n1>\n"
1667       <<"  until <n2> : Range Until <n2>"<<std::endl;
1668     return IFSelect_RetVoid;
1669   }
1670
1671   Handle(IFSelect_IntParam) low,up;
1672   Handle(IFSelect_SelectRange) sel;
1673 //                                         Range From
1674   if (pilot->Word(1).IsEqual("from")) {
1675     if (argc < 3) { sout<<"Forme admise : from <i>"<<std::endl; return IFSelect_RetError; }
1676     low = GetCasted(IFSelect_IntParam,WS->NamedItem(arg2));
1677     sel = new IFSelect_SelectRange;
1678     sel->SetFrom (low);
1679 //                                         Range Until
1680   } else if (pilot->Word(1).IsEqual("until")) {
1681     if (argc < 3) { sout<<"Forme admise : until <i>"<<std::endl; return IFSelect_RetError; }
1682     up  = GetCasted(IFSelect_IntParam,WS->NamedItem(arg2));
1683     sel = new IFSelect_SelectRange;
1684     sel->SetUntil (up);
1685 //                                         Range One (n-th)
1686   } else if (argc < 3) {
1687     low = GetCasted(IFSelect_IntParam,WS->NamedItem(arg1));
1688     sel = new IFSelect_SelectRange;
1689     sel->SetOne (low);
1690 //                                         Range (from-to)
1691   } else {
1692     low = GetCasted(IFSelect_IntParam,WS->NamedItem(arg1));
1693     up  = GetCasted(IFSelect_IntParam,WS->NamedItem(arg2));
1694     sel = new IFSelect_SelectRange;
1695     sel->SetRange (low,up);
1696   }
1697   return pilot->RecordItem (sel);
1698 }
1699
1700 static IFSelect_ReturnStatus fun74
1701   (const Handle(IFSelect_SessionPilot)& pilot)
1702 {
1703   Handle(IFSelect_WorkSession) WS = pilot->Session();
1704 //        ****    SelRoots          ****
1705   return pilot->RecordItem (new IFSelect_SelectRoots);
1706 }
1707
1708 static IFSelect_ReturnStatus fun75
1709   (const Handle(IFSelect_SessionPilot)& pilot)
1710 {
1711   Handle(IFSelect_WorkSession) WS = pilot->Session();
1712 //        ****    SelShared         ****
1713   return pilot->RecordItem (new IFSelect_SelectShared);
1714 }
1715
1716 static IFSelect_ReturnStatus fun76
1717   (const Handle(IFSelect_SessionPilot)& pilot)
1718 {
1719   Handle(IFSelect_WorkSession) WS = pilot->Session();
1720   Standard_Integer argc = pilot->NbWords();
1721   const Standard_CString arg1 = pilot->Arg(1);
1722   const Standard_CString arg2 = pilot->Arg(2);
1723 //        ****    SelDiff           ****
1724   Handle(IFSelect_Selection) sel = new IFSelect_SelectDiff;
1725   if (sel.IsNull()) return IFSelect_RetFail;
1726   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1727   if (argc < 3) sout<<"Diff sans input : ne pas oublier de les definir (ctlmain, ctlsec)!"<<std::endl;
1728   DeclareAndCast(IFSelect_Selection,selmain,WS->NamedItem(arg1));
1729   DeclareAndCast(IFSelect_Selection,selsec ,WS->NamedItem(arg2));
1730   if (argc >= 2)
1731     if (!WS->SetControl(sel,selmain,Standard_True))
1732       sout<<"Echec ControlMain:"<<arg1<<" , a refaire (ctlmain)"<<std::endl;
1733   if (argc >= 3)
1734     if (!WS->SetControl(sel,selsec,Standard_False))
1735       sout<<"Echec ControlSecond:"<<arg2<<" , a refaire (ctlsec)"<<std::endl;
1736   return pilot->RecordItem (sel);
1737 }
1738
1739 static IFSelect_ReturnStatus fun77
1740   (const Handle(IFSelect_SessionPilot)& pilot)
1741 {
1742   Handle(IFSelect_WorkSession) WS = pilot->Session();
1743   Standard_Integer argc = pilot->NbWords();
1744   const Standard_CString arg1 = pilot->Arg(1);
1745   const Standard_CString arg2 = pilot->Arg(2);
1746 //        ****    SelControlMain       ****
1747   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1748   if (argc < 3) { sout<<"Donner Noms de Control et MainInput"<<std::endl; return IFSelect_RetError; }
1749   DeclareAndCast(IFSelect_Selection,sel,WS->NamedItem(arg1));
1750   DeclareAndCast(IFSelect_Selection,selmain,WS->NamedItem(arg2));
1751   if (WS->SetControl(sel,selmain,Standard_True)) return IFSelect_RetDone;
1752   sout<<"Nom incorrect ou Selection "<<arg1<<" pas de type Control"<<std::endl;
1753   return IFSelect_RetFail;
1754 }
1755
1756 static IFSelect_ReturnStatus fun78
1757   (const Handle(IFSelect_SessionPilot)& pilot)
1758 {
1759   Handle(IFSelect_WorkSession) WS = pilot->Session();
1760   Standard_Integer argc = pilot->NbWords();
1761   const Standard_CString arg1 = pilot->Arg(1);
1762   const Standard_CString arg2 = pilot->Arg(2);
1763 //        ****    SelControlSecond       ****
1764   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1765   if (argc < 3) { sout<<"Donner Noms de Control et SecondInput"<<std::endl; return IFSelect_RetError; }
1766   DeclareAndCast(IFSelect_Selection,sel,WS->NamedItem(arg1));
1767   DeclareAndCast(IFSelect_Selection,seldif,WS->NamedItem(arg2));
1768   if (WS->SetControl(sel,seldif,Standard_False))  return IFSelect_RetDone;
1769   sout<<"Nom incorrect ou Selection "<<arg1<<" pas de type Control"<<std::endl;
1770   return IFSelect_RetFail;
1771 }
1772
1773 static IFSelect_ReturnStatus fun79
1774   (const Handle(IFSelect_SessionPilot)& pilot)
1775 {
1776   Handle(IFSelect_WorkSession) WS = pilot->Session();
1777 //        ****    SelModelAll       ****
1778   return pilot->RecordItem (new IFSelect_SelectModelEntities);
1779 }
1780
1781 static IFSelect_ReturnStatus fun80
1782   (const Handle(IFSelect_SessionPilot)& pilot)
1783 {
1784   Handle(IFSelect_WorkSession) WS = pilot->Session();
1785   Standard_Integer argc = pilot->NbWords();
1786   const Standard_CString arg1 = pilot->Arg(1);
1787   const Standard_CString arg2 = pilot->Arg(2);
1788 //        ****    SelCombAdd        ****
1789   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1790   if (argc < 3) { sout<<"Donner n0 Combine et une Input"<<std::endl; return IFSelect_RetError; }
1791   DeclareAndCast(IFSelect_Selection,sel,WS->NamedItem(arg1));
1792   DeclareAndCast(IFSelect_Selection,seladd,WS->NamedItem(arg2));
1793   if (WS->CombineAdd(sel,seladd)) return IFSelect_RetDone;
1794   sout<<"Nom incorrect ou Selection "<<arg1<<" pas Combine"<<std::endl;
1795   return IFSelect_RetFail;
1796 }
1797
1798 static IFSelect_ReturnStatus fun81
1799   (const Handle(IFSelect_SessionPilot)& pilot)
1800 {
1801   Handle(IFSelect_WorkSession) WS = pilot->Session();
1802   Standard_Integer argc = pilot->NbWords();
1803   const Standard_CString arg1 = pilot->Arg(1);
1804   const Standard_CString arg2 = pilot->Arg(2);
1805 //        ****    SelCombRem        ****
1806   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1807   if (argc < 3) { sout<<"Donner n0 Combine et RANG a supprimer"<<std::endl; return IFSelect_RetError; }
1808   DeclareAndCast(IFSelect_Selection,sel,WS->NamedItem(arg1));
1809   DeclareAndCast(IFSelect_Selection,inp,WS->NamedItem(arg2));
1810   if (WS->CombineRemove(sel,inp)) return IFSelect_RetDone;
1811   sout<<"Nom incorrect ou Selection "<<arg1<<" ni Union ni Intersection"<<std::endl;
1812   return IFSelect_RetFail;
1813 }
1814
1815 static IFSelect_ReturnStatus fun82
1816   (const Handle(IFSelect_SessionPilot)& pilot)
1817 {
1818   Handle(IFSelect_WorkSession) WS = pilot->Session();
1819   Standard_Integer argc = pilot->NbWords();
1820   const Standard_CString arg1 = pilot->Arg(1);
1821 //        ****    SelEntNumber      ****
1822   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1823   if (argc < 2) { sout<<"Donner Nom IntParam pour n0 Entite"<<std::endl; return IFSelect_RetError; }
1824   DeclareAndCast(IFSelect_IntParam,par,WS->NamedItem(arg1));
1825   Handle(IFSelect_SelectEntityNumber) sel = new IFSelect_SelectEntityNumber;
1826   sel->SetNumber(par);
1827   return pilot->RecordItem (sel);
1828 }
1829
1830 static IFSelect_ReturnStatus fun83
1831   (const Handle(IFSelect_SessionPilot)& pilot)
1832 {
1833   Handle(IFSelect_WorkSession) WS = pilot->Session();
1834 //        ****    SelUnion          ****
1835   return pilot->RecordItem (new IFSelect_SelectUnion);
1836 }
1837
1838 static IFSelect_ReturnStatus fun84
1839   (const Handle(IFSelect_SessionPilot)& pilot)
1840 {
1841   Handle(IFSelect_WorkSession) WS = pilot->Session();
1842 //        ****    SelIntersection   ****
1843   return pilot->RecordItem (new IFSelect_SelectIntersection);
1844 }
1845
1846 static IFSelect_ReturnStatus fun85
1847   (const Handle(IFSelect_SessionPilot)& pilot)
1848 {
1849   Standard_Integer argc = pilot->NbWords();
1850   const Standard_CString arg1 = pilot->Arg(1);
1851 //        ****    SelTextType Exact ****
1852   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1853   if (argc < 2) { sout<<"Donner le TYPE a selectionner"<<std::endl; return IFSelect_RetError; }
1854   return pilot->RecordItem (new IFSelect_SelectSignature
1855                             (new IFSelect_SignType,arg1,Standard_True));
1856 }
1857
1858 static IFSelect_ReturnStatus fun86
1859   (const Handle(IFSelect_SessionPilot)& pilot)
1860 {
1861 //        ****    SelErrorEntities  ****
1862   return pilot->RecordItem (new IFSelect_SelectErrorEntities);
1863 }
1864       
1865 static IFSelect_ReturnStatus fun87
1866   (const Handle(IFSelect_SessionPilot)& pilot)
1867 {
1868 //        ****    SelUnknownEntities  **
1869   return pilot->RecordItem (new IFSelect_SelectUnknownEntities);
1870 }
1871
1872 static IFSelect_ReturnStatus fun88
1873   (const Handle(IFSelect_SessionPilot)& pilot)
1874 {
1875 //        ****    SelSharing        ****
1876   return pilot->RecordItem (new IFSelect_SelectSharing);
1877 }
1878
1879 static IFSelect_ReturnStatus fun89
1880   (const Handle(IFSelect_SessionPilot)& pilot)
1881 {
1882   Standard_Integer argc = pilot->NbWords();
1883   const Standard_CString arg1 = pilot->Arg(1);
1884 //        ****    SelTextType Contain **
1885   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1886   if (argc < 2) { sout<<"Donner le TYPE a selectionner"<<std::endl; return IFSelect_RetError; }
1887   return pilot->RecordItem (new IFSelect_SelectSignature
1888                             (new IFSelect_SignType,arg1,Standard_False));
1889 }
1890
1891 static IFSelect_ReturnStatus fun90
1892   (const Handle(IFSelect_SessionPilot)& pilot)
1893 {
1894 //        ****    SelPointed        ****
1895   Handle(IFSelect_SelectPointed) sp = new IFSelect_SelectPointed;
1896   if (pilot->NbWords() > 1) {
1897     Handle(TColStd_HSequenceOfTransient) list = IFSelect_Functions::GiveList
1898     (pilot->Session(),pilot->CommandPart(1));
1899     if (list.IsNull()) return IFSelect_RetFail;
1900     Message_Messenger::StreamBuffer sout = Message::SendInfo();
1901     sout<<"SelectPointed : "<<list->Length()<<" entities"<<std::endl;
1902     sp->AddList (list);
1903   }
1904   return pilot->RecordItem (sp);
1905 }
1906
1907 static IFSelect_ReturnStatus fun91
1908   (const Handle(IFSelect_SessionPilot)& pilot)
1909 {
1910   Handle(IFSelect_WorkSession) WS = pilot->Session();
1911   Standard_Integer argc = pilot->NbWords();
1912   const Standard_CString arg1 = pilot->Arg(1);
1913 //        ****    SetPointed (edit) / SetList (edit)    ****
1914   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1915   if (argc < 2) {
1916     sout<<"Donner NOM SelectPointed + Option(s) :\n"
1917         <<" aucune : liste des entites pointees\n"
1918         <<" 0: Clear  +nn ajout entite nn  -nn enleve nn  /nn toggle nn"<<std::endl;
1919         return IFSelect_RetError;
1920   }
1921   DeclareAndCast(IFSelect_SelectPointed,sp,WS->NamedItem(arg1));
1922   if (sp.IsNull()) { sout<<"Pas une SelectPointed:"<<arg1<<std::endl; return IFSelect_RetError; }
1923   const Handle(Interface_InterfaceModel) &model = WS->Model();  // pour Print
1924   if (argc == 2) {    // listage simple
1925     Standard_Integer nb = sp->NbItems();
1926     sout<<" SelectPointed : "<<arg1<<" : "<<nb<<" Items :"<<std::endl;
1927     for (Standard_Integer i = 1; i <= nb; i ++) {
1928       Handle(Standard_Transient) pointed = sp->Item(i);
1929       Standard_Integer id = WS->StartingNumber(pointed);
1930       if (id == 0) sout <<" (inconnu)";
1931       else  {  sout <<"  "; model->Print (pointed, sout);  }
1932     }
1933     if (nb > 0) sout<<std::endl;
1934     return IFSelect_RetDone;
1935   }
1936
1937   for (Standard_Integer ia = 2; ia < argc ; ia ++) {
1938     const TCollection_AsciiString argi = pilot->Word(ia);
1939     Standard_Integer id = pilot->Number(&(argi.ToCString())[1]);
1940     if (id == 0) {
1941       if (!argi.IsEqual("0")) sout<<"Incorrect,ignore:"<<argi<<std::endl;
1942       else {  sout<<"Clear SelectPointed"<<std::endl; sp->Clear(); }
1943     } else if (argi.Value(1) == '-') {
1944       Handle(Standard_Transient) item = WS->StartingEntity(id);
1945       if (sp->Remove(item)) sout<<"Removed:no."<<id;
1946       else sout<<" Echec Remove "<<id;
1947       sout<<": " << std::endl; 
1948       model->Print (item, sout);
1949     } else if (argi.Value(1) == '/') {
1950       Handle(Standard_Transient) item = WS->StartingEntity(id);
1951       if (sp->Remove(item)) sout<<"Toggled:n0."<<id;
1952       else sout<<" Echec Toggle "<<id;
1953       sout<<": " << std::endl; 
1954       model->Print (item, sout);
1955     } else if (argi.Value(1) == '+') {
1956       Handle(Standard_Transient) item = WS->StartingEntity(id);
1957       if (sp->Add(item)) sout<<"Added:no."<<id;
1958       else sout<<" Echec Add "<<id;
1959       sout<<": " << std::endl; 
1960       model->Print (item, sout);
1961     } else {
1962       sout<<"Ignore:"<<argi<<" , donner n0 PRECEDE de + ou - ou /"<<std::endl;
1963     }
1964   }
1965   return IFSelect_RetDone;
1966 }
1967
1968 static IFSelect_ReturnStatus fun92
1969   (const Handle(IFSelect_SessionPilot)& pilot)
1970 {
1971   Handle(IFSelect_WorkSession) WS = pilot->Session();
1972 //        ****    SelIncorrectEntities  ****
1973   WS->ComputeCheck();
1974   return pilot->RecordItem (new IFSelect_SelectIncorrectEntities);
1975 }
1976
1977 static IFSelect_ReturnStatus fun93
1978   (const Handle(IFSelect_SessionPilot)& pilot)
1979 {
1980   Standard_Integer argc = pilot->NbWords();
1981   const Standard_CString arg1 = pilot->Arg(1);
1982   const Standard_CString arg2 = pilot->Arg(2);
1983   Handle(IFSelect_WorkSession) WS = pilot->Session();
1984 //        ****    SelSignature        ****
1985   Message_Messenger::StreamBuffer sout = Message::SendInfo();
1986   if (argc < 3) { sout<<"Give name of Signature or Counter, text + option exact(D) else contains"<<std::endl; return IFSelect_RetError; }
1987   Standard_Boolean exact = Standard_True;
1988   if (argc > 3) { if (pilot->Arg(3)[0] == 'c') exact = Standard_False; }
1989
1990   DeclareAndCast(IFSelect_Signature,sign,WS->NamedItem(arg1));
1991   DeclareAndCast(IFSelect_SignCounter,cnt,WS->NamedItem(arg1));
1992   Handle(IFSelect_SelectSignature) sel;
1993
1994   if (!sign.IsNull())     sel = new IFSelect_SelectSignature (sign,arg2,exact);
1995   else if (!cnt.IsNull()) sel = new IFSelect_SelectSignature (cnt,arg2,exact);
1996   else { sout<<arg1<<":neither Signature nor Counter"<<std::endl; return IFSelect_RetError; }
1997
1998   return pilot->RecordItem(sel);
1999 }
2000
2001 static IFSelect_ReturnStatus fun94
2002   (const Handle(IFSelect_SessionPilot)& pilot)
2003 {
2004   Standard_Integer argc = pilot->NbWords();
2005   const Standard_CString arg1 = pilot->Arg(1);
2006   Handle(IFSelect_WorkSession) WS = pilot->Session();
2007 //        ****    SignCounter        ****
2008   Message_Messenger::StreamBuffer sout = Message::SendInfo();
2009   if (argc < 2) { sout<<"Donner nom signature"<<std::endl; return IFSelect_RetError; }
2010   DeclareAndCast(IFSelect_Signature,sign,WS->NamedItem(arg1));
2011   if (sign.IsNull()) { sout<<arg1<<":pas une signature"<<std::endl; return IFSelect_RetError; }
2012   Handle(IFSelect_SignCounter) cnt = new IFSelect_SignCounter (sign,Standard_True,Standard_True);
2013   return pilot->RecordItem(cnt);
2014 }
2015
2016 static IFSelect_ReturnStatus funbselected
2017   (const Handle(IFSelect_SessionPilot)& pilot)
2018 {
2019   Standard_Integer argc = pilot->NbWords();
2020   const Standard_CString arg1 = pilot->Arg(1);
2021   Handle(IFSelect_WorkSession) WS = pilot->Session();
2022 //        ****    NbSelected = GraphCounter        ****
2023   Message_Messenger::StreamBuffer sout = Message::SendInfo();
2024   if (argc < 2) { sout<<"Donner nom selection (deduction) a appliquer"<<std::endl; return IFSelect_RetError; }
2025   DeclareAndCast(IFSelect_SelectDeduct,applied,WS->GiveSelection(arg1));
2026   if (applied.IsNull()) { sout<<arg1<<":pas une SelectDeduct"<<std::endl; return IFSelect_RetError; }
2027   Handle(IFSelect_GraphCounter) cnt = new IFSelect_GraphCounter (Standard_True,Standard_True);
2028   cnt->SetApplied (applied);
2029   return pilot->RecordItem(cnt);
2030 }
2031
2032 //  #########################################
2033 //  ####    EDITOR  -  EDITFORM          ####
2034 //  #########################################
2035
2036 static IFSelect_ReturnStatus fun_editlist
2037   (const Handle(IFSelect_SessionPilot)& pilot)
2038 {
2039   Standard_Integer argc = pilot->NbWords();
2040   Message_Messenger::StreamBuffer sout = Message::SendInfo();
2041   if (argc < 2) { sout<<"Give the name of an EditForm or an Editor"<<std::endl;
2042                   return IFSelect_RetError;  }
2043   const Standard_CString arg1 = pilot->Arg(1);
2044   const Standard_CString arg2 = pilot->Arg(2);
2045   Handle(IFSelect_WorkSession) WS = pilot->Session();
2046
2047 //  EditForm
2048
2049   DeclareAndCast(IFSelect_EditForm,edf,WS->NamedItem(arg1));
2050   Handle(IFSelect_Editor) edt;
2051   if (!edf.IsNull()) {
2052     sout<<"Print EditForm "<<arg1<<std::endl;
2053     edt = edf->Editor();
2054     if (argc < 3) {
2055
2056 //       DEFINITIONS : Editor (direct ou via EditForm)
2057
2058       if (edt.IsNull()) edt = GetCasted(IFSelect_Editor,WS->NamedItem(arg1));
2059       if (edt.IsNull()) return IFSelect_RetVoid;
2060
2061       sout<<"Editor, Label : "<<edt->Label()<<std::endl;
2062       sout<<std::endl<<" --  Names (short - complete) + Labels of Values"<<std::endl;
2063       edt->PrintNames(sout);
2064       sout<<std::endl<<" --  Definitions  --"<<std::endl;
2065       edt->PrintDefs (sout);
2066       if (!edf.IsNull()) {
2067         edf->PrintDefs(sout);
2068         sout<<std::endl<<"To display values, add an option : o original  f final  m modified"<<std::endl;
2069       }
2070
2071       return IFSelect_RetVoid;
2072
2073     } else {
2074       char opt = arg2[0];
2075       Standard_Integer what = 0;
2076       if (opt == 'o') what = -1;
2077       else if (opt == 'f') what = 1;
2078
2079       edf->PrintValues (sout,what,Standard_False);
2080     }
2081   }
2082
2083   return IFSelect_RetVoid;
2084 }
2085
2086 static IFSelect_ReturnStatus fun_editvalue
2087   (const Handle(IFSelect_SessionPilot)& pilot)
2088 {
2089   Standard_Integer argc = pilot->NbWords();
2090   Message_Messenger::StreamBuffer sout = Message::SendInfo();
2091   if (argc < 3) { sout<<"Give the name of an EditForm + name of Value [+ newvalue or . to nullify]"<<std::endl;
2092                   return IFSelect_RetError;  }
2093   const Standard_CString arg1 = pilot->Arg(1);
2094   const Standard_CString arg2 = pilot->Arg(2);
2095   Handle(IFSelect_WorkSession) WS = pilot->Session();
2096   DeclareAndCast(IFSelect_EditForm,edf,WS->NamedItem(arg1));
2097   if (edf.IsNull())
2098     {  sout<<"Not an EditForm : "<<arg1<<std::endl; return IFSelect_RetError;  }
2099   Standard_Integer num = edf->NameNumber (arg2);
2100   if (num == 0) sout<<"Unknown Value Name : "<<arg2<<std::endl;
2101   if (num <  0) sout<<"Not Extracted Value Name : "<<arg2<<std::endl;
2102   if (num <= 0) return IFSelect_RetError;
2103
2104   Standard_Boolean islist = edf->Editor()->IsList(num);
2105   Standard_CString name = edf->Editor()->Name(num,Standard_True); // vrai nom
2106   Handle(TColStd_HSequenceOfHAsciiString) listr;
2107   Handle(TCollection_HAsciiString) str;
2108   sout<<"Value Name : "<<name<<(edf->IsModified(num) ? "(already edited) : " : " : ");
2109
2110   if (islist) {
2111     listr = edf->EditedList(num);
2112     if (listr.IsNull()) sout<<"(NULL LIST)"<<std::endl;
2113     else {
2114       Standard_Integer ilist,nblist = listr->Length();
2115       sout<<"(List : "<<nblist<<" Items)"<<std::endl;
2116       for (ilist = 1; ilist <= nblist; ilist ++) {
2117         str = listr->Value(ilist);
2118         sout<<"  ["<<ilist<<"]  "<< (str.IsNull() ? "(NULL)" : str->ToCString())<<std::endl;
2119       }
2120     }
2121     if (argc < 4) sout<<"To Edit, options by editval edit-form value-name ?"<<std::endl;
2122   } else {
2123     str = edf->EditedValue (num);
2124     sout<<(str.IsNull() ? "(NULL)" : str->ToCString())<<std::endl;
2125   }
2126   if (argc < 4) return IFSelect_RetVoid;
2127
2128 //  Valeur simple ou liste ?
2129   Standard_Integer numarg = 3;
2130   str.Nullify();
2131
2132   const Standard_CString argval = pilot->Arg(numarg);
2133   if (islist) {
2134     if (argval[0] == '?') {
2135       sout<<"To Edit, options"<<std::endl<<" + val : add value at end (blanks allowed)"
2136         <<std::endl<<" +nn text : insert val before item nn"<<std::endl
2137         <<" nn text : replace item nn with a new value"<<std::endl
2138         <<" -nn : remove item nn"<<std::endl<<" . : clear the list"<<std::endl;
2139       return IFSelect_RetVoid;
2140     }
2141     Standard_Boolean stated = Standard_False;
2142     Handle(IFSelect_ListEditor) listed = edf->ListEditor (num);
2143     if (listed.IsNull()) return IFSelect_RetError;
2144     if (argval[0] == '.') { listr.Nullify();  stated = listed->LoadEdited(listr); }
2145     else if (argval[0] == '+') {
2146       Standard_Integer numadd = 0;
2147       if (argval[1] != '\0') numadd = atoi(argval);
2148       stated = listed->AddValue (new TCollection_HAsciiString(pilot->CommandPart(numarg+1)),numadd);
2149     }
2150     else if (argval[0] == '-') {
2151       Standard_Integer numrem = atoi(argval);
2152       stated = listed->Remove(numrem);
2153     }
2154     else {
2155       Standard_Integer numset = atoi(argval);
2156       if (numset > 0) stated = listed->AddValue
2157         (new TCollection_HAsciiString(pilot->CommandPart(numarg+1)),numset);
2158     }
2159     if (stated) stated = edf->ModifyList (num,listed,Standard_True);
2160     if (stated) sout<<"List Edition done"<<std::endl;
2161     else sout<<"List Edition not done, option"<<argval<<std::endl;
2162   } else {
2163     if (argval[0] == '.' && argval[1] == '\0') str.Nullify();
2164     else str = new TCollection_HAsciiString (pilot->CommandPart(numarg));
2165     if (edf->Modify (num,str,Standard_True)) {
2166       sout<<"Now set to "<<(str.IsNull() ? "(NULL)" : str->ToCString())<<std::endl;
2167     } else {
2168       sout<<"Modify not done"<<std::endl;  return IFSelect_RetFail;
2169     }
2170   }
2171   return IFSelect_RetDone;
2172 }
2173
2174 static IFSelect_ReturnStatus fun_editclear
2175   (const Handle(IFSelect_SessionPilot)& pilot)
2176 {
2177   Standard_Integer argc = pilot->NbWords();
2178   Message_Messenger::StreamBuffer sout = Message::SendInfo();
2179   if (argc < 2) { sout<<"Give the name of an EditForm [+ name of Value  else all]"<<std::endl;
2180                   return IFSelect_RetError;  }
2181   const Standard_CString arg1 = pilot->Arg(1);
2182   const Standard_CString arg2 = pilot->Arg(2);
2183   Handle(IFSelect_WorkSession) WS = pilot->Session();
2184   DeclareAndCast(IFSelect_EditForm,edf,WS->NamedItem(arg1));
2185   if (edf.IsNull())
2186     {  sout<<"Not an EditForm : "<<arg1<<std::endl; return IFSelect_RetError;  }
2187   if (argc < 3) { edf->ClearEdit(); sout<<"All Modifications Cleared"<<std::endl; }
2188   else {
2189     Standard_Integer num = edf->NameNumber (arg2);
2190     if (num == 0) sout<<"Unknown Value Name : "<<arg2<<std::endl;
2191     if (num <  0) sout<<"Not Extracted Value Name : "<<arg2<<std::endl;
2192     if (num <= 0) return IFSelect_RetError;
2193     if (!edf->IsModified(num))
2194       { sout<<"Value "<<arg2<<" was not modified"<<std::endl; return IFSelect_RetVoid; }
2195     edf->ClearEdit (num);
2196     sout<<"Modification on Value "<<arg2<<" Cleared"<<std::endl;
2197   }
2198   return IFSelect_RetDone;
2199 }
2200
2201 static IFSelect_ReturnStatus fun_editapply
2202   (const Handle(IFSelect_SessionPilot)& pilot)
2203 {
2204   Standard_Integer argc = pilot->NbWords();
2205   Message_Messenger::StreamBuffer sout = Message::SendInfo();
2206   if (argc < 2) { sout<<"Give the name of an EditForm [+ option keep to re-apply edited values]"<<std::endl;
2207                   return IFSelect_RetError;  }
2208   const Standard_CString arg1 = pilot->Arg(1);
2209   const Standard_CString arg2 = pilot->Arg(2);
2210   Handle(IFSelect_WorkSession) WS = pilot->Session();
2211   DeclareAndCast(IFSelect_EditForm,edf,WS->NamedItem(arg1));
2212   if (edf.IsNull())
2213     {  sout<<"Not an EditForm : "<<arg1<<std::endl; return IFSelect_RetError;  }
2214
2215   Handle(Standard_Transient) ent = edf->Entity();
2216   Handle(Interface_InterfaceModel) model = edf->Model();
2217   if (!model.IsNull()) {
2218     if (ent.IsNull()) sout<<"Applying modifications on loaded model"<<std::endl;
2219     else {
2220       sout<<"Applying modifications on loaded entity : ";
2221       model->PrintLabel (ent, sout);
2222     }
2223   }
2224   else sout<<"Applying modifications"<<std::endl;
2225
2226   if (!edf->ApplyData (edf->Entity(),edf->Model())) {
2227     sout<<"Modifications could not be applied"<<std::endl;
2228     return IFSelect_RetFail;
2229   }
2230   sout<<"Modifications have been applied"<<std::endl;
2231
2232   Standard_Boolean stat = Standard_True;
2233   if (argc > 2 && arg2[0] == 'k') stat = Standard_False;
2234   if (stat) {
2235     edf->ClearEdit();
2236     sout<<"Edited values are cleared"<<std::endl;
2237   }
2238   else sout<<"Edited values are kept for another loading/applying"<<std::endl;
2239
2240   return IFSelect_RetDone;
2241 }
2242
2243 static IFSelect_ReturnStatus fun_editload
2244   (const Handle(IFSelect_SessionPilot)& pilot)
2245 {
2246   Standard_Integer argc = pilot->NbWords();
2247   Message_Messenger::StreamBuffer sout = Message::SendInfo();
2248   if (argc < 2) { sout<<"Give the name of an EditForm [+ Entity-Ident]"<<std::endl;
2249                   return IFSelect_RetError;  }
2250   const Standard_CString arg1 = pilot->Arg(1);
2251   const Standard_CString arg2 = pilot->Arg(2);
2252   Handle(IFSelect_WorkSession) WS = pilot->Session();
2253   DeclareAndCast(IFSelect_EditForm,edf,WS->NamedItem(arg1));
2254   if (edf.IsNull())
2255     {  sout<<"Not an EditForm : "<<arg1<<std::endl; return IFSelect_RetError;  }
2256
2257   Standard_Integer num = (argc < 3 ? 0 : pilot->Number (arg2));
2258   Standard_Boolean stat = Standard_False;
2259   if (argc < 3) {
2260     sout<<"EditForm "<<arg1<<" : Loading Model"<<std::endl;
2261     stat = edf->LoadModel(WS->Model());
2262   } else if (num <= 0) {
2263     sout<<"Not an entity ident : "<<arg2<<std::endl;
2264     return IFSelect_RetError;
2265   } else {
2266     sout<<"EditForm "<<arg1<<" : Loading Entity "<<arg2<<std::endl;
2267     stat = edf->LoadData (WS->StartingEntity(num),WS->Model());
2268   }
2269
2270   if (!stat) {
2271     sout<<"Loading not done"<<std::endl;
2272     return IFSelect_RetFail;
2273   }
2274   sout<<"Loading done"<<std::endl;
2275   return IFSelect_RetDone;
2276 }
2277
2278 //  #########################################
2279 //  ####    FONCTIONS COMPLEMENTAIRES    ####
2280 //  #########################################
2281
2282     Handle(Standard_Transient)  IFSelect_Functions::GiveEntity
2283   (const Handle(IFSelect_WorkSession)& WS,
2284    const Standard_CString name)
2285 {
2286   Handle(Standard_Transient) ent;  // demarre a Null
2287   Standard_Integer num = GiveEntityNumber(WS,name);
2288   if (num > 0) ent = WS->StartingEntity(num);
2289   return ent;
2290 }
2291
2292     Standard_Integer  IFSelect_Functions::GiveEntityNumber
2293   (const Handle(IFSelect_WorkSession)& WS,
2294    const Standard_CString name)
2295 {
2296   Standard_Integer num = 0;
2297   if (!name || name[0] == '\0') {
2298     char ligne[80];  ligne[0] = '\0';
2299     std::cin >> ligne;
2300 //    std::cin.clear();  std::cin.getline (ligne,79);
2301     if (ligne[0] == '\0') return 0;
2302     num    = WS->NumberFromLabel (ligne);
2303   }
2304   else num = WS->NumberFromLabel (name);
2305   return num;
2306 }
2307
2308     Handle(TColStd_HSequenceOfTransient)  IFSelect_Functions::GiveList
2309   (const Handle(IFSelect_WorkSession)& WS,
2310    const Standard_CString first, const Standard_CString second)
2311 {
2312   return WS->GiveList (first,second);
2313 }
2314
2315
2316 //  Function which returns an EVALUATED DISPATCH
2317 //   (could be added in WorkSession.cdl ...)
2318 //  Two modes : returns dispatch as it is, or return with edition
2319 //  Dispatch Name can be : an immediate name of already recorded Dispatch
2320 //  Or a name of dispatch + a parameter :  dispatch-name(param-value)
2321 //  According to type of Dispatch : integer , signature name
2322
2323 Handle(IFSelect_Dispatch)  IFSelect_Functions::GiveDispatch
2324   (const Handle(IFSelect_WorkSession)& WS,
2325    const Standard_CString name, const Standard_Boolean mode)
2326 {
2327   DeclareAndCast(IFSelect_Dispatch,disp,WS->NamedItem(name));
2328   if (!disp.IsNull()) return disp;    // OK as it is given
2329
2330 //   Else, let s try special cases
2331   TCollection_AsciiString nam(name);
2332   Standard_Integer paro = nam.Location(1,'(',1,nam.Length());
2333   Standard_Integer parf = nam.Location(1,')',1,nam.Length());
2334   nam.SetValue(paro,'\0'); nam.SetValue(parf,'\0');
2335   if (paro <= 0 &&parf <= 0) return disp;
2336   disp = GetCasted(IFSelect_Dispatch,WS->NamedItem(nam.ToCString()));
2337   if (disp.IsNull()) return disp;     // KO anyway
2338
2339 //  According to the type of dispatch :
2340   Message_Messenger::StreamBuffer sout = Message::SendInfo();
2341   DeclareAndCast(IFSelect_DispPerCount,dc,disp);
2342   if (!dc.IsNull()) {
2343     Standard_Integer nb = atoi( &(nam.ToCString())[paro]);
2344     if (nb <= 0) {
2345       sout<<" DispPerCount, count is not positive"<<std::endl;
2346       disp.Nullify();
2347       return disp;
2348     }
2349     if (mode) {
2350       Handle(IFSelect_IntParam) val = new IFSelect_IntParam;
2351       val->SetValue(nb);
2352       dc->SetCount (val);
2353     }
2354     return dc;
2355   }
2356   DeclareAndCast(IFSelect_DispPerFiles,dp,disp);
2357   if (!dp.IsNull()) {
2358     Standard_Integer nb = atoi( &(nam.ToCString())[paro]);
2359     if (nb <= 0) {
2360       sout<<" DispPerFiles, count is not positive"<<std::endl;
2361       disp.Nullify();
2362       return disp;
2363     }
2364     if (mode) {
2365       Handle(IFSelect_IntParam) val = new IFSelect_IntParam;
2366       val->SetValue(nb);
2367       dp->SetCount (val);
2368     }
2369     return dp;
2370   }
2371   DeclareAndCast(IFSelect_DispPerSignature,ds,disp);
2372   if (!ds.IsNull()) {
2373     DeclareAndCast(IFSelect_Signature,sg,WS->NamedItem( &(nam.ToCString())[paro]));
2374     if (sg.IsNull()) {
2375       sout<<"DispPerSignature "<<nam<<" , Signature not valid : "<<&(nam.ToCString())[paro]<<std::endl;
2376       disp.Nullify();
2377       return disp;
2378     }
2379     if (mode) ds->SetSignCounter (new IFSelect_SignCounter(sg));
2380     return ds;
2381   }
2382   sout<<"Dispatch : "<<name<<" , Parameter : "<<&(nam.ToCString())[paro]<<std::endl;
2383   return disp;
2384 }
2385
2386
2387 //  #########################################
2388 //  ####    INITIALISATIONS              ####
2389 //  #########################################
2390
2391 static int THE_IFSelect_Functions_initactor = 0;
2392
2393 void IFSelect_Functions::Init()
2394 {
2395   if (THE_IFSelect_Functions_initactor)
2396   {
2397     return;
2398   }
2399
2400   THE_IFSelect_Functions_initactor = 1;
2401   IFSelect_Act::SetGroup("DE: General");
2402   IFSelect_Act::AddFunc("xstatus","Lists XSTEP Status : Version, System Name ...",funstatus);
2403   IFSelect_Act::AddFunc("handler","Toggle status catch Handler Error of the session",fun1);
2404   IFSelect_Act::AddFunc("xload","file:string  : Read File -> Load Model",fun3);
2405   IFSelect_Act::AddFunc("xread","file:string  : Read File -> Load Model",fun3);
2406   IFSelect_Act::AddFunc("writeall","file:string  : Write all model (no split)",fun4);
2407   IFSelect_Act::AddFunc("writesel","file:string sel:Selection : Write Selected (no split)",fun5);
2408   IFSelect_Act::AddFunc("writeent","file:string  n1ent n2ent...:integer : Write Entite(s) (no split)",fun6);
2409   IFSelect_Act::AddFunc("writent", "file:string  n1ent n2ent...:integer : Write Entite(s) (no split)",fun6);
2410   IFSelect_Act::AddFunc("elabel","nument:integer   : Displays Label Model of an entity",fun7);
2411   IFSelect_Act::AddFunc("enum","label:string  : Displays entities n0.s of which Label Model ends by..",fun8);
2412
2413   IFSelect_Act::AddFunc("listtypes","List nb entities per type. Optional selection name  else all model",fun9);
2414   IFSelect_Act::AddFunc("count","Count : counter [selection]",funcount);
2415   IFSelect_Act::AddFunc("listcount","List Counted : counter [selection [nument]]",funcount);
2416   IFSelect_Act::AddFunc("sumcount","Summary Counted : counter [selection [nument]]",funcount);
2417   IFSelect_Act::AddFunc("signtype","Sign Type [newone]",funsigntype);
2418   IFSelect_Act::AddFunc("signcase","signature : displays possible cases",funsigncase);
2419
2420   IFSelect_Act::AddFunc("estatus","ent/nument : displays status of an entity",fun10);
2421   IFSelect_Act::AddFunc("data","Data (DumpModel); whole help : data tout court",fun11);
2422   IFSelect_Act::AddFunc("entity","give n0 ou id of entity [+ level]",fundumpent);
2423   IFSelect_Act::AddFunc("signature","signature name + n0/ident entity",funsign);
2424   IFSelect_Act::AddFunc("queryparent"," give 2 n0s/labels of entities : dad son",funqp);
2425
2426   IFSelect_Act::AddFunc("dumpshare","Dump Share (dispatches, IntParams)",fun12);
2427   IFSelect_Act::AddFunc("listitems","List Items [label else all]  ->Type,Label[,Name]",fun13);
2428   IFSelect_Act::AddFSet("integer","value:integer : cree un IntParam",fun14);
2429   IFSelect_Act::AddFunc("setint","name:IntParam   newValue:integer  : Change valeur IntParam",fun15);
2430   IFSelect_Act::AddFSet("text","value:string  : cree un TextParam",fun16);
2431   IFSelect_Act::AddFunc("settext","Name:TextParam  newValue:string   : Change valeur TextParam",fun17);
2432   IFSelect_Act::AddFunc("dumpsel","Dump Selection suivi du Nom de la Selection a dumper",fun19);
2433   IFSelect_Act::AddFunc("evalsel","name:Selection [num/sel]  : Evalue une Selection",fun20);
2434   IFSelect_Act::AddFunc("givelist","num/sel [num/sel ...]  : Evaluates GiveList",fun20);
2435   IFSelect_Act::AddFunc("giveshort","num/sel [num/sel ...]  : GiveList in short form",fun20);
2436   IFSelect_Act::AddFunc("givepointed","num/sel [num/sel ...]  : GiveList to fill a SelectPointed",fun20);
2437   IFSelect_Act::AddFunc("makelist","listname [givelist] : Makes a List(SelectPointed) from GiveList",fun20);
2438   IFSelect_Act::AddFunc("givecount","num/sel [num/sel ...]  : Counts GiveList",fun20c);
2439   IFSelect_Act::AddFSet("selsuite","sel sel ...  : Creates a SelectSuite",funselsuite);
2440   IFSelect_Act::AddFunc("clearitems","Clears all items (selections, dispatches, etc)",fun21);
2441   IFSelect_Act::AddFunc("cleardata","mode:a-g-c-p  : Clears all or some data (model, check...)",fun22);
2442
2443   IFSelect_Act::AddFunc("itemlabel","xxx xxx : liste items having this label",fun24);
2444   IFSelect_Act::AddFunc("xsave","filename:string  : sauve items-session",fun25);
2445   IFSelect_Act::AddFunc("xrestore","filename:string  : restaure items-session",fun26);
2446   IFSelect_Act::AddFunc("param","nompar:string : displays parameter value; + nompar val : changes it",fun27);
2447
2448   IFSelect_Act::AddFunc("sentfiles","Lists files sent from last Load",fun29);
2449   IFSelect_Act::AddFunc("fileprefix","prefix:string    : definit File Prefix",fun30);
2450   IFSelect_Act::AddFunc("fileext","extent:string    : definit File Extension",fun31);
2451   IFSelect_Act::AddFunc("fileroot","disp:Dispatch  root:string  : definit File Root sur un Dispatch",fun32);
2452   IFSelect_Act::AddFunc("filedef","defroot:string   : definit File DefaultRoot",fun33);
2453   IFSelect_Act::AddFunc("evalfile","Evaluation du FileNaming et memorisation",fun34);
2454   IFSelect_Act::AddFunc("clearfile","Efface la liste d'EvalFile",fun35);
2455   IFSelect_Act::AddFunc("xsplit","[disp:Dispatch  sinon tout]  : Split, la grande affaire !",fun36);
2456   IFSelect_Act::AddFunc("remaining","options... : Remaining Entities, help complet par  remaining ?",fun37);
2457   IFSelect_Act::AddFunc("setcontent","sel:Selection mode:k ou r  : Restreint contenu du modele",fun38);
2458
2459   IFSelect_Act::AddFunc("listmodif","List Final Modifiers",fun40);
2460   IFSelect_Act::AddFunc("dumpmodif","modif:Modifier  : Affiche le Statut d'un Modifier",fun41);
2461   IFSelect_Act::AddFunc("modifsel","modif:Modifier [sel:Selection]  : Change/Annule Selection de Modifier",fun42);
2462   IFSelect_Act::AddFunc("setapplied","modif:Modifier [name:un item sinon sortie fichier]  : Applique un Modifier",fun43);
2463   IFSelect_Act::AddFunc("resetapplied","modif:Modifier  : Enleve un Modifier de la sortie fichier",fun44);
2464   IFSelect_Act::AddFunc("modifmove","modif:Modifier M(model)/F(file) avant,apres:integer  : Deplace un Modifier (sortie fichier)",fun45);
2465
2466   IFSelect_Act::AddFunc("dispsel","disp:Dispatch sel:Selection  -> Selection Finale de Dispatch",fun51);
2467   IFSelect_Act::AddFSet("dispone","cree DispPerOne",fun_dispone);
2468   IFSelect_Act::AddFSet("dispglob","cree DispGlobal",fun_dispglob);
2469   IFSelect_Act::AddFSet("dispcount","count:IntParam  : cree DispPerCount",fun_dispcount);
2470   IFSelect_Act::AddFSet("dispfile","files:IntParam  : cree DispPerFiles",fun_dispfiles);
2471   IFSelect_Act::AddFSet("dispsign","sign:Signature  : cree DispPerSignature",fun_dispsign);
2472   IFSelect_Act::AddFunc("dumpdisp","disp:Dispatch   : Affiche le Statut d'un Dispatch",fun56);
2473
2474   IFSelect_Act::AddFunc("xremove","nom  : Remove a Control Item de la Session",fun57);
2475   IFSelect_Act::AddFunc("evaldisp","mode=[0-3]  disp:Dispatch  : Evaluates one or more Dispatch(es)",fun58);
2476   IFSelect_Act::AddFunc("evaladisp","mode=[0-3]  disp:Dispatch [givelist]  : Evaluates a Dispatch (on a GiveList)",fun_evaladisp);
2477   IFSelect_Act::AddFunc("writedisp","filepattern  disp:Dispatch [givelist]  : Writes Entities by Splitting by a Dispatch",fun_writedisp);
2478   IFSelect_Act::AddFunc("evalcomplete","Evaluation Complete de la Repartition",fun59);
2479
2480   IFSelect_Act::AddFunc("runcheck","affiche LastRunCheckList (write,modif)",fun60);
2481   IFSelect_Act::AddFunc("runtranformer","transf:Transformer  : Applique un Transformer",fun61);
2482   IFSelect_Act::AddFSet("copy","cree TransformStandard, option Copy, vide",fun62);
2483   IFSelect_Act::AddFSet("onthespot","cree TransformStandard, option OntheSpot, vide",fun63);
2484   IFSelect_Act::AddFunc("runcopy","modif:ModelModifier [givelist] : Run <modif> via TransformStandard option Copy",fun6465);
2485   IFSelect_Act::AddFunc("runonthespot","modif:ModelModifier [givelist] : Run <modif> via TransformStandard option OnTheSpot",fun6465);
2486   IFSelect_Act::AddFSet("reorder","[f ou t] reordonne le modele",fun66);
2487
2488   IFSelect_Act::AddFunc("toggle","sel:Selection genre Extract  : Toggle Direct/Reverse",fun70);
2489   IFSelect_Act::AddFunc("input","sel:Selection genre Deduct ou Extract  input:Selection  : Set Input",fun71);
2490   IFSelect_Act::AddFSet("modelroots","cree SelectModelRoots",fun72);
2491   IFSelect_Act::AddFSet("range","options... : cree SelectRange ...; tout court pour help",fun73);
2492   IFSelect_Act::AddFSet("roots","cree SelectRoots (local roots)",fun74);
2493   IFSelect_Act::AddFSet("shared","cree SelectShared",fun75);
2494   IFSelect_Act::AddFSet("diff","[main:Selection diff:Selection]  : cree SelectDiff",fun76);
2495   IFSelect_Act::AddFunc("selmain","sel:Selection genre Control  main:Selection  : Set Main Input",fun77);
2496   IFSelect_Act::AddFunc("selsecond","sel:Selection genre Control  sec:Selection   : Set Second Input",fun78);
2497   IFSelect_Act::AddFSet("modelall","cree SelectModelAll",fun79);
2498   IFSelect_Act::AddFunc("seladd","sel:Selection genre Combine  input:Selection  : Add Selection",fun80);
2499   IFSelect_Act::AddFunc("selrem","sel:Selection genre Combine  input:Selection  : Remove Selection",fun81);
2500   IFSelect_Act::AddFSet("number","num:IntParam  : Cree SelectEntityNumber",fun82);
2501
2502   IFSelect_Act::AddFSet("union","cree SelectUnion (vide), cf aussi combadd, combrem",fun83);
2503   IFSelect_Act::AddFSet("intersect","cree SelectIntersection (vide), cf aussi combadd, combrem",fun84);
2504   IFSelect_Act::AddFSet("typexact","type:string  : cree SelectTextType Exact",fun85);
2505   IFSelect_Act::AddFSet("errors","cree SelectErrorEntities (from file)",fun86);
2506   IFSelect_Act::AddFSet("unknown","cree SelectUnknownEntities",fun87);
2507   IFSelect_Act::AddFSet("sharing","cree SelectSharing",fun88);
2508   IFSelect_Act::AddFSet("typecontain","type:string  : cree SelectTextType Contains",fun89);
2509   IFSelect_Act::AddFSet("pointed","cree SelectPointed [num/sel num/sel]",fun90);
2510   IFSelect_Act::AddFunc("setpointed","sel:SelectPointed  : edition SelectPointed. tout court pour help",fun91);
2511   IFSelect_Act::AddFunc("setlist","sel:SelectPointed  : edition SelectPointed. tout court pour help",fun91);
2512   IFSelect_Act::AddFSet("incorrect","cree SelectIncorrectEntities (computed)",fun92);
2513
2514   IFSelect_Act::AddFSet("signsel","sign:Signature|cnt:Counter text:string [e(D)|c] : cree SelectSignature",fun93);
2515   IFSelect_Act::AddFSet("signcounter","sign:Signature : cree SignCounter",fun94);
2516   IFSelect_Act::AddFSet("nbselected","applied:Selection : cree GraphCounter(=NbSelected)",funbselected);
2517
2518   IFSelect_Act::AddFunc("editlist","editor or editform : lists defs + values",fun_editlist);
2519   IFSelect_Act::AddFunc("editvalue","editform paramname [newval or .] : lists-changes a value",fun_editvalue);
2520   IFSelect_Act::AddFunc("editclear","editform [paramname] : clears edition on all or one param",fun_editclear);
2521   IFSelect_Act::AddFunc("editload","editform [entity-id] : loads from model or an entity",fun_editload);
2522   IFSelect_Act::AddFunc("editapply","editform [keep] : applies on loaded data",fun_editapply);
2523 }