home *** CD-ROM | disk | FTP | other *** search
/ Network PC / Network PC.iso / amiga utilities / performance / memory / tinymeter / source / tinymeter_prefs / main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-11-20  |  63.3 KB  |  2,174 lines

  1. /// headers
  2. /* MUI */
  3. #include <libraries/mui.h>
  4.  
  5. /* System */
  6. #include <dos/dos.h>
  7. #include <graphics/gfxmacros.h>
  8. #include <workbench/workbench.h>
  9. #include <exec/memory.h>
  10. #include <datatypes/pictureclass.h>
  11. #include <libraries/locale.h>
  12.  
  13. /* Prototypes */
  14. #include <clib/alib_protos.h>
  15. #include <clib/exec_protos.h>
  16. #include <clib/dos_protos.h>
  17. #include <clib/icon_protos.h>
  18. #include <clib/graphics_protos.h>
  19. #include <clib/intuition_protos.h>
  20. #include <clib/gadtools_protos.h>
  21. #include <clib/utility_protos.h>
  22. #include <clib/asl_protos.h>
  23.  
  24. #ifndef __GNUC__
  25. #include <clib/muimaster_protos.h>
  26. #else
  27. #include <inline/muimaster.h>
  28. #endif
  29.  
  30. /* ANSI C */
  31. #include <stdlib.h>
  32. #include <string.h>
  33. #include <stdio.h>
  34.  
  35. #ifndef MAKE_ID
  36. #define MAKE_ID(a,b,c,d) ((ULONG) (a)<<24 | (ULONG) (b)<<16 | (ULONG) (c)<<8 | (ULONG) (d))
  37. #endif
  38.  
  39. ///
  40. #define  STRINGARRAY YES
  41. #include "TinyMeterPrefs.lh"
  42. #include "tinymeter.h"
  43.  
  44. static struct MUI_CustomClass *CL_FieldsList;
  45. static struct MUI_CustomClass *CL_ChooseFields;
  46. static struct MUI_CustomClass *CL_MainWindow;
  47. static struct MUI_CustomClass *CL_Composer;
  48.  
  49. #define USE_ABOUT_COLORS   YES
  50. #define USE_ABOUT_HEADER   YES
  51. #define USE_ABOUT_BODY     YES
  52.  
  53. #define USE_QUESTION_COLORS   YES
  54. #define USE_QUESTION_HEADER   YES
  55. #define USE_QUESTION_BODY     YES
  56.  
  57. unsigned long __stack=10000L;
  58.  
  59. enum { MEN_PROJECT=1,MEN_ABOUT,MEN_OPEN,MEN_SAVE,MEN_QUIT,CMP_LOAD, CMP_SAVE, CMP_CANCEL, CMP_PROJECT };
  60.  
  61. ULONG MainWindow_Finish(struct IClass *cl,Object *obj,Msg *msg);
  62.  
  63. /*************************************************************************************************/
  64. /* misc funcs                                                                                    */
  65. /*************************************************************************************************/
  66. ///
  67. ULONG DoSuperNew(struct IClass *cl,Object *obj,ULONG tag1,...)
  68. {
  69.     return(DoSuperMethod(cl,obj,OM_NEW,&tag1,NULL));
  70. }
  71.  
  72. LONG xget(Object *obj,ULONG attribute)
  73. {
  74.     LONG x;
  75.     get(obj,attribute,&x);
  76.     return(x);
  77. }
  78.  
  79. initColor(struct GAU_Color *col,Object *obj)
  80. {
  81.     struct MUI_PenSpec pspec;
  82.  
  83.     if(col->pen==TRUE)
  84.     {
  85.     sprintf(&pspec.buf[0],"p%d\0",col->red);
  86.     set(obj,MUIA_Pendisplay_Spec,&pspec);
  87.     }
  88.     else
  89.     {
  90.     sprintf(&pspec.buf[0],"r%08lx,%08lx,%08lx\0",col->red,col->green,col->blue);
  91.     set(obj,MUIA_Pendisplay_Spec,&pspec);
  92.     }
  93. }
  94.  
  95. ULONG convertColor(char *colstr)
  96. {
  97. }
  98.  
  99.  
  100. getColor(struct GAU_Color *col,Object *obj)
  101. {
  102.     struct MUI_PenSpec  *pspec;
  103.     char                *buf;
  104.     ULONG               *dummy1,dummy2,dummy3;
  105.  
  106.  
  107.     get(obj,MUIA_Pendisplay_Spec,&pspec);
  108.     if(buf=(char *)AllocVec(256L,MEMF_CLEAR))
  109.     {
  110.     strcpy(buf,&pspec->buf[0]);
  111.     if(buf[0])
  112.     {
  113.         switch (buf[0])
  114.         {
  115.         case    'r':
  116.             col->pen=(UWORD)FALSE;
  117.             sscanf(buf+1,"%lx,%lx,%lx",&dummy1,&dummy2,&dummy3);
  118.             col->red=(ULONG)dummy1;
  119.             col->green=(ULONG)dummy2;
  120.             col->blue=(ULONG)dummy3;
  121.             break;
  122.         case    'p':
  123.             col->pen=(UWORD)TRUE;
  124.             sscanf(buf+1,"%ld",&col->red);
  125.             break;
  126.         case    'm':
  127.             MUI_RequestA(NULL,NULL,0,"TinyMeterPrefs","BAD LUCK!","Please do not use MUI colors.\nThey are not supported by TinyMeter!\n\nUse Colormap or a RBG color instead.",NULL);
  128.             break;
  129.         }
  130.     }
  131.     FreeVec(buf);
  132.     }
  133. }
  134.  
  135. __saveds __asm void IntuiMsgFunc(__a1 struct IntuiMessage *imsg,__a2 struct FileRequester *req)
  136. {
  137.     if (imsg->Class==IDCMP_REFRESHWINDOW)
  138.         DoMethod(req->fr_UserData,MUIM_Application_CheckRefresh);
  139. }
  140.  
  141. char *getfilename(Object *win,char *title,char *pattern,BOOL save)
  142. {
  143.     static char buf[512];
  144.     struct FileRequester *req;
  145.     struct Window *w;
  146.     static LONG left=-1,top=-1,width=-1,height=-1;
  147.     Object *app = (Object *)xget(win,MUIA_ApplicationObject);
  148.     char *res = NULL;
  149.     static const struct Hook IntuiMsgHook = { { 0,0 },(VOID *)IntuiMsgFunc,NULL,NULL };
  150.  
  151.     get(win,MUIA_Window_Window,&w);
  152.     if (left==-1)
  153.     {
  154.         left   = w->LeftEdge+w->BorderLeft+2;
  155.         top    = w->TopEdge+w->BorderTop+2;
  156.         width  = w->Width-w->BorderLeft-w->BorderRight-4;
  157.         height = w->Height-w->BorderTop-w->BorderBottom-4;
  158.     }
  159.  
  160.     if (req=MUI_AllocAslRequestTags(ASL_FileRequest,
  161.         ASLFR_Window, w,
  162.         ASLFR_TitleText, title,
  163.         ASLFR_InitialLeftEdge, left,
  164.         ASLFR_InitialTopEdge , top,
  165.         ASLFR_InitialWidth   , width,
  166.         ASLFR_InitialHeight  , height,
  167.         ASLFR_InitialPattern , pattern,
  168.         ASLFR_DoSaveMode     , save,
  169.         ASLFR_DoPatterns     , TRUE,
  170.         ASLFR_RejectIcons    , TRUE,
  171.         ASLFR_UserData       , app,
  172.         ASLFR_IntuiMsgFunc   , &IntuiMsgHook,
  173.         TAG_DONE))
  174.     {
  175.         set(app,MUIA_Application_Sleep,TRUE);
  176.         if (MUI_AslRequestTags(req,TAG_DONE))
  177.         {
  178.             if (*req->fr_File)
  179.             {
  180.                 res = buf;
  181.                 strcpy(buf,req->fr_Drawer);
  182.                 AddPart(buf,req->fr_File,sizeof(buf));
  183.             }
  184.             left   = req->fr_LeftEdge;
  185.             top    = req->fr_TopEdge;
  186.             width  = req->fr_Width;
  187.             height = req->fr_Height;
  188.         }
  189.         MUI_FreeAslRequest(req);
  190.         set(app,MUIA_Application_Sleep,FALSE);
  191.     }
  192.     return(res);
  193. }
  194.  
  195. ///
  196.  
  197. extern  struct Library  *SysBase,
  198.             *IntuitionBase,
  199.             *UtilityBase,
  200.             *GfxBase,
  201.             *DOSBase,
  202.             *IconBase;
  203.     struct Library  *MUIMasterBase,
  204.             *LocaleBase;
  205.  
  206.     struct tm_data  *maindata;
  207.     struct Catalog  *Catalog;
  208.  
  209. /*************************************************************************************************/
  210. /* locale stuff                                                                                  */
  211. /*************************************************************************************************/
  212. ///
  213. char *GetStr(int num)
  214. {
  215.     struct AppString *as = (struct AppString *)AppStrings;
  216.     while (as->as_ID != num) as++;
  217.     if (LocaleBase && Catalog) return(GetCatalogStr(Catalog,num,as->as_Str));
  218.     return((char *)as->as_Str);
  219. }
  220.  
  221. VOID LocalizeStringArray(char **array)
  222. {
  223.     char **x;
  224.     for (x=array;*x;x++)
  225.         *x = GetStr((int)*x);
  226. }
  227.  
  228. VOID LocalizeNewMenu(struct NewMenu *nm)
  229. {
  230.     for (;nm->nm_Type!=NM_END;nm++)
  231.         if (nm->nm_Label != NM_BARLABEL)
  232.             nm->nm_Label = GetStr((int)nm->nm_Label);
  233. }
  234.  
  235. VOID InitLocale(VOID)
  236. {
  237.     if (LocaleBase = OpenLibrary("locale.library",38))
  238.         Catalog = (struct Catalog *)OpenCatalog(NULL,"TinyMeterPrefs.catalog",TAG_DONE);
  239. }
  240.  
  241. VOID ExitLocale(VOID)
  242. {
  243.     if (Catalog) { CloseCatalog(Catalog); Catalog=NULL; }
  244.     if (LocaleBase) CloseLibrary(LocaleBase); { LocaleBase=NULL; }
  245. }
  246.  
  247. Object *MakePen()
  248. {
  249.     return(MUI_NewObject(MUIC_Poppen, MUIA_CycleChain, 1, MUIA_Window_Title, GetStr(MO_MakePen), TAG_DONE));
  250. }
  251.  
  252. ///
  253.  
  254. /*************************************************/
  255. /* some pics                                     */
  256. /*************************************************/
  257.  
  258. #include "about.c"
  259. #include "header_logo.c"
  260. #include "tmp_logo.c"
  261. #include "question.c"
  262.  
  263. /*************************************************/
  264. /* default settings                              */
  265. /*************************************************/
  266. ///
  267. struct tm_sys_set default_set=
  268. {
  269.     "TM40",
  270.     1,
  271.  
  272.     10,
  273.     10,
  274.     400,
  275.     2,
  276.  
  277.     "Workbench",
  278.  
  279.     "XHelvetica.font",
  280.     11,
  281.  
  282.     bg_file,
  283.     "hd0:prefs/patterns/leather",
  284.     -3,
  285.     FALSE,0x55555555,0x55555555,0x55555555,
  286.  
  287.     5,
  288.     1,
  289.  
  290.     0,
  291.     TRUE,
  292.  
  293.     win_normal,
  294.     0,
  295.     4,
  296.     4,
  297.     8,
  298.     8,
  299.  
  300.     bd_standard,
  301.     FALSE,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,
  302.     FALSE,0x0,0x0,0x0,
  303.  
  304.     idle_own
  305. };
  306.  
  307. struct tm_gau_set g4=
  308. {
  309.     typ_volume,
  310.     typ_histmeter,
  311.  
  312.     200,
  313.  
  314.     "Quill.font",
  315.     11,
  316.  
  317.     "ChipMem",
  318.     "HD1: %kd kb,%p%% free",
  319.     "HD1:",
  320.     ind_right,
  321.     TRUE,
  322.     TRUE,
  323.     TRUE,
  324.     TRUE,
  325.     FALSE,
  326.     FALSE,
  327.     TRUE,
  328.  
  329.     TRUE,2,0,0,
  330.     TRUE,2,0,0,
  331.     FALSE,0,0xFFFFFFFF,0,
  332.     FALSE,0,0,0xFFFFFFFF,
  333.     FALSE,0xFFFFFFFF,0,0,
  334.     TRUE,2,0,0,
  335.     TRUE,1,0,0,
  336.     TRUE,1,0,0,
  337.  
  338.     NULL
  339. };
  340.  
  341. struct tm_gau_set g3=
  342. {
  343.     typ_idle,
  344.     typ_histmeter,
  345.  
  346.     200,
  347.  
  348.     "Quill.font",
  349.     11,
  350.  
  351.     "ChipMem",
  352.     "CPU %p%% free",
  353.     "",
  354.     ind_right,
  355.     TRUE,
  356.     TRUE,
  357.     TRUE,
  358.     TRUE,
  359.     FALSE,
  360.     FALSE,
  361.     TRUE,
  362.  
  363.     TRUE,2,0,0,
  364.     TRUE,2,0,0,
  365.     FALSE,0,0xFFFFFFFF,0,
  366.     FALSE,0,0,0xFFFFFFFF,
  367.     FALSE,0xFFFFFFFF,0,0,
  368.     TRUE,2,0,0,
  369.     TRUE,1,0,0,
  370.     TRUE,1,0,0,
  371.  
  372.     &g4
  373. };
  374.  
  375.  
  376. struct tm_gau_set g2=
  377. {
  378.     typ_fast,
  379.     typ_gauge,
  380.  
  381.     20,
  382.  
  383.     "XHelvetica.font",
  384.     11,
  385.  
  386.     "FastMem",
  387.     "%td Bytes free",
  388.     "",
  389.     ind_right,
  390.     TRUE,
  391.     TRUE,
  392.     TRUE,
  393.     TRUE,
  394.     FALSE,
  395.     FALSE,
  396.     FALSE,
  397.  
  398.     TRUE,2,0,0,
  399.     TRUE,2,0,0,
  400.     FALSE,0,0xFFFFFFFF,0,
  401.     FALSE,0,0,0xFFFFFFFF,
  402.     FALSE,0xFFFFFFFF,0,0,
  403.     TRUE,2,0,0,
  404.     TRUE,1,0,0,
  405.     TRUE,0,0,0,
  406.  
  407.     &g3,
  408. };
  409.  
  410.  
  411. struct tm_gau_set g1=
  412. {
  413.     typ_chip,
  414.     typ_gauge,
  415.  
  416.     20,
  417.  
  418.     "XHelvetica.font",
  419.     11,
  420.  
  421.     "ChipMem",
  422.     "%td Bytes free",
  423.     "",
  424.     ind_right,
  425.     TRUE,
  426.     TRUE,
  427.     TRUE,
  428.     TRUE,
  429.     FALSE,
  430.     FALSE,
  431.     FALSE,
  432.  
  433.     TRUE,2,0,0,
  434.     TRUE,2,0,0,
  435.     FALSE,0,0xFFFFFFFF,0,
  436.     FALSE,0,0,0xFFFFFFFF,
  437.     FALSE,0xFFFFFFFF,0,0,
  438.     TRUE,2,0,0,
  439.     TRUE,1,0,0,
  440.     TRUE,0,0,0,
  441.  
  442.     &g2
  443. };
  444.  
  445. struct tm_gau_set  default_gauge=
  446. {
  447.     NULL,
  448.     typ_gauge,
  449.  
  450.     20,
  451.  
  452.     "topaz.font",
  453.     8,
  454.  
  455.     "",
  456.     "",
  457.     "",
  458.     ind_right,
  459.     TRUE,
  460.     TRUE,
  461.     TRUE,
  462.     TRUE,
  463.     FALSE,
  464.     FALSE,
  465.     TRUE,
  466.  
  467.     TRUE,2,0,0,
  468.     TRUE,2,0,0,
  469.     FALSE,0,0xFFFFFFFF,0,
  470.     FALSE,0,0,0xFFFFFFFF,
  471.     FALSE,0xFFFFFFFF,0,0,
  472.     TRUE,2,0,0,
  473.     TRUE,1,0,0,
  474.     TRUE,0,0,0,
  475.  
  476.     NULL
  477. };
  478.  
  479. ///
  480. /*************************************************/
  481. /* Drag & Drop lists                             */
  482. /*************************************************/
  483.  
  484. /******************************************/
  485. /* some hooks                             */
  486. /******************************************/
  487. ///
  488. char *gau_types[]=
  489. {
  490.     (STRPTR)MDL_typ_space,
  491.     (STRPTR)MDL_typ_total,
  492.     (STRPTR)MDL_typ_chip,
  493.     (STRPTR)MDL_typ_fast,
  494.     (STRPTR)MDL_typ_volume,
  495.     (STRPTR)MDL_typ_cpu,
  496.     (STRPTR)MDL_typ_retina,
  497.     (STRPTR)MDL_typ_largest_chip,
  498.     (STRPTR)MDL_typ_largest_fast,
  499.     (STRPTR)MDL_typ_largest_total,
  500.     (STRPTR)MDL_typ_largest_retina,
  501.     (STRPTR)MDL_typ_clock,
  502.     0L,
  503. };
  504.  
  505. __geta4 ULONG gau_consfunc(__a1 struct tm_gau_set *src)
  506. {
  507. /*    struct tm_gau_set *dst;
  508.     if(dst=AllocVec(sizeof(struct tm_gau_set),0L))
  509.     {
  510.     CopyMem(src,dst, sizeof(struct tm_gau_set));
  511.     return(dst);
  512.     }
  513.     else return(0L);*/
  514.     return(src);
  515. }
  516.  
  517. __geta4 void gau_desfunc(__a1 struct tm_gau_set *src)
  518. {
  519.     FreeVec(src);
  520. }
  521.  
  522. __geta4 ULONG gau_dispfunc(__a2 char **array,__a1 struct tm_gau_set *src)
  523. {
  524.     if(src->type!=0)
  525.     {
  526.     *array++ = gau_types[src->type];
  527.     if(src->type==typ_volume)
  528.     {
  529.         *array   = &src->expansion[0];
  530.     }
  531.     else *array = "";
  532.     }
  533.     else
  534.     {
  535.     *array++ = "-----------------";
  536.     *array   = "";
  537.     }
  538.     return(0L);
  539. }
  540.  
  541. static const struct Hook gau_ConstructHook = { { 0,0 }, (void *)gau_consfunc, NULL, NULL };
  542. static const struct Hook gau_DestructHook  = { { 0,0 }, (void *)gau_desfunc , NULL, NULL };
  543. static const struct Hook gau_DisplayHook   = { { 0,0 }, (void *)gau_dispfunc, NULL, NULL };
  544. ///
  545. /******************************************/
  546. /* FieldsList class                       */
  547. /******************************************/
  548. ///
  549. struct FieldsList_Data
  550. {
  551.     LONG dummy;
  552. };
  553.  
  554.  
  555. ULONG FieldsList_DragQuery(struct IClass *cl,Object *obj,struct MUIP_DragDrop *msg)
  556. {
  557.     if (msg->obj==obj) return(DoSuperMethodA(cl,obj,msg));
  558.     else if (msg->obj==(Object *)muiUserData(obj)) return(MUIV_DragQuery_Accept);
  559.     else return(MUIV_DragQuery_Refuse);
  560. }
  561.  
  562.  
  563. ULONG FieldsList_DragDrop(struct IClass *cl,Object *obj,struct MUIP_DragDrop *msg)
  564. {
  565.     if (msg->obj==obj) return(DoSuperMethodA(cl,obj,msg));
  566.     else
  567.     {
  568.     struct tm_gau_set   *entry;
  569.     LONG                dropmark;
  570.     LONG                sortable;
  571.     LONG                active;
  572.  
  573.     get(obj,MUIA_List_DragSortable,&sortable);
  574.     if (sortable)
  575.     {
  576.         get(msg->obj,MUIA_List_Active,&active);
  577.         if(entry=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),MEMF_CLEAR))
  578.         {
  579.         CopyMem(&default_gauge,entry, sizeof(struct tm_gau_set));
  580.         entry->type = (UWORD)active;
  581.         if(active==typ_clock_) entry->gauge_type=typ_clock;
  582.  
  583.         get     (obj,       MUIA_List_DropMark,     &dropmark);
  584.         DoMethod(obj,       MUIM_List_InsertSingle, entry,dropmark);
  585.         set     (obj,       MUIA_List_Active,       dropmark);
  586.         set     (msg->obj,  MUIA_List_Active,       MUIV_List_Active_Off);
  587.         }
  588.     }
  589.     else
  590.     {
  591.         DoMethod(msg->obj,MUIM_List_Remove,MUIV_List_Remove_Active);
  592.     }
  593.     return(obj);
  594.     }
  595. }
  596.  
  597.  
  598. __geta4 ULONG FieldsList_Dispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg)
  599. {
  600.     switch (msg->MethodID)
  601.     {
  602.     case MUIM_DragQuery: return(FieldsList_DragQuery(cl,obj,(APTR)msg));
  603.     case MUIM_DragDrop : return(FieldsList_DragDrop (cl,obj,(APTR)msg));
  604.     }
  605.     return(DoSuperMethodA(cl,obj,msg));
  606. }
  607. ///
  608. /******************************************/
  609. /* ChooseFields class                     */
  610. /******************************************/
  611. ///
  612. Object *available, *visible;
  613.  
  614. struct ChooseFields_Data
  615. {
  616.     ULONG dummy;
  617. };
  618.  
  619. struct ComposerMsg
  620. {
  621.     ULONG   MethodID;
  622.     Object  *listview;
  623.     struct ChooseFields_Data *data;
  624. };
  625.  
  626. #define Dis_ID_DoubleClickComposer      1
  627. #define Dis_ID_ComposerClose            2
  628. #define Dis_ID_Composer_Save            3
  629. #define Composer_Originator             ( TAG_USER + 1 )
  630. #define Gauge_Settings                  ( TAG_USER + 2 )
  631.  
  632. static ULONG DoubleClickComposer(struct IClass *cl,Object *obj, struct ComposerMsg *msg)
  633. {
  634.     struct tm_gau_set   *desc;
  635.     Object *tmp;
  636.  
  637.     DoMethod(msg->listview,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&desc);
  638.  
  639.     if (desc)
  640.     {
  641.     set((Object *)xget(obj,MUIA_ApplicationObject),MUIA_Application_Sleep,TRUE);
  642.     if (desc->type!=typ_none)
  643.     {
  644.         if (tmp = (APTR)NewObject(CL_Composer->mcc_Class,NULL,
  645.         Composer_Originator, obj,
  646.         Gauge_Settings,      desc,
  647.         TAG_DONE))
  648.         {
  649.         DoMethod((Object *)xget(obj,MUIA_ApplicationObject),OM_ADDMEMBER,tmp);
  650.         set(tmp,MUIA_Window_Open,TRUE);
  651.         }
  652.         else DisplayBeep(0);
  653.     }
  654.     set((Object *)xget(obj,MUIA_ApplicationObject),MUIA_Application_Sleep,FALSE);
  655.     }
  656.     return((ULONG)0);
  657. }
  658.  
  659. static ULONG ChooseFields_New(struct IClass *cl,Object *obj,struct opSet *msg)
  660. {
  661.     obj = (Object *)DoSuperNew(cl,obj,
  662.     MUIA_Group_Columns, 2,
  663.     MUIA_Group_VertSpacing, 1,
  664.     Child, TextObject, MUIA_Text_Contents, GetStr(MDL_Available), End,
  665.     Child, TextObject, MUIA_Text_Contents, GetStr(MDL_Selected ), End,
  666.     Child, ListviewObject,
  667.         MUIA_Listview_DragType, 1,
  668.         MUIA_Listview_List, available = NewObject(CL_FieldsList->mcc_Class,NULL,
  669.         InputListFrame,
  670.         MUIA_List_SourceArray  , gau_types,
  671.         MUIA_List_ShowDropMarks, FALSE,
  672.         TAG_DONE),
  673.         End,
  674.     Child, ListviewObject,
  675.         MUIA_Listview_DragType, 1,
  676.         MUIA_Listview_DoubleClick,  TRUE,
  677.         MUIA_Listview_List, visible = NewObject(CL_FieldsList->mcc_Class,NULL,
  678.         InputListFrame,
  679.         MUIA_List_ConstructHook, &gau_ConstructHook,
  680.         MUIA_List_DestructHook , &gau_DestructHook,
  681.         MUIA_List_DisplayHook  , &gau_DisplayHook,
  682.         MUIA_List_Format       , "MIW=50 MAW=100 BAR,",
  683.         MUIA_List_DragSortable , TRUE,
  684.         TAG_DONE),
  685.         End,
  686.     End;
  687.  
  688.     if (obj)
  689.     {
  690.     DoMethod(visible,MUIM_Notify,MUIA_Listview_DoubleClick,TRUE,obj,2,Dis_ID_DoubleClickComposer,visible);
  691.  
  692.     set(available,MUIA_UserData,visible);
  693.     set(visible,MUIA_UserData,available);
  694.  
  695.     set(available,MUIA_ShortHelp,GetStr(MDH_Available));
  696.     set(visible,MUIA_ShortHelp,GetStr(MDH_Selected));
  697.     }
  698.  
  699.     return((ULONG)obj);
  700. }
  701.  
  702. struct ComposerFinishMsg
  703. {
  704.     ULONG   MethodID;
  705.     Object  *win;
  706.     ULONG   ok;
  707. };
  708.  
  709. ULONG Composer_Close(struct IClass *cl, Object *obj, struct ComposerFinishMsg *msg)
  710. {
  711.     DoMethod(msg->win,Dis_ID_Composer_Save,msg->win,msg->ok);
  712.  
  713.     set(msg->win,MUIA_Window_Open,FALSE);
  714.     DoMethod((Object *)xget(obj,MUIA_ApplicationObject),OM_REMMEMBER,msg->win);
  715.  
  716.     MUI_DisposeObject(msg->win);
  717.  
  718.     return((ULONG)0L);
  719. }
  720.  
  721. static __saveds __asm ULONG ChooseFields_Dispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg)
  722. {
  723.     switch (msg->MethodID)
  724.     {
  725.     case OM_NEW                     : return(ChooseFields_New       (cl,obj,(APTR)msg));
  726.     case Dis_ID_DoubleClickComposer : return(DoubleClickComposer    (cl,obj,(APTR)msg));
  727.     case Dis_ID_ComposerClose       : return(Composer_Close         (cl,obj,(APTR)msg));
  728.     }
  729.     return(DoSuperMethodA(cl,obj,msg));
  730. }
  731. ///
  732. /*************************************************/
  733. /* Composer Class                                */
  734. /*************************************************/
  735.  
  736. /******************************************/
  737. /* Composer Menu                          */
  738. /******************************************/
  739. ///
  740.  
  741. struct NewMenu CmpMenuData[] =
  742. {
  743.     { NM_TITLE, (STRPTR)MCM_Gauge          , 0 ,0 ,0             ,(APTR)CMP_PROJECT  },
  744.     { NM_ITEM , (STRPTR)MCM_Open           ,"O",0 ,0             ,(APTR)CMP_LOAD     },
  745.     { NM_ITEM , (STRPTR)MCM_SaveAs         ,"S",0 ,0             ,(APTR)CMP_SAVE     },
  746.     { NM_ITEM ,  NM_BARLABEL               , 0 ,0 ,0             ,(APTR)0            },
  747.     { NM_ITEM , (STRPTR)MCM_Cancel         ,"C",0 ,0             ,(APTR)CMP_CANCEL   },
  748.     { NM_END,NULL,0,0,0,(APTR)0 }
  749. };
  750. ///
  751. /******************************************/
  752. /* Composer class                         */
  753. /******************************************/
  754. ///
  755.  
  756. #define Dis_ID_DoubleClickDevice    8
  757. #define Dis_ID_SaveGauge            9
  758. #define Dis_ID_LoadGauge            10
  759. #define Dis_ID_ShowFormatHelp       11
  760.  
  761. struct Composer_Data
  762. {
  763.     Object              *ST_Label,
  764.             *PO_Device,
  765.             *ST_Device,
  766.             *CY_Type,
  767.             *NB_Height,
  768.             *CS_Colors[16],
  769.             *ST_Font,
  770.             *ST_Format,
  771.             *CM_3D,
  772.             *CM_Border,
  773.             *CM_Bg,
  774.             *CM_Shadow,
  775.             *CM_NoGauge,
  776.             *CM_NoFmt,
  777.             *CM_NoBase,
  778.             *CY_Indent,
  779.             *VL_Device,
  780.             *originator,
  781.             *sub_win;
  782.     struct tm_gau_set   *gauge;
  783. };
  784.  
  785. static ULONG DoubleClickDev(struct IClass *cl,Object *obj, struct DoubleClkMsg *msg)
  786. {
  787.     char   *my_ptr;
  788.     struct Composer_Data    *data = INST_DATA(cl,obj);
  789.  
  790.     DoMethod(data->VL_Device,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&my_ptr);
  791.     if(my_ptr)
  792.     {
  793.     set(data->ST_Device,MUIA_String_Contents,my_ptr);
  794.     DoMethod(data->PO_Device,MUIM_Popstring_Close,0L);
  795.     return(DoSuperMethodA(cl,obj,msg));
  796.     }
  797.     else return(0L);
  798. }
  799.  
  800. ULONG Composer_Save(struct IClass *cl, Object *obj, struct ComposerFinishMsg *msg)
  801. {
  802.     int     i;
  803.     ULONG   dummy;
  804.     struct  Composer_Data    *data   = INST_DATA(cl,obj);
  805.     if(msg->ok==TRUE)
  806.     {
  807.     for(i=0;i<8;i++) getColor(&data->gauge->Colors[i],data->CS_Colors[i]);
  808.     get(data->ST_Label  ,MUIA_String_Contents,&dummy); strcpy(&data->gauge->label[0]    , dummy ? (char *)dummy : " " );
  809.     get(data->ST_Device ,MUIA_String_Contents,&dummy); strcpy(&data->gauge->expansion[0], dummy ? (char *)dummy : " " );
  810.     get(data->CY_Type   ,MUIA_Cycle_Active   ,&dummy); data->gauge->gauge_type  =(UWORD)dummy;
  811.     get(data->NB_Height ,MUIA_Numeric_Value  ,&dummy); data->gauge->size_y      =(UWORD)dummy-100;
  812.     get(data->CM_3D     ,MUIA_Selected       ,&dummy); data->gauge->sty_3d      =(UWORD)dummy;
  813.     get(data->CM_Border ,MUIA_Selected       ,&dummy); data->gauge->sty_border  =(UWORD)dummy;
  814.     get(data->CM_Bg     ,MUIA_Selected       ,&dummy); data->gauge->sty_bg      =(UWORD)dummy;
  815.     get(data->CM_Shadow ,MUIA_Selected       ,&dummy); data->gauge->sty_shadow  =(UWORD)dummy;
  816.     get(data->CM_NoGauge,MUIA_Selected       ,&dummy); data->gauge->sty_nogauge =(UWORD)dummy;
  817.     get(data->CM_NoFmt  ,MUIA_Selected       ,&dummy); data->gauge->sty_noformat=(UWORD)dummy;
  818.     get(data->CM_NoBase ,MUIA_Selected       ,&dummy); data->gauge->sty_nobase  =(UWORD)dummy;
  819.     get(data->CY_Indent ,MUIA_Cycle_Active   ,&dummy); data->gauge->indent      =(UWORD)dummy;
  820.     get(data->ST_Font   ,MUIA_String_Contents,&dummy); sscanf((char *)dummy,"%[^/]/%d",&data->gauge->font[0],&i);
  821.     strcat(&data->gauge->font[0],".font"); data->gauge->font_size=(WORD)i;
  822.     get(data->ST_Format ,MUIA_String_Contents,&dummy); strcpy((char *)&data->gauge->format[0], dummy ? (char *)dummy : " " );
  823.     }
  824.     DoMethod(visible,MUIM_List_Redraw,MUIV_List_Redraw_All);
  825. }
  826.  
  827. char   *types[]         ={(STRPTR)MCL_Normal,(STRPTR)MCL_Historymeter,0L};
  828.  
  829. char   *indent[]        ={(STRPTR)MCL_center,(STRPTR)MCL_left,(STRPTR)MCL_right,0L};
  830.  
  831. char   *regcomposer[]   ={(STRPTR)MCR_general,(STRPTR)MCR_flags,(STRPTR)MCR_colors,0L};
  832.  
  833. insertComposerSettings(struct tm_gau_set *gauge, struct Composer_Data *data)
  834. {
  835.     int     i;
  836.     char    dummy[256];
  837.  
  838.     for(i=0;i<8;i++)
  839.     {
  840.     initColor(&gauge->Colors[i],data->CS_Colors[i]);
  841.     if(gauge->type == typ_clock_) set(data->CS_Colors[i],MUIA_Disabled, TRUE);
  842.     }
  843.     set(data->NB_Height,MUIA_Numeric_Value,gauge->size_y+100);
  844.     if(gauge->type != typ_volume) set(data->PO_Device, MUIA_Disabled, TRUE);
  845.     if((gauge->gauge_type==typ_histmeter)||(gauge->type==typ_clock_))
  846.     {
  847.     set(data->ST_Label,  MUIA_Disabled, TRUE);
  848.     set(data->CM_3D,     MUIA_Disabled, TRUE);
  849.     set(data->CM_Shadow, MUIA_Disabled, TRUE);
  850.     if(gauge->type==typ_clock_)
  851.     {
  852.         set(data->CM_Bg,     MUIA_Disabled, TRUE);
  853.         set(data->CS_Colors[col_format] ,MUIA_Disabled,FALSE);
  854.         set(data->CS_Colors[col_dark]   ,MUIA_Disabled,FALSE);
  855.         set(data->CM_Shadow     ,MUIA_Disabled,FALSE);
  856.         set(data->CM_Border     ,MUIA_Disabled, TRUE);
  857.         set(data->CM_NoGauge    ,MUIA_Disabled, TRUE);
  858.         set(data->CM_NoFmt      ,MUIA_Disabled, TRUE);
  859.         set(data->CM_NoBase     ,MUIA_Disabled, TRUE);
  860.         set(data->CY_Type       ,MUIA_Disabled, TRUE);
  861.     }
  862.     }
  863.  
  864.     set(data->CM_3D     ,MUIA_Selected,gauge->sty_3d);
  865.     set(data->CM_Border ,MUIA_Selected,gauge->sty_border);
  866.     set(data->CM_Bg     ,MUIA_Selected,gauge->sty_bg);
  867.     set(data->CM_Shadow ,MUIA_Selected,gauge->sty_shadow);
  868.     set(data->CM_NoGauge,MUIA_Selected,gauge->sty_nogauge);
  869.     set(data->CM_NoFmt  ,MUIA_Selected,gauge->sty_noformat);
  870.     set(data->CM_NoBase ,MUIA_Selected,gauge->sty_nobase);
  871.  
  872.     set(data->ST_Format ,MUIA_String_Contents,&gauge->format[0]);
  873.  
  874.     strcpy(&dummy[0],gauge->font);
  875.     sprintf((char *)&dummy[strlen(&dummy[0])-5],"/%d",gauge->font_size);
  876.  
  877.     set(data->ST_Font   ,MUIA_String_Contents,&dummy[0]);
  878.     set(data->ST_Device ,MUIA_String_Contents,&gauge->expansion[0]);
  879.     set(data->ST_Label  ,MUIA_String_Contents,&gauge->label[0]);
  880.  
  881.     set(data->CY_Indent ,MUIA_Cycle_Active,gauge->indent);
  882.     set(data->CY_Type   ,MUIA_Cycle_Active,gauge->gauge_type);
  883. }
  884.  
  885. LoadGaugeSet(struct IClass *cl,Object *obj)
  886. {
  887.     struct Composer_Data    *data=INST_DATA(cl,obj);
  888.     char                    *file;
  889.     ULONG                   my_file;
  890.     ULONG                   buf;
  891.     UWORD                   old_type;
  892.     char                    old_expansion[128];
  893.  
  894.     if(file=getfilename(obj,GetStr(MCM_LoadGauge),"#?.tmgauge",FALSE))
  895.     {
  896.     if(my_file=(ULONG)Open(file,MODE_OLDFILE))
  897.     {
  898.         Read(my_file,&buf,4L);
  899.         if(buf==0x544D4731)
  900.         {
  901.         old_type=data->gauge->type;
  902.         CopyMem(&data->gauge->expansion[0],&old_expansion[0],128L);
  903.         Read(my_file,data->gauge,sizeof(struct tm_gau_set));
  904.         data->gauge->type=old_type;
  905.         CopyMem(&old_expansion[0],&data->gauge->expansion[0],128L);
  906.         insertComposerSettings(data->gauge,data);
  907.         }
  908.         else MUI_RequestA((Object *)xget(obj,MUIA_ApplicationObject),obj,0,"TinyMeterPrefs",GetStr(MCM_NotTmGauge_fmt),GetStr(MCM_NotTmGauge),NULL);
  909.         Close(my_file);
  910.     }
  911.     }
  912. }
  913.  
  914. SaveGaugeSet(struct IClass *cl,Object *obj)
  915. {
  916.     struct Composer_Data        *data=INST_DATA(cl,obj);
  917.     char                        *file;
  918.     ULONG                       buf,my_file;
  919.     struct ComposerFinishMsg    msg;
  920.  
  921.     msg.ok=TRUE;
  922.  
  923.     Composer_Save( cl,obj,&msg);
  924.  
  925.     buf=0x544D4731;
  926.  
  927.     if(file=getfilename(obj,GetStr(MCM_SaveGauge),"#?.tmgauge",TRUE))
  928.     {
  929.     if(my_file=Open(file,MODE_NEWFILE))
  930.     {
  931.         Write(my_file,&buf,4L);
  932.         Write(my_file,data->gauge,sizeof(struct tm_gau_set));
  933.         Close(my_file);
  934.     }
  935.     }
  936. }
  937.  
  938. Object  *WI_HelpFmt,
  939.     *WI_HelpClock;
  940.  
  941. static ULONG Composer_New(struct IClass *cl,Object *obj,struct opSet *msg)
  942. {
  943.     struct Composer_Data    *data;
  944.     struct tm_gau_set       *gauge;
  945.     Object                  *BT_Use,
  946.                 *BT_Cancel,
  947.                 *ST_Label,
  948.                 *PO_Device,
  949.                 *ST_Device,
  950.                 *CY_Type,
  951.                 *NB_Height,
  952.                 *CS_Colors[8],
  953.                 *ST_Font,
  954.                 *ST_Format,
  955.                 *CM_3D,
  956.                 *CM_Border,
  957.                 *CM_Bg,
  958.                 *CM_Shadow,
  959.                 *CM_NoGauge,
  960.                 *CM_NoFmt,
  961.                 *CM_NoBase,
  962.                 *CY_Indent,
  963.                 *LV_Device,
  964.                 *VL_Device,
  965.                 *CMP_Menu,
  966.                 *BT_Quest;
  967.  
  968.     if(gauge = (struct tm_gau_set *)GetTagData(Gauge_Settings,0,msg->ops_AttrList))
  969.     {
  970.     if( obj = (Object *)DoSuperNew(cl,obj,
  971.         MUIA_Window_Title       , gau_types[gauge->type] ,
  972.         MUIA_Window_ID          , MAKE_ID('T','M','C','O'),
  973.         MUIA_Window_Menustrip   , CMP_Menu = MUI_MakeObject(MUIO_MenustripNM,CmpMenuData,0),
  974.         WindowContents, VGroup, ButtonFrame,
  975.  
  976.             Child, HGroup,
  977.             Child, VGroup, MUIA_Background, MUII_SHADOW,
  978.                 Child, VSpace(0),
  979.                 Child, BodychunkObject,
  980.                 MUIA_FixWidth             , HEADER_LOGO_WIDTH ,
  981.                 MUIA_FixHeight            , HEADER_LOGO_HEIGHT,
  982.                 MUIA_Bitmap_Width         , HEADER_LOGO_WIDTH ,
  983.                 MUIA_Bitmap_Height        , HEADER_LOGO_HEIGHT,
  984.                 MUIA_Bodychunk_Depth      , HEADER_LOGO_DEPTH ,
  985.                 MUIA_Bodychunk_Body       , (UBYTE *)header_logo_body,
  986.                 MUIA_Bodychunk_Compression, HEADER_LOGO_COMPRESSION,
  987.                 MUIA_Bodychunk_Masking    , HEADER_LOGO_MASKING,
  988.                 MUIA_Bitmap_SourceColors  , (ULONG *)header_logo_colors,
  989.                 MUIA_Bitmap_Transparent   , 0,
  990.                 End,
  991.             End,
  992.  
  993.             Child, RegisterGroup(regcomposer),
  994.                 MUIA_Register_Frame, TRUE,
  995.  
  996.                 Child, ColGroup(2),
  997.                 Child, VSpace(0),
  998.                 Child, VSpace(0),
  999.                 Child, Label(GetStr(MCO_type)),
  1000.                 Child,  CY_Type=CycleObject,
  1001.                     MUIA_Cycle_Entries, types,
  1002.                 End,
  1003.                 Child, Label(GetStr(MCO_label)),
  1004.                 Child, ST_Label=String(0L,16),
  1005.                 Child, Label(GetStr(MCO_height)),
  1006.                 Child, ColGroup(2), Child, NB_Height=MUI_MakeObject(MUIO_NumericButton,NULL,100,1000,GetStr(MCO_height_fmt)), Child, HVSpace, End,
  1007.                 Child, Label(GetStr(MCO_font)),
  1008.                 Child,  PopaslObject,
  1009.                     MUIA_Popstring_String, ST_Font=(Object *)String(0L,80),
  1010.                     MUIA_Popstring_Button, PopButton(MUII_PopUp),
  1011.                     MUIA_Popasl_Type , ASL_FontRequest,
  1012.                     ASLFO_TitleText  , GetStr(MCO_sel_font),
  1013.                 End,
  1014.                 Child, Label(GetStr(MCO_device)),
  1015.                 Child, PO_Device=PopobjectObject,
  1016.                     MUIA_Popstring_String, ST_Device=String(0L,128),
  1017.                     MUIA_Popstring_Button, PopButton(MUII_PopUp),
  1018.                     MUIA_Popobject_Object, LV_Device=ListviewObject,
  1019.                     MUIA_Weight, 20,
  1020.                     MUIA_Listview_Input, TRUE,
  1021.                     MUIA_Listview_DoubleClick, TRUE,
  1022.                     MUIA_Listview_List, VL_Device=VolumelistObject,
  1023.                         InputListFrame,
  1024.                         MUIA_Dirlist_Directory, "ram:",
  1025.                     End,
  1026.                     End,
  1027.                 End,
  1028.  
  1029.                 Child, VSpace(0),
  1030.                 Child, VSpace(0),
  1031.                 End,
  1032.  
  1033.                 Child, ColGroup(2),
  1034.                 Child, VSpace(0),
  1035.                 Child, VSpace(0),
  1036.                 Child, Label(GetStr(MCO_3dlook)),
  1037.                 Child, CM_3D=CheckMark(gauge->sty_3d),
  1038.                 Child, Label(GetStr(MCO_border)),
  1039.                 Child, CM_Border=CheckMark(gauge->sty_border),
  1040.                 Child, Label(GetStr(MCO_nobgcol)),
  1041.                 Child, CM_Bg=CheckMark(gauge->sty_bg),
  1042.                 Child, Label(GetStr(MCO_shadow)),
  1043.                 Child, CM_Shadow=CheckMark(gauge->sty_shadow),
  1044.                 Child, Label(GetStr(MCO_disgaug)),
  1045.                 Child, CM_NoGauge=CheckMark(gauge->sty_nogauge),
  1046.                 Child, Label(GetStr(MCO_disfmt)),
  1047.                 Child, CM_NoFmt=CheckMark(gauge->sty_noformat),
  1048.                 Child, Label(GetStr(MCO_disbas)),
  1049.                 Child, CM_NoBase=CheckMark(gauge->sty_nobase),
  1050.                 Child, VSpace(0),
  1051.                 Child, VSpace(0),
  1052.                 End,
  1053.  
  1054.                 Child, ColGroup(2),
  1055.                 Child, ColGroup(2),
  1056.                     Child, VSpace(0),
  1057.                     Child, VSpace(0),
  1058.                     Child, Label(GetStr(MCO_col_label)),
  1059.                     Child, CS_Colors[col_label]     =MakePen(),
  1060.                     Child, Label(GetStr(MCO_col_fmt)),
  1061.                     Child, CS_Colors[col_format]    =MakePen(),
  1062.                     Child, Label(GetStr(MCO_col_bas)),
  1063.                     Child, CS_Colors[col_base]      =MakePen(),
  1064.                     Child, Label(GetStr(MCO_col_cur)),
  1065.                     Child, CS_Colors[col_current]   =MakePen(),
  1066.                     Child, VSpace(0),
  1067.                     Child, VSpace(0),
  1068.                 End,
  1069.  
  1070.                 Child, ColGroup(2),
  1071.                     Child, VSpace(0),
  1072.                     Child, VSpace(0),
  1073.                     Child, Label(GetStr(MCO_col_neg)),
  1074.                     Child, CS_Colors[col_negative]  =MakePen(),
  1075.                     Child, Label(GetStr(MCO_col_bright)),
  1076.                     Child, CS_Colors[col_bright]    =MakePen(),
  1077.                     Child, Label(GetStr(MCO_col_dark)),
  1078.                     Child, CS_Colors[col_dark]      =MakePen(),
  1079.                     Child, Label(GetStr(MCO_col_bg)),
  1080.                     Child, CS_Colors[col_bg]        =MakePen(),
  1081.                     Child, VSpace(0),
  1082.                     Child, VSpace(0),
  1083.                 End,
  1084.                 End,
  1085.             End,
  1086.             End,
  1087.  
  1088.             Child, HGroup, GroupFrameT(GetStr(MCO_fmt)),
  1089.             Child, ST_Format=(Object *)String(0L,128),
  1090.             Child, BT_Quest=BodychunkObject,
  1091.                 ButtonFrame,
  1092.                 MUIA_InputMode            , MUIV_InputMode_RelVerify,
  1093.                 MUIA_FixWidth             , QUESTION_WIDTH ,
  1094.                 MUIA_FixHeight            , QUESTION_HEIGHT,
  1095.                 MUIA_Bitmap_Width         , QUESTION_WIDTH ,
  1096.                 MUIA_Bitmap_Height        , QUESTION_HEIGHT,
  1097.                 MUIA_Bodychunk_Depth      , QUESTION_DEPTH ,
  1098.                 MUIA_Bodychunk_Body       , (UBYTE *)question_body,
  1099.                 MUIA_Bodychunk_Compression, QUESTION_COMPRESSION,
  1100.                 MUIA_Bodychunk_Masking    , QUESTION_MASKING,
  1101.                 MUIA_Bitmap_SourceColors  , (ULONG *)question_colors,
  1102.                 MUIA_Bitmap_Transparent   , 0,
  1103.             End,
  1104.             Child,  CY_Indent=CycleObject,
  1105.                 MUIA_Weight, 0,
  1106.                 MUIA_Cycle_Entries, indent,
  1107.             End,
  1108.             End,
  1109.             Child, HGroup,
  1110.             Child, BT_Use = (Object *)SimpleButton(GetStr(MCO_Use)),
  1111.             Child, BT_Cancel = (Object *)SimpleButton(GetStr(MCO_Cancel)),
  1112.             End,
  1113.         End,
  1114.         End)
  1115.     {
  1116.         int i;
  1117.  
  1118.         data=INST_DATA(cl,obj);
  1119.  
  1120.         data->gauge         = gauge;
  1121.         data->ST_Label      = ST_Label;
  1122.         set(ST_Label,MUIA_ShortHelp,GetStr(MOH_Label));
  1123.         data->PO_Device     = PO_Device;
  1124.         set(PO_Device,MUIA_ShortHelp,GetStr(MOH_Device));
  1125.         data->ST_Device     = ST_Device;
  1126.         data->CY_Type       = CY_Type;
  1127.         data->NB_Height     = NB_Height;
  1128.         data->CM_3D         = CM_3D;
  1129.         data->CM_Border     = CM_Border;
  1130.         set(CM_Border,MUIA_ShortHelp,GetStr(MOH_3d));
  1131.         data->CM_Bg         = CM_Bg;
  1132.         set(CM_Bg,MUIA_ShortHelp,GetStr(MOH_Bg));
  1133.         data->CM_Shadow     = CM_Shadow;
  1134.         data->CM_NoGauge    = CM_NoGauge;
  1135.         set(CM_NoGauge,MUIA_ShortHelp,GetStr(MOH_NoGauge));
  1136.         data->CM_NoFmt      = CM_NoFmt;
  1137.         set(CM_NoFmt,MUIA_ShortHelp,GetStr(MOH_NoFmt));
  1138.         data->CM_NoBase     = CM_NoBase;
  1139.         set(CM_NoBase,MUIA_ShortHelp,GetStr(MOH_NoBase));
  1140.         data->CY_Indent     = CY_Indent;
  1141.         data->ST_Font       = ST_Font;
  1142.         data->VL_Device     = VL_Device;
  1143.         data->ST_Format     = ST_Format;
  1144.         for(i=0;i<8;i++) data->CS_Colors[i]=CS_Colors[i];
  1145.  
  1146.         insertComposerSettings(gauge,data);
  1147.  
  1148.         data->originator = (Object *)GetTagData(Composer_Originator,0,msg->ops_AttrList);
  1149.  
  1150.         DoMethod(LV_Device, MUIM_Notify,MUIA_Listview_DoubleClick      ,TRUE,obj,1,Dis_ID_DoubleClickDevice);
  1151.         DoMethod(CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_gauge    ,ST_Label,3,MUIM_Set,MUIA_Disabled,FALSE);
  1152.         DoMethod(CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_histmeter,ST_Label,3,MUIM_Set,MUIA_Disabled,TRUE);
  1153.         DoMethod(CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_gauge    ,CM_3D,3,MUIM_Set,MUIA_Disabled,FALSE);
  1154.         DoMethod(CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_histmeter,CM_3D,3,MUIM_Set,MUIA_Disabled,TRUE);
  1155.         DoMethod(CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_gauge    ,CM_Shadow,3,MUIM_Set,MUIA_Disabled,FALSE);
  1156.         DoMethod(CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_histmeter,CM_Shadow,3,MUIM_Set,MUIA_Disabled,TRUE);
  1157.         DoMethod(CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_gauge    ,CM_Bg,3,MUIM_Set,MUIA_Disabled,FALSE);
  1158.         DoMethod(CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_histmeter,CM_Bg,3,MUIM_Set,MUIA_Disabled,TRUE);
  1159.         if(gauge->type!=typ_clock_) DoMethod(BT_Quest,  MUIM_Notify,MUIA_Pressed,FALSE, WI_HelpFmt   ,3,MUIM_Set,MUIA_Window_Open,TRUE);
  1160.         else                        DoMethod(BT_Quest,  MUIM_Notify,MUIA_Pressed,FALSE, WI_HelpClock ,3,MUIM_Set,MUIA_Window_Open,TRUE);
  1161.  
  1162.         DoMethod(obj,       MUIM_Notify,MUIA_Window_CloseRequest,TRUE, MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,3,Dis_ID_ComposerClose,obj,FALSE);
  1163.         DoMethod(BT_Cancel, MUIM_Notify,MUIA_Pressed,FALSE,            MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,3,Dis_ID_ComposerClose,obj,FALSE);
  1164.         DoMethod(BT_Use,    MUIM_Notify,MUIA_Pressed,FALSE,            MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,3,Dis_ID_ComposerClose,obj,TRUE);
  1165.  
  1166.         DoMethod(obj,       MUIM_Notify,MUIA_Window_MenuAction,CMP_SAVE,obj,1,Dis_ID_SaveGauge);
  1167.         DoMethod(obj,       MUIM_Notify,MUIA_Window_MenuAction,CMP_LOAD,obj,1,Dis_ID_LoadGauge);
  1168.  
  1169.         return((ULONG)obj);
  1170.     }
  1171.     }
  1172.     return(0L);
  1173. }
  1174.  
  1175. static __saveds __asm ULONG ComposerDispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg)
  1176. {
  1177.     switch (msg->MethodID)
  1178.     {
  1179.     case OM_NEW                     : return(Composer_New   (cl,obj,(APTR)msg));
  1180.     case Dis_ID_Composer_Save       : return(Composer_Save  (cl,obj,(APTR)msg));
  1181.     case Dis_ID_DoubleClickDevice   : return(DoubleClickDev (cl,obj,(APTR)msg));
  1182.     case Dis_ID_SaveGauge           : return(SaveGaugeSet   (cl,obj));
  1183.     case Dis_ID_LoadGauge           : return(LoadGaugeSet   (cl,obj));
  1184.     }
  1185.     return(DoSuperMethodA(cl,obj,msg));
  1186. }
  1187. ///
  1188. /*************************************************/
  1189. /* Main Window and his dispatcher                */
  1190. /*************************************************/
  1191.  
  1192. /******************************************/
  1193. /* some vars                              */
  1194. /******************************************/
  1195. ///
  1196. #define Dis_ID_DoubleClick1 1
  1197. #define Dis_ID_Finish       2
  1198. #define Dis_ID_DoubleClick2 3
  1199. #define Dis_ID_Save         4
  1200. #define Dis_ID_Snap         5
  1201. #define Dis_ID_Load         6
  1202.  
  1203. struct NewMenu MenuData1[] =
  1204. {
  1205.     { NM_TITLE, (STRPTR)MM_Project         , 0 ,0 ,0             ,(APTR)MEN_PROJECT  },
  1206.     { NM_ITEM , (STRPTR)MM_Open            ,"O",0 ,0             ,(APTR)MEN_OPEN     },
  1207.     { NM_ITEM , (STRPTR)MM_SaveAs          ,"S",0 ,0             ,(APTR)MEN_SAVE     },
  1208.     { NM_ITEM , (STRPTR)MM_About           ,"?",0 ,0             ,(APTR)MEN_ABOUT    },
  1209.     { NM_ITEM ,  NM_BARLABEL               , 0 ,0 ,0             ,(APTR)0            },
  1210.     { NM_ITEM , (STRPTR)MM_Quit            ,"Q",0 ,0             ,(APTR)MEN_QUIT     },
  1211.     { NM_END,NULL,0,0,0,(APTR)0 }
  1212. };
  1213.  
  1214. struct ls_layout
  1215. {
  1216.     char    *entry_desc;
  1217.     BYTE     entry_selected;
  1218.     BOOL     entry_max;
  1219.     char    *entry[6];
  1220. };
  1221.  
  1222. struct  ls_layout switches[]=
  1223.     {
  1224.         {(STRPTR)ML_Window,         0,0,0,0,0,0,0,0},
  1225.         {(STRPTR)ML_BgPic,          0,2,(STRPTR)ML_BgPic_None,(STRPTR)ML_BgPic_File,(STRPTR)ML_BgPic_Snap,0,0,0},
  1226.         {(STRPTR)ML_WinBeh,         0,2,(STRPTR)ML_WinBeh_Normal,(STRPTR)ML_WinBeh_Front,(STRPTR)ML_WinBeh_Back,0,0,0},
  1227.         {(STRPTR)ML_WinMov,         0,1,(STRPTR)ML_WinMov_Normal,(STRPTR)ML_WinMov_Fixed,0,0,0,0},
  1228.         {(STRPTR)ML_Border,         0,3,(STRPTR)ML_Border_None,(STRPTR)ML_Border_Simple,(STRPTR)ML_Border_Standard,(STRPTR)ML_Border_Double,0,0},
  1229.         {(STRPTR)ML_Startup,        0,0,0,0,0,0,0,0},
  1230.         {(STRPTR)ML_ScrNot,         0,1,(STRPTR)ML_ScrNot_No,(STRPTR)ML_ScrNot_Yes,0,0,0,0},
  1231.         {(STRPTR)ML_Cpu,            0,2,(STRPTR)ML_Cpu_None,(STRPTR)ML_Cpu_Executive,(STRPTR)ML_Cpu_Own,0,0,0},
  1232.         NULL
  1233.     };
  1234.  
  1235. char    *mainlister[]=
  1236.     {
  1237.         (STRPTR)MOL_General,
  1238.         (STRPTR)MOL_Compose,
  1239.         NULL
  1240.     };
  1241.  
  1242. char    *sublister[]=
  1243.     {
  1244.         (STRPTR)MOL_sub_General,
  1245.         (STRPTR)MOL_sub_Flags,
  1246.         (STRPTR)MOL_sub_Window,
  1247.         NULL
  1248.     };
  1249.  
  1250. struct MainData
  1251. {
  1252.     ULONG   dummy;
  1253. };
  1254.  
  1255. char    *pubscr[256];
  1256.  
  1257. struct  BitMap my_bmp;
  1258.  
  1259. Object  *BT_Save,
  1260.     *BT_Use,
  1261.     *BT_Test,
  1262.     *BT_Cancel,
  1263.     *ls_Switch,
  1264.     *ls_PubScr,
  1265.     *lv_Switch,
  1266.     *lv_PubScr,
  1267.     *ST_PubScr,
  1268.     *PO_PubScr,
  1269.     *MN_Main,
  1270.     *WI_About,
  1271.     *IN_posx,
  1272.     *IN_posy,
  1273.     *IN_sizx,
  1274.     *ST_bg,
  1275.     *NB_wait,
  1276.     *NB_mem,
  1277.     *NB_vol,
  1278.     *NB_bordx,
  1279.     *NB_bordy,
  1280.     *NB_spcx,
  1281.     *NB_spcy,
  1282.     *NB_col,
  1283.     *NB_pri,
  1284.     *MN_Colors[3],
  1285.     *CM_Falling,
  1286.     *BT_Snap,
  1287.     *LV_Composer;
  1288.  
  1289. ///
  1290. /******************************************/
  1291. /* some listview hooks                    */
  1292. /******************************************/
  1293. ///
  1294. __saveds __asm APTR lay_consfunc(__a1 struct ls_layout *src)
  1295. {
  1296.     return(src);
  1297. }
  1298.  
  1299. __saveds __asm ULONG lay_desfunc(__a1 struct ls_layout *src)
  1300. {
  1301.     return(0L);
  1302. }
  1303.  
  1304. __saveds __asm void lay_dispfunc(__a2 char **array,__a1 struct ls_layout *src)
  1305. {
  1306.     *array++ = src->entry_desc;
  1307.     *array   = src->entry[src->entry_selected];
  1308. }
  1309.  
  1310. static const struct Hook lay_ConstructHook = { { 0,0 }, (void *)lay_consfunc, NULL, NULL };
  1311. static const struct Hook lay_DestructHook  = { { 0,0 }, (void *)lay_desfunc , NULL, NULL };
  1312. static const struct Hook lay_DisplayHook   = { { 0,0 }, (void *)lay_dispfunc, NULL, NULL };
  1313. ///
  1314. /******************************************/
  1315. /* load settings and a method             */
  1316. /******************************************/
  1317. ///
  1318. #define load_standard  0
  1319. #define load_file      1
  1320.  
  1321. struct LoadSetMsg
  1322. {
  1323.     ULONG           MethodID;
  1324.     ULONG           what;
  1325. };
  1326.  
  1327. insertSettings(struct tm_sys_set *set,struct tm_gau_set *list)
  1328. {
  1329.     struct ls_layout *src;
  1330.  
  1331.     set(NB_col  ,MUIA_Numeric_Value,set->colums);
  1332.     set(NB_bordx,MUIA_Numeric_Value,set->win_border_x);
  1333.     set(NB_bordy,MUIA_Numeric_Value,set->win_border_y);
  1334.     set(NB_spcx ,MUIA_Numeric_Value,set->win_space_x);
  1335.     set(NB_spcy ,MUIA_Numeric_Value,set->win_space_y);
  1336.     set(NB_wait ,MUIA_Numeric_Value,set->start_wait);
  1337.     set(NB_mem  ,MUIA_Numeric_Value,set->mem_refresh);
  1338.     set(NB_vol  ,MUIA_Numeric_Value,set->vol_refresh);
  1339.     set(NB_pri  ,MUIA_Numeric_Value,set->pri);
  1340.  
  1341.     DoMethod(ls_Switch,MUIM_List_GetEntry,1,&src);
  1342.     src->entry_selected=set->bg_type;
  1343.     DoMethod(ls_Switch,MUIM_List_GetEntry,2,&src);
  1344.     src->entry_selected=set->win_backfront;
  1345.     DoMethod(ls_Switch,MUIM_List_GetEntry,3,&src);
  1346.     src->entry_selected=set->win_move;
  1347.     DoMethod(ls_Switch,MUIM_List_GetEntry,4,&src);
  1348.     src->entry_selected=set->bd_type;
  1349.     DoMethod(ls_Switch,MUIM_List_GetEntry,6,&src);
  1350.     src->entry_selected=set->start_usescreennotify;
  1351.     DoMethod(ls_Switch,MUIM_List_GetEntry,7,&src);
  1352.     src->entry_selected=set->Executive;
  1353.  
  1354.     initColor(&set->bg_color,MN_Colors[0]);
  1355.     initColor(&set->bright_color,MN_Colors[1]);
  1356.     initColor(&set->dark_color,MN_Colors[2]);
  1357.  
  1358.     set(ST_PubScr,  MUIA_String_Contents    ,&set->pub_name[0]);
  1359.     set(IN_posx,    MUIA_String_Integer     ,set->x_pos);
  1360.     set(IN_posy,    MUIA_String_Integer     ,set->y_pos);
  1361.     set(IN_sizx,    MUIA_String_Integer     ,set->x_siz);
  1362.     set(ST_bg,      MUIA_String_Contents    ,&set->bg_picture[0]);
  1363.     set(CM_Falling, MUIA_Selected           ,set->lay_falling);
  1364.  
  1365.     DoMethod(visible,MUIM_List_Clear,0L);
  1366.     do
  1367.     {
  1368.     DoMethod(visible,MUIM_List_InsertSingle,list,MUIV_List_Insert_Bottom);
  1369.     }
  1370.     while(list=list->next);
  1371.     DoMethod(visible,MUIM_List_Redraw,MUIV_List_Redraw_All);
  1372.     DoMethod(ls_Switch,MUIM_List_Redraw,MUIV_List_Redraw_All);
  1373. }
  1374.  
  1375. int getNum(struct tm_gau_set *list)
  1376. {
  1377.     int num=1;
  1378.     while(list=list->next)num++;
  1379.     return(num);
  1380. }
  1381.  
  1382. useDefault(struct tm_data *data)
  1383. {
  1384.     struct tm_gau_set   *many,
  1385.             *act,
  1386.             *old;
  1387.  
  1388.     CopyMem((char *)&default_set,data->set,sizeof(struct tm_sys_set));
  1389.     
  1390.     if(act=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),0L))
  1391.     {
  1392.     many=&g1; data->list=act; CopyMem((char *)many,act,sizeof(struct tm_gau_set));
  1393.     while(many=many->next)
  1394.     {
  1395.         old=act;
  1396.         if(act=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),0L))
  1397.         {
  1398.         old->next=act;
  1399.         CopyMem((char *)many,act,sizeof(struct tm_gau_set));
  1400.         }
  1401.         else {act->next=0L;return;}
  1402.     }
  1403.     act->next=0L;
  1404.     }
  1405.     else data->list=0L;
  1406. }
  1407.  
  1408.  
  1409. BOOL loadSettings(Object *obj,struct tm_data *data, char *file)
  1410. {
  1411.     ULONG  my_file;
  1412.     struct tm_gau_set *many,*act;
  1413.  
  1414.     if(!maindata->set)maindata->set=AllocVec(sizeof(struct tm_sys_set),0L);
  1415.  
  1416.     if(my_file=(UBYTE *)Open(file,MODE_OLDFILE))
  1417.     {
  1418.     if(!Read(my_file,data->set,(ULONG)sizeof(struct tm_sys_set)))
  1419.     {
  1420.         useDefault(data);
  1421.     }
  1422.     else
  1423.     {
  1424.         act=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),NULL);
  1425.         data->list=act; many=act;
  1426.         while(Read(my_file,(char *)act,(ULONG)sizeof(struct tm_gau_set)))
  1427.         {
  1428.         many=act;
  1429.         act=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),NULL);
  1430.         many->next=act;
  1431.         }
  1432.         many->next=NULL; FreeVec(act); act=NULL;
  1433.     }
  1434.     Close(my_file);
  1435.     }
  1436.     else useDefault(data);
  1437.  
  1438.     data->num_of_gaug=getNum(data->list);
  1439. }
  1440.  
  1441. ULONG loadManager(struct IClass *cl,Object *obj, struct LoadSetMsg *msg)
  1442. {
  1443.     char *file;
  1444.     switch (msg->what)
  1445.     {
  1446.     case    load_standard:
  1447.         loadSettings(obj,maindata,"ENV:TinyMeter");
  1448.         insertSettings(maindata->set,maindata->list);
  1449.         break;
  1450.     case    load_file:
  1451.         if(file=getfilename(obj,GetStr(MM_OpenTitle),"#?.tm",FALSE))
  1452.         {
  1453.             loadSettings(obj,maindata,file);
  1454.             insertSettings(maindata->set,maindata->list);
  1455.         }
  1456.         break;
  1457.     }
  1458.     return((ULONG)DoSuperMethodA(cl,obj,msg));
  1459. }
  1460.  
  1461. ///
  1462. /******************************************/
  1463. /* test settings and window snapping      */
  1464. /******************************************/
  1465. ///
  1466.  
  1467. #include <exec/memory.h>
  1468. #include <exec/ports.h>
  1469. #include <exec/execbase.h>
  1470.  
  1471. #define test_test       0
  1472. #define test_getwin     1
  1473.  
  1474. struct TestMessage
  1475. {
  1476.     struct  Message ts_Message;
  1477.  
  1478.     ULONG   MethodID;
  1479.  
  1480.     struct  tm_sys_set  *set;
  1481.     struct  tm_gau_set  *list;
  1482.  
  1483.     ULONG   posx,
  1484.         posy,
  1485.         sizx;
  1486. };
  1487.  
  1488. struct TestMessage  *ts_msg;
  1489. struct MsgPort      *p_port;
  1490. struct MsgPort      *p_reply;
  1491.  
  1492. BOOL SafePutToPort(struct Message *message, char *portname)
  1493. {
  1494.     struct MsgPort *port;
  1495.  
  1496.     Forbid();
  1497.     port = (struct MsgPort *)FindPort(portname);
  1498.     if (port) PutMsg(port, (struct Message *) message);
  1499.     Permit();
  1500.     return(port ? TRUE : FALSE);
  1501. }
  1502.  
  1503. ULONG InitTestSettings()
  1504. {
  1505.     if(
  1506.        ( ts_msg =(struct TestMessage *)AllocMem  (sizeof(struct TestMessage),MEMF_PUBLIC|MEMF_CLEAR)) &&
  1507.        ( p_reply=(struct MsgPort *)    CreatePort(0,0))
  1508.       )  return (1L);
  1509.     else return (0L);
  1510. }
  1511.  
  1512. FreeTestSettings()
  1513. {
  1514.     if(ts_msg) FreeMem      (ts_msg,sizeof(struct TestMessage));
  1515.     if(p_reply)DeletePort   (p_reply);
  1516. }
  1517.  
  1518. struct TestMessage *TestSettings(ULONG type)
  1519. {
  1520.     ULONG  i,j;
  1521.     struct tm_gau_set   *act,
  1522.             *all[64];
  1523.     if( FindPort("TinyMeter") )
  1524.     if( ts_msg && p_reply)
  1525.     {
  1526.     ts_msg->ts_Message.mn_Node.ln_Type  = NT_MESSAGE;
  1527.     ts_msg->ts_Message.mn_ReplyPort     = p_reply;
  1528.     ts_msg->ts_Message.mn_Length        = sizeof ( struct TestMessage );
  1529.     ts_msg->MethodID                    = type;
  1530.     switch (type)
  1531.     {
  1532.         case    test_test:
  1533.             for(i=0;i<64;i++)all[i]=0L;
  1534.             for(i=0;;i++)
  1535.             {
  1536.             DoMethod(visible,MUIM_List_GetEntry,i,&act);
  1537.             if(!act)  break;
  1538.             if(i==63) break;
  1539.             if(all[i]=AllocVec(sizeof(struct tm_gau_set),0L))
  1540.             {
  1541.                 CopyMem(act, all[i], sizeof(struct tm_gau_set));
  1542.             }
  1543.             else return(0L);
  1544.             }
  1545.             for(j=0;j<i;j++)
  1546.             {
  1547.             all[j]->next=all[j+1];
  1548.             }
  1549.             ts_msg->list=all[0];
  1550.  
  1551.             if(ts_msg->set = AllocVec(sizeof(struct tm_sys_set),0L))
  1552.             {
  1553.             CopyMem(maindata->set,ts_msg->set,sizeof(struct tm_sys_set));
  1554.             }
  1555.             else return(0L);
  1556.             break;
  1557.         case    test_getwin:
  1558.             ts_msg->list=0L;
  1559.             ts_msg->set =0L;
  1560.             break;
  1561.     }
  1562.     if (SafePutToPort((struct Message *)ts_msg,"TinyMeter"))
  1563.     {
  1564.         WaitPort(p_reply);
  1565.         return(GetMsg(p_reply));
  1566.     }
  1567.     }
  1568.     return(0L);
  1569. }
  1570.  
  1571. ///
  1572. /******************************************/
  1573. /* snapWindow method                      */
  1574. /******************************************/
  1575. ///
  1576. snapWindow(struct IClass *cl,Object *obj, struct Msg *msg)
  1577. {
  1578.     struct TestMessage *testMsg;
  1579.  
  1580.     testMsg=TestSettings(test_getwin);
  1581.  
  1582.     set(IN_posx,    MUIA_String_Integer     ,testMsg->posx);
  1583.     set(IN_posy,    MUIA_String_Integer     ,testMsg->posy);
  1584.     set(IN_sizx,    MUIA_String_Integer     ,testMsg->sizx);
  1585. }
  1586. ///
  1587. /******************************************/
  1588. /* save settings and the method for it    */
  1589. /******************************************/
  1590. ///
  1591. #define save_save      0
  1592. #define save_use       1
  1593. #define save_test      2
  1594. #define save_file      3
  1595. #define save_cancel    4
  1596.  
  1597. struct SaveSetMsg
  1598. {
  1599.     ULONG           MethodID;
  1600.     ULONG           what;
  1601. };
  1602.  
  1603. getSettings(struct tm_sys_set *set)
  1604. {
  1605.     ULONG   dummy;
  1606.     struct  ls_layout *src;
  1607.  
  1608.     get(NB_col  ,MUIA_Numeric_Value,&dummy);set->colums         =(UWORD)dummy;
  1609.     get(NB_bordx,MUIA_Numeric_Value,&dummy);set->win_border_x   =(UWORD)dummy;
  1610.     get(NB_bordy,MUIA_Numeric_Value,&dummy);set->win_border_y   =(UWORD)dummy;
  1611.     get(NB_spcx ,MUIA_Numeric_Value,&dummy);set->win_space_x    =(UWORD)dummy;
  1612.     get(NB_spcy ,MUIA_Numeric_Value,&dummy);set->win_space_y    =(UWORD)dummy;
  1613.     get(NB_wait ,MUIA_Numeric_Value,&dummy);set->start_wait     =(UWORD)dummy;
  1614.     get(NB_mem  ,MUIA_Numeric_Value,&dummy);set->mem_refresh    =(UWORD)dummy;
  1615.     get(NB_vol  ,MUIA_Numeric_Value,&dummy);set->vol_refresh    =(UWORD)dummy;
  1616.     get(NB_pri  ,MUIA_Numeric_Value,&dummy);set->pri            =(BYTE) dummy;
  1617.     get(CM_Falling,MUIA_Selected,   &dummy);set->lay_falling    =(UBYTE)dummy;
  1618.  
  1619.     DoMethod(ls_Switch,MUIM_List_GetEntry,1,&src); set->bg_type              =src->entry_selected;
  1620.     DoMethod(ls_Switch,MUIM_List_GetEntry,2,&src); set->win_backfront        =src->entry_selected;
  1621.     DoMethod(ls_Switch,MUIM_List_GetEntry,3,&src); set->win_move             =src->entry_selected;
  1622.     DoMethod(ls_Switch,MUIM_List_GetEntry,4,&src); set->bd_type              =src->entry_selected;
  1623.     DoMethod(ls_Switch,MUIM_List_GetEntry,6,&src); set->start_usescreennotify=src->entry_selected;
  1624.     DoMethod(ls_Switch,MUIM_List_GetEntry,7,&src); set->Executive            =src->entry_selected;
  1625.  
  1626.     getColor(&set->bg_color,    MN_Colors[0]);
  1627.     getColor(&set->bright_color,MN_Colors[1]);
  1628.     getColor(&set->dark_color,  MN_Colors[2]);
  1629.  
  1630.     get(ST_PubScr ,MUIA_String_Contents,&dummy); strcpy(&set->pub_name[0]   ,(char *)dummy);
  1631.     get(ST_bg     ,MUIA_String_Contents,&dummy); strcpy(&set->bg_picture[0] ,(char *)dummy);
  1632.     get(IN_sizx   ,MUIA_String_Integer, &dummy); set->x_siz=(UWORD)dummy;
  1633.     get(IN_posx   ,MUIA_String_Integer, &dummy); set->x_pos=(UWORD)dummy;
  1634.     get(IN_posy   ,MUIA_String_Integer, &dummy); set->y_pos=(UWORD)dummy;
  1635. }
  1636.  
  1637. static saveSettings(Object *listv, struct tm_sys_set *set, char *file)
  1638. {
  1639.     int                 i;
  1640.     ULONG               my_file;
  1641.     struct tm_gau_set   *act;
  1642.  
  1643.     if(my_file=(ULONG)Open(file,MODE_NEWFILE))
  1644.     {
  1645.     Write(my_file,set,(ULONG)sizeof(struct tm_sys_set));
  1646.     for (i=0;;i++)
  1647.     {
  1648.         DoMethod(listv,MUIM_List_GetEntry,i,&act);
  1649.         if(!act)  break;
  1650.         if(i==63) break;
  1651.         Write(my_file,act,(ULONG)sizeof(struct tm_gau_set));
  1652.     }
  1653.     Close(my_file);
  1654.     }
  1655. }
  1656.  
  1657. ULONG saveManager(struct IClass *cl,Object *obj, struct SaveSetMsg *msg)
  1658. {
  1659.     int i=0;
  1660.     char *file;
  1661.  
  1662.     getSettings(maindata->set);
  1663.     switch (msg->what)
  1664.     {
  1665.     case    save_save:
  1666.         saveSettings(visible,maindata->set,"ENVARC:TinyMeter");
  1667.     case    save_use:
  1668.         saveSettings(visible,maindata->set,"ENV:TinyMeter");
  1669.         TestSettings(test_test);
  1670.         while(pubscr[i]) FreeVec(pubscr[i++]);
  1671.         DoMethod((Object *)xget(obj,MUIA_ApplicationObject),MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  1672.         return(0L);
  1673.     case    save_test:
  1674.         TestSettings(test_test);
  1675.         return(obj);
  1676.     case    save_file:
  1677.         if(file=getfilename(obj,GetStr(MM_SaveTitle),"#?.tm",TRUE))
  1678.             saveSettings(visible,maindata->set,file);
  1679.         break;
  1680.     case    save_cancel:
  1681.         loadSettings(obj,maindata,"ENV:TinyMeter");
  1682.         insertSettings(maindata->set,maindata->list);
  1683.         TestSettings(test_test);
  1684.         DoMethod((Object *)xget(obj,MUIA_ApplicationObject),MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  1685.         break;
  1686.     }
  1687.     return((ULONG)DoSuperMethodA(cl,obj,msg));
  1688. }
  1689. ///
  1690. /******************************************/
  1691. /* other MainWindow methods               */
  1692. /******************************************/
  1693. ///
  1694. struct DoubleClkMsg
  1695. {
  1696.     ULONG   MethodID;
  1697.     struct  MainData *data;
  1698. };
  1699.  
  1700. static ULONG Dis_DoubleClick2(struct IClass *cl,Object *obj, struct DoubleClkMsg *msg)
  1701. {
  1702.     struct ls_layout *src;
  1703.  
  1704.     DoMethod(ls_Switch,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&src);
  1705.     if(src)
  1706.     {
  1707.     if(src->entry_max>0)
  1708.     {
  1709.         src->entry_selected++;if(src->entry_max<src->entry_selected)src->entry_selected=0;
  1710.         DoMethod(ls_Switch,MUIM_List_Redraw,MUIV_List_Redraw_Active);
  1711.     }
  1712.     return(DoSuperMethodA(cl,obj,msg));
  1713.     }
  1714.     else return(0L);
  1715. }
  1716.  
  1717. static ULONG Dis_DoubleClick1(struct IClass *cl,Object *obj, struct DoubleClkMsg *msg)
  1718. {
  1719.     char   *my_ptr;
  1720.  
  1721.     DoMethod(ls_PubScr,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&my_ptr);
  1722.     if(my_ptr)
  1723.     {
  1724.     set(ST_PubScr,MUIA_String_Contents,my_ptr);
  1725.     DoMethod(PO_PubScr,MUIM_Popstring_Close,0L);
  1726.     return(DoSuperMethodA(cl,obj,msg));
  1727.     }
  1728.     else return(0L);
  1729. }
  1730.  
  1731. ULONG MainWindow_Finish(struct IClass *cl,Object *obj,Msg *msg)
  1732. {
  1733.     int i=0;
  1734.  
  1735.     struct MainData *data;
  1736.     data=INST_DATA(cl,obj);
  1737.     while(pubscr[i++]) FreeVec(pubscr[i]); pubscr[i]=0;
  1738.     DoMethod((Object *)xget(obj,MUIA_ApplicationObject),MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  1739.  
  1740.     return((ULONG)0L);
  1741. }
  1742.  
  1743. static GetPubScreens()
  1744. {
  1745.     struct List     *PubScreenList;
  1746.     struct PubScreenNode *ScreenNode;
  1747.     int i=0;
  1748.  
  1749.     PubScreenList = LockPubScreenList();
  1750.     for(ScreenNode=(struct PubScreenNode *)PubScreenList->lh_Head;ScreenNode->psn_Node.ln_Succ;ScreenNode=(struct PubScreenNode *)ScreenNode->psn_Node.ln_Succ)
  1751.     {
  1752.     pubscr[i]=(char *)AllocVec(256L,0L);
  1753.     strcpy(pubscr[i],ScreenNode->psn_Node.ln_Name);
  1754.     i++;
  1755.     }
  1756.     UnlockPubScreenList();
  1757. }
  1758.  
  1759. static ULONG MainWindow_New(struct IClass *cl,Object *obj,Msg *msg)
  1760. {
  1761.     struct MainData *data;
  1762.     int    i;
  1763.  
  1764.     InitBitMap(&my_bmp,3,41,192);
  1765.     my_bmp.Planes[0]=&tmp_logoData[0];
  1766.     my_bmp.Planes[1]=&tmp_logoData[576];
  1767.     my_bmp.Planes[2]=&tmp_logoData[1152];
  1768.  
  1769.     GetPubScreens();
  1770.  
  1771.     if (obj = (Object *)
  1772.     DoSuperNew(cl,obj,
  1773.         MUIA_Window_Title, GetStr(MO_Title),
  1774.         MUIA_Window_ID   , MAKE_ID('T','I','N','Y'),
  1775.         WindowContents, VGroup, ButtonFrame,
  1776.         Child, HGroup,
  1777.             Child, VGroup, MUIA_Background, MUII_SHADOW,
  1778.             Child, HVSpace,
  1779.             Child, BitmapObject,
  1780.                 MUIA_Bitmap_Bitmap,         &my_bmp,
  1781.                 MUIA_Bitmap_Width,          41,
  1782.                 MUIA_Bitmap_Height,         192,
  1783.                 MUIA_Bitmap_SourceColors,   &tmp_logoPaletteRGB32[1],
  1784.                 MUIA_FixHeight, 192,
  1785.                 MUIA_FixWidth, 41,
  1786.                 MUIA_ShortHelp, "Greets to: hANGKOK, pEPE, bEZZZERK, tRACER, rALPH...",
  1787.             End,
  1788.             End,
  1789.             Child, RegisterGroup(mainlister),
  1790.             MUIA_Register_Frame, TRUE,
  1791.  
  1792.             Child, HGroup,
  1793.  
  1794.                 Child, RegisterGroup(sublister),
  1795.                 MUIA_Register_Frame, TRUE,
  1796.  
  1797.                 Child, HGroup,
  1798.  
  1799.                     Child, ColGroup(2), GroupFrameT(GetStr(MOL_Handler)),
  1800.                     Child, HVSpace,
  1801.                     Child, HVSpace,
  1802.  
  1803.                     Child, Label(GetStr(MO_MemRefresh)),
  1804.                     Child, ColGroup(2), Child, NB_mem=MUI_MakeObject(MUIO_NumericButton,NULL,1,100,GetStr(MO_fmt_seconds)), Child, HVSpace, End,
  1805.                     Child, Label(GetStr(MO_VolRefresh)),
  1806.                     Child, ColGroup(2), Child, NB_vol=MUI_MakeObject(MUIO_NumericButton,NULL,1,100,GetStr(MO_fmt_seconds)), Child, HVSpace, End,
  1807.                     Child, Label(GetStr(MO_Wait)),
  1808.                     Child, ColGroup(2), Child, NB_wait=MUI_MakeObject(MUIO_NumericButton,NULL,0,100,GetStr(MO_fmt_seconds)), Child, HVSpace, End,
  1809.                     Child, Label(GetStr(MO_TaskPrio)),
  1810.                     Child, ColGroup(2), Child, NB_pri=MUI_MakeObject(MUIO_NumericButton,NULL,-128,127,"%ld"), Child, HVSpace, End,
  1811.  
  1812.                     Child, HVSpace,
  1813.                     Child, HVSpace,
  1814.                     End,
  1815.  
  1816.                     Child, ColGroup(2), GroupFrameT(GetStr(MOL_sub_Layout)),
  1817.                     Child, HVSpace,
  1818.                     Child, HVSpace,
  1819.  
  1820.                     Child, Label(GetStr(MO_Colums)),
  1821.                     Child, ColGroup(2), Child, NB_col=MUI_MakeObject(MUIO_NumericButton,NULL,1,32,"%3ld"), Child, HVSpace, End,
  1822.                     Child, Label(GetStr(MO_FallingCol)),
  1823.                     Child, HGroup, Child, CM_Falling=CheckMark(NULL), Child, HVSpace, End,
  1824.                     Child, Label(GetStr(MO_SpaceX)),
  1825.                     Child, ColGroup(2), Child, NB_spcx=MUI_MakeObject(MUIO_NumericButton,NULL,0,256,GetStr(MO_fmt_pixels)), Child, HVSpace, End,
  1826.                     Child, Label(GetStr(MO_SpaceY)),
  1827.                     Child, ColGroup(2), Child, NB_spcy=MUI_MakeObject(MUIO_NumericButton,NULL,0,256,GetStr(MO_fmt_pixels)), Child, HVSpace, End,
  1828.                     Child, Label(GetStr(MO_BordX)),
  1829.                     Child, ColGroup(2), Child, NB_bordx=MUI_MakeObject(MUIO_NumericButton,NULL,0,256,GetStr(MO_fmt_pixels)), Child, HVSpace, End,
  1830.                     Child, Label(GetStr(MO_BordY)),
  1831.                     Child, ColGroup(2), Child, NB_bordy=MUI_MakeObject(MUIO_NumericButton,NULL,0,256,GetStr(MO_fmt_pixels)), Child, HVSpace, End,
  1832.  
  1833.                     Child, HVSpace,
  1834.                     Child, HVSpace,
  1835.                     End,
  1836.  
  1837.                 End,
  1838.  
  1839.                 Child, lv_Switch=(Object *)ListviewObject,
  1840.                     MUIA_Listview_Input, TRUE,
  1841.                     MUIA_Listview_DoubleClick, TRUE,
  1842.                     MUIA_Listview_List, ls_Switch=(Object *)ListObject,
  1843.                     MUIA_Frame, MUIV_Frame_InputList,
  1844.                     MUIA_List_ConstructHook, &lay_ConstructHook,
  1845.                     MUIA_List_DestructHook , &lay_DestructHook,
  1846.                     MUIA_List_DisplayHook  , &lay_DisplayHook,
  1847.                     MUIA_List_Format       , "MIW=5 MAW=100 BAR,",
  1848.                     MUIA_List_Active, MUIV_List_Active_Top,
  1849.                     End,
  1850.                 End,
  1851.  
  1852.                 Child, ColGroup(2),
  1853.                     Child, HVSpace,
  1854.                     Child, HVSpace,
  1855.  
  1856.                     Child, Label(GetStr(MO_Public)),
  1857.                     Child, PO_PubScr=(Object *)PopobjectObject,
  1858.                     MUIA_Popstring_String, ST_PubScr=(Object *)String(NULL,80),
  1859.                     MUIA_Popstring_Button, PopButton(MUII_PopUp),
  1860.                     MUIA_Popobject_Object, lv_PubScr=(Object *)ListviewObject,
  1861.                         MUIA_Listview_Input, TRUE,
  1862.                         MUIA_Listview_DoubleClick, TRUE,
  1863.                         MUIA_Listview_List, ls_PubScr=(Object *)ListObject,
  1864.                         MUIA_Frame, MUIV_Frame_InputList,
  1865.                         MUIA_List_Active, MUIV_List_Active_Top,
  1866.                         MUIA_List_SourceArray,&pubscr[0],
  1867.                         End,
  1868.                     End,
  1869.                     End,
  1870.  
  1871.                     Child, Label(GetStr(MO_WindowPos)),
  1872.                     Child, ColGroup(2),
  1873.                     Child, IN_posx=StringObject,
  1874.                         StringFrame,
  1875.                         MUIA_String_Accept , "0123456879",
  1876.                     End,
  1877.                     Child, IN_posy=StringObject,
  1878.                         StringFrame,
  1879.                         MUIA_String_Accept , "0123456879",
  1880.                     End,
  1881.                     End,
  1882.  
  1883.                     Child, Label(GetStr(MO_WindowSiz)),
  1884.                     Child, ColGroup(2),
  1885.                     MUIA_Group_SameWidth, TRUE,
  1886.                     Child, IN_sizx=StringObject,
  1887.                         StringFrame,
  1888.                         MUIA_String_Accept , "0123456879",
  1889.                     End,
  1890.                     Child, BT_Snap=SimpleButton(GetStr(MO_Snap)),
  1891.                     End,
  1892.  
  1893.                     Child, Label(GetStr(MO_BackgroundPic)),
  1894.                     Child, ST_bg=PopaslObject,
  1895.                     MUIA_Popstring_String, String(NULL,80),
  1896.                     MUIA_Popstring_Button, PopButton(MUII_PopFile),
  1897.                     ASLFO_TitleText  , GetStr(MO_SelectBg),
  1898.                     End,
  1899.                     Child, Label(GetStr(MO_BackgroundCol)),
  1900.                     Child, ColGroup(3),Child, HVSpace, Child, MN_Colors[0]=MakePen(), Child, HVSpace, End,
  1901.                     Child, Label(GetStr(MO_BrightCol)),
  1902.                     Child, ColGroup(3),Child, HVSpace, Child, MN_Colors[1]=MakePen(), Child, HVSpace, End,
  1903.                     Child, Label(GetStr(MO_DarkCol)),
  1904.                     Child, ColGroup(3),Child, HVSpace, Child, MN_Colors[2]=MakePen(), Child, HVSpace, End,
  1905.  
  1906.                     Child, HVSpace,
  1907.                     Child, HVSpace,
  1908.                 End,
  1909.                 End,
  1910.             End,
  1911.  
  1912.             Child, VGroup,
  1913.                 Child, NewObject(CL_ChooseFields->mcc_Class,NULL,TAG_DONE),
  1914.             End,
  1915.             End,
  1916.         End,
  1917.         Child, HGroup,
  1918.             Child, BT_Save = (Object *)SimpleButton(GetStr(MO_Save)),
  1919.             Child, BT_Use = (Object *)SimpleButton(GetStr(MO_Use)),
  1920.             Child, BT_Test = (Object *)SimpleButton(GetStr(MO_Test)),
  1921.             Child, BT_Cancel = (Object *)SimpleButton(GetStr(MO_Cancel)),
  1922.         End,
  1923.         End,
  1924.     End)
  1925.     {
  1926.     data=INST_DATA(cl,obj);
  1927.  
  1928.     set(BT_Save     ,MUIA_ShortHelp,GetStr(MH_Save));
  1929.     set(BT_Use      ,MUIA_ShortHelp,GetStr(MH_Use));
  1930.     set(BT_Test     ,MUIA_ShortHelp,GetStr(MH_Test));
  1931.     set(BT_Cancel   ,MUIA_ShortHelp,GetStr(MH_Cancel));
  1932.     set(NB_mem      ,MUIA_ShortHelp,GetStr(MH_MemRefresh));
  1933.     set(NB_vol      ,MUIA_ShortHelp,GetStr(MH_VolRefresh));
  1934.     set(NB_wait     ,MUIA_ShortHelp,GetStr(MH_Wait));
  1935.     set(lv_Switch   ,MUIA_ShortHelp,GetStr(MH_Flags));
  1936.     set(PO_PubScr   ,MUIA_ShortHelp,GetStr(MH_Public));
  1937.     set(IN_posx     ,MUIA_ShortHelp,GetStr(MH_PosX));
  1938.     set(IN_posy     ,MUIA_ShortHelp,GetStr(MH_PosY));
  1939.     set(IN_sizx     ,MUIA_ShortHelp,GetStr(MH_SizX));
  1940.     set(BT_Snap     ,MUIA_ShortHelp,GetStr(MH_Snap));
  1941.     set(ST_bg       ,MUIA_ShortHelp,GetStr(MH_BackgroundPic));
  1942.     set(MN_Colors[0],MUIA_ShortHelp,GetStr(MH_BackgroundCol));
  1943.     set(MN_Colors[1],MUIA_ShortHelp,GetStr(MH_BrightCol));
  1944.     set(MN_Colors[2],MUIA_ShortHelp,GetStr(MH_DarkCol));
  1945.     set(NB_col      ,MUIA_ShortHelp,GetStr(MH_Colums));
  1946.     set(NB_spcx     ,MUIA_ShortHelp,GetStr(MH_SpaceX));
  1947.     set(NB_spcy     ,MUIA_ShortHelp,GetStr(MH_SpaceX));
  1948.     set(NB_bordx    ,MUIA_ShortHelp,GetStr(MH_BordX));
  1949.     set(NB_bordy    ,MUIA_ShortHelp,GetStr(MH_BordY));
  1950.  
  1951.     DoMethod(BT_Snap  ,MUIM_Notify,MUIA_Pressed                ,FALSE,obj,1,Dis_ID_Snap);
  1952.     DoMethod(BT_Save  ,MUIM_Notify,MUIA_Pressed                ,FALSE,obj,2,Dis_ID_Save        ,save_save);
  1953.     DoMethod(BT_Use   ,MUIM_Notify,MUIA_Pressed                ,FALSE,obj,2,Dis_ID_Save        ,save_use );
  1954.     DoMethod(BT_Test  ,MUIM_Notify,MUIA_Pressed                ,FALSE,obj,2,Dis_ID_Save        ,save_test);
  1955.     DoMethod(lv_PubScr,MUIM_Notify,MUIA_Listview_DoubleClick   ,TRUE ,obj,2,Dis_ID_DoubleClick1,data);
  1956.     DoMethod(lv_Switch,MUIM_Notify,MUIA_Listview_DoubleClick   ,TRUE ,obj,1,Dis_ID_DoubleClick2);
  1957.  
  1958.     DoMethod(obj,MUIM_Notify,MUIA_Window_MenuAction,MEN_SAVE,obj,2,Dis_ID_Save,save_file);
  1959.     DoMethod(obj,MUIM_Notify,MUIA_Window_MenuAction,MEN_OPEN,obj,2,Dis_ID_Load,load_file);
  1960.  
  1961.     DoMethod(BT_Cancel,MUIM_Notify,MUIA_Pressed                ,FALSE,obj,2,Dis_ID_Save        ,save_cancel);
  1962.  
  1963.     for(i=0;i<8;i++)DoMethod(ls_Switch,MUIM_List_InsertSingle,&switches[i],MUIV_List_Insert_Bottom);
  1964.  
  1965.     DoMethod(obj,Dis_ID_Load,load_standard);
  1966.  
  1967.     }
  1968.     return((ULONG)obj);
  1969. }
  1970. ///
  1971.  
  1972. static __saveds __asm ULONG MainWindowDispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg)
  1973. {
  1974.     switch (msg->MethodID)
  1975.     {
  1976.         case OM_NEW              : return (MainWindow_New    (cl,obj,(APTR)msg));
  1977.         case Dis_ID_Finish       : return (MainWindow_Finish (cl,obj,(APTR)msg));
  1978.         case Dis_ID_DoubleClick1 : return (Dis_DoubleClick1  (cl,obj,(APTR)msg));
  1979.         case Dis_ID_DoubleClick2 : return (Dis_DoubleClick2  (cl,obj,(APTR)msg));
  1980.         case Dis_ID_Save         : return (saveManager       (cl,obj,(APTR)msg));
  1981.         case Dis_ID_Snap         : return (snapWindow        (cl,obj,(APTR)msg));
  1982.         case Dis_ID_Load         : return (loadManager       (cl,obj,(APTR)msg));
  1983.     }
  1984.     return (DoSuperMethodA    (cl,obj,(APTR)msg));
  1985. }
  1986.  
  1987. /*************************************************/
  1988. /* Init all classes                              */
  1989. /*************************************************/
  1990. ///
  1991. VOID ExitClasses(VOID)
  1992. {
  1993.     if (CL_FieldsList  ) MUI_DeleteCustomClass(CL_FieldsList);
  1994.     if (CL_ChooseFields) MUI_DeleteCustomClass(CL_ChooseFields);
  1995.     if (CL_MainWindow)   MUI_DeleteCustomClass(CL_MainWindow);
  1996.     if (CL_Composer)     MUI_DeleteCustomClass(CL_Composer);
  1997. }
  1998.  
  1999.  
  2000. BOOL InitClasses(VOID)
  2001. {
  2002.     CL_MainWindow    = MUI_CreateCustomClass(NULL,MUIC_Window   ,NULL, sizeof(struct MainData)           ,MainWindowDispatcher);
  2003.     CL_FieldsList    = MUI_CreateCustomClass(NULL,MUIC_List     ,NULL, sizeof(struct FieldsList_Data)    ,FieldsList_Dispatcher);
  2004.     CL_ChooseFields  = MUI_CreateCustomClass(NULL,MUIC_Group    ,NULL, sizeof(struct ChooseFields_Data)  ,ChooseFields_Dispatcher);
  2005.     CL_Composer      = MUI_CreateCustomClass(NULL,MUIC_Window   ,NULL, sizeof(struct Composer_Data)      ,ComposerDispatcher);
  2006.     if ( CL_FieldsList && CL_ChooseFields && CL_MainWindow && CL_Composer ) return(TRUE);
  2007.     ExitClasses();
  2008.     return(FALSE);
  2009. }
  2010. ///
  2011. /*************************************************/
  2012. /* Main: MUIApplication and Aboutwindow          */
  2013. /*************************************************/
  2014. ///
  2015.  
  2016. #include <exec/tasks.h>
  2017.  
  2018. #ifdef _DCC
  2019.  
  2020. int brkfunc(void) { return(0); }
  2021.  
  2022.  
  2023. #endif
  2024.  
  2025. void LocalizeSwitches(struct ls_layout *ll)
  2026. {
  2027.     int i;
  2028.     for (;ll->entry_desc!=NULL;ll++)
  2029.     {
  2030.     ll->entry_desc=GetStr((int)ll->entry_desc);
  2031.     for(i=0;i<6;i++)
  2032.     {
  2033.         if (ll->entry[i]!=NULL) ll->entry[i]=GetStr((int)ll->entry[i]);
  2034.         else ll->entry[i]=" ";
  2035.     }
  2036.     }
  2037. }
  2038.  
  2039. BOOL    quit_not;
  2040.  
  2041. int main(int argc, char *argv[])
  2042. {
  2043.     Object *app,*window;
  2044.     struct  Task    *me;
  2045.  
  2046.     if (MUIMasterBase = OpenLibrary(MUIMASTER_NAME,MUIMASTER_VMIN))
  2047.     {
  2048.     if(me= FindTask(NULL))
  2049.     {
  2050.         if((me->tc_SPUpper-me->tc_SPLower)>8000)
  2051.         {
  2052.         if(maindata=(struct tm_data *)AllocVec(sizeof(struct tm_data),MEMF_CLEAR))
  2053.         {
  2054.             if(InitTestSettings())
  2055.             {
  2056.             InitClasses();
  2057.             InitLocale();
  2058.             LocalizeNewMenu(MenuData1);
  2059.             LocalizeNewMenu(CmpMenuData);
  2060.             LocalizeSwitches(switches);
  2061.             LocalizeStringArray(gau_types);
  2062.             LocalizeStringArray(types);
  2063.             LocalizeStringArray(indent);
  2064.             LocalizeStringArray(mainlister);
  2065.             LocalizeStringArray(sublister);
  2066.             LocalizeStringArray(regcomposer);
  2067.             strcpy(&default_gauge.label[0],GetStr(MDef_Label));
  2068.             strcpy(&default_gauge.format[0],GetStr(MDef_fmt));
  2069.             strcpy(&default_gauge.expansion[0],GetStr(MDef_Device));
  2070.  
  2071.             app = ApplicationObject,
  2072.                 MUIA_Application_Title      ,   "TinyMeterPrefs V4.10",
  2073.                 MUIA_Application_Version    ,   "$VER: TinyMeterPrefs V4.10 (05.02.95)",
  2074.                 MUIA_Application_Copyright  ,   "©1994-95, Tinic Urou",
  2075.                 MUIA_Application_Author     ,   "Tinic Urou",
  2076.                 MUIA_Application_Description,   GetStr(MA_Description),
  2077.                 MUIA_Application_Base       ,   "TMPREFS",
  2078.                 MUIA_Application_HelpFile   ,   "HELP:TinyMeter.guide",
  2079.                 MUIA_Application_Menustrip  ,   MN_Main = MUI_MakeObject(MUIO_MenustripNM,MenuData1,0),
  2080.                 SubWindow                   ,   window = (Object *)NewObject(CL_MainWindow->mcc_Class,NULL,TAG_DONE),
  2081.                 SubWindow                   ,   WI_About = WindowObject,
  2082.                                     MUIA_Window_Title, GetStr(MA_About_Title),
  2083.                                     MUIA_Window_ID   , MAKE_ID('T','M','A','B'),
  2084.                                     WindowContents, VGroup, ButtonFrame,
  2085.                                     Child, BodychunkObject,
  2086.                                         MUIA_FixWidth             , ABOUT_WIDTH ,
  2087.                                         MUIA_FixHeight            , ABOUT_HEIGHT,
  2088.                                         MUIA_Bitmap_Width         , ABOUT_WIDTH ,
  2089.                                         MUIA_Bitmap_Height        , ABOUT_HEIGHT,
  2090.                                         MUIA_Bodychunk_Depth      , ABOUT_DEPTH ,
  2091.                                         MUIA_Bodychunk_Body       , (UBYTE *)about_body,
  2092.                                         MUIA_Bodychunk_Compression, ABOUT_COMPRESSION,
  2093.                                         MUIA_Bodychunk_Masking    , ABOUT_MASKING,
  2094.                                         MUIA_Bitmap_SourceColors  , (ULONG *)about_colors,
  2095.                                         MUIA_Bitmap_Transparent   , 0,
  2096.                                     End,
  2097.                                     End,
  2098.                                 End,
  2099.                 SubWindow                   ,   WI_HelpFmt = WindowObject,
  2100.                                     MUIA_Window_Title, GetStr(MH_FormatHelp),
  2101.                                     MUIA_Window_ID  , MAKE_ID('T','H','L','P'),
  2102.                                     WindowContents, VGroup,
  2103.                                     Child, ScrollgroupObject,
  2104.                                         MUIA_Scrollgroup_Contents, VirtgroupObject,TextFrame,
  2105.                                         Child, TextObject,
  2106.                                             MUIA_Text_Contents, GetStr(MOH_Format),
  2107.                                         End,
  2108.                                         End,
  2109.                                     End,
  2110.                                     End,
  2111.                                 End,
  2112.                 SubWindow                   ,   WI_HelpClock = WindowObject,
  2113.                                     MUIA_Window_Title, GetStr(MH_ClockHelp),
  2114.                                     MUIA_Window_ID  , MAKE_ID('T','H','L','P'),
  2115.                                     WindowContents, VGroup,
  2116.                                     Child, ScrollgroupObject,
  2117.                                         MUIA_Scrollgroup_Contents, VirtgroupObject,TextFrame,
  2118.                                         Child, TextObject,
  2119.                                             MUIA_Text_Contents, GetStr(MOH_Clock),
  2120.                                         End,
  2121.                                         End,
  2122.                                     End,
  2123.                                     End,
  2124.                                 End,
  2125.                   End;
  2126.  
  2127.             if(app)
  2128.             {
  2129.                 DoMethod(app        ,MUIM_Notify,MUIA_Application_MenuAction,MEN_QUIT ,app     ,2,MUIM_Application_ReturnID ,MUIV_Application_ReturnID_Quit);
  2130.                 DoMethod(app        ,MUIM_Notify,MUIA_Application_MenuAction,MEN_ABOUT,WI_About,3,MUIM_Set                  ,MUIA_Window_Open,TRUE);
  2131.                 DoMethod(WI_About   ,MUIM_Notify,MUIA_Window_CloseRequest   ,TRUE     ,WI_About,3,MUIM_Set                  ,MUIA_Window_Open,FALSE);
  2132.                 DoMethod(WI_HelpFmt ,MUIM_Notify,MUIA_Window_CloseRequest   ,TRUE     ,WI_HelpFmt,3,MUIM_Set                  ,MUIA_Window_Open,FALSE);
  2133.                 DoMethod(WI_HelpClock,MUIM_Notify,MUIA_Window_CloseRequest   ,TRUE     ,WI_HelpClock,3,MUIM_Set                  ,MUIA_Window_Open,FALSE);
  2134.  
  2135.  
  2136.                 DoMethod(window,MUIM_Notify,MUIA_Window_CloseRequest,TRUE, app,2,MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  2137.                 set(window,MUIA_Window_Open,TRUE);
  2138.                 {
  2139.                 ULONG sigs = 0;
  2140.                 while (DoMethod(app,MUIM_Application_NewInput,&sigs) != MUIV_Application_ReturnID_Quit)
  2141.                 {
  2142.                     if (sigs)
  2143.                     {
  2144.                         sigs = Wait(sigs | SIGBREAKF_CTRL_C);
  2145.                         if (sigs & SIGBREAKF_CTRL_C) break;
  2146.                     }
  2147.                 }
  2148.                 }                   
  2149.                 MUI_DisposeObject(app);
  2150.             }
  2151.             ExitLocale();
  2152.  
  2153.             ExitClasses();
  2154.             FreeTestSettings();
  2155.             }
  2156.             if(maindata->set)FreeVec(maindata->set);
  2157.             FreeVec(maindata);
  2158.         }
  2159.         }
  2160.         else MUI_RequestA(NULL,NULL,0,"Early Startup","OK","Stacksize too small!\n\nA minimum of 8192 bytes is needed.",NULL);
  2161.     }
  2162.     CloseLibrary(MUIMasterBase);
  2163.     }
  2164.     quit_not=FALSE;
  2165.     return(0);
  2166. }
  2167.  
  2168. int wbmain(struct WBStartup *wb_startup)
  2169. {
  2170.     return(main(0, (char **)wb_startup));
  2171. }
  2172.  
  2173. ///
  2174.