home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 3 / goldfish_volume_3.bin / files / util / cdity / runlist3 / src / runlist3.c < prev    next >
C/C++ Source or Header  |  1995-04-24  |  22KB  |  810 lines

  1.  
  2.  /*
  3.  *  Source machine generated by GadToolsBox V2.0b
  4.  *  which is (c) Copyright 1991-1993 Jaba Development
  5.  *
  6.  *  GUI Designed by : -- Heinz Reinert --
  7.  */
  8.  
  9. #include <exec/types.h>
  10. #include <intuition/intuition.h>
  11. #include <intuition/classes.h>
  12. #include <intuition/classusr.h>
  13. #include <intuition/imageclass.h>
  14. #include <intuition/gadgetclass.h>
  15. #include <libraries/gadtools.h>
  16. #include <graphics/displayinfo.h>
  17. #include <graphics/gfxbase.h>
  18. #include <clib/exec_protos.h>
  19. #include <clib/intuition_protos.h>
  20. #include <clib/gadtools_protos.h>
  21. #include <clib/graphics_protos.h>
  22. #include <clib/utility_protos.h>
  23. #include <proto/intuition.h>
  24. #include <proto/graphics.h>
  25. #include <proto/exec.h>
  26. #include <proto/dos.h>
  27. #include <proto/gadtools.h>
  28. #include <exec/memory.h>
  29. #include <string.h>
  30.                                       
  31.  
  32. #define GetString( g )      ((( struct StringInfo * )g->SpecialInfo )->Buffer  )
  33. #define GetNumber( g )      ((( struct StringInfo * )g->SpecialInfo )->LongInt )
  34.  
  35. #define GD_list                                0
  36. #define GD_new                                 1
  37. #define GD_del                                 2
  38. #define GD_descr                               3
  39. #define GD_command1                            4
  40. #define GD_command2                            5
  41. #define GD_command3                            6
  42. #define GD_save                                7
  43. #define GD_runa                                8
  44. #define GD_run3                                9
  45. #define GD_run2                                10
  46. #define GD_run1                                11
  47.  
  48. #define GDX_list                               0
  49. #define GDX_new                                1
  50. #define GDX_del                                2
  51. #define GDX_descr                              3
  52. #define GDX_command1                           4
  53. #define GDX_command2                           5
  54. #define GDX_command3                           6
  55. #define GDX_save                               7
  56. #define GDX_runa                               8
  57. #define GDX_run3                               9
  58. #define GDX_run2                               10
  59. #define GDX_run1                               11
  60.  
  61. #define Project0_CNT 12
  62. UBYTE *vers = "\0$VER: RunList 3";
  63.  
  64. extern struct IntuitionBase *IntuitionBase;
  65. extern struct Library       *GadToolsBase;
  66.  
  67. extern struct Screen        *Scr;
  68. extern UBYTE                 *PubScreenName;
  69. extern APTR                  VisualInfo;
  70. extern struct Window        *Project0Wnd;
  71. extern struct Gadget        *Project0GList;
  72. extern struct Gadget        *Project0Gadgets[12];
  73. extern UWORD                 Project0Left;
  74. extern UWORD                 Project0Top;
  75. extern UWORD                 Project0Width;
  76. extern UWORD                 Project0Height;
  77. extern UBYTE                *Project0Wdt;
  78. extern struct TextAttr       topaz8;
  79. extern UWORD                 Project0GTypes[];
  80. extern struct NewGadget      Project0NGad[];
  81. extern ULONG                 Project0GTags[];
  82.  
  83.  
  84. extern int SetupScreen( void );
  85. extern void CloseDownScreen( void );
  86. extern int OpenProject0Window( void );
  87. extern void CloseProject0Window( void );
  88.  
  89.  
  90. struct Screen         *Scr = NULL;
  91. UBYTE                 *PubScreenName = NULL;
  92. APTR                   VisualInfo = NULL;
  93. struct Window         *Project0Wnd = NULL;
  94. struct Gadget         *Project0GList = NULL;
  95. struct Gadget         *Project0Gadgets[12];
  96. UWORD                  Project0Left = 323;
  97. UWORD                  Project0Top = 10;
  98. UWORD                  Project0Width = 325;
  99. UWORD                  Project0Height = 0;
  100. UBYTE                 *Project0Wdt = (UBYTE *)"RunList 3";
  101.  
  102. struct TextAttr topaz8 = {
  103.                 ( STRPTR )"topaz.font", 8, 0x00, 0x01 };
  104.  
  105. UWORD Project0GTypes[] = {
  106.         LISTVIEW_KIND,
  107.         BUTTON_KIND,
  108.         BUTTON_KIND,
  109.         STRING_KIND,
  110.         STRING_KIND,
  111.         STRING_KIND,
  112.         STRING_KIND,
  113.         BUTTON_KIND,
  114.         BUTTON_KIND,
  115.         BUTTON_KIND,
  116.         BUTTON_KIND,
  117.         BUTTON_KIND
  118. };      
  119.  
  120.  
  121. struct NewGadget Project0NGad[] = {
  122.         9, 4, 208, 177, NULL, NULL, GD_list, 0, NULL, NULL,
  123.         223, 4, 72, 14, (UBYTE *)"NEW", NULL, GD_new, PLACETEXT_IN, NULL, NULL,
  124.         223, 19, 72, 14, (UBYTE *)"DELETE", NULL, GD_del, PLACETEXT_IN, NULL, NULL,
  125.         9, 176, 208, 12, NULL, NULL, GD_descr, 0, NULL, NULL,
  126.         9, 191, 287, 12, NULL, NULL, GD_command1, 0, NULL, NULL,
  127.         9, 203, 287, 12, NULL, NULL, GD_command2, 0, NULL, NULL,
  128.         9, 215, 287, 12, NULL, NULL, GD_command3, 0, NULL, NULL,
  129.         223, 34, 72, 14, (UBYTE *)"SAVE", NULL, GD_save, PLACETEXT_IN, NULL, NULL,
  130.         223, 49, 72, 94, (UBYTE *)"RUN ALL", NULL, GD_runa, PLACETEXT_IN, NULL, NULL,
  131.         223, 174, 72, 14, (UBYTE *)"RUN 3", NULL, GD_run3, PLACETEXT_IN, NULL, NULL,
  132.         223, 159, 72, 14, (UBYTE *)"RUN 2", NULL, GD_run2, PLACETEXT_IN, NULL, NULL,
  133.         223, 144, 72, 14, (UBYTE *)"RUN 1", NULL, GD_run1, PLACETEXT_IN, NULL, NULL
  134. };
  135.  
  136. ULONG Project0GTags[] = {
  137.         (TAG_DONE),
  138.         (TAG_DONE),
  139.         (TAG_DONE),
  140.         (GTST_MaxChars), 256, (TAG_DONE),
  141.         (GTST_MaxChars), 256, (TAG_DONE),
  142.         (GTST_MaxChars), 256, (TAG_DONE),
  143.         (GTST_MaxChars), 256, (TAG_DONE),
  144.         (TAG_DONE),
  145.         (TAG_DONE),
  146.         (TAG_DONE),
  147.         (TAG_DONE),
  148.         (TAG_DONE)
  149. };
  150.  
  151.  
  152. int SetupScreen( void )
  153. {
  154.         if ( ! ( Scr = LockPubScreen( PubScreenName )))
  155.                 return( 1L );
  156.  
  157.         if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
  158.                 return( 2L );
  159.  
  160.         return( 0L );
  161. }
  162.  
  163. void CloseDownScreen( void )
  164. {
  165.         if ( VisualInfo ) {
  166.                 FreeVisualInfo( VisualInfo );
  167.                 VisualInfo = NULL;
  168.         }
  169.  
  170.         if ( Scr        ) {
  171.                 UnlockPubScreen( NULL, Scr );
  172.                 Scr = NULL;
  173.         }
  174. }
  175.  
  176. int OpenProject0Window( void )
  177. {
  178.         struct NewGadget        ng;
  179.         struct Gadget   *g;
  180.         UWORD           lc, tc;
  181.         UWORD           offx = Scr->WBorLeft, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  182.  
  183.         if ( ! ( g = CreateContext( &Project0GList )))
  184.                 return( 1L );
  185.  
  186.         for( lc = 0, tc = 0; lc < Project0_CNT; lc++ ) {
  187.  
  188.                 CopyMem((char * )&Project0NGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  189.  
  190.                 ng.ng_VisualInfo = VisualInfo;
  191.                 ng.ng_TextAttr   = &topaz8;
  192.                 ng.ng_LeftEdge  += offx;
  193.                 ng.ng_TopEdge   += offy;
  194.  
  195.                 Project0Gadgets[ lc ] = g = CreateGadgetA((ULONG)Project0GTypes[ lc ], g, &ng, ( struct TagItem * )&Project0GTags[ tc ] );
  196.  
  197.                 while( Project0GTags[ tc ] ) tc += 2;
  198.                 tc++;
  199.  
  200.                 if ( NOT g )
  201.                         return( 2L );
  202.         }
  203.  
  204.  
  205.         if ( ! ( Project0Wnd = OpenWindowTags( NULL,
  206.                                 WA_Left,        Project0Left,
  207.                                 WA_Top,         Project0Top,
  208.                                 WA_Width,       Project0Width,
  209.                                 WA_Height,      Project0Height + offy,
  210.                                 WA_IDCMP,       LISTVIEWIDCMP|
  211.                                                 BUTTONIDCMP|
  212.                                                 STRINGIDCMP|
  213.                                                 IDCMP_NEWSIZE|
  214.                                                 IDCMP_CLOSEWINDOW|
  215.                                                 IDCMP_CHANGEWINDOW|
  216.                                                 IDCMP_INTUITICKS |
  217.                                                 IDCMP_MOUSEBUTTONS|
  218.                                                 IDCMP_REFRESHWINDOW,
  219.                                 WA_Flags,       WFLG_SIZEGADGET|
  220.                                                 WFLG_DRAGBAR|
  221.                                                 WFLG_DEPTHGADGET|
  222.                                                 WFLG_CLOSEGADGET|
  223.                                                 WFLG_SMART_REFRESH,
  224.                                 WA_Gadgets,     Project0GList,
  225.                                 WA_Title,       Project0Wdt,
  226.                                 WA_ScreenTitle, "RunList 3   © Heinz Reinert 1995",
  227.                                 WA_PubScreen,   Scr,
  228.                                 WA_MinWidth,    325,
  229.                                 WA_MinHeight,   245,
  230.                                 WA_MaxWidth,    325,
  231.                                 WA_MaxHeight,   245,
  232.                                 TAG_DONE )))
  233.         return( 4L );
  234.  
  235.         GT_RefreshWindow( Project0Wnd, NULL );
  236.  
  237.         return( 0L );
  238. }
  239.  
  240.  
  241. void CloseProject0Window( void )
  242. {
  243.         if ( Project0Wnd        ) {
  244.                 CloseWindow( Project0Wnd );
  245.                 Project0Wnd = NULL;
  246.         }
  247.  
  248.         if ( Project0GList      ) {
  249.                 FreeGadgets( Project0GList );
  250.                 Project0GList = NULL;
  251.         }
  252. }
  253.  
  254.  
  255. /*
  256.  * Struktur für einen Datenbankeintrag
  257.  */
  258.  
  259. struct VDB {
  260.     char    Name[30];
  261.     char    list[256];
  262.     USHORT  new;
  263.     USHORT  del;
  264.     char    command1[81], command2[81], command3[81];
  265.     USHORT  save;
  266.     USHORT  runa;
  267.     USHORT  run3;
  268.     USHORT  run2;
  269.     USHORT  run1;
  270.                             
  271. };
  272.  
  273.  
  274.  
  275. struct VDBnode {
  276.         struct  Node n; /*** Für Liste    ***/
  277.         struct  VDB d;  /*** VDB-Struktur ***/
  278. };
  279.  
  280. /*
  281.  * Flags
  282.  */
  283.  
  284. #define VDBF_STEREO             1
  285.  
  286. /*
  287.  *
  288.  * In dieser Liste befinden sich die VDB-Nodes
  289.  *
  290.  */
  291.  
  292. struct List vdblist;
  293.  
  294. /*
  295.  * Der aktuelle Eintrag
  296.  */
  297.  
  298. struct VDBnode *currentprj;
  299.  
  300. /*
  301.  * Die von der Gadtoolsbox erzeugten Header
  302.  */
  303.  
  304.  
  305. /*
  306.  *
  307.  * Die Hilfsroutinen
  308.  *
  309.  */
  310.  
  311. /*
  312.  * Allgemeine Gadgets
  313.  */
  314.  
  315. /*
  316.  *      Gadtools-Gadget einschalten
  317.  */
  318. void gt_OnGadget( struct Gadget         *gad,
  319.                                   struct Window         *w )
  320. {
  321.         GT_SetGadgetAttrs( gad, w, NULL, GA_DISABLED, FALSE, TAG_DONE );
  322. }
  323. /*
  324.  *      ...und wieder aus...
  325.  */
  326. void gt_OffGadget( struct Gadget        *gad,
  327.                                    struct Window        *w )
  328. {
  329.         GT_SetGadgetAttrs( gad, w, NULL, GA_DISABLED, TRUE, TAG_DONE );
  330. }
  331.  
  332.  
  333. /*
  334.  *  String-Gadgets
  335.  */
  336. void gt_SetString( struct Gadget        *gad,
  337.                                    struct Window        *w,
  338.                                    char                         *string )
  339. {
  340.         GT_SetGadgetAttrs( gad, w, NULL, GTST_String, string, TAG_DONE );
  341. }
  342.  
  343. char * gt_GetString( struct Gadget      *gad )
  344. {
  345.         struct StringInfo *si = gad->SpecialInfo;
  346.  
  347.         if( si )
  348.                 return( ( char * ) si->Buffer );
  349.         else
  350.                 return( NULL );
  351. }
  352.  
  353. /*
  354.  * Listenverwaltung für Listview-Gadgets
  355.  */
  356.  
  357. /*
  358.  * Liste anhängen
  359.  * "list" kann ~0 (-1) sein, dann ist kein Listenzugriff möglich
  360.  */
  361.  
  362. void gt_AttachList(     struct Gadget   *lv,
  363.                                         struct Window   *w,
  364.                                         struct List     *list )
  365. {
  366.         GT_SetGadgetAttrs( lv, w, NULL, GTLV_Labels, list, TAG_DONE );
  367. }
  368.  
  369. /*
  370.  *  Aktuellen Eintrag setzen
  371.  */
  372. void gt_SetLV( struct Gadget    *gad,
  373.                            struct Window        *w,
  374.                            ULONG                        value)
  375. {
  376.         GT_SetGadgetAttrs( gad, w, NULL, GTLV_Selected, value, TAG_DONE );
  377. }
  378.  
  379. /*
  380.  * x-ten Eintrag aus einer Exec-Liste holen
  381.  */
  382. struct Node * gt_GetListEntry( struct List *l,
  383.                                                            int num )
  384. {
  385.         int count = 0;
  386.         struct Node *n = l->lh_Head;
  387.  
  388.         while( n->ln_Succ )
  389.         {
  390.                 if( num==count ) return( n );
  391.                 n = n->ln_Succ;
  392.                 count++;
  393.         }
  394.         return( NULL );
  395. }
  396. /*
  397.  * Nummer einer Node aus einer Liste feststellen
  398.  * -1 falls nicht in Liste
  399.  */
  400. int gt_GetListEntryNum( struct List *l,
  401.                                                 struct Node *n )
  402. {
  403.         int count = 0;
  404.         struct Node *r = l->lh_Head;
  405.  
  406.         while( r->ln_Succ )
  407.         {
  408.                 if( r==n ) return( count );
  409.                 r = r->ln_Succ;
  410.                 count++;
  411.         }
  412.         return( -1 );
  413. }
  414. /*
  415.  * Anzahl Einträge einer Liste zählen
  416.  */
  417. int gt_GetListNumEntries( struct List *l )
  418. {
  419.         int count = 0;
  420.         struct Node *n = l->lh_Head;
  421.  
  422.         while( n->ln_Succ )
  423.         {
  424.                 n = n->ln_Succ;
  425.                 count++;
  426.         }
  427.  
  428.         return( count );
  429. }
  430.  
  431. /************************************************************************/
  432.  
  433. /*
  434.  *
  435.  *  Liste laden
  436.  *
  437.  */
  438.  
  439. void loadprjlist( void )
  440. {
  441.         struct VDB new;
  442.         struct VDBnode *n;
  443.         BPTR f;
  444.  
  445.         /*** Liste initialisieren ***/
  446.         NewList( &vdblist );
  447.         currentprj = NULL;
  448.  
  449.         /*** Datei öffnen ***/
  450.         f = Open( "S:List.DAT", MODE_OLDFILE );
  451.         if( !f )
  452.                 return;
  453.  
  454.         /*** Einträge einlesen */
  455.         while( Read( f, &new, sizeof( new ) ) == sizeof( new ) )
  456.         {
  457.                 /*** newe Node ***/
  458.                 n = AllocVec( sizeof( *n ), 0 );
  459.                 if( !n )
  460.                         break;
  461.  
  462.                 /*** Struktur kopieren und an Liste anhängen ***/
  463.                 n->d = new;
  464.                 n->n.ln_Name = n->d.Name;
  465.                 n->n.ln_Pri      = - n->d.Name[0];
  466.                 Enqueue( &vdblist, (struct Node *) n );
  467.         }
  468.  
  469.         Close( f );
  470. }
  471.  
  472. /*
  473.  *      Liste speichern und freigeben 
  474.  */
  475.  
  476. void save_and_freeprjlist(void )
  477. {
  478.         struct VDBnode *n;
  479.         BPTR f;
  480.  
  481.         f = Open( "S:List.DAT", MODE_NEWFILE );
  482.  
  483.         while( ( n = (struct VDBnode * ) RemHead( &vdblist ) ) )
  484.         {
  485.                 /*** Node speichern... ***/
  486.                 if( f )
  487.                         Write( f, &n->d, sizeof( struct VDB ) );
  488.  
  489.                 /*** ...und freigeben ***/
  490.                 FreeVec( n );
  491.         }
  492.  
  493.         if( f )
  494.                 Close( f );
  495. }
  496.  
  497.  
  498. /************************************************************************/
  499.  
  500. /*
  501.  * Schaltet die Gadgets mit Ausnahme der Liste ein oder aus
  502.  * abhängig davon, ob gerade ein Listeneintrag aktiviert ist
  503.  * oder nicht
  504.  *
  505.  */
  506.  
  507. void checkonoff( void )
  508. {
  509.         int c;
  510.  
  511.         if( currentprj )
  512.         {
  513.                 for( c = GD_del; c < Project0_CNT; c++ )
  514.                         gt_OnGadget( Project0Gadgets[c], Project0Wnd );
  515.         }
  516.         else
  517.         {
  518.                 for( c = GD_del; c < Project0_CNT; c++ )
  519.                         gt_OffGadget( Project0Gadgets[c], Project0Wnd );
  520.         }
  521.  
  522. }
  523.  
  524. /*
  525.  *
  526.  *  Trägt die Werte aus der aktuellen Struktur in die
  527.  *  Gadgets ein
  528.  *
  529.  */
  530.  
  531. void setgadvals( void )
  532. {
  533.  
  534.         if( !currentprj )
  535.                 return;
  536.  
  537.         gt_SetString(   Project0Gadgets[ GD_descr ], Project0Wnd,
  538.                                                    currentprj->d.Name );
  539.         gt_SetString(   Project0Gadgets[ GD_command1 ], Project0Wnd,
  540.                                                    currentprj->d.command1 );
  541.         gt_SetString(   Project0Gadgets[ GD_command2 ], Project0Wnd,
  542.                                                    currentprj->d.command2 );
  543.         gt_SetString(   Project0Gadgets[ GD_command3 ], Project0Wnd,
  544.                                                    currentprj->d.command3 );
  545.  
  546.  
  547. }
  548.  
  549.  
  550. /*
  551.  *
  552.  *  Erzeugt einen neuen, leeren Eintrag 
  553.  *
  554.  */
  555.  
  556. void newvdb( void )
  557. {
  558.         struct VDBnode *new;
  559.  
  560.         new = AllocVec( sizeof( *new ), MEMF_CLEAR );
  561.  
  562.         if( !new )
  563.                 return;
  564.  
  565.         currentprj = new;
  566.  
  567.         new->n.ln_Name = new->d.Name;
  568.  
  569.         strcpy( new->d.Name, "new" );
  570.  
  571.         gt_AttachList( Project0Gadgets[GD_list], Project0Wnd, (struct List *) ~0 );
  572.  
  573.         new->n.ln_Pri    = - new->d.Name[0];
  574.         Enqueue( &vdblist, (struct Node *) new );
  575.  
  576.         gt_AttachList( Project0Gadgets[GD_list], Project0Wnd, &vdblist );
  577.  
  578.         gt_SetLV( Project0Gadgets[GD_list], Project0Wnd, gt_GetListEntryNum( &vdblist, new ) );
  579.         checkonoff();
  580.         setgadvals();
  581. }
  582.  
  583.  
  584.  
  585. /*
  586.  *      Gadget-Event bearbeiten
  587.  */
  588.  
  589. void dogadup( struct IntuiMessage *im )
  590. {
  591.         struct Gadget *g = im->IAddress;
  592.  
  593.         switch( g->GadgetID )
  594.         {
  595.  
  596. /*** Ein Listeneintrag ***/
  597. case GD_list:
  598.         currentprj = (struct VDBnode *) gt_GetListEntry( &vdblist, im->Code );
  599.         checkonoff();
  600.         setgadvals();
  601.         break;
  602.  
  603. /*** new ***/
  604. case GD_new:
  605.         newvdb();
  606.         break;
  607.  
  608. /*** Löschen ***/
  609. case GD_del:
  610.         if( currentprj )
  611.         {
  612.                 gt_AttachList( Project0Gadgets[ GD_list ], Project0Wnd, (struct List *) ~0 );
  613.                 Remove( currentprj );
  614.                 FreeVec( currentprj );
  615.                 currentprj = FALSE;
  616.                 checkonoff();
  617.                 gt_AttachList( Project0Gadgets[ GD_list ], Project0Wnd, &vdblist );
  618.                 gt_SetLV( Project0Gadgets[ GD_list ], Project0Wnd, ~0 );
  619.         }
  620.         break;
  621.  
  622. /*** KassettenName ***/
  623. case GD_descr:
  624.         if( currentprj )
  625.         {
  626.                 gt_AttachList( Project0Gadgets[ GD_list ], Project0Wnd, (struct List *) ~0 );
  627.                 strcpy( currentprj->d.Name, gt_GetString( Project0Gadgets[ GD_descr ] ) );
  628.                 gt_AttachList( Project0Gadgets[ GD_list ], Project0Wnd, &vdblist );
  629.         }
  630.         checkonoff();
  631.         break;
  632.  
  633.  
  634. case GD_command1:
  635.         if( currentprj )
  636.         {
  637.                 strcpy( currentprj->d.command1, gt_GetString( Project0Gadgets[ GD_command1 ] ) );
  638.         }
  639.         checkonoff();
  640.         break;
  641.  
  642. case GD_command2:
  643.         if( currentprj )
  644.         {
  645.                 strcpy( currentprj->d.command2, gt_GetString( Project0Gadgets[ GD_command2 ] ) );
  646.         }
  647.         checkonoff();
  648.         break;
  649.  
  650. case GD_command3:
  651.         if( currentprj )
  652.         {
  653.                strcpy( currentprj->d.command3, gt_GetString( Project0Gadgets[ GD_command3 ] ) );
  654.         }
  655.         checkonoff();
  656.         break;
  657.  
  658. case GD_runa:
  659.         {
  660.             Execute(currentprj->d.command1, NULL, Output());
  661.             Execute(currentprj->d.command2, NULL, Output());
  662.             Execute(currentprj->d.command3, NULL, Output());
  663.         }
  664.         checkonoff();
  665.         break;
  666.  
  667. case GD_run1:
  668.         {
  669.             Execute(currentprj->d.command1, NULL, Output());
  670.         }
  671.         checkonoff();
  672.         break;
  673.  
  674. case GD_run2:
  675.         {
  676.             Execute(currentprj->d.command2, NULL, Output());
  677.         }
  678.         checkonoff();
  679.         break;
  680.  
  681. case GD_run3:
  682.         {
  683.             Execute(currentprj->d.command3, NULL, Output());
  684.         }
  685.         checkonoff();
  686.         break;
  687.  
  688. case GD_save:
  689.         {
  690.             save_and_freeprjlist();
  691.             loadprjlist();
  692.         }
  693.         checkonoff();
  694.         break;
  695.         }
  696. }
  697.  
  698.  
  699. /*
  700.  * Programmstart
  701.  */
  702.  
  703. int main( void )
  704. {
  705.         struct IntuiMessage     *im,imsg;
  706.         BOOL   Done = FALSE;
  707.  
  708.         USHORT code;           /* Code. */
  709.         ULONG seconds, micros; /* Time. */
  710.  
  711.         /* Declare and initialize the time stamps: */
  712.         ULONG sec1 = 0;
  713.         ULONG mic1 = 0;
  714.         ULONG sec2 = 0;
  715.         ULONG mic2 = 0;
  716.  
  717.         /*** Bildschirm und Fenster öffnen ***/
  718.         SetupScreen();
  719.         OpenProject0Window();
  720.  
  721.         /*** Liste laden ***/
  722.         loadprjlist();
  723.  
  724.         /*** Liste anzeigen ***/
  725.         gt_AttachList( Project0Gadgets[GD_list], Project0Wnd, &vdblist );
  726.  
  727.         /*** Gadgets setzen ***/
  728.         checkonoff();
  729.  
  730.         /*** Hauptschleife ***/
  731.         while( !Done )
  732.         {
  733.  
  734.                 /*** Auf IntuiMessage warten ***/
  735.                 while( !( im=GT_GetIMsg( Project0Wnd->UserPort ) ) )
  736.                         WaitPort( Project0Wnd->UserPort );
  737.  
  738.                         code    = im->Code;
  739.                         seconds = im->Seconds;
  740.                         micros  = im->Micros;
  741.  
  742.                 /*** Kopieren ***/
  743.                 imsg = *im;
  744.                 GT_ReplyIMsg( im );             
  745.  
  746.                 switch( imsg.Class )
  747.                 {
  748.  
  749.                         /*** CLOSEWINDOW: Fenster schließen? ***/
  750.                         case IDCMP_CLOSEWINDOW:
  751.                                 Done = TRUE;
  752.                                 break;
  753.  
  754.                         /*** Gadgetup; ein Gadget wurde ausgewählt ***/
  755.                         /*** Wir bearbeiten Gadget-Events in einer ***/
  756.                         /*** eigenen Routine                                       ***/
  757.                         case GADGETUP:
  758.                                 dogadup( &imsg );
  759.                                 break;
  760.  
  761.  
  762.                         case IDCMP_MOUSEBUTTONS: /* The user pressed/released a mouse button. */
  763.                                 if( code == SELECTDOWN )
  764.                                 {
  765.                                    /* Left button pressed. */
  766.  
  767.                                    /* Save the old time: */
  768.                                     sec2 = sec1;
  769.                                     mic2 = mic1;
  770.  
  771.                                    /* Get the new time: */
  772.                                     sec1 = seconds;
  773.                                     mic1 = micros;
  774.  
  775.                                    /* Check if it was a double-click or not: */
  776.                                 if( DoubleClick( sec2, mic2, sec1, mic1 ) )
  777.                                 {
  778.                                     Execute("RUN >NIL: Shellwin ", NULL, Output());
  779.                                    /* Reset the values: */
  780.                                     sec1 = 0;
  781.                                     mic1 = 0;
  782.                                     }
  783.                                 }
  784.                                 break;    
  785.  
  786.  
  787.  
  788.                         /*** REFRESH: Grafikobjekte (Boxen) neu zeichnen ***/
  789.                         case IDCMP_REFRESHWINDOW:
  790.                                 GT_BeginRefresh( Project0Wnd );
  791.                                 GT_EndRefresh( Project0Wnd, TRUE );
  792.                                 break;
  793.  
  794.  
  795.                 }
  796.  
  797.         }
  798.  
  799.         /*** Fenster und Bildschirm wieder schließen ***/       
  800.         CloseProject0Window();
  801.         CloseDownScreen();
  802.  
  803.  
  804.         return(0);
  805. }
  806.     
  807.  
  808.  
  809.  
  810.