home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 2 / FFMCD02.bin / new / os20 / util / recall / source / recall.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-21  |  5.9 KB  |  237 lines

  1. /*
  2.  *    File:                    Recall.c
  3.  *    Description:    Runs through a project of events set by it's preferences
  4.  *                                and displays them.
  5.  *    Version:            2.0
  6.  *    Author:                Ketil Hunn
  7.  *    Mail:                    hunn@dhmolde.no
  8.  *                                ketil@lyr.dhmolde.no
  9.  *
  10.  *    Copyright © 1993 Ketil Hunn.  Please read the document for further
  11.  *    information and copyrights.
  12.  *
  13.  *    In order to list the source-files included in this package properly,
  14.  *    the TAB size should be set at 2.
  15.  *
  16.  */
  17.  
  18. #define REQUESTER_TYPE    0
  19. #define    MYALERT_TYPE        1
  20. #define    EXECUTE_TYPE        2
  21.  
  22. #define    ALWAYS                    0
  23. #define    ONCE_A_DAY            1
  24. #define    NEVER                        2
  25.  
  26. #define CALC_YEARS            0
  27. #define CALC_DAYS                1
  28.  
  29. #define GROUP_STAMP            -100
  30.  
  31. char *CatSingleEventTexts(struct EventNode *eventnode, char *text);
  32. char *CatGroupEventsTexts(struct List *list, short type, char *text);
  33. void SetDisplayBits(struct EventNode *eventnode);
  34.  
  35. #include <stdio.h>
  36. #include <libraries/reqtools.h>
  37. #include <intuition/intuition.h>
  38. #include    <exec/alerts.h>
  39.  
  40. #include <exec/types.h>
  41. #include <clib/exec_protos.h>
  42. #include <clib/intuition_protos.h>
  43.  
  44. #include <proto/dos.h>
  45. #include <proto/exec.h>
  46. #include <proto/reqtools.h>
  47.  
  48. struct Library                *IntuitionBase;
  49. struct ReqToolsBase     *ReqToolsBase=NULL;
  50. struct List                        *list=NULL;
  51.  
  52. #include "Version.h"
  53. #include "MyRequest().h"
  54. #include "Config20b.h"
  55. #include "MyAlert().h"
  56. #include "CheckDateTime.h"
  57.  
  58. short reqType=REQTOOLS_TYPE;
  59. char const *version = VERSTR;
  60. ULONG normaltag[]={    RTEZ_ReqTitle, (ULONG)(PROGNAME " " VERSION),
  61.                                         TAG_END};
  62. ULONG centretag[]={    RTEZ_ReqTitle,(ULONG)(PROGNAME " " VERSION),
  63.                                         RT_ReqPos, REQPOS_CENTERSCR,
  64.                                         TAG_END};
  65.  
  66. int main(int argc,char *argv[])
  67. {
  68.     char *text, button[10]="OK";
  69.     short type, retvalue_event, retvalue_alert;
  70.     BOOL    group_event_cancel=FALSE;
  71.     BOOL    group_alert_cancel=FALSE;
  72.     struct Node *node;
  73.     struct EventNode *eventnode;
  74.     char filename[FNSIZE];
  75.     char alertcancel[80]="\n\nLeft mousebutton=OK                         Right mousebutton=Cancel";
  76.  
  77.     if(argc>1)
  78.         strcpy(filename, argv[1]);
  79.     else
  80.         strcpy(filename, PREFSFILE);
  81.  
  82.     if(IntuitionBase=OpenLibrary("intuition.library",37))
  83.     {
  84.         if(list=AllocMem(sizeof(struct List),MEMF_CLEAR))
  85.         {
  86.             NewList(list);
  87.             if(ReadIFF(list, filename))
  88.             {
  89.                 // do not open reqtools.library if not needed
  90.                 if(config.usereqtools)
  91.                     ReqToolsBase=    (struct ReqToolsBase *)OpenLibrary
  92.                                                 (REQTOOLSNAME, REQTOOLSVERSION);
  93.  
  94.                 // Run through the list and mark all events that will be displayed
  95.                 for(every_node)
  96.                 {
  97.                     eventnode=(struct EventNode *)node;
  98.                     if(!(eventnode->show==NEVER | eventnode->datestamp==MakeTime(NULL)))
  99.                         if(CheckDateTime(eventnode))
  100.                             eventnode->display=TRUE;
  101.                 }
  102.  
  103.                 // add a cancel-button to the requester
  104.                 if(config.ack_events)
  105.                     strcpy(button, "  OK  |Cancel");
  106.                 
  107.                 if(text=malloc(2500))
  108.                 {
  109.                     for(every_node)
  110.                     {
  111.                         strcpy(text, "");
  112.                         eventnode=(struct EventNode *)node;
  113.                         type=eventnode->type;
  114.                         if(eventnode->display==TRUE)
  115.                         {
  116.                             if(config.groupevents)
  117.                                 CatGroupEventsTexts(list, eventnode->type, text);
  118.                             else
  119.                                 CatSingleEventTexts(eventnode, text);
  120.                         
  121.                             if(strlen(text))
  122.                             {
  123.                                 if(config.flashscreen)
  124.                                     DisplayBeep(NULL);
  125.  
  126.                                 switch(eventnode->type)
  127.                                 {
  128.                                     case REQUESTER_TYPE:
  129.                                         if(config.usereqtools)
  130.                                         {
  131.                                             if(config.centrerequesters)
  132.                                                 retvalue_event=rtEZRequest(text, button, NULL,
  133.                                                                                                     (struct TagItem *)centretag);
  134.                                             else
  135.                                                 retvalue_event=rtEZRequest(text, button, NULL,
  136.                                                                                                     (struct TagItem *)normaltag);
  137.                                         }
  138.                                         else
  139.                                             retvalue_alert=MyEZRequest(text, button, "");
  140.                                         break;
  141.  
  142.                                     case MYALERT_TYPE:
  143.                                         if(config.ack_alerts)
  144.                                             strcat(text, alertcancel);
  145.                                         retvalue_alert=MyAlert(RECOVERY_ALERT, text);
  146.                                         break;
  147.  
  148.                                     case EXECUTE_TYPE:
  149.                                         System(text, NULL);
  150.                                         break;
  151.                                 }
  152.                             }
  153.                             if(config.ack_events && !retvalue_event &&
  154.                                     eventnode->type==REQUESTER_TYPE)
  155.                                 if(config.groupevents)
  156.                                     group_event_cancel=TRUE;
  157.                                 else
  158.                                     eventnode->datestamp=MakeTime(NULL);
  159.                             if(config.ack_alerts && !retvalue_alert &&
  160.                                     eventnode->type==MYALERT_TYPE)
  161.                                 if(config.groupevents)
  162.                                     group_alert_cancel=TRUE;
  163.                                 else
  164.                                     eventnode->datestamp=MakeTime(NULL);
  165.                          }
  166.                         if(    group_event_cancel && eventnode->datestamp==GROUP_STAMP &&
  167.                                 eventnode->type==REQUESTER_TYPE)
  168.                             eventnode->datestamp=MakeTime(NULL);
  169.                         if(    group_alert_cancel && eventnode->datestamp==GROUP_STAMP &&
  170.                                 eventnode->type==MYALERT_TYPE)
  171.                             eventnode->datestamp=MakeTime(NULL);
  172.                     }
  173.                     free(text);
  174.                     WriteIFF(list, filename);
  175.                 }
  176.             }
  177.             FreeEventList(list);
  178.             FreeMem(list,sizeof(struct List));
  179.         }
  180.         if(ReqToolsBase)
  181.             CloseLibrary((struct Library *)ReqToolsBase);
  182.         CloseLibrary(IntuitionBase);
  183.     }
  184.     exit(0);
  185. }
  186.  
  187. char *CatSingleEventTexts(struct EventNode *eventnode, char *text)
  188. {
  189.     struct List *list=eventnode->textlist;
  190.     struct Node *node;
  191.  
  192.     SetDisplayBits(eventnode);
  193.     for(every_node)
  194.     {
  195.         strcat(text, node->ln_Name);
  196.         if(node!=list->lh_TailPred)
  197.             strcat(text, "\n");
  198.     }
  199.     return CalcField(eventnode, text);
  200. }
  201.  
  202. char *CatGroupEventsTexts(struct List *list, short type, char *text)
  203. {
  204.     struct Node *node;
  205.     struct EventNode *eventnode;
  206.     char   *tmp;
  207.     BOOL   newline=FALSE;
  208.  
  209.     if(tmp=malloc(2500))
  210.     {
  211.         for(every_node)
  212.         {
  213.             eventnode=(struct EventNode *)node;
  214.             if(eventnode->type==type & eventnode->display==TRUE)
  215.             {
  216.                 if(!newline)
  217.                     newline=TRUE;
  218.                 else
  219.                     strcat(text, "\n");
  220.                 strcpy(tmp, "");
  221.                 strcat(text, CatSingleEventTexts(eventnode, tmp));
  222.             }
  223.         }
  224.         free(tmp);
  225.     }
  226.     return text;
  227. }
  228.  
  229. void SetDisplayBits(struct EventNode *eventnode)
  230. {
  231.     eventnode->display=FALSE;
  232.     if(eventnode->show==ONCE_A_DAY)
  233.         eventnode->datestamp=MakeTime(NULL);
  234.     else if(config.groupevents)
  235.         eventnode->datestamp=-100;
  236. }
  237.