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