home *** CD-ROM | disk | FTP | other *** search
/ YPA: Your Privacy Assured / YPA.ISO / other_goodies / utilities / memomaster.lha / MM2.1 / source / deledadd.c < prev    next >
C/C++ Source or Header  |  1994-09-12  |  12KB  |  431 lines

  1. #include <intuition/intuition.h>
  2. #include <intuition/intuitionbase.h>
  3. #include <ctype.h>
  4. #include <lists.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <exec/nodes.h>
  9. #include <exec/lists.h>
  10. #include <exec/memory.h>
  11.  
  12. #include "mm2.h"
  13.  
  14. /* Prototypes */
  15.  
  16. Prototype BOOL Edit(void);
  17. Prototype BOOL Add(void);
  18. Prototype BOOL Del(void);
  19. Prototype BOOL MemIns(struct MI_Mem *);
  20. Prototype BOOL MemoReq(struct Memo_Item *);
  21. Prototype BOOL MemoDel(struct MI_Mem *);
  22. Prototype void ClearWaitPointer(struct Window *);
  23. Prototype void SetWaitPointer(struct Window *);
  24. Prototype void DisableGadgets(void);
  25. Prototype void EnableGadgets(void);
  26.  
  27. extern struct MinList *MemListPtr;
  28. extern struct MinNode *DisplayFirst;
  29. extern struct Remember *RK;
  30. extern struct IntuitionBase *IntuitionBase;
  31.  
  32. BOOL DataAmended = FALSE;
  33. BOOL memostate = 0;
  34.  
  35. extern struct IntuitionBase *IntuitionBase;
  36. extern void Display_Block(struct MinNode *);
  37.  
  38. __chip const UWORD waitspritedata[36] = {
  39.     0x0000, 0x0000,
  40.  
  41.     0x0400, 0x07C0,
  42.     0x0000, 0x07C0,
  43.     0x0100, 0x0380,
  44.     0x0000, 0x07E0,
  45.     0x07C0, 0x1FF8,
  46.     0x1FF0, 0x3FEC,
  47.     0x3FF8, 0x7FDE,
  48.     0x3FF8, 0x7FBE,
  49.     0x7FFC, 0xFF7F,
  50.     0x7FFC, 0xFEFF,
  51.     0x7FFC, 0xFFFF,
  52.     0x3FF8, 0x7FFE,
  53.     0x3FF8, 0x7FFE,
  54.     0x1FF0, 0x3FFC,
  55.     0x07C0, 0x1FF8,
  56.     0x0000, 0x07E0,
  57.  
  58.     0x0000, 0x0000};
  59.  
  60. /*--------------------------------------------------------------------------
  61.  * Function Edit() calls MemoReq() for each selected memo in the list. Prior
  62.  *  to the call, Edit() sets up the current field values in a Memo_Item
  63.  *  structure. Returns TRUE if no errors found, otherwise FALSE. (Actually,
  64.  *  it currently returns TRUE under all circumstances.
  65.  */
  66. BOOL Edit()
  67.   {
  68.   struct Memo_Item m;
  69.   struct MinNode *n;
  70.   BOOL result;
  71.  
  72.  
  73.   if (LISTEMPTY) return TRUE;
  74.   n=MemListPtr->mlh_Head;
  75.   while (n->mln_Succ)
  76.     {
  77.     if ( ((struct MI_Mem *)n)->mim_Select == 1)
  78.       {
  79.       strcpy(m.mi_Date , ((struct MI_Mem *)n)->mim_MI.mi_Date);
  80.       strcpy(m.mi_Notice , ((struct MI_Mem *)n)->mim_MI.mi_Notice);
  81.       strcpy(m.mi_Type , ((struct MI_Mem *)n)->mim_MI.mi_Type);
  82.       strcpy(m.mi_Text , ((struct MI_Mem *)n)->mim_MI.mi_Text);
  83.       result = MemoReq(&m);
  84.       if (result)
  85.     {
  86.     strcpy( ((struct MI_Mem *)n)->mim_MI.mi_Date, m.mi_Date);
  87.     strcpy( ((struct MI_Mem *)n)->mim_MI.mi_Notice, m.mi_Notice);
  88.     strcpy( ((struct MI_Mem *)n)->mim_MI.mi_Type, m.mi_Type);
  89.     strcpy( ((struct MI_Mem *)n)->mim_MI.mi_Text, m.mi_Text);
  90.     Remove((struct List *)n);
  91.     MemIns((struct MI_Mem *)n);
  92.     DataAmended=TRUE;
  93.     }
  94.       }
  95.     ((struct MI_Mem *)n)->mim_Select=0;
  96.     n=n->mln_Succ;
  97.     }
  98.   Display_Block(DisplayFirst);
  99.   return TRUE;
  100.   }
  101.  
  102. /*--------------------------------------------------------------------------
  103.  * Function Add() calls MemoReq() to get data for new memo.
  104.  *  Returns TRUE if no errors found, otherwise FALSE. (Actually,
  105.  *  it currently returns TRUE under all circumstances.
  106.  */
  107. BOOL Add()
  108.   {
  109.   struct Memo_Item m;
  110.   struct MI_Mem *mim;
  111.   BOOL result;
  112.  
  113.   m.mi_Date[0]='\0';
  114.   m.mi_Notice[0]='\0';
  115.   m.mi_Type[0]='\0';
  116.   m.mi_Text[0]='\0';
  117.   result=MemoReq(&m);
  118.   if (result)
  119.     {
  120.     mim=(struct MI_Mem *)AllocRemember(&RK,sizeof(struct MI_Mem),MEMF_PUBLIC);
  121.     if (!mim) return FALSE;
  122.     strcpy( mim->mim_MI.mi_Date, m.mi_Date);
  123.     strcpy( mim->mim_MI.mi_Notice, m.mi_Notice);
  124.     strcpy( mim->mim_MI.mi_Type, m.mi_Type);
  125.     strcpy( mim->mim_MI.mi_Text, m.mi_Text);
  126.     mim->mim_Select=0;
  127.     result=MemIns(mim);
  128.     if (!result) return FALSE;
  129.     DisplayFirst = (struct MinNode *)mim;
  130.     Display_Block(DisplayFirst);
  131.     DataAmended=TRUE;
  132.     }
  133.   return (TRUE);
  134.   }
  135.  
  136. /*--------------------------------------------------------------------------
  137.  * Function Del() reads through Memo list and, with the confirmation of the
  138.  *  user, deletes selected memos. The memos are actually just removed from
  139.  *  the list, the memory is not released until the program terminates. (Later
  140.  *  deleted memos could be organised as a separate list and a process made
  141.  *  available for the user to change his/her mind and reinsert any memos?)
  142.  *  Returns TRUE if no errors found, otherwise FALSE. (Actually,
  143.  *  it currently returns TRUE under all circumstances.
  144.  */
  145. BOOL Del()
  146.   {
  147.   struct MinNode *n;
  148.   int result;
  149.  
  150.  
  151.   if (LISTEMPTY) return TRUE;
  152.   n=MemListPtr->mlh_Head;
  153.   while (n->mln_Succ)
  154.     {
  155.     if ( ((struct MI_Mem *)n)->mim_Select == 1)
  156.       {
  157.       result = MemoDel((struct MI_Mem *)n);
  158.       if (result == 1)
  159.     {
  160.     Remove((struct Node *)n);
  161.     DataAmended=TRUE;
  162.     if ( n = DisplayFirst)
  163.       {
  164.       if (LISTEMPTY)
  165.         DisplayFirst = NULL;
  166.       else
  167.         DisplayFirst = MemListPtr->mlh_Head;
  168.       }
  169.     Display_Block(DisplayFirst);
  170.     }
  171.       }
  172.     n=n->mln_Succ;
  173.     }
  174.   return TRUE;
  175.   }
  176.  
  177. /*--------------------------------------------------------------------------
  178.  * Function MemIns() allocates a new MI_Mem structure in memory, copies
  179.  *  data into it from a Memo_Item structure whose address was given as a
  180.  *  parameter and then returns TRUE if no errors found, otherwise FALSE.
  181.  */
  182. BOOL MemIns(struct MI_Mem *m)
  183.   {
  184.   char d1[5],d2[5];
  185.   struct MinNode *n;
  186.   BOOL found;
  187.   int cmp,mnum;
  188.  
  189.   if (LISTEMPTY)
  190.     {
  191.     AddHead((struct List *)MemListPtr,(struct Node *)m);
  192.     }
  193.   else
  194.     {
  195.     mnum = Month2Num((char *)&(m->mim_MI.mi_Date[3]));
  196.     sprintf(d1, "%02d", mnum);
  197.     d1[2]=m->mim_MI.mi_Date[0];
  198.     d1[3]=m->mim_MI.mi_Date[1];
  199.     d1[4]='\0';
  200.     n=MemListPtr->mlh_Head;
  201.     found=FALSE;
  202.     while ( (!found) && (n->mln_Succ) )
  203.       {
  204.       mnum = Month2Num((char *)&(((struct MI_Mem *)n)->mim_MI.mi_Date[3]));
  205.       sprintf(d2, "%02d", mnum);
  206.       d2[2]=((struct MI_Mem *)n)->mim_MI.mi_Date[0];
  207.       d2[3]=((struct MI_Mem *)n)->mim_MI.mi_Date[1];
  208.       d2[4]='\0';
  209.       cmp=strcmp(d1,d2);
  210.       if ( cmp > 0 )
  211.     {
  212.     n=n->mln_Succ;
  213.     }
  214.       else
  215.     {
  216.     Insert( (struct List *)MemListPtr,(struct Node *)m,(struct Node *)n->mln_Pred);
  217.     found=TRUE;
  218.     }
  219.       }
  220.       if (!found) AddTail( (struct List *)MemListPtr, (struct Node *)m );
  221.     }
  222.   return TRUE;
  223.   }
  224.  
  225. /* -------------------------------------------------------------------
  226.  *    Function handling Requester allowing addition of new memos and
  227.  *    editing of existing ones
  228.  */
  229. BOOL MemoReq(struct Memo_Item *mim)
  230. {
  231.   BOOL finished = FALSE;
  232.   BOOL ret = FALSE;
  233.   ULONG SignalMask,Signal;
  234.   struct StringInfo *strinfo;
  235.  
  236.   SetWaitPointer(mm_w);
  237.   DisableGadgets();
  238.  
  239.   if (!OpenEditWindow())
  240.   {
  241.     strinfo = EditGadgets[GDX_DateGad]->SpecialInfo;
  242.     strcpy(strinfo->Buffer,mim->mi_Date);
  243.     GT_SetGadgetAttrs(EditGadgets[GDX_DateGad],EditWnd,0,
  244.               GTST_String, strinfo->Buffer,
  245.               TAG_DONE);
  246.     strinfo = EditGadgets[GDX_NoticeGad]->SpecialInfo;
  247.     strcpy(strinfo->Buffer,mim->mi_Notice);
  248.     GT_SetGadgetAttrs(EditGadgets[GDX_NoticeGad],EditWnd,0,
  249.               GTST_String, strinfo->Buffer,
  250.               TAG_DONE);
  251.     strinfo = EditGadgets[GDX_TypeGad]->SpecialInfo;
  252.     strcpy(strinfo->Buffer,mim->mi_Type);
  253.     GT_SetGadgetAttrs(EditGadgets[GDX_TypeGad],EditWnd,0,
  254.               GTST_String, strinfo->Buffer,
  255.               TAG_DONE);
  256.     strinfo = EditGadgets[GDX_MemoGad]->SpecialInfo;
  257.     strcpy(strinfo->Buffer,mim->mi_Text);
  258.     GT_SetGadgetAttrs(EditGadgets[GDX_MemoGad],EditWnd,0,
  259.               GTST_String, strinfo->Buffer,
  260.               TAG_DONE);
  261.     ActivateGadget(EditGadgets[GDX_DateGad],EditWnd,0);
  262.     SignalMask = 1<<EditWnd->UserPort->mp_SigBit;
  263.     while(!finished)
  264.     {
  265.       Signal = Wait(SignalMask);
  266.       if ((Signal & SignalMask) == SignalMask)
  267.       {
  268.         if (HandleEditIDCMP() == -1)
  269.           finished = TRUE;
  270.       }
  271.     }
  272.     if (memostate)
  273.     {
  274.       strcpy(mim->mi_Date,GetString(EditGadgets[GDX_DateGad]));
  275.       strcpy(mim->mi_Notice,GetString(EditGadgets[GDX_NoticeGad]));
  276.       strcpy(mim->mi_Type,GetString(EditGadgets[GDX_TypeGad]));
  277.       strcpy(mim->mi_Text,GetString(EditGadgets[GDX_MemoGad]));
  278.       ret = TRUE;
  279.     }
  280.   }
  281.   CloseEditWindow();
  282.  
  283.   EnableGadgets();
  284.   ClearWaitPointer(mm_w);
  285.   return ret;
  286. }
  287.  
  288. /*======================================================================*/
  289. BOOL MemoDel(struct MI_Mem *memo)
  290.   {
  291.   char *Query[] = {
  292.     "",
  293.     "   Do you want to delete this memo?   ",
  294.     "",
  295.     "", /* Date */
  296.     "", /* Type */
  297.     "", /* Memo Text */
  298.     "",
  299.     '\0' };
  300.   char dbuff[18];   /* "Date : dd-mmm-yy" */
  301.   char tbuff[10];    /* "Type : X" */
  302.  
  303.   sprintf(tbuff, "Type : %s", memo->mim_MI.mi_Type);
  304.   sprintf(dbuff, "Date : %s", memo->mim_MI.mi_Date);
  305.   Query[3]=dbuff;
  306.   Query[4]=tbuff;
  307.   Query[5]=memo->mim_MI.mi_Text;
  308.   return DisplayC(Query);
  309.   }
  310.  
  311. /*------------------------------------------------------------------------
  312.  * Some routines to set and remove the wait pointer.
  313.  */
  314.  
  315. void SetWaitPointer(struct Window *wnd)
  316. {
  317. #if INCLUDE_VERSION >= 39
  318.   if (IntuitionBase->LibNode.lib_Version < 39)
  319.     SetPointer(wnd,waitspritedata,16,16,-5,0);
  320.   else
  321.     SetWindowPointer(wnd,
  322.                      WA_BusyPointer, TRUE,
  323.                      TAG_DONE);
  324. #else
  325.   SetPointer(wnd,waitspritedata,16,16,-5,0);
  326. #endif
  327. }
  328.  
  329. void ClearWaitPointer(struct Window *win)
  330. {
  331. #if INCLUDE_VERSION >= 39
  332.   if (IntuitionBase->LibNode.lib_Version < 39)
  333.     ClearPointer(win);
  334.   else
  335.     SetWindowPointerA(win,NULL);
  336. #else
  337.   ClearPointer(win);
  338. #endif
  339. }
  340.  
  341. void DisableGadgets(void)
  342. {
  343.   int counter;
  344.  
  345.   counter = MEMOS_IN_BLOCK-1;
  346.   while (counter >= 0)
  347.   {
  348.     GT_SetGadgetAttrs(m_gad_checked[counter--],mm_w,0,
  349.       GA_Disabled, TRUE,
  350.       TAG_DONE);
  351.   }
  352.   GT_SetGadgetAttrs(MMGadgets[GDX_MoveBeginGad],mm_w,0,
  353.       GA_Disabled, TRUE,
  354.       TAG_DONE);
  355.   GT_SetGadgetAttrs(MMGadgets[GDX_BackBlockGad],mm_w,0,
  356.       GA_Disabled, TRUE,
  357.       TAG_DONE);
  358.   GT_SetGadgetAttrs(MMGadgets[GDX_BackGad],mm_w,0,
  359.       GA_Disabled, TRUE,
  360.       TAG_DONE);
  361.   GT_SetGadgetAttrs(MMGadgets[GDX_ForwardGad],mm_w,0,
  362.       GA_Disabled, TRUE,
  363.       TAG_DONE);
  364.   GT_SetGadgetAttrs(MMGadgets[GDX_ForwardBlockGad],mm_w,0,
  365.       GA_Disabled, TRUE,
  366.       TAG_DONE);
  367.   GT_SetGadgetAttrs(MMGadgets[GDX_MoveEndGad],mm_w,0,
  368.       GA_Disabled, TRUE,
  369.       TAG_DONE);
  370.   GT_SetGadgetAttrs(MMGadgets[GDX_AddGad],mm_w,0,
  371.       GA_Disabled, TRUE,
  372.       TAG_DONE);
  373.   GT_SetGadgetAttrs(MMGadgets[GDX_DeleteGad],mm_w,0,
  374.       GA_Disabled, TRUE,
  375.       TAG_DONE);
  376.   GT_SetGadgetAttrs(MMGadgets[GDX_EditGad],mm_w,0,
  377.       GA_Disabled, TRUE,
  378.       TAG_DONE);
  379.   GT_SetGadgetAttrs(MMGadgets[GDX_CheckGad],mm_w,0,
  380.       GA_Disabled, TRUE,
  381.       TAG_DONE);
  382.   GT_SetGadgetAttrs(MMGadgets[GDX_ShrinkGad],mm_w,0,
  383.       GA_Disabled, TRUE,
  384.       TAG_DONE);
  385.   GT_SetGadgetAttrs(MMGadgets[GDX_HelpGad],mm_w,0,
  386.       GA_Disabled, TRUE,
  387.       TAG_DONE);
  388. }
  389.  
  390. void EnableGadgets(void)
  391. {
  392.   GT_SetGadgetAttrs(MMGadgets[GDX_MoveBeginGad],mm_w,0,
  393.       GA_Disabled, FALSE,
  394.       TAG_DONE);
  395.   GT_SetGadgetAttrs(MMGadgets[GDX_BackBlockGad],mm_w,0,
  396.       GA_Disabled, FALSE,
  397.       TAG_DONE);
  398.   GT_SetGadgetAttrs(MMGadgets[GDX_BackGad],mm_w,0,
  399.       GA_Disabled, FALSE,
  400.       TAG_DONE);
  401.   GT_SetGadgetAttrs(MMGadgets[GDX_ForwardGad],mm_w,0,
  402.       GA_Disabled, FALSE,
  403.       TAG_DONE);
  404.   GT_SetGadgetAttrs(MMGadgets[GDX_ForwardBlockGad],mm_w,0,
  405.       GA_Disabled, FALSE,
  406.       TAG_DONE);
  407.   GT_SetGadgetAttrs(MMGadgets[GDX_MoveEndGad],mm_w,0,
  408.       GA_Disabled, FALSE,
  409.       TAG_DONE);
  410.   GT_SetGadgetAttrs(MMGadgets[GDX_AddGad],mm_w,0,
  411.       GA_Disabled, FALSE,
  412.       TAG_DONE);
  413.   GT_SetGadgetAttrs(MMGadgets[GDX_DeleteGad],mm_w,0,
  414.       GA_Disabled, FALSE,
  415.       TAG_DONE);
  416.   GT_SetGadgetAttrs(MMGadgets[GDX_EditGad],mm_w,0,
  417.       GA_Disabled, FALSE,
  418.       TAG_DONE);
  419.   GT_SetGadgetAttrs(MMGadgets[GDX_CheckGad],mm_w,0,
  420.       GA_Disabled, FALSE,
  421.       TAG_DONE);
  422.   GT_SetGadgetAttrs(MMGadgets[GDX_ShrinkGad],mm_w,0,
  423.       GA_Disabled, FALSE,
  424.       TAG_DONE);
  425.   GT_SetGadgetAttrs(MMGadgets[GDX_HelpGad],mm_w,0,
  426.       GA_Disabled, FALSE,
  427.       TAG_DONE);
  428.  
  429.   Display_Block(DisplayFirst);
  430. }
  431.