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 >
Wrap
C/C++ Source or Header
|
1994-09-12
|
12KB
|
431 lines
#include <intuition/intuition.h>
#include <intuition/intuitionbase.h>
#include <ctype.h>
#include <lists.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <exec/nodes.h>
#include <exec/lists.h>
#include <exec/memory.h>
#include "mm2.h"
/* Prototypes */
Prototype BOOL Edit(void);
Prototype BOOL Add(void);
Prototype BOOL Del(void);
Prototype BOOL MemIns(struct MI_Mem *);
Prototype BOOL MemoReq(struct Memo_Item *);
Prototype BOOL MemoDel(struct MI_Mem *);
Prototype void ClearWaitPointer(struct Window *);
Prototype void SetWaitPointer(struct Window *);
Prototype void DisableGadgets(void);
Prototype void EnableGadgets(void);
extern struct MinList *MemListPtr;
extern struct MinNode *DisplayFirst;
extern struct Remember *RK;
extern struct IntuitionBase *IntuitionBase;
BOOL DataAmended = FALSE;
BOOL memostate = 0;
extern struct IntuitionBase *IntuitionBase;
extern void Display_Block(struct MinNode *);
__chip const UWORD waitspritedata[36] = {
0x0000, 0x0000,
0x0400, 0x07C0,
0x0000, 0x07C0,
0x0100, 0x0380,
0x0000, 0x07E0,
0x07C0, 0x1FF8,
0x1FF0, 0x3FEC,
0x3FF8, 0x7FDE,
0x3FF8, 0x7FBE,
0x7FFC, 0xFF7F,
0x7FFC, 0xFEFF,
0x7FFC, 0xFFFF,
0x3FF8, 0x7FFE,
0x3FF8, 0x7FFE,
0x1FF0, 0x3FFC,
0x07C0, 0x1FF8,
0x0000, 0x07E0,
0x0000, 0x0000};
/*--------------------------------------------------------------------------
* Function Edit() calls MemoReq() for each selected memo in the list. Prior
* to the call, Edit() sets up the current field values in a Memo_Item
* structure. Returns TRUE if no errors found, otherwise FALSE. (Actually,
* it currently returns TRUE under all circumstances.
*/
BOOL Edit()
{
struct Memo_Item m;
struct MinNode *n;
BOOL result;
if (LISTEMPTY) return TRUE;
n=MemListPtr->mlh_Head;
while (n->mln_Succ)
{
if ( ((struct MI_Mem *)n)->mim_Select == 1)
{
strcpy(m.mi_Date , ((struct MI_Mem *)n)->mim_MI.mi_Date);
strcpy(m.mi_Notice , ((struct MI_Mem *)n)->mim_MI.mi_Notice);
strcpy(m.mi_Type , ((struct MI_Mem *)n)->mim_MI.mi_Type);
strcpy(m.mi_Text , ((struct MI_Mem *)n)->mim_MI.mi_Text);
result = MemoReq(&m);
if (result)
{
strcpy( ((struct MI_Mem *)n)->mim_MI.mi_Date, m.mi_Date);
strcpy( ((struct MI_Mem *)n)->mim_MI.mi_Notice, m.mi_Notice);
strcpy( ((struct MI_Mem *)n)->mim_MI.mi_Type, m.mi_Type);
strcpy( ((struct MI_Mem *)n)->mim_MI.mi_Text, m.mi_Text);
Remove((struct List *)n);
MemIns((struct MI_Mem *)n);
DataAmended=TRUE;
}
}
((struct MI_Mem *)n)->mim_Select=0;
n=n->mln_Succ;
}
Display_Block(DisplayFirst);
return TRUE;
}
/*--------------------------------------------------------------------------
* Function Add() calls MemoReq() to get data for new memo.
* Returns TRUE if no errors found, otherwise FALSE. (Actually,
* it currently returns TRUE under all circumstances.
*/
BOOL Add()
{
struct Memo_Item m;
struct MI_Mem *mim;
BOOL result;
m.mi_Date[0]='\0';
m.mi_Notice[0]='\0';
m.mi_Type[0]='\0';
m.mi_Text[0]='\0';
result=MemoReq(&m);
if (result)
{
mim=(struct MI_Mem *)AllocRemember(&RK,sizeof(struct MI_Mem),MEMF_PUBLIC);
if (!mim) return FALSE;
strcpy( mim->mim_MI.mi_Date, m.mi_Date);
strcpy( mim->mim_MI.mi_Notice, m.mi_Notice);
strcpy( mim->mim_MI.mi_Type, m.mi_Type);
strcpy( mim->mim_MI.mi_Text, m.mi_Text);
mim->mim_Select=0;
result=MemIns(mim);
if (!result) return FALSE;
DisplayFirst = (struct MinNode *)mim;
Display_Block(DisplayFirst);
DataAmended=TRUE;
}
return (TRUE);
}
/*--------------------------------------------------------------------------
* Function Del() reads through Memo list and, with the confirmation of the
* user, deletes selected memos. The memos are actually just removed from
* the list, the memory is not released until the program terminates. (Later
* deleted memos could be organised as a separate list and a process made
* available for the user to change his/her mind and reinsert any memos?)
* Returns TRUE if no errors found, otherwise FALSE. (Actually,
* it currently returns TRUE under all circumstances.
*/
BOOL Del()
{
struct MinNode *n;
int result;
if (LISTEMPTY) return TRUE;
n=MemListPtr->mlh_Head;
while (n->mln_Succ)
{
if ( ((struct MI_Mem *)n)->mim_Select == 1)
{
result = MemoDel((struct MI_Mem *)n);
if (result == 1)
{
Remove((struct Node *)n);
DataAmended=TRUE;
if ( n = DisplayFirst)
{
if (LISTEMPTY)
DisplayFirst = NULL;
else
DisplayFirst = MemListPtr->mlh_Head;
}
Display_Block(DisplayFirst);
}
}
n=n->mln_Succ;
}
return TRUE;
}
/*--------------------------------------------------------------------------
* Function MemIns() allocates a new MI_Mem structure in memory, copies
* data into it from a Memo_Item structure whose address was given as a
* parameter and then returns TRUE if no errors found, otherwise FALSE.
*/
BOOL MemIns(struct MI_Mem *m)
{
char d1[5],d2[5];
struct MinNode *n;
BOOL found;
int cmp,mnum;
if (LISTEMPTY)
{
AddHead((struct List *)MemListPtr,(struct Node *)m);
}
else
{
mnum = Month2Num((char *)&(m->mim_MI.mi_Date[3]));
sprintf(d1, "%02d", mnum);
d1[2]=m->mim_MI.mi_Date[0];
d1[3]=m->mim_MI.mi_Date[1];
d1[4]='\0';
n=MemListPtr->mlh_Head;
found=FALSE;
while ( (!found) && (n->mln_Succ) )
{
mnum = Month2Num((char *)&(((struct MI_Mem *)n)->mim_MI.mi_Date[3]));
sprintf(d2, "%02d", mnum);
d2[2]=((struct MI_Mem *)n)->mim_MI.mi_Date[0];
d2[3]=((struct MI_Mem *)n)->mim_MI.mi_Date[1];
d2[4]='\0';
cmp=strcmp(d1,d2);
if ( cmp > 0 )
{
n=n->mln_Succ;
}
else
{
Insert( (struct List *)MemListPtr,(struct Node *)m,(struct Node *)n->mln_Pred);
found=TRUE;
}
}
if (!found) AddTail( (struct List *)MemListPtr, (struct Node *)m );
}
return TRUE;
}
/* -------------------------------------------------------------------
* Function handling Requester allowing addition of new memos and
* editing of existing ones
*/
BOOL MemoReq(struct Memo_Item *mim)
{
BOOL finished = FALSE;
BOOL ret = FALSE;
ULONG SignalMask,Signal;
struct StringInfo *strinfo;
SetWaitPointer(mm_w);
DisableGadgets();
if (!OpenEditWindow())
{
strinfo = EditGadgets[GDX_DateGad]->SpecialInfo;
strcpy(strinfo->Buffer,mim->mi_Date);
GT_SetGadgetAttrs(EditGadgets[GDX_DateGad],EditWnd,0,
GTST_String, strinfo->Buffer,
TAG_DONE);
strinfo = EditGadgets[GDX_NoticeGad]->SpecialInfo;
strcpy(strinfo->Buffer,mim->mi_Notice);
GT_SetGadgetAttrs(EditGadgets[GDX_NoticeGad],EditWnd,0,
GTST_String, strinfo->Buffer,
TAG_DONE);
strinfo = EditGadgets[GDX_TypeGad]->SpecialInfo;
strcpy(strinfo->Buffer,mim->mi_Type);
GT_SetGadgetAttrs(EditGadgets[GDX_TypeGad],EditWnd,0,
GTST_String, strinfo->Buffer,
TAG_DONE);
strinfo = EditGadgets[GDX_MemoGad]->SpecialInfo;
strcpy(strinfo->Buffer,mim->mi_Text);
GT_SetGadgetAttrs(EditGadgets[GDX_MemoGad],EditWnd,0,
GTST_String, strinfo->Buffer,
TAG_DONE);
ActivateGadget(EditGadgets[GDX_DateGad],EditWnd,0);
SignalMask = 1<<EditWnd->UserPort->mp_SigBit;
while(!finished)
{
Signal = Wait(SignalMask);
if ((Signal & SignalMask) == SignalMask)
{
if (HandleEditIDCMP() == -1)
finished = TRUE;
}
}
if (memostate)
{
strcpy(mim->mi_Date,GetString(EditGadgets[GDX_DateGad]));
strcpy(mim->mi_Notice,GetString(EditGadgets[GDX_NoticeGad]));
strcpy(mim->mi_Type,GetString(EditGadgets[GDX_TypeGad]));
strcpy(mim->mi_Text,GetString(EditGadgets[GDX_MemoGad]));
ret = TRUE;
}
}
CloseEditWindow();
EnableGadgets();
ClearWaitPointer(mm_w);
return ret;
}
/*======================================================================*/
BOOL MemoDel(struct MI_Mem *memo)
{
char *Query[] = {
"",
" Do you want to delete this memo? ",
"",
"", /* Date */
"", /* Type */
"", /* Memo Text */
"",
'\0' };
char dbuff[18]; /* "Date : dd-mmm-yy" */
char tbuff[10]; /* "Type : X" */
sprintf(tbuff, "Type : %s", memo->mim_MI.mi_Type);
sprintf(dbuff, "Date : %s", memo->mim_MI.mi_Date);
Query[3]=dbuff;
Query[4]=tbuff;
Query[5]=memo->mim_MI.mi_Text;
return DisplayC(Query);
}
/*------------------------------------------------------------------------
* Some routines to set and remove the wait pointer.
*/
void SetWaitPointer(struct Window *wnd)
{
#if INCLUDE_VERSION >= 39
if (IntuitionBase->LibNode.lib_Version < 39)
SetPointer(wnd,waitspritedata,16,16,-5,0);
else
SetWindowPointer(wnd,
WA_BusyPointer, TRUE,
TAG_DONE);
#else
SetPointer(wnd,waitspritedata,16,16,-5,0);
#endif
}
void ClearWaitPointer(struct Window *win)
{
#if INCLUDE_VERSION >= 39
if (IntuitionBase->LibNode.lib_Version < 39)
ClearPointer(win);
else
SetWindowPointerA(win,NULL);
#else
ClearPointer(win);
#endif
}
void DisableGadgets(void)
{
int counter;
counter = MEMOS_IN_BLOCK-1;
while (counter >= 0)
{
GT_SetGadgetAttrs(m_gad_checked[counter--],mm_w,0,
GA_Disabled, TRUE,
TAG_DONE);
}
GT_SetGadgetAttrs(MMGadgets[GDX_MoveBeginGad],mm_w,0,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(MMGadgets[GDX_BackBlockGad],mm_w,0,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(MMGadgets[GDX_BackGad],mm_w,0,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(MMGadgets[GDX_ForwardGad],mm_w,0,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(MMGadgets[GDX_ForwardBlockGad],mm_w,0,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(MMGadgets[GDX_MoveEndGad],mm_w,0,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(MMGadgets[GDX_AddGad],mm_w,0,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(MMGadgets[GDX_DeleteGad],mm_w,0,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(MMGadgets[GDX_EditGad],mm_w,0,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(MMGadgets[GDX_CheckGad],mm_w,0,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(MMGadgets[GDX_ShrinkGad],mm_w,0,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(MMGadgets[GDX_HelpGad],mm_w,0,
GA_Disabled, TRUE,
TAG_DONE);
}
void EnableGadgets(void)
{
GT_SetGadgetAttrs(MMGadgets[GDX_MoveBeginGad],mm_w,0,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(MMGadgets[GDX_BackBlockGad],mm_w,0,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(MMGadgets[GDX_BackGad],mm_w,0,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(MMGadgets[GDX_ForwardGad],mm_w,0,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(MMGadgets[GDX_ForwardBlockGad],mm_w,0,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(MMGadgets[GDX_MoveEndGad],mm_w,0,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(MMGadgets[GDX_AddGad],mm_w,0,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(MMGadgets[GDX_DeleteGad],mm_w,0,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(MMGadgets[GDX_EditGad],mm_w,0,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(MMGadgets[GDX_CheckGad],mm_w,0,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(MMGadgets[GDX_ShrinkGad],mm_w,0,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(MMGadgets[GDX_HelpGad],mm_w,0,
GA_Disabled, FALSE,
TAG_DONE);
Display_Block(DisplayFirst);
}