1 /*------------------------------------------------------------\
2 |                                                             |
3 | This file is part of the Alliance CAD System Copyright      |
4 | (C) Laboratoire LIP6 - D�partement ASIM Universite P&M Curie|
5 |                                                             |
6 | Home page      : http://www-asim.lip6.fr/alliance/          |
7 | E-mail         : mailto:alliance-users@asim.lip6.fr       |
8 |                                                             |
9 | This progam is  free software; you can redistribute it      |
10 | and/or modify it under the  terms of the GNU General Public |
11 | License as  published by the Free Software Foundation;      |
12 | either version 2 of the License, or (at your option) any    |
13 | later version.                                              |
14 |                                                             |
15 | Alliance VLSI  CAD System  is distributed  in the hope that |
16 | it  will be useful, but WITHOUT  ANY WARRANTY;              |
17 | without even the  implied warranty of MERCHANTABILITY or    |
18 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General       |
19 | Public License for more details.                            |
20 |                                                             |
21 | You should have received a copy  of the GNU General Public  |
22 | License along with the GNU C Library; see the file COPYING. |
23 | If not, write to the Free Software Foundation, Inc.,        |
24 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.                     |
25 |                                                             |
26 \------------------------------------------------------------*/
27 
28 /*------------------------------------------------------------\
29 |                                                             |
30 | Tool    :                   GRAAL                           |
31 |                                                             |
32 | File    :                  Setup.c                          |
33 |                                                             |
34 | Author  :                Jacomme Ludovic                    |
35 |                                                             |
36 | Date    :                  28.03.95                         |
37 |                                                             |
38 \------------------------------------------------------------*/
39 /*------------------------------------------------------------\
40 |                                                             |
41 |                         Include Files                       |
42 |                                                             |
43 \------------------------------------------------------------*/
44 
45 # include <stdio.h>
46 # include <Xm/Xm.h>
47 # include <Xm/PushBG.h>
48 
49 # include "mut.h"
50 # include "mph.h"
51 # include "rds.h"
52 # include "rpr.h"
53 # include "GTB.h"
54 # include "GSB.h"
55 # include "GMX.h"
56 # include "GMF.h"
57 # include "GME.h"
58 # include "GMC.h"
59 # include "GMV.h"
60 # include "GMT.h"
61 # include "GMS.h"
62 # include "GMH.h"
63 
64 # include "GMS_setup.h"
65 # include "GMV_panel.h"
66 
67 /*------------------------------------------------------------\
68 |                                                             |
69 |                           Constants                         |
70 |                                                             |
71 \------------------------------------------------------------*/
72 /*------------------------------------------------------------\
73 |                                                             |
74 |                            Types                            |
75 |                                                             |
76 \------------------------------------------------------------*/
77 /*------------------------------------------------------------\
78 |                                                             |
79 |                          Variables                          |
80 |                                                             |
81 \------------------------------------------------------------*/
82 
83   static FILE *FileConfig;
84 
85 /*------------------------------------------------------------\
86 |                                                             |
87 |                          Functions                          |
88 |                                                             |
89 \------------------------------------------------------------*/
90 /*------------------------------------------------------------\
91 |                                                             |
92 |                      Set Panel New Values                   |
93 |                                                             |
94 \------------------------------------------------------------*/
95 
GraalSetPanelValues(Panel,Values)96 void GraalSetPanelValues( Panel, Values )
97 
98   GraalPanelItem *Panel;
99   int            *Values;
100 {
101   rdsbegin();
102 
103   Panel->COMPUTE = 1;
104   Panel->X       = Values[0];
105   Panel->Y       = Values[1];
106   Panel->WIDTH   = Values[2];
107   Panel->HEIGHT  = Values[3];
108   Panel->MANAGED = Values[4];
109 
110   XtVaSetValues( Panel->PANEL,
111                  XmNx        , Values[0],
112                  XmNy        , Values[1],
113                  XmNwidth    , Values[2],
114                  XmNheight   , Values[3],
115                  NULL );
116 
117   if ( Panel->MANAGED )
118   {
119     GraalEnterPanel( Panel );
120   }
121   else
122   {
123     XtUnmanageChild( Panel->PANEL );
124   }
125 
126   rdsend();
127 }
128 
129 /*------------------------------------------------------------\
130 |                                                             |
131 |                      Write TopLevel Values                  |
132 |                                                             |
133 \------------------------------------------------------------*/
134 
GraalWriteTopLevelValues()135 void GraalWriteTopLevelValues()
136 
137 {
138   Dimension Values[5];
139 
140   rdsbegin();
141 
142   XtVaGetValues( GraalTopLevel,
143                  XmNx        , &Values[0],
144                  XmNy        , &Values[1],
145                  XmNwidth    , &Values[2],
146                  XmNheight   , &Values[3],
147                  NULL );
148 
149   Values[0] = Values[0] - GRAAL_TOPLEVEL_TRANSLATE_X;
150   Values[1] = Values[1] - GRAAL_TOPLEVEL_TRANSLATE_Y;
151   Values[4] = 1;
152 
153   fprintf( FileConfig, "VERSION: %s\n", VERSION );
154   fprintf( FileConfig, "X: %d, Y: %d, WIDTH: %d, HEIGHT: %d, MANAGED: %d\n",
155            Values[0], Values[1], Values[2], Values[3], Values[4] );
156 
157   rdsend();
158 }
159 
160 /*------------------------------------------------------------\
161 |                                                             |
162 |                       Write Panel Values                    |
163 |                                                             |
164 \------------------------------------------------------------*/
165 
GraalWritePanelValues(Panel)166 void GraalWritePanelValues( Panel )
167 
168   GraalPanelItem *Panel;
169 {
170   Dimension Values[5];
171 
172   rdsbegin();
173 
174   if ( Panel->COMPUTE == 0 )
175   {
176     XtVaGetValues( Panel->PANEL,
177                    XmNx        , &Values[0],
178                    XmNy        , &Values[1],
179                    XmNwidth    , &Values[2],
180                    XmNheight   , &Values[3],
181                    NULL );
182 
183     Values[0] = Values[0] - GRAAL_PANEL_TRANSLATE_X;
184     Values[1] = Values[1] - GRAAL_PANEL_TRANSLATE_Y;
185   }
186   else
187   {
188     Values[0] = Panel->X;
189     Values[1] = Panel->Y;
190     Values[2] = Panel->WIDTH;
191     Values[3] = Panel->HEIGHT;
192   }
193 
194   Values[2] /= Panel->COLUMN;
195   Values[3] /= Panel->ROW;
196 
197   Values[4] = Panel->MANAGED;
198 
199   fprintf( FileConfig, "X: %d, Y: %d, WIDTH: %d, HEIGHT: %d, MANAGED: %d\n",
200            Values[0], Values[1], Values[2], Values[3], Values[4] );
201 
202   rdsend();
203 }
204 
205 /*------------------------------------------------------------\
206 |                                                             |
207 |                        Read Panel Values                    |
208 |                                                             |
209 \------------------------------------------------------------*/
210 
GraalReadPanelValues(Panel)211 void GraalReadPanelValues( Panel )
212 
213   GraalPanelItem *Panel;
214 {
215   int Values[5];
216 
217   rdsbegin();
218 
219   fscanf( FileConfig, "X: %11d, Y: %11d, WIDTH: %11d, HEIGHT: %11d, MANAGED: %11d\n",
220           &Values[0], &Values[1], &Values[2], &Values[3], &Values[4] );
221 
222   Values[2] *= Panel->COLUMN;
223   Values[3] *= Panel->ROW;
224 
225   GraalSetPanelValues( Panel, Values );
226 
227   rdsend();
228 }
229 
230 /*------------------------------------------------------------\
231 |                                                             |
232 |                       Read  Panel Values                    |
233 |                                                             |
234 \------------------------------------------------------------*/
235 
GraalReadTopLevelValues()236 char GraalReadTopLevelValues()
237 
238 {
239   int  Values[5];
240   char Version[64];
241 
242   rdsbegin();
243 
244   fscanf( FileConfig, "VERSION: %63s\n", Version );
245 
246   if ( strcmp( Version, VERSION ) )
247   {
248     rdsend();
249     return( 0 );
250   }
251 
252   fscanf( FileConfig, "X: %11d, Y: %11d, WIDTH: %11d, HEIGHT: %11d, MANAGED: %11d\n",
253           &Values[0], &Values[1], &Values[2], &Values[3], &Values[4] );
254 
255   XtVaSetValues( GraalTopLevel,
256                  XmNx        , Values[0],
257                  XmNy        , Values[1],
258                  XmNwidth    , Values[2],
259                  XmNheight   , Values[3],
260                  NULL );
261   rdsend();
262   return( 1 );
263 }
264 
265 /*------------------------------------------------------------\
266 |                                                             |
267 |                         ReadActiveLayers                    |
268 |                                                             |
269 \------------------------------------------------------------*/
270 
GraalReadActiveLayers()271 void GraalReadActiveLayers()
272 
273 {
274   char Layer;
275   int  Value;
276 
277   rdsbegin();
278 
279   for ( Layer = 0; Layer < RDS_ALL_LAYER; Layer++ )
280   {
281     fscanf( FileConfig, "ACTIVE: %11d\n", &Value );
282 
283     if ( ( GRAAL_RDS_LAYER_NAME_TABLE[ (int)Layer ][ 0 ] != (char *)NULL ) &&
284          ( RDS_DYNAMIC_LAYER[ (int)Layer ] != RDS_LAYER_UNUSED           ) )
285     {
286       GRAAL_RDS_ACTIVE_LAYER_TABLE[ (int)Layer ] = Value;
287     }
288     else
289     {
290       GRAAL_RDS_ACTIVE_LAYER_TABLE[ (int)Layer ] = -1;
291     }
292   }
293 
294   for ( Layer = 0; Layer < GRAAL_MAX_ACTIVE_NAME; Layer++ )
295   {
296     fscanf( FileConfig, "ACTIVE: %11d\n", &Value );
297 
298     GRAAL_RDS_ACTIVE_NAME_TABLE[ (int)Layer ] = Value;
299   }
300 
301   fscanf( FileConfig, "FILLMODE: %11d\n", &Value );
302 
303   GRAAL_FILL_MODE = Value;
304 
305   fscanf( FileConfig, "INTERFACE: %11d\n", &Value );
306 
307   GRAAL_INSTANCE_INTERFACE = Value;
308 
309   rdsend();
310 }
311 
312 /*------------------------------------------------------------\
313 |                                                             |
314 |                        WriteActiveLayers                    |
315 |                                                             |
316 \------------------------------------------------------------*/
317 
GraalWriteActiveLayers()318 void GraalWriteActiveLayers()
319 
320 {
321   char Layer;
322 
323   rdsbegin();
324 
325   for ( Layer = 0; Layer < RDS_ALL_LAYER; Layer++ )
326   {
327     fprintf( FileConfig, "ACTIVE: %d\n",
328              ( GRAAL_RDS_ACTIVE_LAYER_TABLE[ (int)Layer ] != 0 ) );
329   }
330 
331   for ( Layer = 0; Layer < GRAAL_MAX_ACTIVE_NAME; Layer++ )
332   {
333     fprintf( FileConfig, "ACTIVE: %d\n",
334              GRAAL_RDS_ACTIVE_NAME_TABLE[ (int)Layer ] );
335   }
336 
337   fprintf( FileConfig, "FILLMODE: %d\n",
338            GRAAL_FILL_MODE );
339 
340   fprintf( FileConfig, "INTERFACE: %d\n",
341            GRAAL_INSTANCE_INTERFACE );
342 
343   rdsend();
344 }
345 
346 /*------------------------------------------------------------\
347 |                                                             |
348 |                   GraalDefaultTopLevelValues                |
349 |                                                             |
350 \------------------------------------------------------------*/
351 
GraalDefaultTopLevelValues()352 void GraalDefaultTopLevelValues()
353 
354 {
355   rdsbegin();
356 
357   XtVaSetValues( GraalTopLevel,
358                  XmNheight   , GRAAL_TOPLEVEL_HEIGHT,
359                  XmNwidth    , GRAAL_TOPLEVEL_WIDTH,
360                  XmNx        , GRAAL_TOPLEVEL_X,
361                  XmNy        , GRAAL_TOPLEVEL_Y,
362                  NULL
363                );
364 
365   rdsend();
366 }
367 
368 /*------------------------------------------------------------\
369 |                                                             |
370 |                        GraalDefaultConfig                   |
371 |                                                             |
372 \------------------------------------------------------------*/
373 
GraalDefaultConfig()374 void GraalDefaultConfig()
375 
376 {
377   char      Layer;
378 
379   rdsbegin();
380 
381   GraalDefaultTopLevelValues();
382 
383   GraalSetPanelValues( &GraalViewArrowsPanel,
384                         GraalViewArrowsDefaultValues );
385   GraalSetPanelValues( &GraalViewZoomPanel,
386                         GraalViewZoomDefaultValues );
387   GraalSetPanelValues( &GraalViewLayerPanel,
388                         GraalViewLayerDefaultValues );
389   GraalSetPanelValues( &GraalViewGridPanel,
390                         GraalViewGridDefaultValues );
391   GraalSetPanelValues( &GraalViewMapPanel,
392                         GraalViewMapDefaultValues );
393   GraalSetPanelValues( &GraalEditGlobalPanel,
394                         GraalEditGlobalDefaultValues );
395   GraalSetPanelValues( &GraalWindowGlobalPanel,
396                         GraalWindowGlobalDefaultValues );
397   GraalSetPanelValues( &GraalEditSelectPanel,
398                         GraalEditSelectDefaultValues );
399   GraalSetPanelValues( &GraalEditIdentifyPanel,
400                         GraalEditIdentifyDefaultValues );
401   GraalSetPanelValues( &GraalEditSearchPanel,
402                         GraalEditSearchDefaultValues );
403   GraalSetPanelValues( &GraalEditSearchViewPanel,
404                         GraalEditSearchViewDefaultValues );
405   GraalSetPanelValues( &GraalModifySegmentPanel,
406                         GraalModifySegmentDefaultValues );
407   GraalSetPanelValues( &GraalModifyViaPanel,
408                         GraalModifyViaDefaultValues );
409   GraalSetPanelValues( &GraalModifyBigViaPanel,
410                         GraalModifyBigViaDefaultValues );
411   GraalSetPanelValues( &GraalModifyTransistorPanel,
412                         GraalModifyTransistorDefaultValues );
413   GraalSetPanelValues( &GraalModifyConnectorPanel,
414                         GraalModifyConnectorDefaultValues );
415   GraalSetPanelValues( &GraalModifyReferencePanel,
416                         GraalModifyReferenceDefaultValues );
417   GraalSetPanelValues( &GraalModifyInstancePanel,
418                         GraalModifyInstanceDefaultValues );
419   GraalSetPanelValues( &GraalCreateSegmentPanel,
420                         GraalCreateSegmentDefaultValues );
421   GraalSetPanelValues( &GraalCreateViaPanel,
422                         GraalCreateViaDefaultValues );
423   GraalSetPanelValues( &GraalCreateBigViaPanel,
424                         GraalCreateBigViaDefaultValues );
425   GraalSetPanelValues( &GraalCreateTransistorPanel,
426                         GraalCreateTransistorDefaultValues );
427   GraalSetPanelValues( &GraalCreateConnectorPanel,
428                         GraalCreateConnectorDefaultValues );
429   GraalSetPanelValues( &GraalCreateReferencePanel,
430                         GraalCreateReferenceDefaultValues );
431   GraalSetPanelValues( &GraalCreateInstancePanel,
432                         GraalCreateInstanceDefaultValues );
433   GraalSetPanelValues( &GraalToolsGlobalPanel,
434                         GraalToolsGlobalDefaultValues );
435   GraalSetPanelValues( &GraalToolsMessagePanel,
436                         GraalToolsMessageDefaultValues );
437   GraalSetPanelValues( &GraalToolsDrucPanel,
438                         GraalToolsDrucDefaultValues );
439   GraalSetPanelValues( &GraalToolsHierarchyPanel,
440                         GraalToolsHierarchyDefaultValues );
441   GraalSetPanelValues( &GraalSetupInformationsPanel,
442                         GraalSetupInformationsDefaultValues );
443   GraalSetPanelValues( &GraalHelpPresentPanel,
444                         GraalHelpPresentDefaultValues );
445 
446   for ( Layer = 0; Layer < RDS_ALL_LAYER; Layer++ )
447   {
448     if ( ( GRAAL_RDS_LAYER_NAME_TABLE[ (int)Layer ][ 0 ] != (char *)NULL ) &&
449          ( RDS_DYNAMIC_LAYER[ (int)Layer ] != RDS_LAYER_UNUSED           ) )
450     {
451       GRAAL_RDS_ACTIVE_LAYER_TABLE[ (int)Layer ] = 1;
452     }
453     else
454     {
455       GRAAL_RDS_ACTIVE_LAYER_TABLE[ (int)Layer ] = -1;
456     }
457   }
458 
459   for ( Layer = 0; Layer < GRAAL_MAX_ACTIVE_NAME; Layer++ )
460   {
461     GRAAL_RDS_ACTIVE_NAME_TABLE[ (int)Layer ] = 1;
462   }
463 
464   GRAAL_FILL_MODE = GRAAL_FILL_MODE_PATTERN;
465   GRAAL_INSTANCE_INTERFACE = GRAAL_TRUE;
466 
467   GraalInitializeLayer();
468 
469   rdsend();
470 }
471 
472 /*------------------------------------------------------------\
473 |                                                             |
474 |                   GraalLoadTopLevelConfig                   |
475 |                                                             |
476 \------------------------------------------------------------*/
477 
GraalLoadTopLevelConfig()478 void GraalLoadTopLevelConfig()
479 
480 {
481   rdsbegin();
482 
483   FileConfig = fopen( GRAAL_GMS_FILE_NAME, "r" );
484 
485   if ( FileConfig == (FILE *)NULL )
486   {
487     GraalDefaultTopLevelValues();
488   }
489   else
490   {
491     if ( ! GraalReadTopLevelValues() )
492     {
493       GraalDefaultTopLevelValues();
494     }
495 
496     fclose( FileConfig );
497   }
498 
499   rdsend();
500 }
501 
502 /*------------------------------------------------------------\
503 |                                                             |
504 |                          GraalLoadConfig                    |
505 |                                                             |
506 \------------------------------------------------------------*/
507 
GraalLoadConfig(Message)508 void GraalLoadConfig( Message )
509 
510   char Message;
511 {
512   rdsbegin();
513 
514   FileConfig = fopen( GRAAL_GMS_FILE_NAME, "r" );
515 
516   if ( FileConfig == (FILE *)NULL )
517   {
518     if ( Message )
519     {
520       GraalErrorMessage( GraalMainWindow,
521                          "Unable to open config file !" );
522     }
523     else
524     {
525       GraalDefaultConfig();
526     }
527   }
528   else
529   {
530     if ( GraalReadTopLevelValues() )
531     {
532       GraalReadPanelValues( &GraalViewArrowsPanel        );
533       GraalReadPanelValues( &GraalViewZoomPanel          );
534       GraalReadPanelValues( &GraalViewLayerPanel         );
535       GraalReadPanelValues( &GraalViewGridPanel          );
536       GraalReadPanelValues( &GraalViewMapPanel           );
537       GraalReadPanelValues( &GraalEditGlobalPanel        );
538       GraalReadPanelValues( &GraalWindowGlobalPanel      );
539       GraalReadPanelValues( &GraalEditSelectPanel        );
540       GraalReadPanelValues( &GraalEditIdentifyPanel      );
541       GraalReadPanelValues( &GraalEditSearchPanel        );
542       GraalReadPanelValues( &GraalEditSearchViewPanel    );
543       GraalReadPanelValues( &GraalModifySegmentPanel     );
544       GraalReadPanelValues( &GraalModifyViaPanel         );
545       GraalReadPanelValues( &GraalModifyBigViaPanel      );
546       GraalReadPanelValues( &GraalModifyTransistorPanel  );
547       GraalReadPanelValues( &GraalModifyConnectorPanel   );
548       GraalReadPanelValues( &GraalModifyReferencePanel   );
549       GraalReadPanelValues( &GraalModifyInstancePanel    );
550       GraalReadPanelValues( &GraalCreateSegmentPanel     );
551       GraalReadPanelValues( &GraalCreateViaPanel         );
552       GraalReadPanelValues( &GraalCreateBigViaPanel      );
553       GraalReadPanelValues( &GraalCreateTransistorPanel  );
554       GraalReadPanelValues( &GraalCreateConnectorPanel   );
555       GraalReadPanelValues( &GraalCreateReferencePanel   );
556       GraalReadPanelValues( &GraalCreateInstancePanel    );
557       GraalReadPanelValues( &GraalToolsGlobalPanel       );
558       GraalReadPanelValues( &GraalToolsMessagePanel      );
559       GraalReadPanelValues( &GraalToolsDrucPanel         );
560       GraalReadPanelValues( &GraalToolsHierarchyPanel    );
561       GraalReadPanelValues( &GraalSetupInformationsPanel );
562       GraalReadPanelValues( &GraalHelpPresentPanel       );
563 
564       GraalReadActiveLayers();
565       GraalInitializeLayer();
566     }
567     else
568     if ( Message )
569     {
570       GraalErrorMessage( GraalMainWindow,
571                          "Bad version, unable to open config file !" );
572     }
573     else
574     {
575       GraalDefaultConfig();
576     }
577 
578     fclose( FileConfig );
579   }
580 
581   rdsend();
582 }
583 
584 /*------------------------------------------------------------\
585 |                                                             |
586 |                          GraalSaveConfig                    |
587 |                                                             |
588 \------------------------------------------------------------*/
589 
GraalSaveConfig()590 void GraalSaveConfig()
591 
592 {
593   rdsbegin();
594 
595   FileConfig = fopen( GRAAL_GMS_FILE_NAME, "w" );
596 
597   if ( FileConfig == (FILE *)NULL )
598   {
599     GraalErrorMessage( GraalMainWindow,
600                        "Unable to open config file !" );
601   }
602   else
603   {
604     GraalWriteTopLevelValues();
605 
606     GraalWritePanelValues( &GraalViewArrowsPanel        );
607     GraalWritePanelValues( &GraalViewZoomPanel          );
608     GraalWritePanelValues( &GraalViewLayerPanel         );
609     GraalWritePanelValues( &GraalViewGridPanel          );
610     GraalWritePanelValues( &GraalViewMapPanel           );
611     GraalWritePanelValues( &GraalEditGlobalPanel        );
612     GraalWritePanelValues( &GraalWindowGlobalPanel      );
613     GraalWritePanelValues( &GraalEditSelectPanel        );
614     GraalWritePanelValues( &GraalEditIdentifyPanel      );
615     GraalWritePanelValues( &GraalEditSearchPanel        );
616     GraalWritePanelValues( &GraalEditSearchViewPanel    );
617     GraalWritePanelValues( &GraalModifySegmentPanel     );
618     GraalWritePanelValues( &GraalModifyViaPanel         );
619     GraalWritePanelValues( &GraalModifyBigViaPanel      );
620     GraalWritePanelValues( &GraalModifyTransistorPanel  );
621     GraalWritePanelValues( &GraalModifyConnectorPanel   );
622     GraalWritePanelValues( &GraalModifyReferencePanel   );
623     GraalWritePanelValues( &GraalModifyInstancePanel    );
624     GraalWritePanelValues( &GraalCreateSegmentPanel     );
625     GraalWritePanelValues( &GraalCreateViaPanel         );
626     GraalWritePanelValues( &GraalCreateBigViaPanel      );
627     GraalWritePanelValues( &GraalCreateTransistorPanel  );
628     GraalWritePanelValues( &GraalCreateConnectorPanel   );
629     GraalWritePanelValues( &GraalCreateReferencePanel   );
630     GraalWritePanelValues( &GraalCreateInstancePanel    );
631     GraalWritePanelValues( &GraalToolsGlobalPanel       );
632     GraalWritePanelValues( &GraalToolsMessagePanel      );
633     GraalWritePanelValues( &GraalToolsDrucPanel         );
634     GraalWritePanelValues( &GraalToolsHierarchyPanel    );
635     GraalWritePanelValues( &GraalSetupInformationsPanel );
636     GraalWritePanelValues( &GraalHelpPresentPanel       );
637 
638     GraalWriteActiveLayers();
639 
640     fclose( FileConfig );
641   }
642 
643   rdsend();
644 }
645