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