home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 6
/
AACD06.ISO
/
AACD
/
Utilities
/
amiCheck
/
Source
/
netPanel.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-06-11
|
22KB
|
905 lines
/* netPanel.c
*
* defines the GUIFront characteristics of the net panel
*/
#include <stdio.h>
#include <intuition/gadgetclass.h>
#include <exec/memory.h>
#include <clib/exec_protos.h>
#include <clib/asl_protos.h>
#include <libraries/asl.h>
#include "amiCheck.h"
#include "regGadget.h"
#include "dataBase.h"
#include "netPanel.h"
#include <string.h>
#define NETCREDIT 0
#define NETDEBIT 1
#define NETCURR 0
#define NETSTATE 1
#define SUMSIZE (AMNTSIZE+8)
/* prototypes */
BOOL NetHandleGadget(struct IntuiMessage *);
BOOL NetInit(void);
void NetDisableGads(BOOL);
netNode *NetAddNode(netNode *);
void NetFreeList(void);
BOOL NetSave (char *);
BOOL NetLoad (char *);
void NetUpdateLocal(netNode *);
void NetWorth(void);
static char ltax[SUMSIZE],cbal[SUMSIZE],sbal[SUMSIZE];
static char repdebit[SUMSIZE],repcredit[SUMSIZE],networth[SUMSIZE],nettax[SUMSIZE];
static char sumtype;
static char fname[100];
static char localnetbal=0;
struct TagItem netinserttags[] =
{
ASL_Hail, (ULONG)"Select Account File:",
ASL_OKText,"OK",
ASL_CancelText,"Cancel",
ASL_File, (ULONG)"",
ASL_Pattern, (ULONG)filePattern, /*"#?.AC",*/
ASL_Dir, (ULONG)"PROGDIR:",
ASL_FuncFlags, FILF_PATGAD,
TAG_DONE,
};
struct FileRequester *netinsertASL = NULL;
WORD netEntries;
struct Window *netWin;
struct List netList;
ExtErrorData NetExtData;
GUIFront *netGUI;
WORD netlistActive;
char nettitle[100];
UBYTE netdecimal;
/* quick configure of some gadgets */
STRPTR accountlabels[] =
{
"Credit",
"Debit",
NULL,
};
STRPTR netreportlabels[] =
{
"Current",
"Statement",
NULL,
};
struct TagItem netCycleTags[] =
{
{GTCY_Labels, accountlabels},
{TAG_DONE},
};
struct TagItem netrepCycleTags[] =
{
{GTCY_Labels, netreportlabels},
{TAG_DONE},
};
/* define gadgetspec */
GadgetSpec NETgadgetspecs[] =
{
{LISTVIEW_KIND,20,8, {0,0,0,0,NULL,NULL,GID_NETLIST,
PLACETEXT_ABOVE},ListView,GS_DefaultTags},
{BUTTON_KIND,0,0,{0,0,0,0,"_Open", NULL, GID_NETOPEN,
PLACETEXT_IN}, NULL, GS_DefaultTags},
{BUTTON_KIND,0,0,{0,0,0,0,"_Save", NULL, GID_NETSAVE,
PLACETEXT_IN}, NULL, GS_DefaultTags},
{BUTTON_KIND,0,0,{0,0,0,0,"Save _As", NULL, GID_NETSAVEAS,
PLACETEXT_IN}, NULL, GS_DefaultTags},
{BUTTON_KIND,0,0,{0,0,0,0,"_Insert", NULL, GID_NETNEW,
PLACETEXT_IN}, NULL, GS_DefaultTags | GS_NoHeightExtend},
{BUTTON_KIND,0,0,{0,0,0,0,"_Remove", NULL, GID_NETREMOVE,
PLACETEXT_IN}, NULL, GS_DefaultTags | GS_NoHeightExtend},
{CYCLE_KIND,0,1, {0,0,0,0,"_Type",NULL,GID_NETTYPE,
PLACETEXT_LEFT},netCycleTags,GS_DefaultTags | GS_NoHeightExtend},
{TEXT_KIND,0,0,{0,0,0,0,"Curr Bal:",NULL,GID_NETCBAL,
PLACETEXT_LEFT},TxtZero,GS_DefaultTags},
{TEXT_KIND,0,0,{0,0,0,0,"Balance:",NULL,GID_NETSBAL,
PLACETEXT_LEFT},TxtZero,GS_DefaultTags},
{CYCLE_KIND,0,1, {0,0,0,0,"_Global Type",NULL,GID_NETREPTYPE,
PLACETEXT_LEFT},netrepCycleTags,GS_DefaultTags | GS_NoHeightExtend},
{TEXT_KIND,0,0,{0,0,0,0,"Debits:",NULL,GID_NETREPDEBIT,
PLACETEXT_LEFT},TxtZero,GS_DefaultTags},
{TEXT_KIND,0,0,{0,0,0,0,"Credits:",NULL,GID_NETREPCREDIT,
PLACETEXT_LEFT},TxtZero,GS_DefaultTags},
{TEXT_KIND,0,0,{0,0,0,0,"Summary:",NULL,GID_NETWORTH,
PLACETEXT_LEFT},TxtZero,GS_DefaultTags},
{BUTTON_KIND,0,0,{0,0,0,0,"_Cancel", NULL, GID_NETCANCEL,
PLACETEXT_IN}, NULL, GS_DefaultTags},
{TEXT_KIND,0,0,{0,0,0,0,"Tax Deduct:",NULL,GID_NETTAX,
PLACETEXT_LEFT},TxtZero,GS_DefaultTags},
{TEXT_KIND,0,0,{0,0,0,0,"Balance:",NULL,GID_NETTOTAL,
PLACETEXT_LEFT},TxtZero,GS_DefaultTags},
{TEXT_KIND,0,0,{0,0,0,0,"Tax Deduct:",NULL,GID_NETLOCALTAX,
PLACETEXT_LEFT},TxtZero,GS_DefaultTags},
{CYCLE_KIND,0,1, {0,0,0,0,"_Local Type",NULL,GID_NETACCBAL,
PLACETEXT_LEFT},netrepCycleTags,GS_DefaultTags | GS_NoHeightExtend},
};
/* set up array of pointers to our specs */
GadgetSpec *NET_NetSpecs[] =
{
&NETgadgetspecs[0],
&NETgadgetspecs[1],
&NETgadgetspecs[2],
&NETgadgetspecs[3],
&NETgadgetspecs[4],
&NETgadgetspecs[5],
&NETgadgetspecs[6],
&NETgadgetspecs[7],
&NETgadgetspecs[8],
&NETgadgetspecs[9],
&NETgadgetspecs[10],
&NETgadgetspecs[11],
&NETgadgetspecs[12],
&NETgadgetspecs[13],
&NETgadgetspecs[14],
&NETgadgetspecs[15],
&NETgadgetspecs[16],
&NETgadgetspecs[17],
NULL,
};
/* define the layout of this panel */
ULONG NET_NetPanel[] =
{
GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
GUIL_HorizGroup, 1,
GUIL_Flags, GUILF_PropShare | GUILF_EqualHeight,
GUIL_FrameType, GUILFT_Recess,
GUIL_VertGroup,1,
GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
GUIL_FrameType, GUILFT_Ridge,
GUIL_FrameHeadline, "Accounts",
GUIL_VertGroup,0,
GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
GUIL_GadgetSpecID, GID_NETLIST,
GUIL_HorizGroup,1,
GUIL_Flags, GUILF_EqualShare | GUILF_EqualWidth,
GUIL_GadgetSpecID, GID_NETNEW,
GUIL_GadgetSpecID, GID_NETREMOVE,
TAG_DONE,
TAG_DONE,
GUIL_GadgetSpecID, GID_NETTYPE,
TAG_DONE,
GUIL_VertGroup,1,
GUIL_Flags , GUILF_PropShare | GUILF_EqualWidth,
GUIL_VertGroup,0,
GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth | GUILF_LabelAlign,
GUIL_FrameType, GUILFT_Ridge,
GUIL_FrameHeadline, "Account Info",
GUIL_GadgetSpecID, GID_NETACCBAL,
GUIL_GadgetSpecID, GID_NETSBAL,
GUIL_GadgetSpecID, GID_NETLOCALTAX,
TAG_DONE,
GUIL_VertGroup,0,
GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth | GUILF_LabelAlign,
GUIL_FrameType, GUILFT_Ridge,
GUIL_FrameHeadline, "Summary",
GUIL_GadgetSpecID, GID_NETREPTYPE,
GUIL_GadgetSpecID, GID_NETREPDEBIT,
GUIL_GadgetSpecID, GID_NETREPCREDIT,
GUIL_GadgetSpecID, GID_NETWORTH,
GUIL_GadgetSpecID, GID_NETTAX,
TAG_DONE,
TAG_DONE,
TAG_DONE,
GUIL_HorizGroup,1,
GUIL_Flags, GUILF_EqualSize | GUILF_EqualWidth,
GUIL_GadgetSpecID, GID_NETSAVE,
GUIL_GadgetSpecID, GID_NETSAVEAS,
GUIL_GadgetSpecID, GID_NETOPEN,
GUIL_GadgetSpecID, GID_NETCANCEL,
TAG_DONE,
TAG_DONE,
};
/****************************************************
* NetGUI ()
*
* Creates the GUI for the Net panel.
*****************************************************/
void NetGUI(void)
{
BOOL done = FALSE;
BOOL noreply;
UWORD ordinal;
ULONG signal;
netNode *net;
AmiLock();
GF_SetGUIAttr(netGUI, GUI_OpenGUI, TRUE, TAG_DONE);
/* grab window */
GF_GetGUIAttr(netGUI,GUI_Window,&netWin,TAG_DONE);
if (!NetInit())
done = TRUE;
/* Process input events */
while (!done)
{
struct IntuiMessage *imsg;
/* Wait for an event to occur */
signal = GF_Wait(guiapp,AmigaGuideSignal(agc));
if (signal & AmigaGuideSignal(agc)) {
AmiHelpMsg();
continue;
}
/* We only bother to listen for CLOSEWINDOW events.
* Of course, in a real application, you would be
* examining the Class field for IDCMP_GADGETUP
* messages and act accordingly.
*/
while (imsg = GF_GetIMsg(guiapp))
{
noreply = TRUE;
switch (imsg->Class) {
case IDCMP_REFRESHWINDOW:
RegRefresh(TRUE);
break;
case IDCMP_CLOSEWINDOW:
done = TRUE;
break;
case IDCMP_RAWKEY:
AmiHelpKey(imsg,NET_PANEL);
if (IsListEmpty(&netList))
break;
if (GF_ProcessListView(netGUI,NET_NetSpecs[GID_NETLIST],
imsg,&ordinal)) {
if (netlistActive == -1)
NetDisableGads(FALSE);
netlistActive = ordinal;
net = (netNode*)DataOrd2Node(&netList,ordinal);
NetUpdateLocal(net);
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETTYPE].gs_Gadget,
GTCY_Active, net->actype,
TAG_DONE);
}
break;
case IDCMP_GADGETUP:
noreply = FALSE;
done=NetHandleGadget(imsg);
break;
}
if (noreply) GF_ReplyIMsg(imsg);
}
}
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETLIST].gs_Gadget,
GTLV_Labels, ~0,
TAG_DONE);
NetFreeList();
GF_SetGUIAttr(netGUI, GUI_OpenGUI, FALSE, TAG_DONE);
AmiUnlock();
return;
}
/***************************************************
* NetHandleGadget()
*
* Handles gadget events for this panel
****************************************************/
BOOL NetHandleGadget(struct IntuiMessage *imsg)
{
BOOL done = FALSE;
struct Gadget *gad = (struct Gadget *)(imsg->IAddress);
UWORD code = imsg->Code;
netNode *net,*nett,netw;
char response[200];
switch (gad->GadgetID) {
case GID_NETACCBAL:
localnetbal = code;
if (netlistActive != -1) {
net = (netNode *)DataOrd2Node(&netList,netlistActive);
NetUpdateLocal(net);
}
break;
case GID_NETLIST:
if (netlistActive == -1)
NetDisableGads(FALSE);
netlistActive = code;
net = (netNode *)DataOrd2Node(&netList,netlistActive);
NetUpdateLocal(net);
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETTYPE].gs_Gadget,
GTCY_Active, net->actype,
TAG_DONE);
break;
case GID_NETREPTYPE:
sumtype = code;
NetWorth();
break;
case GID_NETTYPE:
net = (netNode *)DataOrd2Node(&netList,netlistActive);
net->actype = code;
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETTYPE].gs_Gadget,
GTCY_Active, net->actype,
TAG_DONE);
NetWorth();
break;
case GID_NETNEW:
GF_LockGUI(netGUI);
if (AmiGetFile(netGUI,loadASL,fname,100)) {
sprintf(response,"Account already loaded:[%s]\n",fname);
if (DataIsUnique(netGUI,&netList,fname,TRUE,response) == TRUE) {
if (DataSummarize(fname,&netw) != TRUE) {
DisplayBeep(netWin->WScreen);
AmiAnnounce("Encountered trouble trying to read account file.");
}
else {
/* convert over to our format */
if (netw.balances.decimal != usrAccount.decimal) {
DataBalConvert( &netw.balances.taxdeductcurr,
netw.balances.decimal,usrAccount.decimal);
DataBalConvert( &netw.balances.taxdeductstate,
netw.balances.decimal,usrAccount.decimal);
DataBalConvert( &netw.balances.currAmnt,
netw.balances.decimal,usrAccount.decimal);
DataBalConvert( &netw.balances.stateAmnt,
netw.balances.decimal,usrAccount.decimal);
}
if (netEntries == 0) {
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETSAVEAS].gs_Gadget,
GA_Disabled, FALSE,
TAG_DONE);
}
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETLIST].gs_Gadget,
GTLV_Labels, ~0,
TAG_DONE);
netw.actype = NETCREDIT;
NetAddNode(&netw);
netEntries++;
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETLIST].gs_Gadget,
GTLV_Labels, &netList,
GTLV_Selected, netlistActive,
TAG_DONE);
NetWorth();
}
}
}
GF_UnlockGUI(netGUI);
break;
case GID_NETSAVE:
if (NetSave(fname) != TRUE) {
DisplayBeep(netWin->WScreen);
AmiAnnounce("Encountered trouble trying to save net file.");
}
break;
case GID_NETSAVEAS:
GF_LockGUI(netGUI);
if (AmiGetFile(netGUI,netsaveASL,fname,100)) {
if (NetSave(fname) != TRUE) {
DisplayBeep(netWin->WScreen);
AmiAnnounce("Encountered trouble trying to save net file.");
}
DataAttachIcon(iconPath,"AC_NetWorth",fname);
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETSAVE].gs_Gadget,
GA_Disabled, FALSE,
TAG_DONE);
sprintf(nettitle,"Net Worth Analysis: %s",netsaveASL->fr_File);
SetWindowTitles(netWin,nettitle,(UBYTE *)-1);
}
GF_UnlockGUI(netGUI);
break;
case GID_NETOPEN:
GF_LockGUI(netGUI);
if (AmiGetFile(netGUI,netloadASL,fname,100)) {
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETLIST].gs_Gadget,
GTLV_Labels, ~0,
TAG_DONE);
NetFreeList();
sprintf(nettitle,"Net Worth Analysis: %s",netloadASL->fr_File);
SetWindowTitles(netWin,nettitle,(UBYTE *)-1);
if (NetLoad(fname) != TRUE) {
DisplayBeep(netWin->WScreen);
AmiAnnounce("Encountered trouble trying to load net file.");
}
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETSAVE].gs_Gadget,
GA_Disabled, FALSE,
TAG_DONE);
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETSAVEAS].gs_Gadget,
GA_Disabled, FALSE,
TAG_DONE);
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETLIST].gs_Gadget,
GTLV_Labels, &netList,
GTLV_Selected, ~0,
TAG_DONE);
netlistActive = -1;
memset(&netw,0,sizeof(netNode));
NetUpdateLocal(&netw);
NetWorth();
NetDisableGads(TRUE);
}
GF_UnlockGUI(netGUI);
break;
case GID_NETREMOVE:
/* detach and modify list */
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETLIST].gs_Gadget,
GTLV_Labels, ~0,
TAG_DONE);
net = (netNode *)DataOrd2Node(&netList,netlistActive);
if (net->node.ln_Succ == (struct Node *)&netList.lh_Tail)
netlistActive--;
Remove(net);
FreeVec(net);
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETLIST].gs_Gadget,
GTLV_Labels, &netList,
GTLV_Selected, (IsListEmpty(&netList))?~0:netlistActive,
TAG_DONE);
if (netlistActive == -1) {
memset(&netw,0,sizeof(netNode));
NetUpdateLocal(&netw);
}
else {
nett = (netNode *)DataOrd2Node(&netList,netlistActive);
NetUpdateLocal(nett);
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETTYPE].gs_Gadget,
GTCY_Active, nett->actype,
TAG_DONE);
}
if (IsListEmpty(&netList))
NetDisableGads(TRUE);
netEntries--;
NetWorth();
break;
case GID_NETCANCEL:
done = TRUE;
break;
}
GF_ReplyIMsg(imsg);
return (done);
}
/****************************************************
* NetInit()
*
* Set up some globals
*****************************************************/
BOOL NetInit(void)
{
amountType zero = 0;
netdecimal = usrAccount.decimal;
sprintf(nettitle,"Net Worth Analysis: untitled.ACnet");
SetWindowTitles(netWin,nettitle,(UBYTE *)-1);
NewList (&netList);
netlistActive = -1;
netEntries = 0;
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETLIST].gs_Gadget,
GTLV_Labels, &netList,
GTLV_Selected,~0,
TAG_DONE);
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETSAVE].gs_Gadget,
GA_Disabled, TRUE,
TAG_DONE);
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETSAVEAS].gs_Gadget,
GA_Disabled, TRUE,
TAG_DONE);
sumtype = NETSTATE;
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETREPTYPE].gs_Gadget,
GTCY_Active, sumtype,
TAG_DONE);
localnetbal = NETSTATE;
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETACCBAL].gs_Gadget,
GTCY_Active, localnetbal,
TAG_DONE);
NetDisableGads(TRUE);
/* clear out text gadgets */
DataBuildAmnt(TRUE,&zero,cbal);
DataBuildAmnt(TRUE,&zero,sbal);
DataBuildAmnt(TRUE,&zero,ltax);
DataBuildAmnt(TRUE,&zero,repdebit);
DataBuildAmnt(TRUE,&zero,repcredit);
DataBuildAmnt(TRUE,&zero,networth);
DataBuildAmnt(TRUE,&zero,nettax);
/*
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETCBAL].gs_Gadget,
GTTX_Text,cbal,
TAG_DONE);
*/
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETSBAL].gs_Gadget,
GTTX_Text,sbal,
TAG_DONE);
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETLOCALTAX].gs_Gadget,
GTTX_Text,ltax,
TAG_DONE);
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETREPCREDIT].gs_Gadget,
GTTX_Text,repcredit,
TAG_DONE);
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETREPDEBIT].gs_Gadget,
GTTX_Text,repdebit,
TAG_DONE);
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETWORTH].gs_Gadget,
GTTX_Text,networth,
TAG_DONE);
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETTAX].gs_Gadget,
GTTX_Text,nettax,
TAG_DONE);
return (TRUE);
}
/****************************************************
* NetDisableGads()
*
* Disable/Enable extra gadgets
*****************************************************/
void NetDisableGads(BOOL dis)
{
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETREMOVE].gs_Gadget,
GA_Disabled, dis,
TAG_DONE);
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETTYPE].gs_Gadget,
GA_Disabled, dis,
TAG_DONE);
}
/****************************************************
* NetAddNode()
*
* Add a node to the net list
*****************************************************/
netNode *NetAddNode(netNode *net)
{
netNode *temp;
temp = (netNode *)AllocVec(sizeof(netNode),MEMF_CLEAR);
if (temp == NULL)
return(NULL);
memcpy(temp,net,sizeof(netNode));
temp->node.ln_Name = temp->acname;
AddTail(&netList,temp);
return (temp);
}
/*****************************************************
* NetFreeList()
*
* Free a node
******************************************************/
void NetFreeList(void)
{
netNode *temp = (netNode*)netList.lh_Head, *next;
if (IsListEmpty(&netList))
return;
while ( (next=(netNode*)temp->node.ln_Succ)) {
FreeVec(temp);
temp = next;
}
}
/**************************************************************************
* NetSave()
*
* saves a net file
***************************************************************************/
BOOL NetSave (char *fname)
{
netNode *temp = (netNode *)netList.lh_Head, *next;
FILE *file;
if (IsListEmpty(&netList))
return(TRUE);
if ( (file = fopen(fname,"w")) == NULL)
return (FALSE);
while ( (next = (netNode *)(temp->node.ln_Succ)) ) {
fprintf(file,"%s %s",temp->acname, (temp->actype==NETCREDIT)?"CREDIT":"DEBIT");
if (temp->node.ln_Succ != NULL)
fprintf(file,"\n");
temp = next;
}
fclose(file);
return (TRUE);
}
/**************************************************************************
* netLoad()
*
* Loads a net file
***************************************************************************/
BOOL NetLoad (char *fname)
{
char fstr[100];
char type[100];
char response[200];
netNode net;
FILE *file;
NewList(&netList);
netEntries = 0;
if ( (file = fopen(fname,"r")) == NULL)
return (FALSE);
while ( fscanf(file,"%s %s",fstr,type) != EOF) {
sprintf(response,"Account already loaded:[%s]\n",fstr);
if (DataIsUnique(netGUI,&netList,fstr,TRUE,response) == TRUE) {
if (DataSummarize(fstr,&net) != TRUE) {
DisplayBeep(netWin->WScreen);
sprintf(response,"Failed to summarize [%s]\n",fstr);
AmiAnnounce(response);
}
else {
/* convert the balances to OUR decimal format */
if (net.balances.decimal != usrAccount.decimal) {
DataBalConvert( &net.balances.taxdeductcurr,
net.balances.decimal,usrAccount.decimal);
DataBalConvert( &net.balances.taxdeductstate,
net.balances.decimal,usrAccount.decimal);
DataBalConvert( &net.balances.currAmnt,
net.balances.decimal,usrAccount.decimal);
DataBalConvert( &net.balances.stateAmnt,
net.balances.decimal,usrAccount.decimal);
}
if (strcmpi(type,"debit") == 0)
net.actype = NETDEBIT;
else net.actype = NETCREDIT;
NetAddNode(&net);
netEntries++;
}
}
}
fclose(file);
return (TRUE);
}
/*****************************************************************
* NetWorth
*
* Calculate total worth, update graphics
******************************************************************/
void NetWorth(void)
{
netNode *temp = (netNode*)netList.lh_Head, *next;
amountType zero = 0;
balanceType repcr, repdeb, nw, nt;
DataInitBal(DEPOSITTYPE,&zero,&repcr);
DataInitBal(DEPOSITTYPE,&zero,&repdeb);
DataInitBal(DEPOSITTYPE,&zero,&nw);
DataInitBal(DEPOSITTYPE,&zero,&nt);
if (IsListEmpty(&netList) != TRUE) {
while ( (next=(netNode*)temp->node.ln_Succ)) {
switch (temp->actype) {
case NETCREDIT:
switch (sumtype) {
case NETCURR:
DataBalAddBal(netdecimal, &repcr,
&temp->balances.currAmnt, &repcr);
DataBalAddBal(netdecimal, &nt,
&temp->balances.taxdeductcurr, &nt);
break;
case NETSTATE:
DataBalAddBal(netdecimal, &repcr,
&temp->balances.stateAmnt, &repcr);
DataBalAddBal(netdecimal, &nt,
&temp->balances.taxdeductstate, &nt);
break;
}
break;
case NETDEBIT:
switch (sumtype) {
case NETCURR:
DataBalAddBal(netdecimal, &repdeb,
&temp->balances.currAmnt, &repdeb);
DataBalAddBal(netdecimal, &nt,
&temp->balances.taxdeductcurr, &nt);
break;
case NETSTATE:
DataBalAddBal(netdecimal, &repdeb,
&temp->balances.stateAmnt, &repdeb);
DataBalAddBal(netdecimal, &nt,
&temp->balances.taxdeductstate, &nt);
break;
}
break;
}
temp = next;
}
repdeb.neg = !repdeb.neg;
DataBalAddBal(netdecimal,&nw, &repcr, &repdeb);
repdeb.neg = !repdeb.neg;
}
/* build strings */
DataBuildBal(netdecimal,&repdeb,repdebit);
DataBuildBal(netdecimal,&repcr,repcredit);
DataBuildBal(netdecimal,&nw,networth);
DataBuildBal(netdecimal,&nt,nettax);
/* update gadgets */
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETREPCREDIT].gs_Gadget,
GTTX_Text,repcredit,
TAG_DONE);
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETREPDEBIT].gs_Gadget,
GTTX_Text,repdebit,
TAG_DONE);
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETWORTH].gs_Gadget,
GTTX_Text,networth,
TAG_DONE);
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETTAX].gs_Gadget,
GTTX_Text,nettax,
TAG_DONE);
}
/*****************************************************************
* NetUpdateLocal
*
* Calcs local balances for selected account
******************************************************************/
void NetUpdateLocal(netNode *net)
{
/* build strings */
if (localnetbal == NETSTATE) {
DataBuildBal(netdecimal,&net->balances.stateAmnt,sbal);
DataBuildBal(netdecimal,&net->balances.taxdeductstate,ltax);
}
else {
DataBuildBal(netdecimal,&net->balances.currAmnt,sbal);
DataBuildBal(netdecimal,&net->balances.taxdeductcurr,ltax);
}
/* GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETCBAL].gs_Gadget,
GTTX_Text, cbal,
TAG_DONE);
*/
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETSBAL].gs_Gadget,
GTTX_Text, sbal,
TAG_DONE);
GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETLOCALTAX].gs_Gadget,
GTTX_Text, ltax,
TAG_DONE);
}