1 /*****************************************************************************
2   FILE           : $Source: /projects/higgs1/SNNS/CVS/SNNS/xgui/sources/cc_main.c,v $
3   SHORTNAME      : cc_main.c
4   SNNS VERSION   : 4.2
5 
6   PURPOSE        : Creates the CASCADE-window.
7   NOTES          :
8 
9   AUTHOR         : Michael Schmalzl, modified by Christian Wehrfritz (PCC)
10   DATE           : 23.2.93
11 
12   CHANGED BY     : Michael Schmalzl
13   RCS VERSION    : $Revision: 2.18 $
14   LAST CHANGE    : $Date: 1998/04/22 16:08:33 $
15 
16     Copyright (c) 1990-1995  SNNS Group, IPVR, Univ. Stuttgart, FRG
17     Copyright (c) 1996-1998  SNNS Group, WSI, Univ. Tuebingen, FRG
18 
19 ******************************************************************************/
20 #include <config.h>
21 #include <X11/Intrinsic.h>
22 #include <X11/Xaw3d/Box.h>
23 #include <X11/Xaw3d/Form.h>
24 #include <X11/Xaw3d/SmeBSB.h>
25 #include <X11/Xaw3d/Cardinals.h>
26 #include <X11/Xaw3d/SimpleMenu.h>
27 
28 
29 #include "ui.h"
30 #include "ui_xWidgets.h"
31 #include "kr_ui.h"
32 #include "ui_display.h"
33 #include "ui_main.h"
34 #include "ui_mainP.h"
35 #include "ui_confirmer.h"
36 #include "cc_type.h"
37 #include "cc_mac.h"
38 #include "cc_glob.h"
39 #include "ui_control.h"
40 #include "ui_key.h"
41 #include "ui_netUpdate.h"
42 
43 #include "cc_main.ph"
44 
45 /*****************************************************************************
46   FUNCTION :cc_centerString
47 
48   PURPOSE  :
49   NOTES    :
50 
51   UPDATE : 24.10.96
52 ******************************************************************************/
cc_centerString(char * string,int length1,int length2)53 static void cc_centerString(char *string, int length1, int length2)
54 {
55     int i,difference,move;
56 
57     if((difference=(length2 - length1)) >=2) {
58 	move = difference / 2;
59 	for(i=length1-1;i>=0;i--) {
60 	    string[i+move] = string[i];
61 	}
62 	for(i=0;i<move;i++){
63 	    string[i] = ' ';
64 	}
65     }
66 }
67 
68 
69 /*****************************************************************************
70   FUNCTION : cc_selectActFuncCand
71 
72   PURPOSE  :
73   NOTES    :
74 
75   UPDATE   : 24.10.96
76 ******************************************************************************/
cc_selectActFuncCand(Widget w,int value,caddr_t call_data)77 static void cc_selectActFuncCand(Widget w, int value, caddr_t call_data)
78 {
79     switch(value) {
80     case ASYM_SIGMOID: ui_xSetLabel(cc_w10b,"Logistic");
81 	break;
82     case SYM_SIGMOID : ui_xSetLabel(cc_w10b," LogSym ");
83 	break;
84     case TANH        : ui_xSetLabel(cc_w10b," TanH   ");
85 	break;
86     case RANDOM      : ui_xSetLabel(cc_w10b," Random ");
87 	break;
88     case SINUS       : ui_xSetLabel(cc_w10b," Sinus  ");
89 	break;
90     case EXPONENTIAL : ui_xSetLabel(cc_w10b," Gauss  ");
91 	break;
92     }
93     cc_data.CAND.actFunc = cc_candActFunc = value;
94 }
95 
96 
97 /*****************************************************************************
98   FUNCTION :cc_selectOnOff
99 
100   PURPOSE  :
101   NOTES    :
102 
103   UPDATE   : 24.10.96
104 ******************************************************************************/
cc_selectOnOff(Widget w,int value,caddr_t call_data)105 static void cc_selectOnOff(Widget w, int value, caddr_t call_data)
106 {
107     if((w == cc_covB[0]) || (w == cc_covB[1]))
108 	ui_setToggles(value, &cc_data.GLOBAL.onOff, 2, cc_covB);
109     if((w == cc_cacheB[0]) || (w == cc_cacheB[1]))
110 	ui_setToggles(value, &cc_data.GLOBAL.fastmode, 2, cc_cacheB);
111     if((w == cc_pruneB[0]) || (w == cc_pruneB[1]))
112 	ui_setToggles(value, &cc_data.GLOBAL.pruneOnOff, 2, cc_pruneB);
113 }
114 
115 
116 /*****************************************************************************
117   FUNCTION : cc_selectLearningFunc
118 
119   PURPOSE  :
120   NOTES    :
121 
122   UPDATE   : 24.10.96
123 ******************************************************************************/
cc_selectLearningFunc(Widget w,int value,caddr_t call_data)124 static void cc_selectLearningFunc(Widget w, int value, caddr_t call_data)
125 {
126     switch(value) {
127     case QUICKPROP        : ui_xSetLabel(cc_w11b," Quickprop ");
128 	break;
129     case BACKPROP         : ui_xSetLabel(cc_w11b," Batch-BP  ");
130 	break;
131     case RPROP            : ui_xSetLabel(cc_w11b,"   Rprop   ");
132 	break;
133     case BACKPROP_ONLINE  : ui_xSetLabel(cc_w11b," Backprop  ");
134     }
135     cc_data.GLOBAL.learningFunc = cc_learningFunc = value;
136 }
137 
138 /*****************************************************************************
139   FUNCTION : cc_selectModification
140 
141   PURPOSE  :
142   NOTES    :
143 
144   UPDATE   : 24.10.96
145 ******************************************************************************/
cc_selectModification(Widget w,int value,caddr_t call_data)146 static void cc_selectModification(Widget w, int value, caddr_t call_data)
147 {
148     switch(value) {
149     case CC_NO_MOD:
150 	ui_xSetLabel(cc_w20b," none ");
151 	break;
152     case CC_SDCC:
153 	ui_xSetLabel(cc_w20b," SDCC ");
154 	break;
155     case CC_LFCC:
156 	ui_xSetLabel(cc_w20b," LFCC ");
157 	break;
158     case CC_ECC:
159 	ui_xSetLabel(cc_w20b," ECC  ");
160 	break;
161     case CC_GCC:
162 	ui_xSetLabel(cc_w20b," GCC  ");
163 	break;
164     case CC_STAT:
165 	ui_xSetLabel(cc_w20b,"Static");
166 	break;
167     case CC_RLCC:
168 	ui_xSetLabel(cc_w20b," RLCC ");
169 	break;
170     }
171     cc_data.GLOBAL.modification = cc_modification = value;
172 }
173 
174 /*****************************************************************************
175   FUNCTION : cc_selectPruneFunc
176 
177   PURPOSE  :
178   NOTES    :
179 
180   UPDATE   : 24.10.96
181 ******************************************************************************/
cc_selectPruneFunc(Widget w,int value,caddr_t call_data)182 static void cc_selectPruneFunc(Widget w, int value, caddr_t call_data)
183 {
184     switch(value) {
185     case SBC:   ui_xSetLabel(cc_pfb," SBC ");
186 	break;
187     case AIC:   ui_xSetLabel(cc_pfb," AIC ");
188 	break;
189     case CMSEP: ui_xSetLabel(cc_pfb,"CMSEP");
190 	break;
191     }
192     cc_data.GLOBAL.pruneFunc = cc_pruneFunc = value;
193 }
194 
195 
196 /*****************************************************************************
197   FUNCTION : cc_readElements
198 
199   PURPOSE  :
200   NOTES    :
201 
202   UPDATE   : 24.10.96
203 ******************************************************************************/
cc_readElements(void)204 void cc_readElements(void)
205 {
206     int i;
207 
208     if((cc_learningFunc == -1) || (cc_candActFunc == -1) ||
209        (cc_pruneFunc == -1)) {
210 	cc_pruneFunc    = cc_data.GLOBAL.pruneFunc;
211 	cc_backfittOnOff= cc_data.GLOBAL.backfittOnOff;
212 	cc_learningFunc = cc_data.GLOBAL.learningFunc;
213 	cc_candActFunc  = cc_data.CAND.actFunc;
214 	cc_modification = cc_data.GLOBAL.modification;
215     }
216 
217     if(cc_open) {
218 	cc_data.GLOBAL.pixelError         = ui_xFloatFromAsciiWidget(cc_w9b);
219 	cc_data.GLOBAL.learningFunc       = cc_learningFunc;
220 	cc_data.GLOBAL.pruneFunc          = cc_pruneFunc;
221 	cc_data.GLOBAL.modification       = cc_modification;
222 	cc_data.GLOBAL.addParameters[0]   = ui_xFloatFromAsciiWidget(cc_w21c);
223 	cc_data.GLOBAL.addParameters[1]   = ui_xFloatFromAsciiWidget(cc_w21d);
224 	cc_data.GLOBAL.addParameters[2]   = ui_xFloatFromAsciiWidget(cc_w21e);
225 	cc_data.GLOBAL.addParameters[3]   = ui_xFloatFromAsciiWidget(cc_w21f);
226 	cc_data.GLOBAL.addParameters[4]   = ui_xFloatFromAsciiWidget(cc_w21g);
227 	cc_data.CAND.covarianceChange     = ui_xFloatFromAsciiWidget(cc_w1b);
228 	cc_data.CAND.candidatePatience    = ui_xIntFromAsciiWidget(cc_w2b);
229 	cc_data.CAND.maxNoOfUpdateCycles  = ui_xIntFromAsciiWidget(cc_w3b);
230 	cc_data.CAND.maxNoOfCandUnits     = ui_xIntFromAsciiWidget(cc_w7b);
231 	cc_data.CAND.actFunc              = cc_candActFunc;
232 	cc_data.OUT.errorChange           = ui_xFloatFromAsciiWidget(cc_w4b);
233 	cc_data.OUT.outputPatience        = ui_xIntFromAsciiWidget(cc_w5b);
234 	cc_data.OUT.maxNoOfUpdateCycles   = ui_xIntFromAsciiWidget(cc_w6b);
235     }
236     ui_learnParameters[6] = cc_data.GLOBAL.pixelError;
237     ui_learnParameters[7] = (float)cc_data.GLOBAL.learningFunc;
238     ui_learnParameters[8] = (float)cc_data.GLOBAL.onOff;
239 
240     ui_learnParameters[9]  = cc_data.CAND.covarianceChange;
241     ui_learnParameters[10] = cc_data.CAND.candidatePatience;
242     ui_learnParameters[11] = cc_data.CAND.maxNoOfUpdateCycles;
243     ui_learnParameters[12] = cc_data.CAND.maxNoOfCandUnits;
244     ui_learnParameters[13] = (float)cc_data.CAND.actFunc;
245 
246     ui_learnParameters[14] = cc_data.OUT.errorChange;
247     ui_learnParameters[15] = cc_data.OUT.outputPatience;
248     ui_learnParameters[16] = cc_data.OUT.maxNoOfUpdateCycles;
249 
250     ui_learnParameters[17] = (float)cc_data.GLOBAL.pruneOnOff;
251     ui_learnParameters[18] = (float)cc_data.GLOBAL.backfittOnOff;
252     ui_learnParameters[19] = cc_data.GLOBAL.backfittPatience;
253     ui_learnParameters[20] = cc_data.GLOBAL.pruneFunc;
254     ui_learnParameters[21] = (float)cc_data.GLOBAL.modification;
255 
256     for (i=0;i<5;i++)
257 	ui_learnParameters[22+i] = cc_data.GLOBAL.addParameters[i];
258 
259     ui_learnParameters[27] = (float)cc_data.GLOBAL.fastmode;
260 
261 }
262 
263 /*****************************************************************************
264   FUNCTION : cc_doneProc
265 
266   PURPOSE  : callback function of the done-button. You are leaving CC.
267              The storage is deallocated.
268   NOTES    :
269 
270   UPDATE   : 3.4.1992
271 ******************************************************************************/
cc_doneProc(void)272 static void cc_doneProc(void)
273 {
274     cc_readElements();
275     XtDestroyWidget(cc_mainWidget);
276     cc_open = 0;
277 }
278 
279 
280 
281 /*****************************************************************************
282   FUNCTION : cc_createCandidatePannel
283 
284   PURPOSE  : creates the candidate pannel, which is part of the CC-window
285   NOTES    :
286 
287   UPDATE   : 5.10.92
288 ******************************************************************************/
cc_createCandidatePannel(Widget parent)289 static void cc_createCandidatePannel (Widget parent)
290 {
291     Widget       form, menu, mItem, label, top_label;
292     Arg          arg[25];
293     Cardinal     n;
294     char         buf[20];
295 
296     n = 0;
297     form = XtCreateManagedWidget ("pannel", formWidgetClass, parent, arg, n);
298 
299     top_label = ui_xCreateLabelItem("       Parameters for Candidate Units",
300 				    form, 35*ui_labelFontWidth, NULL, NULL);
301     label = ui_xCreateLabelItem("Min. covariance change: ",form,
302 				30*ui_labelFontWidth,NULL,top_label);
303     sprintf(buf,"%.3f",cc_data.CAND.covarianceChange);
304     cc_w1b = ui_xCreateDialogItem ("cc_w1b",form,buf,6*ui_labelFontWidth,
305 				   label, top_label);
306 
307     label = ui_xCreateLabelItem("Candidate patience: ",form,
308 				 30*ui_labelFontWidth,NULL,cc_w1b);
309     sprintf(buf,"%d",cc_data.CAND.candidatePatience);
310     cc_w2b = ui_xCreateDialogItem ("cc_w2b",form,buf,6*ui_labelFontWidth,
311 				   label,cc_w1b);
312 
313     label = ui_xCreateLabelItem("Max. no. of covariance updates: ",form,
314 				 30*ui_labelFontWidth,NULL,cc_w2b);
315     sprintf(buf,"%d",cc_data.CAND.maxNoOfUpdateCycles);
316     cc_w3b = ui_xCreateDialogItem ("cc_w3b",form,buf,6*ui_labelFontWidth,
317 				   label,cc_w2b);
318 
319     label = ui_xCreateLabelItem("Max. no. of candidate units: ",form,
320 				 30*ui_labelFontWidth,NULL,cc_w3b);
321     sprintf(buf,"%d",cc_data.CAND.maxNoOfCandUnits);
322     cc_w7b = ui_xCreateDialogItem ("cc_w7b",form,buf,6*ui_labelFontWidth,
323 				   label, cc_w3b);
324 
325     label = ui_xCreateLabelItem("Activation function: ",form,
326 				  29*ui_labelFontWidth,NULL,cc_w7b);
327     sprintf(buf,"%8s",cc_actFuncArray2[cc_data.CAND.actFunc]);
328     cc_w10b = ui_xCreateMenuButtonItem (buf,form,label,cc_w7b);
329 
330     menu     = XtCreatePopupShell("menu",simpleMenuWidgetClass,cc_w10b,
331 				  NULL,ZERO);
332     mItem    = XtCreateManagedWidget("Logistic", smeBSBObjectClass,
333 				     menu,NULL,ZERO);
334     XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectActFuncCand,
335 		  ASYM_SIGMOID);
336     mItem    = XtCreateManagedWidget("LogSym", smeBSBObjectClass,
337 				     menu,NULL,ZERO);
338     XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectActFuncCand,
339 		  (caddr_t)SYM_SIGMOID);
340     mItem    = XtCreateManagedWidget("TanH", smeBSBObjectClass,menu,
341 				     NULL,ZERO);
342     XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectActFuncCand,
343 		  (caddr_t)TANH);
344     mItem    = XtCreateManagedWidget("Sinus", smeBSBObjectClass,menu,
345 				     NULL,ZERO);
346     XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectActFuncCand,
347 		  (caddr_t)SINUS);
348     mItem    = XtCreateManagedWidget("Gauss", smeBSBObjectClass,menu,
349 				     NULL,ZERO);
350     XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectActFuncCand,
351 		  (caddr_t)EXPONENTIAL);
352     mItem    = XtCreateManagedWidget("Random", smeBSBObjectClass,menu,
353 				     NULL,ZERO);
354     XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectActFuncCand,
355 		  (caddr_t)RANDOM);
356 
357 }
358 
359 
360 
361 /*****************************************************************************
362   FUNCTION : cc_creatOutputPannel
363 
364   PURPOSE  : creates the output pannel, which is part of the CC-window
365   NOTES    :
366 
367   UPDATE   : 5.10.92
368 ******************************************************************************/
cc_createOutputPannel(Widget parent)369 static void cc_createOutputPannel (Widget parent)
370 {
371     Widget       form, label, top_label;
372     Arg          arg[25];
373     Cardinal     n;
374     char         buf[10];
375 
376     n = 0;
377     form = XtCreateManagedWidget ("pannel", formWidgetClass, parent, arg, n);
378 
379     top_label  = ui_xCreateLabelItem("         Parameters for Output Units",
380 				     form, 35*ui_labelFontWidth, NULL, NULL);
381 
382     label = ui_xCreateLabelItem("Error change: ",form,
383 				 30*ui_labelFontWidth, NULL, top_label);
384     sprintf(buf,"%.3f",cc_data.OUT.errorChange);
385     cc_w4b = ui_xCreateDialogItem ("cc_w4b",form,buf,
386 				   6*ui_labelFontWidth,label, top_label);
387 
388     label = ui_xCreateLabelItem("Output patience: ",form,
389 				 30*ui_labelFontWidth,NULL,cc_w4b);
390     sprintf(buf,"%d",cc_data.OUT.outputPatience);
391     cc_w5b = ui_xCreateDialogItem ("cc_w5b",form,buf,
392 				   6*ui_labelFontWidth, label, cc_w4b);
393 
394     label = ui_xCreateLabelItem("Max. no. of epochs: ",form,
395 				 30*ui_labelFontWidth,NULL,cc_w5b);
396     sprintf(buf,"%d",cc_data.OUT.maxNoOfUpdateCycles);
397     cc_w6b = ui_xCreateDialogItem ("cc_w6b",form,buf,
398 				   6*ui_labelFontWidth, label, cc_w5b);
399 
400 }
401 
402 /*****************************************************************************
403   FUNCTION : cc_createGlobalPannel
404 
405   PURPOSE  : creates the global pannel, which is part of the CC-window
406   NOTES    :
407 
408   UPDATE   : 5.10.92
409 ******************************************************************************/
cc_createGlobalPannel(Widget parent)410 static void cc_createGlobalPannel (Widget parent)
411 {
412     Widget       form,menu,mItem,label,top_label;
413     Arg          arg[25];
414     Cardinal     n;
415     char         buf[30];
416     int          length1;
417 
418     n = 0;
419     form = XtCreateManagedWidget("pannel", formWidgetClass, parent, arg, n);
420 
421     top_label  = ui_xCreateLabelItem("     General Parameters for Cascade",
422 				     form, 35*ui_labelFontWidth, NULL, NULL);
423 
424     label = ui_xCreateLabelItem("Max. output unit error:  ",form,
425 				 26*ui_labelFontWidth,NULL,top_label);
426     sprintf(buf,"%.3f",cc_data.GLOBAL.pixelError);
427     cc_w9b = ui_xCreateDialogItem ("cc_w9b",form,buf,10*ui_labelFontWidth,
428 				   label, top_label);
429 
430     label = ui_xCreateLabelItem("Learning function: ",form,26*ui_labelFontWidth,
431 				  NULL,cc_w9b);
432     sprintf(buf,"%11s",cc_learningFuncArray[cc_data.GLOBAL.learningFunc]);
433     cc_w11b  = ui_xCreateMenuButtonItem(buf,form,label,cc_w9b);
434 
435     menu     = XtCreatePopupShell("menu",simpleMenuWidgetClass,cc_w11b,
436 				  NULL,ZERO);
437 
438     mItem    = XtCreateManagedWidget("Batch-Backprop", smeBSBObjectClass,
439 				     menu,NULL,ZERO);
440     XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectLearningFunc,
441 		  (caddr_t)BACKPROP);
442     mItem    = XtCreateManagedWidget("Std_Backpropagation", smeBSBObjectClass,
443 				     menu, NULL, ZERO);
444     XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectLearningFunc,
445 		  (caddr_t)BACKPROP_ONLINE);
446     mItem    = XtCreateManagedWidget("Quickprop", smeBSBObjectClass,menu,
447 				     NULL,ZERO);
448     XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectLearningFunc,
449 		  (caddr_t)QUICKPROP);
450     mItem    = XtCreateManagedWidget("Rprop", smeBSBObjectClass,menu,NULL,ZERO);
451     XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectLearningFunc,
452 		  (caddr_t)RPROP);
453 
454     label  = ui_xCreateLabelItem("Modification: ",form,26*ui_labelFontWidth,
455 				   NULL,cc_w11b);
456     length1 = strlen(cc_ModificationArray[cc_data.GLOBAL.modification]);
457     sprintf(buf,"%-11s",cc_ModificationArray[cc_data.GLOBAL.modification]);
458     cc_centerString(buf,length1,9);
459     cc_w20b  = ui_xCreateMenuButtonItem(buf,form,label,cc_w11b);
460 
461     menu    =  XtCreatePopupShell("menu",simpleMenuWidgetClass,cc_w20b,
462 				  NULL,ZERO);
463     mItem   =  XtCreateManagedWidget("none",smeBSBObjectClass,menu,NULL,ZERO);
464     XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectModification,
465 		  (caddr_t)CC_NO_MOD);
466     mItem   =  XtCreateManagedWidget("Sibling/Descendant CC",smeBSBObjectClass,
467 				     menu,NULL,ZERO);
468     XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectModification,
469 		  (caddr_t)CC_SDCC);
470     mItem   =  XtCreateManagedWidget("Limited Fan-In Random Wired CC",
471 				     smeBSBObjectClass,menu,NULL,ZERO);
472     XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectModification,
473 		  (caddr_t)CC_LFCC);
474     mItem   =  XtCreateManagedWidget("Random Layer CC",smeBSBObjectClass,
475 				     menu,NULL,ZERO);
476     XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectModification,
477 		  (caddr_t)CC_RLCC);
478     mItem   =  XtCreateManagedWidget("Static",smeBSBObjectClass,menu,NULL,ZERO);
479     XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectModification,
480 		  (caddr_t)CC_STAT);
481     mItem   =  XtCreateManagedWidget("Exponential CC",smeBSBObjectClass,menu,
482 				     NULL,ZERO);
483     XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectModification,
484 		  (caddr_t)CC_ECC);
485     mItem   =  XtCreateManagedWidget("Grouped CC",smeBSBObjectClass,menu,
486 				     NULL,ZERO);
487     XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectModification,
488 		  (caddr_t)CC_GCC);
489 
490     /* creating toggle widget for printing information to the shell */
491     label = ui_xCreateLabelItem("Print covariance and error ?",form,
492 				  26*ui_labelFontWidth,NULL,cc_w20b);
493     cc_covB[1] = ui_xCreateToggleItem("yes", form, NULL, label, cc_w20b);
494     ui_xSetToggleState (cc_covB[1], cc_data.GLOBAL.onOff);
495     XtAddCallback (cc_covB[1], XtNcallback, (XtCallbackProc)cc_selectOnOff,
496                    (caddr_t) ON);
497     cc_covB[0] = ui_xCreateToggleItem("no", form, NULL, cc_covB[1], cc_w20b);
498     ui_xSetToggleState(cc_covB[0], !cc_data.GLOBAL.onOff);
499     XtAddCallback(cc_covB[0], XtNcallback, (XtCallbackProc)cc_selectOnOff,
500                   (caddr_t) OFF);
501 
502     /* creating toggle widget for caching activations */
503     label = ui_xCreateLabelItem("Cache the unit activations ?", form,
504 				  26*ui_labelFontWidth, NULL, cc_covB[1]);
505     cc_cacheB[1] = ui_xCreateToggleItem("yes", form, NULL, label, cc_covB[1]);
506     ui_xSetToggleState (cc_cacheB[1], cc_data.GLOBAL.fastmode);
507     XtAddCallback (cc_cacheB[1], XtNcallback, (XtCallbackProc)cc_selectOnOff,
508                    (caddr_t) ON);
509     cc_cacheB[0] = ui_xCreateToggleItem("no", form, NULL,
510 					cc_cacheB[1], cc_covB[1]);
511     ui_xSetToggleState(cc_cacheB[0], !cc_data.GLOBAL.fastmode);
512     XtAddCallback(cc_cacheB[0], XtNcallback, (XtCallbackProc)cc_selectOnOff,
513                   (caddr_t) OFF);
514 
515     /* creating toggle widget for new hidden pruning */
516     label = ui_xCreateLabelItem("Prune new hidden unit ?", form,
517 				  26*ui_labelFontWidth, NULL, cc_cacheB[1]);
518     cc_pruneB[1] = ui_xCreateToggleItem("yes", form, NULL, label, cc_cacheB[1]);
519     ui_xSetToggleState (cc_pruneB[1], cc_data.GLOBAL.pruneOnOff);
520     XtAddCallback (cc_pruneB[1], XtNcallback, (XtCallbackProc)cc_selectOnOff,
521                    (caddr_t) ON);
522     cc_pruneB[0] = ui_xCreateToggleItem("no", form, NULL,
523 					cc_pruneB[1], cc_cacheB[1]);
524     ui_xSetToggleState(cc_pruneB[0], !cc_data.GLOBAL.pruneOnOff);
525     XtAddCallback(cc_pruneB[0], XtNcallback, (XtCallbackProc)cc_selectOnOff,
526                   (caddr_t) OFF);
527 
528     label = ui_xCreateLabelItem("Minimize: ",form,26*ui_labelFontWidth,NULL,
529 				 cc_pruneB[1]);
530     length1 = strlen(cc_pruningFuncArray[cc_data.GLOBAL.pruneFunc]);
531     sprintf(buf,"%-11s",cc_pruningFuncArray[cc_data.GLOBAL.pruneFunc]);
532     cc_centerString(buf,length1,9);
533     cc_pfb  = ui_xCreateMenuButtonItem(buf,form,label,cc_pruneB[1]);
534 
535     menu     = XtCreatePopupShell("menu",simpleMenuWidgetClass,cc_pfb,
536 				  NULL,ZERO);
537 
538     mItem= XtCreateManagedWidget("   SBC   ", smeBSBObjectClass,menu,NULL,ZERO);
539     XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectPruneFunc,
540 		  (caddr_t)SBC);
541     mItem= XtCreateManagedWidget("   AIC   ", smeBSBObjectClass,menu,NULL,ZERO);
542     XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectPruneFunc,
543 		  (caddr_t)AIC);
544     mItem= XtCreateManagedWidget("  CMSEP  ", smeBSBObjectClass,menu,NULL,ZERO);
545     XtAddCallback(mItem,XtNcallback,(XtCallbackProc)cc_selectPruneFunc,
546 		  (caddr_t)CMSEP);
547 
548     label = ui_xCreateLabelItem("Additional Parameters ",form,
549 				24*ui_labelFontWidth, NULL, cc_pfb);
550     sprintf(buf,"%.3f",cc_data.GLOBAL.addParameters[0]);
551     cc_w21b =  ui_xCreateLabelItem("",form,
552 				   1*ui_labelFontWidth, NULL, label);
553     cc_w21c = ui_xCreateDialogItem ("cc_w21c",form,buf,6*ui_labelFontWidth,
554 				    cc_w21b, label);
555     sprintf(buf,"%.3f",cc_data.GLOBAL.addParameters[1]);
556     cc_w21d = ui_xCreateDialogItem ("cc_w21d",form,buf,6*ui_labelFontWidth,
557 				    cc_w21c, label);
558     sprintf(buf,"%.3f",cc_data.GLOBAL.addParameters[2]);
559     cc_w21e = ui_xCreateDialogItem ("cc_w21e",form,buf,6*ui_labelFontWidth,
560 				    cc_w21d, label);
561     sprintf(buf,"%.3f",cc_data.GLOBAL.addParameters[3]);
562     cc_w21f = ui_xCreateDialogItem ("cc_w21f",form,buf,6*ui_labelFontWidth,
563 				    cc_w21e, label);
564     sprintf(buf,"%.3f",cc_data.GLOBAL.addParameters[4]);
565     cc_w21g = ui_xCreateDialogItem ("cc_w21g",form,buf,6*ui_labelFontWidth,
566 				    cc_w21f, label);
567 }
568 
569 
570 /*****************************************************************************
571   FUNCTION : cc_createWindow
572 
573   PURPOSE  : creates the CC-window
574   NOTES    :
575 
576   UPDATE   : 5.10.92
577 ******************************************************************************/
cc_createWindow(void)578 void cc_createWindow (void)
579 {
580     Widget       done,box;
581     Arg          arg[25];
582     Cardinal     n;
583     char         buf[40];
584 
585     if(!cc_open) {
586 	cc_open = 1;
587 	sprintf (buf, "SNNS Cascade");
588 	n = 0;
589 	cc_mainWidget = XtCreatePopupShell(buf,topLevelShellWidgetClass,
590 					   ui_toplevel,arg,n);
591 
592 	n = 0;
593 	box = XtCreateManagedWidget("box",boxWidgetClass,cc_mainWidget,arg,n);
594 
595 	cc_createGlobalPannel(box);
596 	cc_createCandidatePannel (box);
597 	cc_createOutputPannel(box);
598 
599 	done = ui_xCreateButtonItem ("done",box,NULL,NULL);
600 	XtAddCallback(done,XtNcallback,(XtCallbackProc)cc_doneProc,NULL);
601 
602 	XtAddEventHandler(box,KeyPressMask,FALSE,
603 			  (XtEventHandler)ui_key_control,(Cardinal *) 0);
604 	ui_checkWindowPosition(cc_mainWidget);
605 	XtPopup (cc_mainWidget, XtGrabNone);
606 	ui_xDontResizeWidget(cc_mainWidget);
607     } else {
608 	XRaiseWindow (XtDisplay (cc_mainWidget), XtWindow (cc_mainWidget));
609     }
610 }
611 
612