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