home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 2 / goldfish_vol2_cd1.bin / files / util / cdity / runlist-reinert / source / runlist1.1.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-10-09  |  17.2 KB  |  624 lines

  1. /*
  2.  *  Source machine generated by GadToolsBox V2.0b
  3.  *  which is (c) Copyright 1991-1993 Jaba Development
  4.  *
  5.  *  GUI Designed by : -- Heinz Reinert --
  6.  */
  7.  
  8. #include <exec/types.h>
  9. #include <intuition/intuition.h>
  10. #include <intuition/classes.h>
  11. #include <intuition/classusr.h>
  12. #include <intuition/imageclass.h>
  13. #include <intuition/gadgetclass.h>
  14. #include <libraries/gadtools.h>
  15. #include <graphics/displayinfo.h>
  16. #include <graphics/gfxbase.h>
  17. #include <clib/exec_protos.h>
  18. #include <clib/intuition_protos.h>
  19. #include <clib/gadtools_protos.h>
  20. #include <clib/graphics_protos.h>
  21. #include <clib/utility_protos.h>
  22. #include <string.h>
  23.  
  24. #include <proto/intuition.h>
  25. #include <proto/graphics.h>
  26. #include <proto/exec.h>
  27. #include <proto/dos.h>
  28. #include <proto/gadtools.h>
  29. #include <exec/memory.h>
  30.  
  31.  
  32. /***********************************************/
  33. #define GetString( g )      ((( struct StringInfo * )g->SpecialInfo )->Buffer  )
  34. #define GetNumber( g )      ((( struct StringInfo * )g->SpecialInfo )->LongInt )
  35.  
  36. #define GD_list                                0
  37. #define GD_gadtxt                              1
  38. #define GD_command                             2
  39. #define GD_command2                            3
  40. #define GD_new                                 4
  41. #define GD_del                                 5
  42. #define GD_start                               6
  43. #define GD_save                                7
  44. #define GD_req                                 8
  45. #define GD_Gadget90                            9
  46. #define GD_Gadget100                           10
  47.  
  48. #define GDX_list                               0
  49. #define GDX_gadtxt                             1
  50. #define GDX_command                            2
  51. #define GDX_command2                           3
  52. #define GDX_new                                4
  53. #define GDX_del                                5
  54. #define GDX_start                              6
  55. #define GDX_save                               7
  56. #define GDX_req                                8
  57. #define GDX_Gadget90                           9
  58. #define GDX_Gadget100                          10
  59.  
  60. #define Project0_CNT 11
  61.  
  62. UBYTE *vers = "\0$VER: RunList 1.1";
  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[11];
  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.  
  91. struct Screen         *Scr = NULL;
  92. UBYTE                 *PubScreenName = NULL;
  93. APTR                   VisualInfo = NULL;
  94. struct Window         *Project0Wnd = NULL;
  95. struct Gadget         *Project0GList = NULL;
  96. struct Gadget         *Project0Gadgets[11];
  97. UWORD                  Project0Left = 347;
  98. UWORD                  Project0Top = 10;
  99. UWORD                  Project0Width = 305;
  100. UWORD                  Project0Height = 0;
  101. UBYTE                 *Project0Wdt = (UBYTE *)">> RUN LIST v1.1 <<  ";
  102.  
  103. struct TextAttr topaz8 = {
  104.         ( STRPTR )"topaz.font", 8, 0x00, 0x01 };
  105.  
  106. UWORD Project0GTypes[] = {
  107.         LISTVIEW_KIND,
  108.         STRING_KIND,
  109.         STRING_KIND,
  110.         STRING_KIND,
  111.         BUTTON_KIND,
  112.         BUTTON_KIND,
  113.         BUTTON_KIND,
  114.         BUTTON_KIND,
  115.         BUTTON_KIND,
  116.         TEXT_KIND,
  117.         TEXT_KIND
  118. };
  119.  
  120. struct NewGadget Project0NGad[] = {
  121.         19, 9, 160, 88, NULL, NULL, GD_list, 0, NULL, NULL,
  122.         19, 94, 161, 12, NULL, NULL, GD_gadtxt, 0, NULL, NULL,
  123.         5, 117, 273, 12, NULL, NULL, GD_command, 0, NULL, NULL,
  124.         5, 129, 273, 12, NULL, NULL, GD_command2, 0, NULL, NULL,
  125.         184, 10, 78, 11, (UBYTE *)"NEW", NULL, GD_new, PLACETEXT_IN, NULL, NULL,
  126.         184, 25, 78, 11, (UBYTE *)"DELETE", NULL, GD_del, PLACETEXT_IN, NULL, NULL,
  127.         184, 70, 79, 36, (UBYTE *)"RUN", NULL, GD_start, PLACETEXT_IN, NULL, NULL,
  128.         184, 40, 78, 11, (UBYTE *)"SAVE", NULL, GD_save, PLACETEXT_IN, NULL, NULL,
  129.         184, 55, 78, 11, (UBYTE *)"REQUEST", NULL, GD_req, PLACETEXT_IN, NULL, NULL,
  130.         14, 6, 256, 103, NULL, NULL, GD_Gadget90, 0, NULL, NULL,
  131.         7, 3, 270, 110, NULL, NULL, GD_Gadget100, 0, NULL, NULL
  132. };
  133.  
  134. ULONG Project0GTags[] = {
  135.         (TAG_DONE),
  136.         (GTST_MaxChars), 256, (TAG_DONE),
  137.         (GTST_MaxChars), 256, (TAG_DONE),
  138.         (GTST_MaxChars), 256, (TAG_DONE),
  139.         (TAG_DONE),
  140.         (TAG_DONE),
  141.         (TAG_DONE),
  142.         (TAG_DONE),
  143.         (TAG_DONE),
  144.         (GTTX_Border), TRUE, (TAG_DONE),
  145.         (GTTX_Border), TRUE, (TAG_DONE)
  146. };
  147.  
  148. int SetupScreen( void )
  149. {
  150.         if ( ! ( Scr = LockPubScreen( PubScreenName )))
  151.                 return( 1L );
  152.  
  153.         if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
  154.                 return( 2L );
  155.  
  156.         return( 0L );
  157. }
  158.  
  159. void CloseDownScreen( void )
  160. {
  161.         if ( VisualInfo ) {
  162.                 FreeVisualInfo( VisualInfo );
  163.                 VisualInfo = NULL;
  164.         }
  165.  
  166.         if ( Scr        ) {
  167.                 UnlockPubScreen( NULL, Scr );
  168.                 Scr = NULL;
  169.         }
  170. }
  171.  
  172. int OpenProject0Window( void )
  173. {
  174.         struct NewGadget        ng;
  175.         struct Gadget   *g;
  176.         UWORD           lc, tc;
  177.         UWORD           offx = Scr->WBorLeft, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  178.  
  179.         if ( ! ( g = CreateContext( &Project0GList )))
  180.                 return( 1L );
  181.  
  182.         for( lc = 0, tc = 0; lc < Project0_CNT; lc++ ) {
  183.  
  184.                 CopyMem((char * )&Project0NGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  185.  
  186.                 ng.ng_VisualInfo = VisualInfo;
  187.                 ng.ng_TextAttr   = &topaz8;
  188.                 ng.ng_LeftEdge  += offx;
  189.                 ng.ng_TopEdge   += offy;
  190.  
  191.                 Project0Gadgets[ lc ] = g = CreateGadgetA((ULONG)Project0GTypes[ lc ], g, &ng, ( struct TagItem * )&Project0GTags[ tc ] );
  192.  
  193.                 while( Project0GTags[ tc ] ) tc += 2;
  194.                 tc++;
  195.  
  196.                 if ( NOT g )
  197.                         return( 2L );
  198.         }
  199.  
  200.         if ( ! ( Project0Wnd = OpenWindowTags( NULL,
  201.                                 WA_Left,        Project0Left,
  202.                                 WA_Top,         Project0Top,
  203.                                 WA_Width,       Project0Width,
  204.                                 WA_Height,      Project0Height + offy,
  205.                                 WA_IDCMP,       LISTVIEWIDCMP|
  206.                                                 STRINGIDCMP|
  207.                                                 BUTTONIDCMP|
  208.                                                 TEXTIDCMP|
  209.                                                 IDCMP_CLOSEWINDOW|
  210.                                                 IDCMP_NEWSIZE|
  211.                                                 IDCMP_SIZEVERIFY|
  212.                                                 IDCMP_REFRESHWINDOW,
  213.                                 WA_Flags,       WFLG_SIZEGADGET|
  214.                                                 WFLG_DRAGBAR|
  215.                                                 WFLG_DEPTHGADGET|
  216.                                                 WFLG_CLOSEGADGET|
  217.                                                 WFLG_SMART_REFRESH,
  218.                                 WA_Gadgets,     Project0GList,
  219.                                 WA_Title,       Project0Wdt,
  220.                                 WA_ScreenTitle, "RunList by Heinz Reinert 1994",
  221.                                 WA_PubScreen,   Scr,
  222.                                 WA_MinWidth,    305,
  223.                                 WA_MinHeight,   157,
  224.                                 WA_MaxWidth,    305,
  225.                                 WA_MaxHeight,   157,
  226.                                 TAG_DONE )))
  227.         return( 4L );
  228.  
  229.         GT_RefreshWindow( Project0Wnd, NULL );
  230.  
  231.         return( 0L );
  232. }
  233.  
  234. void CloseProject0Window( void )
  235. {
  236.         if ( Project0Wnd        ) {
  237.                 CloseWindow( Project0Wnd );
  238.                 Project0Wnd = NULL;
  239.         }
  240.  
  241.         if ( Project0GList      ) {
  242.                 FreeGadgets( Project0GList );
  243.                 Project0GList = NULL;
  244.         }
  245. }
  246. /*********************************************/
  247. /* Main Program Part */
  248.  
  249.  
  250. /* Structur for Data-Entries */
  251.  
  252. struct PRJ {
  253.  
  254.     char    Name[0];
  255.  
  256.     char    gadtxt[20];
  257.     char    command[75];
  258.     char    command2[75];
  259.     USHORT  new;
  260.     USHORT  del;
  261.     USHORT  save;
  262.     USHORT  req;
  263.     USHORT  start;
  264. };
  265.  
  266. struct PRJnode {
  267.         struct  Node n;
  268.         struct  PRJ d;
  269. };
  270.  
  271. /* PRJ-Nodes are in this List */
  272.  
  273. struct List prjlist;
  274.  
  275. /* The actual Entry */
  276.  
  277. struct PRJnode *currentprj;
  278.  
  279. /* String-Gadgets */
  280.  
  281. void gt_SetString( struct Gadget        *gad,
  282.                                    struct Window        *w,
  283.                                    char                         *string )
  284. {
  285.         GT_SetGadgetAttrs( gad, w, NULL, GTST_String, string, TAG_DONE );
  286. }
  287.  
  288. char * gt_GetString( struct Gadget      *gad )
  289. {
  290.         struct StringInfo *si = gad->SpecialInfo;
  291.  
  292.         if( si )
  293.                 return( ( char * ) si->Buffer );
  294.         else
  295.                 return( NULL );
  296. }
  297.  
  298. /* Manage Lists for Listview-Gadgets */
  299. /* Add List */
  300.  
  301. void gt_AttachList(     struct Gadget   *lv,
  302.                                         struct Window   *w,
  303.                                         struct List     *list )
  304. {
  305.         GT_SetGadgetAttrs( lv, w, NULL, GTLV_Labels, list, TAG_DONE );
  306. }
  307.  
  308. /* Put Actuel Entry */
  309.  
  310. void gt_SetLV( struct Gadget    *gad,
  311.                            struct Window        *w,
  312.                            ULONG                        value)
  313. {
  314.         GT_SetGadgetAttrs( gad, w, NULL, GTLV_Selected, value, TAG_DONE );
  315. }
  316.  
  317. /* get x-Entry from Exec-List */
  318.  
  319. struct Node * gt_GetListEntry( struct List *l,
  320.                                                            int num )
  321. {
  322.         int count = 0;
  323.         struct Node *n = l->lh_Head;
  324.  
  325.         while( n->ln_Succ )
  326.         {
  327.                 if( num==count ) return( n );
  328.                 n = n->ln_Succ;
  329.                 count++;
  330.         }
  331.         return( NULL );
  332. }
  333.  
  334. /* Number of a Node in List? */
  335.  
  336. int gt_GetListEntryNum( struct List *l,
  337.                                                 struct Node *n )
  338. {
  339.         int count = 0;
  340.         struct Node *r = l->lh_Head;
  341.  
  342.         while( r->ln_Succ )
  343.         {
  344.                 if( r==n ) return( count );
  345.                 r = r->ln_Succ;
  346.                 count++;
  347.         }
  348.         return( -1 );
  349. }
  350.  
  351. /* Count Entries of List */
  352.  
  353. int gt_GetListNumEntries( struct List *l )
  354. {
  355.         int count = 0;
  356.         struct Node *n = l->lh_Head;
  357.  
  358.         while( n->ln_Succ )
  359.         {
  360.                 n = n->ln_Succ;
  361.                 count++;
  362.         }
  363.  
  364.         return( count );
  365. }
  366.  
  367. /************************************************************************/
  368.  
  369. /* Load Command.DAT */
  370.  
  371. void loadprjlist( void )
  372. {
  373.         struct PRJ new;
  374.         struct PRJnode *n;
  375.         BPTR f;
  376.  
  377.         /* Init List */
  378.         NewList( &prjlist );
  379.         currentprj = NULL;
  380.  
  381.         /* Open Command.DAT */
  382.         f = Open( "S:Command.DAT", MODE_OLDFILE );
  383.         if( !f )
  384.                 return;
  385.  
  386.         /* Inputs read in */
  387.         while( Read( f, &new, sizeof( new ) ) == sizeof( new ) )
  388.         {
  389.                /* New Node */
  390.                 n = AllocVec( sizeof( *n ), 0 );
  391.                 if( !n )
  392.                         break;
  393.  
  394.         /* Copy Structur and add to List */
  395.                 n->d = new;
  396.                 n->n.ln_Name = n->d.Name;
  397.                 n->n.ln_Pri      = - n->d.Name[0];
  398.                 Enqueue( &prjlist, (struct Node *) n );
  399.         }
  400.  
  401.         Close( f );
  402. }
  403.  
  404. /* Saves List and Frees it */
  405. void save_and_freeprjlist( void )
  406. {
  407.         struct PRJnode *n;
  408.         BPTR f;
  409.  
  410.         f = Open( "S:Command.DAT", MODE_NEWFILE );
  411.  
  412.         while( ( n = (struct PRJnode * ) RemHead( &prjlist ) ) )
  413.         {
  414.             /* Save Node */
  415.                 if( f )
  416.                         Write( f, &n->d, sizeof( struct PRJ ) );
  417.             /* Free Node */
  418.                 FreeVec( n );
  419.         }
  420.  
  421.         if( f )
  422.                 Close( f );
  423. }
  424.  
  425.  
  426. /************************************************************************/
  427.  
  428. /* Puts actual Structur-Values to Gadgets */
  429.  
  430. void setgadvals( void )
  431. {
  432.  
  433.         if( !currentprj )
  434.             return;
  435.  
  436.         gt_SetString(   Project0Gadgets[ GD_gadtxt ], Project0Wnd,
  437.                                                        currentprj->d.Name );
  438.  
  439.         gt_SetString(   Project0Gadgets[ GD_command ], Project0Wnd,
  440.                                                     currentprj->d.command );
  441.  
  442.         gt_SetString(   Project0Gadgets[ GD_command2 ], Project0Wnd,
  443.                                                     currentprj->d.command2 );
  444.  
  445. }
  446.  
  447. /* Create a new Empty Input */
  448.  
  449. void newprj( void )
  450. {
  451.         struct PRJnode *new;
  452.  
  453.         new = AllocVec( sizeof( *new ), MEMF_CLEAR );
  454.  
  455.         if( !new )
  456.                 return;
  457.  
  458.         currentprj = new;
  459.  
  460.         new->n.ln_Name = new->d.Name;
  461.  
  462.         strcpy( new->d.Name, "new" );
  463.  
  464.         gt_AttachList( Project0Gadgets[GD_list], Project0Wnd,
  465.                                                       (struct List *) ~0 );
  466.  
  467.         new->n.ln_Pri    = - new->d.Name[0];
  468.         Enqueue( &prjlist, (struct Node *) new );
  469.  
  470.         gt_AttachList( Project0Gadgets[GD_list], Project0Wnd, &prjlist );
  471.  
  472.         gt_SetLV( Project0Gadgets[GD_list], Project0Wnd,
  473.                                      gt_GetListEntryNum( &prjlist, new ) );
  474.         setgadvals();
  475. }
  476.  
  477. /* Work on Gadget-Event */
  478. void dogadup( struct IntuiMessage *im )
  479. {
  480.         struct Gadget *g = im->IAddress;
  481.  
  482.         switch( g->GadgetID )
  483.         {
  484.  
  485. /*** Enter List ***/
  486. case GD_list:
  487.         currentprj = (struct PRJnode *) gt_GetListEntry( &prjlist, im->Code );
  488.         setgadvals();
  489.         break;
  490.  
  491. /*** New ***/
  492. case GD_new:
  493.         newprj();
  494.         break;
  495.  
  496. /*** Delete ***/
  497. case GD_del:
  498.         if( currentprj )
  499.         {
  500.         gt_AttachList( Project0Gadgets[ GD_list ], Project0Wnd,
  501.                                                        (struct List *) ~0 );
  502.         Remove( currentprj );
  503.         FreeVec( currentprj );
  504.         currentprj = FALSE;
  505.         gt_AttachList( Project0Gadgets[ GD_list ], Project0Wnd, &prjlist );
  506.         gt_SetLV( Project0Gadgets[ GD_list ], Project0Wnd, ~0 );
  507.         }
  508.         break;
  509. /*** Program Name ***/
  510. case GD_gadtxt:
  511.         if( currentprj )
  512.         {
  513.         gt_AttachList( Project0Gadgets[ GD_list ], Project0Wnd,
  514.                                                          (struct List *) ~0 );
  515.    strcpy( currentprj->d.Name, gt_GetString( Project0Gadgets[ GD_gadtxt ] ) );
  516.         gt_AttachList( Project0Gadgets[ GD_list ], Project0Wnd, &prjlist );
  517.         }
  518.         break;
  519.  
  520. /*** Command-string ***/
  521. case GD_command:
  522.         if( currentprj )
  523.         strcpy( currentprj->d.command,
  524.                              gt_GetString( Project0Gadgets[ GD_command ] ) );
  525.         break;
  526.  
  527. /*** Command-string ***/
  528. case GD_command2:
  529.         if( currentprj )
  530.         strcpy( currentprj->d.command2,
  531.                              gt_GetString( Project0Gadgets[ GD_command2 ] ) );
  532.         break;
  533.  
  534. /*** Start Program ***/
  535. case GD_start:
  536.         Execute(currentprj->d.command, NULL, Output());
  537.         Execute("WAIT 2 secs ", NULL, Output());
  538.         Execute(currentprj->d.command2, NULL, Output());
  539.         break;
  540.  
  541. /*** Save List ***/
  542. case GD_save:
  543.         {
  544.             save_and_freeprjlist();
  545.             loadprjlist();
  546.         }
  547.         break;
  548.  
  549. /*** Requester ***/
  550. case GD_req:
  551.            Execute("RUN >NIL: Shellwin", NULL, Output());
  552.         break;
  553.         }
  554. }
  555.  
  556. /* Program start */
  557.  
  558. int main( void )
  559. {
  560.  
  561.         struct IntuiMessage     *im,imsg;
  562.         BOOL   Done = FALSE;
  563.  
  564.         /*** Open Screen and Window ***/
  565.         SetupScreen();
  566.         OpenProject0Window();
  567.  
  568.         /*** Load List ***/
  569.         loadprjlist();
  570.  
  571.         /*** Show List ***/
  572.         gt_AttachList( Project0Gadgets[GD_list], Project0Wnd, &prjlist );
  573.  
  574.         /*** Main Loop ***/
  575.         while( !Done )
  576.         {
  577.                 /*** Wait for IntuiMessage ***/
  578.  
  579.                 while( !( im=GT_GetIMsg( Project0Wnd->UserPort ) ) )
  580.                         WaitPort( Project0Wnd->UserPort );
  581.  
  582.                 /*** Copy ***/
  583.                 imsg = *im;
  584.                 GT_ReplyIMsg( im );
  585.  
  586.                 switch( imsg.Class )
  587.                 {
  588.             /*** CLOSEWINDOW: Close Window ***/
  589.                         case IDCMP_CLOSEWINDOW:
  590.                                 Done = TRUE;
  591.                                 break;
  592.  
  593.             /*** Gadgetup; Gadget selected ***/
  594.                         case GADGETUP:
  595.                                 dogadup( &imsg );
  596.                                 break;
  597.  
  598.             /*** REFRESH: Graphicobjects (Boxen) redraw ***/
  599.                         case IDCMP_REFRESHWINDOW:
  600.                                 GT_BeginRefresh( Project0Wnd );
  601.                                 GT_EndRefresh( Project0Wnd, TRUE );
  602.                                 break;
  603.  
  604.                 }
  605.  
  606.         }
  607.  
  608.         /*** Close Window and Screen ***/
  609.         CloseProject0Window();
  610.         CloseDownScreen();
  611.  
  612.         /*** Save List ***/
  613.         save_and_freeprjlist();
  614.  
  615.         return(0);
  616. }
  617.  
  618.  
  619.  
  620.  
  621.  
  622.  
  623.  
  624.