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    :                   Panel.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 <sys/types.h>
47 # include <sys/stat.h>
48 # include <string.h>
49 # include <Xm/Xm.h>
50 # include <Xm/Form.h>
51 # include <Xm/LabelG.h>
52 # include <Xm/Label.h>
53 # include <Xm/Frame.h>
54 # include <Xm/List.h>
55 # include <Xm/Text.h>
56 # include <Xm/PushB.h>
57 # include <Xm/FileSB.h>
58 
59 # include "mut.h"
60 # include "mph.h"
61 # include "rds.h"
62 # include "rpr.h"
63 # include "rfm.h"
64 # include "GRM.h"
65 # include "GMX.h"
66 # include "GTB.h"
67 # include "GSB.h"
68 # include "GMF.h"
69 
70 # include "GMF_panel.h"
71 # include "GMF_dialog.h"
72 # include "GMC_dialog.h"
73 # include "GMT_dialog.h"
74 # include "GME_dialog.h"
75 
76 /*------------------------------------------------------------\
77 |                                                             |
78 |                           Constants                         |
79 |                                                             |
80 \------------------------------------------------------------*/
81 /*------------------------------------------------------------\
82 |                                                             |
83 |                            Types                            |
84 |                                                             |
85 \------------------------------------------------------------*/
86 /*------------------------------------------------------------\
87 |                                                             |
88 |                          Variables                          |
89 |                                                             |
90 \------------------------------------------------------------*/
91 
92    GraalPanelItem GraalLibraryPanel =
93 
94          {
95            "Library",
96            1,
97            0,
98            GRAAL_LIBRARY_X,
99            GRAAL_LIBRARY_Y,
100            250,
101            375,
102            1,
103            1,
104            (Widget)NULL,
105            (Widget)NULL,
106            (Widget)NULL,
107            (Widget)NULL,
108            0,
109            (GraalPanelButtonItem *)NULL
110          };
111 
112    int GraalLibraryDefaultValues[ 5 ] =
113 
114          {
115            GRAAL_LIBRARY_X,
116            GRAAL_LIBRARY_Y,
117            250, 375, 0
118          };
119 
120    static char **GRAAL_CATA_LIB    = (char **)NULL;
121    static char  *GRAAL_DEFAULT_LIB = (char *)NULL;
122           char  *GRAAL_WORK_LIB    = (char  *)NULL;
123 
124    static char   GraalFirstLibrary = 1;
125 
126 /*------------------------------------------------------------\
127 |                                                             |
128 |                            Buffer                           |
129 |                                                             |
130 \------------------------------------------------------------*/
131 /*------------------------------------------------------------\
132 |                                                             |
133 |                    Widget For Library Panel                 |
134 |                                                             |
135 \------------------------------------------------------------*/
136 
137   Widget     GraalLibraryListLabel;
138   Widget     GraalLibraryList;
139 
140   Widget     GraalLibraryButtonOk;
141   Widget     GraalLibraryButtonUpdate;
142   Widget     GraalLibraryButtonCancel;
143 
144   Widget     GraalLibraryCataLabel;
145   Widget     GraalLibraryCata;
146 
147   Widget     GraalLibraryWorkLabel;
148   Widget     GraalLibraryWork;
149 
150 /*------------------------------------------------------------\
151 |                                                             |
152 |                          Functions                          |
153 |                                                             |
154 \------------------------------------------------------------*/
155 /*------------------------------------------------------------\
156 |                                                             |
157 |                        GraalIsDirectory                     |
158 |                                                             |
159 \------------------------------------------------------------*/
160 
GraalIsDirectory(FileName)161 char GraalIsDirectory( FileName )
162 
163    char *FileName;
164 {
165   struct stat Buffer;
166 
167   rdsbegin();
168 
169   if ( stat( FileName, &Buffer ) != -1 )
170   {
171     if ( ( Buffer.st_mode & S_IFMT ) == S_IFDIR )
172     {
173       rdsend();
174       return( 1 );
175     }
176   }
177 
178   rdsend();
179   return( 0 );
180 }
181 
182 /*-----------------------------------------------------------*\
183 |                                                             |
184 |                     GraalAddDirectoryToCataLibrary          |
185 |                                                             |
186 \------------------------------------------------------------*/
187 
GraalAddDirectoryToCataLibrary(Directory)188 void GraalAddDirectoryToCataLibrary( Directory )
189 
190   char *Directory;
191 {
192   char **NewCataLib;
193   int    Index;
194 
195   if ( ! GraalIsDirectory( Directory ) ) return;
196 
197   for ( Index = 0;
198         CATA_LIB[ Index ] != (char *)NULL;
199         Index++ )
200   {
201     if ( ! strcmp( CATA_LIB[ Index ], Directory ) ) return;
202   }
203 
204   NewCataLib = (char **)rdsallocblock( sizeof(char *) * ( Index + 2 ));
205 
206   for ( Index = 0;
207         CATA_LIB[ Index ] != (char *)NULL;
208         Index++ )
209   {
210     NewCataLib[ Index ] = CATA_LIB[ Index ];
211   }
212 
213   NewCataLib[ Index ] = rdsallocblock( strlen( Directory ) + 1 );
214   strcpy( NewCataLib[ Index ], Directory );
215 
216   rdsfreeblock( CATA_LIB );
217   CATA_LIB = NewCataLib;
218 }
219 
220 /*------------------------------------------------------------\
221 |                                                             |
222 |                      GraalSetLibraryList                    |
223 |                                                             |
224 \------------------------------------------------------------*/
225 
GraalSetLibraryList()226 void GraalSetLibraryList()
227 {
228   int      Index;
229   XmString Label;
230 
231   rdsbegin();
232 
233   XmListDeleteAllItems( GraalLibraryList );
234 
235   for ( Index = 0;
236         GRAAL_CATA_LIB[ Index ] != (char *)NULL;
237         Index++ )
238   {
239     Label = XmStringCreateSimple( GRAAL_CATA_LIB[ Index ] );
240     XmListAddItem( GraalLibraryList , Label , 0 );
241     XmStringFree( Label );
242   }
243 
244   Label = XmStringCreateSimple( GRAAL_WORK_LIB );
245   XmListAddItem( GraalLibraryList , Label , 0 );
246   XmStringFree( Label );
247 
248   GRAAL_DEFAULT_LIB = (char *)NULL;
249 
250   rdsend();
251 }
252 
253 /*------------------------------------------------------------\
254 |                                                             |
255 |                      GraalSetWorkLibrary                    |
256 |                                                             |
257 \------------------------------------------------------------*/
258 
GraalSetWorkLibrary()259 void GraalSetWorkLibrary()
260 {
261   rdsbegin();
262 
263   XmTextSetString( GraalLibraryWork, GRAAL_WORK_LIB );
264 
265   rdsend();
266 }
267 
268 /*------------------------------------------------------------\
269 |                                                             |
270 |                      GraalSetCataLibrary                    |
271 |                                                             |
272 \------------------------------------------------------------*/
273 
GraalSetCataLibrary()274 void GraalSetCataLibrary()
275 {
276   int   Index;
277   long  Length;
278   char *Buffer;
279   char *Scan;
280 
281   rdsbegin();
282 
283   for ( Index = 0, Length = 0;
284         GRAAL_CATA_LIB[ Index ] != (char *)NULL;
285         Index++ )
286   {
287     Length = Length + strlen( GRAAL_CATA_LIB[ Index ] ) + 1;
288   }
289 
290   Buffer = rdsallocblock( Length + 1 );
291   Scan   = Buffer;
292 
293   for ( Index = 0;
294         GRAAL_CATA_LIB[ Index ] != (char *)NULL;
295         Index++ )
296   {
297     strcpy( Scan, GRAAL_CATA_LIB[ Index ] );
298     strcat( Scan, "\n" );
299 
300     Scan = Scan + strlen( Scan );
301   }
302 
303   XmTextSetString( GraalLibraryCata, Buffer );
304 
305   rdsfreeblock( Buffer );
306 
307   rdsend();
308 }
309 
310 /*------------------------------------------------------------\
311 |                                                             |
312 |                     GraalInitializeLibrary                  |
313 |                                                             |
314 \------------------------------------------------------------*/
315 
GraalInitializeLibrary()316 void GraalInitializeLibrary()
317 {
318   int Index;
319 
320   rdsbegin();
321 
322   for ( Index = 0; CATA_LIB[ Index ] != (char *)NULL; Index++ );
323 
324   GRAAL_CATA_LIB = (char **)rdsallocblock( sizeof(char *) * ( Index + 1 ));
325 
326   for ( Index = 0;
327         CATA_LIB[ Index ] != (char *)NULL;
328         Index++ )
329   {
330     GRAAL_CATA_LIB[ Index ] = rdsallocblock( strlen( CATA_LIB[ Index ] ) + 1 );
331     strcpy( GRAAL_CATA_LIB[ Index ], CATA_LIB[ Index ] );
332   }
333 
334   GRAAL_CATA_LIB[ Index ] = (char *)NULL;
335 
336   GRAAL_WORK_LIB = rdsallocblock( strlen( WORK_LIB ) + 1 );
337   strcpy( GRAAL_WORK_LIB, WORK_LIB );
338 
339   GraalSetCataLibrary();
340   GraalSetWorkLibrary();
341   GraalSetLibraryList();
342 
343   rdsend();
344 }
345 
346 /*------------------------------------------------------------\
347 |                                                             |
348 |                     GraalGetCataLibrary                     |
349 |                                                             |
350 \------------------------------------------------------------*/
351 
GraalGetCataLibrary()352  void GraalGetCataLibrary()
353  {
354   char *NewCata;
355   char *Scan;
356   int   Index;
357   int   Count;
358   int   Length;
359 
360   rdsbegin();
361 
362   for ( Index = 0;
363         GRAAL_CATA_LIB[ Index ] != (char *)NULL;
364         Index++ )
365   {
366     rdsfreeblock( GRAAL_CATA_LIB[ Index ] );
367   }
368 
369   rdsfreeblock( GRAAL_CATA_LIB );
370 
371   NewCata = XmTextGetString( GraalLibraryCata );
372 
373   Count = 1;
374 
375   for ( Index = 0; NewCata[ Index ] != '\0'; Index++ )
376   {
377     if ( NewCata[ Index ] == '\n' )
378     {
379       Count = Count + 1;
380     }
381   }
382 
383   GRAAL_CATA_LIB = (char **)rdsallocblock( sizeof(char *) * ( Count + 1 ));
384 
385   Count = 0;
386   Scan  = NewCata;
387 
388   for ( Index = 0; NewCata[ Index ] != '\0'; Index++ )
389   {
390     if ( NewCata[ Index ] == '\n' )
391     {
392       NewCata[ Index ] = '\0';
393 
394       Length = strlen( Scan );
395 
396       if ( ( Length > 0               ) &&
397            ( GraalIsDirectory( Scan ) ) )
398       {
399         GRAAL_CATA_LIB[ Count ] = rdsallocblock( Length + 1 );
400         strcpy( GRAAL_CATA_LIB[ Count ], Scan );
401         Count = Count + 1;
402       }
403 
404       Scan  = NewCata + Index + 1;
405     }
406     else
407     if ( NewCata[ Index ] == ' ' )
408     {
409       NewCata[ Index ] = '\0';
410     }
411   }
412 
413   Length = strlen( Scan );
414 
415   if ( Length > 0 )
416   {
417     GRAAL_CATA_LIB[ Count ] = rdsallocblock( Length + 1 );
418     strcpy( GRAAL_CATA_LIB[ Count ], Scan );
419     Count = Count + 1;
420   }
421 
422   GRAAL_CATA_LIB[ Count ] = (char *)NULL;
423 
424   rdsend();
425 }
426 
427 /*------------------------------------------------------------\
428 |                                                             |
429 |                     GraalGetWorkLibrary                     |
430 |                                                             |
431 \------------------------------------------------------------*/
432 
GraalGetWorkLibrary()433 void GraalGetWorkLibrary()
434 {
435   char *NewWork;
436 
437   rdsbegin();
438 
439   rdsfreeblock( GRAAL_WORK_LIB );
440 
441   NewWork = XmTextGetString( GraalLibraryWork );
442 
443   if ( GraalIsDirectory( NewWork ) )
444   {
445     GRAAL_WORK_LIB = rdsallocblock( strlen( NewWork ) + 1 );
446     strcpy( GRAAL_WORK_LIB, NewWork );
447   }
448 
449   rdsend();
450 }
451 
452 /*------------------------------------------------------------\
453 |                                                             |
454 |                       CallbackLibraryList                   |
455 |                                                             |
456 \------------------------------------------------------------*/
457 
CallbackLibraryList(MyWidget,ClientData,CallData)458 void CallbackLibraryList( MyWidget, ClientData, CallData )
459 
460      Widget                MyWidget;
461      caddr_t               ClientData;
462      XmListCallbackStruct *CallData;
463 {
464   rdsbegin();
465 
466   GRAAL_DEFAULT_LIB = GRAAL_CATA_LIB[ CallData->item_position - 1 ];
467 
468   if ( GRAAL_DEFAULT_LIB == (char *)NULL )
469   {
470     GRAAL_DEFAULT_LIB = GRAAL_WORK_LIB;
471   }
472 
473   rdsend();
474 }
475 
476 /*------------------------------------------------------------\
477 |                                                             |
478 |                        CallbackLibraryOk                    |
479 |                                                             |
480 \------------------------------------------------------------*/
481 
CallbackLibraryOk(MyWidget,ClientData,CallData)482 void CallbackLibraryOk( MyWidget, ClientData, CallData )
483 
484      Widget  MyWidget;
485      caddr_t ClientData;
486      caddr_t CallData;
487 {
488   XmString Label;
489   int      Index;
490 
491   rdsbegin();
492 
493   GraalExitPanel( &GraalLibraryPanel );
494 
495   GraalExitDialog();
496 
497   if ( GraalFirstLibrary == 0 )
498   {
499     for ( Index = 0;
500           CATA_LIB[ Index ] != (char *)NULL;
501           Index++ )
502     {
503       rdsfreeblock( CATA_LIB[ Index ] );
504     }
505 
506     rdsfreeblock( CATA_LIB );
507     rdsfreeblock( WORK_LIB );
508   }
509 
510   GraalFirstLibrary = 0;
511 
512   CATA_LIB = GRAAL_CATA_LIB;
513   WORK_LIB = GRAAL_WORK_LIB;
514 
515   if ( GRAAL_DEFAULT_LIB != (char *)NULL )
516   {
517     Label = XmStringCreateSimple( GRAAL_DEFAULT_LIB );
518 
519     XtVaSetValues( GraalFileOpenDialog.WIDGET,
520                    XmNdirectory, Label, NULL );
521 
522     XtVaSetValues( GraalChangeInstanceModelDialog.WIDGET,
523                    XmNdirectory, Label, NULL );
524 
525     XtVaSetValues( GraalToolsLoadErrorDialog.WIDGET,
526                    XmNdirectory, Label, NULL );
527 
528     XmStringFree( Label );
529   }
530 
531   rdsend();
532 }
533 
534 /*------------------------------------------------------------\
535 |                                                             |
536 |                        CallbackLibraryUpdate                |
537 |                                                             |
538 \------------------------------------------------------------*/
539 
CallbackLibraryUpdate(MyWidget,ClientData,CallData)540 void CallbackLibraryUpdate( MyWidget, ClientData, CallData )
541 
542      Widget  MyWidget;
543      caddr_t ClientData;
544      caddr_t CallData;
545 {
546   rdsbegin();
547 
548   GraalGetCataLibrary();
549   GraalGetWorkLibrary();
550   GraalSetLibraryList();
551 
552   rdsend();
553 }
554 
555 /*------------------------------------------------------------\
556 |                                                             |
557 |                       CallbackLibraryCancel                 |
558 |                                                             |
559 \------------------------------------------------------------*/
560 
CallbackLibraryCancel(MyWidget,ClientData,CallData)561 void CallbackLibraryCancel( MyWidget, ClientData, CallData )
562 
563      Widget  MyWidget;
564      caddr_t ClientData;
565      caddr_t CallData;
566 {
567   int Index;
568 
569   rdsbegin();
570 
571   for ( Index = 0;
572         GRAAL_CATA_LIB[ Index ] != (char *)NULL;
573         Index++ )
574   {
575     rdsfreeblock( GRAAL_CATA_LIB[ Index ] );
576   }
577 
578   rdsfreeblock( GRAAL_CATA_LIB );
579   rdsfreeblock( GRAAL_WORK_LIB );
580 
581   GraalExitPanel( &GraalLibraryPanel );
582 
583   GraalExitDialog();
584 
585   rdsend();
586 }
587 
588 /*------------------------------------------------------------\
589 |                                                             |
590 |                       CallbackEnterLibrary                  |
591 |                                                             |
592 \------------------------------------------------------------*/
593 
CallbackEnterLibrary(MyWidget,ClientData,CallData)594 void CallbackEnterLibrary( MyWidget, ClientData, CallData )
595 
596      Widget  MyWidget;
597      caddr_t ClientData;
598      caddr_t CallData;
599 {
600   rdsbegin();
601 
602   GraalInitializeLibrary();
603 
604   GraalEnterPanel( &GraalLibraryPanel );
605   GraalLimitedLoop( GraalLibraryPanel.PANEL );
606   GraalReEnterDialog();
607 
608   rdsend();
609 }
610 
611 /*------------------------------------------------------------\
612 |                                                             |
613 |                      GraalBuildPanelLibrary                 |
614 |                                                             |
615 \------------------------------------------------------------*/
616 
GraalBuildPanelLibrary()617 void GraalBuildPanelLibrary()
618 {
619   Arg      Args[15];
620   XmString Label;
621 
622   rdsbegin();
623 
624   XtSetArg( Args[0], XmNshadowType    , XmSHADOW_ETCHED_IN      );
625   XtSetArg( Args[1], XmNdeleteResponse, XmDO_NOTHING            );
626   XtSetArg( Args[2], XmNtitle         , GraalLibraryPanel.TITLE );
627 
628   GraalLibraryPanel.PANEL =
629 
630     XmCreateFormDialog( GraalMainWindow, "GraalLibraryPanel", Args, 3);
631 
632   XtAddCallback( GraalLibraryPanel.PANEL, XmNdestroyCallback,
633                  GraalDestroyDialogCallback, NULL  );
634 
635   GraalLibraryPanel.PANEL_FORM =
636 
637     XtVaCreateManagedWidget( "GraalLibraryPanelForm",
638                              xmFormWidgetClass,
639                              GraalLibraryPanel.PANEL,
640                              XmNtopAttachment    , XmATTACH_FORM,
641                              XmNbottomAttachment , XmATTACH_FORM,
642                              XmNleftAttachment   , XmATTACH_FORM,
643                              XmNrightAttachment  , XmATTACH_FORM,
644                              XmNfractionBase     , 10,
645                              NULL
646                            );
647 
648   GraalLibraryPanel.FRAME =
649 
650     XtVaCreateManagedWidget( "GraalLibraryFrame",
651                              xmFrameWidgetClass,
652                              GraalLibraryPanel.PANEL_FORM,
653                              XmNtopAttachment    , XmATTACH_FORM,
654                              XmNbottomAttachment , XmATTACH_FORM,
655                              XmNleftAttachment   , XmATTACH_FORM,
656                              XmNrightAttachment  , XmATTACH_FORM,
657                              NULL
658                            );
659 
660   GraalLibraryPanel.FORM =
661 
662     XtVaCreateManagedWidget( "GraalLibraryForm",
663                              xmFormWidgetClass,
664                              GraalLibraryPanel.FRAME,
665                              XmNtopAttachment    , XmATTACH_FORM,
666                              XmNbottomAttachment , XmATTACH_FORM,
667                              XmNleftAttachment   , XmATTACH_FORM,
668                              XmNrightAttachment  , XmATTACH_FORM,
669                              XmNfractionBase     , 120,
670                              NULL
671                            );
672 
673   GraalLibraryButtonUpdate =
674 
675     XtVaCreateManagedWidget( "Update",
676                              xmPushButtonWidgetClass,
677                              GraalLibraryPanel.FORM,
678                              XmNleftAttachment   , XmATTACH_POSITION,
679                              XmNleftPosition     , 10,
680                              XmNrightAttachment  , XmATTACH_POSITION,
681                              XmNrightPosition    , 40,
682                              XmNtopAttachment    , XmATTACH_POSITION,
683                              XmNtopPosition      , 105,
684                              XmNbottomAttachment , XmATTACH_POSITION,
685                              XmNbottomPosition   , 115,
686                              NULL
687                            );
688 
689   GraalLibraryButtonOk =
690 
691     XtVaCreateManagedWidget( "Ok",
692                              xmPushButtonWidgetClass,
693                              GraalLibraryPanel.FORM,
694                              XmNleftAttachment   , XmATTACH_POSITION,
695                              XmNleftPosition     , 50,
696                              XmNrightAttachment  , XmATTACH_POSITION,
697                              XmNrightPosition    , 70,
698                              XmNtopAttachment    , XmATTACH_POSITION,
699                              XmNtopPosition      , 105,
700                              XmNbottomAttachment , XmATTACH_POSITION,
701                              XmNbottomPosition   , 115,
702                              NULL
703                            );
704 
705   GraalLibraryButtonCancel =
706 
707     XtVaCreateManagedWidget( "Cancel",
708                              xmPushButtonWidgetClass,
709                              GraalLibraryPanel.FORM,
710                              XmNleftAttachment   , XmATTACH_POSITION,
711                              XmNleftPosition     , 80,
712                              XmNrightAttachment  , XmATTACH_POSITION,
713                              XmNrightPosition    , 110,
714                              XmNtopAttachment    , XmATTACH_POSITION,
715                              XmNtopPosition      , 105,
716                              XmNbottomAttachment , XmATTACH_POSITION,
717                              XmNbottomPosition   , 115,
718                              NULL
719                            );
720 
721   Label = XmStringCreateSimple( "Directories" );
722 
723   GraalLibraryListLabel =
724 
725      XtVaCreateManagedWidget( "GraalLibraryListLabel",
726                               xmLabelGadgetClass      ,
727                               GraalLibraryPanel.FORM,
728                               XmNlabelString          , Label,
729                               XmNleftAttachment       , XmATTACH_POSITION,
730                               XmNleftPosition         , 5,
731                               XmNtopAttachment        , XmATTACH_POSITION,
732                               XmNtopPosition          , 5,
733                               XmNbottomAttachment     , XmATTACH_POSITION,
734                               XmNbottomPosition       , 10,
735                               NULL );
736 
737   XmStringFree( Label );
738 
739   XtSetArg( Args[0]  , XmNtopAttachment         , XmATTACH_POSITION );
740   XtSetArg( Args[1]  , XmNtopPosition           , 10 );
741   XtSetArg( Args[2]  , XmNbottomAttachment      , XmATTACH_POSITION );
742   XtSetArg( Args[3]  , XmNbottomPosition        , 40 );
743   XtSetArg( Args[4]  , XmNrightAttachment       , XmATTACH_POSITION );
744   XtSetArg( Args[5]  , XmNrightPosition         , 115 );
745   XtSetArg( Args[6]  , XmNleftAttachment        , XmATTACH_POSITION );
746   XtSetArg( Args[7]  , XmNleftPosition          , 5 );
747   XtSetArg( Args[8]  , XmNscrollBarDisplayPolicy, XmSTATIC );
748   XtSetArg( Args[9]  , XmNscrollHorizontal      , True );
749   XtSetArg( Args[10] , XmNscrollVertical        , True );
750   XtSetArg( Args[11] , XmNlistSizePolicy        , XmCONSTANT );
751 
752   GraalLibraryList =
753 
754     XmCreateScrolledList( GraalLibraryPanel.FORM,
755                           "GraalLibraryList", Args, 12 );
756 
757   Label = XmStringCreateSimple( "Catalog libraries" );
758 
759   GraalLibraryCataLabel =
760 
761      XtVaCreateManagedWidget( "GraalLibraryCataLabel",
762                               xmLabelGadgetClass      ,
763                               GraalLibraryPanel.FORM,
764                               XmNlabelString          , Label,
765                               XmNleftAttachment       , XmATTACH_POSITION,
766                               XmNleftPosition         , 5,
767                               XmNtopAttachment        , XmATTACH_POSITION,
768                               XmNtopPosition          , 45,
769                               XmNbottomAttachment     , XmATTACH_POSITION,
770                               XmNbottomPosition       , 50,
771                               NULL );
772 
773   XmStringFree( Label );
774 
775   XtSetArg( Args[0]  , XmNrows                  , 4 );
776   XtSetArg( Args[1]  , XmNeditable              , True );
777   XtSetArg( Args[2]  , XmNcursorPositionVisible , True );
778   XtSetArg( Args[3]  , XmNscrollHorizontal      , True );
779   XtSetArg( Args[4]  , XmNscrollVertical        , True );
780   XtSetArg( Args[5]  , XmNeditMode              , XmMULTI_LINE_EDIT );
781   XtSetArg( Args[6]  , XmNtopAttachment         , XmATTACH_POSITION );
782   XtSetArg( Args[7]  , XmNtopPosition           , 50 );
783   XtSetArg( Args[8]  , XmNleftAttachment        , XmATTACH_POSITION );
784   XtSetArg( Args[9]  , XmNleftPosition          , 5 );
785   XtSetArg( Args[10] , XmNrightAttachment       , XmATTACH_POSITION );
786   XtSetArg( Args[11] , XmNrightPosition         , 115 );
787   XtSetArg( Args[12] , XmNbottomAttachment      , XmATTACH_POSITION );
788   XtSetArg( Args[13] , XmNbottomPosition        , 80 );
789 
790   GraalLibraryCata  =
791 
792     XmCreateScrolledText( GraalLibraryPanel.FORM,
793                           "GraalLibraryCata", Args, 14 );
794 
795   Label = XmStringCreateSimple( "Work library" );
796 
797   GraalLibraryWorkLabel =
798 
799      XtVaCreateManagedWidget( "GraalLibraryWorkLabel",
800                               xmLabelGadgetClass      ,
801                               GraalLibraryPanel.FORM,
802                               XmNlabelString          , Label,
803                               XmNleftAttachment       , XmATTACH_POSITION,
804                               XmNleftPosition         , 5,
805                               XmNtopAttachment        , XmATTACH_POSITION,
806                               XmNtopPosition          , 85,
807                               XmNbottomAttachment     , XmATTACH_POSITION,
808                               XmNbottomPosition       , 90,
809                               NULL );
810   XmStringFree( Label );
811 
812   XtSetArg( Args[0]  , XmNrows                  , 1 );
813   XtSetArg( Args[1]  , XmNeditable              , True );
814   XtSetArg( Args[2]  , XmNeditMode              , XmSINGLE_LINE_EDIT );
815   XtSetArg( Args[3]  , XmNscrollHorizontal      , False );
816   XtSetArg( Args[4]  , XmNscrollVertical        , False );
817   XtSetArg( Args[5]  , XmNcursorPositionVisible , True  );
818   XtSetArg( Args[6]  , XmNtopAttachment         , XmATTACH_POSITION );
819   XtSetArg( Args[7]  , XmNtopPosition           , 90 );
820   XtSetArg( Args[8]  , XmNleftAttachment        , XmATTACH_POSITION );
821   XtSetArg( Args[9]  , XmNleftPosition          , 5 );
822   XtSetArg( Args[10] , XmNrightAttachment       , XmATTACH_POSITION );
823   XtSetArg( Args[11] , XmNrightPosition         , 115 );
824   XtSetArg( Args[12] , XmNbottomAttachment      , XmATTACH_POSITION );
825   XtSetArg( Args[13] , XmNbottomPosition        , 100 );
826 
827   GraalLibraryWork  =
828 
829     XmCreateText( GraalLibraryPanel.FORM,
830                   "GraalLibraryWork", Args, 14 );
831 
832   XtManageChild( GraalLibraryWork );
833   XtManageChild( GraalLibraryList );
834   XtManageChild( GraalLibraryCata );
835 
836   XtAddCallback( GraalLibraryList,
837                  XmNdefaultActionCallback,
838                  CallbackLibraryList, NULL );
839 
840   XtAddCallback( GraalLibraryButtonOk,
841                  XmNactivateCallback,
842                  CallbackLibraryOk, NULL );
843 
844   XtAddCallback( GraalLibraryButtonCancel,
845                  XmNactivateCallback,
846                  CallbackLibraryCancel, NULL );
847 
848   XtAddCallback( GraalLibraryButtonUpdate,
849                  XmNactivateCallback,
850                  CallbackLibraryUpdate, NULL );
851 
852   XtVaSetValues( GraalLibraryPanel.PANEL,
853                  XmNheight, GraalLibraryPanel.HEIGHT,
854                  XmNwidth , GraalLibraryPanel.WIDTH,
855                  XmNx     , GraalLibraryPanel.X,
856                  XmNy     , GraalLibraryPanel.Y,
857                  NULL );
858 
859   Label = XmStringCreateSimple( "Library" );
860 
861   XtVaSetValues( XmFileSelectionBoxGetChild( GraalFileOpenDialog.WIDGET,
862                  XmDIALOG_HELP_BUTTON ),
863                  XmNlabelString, Label, NULL  );
864 
865   XtVaSetValues( XmFileSelectionBoxGetChild( GraalChangeInstanceModelDialog.WIDGET,
866                  XmDIALOG_HELP_BUTTON ),
867                  XmNlabelString, Label, NULL  );
868 
869   XtVaSetValues( XmFileSelectionBoxGetChild( GraalToolsLoadErrorDialog.WIDGET,
870                  XmDIALOG_HELP_BUTTON ),
871                  XmNlabelString, Label, NULL  );
872 
873   XmStringFree( Label );
874 
875   XtAddCallback( XmFileSelectionBoxGetChild( GraalFileOpenDialog.WIDGET,
876                  XmDIALOG_HELP_BUTTON ),
877                  XmNactivateCallback, CallbackEnterLibrary, NULL );
878 
879   XtAddCallback( XmFileSelectionBoxGetChild( GraalChangeInstanceModelDialog.WIDGET,
880                  XmDIALOG_HELP_BUTTON ),
881                  XmNactivateCallback, CallbackEnterLibrary, NULL );
882 
883   XtAddCallback( XmFileSelectionBoxGetChild( GraalToolsLoadErrorDialog.WIDGET,
884                  XmDIALOG_HELP_BUTTON ),
885                  XmNactivateCallback, CallbackEnterLibrary, NULL );
886   rdsend();
887 }
888