home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 4 / FreshFish_May-June1994.bin / bbs / may94 / os20 / util / recall.lha / Recall / Source / RecallPrefs.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-03-05  |  16.4 KB  |  675 lines

  1. /*
  2.  *    File:                    RecallPrefs.c
  3.  *    Description:    Sets the preferences for the ultimate reminder-utility
  4.  *    Version:            2.2
  5.  *    Author:                Ketil Hunn
  6.  *    Mail:                    hunn@dhmolde.no
  7.  *                                ketil@brosme.dhmolde.no
  8.  *
  9.  *    Copyright © 1993-1994 Ketil Hunn.  Please read the document for further
  10.  *    information and copyrights.
  11.  *
  12.  *    In order to list the source-files included in this package properly,
  13.  *    the TAB size should be set at 2.
  14.  *
  15.  */
  16.  
  17. #define    every_node    node=list->lh_Head;node->ln_Succ;node=node->ln_Succ
  18.  
  19. #include <MUI.h>
  20. #include <libraries/locale.h>
  21. #include <clib/locale_protos.h>
  22. #include <pragmas/locale_pragmas.h>
  23. #include <dos/dostags.h>
  24. #include <proto/dos.h>
  25.  
  26. #define  CATCOMP_NUMBERS
  27. #include "RecallPrefs_locale.h"
  28.  
  29. extern struct Library *SysBase;
  30. struct Library    *LocaleBase, *IFFParseBase;
  31. struct Device        *TimerBase;
  32. struct LocaleInfo li;
  33.  
  34. struct EventNode *eventnode, *oldnode;
  35. BOOL addtextflag=FALSE;
  36.  
  37. #include "Prototypes.h"
  38. #include "Version.h"
  39. #include "Escapes.h"
  40. #include "Id.h"
  41. #include "Exists().h"
  42. #include "IFFconfig.h"
  43. #include "GUI_Preferences.h"
  44. #include "MakeDate().h"
  45. #include "MUI_lists.h"
  46. #include "GetWinPtr().h"
  47. #include "GetFile().h"
  48. #include "Execute().h"
  49.  
  50. #define LOAD_ASCII                            0
  51. #define LOAD_V1X                                1
  52. #define LOAD_V20                                2
  53.  
  54. #define SAVE_ASCII                            0
  55. #define    SAVE_V20                                1
  56.  
  57. void __main(char *stop_racism__we_are_all_created_equal)
  58. {
  59.     ULONG    id, signals, number;
  60.     BOOL    running    =TRUE, saved=TRUE;
  61.     char    *string, filename[FMSIZE]=PREFSFILE;
  62.  
  63.     if(IFFParseBase=OpenLibrary("iffparse.library", LIBVER))
  64.     {
  65.         li.li_Catalog=NULL;
  66.         if(LocaleBase=OpenLibrary("locale.library", 38))
  67.         {
  68.             li.li_LocaleBase = LocaleBase;
  69.             li.li_Catalog    = OpenCatalogA(NULL,"Recall/RecallPrefs.catalog",NULL);
  70.         }
  71.  
  72.         app=SetupGUI();
  73.         ReadIFF(eventlist, PREFSFILE);
  74.         if(DoMethod(window,MUIM_Window_GetMenuCheck, ID_AUTOOPEN_CALENDAR))
  75.             set(editwin, MUIA_Window_Open, TRUE);
  76.         if(config.autodelete)
  77.             PurgeEvents(eventlist);
  78.     
  79.         while(running)
  80.         {
  81.             id=DoMethod(app,MUIM_Application_Input,&signals);
  82.             switch(id)
  83.             {
  84.                 case ID_SAVE_QUIT:
  85.                     WriteIFF(eventlist, PREFSFILE);
  86.                     saved=TRUE;
  87.                 case MUIV_Application_ReturnID_Quit:
  88.                 case ID_CANCEL:
  89.                     if(CheckConfirm(saved))
  90.                         running = FALSE;
  91.                     break;
  92.     
  93.                 case ID_TEST:
  94.                     if(ExistsProg(PROGDIR PROGNAME))
  95.                     {
  96.                         WriteIFF(eventlist, TESTFILE);
  97. //                        Execute(PROGDIR PROGNAME " " TESTFILE ,NULL,NULL);
  98.                         execute(PROGDIR PROGNAME " " TESTFILE);
  99.                     }
  100.                     break;
  101.     
  102.                 case ID_ABOUT:
  103.                     {
  104.                         char count[80];
  105.                         sprintf(count, GetString(&li, MSG_PROJECTINFO), Count(eventlist));
  106.                         MUI_Request(app, window, 0, NULL, "*OK",
  107.                                                 aCENTRE aLIGHT
  108.                                                 PROGNAME " " VERSION " " COPYRIGHT ".\n"
  109.                                                 "%s\n\n" aNORMAL aDARK
  110.                                                 "%s\n\n"
  111.                                                 "%s\n"
  112.                                                 "%s\n\n"
  113.                                                 "%s\n\n"
  114.                                                 "%s Public Domain\n\n"
  115.                                                 "%s " CURRENT_DATE,
  116.                                                 GetString(&li, MSG_BIGTALK),
  117.                                                 count,
  118.                                                 GetString(&li, MSG_LANGUAGE),
  119.                                                 GetString(&li, MSG_TRANSLATOR),
  120.                                                 GetString(&li, MSG_ABOUTHELP),
  121.                                                 GetString(&li, MSG_PUBLICDOMAIN),
  122.                                                 GetString(&li, MSG_COMPILED));
  123.                     }
  124.                     break;
  125.     
  126.                 case ID_ICONIFY:
  127.                     set(app,MUIA_Application_Iconified, TRUE);
  128.                     break;
  129.     
  130.                 case ID_ACTIVATE_EVENTSTRING:
  131.                     addtextflag=FALSE;
  132.                     set(eventlist,   MUIA_List_Active, MUIV_List_Active_Off);
  133.                     eventnode=NULL;
  134.                     ShowGadgets();
  135.                     set(eventstring, MUIA_Disabled, FALSE);
  136.                     set(window,      MUIA_Window_ActiveObject, eventstring);
  137.                     olddays=-1;
  138.                     break;
  139.     
  140.                 case ID_ADDEVENT:
  141.                     get(eventstring,MUIA_String_Contents, &string);
  142.                     if(eventnode==NULL)
  143.                     {
  144.                         eventnode=AddEvent(eventlist, string);
  145.                         ZeroDateTime(eventnode);
  146.                         UpdateData(eventnode, FALSE);
  147.                         set(eventlist,    MUIA_List_Active, MUIV_List_Active_Bottom);
  148.                     }
  149.                     else
  150.                     {
  151.                         strcpy(eventnode->name, string);
  152.                         DoMethod(eventlist, MUIM_List_Redraw, MUIV_List_Redraw_All);
  153.                     }
  154.                     ShowGadgets();
  155.                     saved=FALSE;
  156.                     break;
  157.     
  158.                 case ID_ACTIVATE_TEXTSTRING:
  159.                     set(textlist,        MUIA_List_Active, MUIV_List_Active_Off);
  160.                     set(textstring, MUIA_String_Contents, "");
  161.                     set(textstring, MUIA_Disabled, FALSE);
  162.                     set(window,            MUIA_Window_ActiveObject, textstring);
  163.                     if(eventnode->type==EXECUTE)
  164.                         set(getfile, MUIA_Disabled, FALSE);
  165.                     addtextflag=TRUE;
  166.                     break;
  167.     
  168.                 case ID_ADDTEXT:
  169.                     get(textstring,MUIA_String_Contents, &string);
  170.                     if(Active(textlist)==-1)
  171.                     {
  172.                         DoMethod(textlist, MUIM_List_Insert, &string, 1, MUIV_List_Insert_Bottom);
  173.                         AddText(eventnode->textlist, string, MUIV_List_Insert_Bottom);
  174.                         set(textlist,    MUIA_List_Active, MUIV_List_Active_Bottom);
  175.                     }
  176.                     else
  177.                     {
  178.                         number=Active(textlist);
  179.                         set(textlist, MUIA_List_Quiet, TRUE);
  180.                         DoMethod(textlist, MUIM_List_Remove, number);
  181.                         DoMethod(textlist, MUIM_List_Insert, &string, 1, number);
  182.                         set(textlist,    MUIA_List_Active, number);
  183.                         set(textlist, MUIA_List_Quiet, FALSE);
  184.                         UpdateTextList(textlist, eventnode->textlist);
  185.                     }
  186.                     saved=FALSE;
  187.                     break;
  188.     
  189.                 case ID_PURGEEVENT:
  190.                     if(CheckConfirm(saved))
  191.                     {
  192.                         PurgeEvents(eventlist);
  193.                         saved=FALSE;
  194.                     }
  195.                     break;
  196.     
  197.                 case ID_DELETEEVENT:
  198.                     DeleteEvent(eventlist,Active(eventlist));
  199.                     ShowGadgets();
  200.                     saved=FALSE;
  201.                     break;
  202.     
  203.                 case ID_MONTH:
  204.                     get(month, MUIA_Cycle_Active, &number);
  205.                     if(eventnode!=NULL)
  206.                     {
  207.                         short max=ShowDays(eventnode->month=number);
  208.                         eventnode->day=(eventnode->day<max ? eventnode->day : max);
  209.                         SetWhenString(eventnode);
  210.                         ShowBoolGadget(eventnode->day);
  211.                         saved=FALSE;
  212.                     }
  213.                     break;
  214.     
  215.                 case ID_YEAR:
  216.                     if(eventnode!=NULL)
  217.                     {
  218.                         get(year, MUIA_String_Integer, &eventnode->year);
  219.                         SetWhenString(eventnode);
  220.                         saved=FALSE;
  221.                     }
  222.                     break;
  223.     
  224.                 case ID_DAYS:
  225.                     if(eventnode!=NULL)
  226.                     {
  227.                         get(days, MUIA_String_Integer, &eventnode->days);
  228.                         SetWhenString(eventnode);
  229.                         saved=FALSE;
  230.                     }
  231.                     break;
  232.     
  233.                 case ID_REPEAT:
  234.                     if(eventnode!=NULL)
  235.                     {
  236.                         get(repeat, MUIA_String_Integer, &eventnode->repeat);
  237.                         SetWhenString(eventnode);
  238.                         saved=FALSE;
  239.                     }
  240.                     break;
  241.     
  242.                 case ID_DELETETEXT:
  243.                     DeleteText(eventnode->textlist, Active(textlist));
  244.                     DoMethod(textlist, MUIM_List_Remove, MUIV_List_Remove_Active);
  245.                     addtextflag=FALSE;
  246.                     ShowGadgets();
  247.                     saved=FALSE;
  248.                     break;
  249.     
  250.                 case ID_EVENTUP:
  251.                     Up(eventlist);
  252.                     saved=FALSE;
  253.                     break;
  254.     
  255.                 case ID_TEXTUP:
  256.                     Up(textlist);
  257.                     UpdateTextList(textlist, eventnode->textlist);
  258.                     saved=FALSE;
  259.                     break;
  260.     
  261.                 case ID_EVENTDOWN:
  262.                     Down(eventlist);
  263.                     saved=FALSE;
  264.                     break;
  265.     
  266.                 case ID_TEXTDOWN:
  267.                     Down(textlist);
  268.                     UpdateTextList(textlist, eventnode->textlist);
  269.                     saved=FALSE;
  270.                     break;
  271.     
  272.                 case ID_EVENTTOP:
  273.                     Top(eventlist);
  274.                     saved=FALSE;
  275.                     break;
  276.     
  277.                 case ID_EVENTBOTTOM:
  278.                     Bottom(eventlist);
  279.                     saved=FALSE;
  280.                     break;
  281.     
  282.                 case ID_SORTEVENT:
  283.                     if(DoMethod(window,MUIM_Window_GetMenuCheck,ID_SORTBY_NAME))
  284.                         DoMethod(eventlist, MUIM_List_Sort);
  285.                     else
  286.                         SortByDate(eventlist);
  287.                     DoMethod(eventlist, MUIM_List_GetEntry,
  288.                                                             MUIV_List_GetEntry_Active, &eventnode);
  289.                     UpdateData(eventnode, TRUE);
  290.                     saved=FALSE;
  291.                     break;
  292.     
  293.                 case ID_SORTTEXT:
  294.                     set(textlist, MUIA_List_Quiet, TRUE);
  295.                     DoMethod(textlist, MUIM_List_Sort);
  296.                     UpdateTextList(textlist, eventnode->textlist);
  297.                     set(textlist, MUIA_List_Quiet, FALSE);
  298.                     saved=FALSE;
  299.                     break;
  300.     
  301.                 case ID_COPYEVENT:
  302.                     eventnode=CopyEvent(eventlist);
  303.                     set(window, MUIA_Window_ActiveObject, eventstring);
  304.                     saved=FALSE;
  305.                     break;
  306.     
  307.                 case ID_COPYTEXT:
  308.                     DoMethod(    textlist, MUIM_List_GetEntry,
  309.                                         MUIV_List_GetEntry_Active, &string);
  310.                     DoMethod(textlist, MUIM_List_Insert, &string, 1, Active(textlist)+1);
  311.                     AddText(eventnode->textlist, string, Active(textlist));
  312.                     set(textlist,    MUIA_List_Active, Active(textlist)+1);
  313.                     saved=FALSE;
  314.                     break;
  315.     
  316.                 case ID_WHENDATE:
  317.                     if(eventnode!=NULL)
  318.                     {
  319.                         get(whendate, MUIA_Cycle_Active, &number);
  320.                         eventnode->whendate=number;
  321.                         SetWhenString(eventnode);
  322.                         saved=FALSE;
  323.                     }
  324.                     break;
  325.     
  326.                 case ID_WHENTIME:
  327.                     if(eventnode!=NULL)
  328.                     {
  329.                         get(whentime, MUIA_Cycle_Active, &number);
  330.                         eventnode->whentime=number;
  331.                         SetWhenString(eventnode);
  332.                         saved=FALSE;
  333.                     }
  334.                     break;
  335.     
  336.                 case ID_TYPE:
  337.                     if(eventnode!=NULL)
  338.                     {
  339.                         get(type, MUIA_Cycle_Active, &number);
  340.                         eventnode->type=number;
  341.                         if(Active(textlist)!=-1 && eventnode->type==2)
  342.                             set(getfile,    MUIA_Disabled, FALSE);
  343.                         else
  344.                             set(getfile,    MUIA_Disabled, TRUE);
  345.                         saved=FALSE;
  346.                     }
  347.                     break;
  348.     
  349.                 case ID_SHOW:
  350.                     get(show, MUIA_Cycle_Active, &number);
  351.                     eventnode->show=number;
  352.                     eventnode->datestamp=0;
  353.                     saved=FALSE;
  354.                     break;
  355.     
  356.                 case ID_CALC:
  357.                     if(eventnode!=NULL)
  358.                     {
  359.                         get(calc, MUIA_Cycle_Active, &number);
  360.                         eventnode->calc=number;
  361.                         saved=FALSE;
  362.                     }
  363.                     break;
  364.     
  365.                 case ID_EVENTLIST:
  366.                     DoMethod(    eventlist, MUIM_List_GetEntry,
  367.                                         MUIV_List_GetEntry_Active, &eventnode);
  368.                     if(eventnode!=NULL & eventnode!=oldnode)
  369.                         UpdateData(eventnode, TRUE);
  370.                     oldnode=eventnode;
  371.                     SetWhenString(eventnode);
  372.                     ShowGadgets();
  373.                     addtextflag=FALSE;
  374.                     break;
  375.     
  376.                 case ID_TEXTLIST:
  377.                     DoMethod(    textlist, MUIM_List_GetEntry,
  378.                                         MUIV_List_GetEntry_Active, &string);
  379.                     set(textstring, MUIA_String_Contents, string);
  380.                     ShowGadgets();
  381.                     break;
  382.     
  383.                 case ID_EDITCLEAR:
  384.                     ZeroDateTime(eventnode);
  385.                     eventnode->whendate=eventnode->whentime=0;
  386.                     UpdateData(eventnode, FALSE);
  387.                     saved=FALSE;
  388.                     break;
  389.     
  390.                 case ID_EDITNOW: 
  391.                     CurrentDateTime(eventnode);
  392.                     UpdateData(eventnode, FALSE);
  393.                     saved=FALSE;
  394.                     break;
  395.     
  396.                 case ID_EDIT:
  397.                     set(editwin,MUIA_Window_Open, TRUE);
  398.                     UpdateData(eventnode, FALSE);
  399.                     break;
  400.     
  401.                 case ID_EDITCLOSE:
  402.                     set(editwin, MUIA_Window_Open, FALSE);
  403.                     break;
  404.     
  405.                 case ID_HOUR:
  406.                     if(eventnode!=NULL)
  407.                     {
  408.                         get(hour, MUIA_Prop_First, &number);
  409.                         eventnode->hour=23-number;
  410.                         SetWhenString(eventnode);
  411.                         saved=FALSE;
  412.                     }
  413.                     break;
  414.     
  415.                 case ID_MINUTES:
  416.                     if(eventnode!=NULL)
  417.                     {
  418.                         get(minutes, MUIA_Prop_First, &number);
  419.                         eventnode->minutes=59-number;
  420.                         SetWhenString(eventnode);
  421.                         saved=FALSE;
  422.                     }
  423.                     break;
  424.     
  425.                 case ID_DAY1:        case ID_DAY2:        case ID_DAY3:        case ID_DAY4:
  426.                 case ID_DAY5:        case ID_DAY6:        case ID_DAY7:        case ID_DAY8:
  427.                 case ID_DAY9:        case ID_DAY10:    case ID_DAY11:    case ID_DAY12:
  428.                 case ID_DAY13:    case ID_DAY14:    case ID_DAY15:    case ID_DAY16:
  429.                 case ID_DAY17:    case ID_DAY18:    case ID_DAY19:    case ID_DAY20:
  430.                 case ID_DAY21:    case ID_DAY22:    case ID_DAY23:    case ID_DAY24:
  431.                 case ID_DAY25:    case ID_DAY26:    case ID_DAY27:    case ID_DAY28:
  432.                 case ID_DAY29:    case ID_DAY30:    case ID_DAY31:    case ID_DAY0:
  433.                     if(eventnode!=NULL)
  434.                     {
  435.     //printf("day\n");
  436.                         ShowBoolGadget(eventnode->day=id-100);
  437.                         SetWhenString(eventnode);
  438.                         saved=FALSE;
  439.                     }
  440.                     break;
  441.     
  442.                 case ID_GETFILE:
  443.                     {
  444.                         char string[FNSIZE], *p=string;
  445.                         get(textstring, MUIA_String_Contents, &p);
  446.                         if(GetFile(    GetWinPtr(window),
  447.                                                 GetString(&li, MSG_SELECTCOMMAND),
  448.                                                 p,""))
  449.                             set(textstring, MUIA_String_Contents, p);
  450.                         set(window, MUIA_Window_ActiveObject, textstring);
  451.                     }
  452.                     break;
  453.     
  454.                 /* parsing the menus */
  455.                 case ID_NEW:
  456.                     if(CheckConfirm(saved))
  457.                     {
  458.                         set(window, MUIA_Window_Sleep, TRUE);
  459.                         FreeEventList();
  460.                         ShowGadgets();
  461.                         set(window, MUIA_Window_Sleep, FALSE);
  462.                         saved=TRUE;
  463.                     }
  464.                     break;
  465.     
  466.                 case ID_OPEN:
  467.                     if(CheckConfirm(saved))
  468.                         if(GetFile(    GetWinPtr(window),
  469.                                                 GetString(&li, MSG_OPENREQ),
  470.                                                 filename,
  471.                                                 ""))
  472.                         {
  473.                             set(eventlist, MUIA_List_Quiet, TRUE);
  474.                             FreeEventList();
  475.                             ReadIFF(eventlist, filename);
  476.                             set(eventlist, MUIA_List_Quiet, FALSE);
  477.                             saved=TRUE;
  478.                         }
  479.                     break;
  480.     
  481.                 case ID_MERGE:
  482.                     if(GetFile(    GetWinPtr(window),
  483.                                             GetString(&li, MSG_MERGEREQ),
  484.                                             filename,
  485.                                             ""))
  486.                     {
  487.                         ReadIFF(eventlist, filename);
  488.                         saved=FALSE;
  489.                     }
  490.                     break;
  491.     
  492.                 case ID_SAVE:
  493.                     if(WriteIFF(eventlist, PREFSFILE))
  494.                         saved=TRUE;
  495.                     break;
  496.     
  497.                 case ID_SAVE_AS:
  498.                     if(GetFile(    GetWinPtr(window),
  499.                                             GetString(&li, MSG_SAVEASREQ),
  500.                                             filename,
  501.                                             ""))
  502.                     {
  503.                         WriteIFF(eventlist, filename);
  504.                         saved=TRUE;
  505.                     }
  506.                     break;
  507.     
  508.                 case ID_CONVERTER:
  509.                     set(window, MUIA_Window_Sleep, TRUE);
  510.                     if(Exists(CONVDIR CONVERTERNAME))
  511.                         execute("RUN >NIL: " CONVDIR CONVERTERNAME);
  512.                     else
  513.                         MUI_Request(app, window, 0, NULL,
  514.                                                 "*OK", GetString(&li, MSG_COULDNOTFIND),CONVDIR CONVERTERNAME);
  515.                     set(window, MUIA_Window_Sleep, FALSE);
  516.                     break;
  517.     
  518.                 case ID_IMPORT_ASCII:
  519.                     if(ExistsProg(CONVDIR CONVERTERNAME))
  520.                         if(GetFile(    GetWinPtr(window),
  521.                                                 GetString(&li, MSG_IMPORTREQ),
  522.                                                 filename,
  523.                                                 ""))
  524.                         {
  525.                             ConverterArgs(LOAD_ASCII, filename, SAVE_V20, TESTFILE);
  526.                             FreeEventList();
  527.                             ReadIFF(eventlist, TESTFILE);
  528.                         }
  529.                     break;
  530.     
  531.                 case ID_IMPORT_V14:
  532.                     if(ExistsProg(CONVDIR CONVERTERNAME))
  533.                         if(GetFile(    GetWinPtr(window),
  534.                                                 GetString(&li, MSG_IMPORTREQ),
  535.                                                 filename,
  536.                                                 ""))
  537.                         {
  538.                             ConverterArgs(LOAD_V1X, filename, SAVE_V20, TESTFILE);
  539.                             FreeEventList();
  540.                             ReadIFF(eventlist, TESTFILE);
  541.                         }
  542.                     break;
  543.     
  544.                 case ID_EXPORT_ASCII:
  545.                     if(ExistsProg(CONVDIR CONVERTERNAME))
  546.                         if(GetFile(    GetWinPtr(window),
  547.                                                 GetString(&li, MSG_EXPORTREQ),
  548.                                                 filename,
  549.                                                 ""))
  550.                         {
  551.                             WriteIFF(eventlist, TESTFILE);
  552.                             ConverterArgs(LOAD_V20, TESTFILE, SAVE_ASCII, filename);
  553.                         }
  554.                     break;
  555.     
  556.                 case ID_LAST_SAVED:
  557.                     if(CheckConfirm(saved))
  558.                     {
  559.                         FreeEventList();
  560.                         ReadIFF(eventlist, PREFSFILE);
  561.                         saved=TRUE;
  562.                     }
  563.                     break;
  564.     
  565.                 case ID_REQTOOLS:
  566.                 if(DoMethod(window, MUIM_Window_GetMenuCheck, ID_REQTOOLS))
  567.                     DoMethod(app, MUIM_Application_SetMenuState, ID_CENTRE_REQUESTERS, TRUE);
  568.                 else
  569.                     DoMethod(app, MUIM_Application_SetMenuState, ID_CENTRE_REQUESTERS, FALSE);
  570.             }
  571.             if(running && signals)
  572.                 Wait(signals);
  573.         }
  574.         set(window,MUIA_Window_Open,FALSE);
  575.         if(aslreq)
  576.             MUI_FreeAslRequest(aslreq);
  577.         FreeEventList();
  578.         DeleteFile(TESTFILE);
  579.         fail(app,NULL);
  580.  
  581.         if(LocaleBase)
  582.         {
  583.             CloseCatalog(li.li_Catalog);
  584.             CloseLibrary(LocaleBase);
  585.         }
  586.         CloseLibrary(IFFParseBase);
  587.     }
  588. }
  589.  
  590. BOOL CheckConfirm(BOOL saved)
  591. {
  592.     char butts[80]="*OK|";
  593.     
  594.     strcat(butts, GetString(&li, MSG_CANCEL));
  595.     if(DoMethod(window,MUIM_Window_GetMenuCheck,ID_CONFIRM) & !saved)
  596.         return (BOOL)MUI_Request(    app, window, 0, NULL, butts,
  597.                                                             GetString(&li, MSG_CONFIRM));
  598.     else
  599.         return TRUE;
  600. }
  601.  
  602. void PurgeEvents(Object *list)
  603. {
  604.     struct Library            *UtilityBase;
  605.     struct timerequest    timereq, *tr=&timereq;
  606.     struct EventNode        *eventnode;
  607.     ULONG                                datenow, eventdate, pos=0;
  608.     BOOL                                remove;
  609.  
  610.     if(UtilityBase=OpenLibrary("utility.library", LIBVER))
  611.     {
  612.         if(!(OpenDevice("timer.device", UNIT_VBLANK, (struct IORequest *)tr, 0)))
  613.         {
  614.             TimerBase=tr->tr_node.io_Device;
  615.             set(window, MUIA_Window_Sleep, TRUE);
  616.             set(list, MUIA_List_Quiet, TRUE);
  617.  
  618.             datenow=NewMakeDate(NULL);
  619.             while(TRUE)
  620.             {
  621.                 remove=FALSE;
  622.                 DoMethod(list, MUIM_List_GetEntry, pos, &eventnode);
  623.                 if(eventnode==NULL)
  624.                     break;
  625.                 eventdate=NewMakeDate(eventnode);
  626.  
  627.                 switch(eventnode->whendate)
  628.                 {
  629.                     case EXACT:
  630.                         if(datenow>eventdate & (eventnode->year>0 & eventnode->month>0))
  631.                             remove=TRUE;
  632.                         break;
  633.  
  634.                     case BEFORE:
  635.                         if(datenow>=eventdate & (eventnode->year>0 & eventnode->month>0))
  636.                             remove=TRUE;
  637.                         break;
  638.  
  639.                     case AFTER:
  640.                         if(eventnode->days>0 & datenow>eventdate+86400*eventnode->days)
  641.                             remove=TRUE;
  642.                         break;
  643.                 }
  644.                 if(remove)
  645.                     DeleteEvent(list, pos);
  646.                 else
  647.                     pos++;
  648.             }
  649.             set(list, MUIA_List_Quiet, FALSE);
  650.             set(window, MUIA_Window_Sleep, FALSE);
  651.             CloseDevice((struct IORequest *)tr);
  652.         }
  653.         CloseLibrary(UtilityBase);
  654.     }
  655. }
  656.  
  657. void ConverterArgs(    short intype,  char source[FNSIZE],
  658.                                         short outtype, char dest[FNSIZE])
  659. {
  660.     char args[FNSIZE];
  661.     sprintf(args, "%s %ld \"%s\" %ld \"%s\"", CONVDIR CONVERTERNAME, (long)intype, source, (long)outtype, dest);
  662.     execute(args);
  663. }
  664.  
  665. BOOL ExistsProg(char *prog)
  666. {
  667.     if(Exists(prog))
  668.         return TRUE;
  669.     else
  670.     {
  671.         MUI_Request(app, window, 0, NULL, "*OK",
  672.                                 GetString(&li, MSG_COULDNOTFIND), prog);
  673.         return FALSE;
  674.     }
  675. }