home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 6 / AACD06.ISO / AACD / Utilities / amiCheck / Source / netPanel.c < prev    next >
C/C++ Source or Header  |  1998-06-11  |  22KB  |  905 lines

  1. /* netPanel.c 
  2.  *
  3.  *  defines the GUIFront characteristics of the net panel 
  4.  */
  5.   
  6. #include <stdio.h>  
  7. #include <intuition/gadgetclass.h>
  8. #include <exec/memory.h>
  9. #include <clib/exec_protos.h>
  10. #include <clib/asl_protos.h>
  11. #include <libraries/asl.h>
  12.  
  13. #include "amiCheck.h"
  14. #include "regGadget.h"
  15. #include "dataBase.h"
  16. #include "netPanel.h"
  17. #include <string.h>
  18.  
  19. #define NETCREDIT    0
  20. #define NETDEBIT    1
  21. #define NETCURR        0
  22. #define NETSTATE    1
  23.  
  24. #define SUMSIZE     (AMNTSIZE+8)
  25.  
  26. /* prototypes */
  27. BOOL NetHandleGadget(struct IntuiMessage *);
  28. BOOL NetInit(void);
  29. void NetDisableGads(BOOL);
  30. netNode *NetAddNode(netNode *);
  31. void NetFreeList(void);
  32. BOOL NetSave (char *);
  33. BOOL NetLoad (char *);
  34. void NetUpdateLocal(netNode *);
  35. void NetWorth(void);
  36.  
  37. static char ltax[SUMSIZE],cbal[SUMSIZE],sbal[SUMSIZE];
  38. static char repdebit[SUMSIZE],repcredit[SUMSIZE],networth[SUMSIZE],nettax[SUMSIZE];
  39. static char sumtype;
  40. static char fname[100];
  41. static char localnetbal=0;
  42.  
  43. struct TagItem netinserttags[] =
  44. {
  45.     ASL_Hail, (ULONG)"Select Account File:",
  46.     ASL_OKText,"OK",
  47.     ASL_CancelText,"Cancel",
  48.     ASL_File, (ULONG)"",
  49.     ASL_Pattern, (ULONG)filePattern, /*"#?.AC",*/
  50.     ASL_Dir, (ULONG)"PROGDIR:",
  51.     ASL_FuncFlags, FILF_PATGAD,
  52.     TAG_DONE,
  53. };
  54.  
  55. struct FileRequester *netinsertASL = NULL;
  56. WORD netEntries;
  57. struct Window *netWin;
  58. struct List netList;
  59. ExtErrorData NetExtData;
  60. GUIFront *netGUI;
  61. WORD netlistActive;
  62. char nettitle[100];
  63. UBYTE netdecimal;
  64.  
  65. /* quick configure of some gadgets */
  66.  
  67. STRPTR accountlabels[] =
  68. {
  69.     "Credit",
  70.     "Debit",
  71.     NULL,
  72. };
  73.  
  74. STRPTR netreportlabels[] =
  75. {
  76.     "Current",
  77.     "Statement",
  78.     NULL,
  79. };
  80.  
  81. struct TagItem netCycleTags[] =
  82. {
  83.     {GTCY_Labels, accountlabels},
  84.     {TAG_DONE},
  85. };
  86.  
  87. struct TagItem netrepCycleTags[] =
  88. {
  89.     {GTCY_Labels, netreportlabels},
  90.     {TAG_DONE},
  91. };
  92.  
  93.  
  94. /* define gadgetspec */
  95. GadgetSpec NETgadgetspecs[] = 
  96. {
  97.     {LISTVIEW_KIND,20,8, {0,0,0,0,NULL,NULL,GID_NETLIST,
  98.         PLACETEXT_ABOVE},ListView,GS_DefaultTags},
  99.  
  100.         {BUTTON_KIND,0,0,{0,0,0,0,"_Open", NULL, GID_NETOPEN,         
  101.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  102.  
  103.         {BUTTON_KIND,0,0,{0,0,0,0,"_Save", NULL, GID_NETSAVE,         
  104.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  105.  
  106.         {BUTTON_KIND,0,0,{0,0,0,0,"Save _As", NULL, GID_NETSAVEAS,         
  107.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  108.  
  109.         {BUTTON_KIND,0,0,{0,0,0,0,"_Insert", NULL, GID_NETNEW,         
  110.                 PLACETEXT_IN}, NULL, GS_DefaultTags | GS_NoHeightExtend},
  111.  
  112.         {BUTTON_KIND,0,0,{0,0,0,0,"_Remove", NULL, GID_NETREMOVE,         
  113.                 PLACETEXT_IN}, NULL, GS_DefaultTags | GS_NoHeightExtend},
  114.  
  115.     {CYCLE_KIND,0,1, {0,0,0,0,"_Type",NULL,GID_NETTYPE,
  116.         PLACETEXT_LEFT},netCycleTags,GS_DefaultTags | GS_NoHeightExtend},
  117.  
  118.     {TEXT_KIND,0,0,{0,0,0,0,"Curr Bal:",NULL,GID_NETCBAL,
  119.         PLACETEXT_LEFT},TxtZero,GS_DefaultTags},
  120.  
  121.     {TEXT_KIND,0,0,{0,0,0,0,"Balance:",NULL,GID_NETSBAL,
  122.         PLACETEXT_LEFT},TxtZero,GS_DefaultTags},
  123.  
  124.     {CYCLE_KIND,0,1, {0,0,0,0,"_Global Type",NULL,GID_NETREPTYPE,
  125.         PLACETEXT_LEFT},netrepCycleTags,GS_DefaultTags | GS_NoHeightExtend},
  126.  
  127.     {TEXT_KIND,0,0,{0,0,0,0,"Debits:",NULL,GID_NETREPDEBIT,
  128.         PLACETEXT_LEFT},TxtZero,GS_DefaultTags},
  129.  
  130.     {TEXT_KIND,0,0,{0,0,0,0,"Credits:",NULL,GID_NETREPCREDIT,
  131.         PLACETEXT_LEFT},TxtZero,GS_DefaultTags},
  132.  
  133.     {TEXT_KIND,0,0,{0,0,0,0,"Summary:",NULL,GID_NETWORTH,
  134.         PLACETEXT_LEFT},TxtZero,GS_DefaultTags},
  135.  
  136.         {BUTTON_KIND,0,0,{0,0,0,0,"_Cancel", NULL, GID_NETCANCEL,        
  137.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  138.  
  139.     {TEXT_KIND,0,0,{0,0,0,0,"Tax Deduct:",NULL,GID_NETTAX,
  140.         PLACETEXT_LEFT},TxtZero,GS_DefaultTags},
  141.  
  142.     {TEXT_KIND,0,0,{0,0,0,0,"Balance:",NULL,GID_NETTOTAL,
  143.         PLACETEXT_LEFT},TxtZero,GS_DefaultTags},
  144.  
  145.     {TEXT_KIND,0,0,{0,0,0,0,"Tax Deduct:",NULL,GID_NETLOCALTAX,
  146.         PLACETEXT_LEFT},TxtZero,GS_DefaultTags},
  147.  
  148.     {CYCLE_KIND,0,1, {0,0,0,0,"_Local Type",NULL,GID_NETACCBAL,
  149.         PLACETEXT_LEFT},netrepCycleTags,GS_DefaultTags | GS_NoHeightExtend},
  150.  
  151. };
  152.  
  153. /* set up array of pointers to our specs */
  154. GadgetSpec *NET_NetSpecs[] =
  155. {
  156.         &NETgadgetspecs[0],
  157.         &NETgadgetspecs[1],
  158.         &NETgadgetspecs[2],
  159.         &NETgadgetspecs[3],
  160.         &NETgadgetspecs[4],
  161.         &NETgadgetspecs[5],
  162.         &NETgadgetspecs[6],
  163.         &NETgadgetspecs[7],
  164.         &NETgadgetspecs[8],
  165.         &NETgadgetspecs[9],
  166.     &NETgadgetspecs[10],
  167.     &NETgadgetspecs[11],    
  168.     &NETgadgetspecs[12],
  169.     &NETgadgetspecs[13],
  170.     &NETgadgetspecs[14],
  171.     &NETgadgetspecs[15],
  172.     &NETgadgetspecs[16],
  173.     &NETgadgetspecs[17],
  174.     NULL,
  175. };
  176.  
  177.  
  178. /* define the layout of this panel */
  179. ULONG NET_NetPanel[] =
  180. {
  181.    GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
  182.  
  183.    GUIL_HorizGroup, 1,
  184.         GUIL_Flags, GUILF_PropShare | GUILF_EqualHeight,
  185.     GUIL_FrameType, GUILFT_Recess,
  186.  
  187.     GUIL_VertGroup,1,
  188.         GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
  189.         GUIL_FrameType, GUILFT_Ridge,
  190.         GUIL_FrameHeadline, "Accounts",
  191.  
  192.         GUIL_VertGroup,0,
  193.             GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
  194.             GUIL_GadgetSpecID, GID_NETLIST,
  195.  
  196.             GUIL_HorizGroup,1,
  197.                 GUIL_Flags, GUILF_EqualShare | GUILF_EqualWidth,
  198.  
  199.                 GUIL_GadgetSpecID, GID_NETNEW,
  200.                  GUIL_GadgetSpecID, GID_NETREMOVE,
  201.             TAG_DONE,
  202.         TAG_DONE,
  203.  
  204.         GUIL_GadgetSpecID, GID_NETTYPE,
  205.     TAG_DONE,
  206.  
  207.     GUIL_VertGroup,1,
  208.         GUIL_Flags , GUILF_PropShare | GUILF_EqualWidth,
  209.  
  210.         GUIL_VertGroup,0,
  211.             GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth | GUILF_LabelAlign,
  212.             GUIL_FrameType, GUILFT_Ridge,
  213.             GUIL_FrameHeadline, "Account Info",
  214.  
  215.             GUIL_GadgetSpecID, GID_NETACCBAL,
  216.             GUIL_GadgetSpecID, GID_NETSBAL,
  217.             GUIL_GadgetSpecID, GID_NETLOCALTAX,
  218.         TAG_DONE,
  219.  
  220.         GUIL_VertGroup,0,
  221.             GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth | GUILF_LabelAlign,
  222.             GUIL_FrameType, GUILFT_Ridge,
  223.             GUIL_FrameHeadline, "Summary",
  224.             
  225.             GUIL_GadgetSpecID, GID_NETREPTYPE,
  226.             GUIL_GadgetSpecID, GID_NETREPDEBIT,
  227.             GUIL_GadgetSpecID, GID_NETREPCREDIT,
  228.             GUIL_GadgetSpecID, GID_NETWORTH,
  229.             GUIL_GadgetSpecID, GID_NETTAX,
  230.         TAG_DONE,
  231.     TAG_DONE,
  232.         
  233.         
  234.     TAG_DONE,
  235.     
  236.     GUIL_HorizGroup,1,
  237.         GUIL_Flags, GUILF_EqualSize | GUILF_EqualWidth,
  238.         
  239.        GUIL_GadgetSpecID, GID_NETSAVE,
  240.        GUIL_GadgetSpecID, GID_NETSAVEAS,
  241.            GUIL_GadgetSpecID, GID_NETOPEN,
  242.            GUIL_GadgetSpecID, GID_NETCANCEL,
  243.            
  244.     TAG_DONE,   
  245.            
  246. TAG_DONE,
  247. };
  248.  
  249.  
  250. /****************************************************
  251. * NetGUI ()
  252. *
  253. *    Creates the GUI for the Net panel.
  254. *****************************************************/
  255. void NetGUI(void)
  256. {
  257.  BOOL done = FALSE;
  258.  BOOL noreply;
  259.  UWORD ordinal;
  260.  ULONG signal;
  261.  netNode *net;
  262.      
  263.  AmiLock();
  264.  
  265.      GF_SetGUIAttr(netGUI, GUI_OpenGUI, TRUE, TAG_DONE);
  266.      /* grab window */
  267.      GF_GetGUIAttr(netGUI,GUI_Window,&netWin,TAG_DONE);
  268.     if (!NetInit())
  269.         done = TRUE;
  270.  
  271.  
  272.                 /* Process input events */
  273.                 while (!done)
  274.                 {
  275.                     struct IntuiMessage *imsg;
  276.  
  277.                     /* Wait for an event to occur */
  278.  
  279.                     signal = GF_Wait(guiapp,AmigaGuideSignal(agc));
  280.             if (signal & AmigaGuideSignal(agc)) {
  281.             AmiHelpMsg();
  282.             continue;
  283.             }
  284.  
  285.                     /* We only bother to listen for CLOSEWINDOW events.
  286.                      * Of course, in a real application, you would be
  287.                      * examining the Class field for IDCMP_GADGETUP
  288.                      * messages and act accordingly.
  289.                      */
  290.  
  291.                     while (imsg = GF_GetIMsg(guiapp))
  292.                     {
  293.             noreply = TRUE;
  294.                         switch (imsg->Class) {
  295.                 case IDCMP_REFRESHWINDOW:
  296.                     RegRefresh(TRUE);
  297.                     break;
  298.  
  299.                                 case IDCMP_CLOSEWINDOW:
  300.                     done = TRUE;
  301.                                         break;
  302.  
  303.                 case IDCMP_RAWKEY:
  304.                     AmiHelpKey(imsg,NET_PANEL);
  305.                     if (IsListEmpty(&netList))
  306.                         break;
  307.                     if (GF_ProcessListView(netGUI,NET_NetSpecs[GID_NETLIST],
  308.                         imsg,&ordinal)) {
  309.                             if (netlistActive == -1)
  310.                                 NetDisableGads(FALSE);
  311.                             netlistActive = ordinal;
  312.                             net = (netNode*)DataOrd2Node(&netList,ordinal);
  313.                             NetUpdateLocal(net);
  314.                             GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETTYPE].gs_Gadget,
  315.                                 GTCY_Active, net->actype,
  316.                                 TAG_DONE);
  317.                     }
  318.                     break;
  319.  
  320.                 case IDCMP_GADGETUP:
  321.                     noreply = FALSE;
  322.                     done=NetHandleGadget(imsg);
  323.                     break;
  324.                         }
  325.                                      
  326.                               
  327.                         if (noreply) GF_ReplyIMsg(imsg);
  328.                     }
  329.                 }
  330.  
  331.    GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETLIST].gs_Gadget,
  332.             GTLV_Labels, ~0,
  333.             TAG_DONE);
  334.  
  335.    NetFreeList();
  336.    GF_SetGUIAttr(netGUI, GUI_OpenGUI, FALSE, TAG_DONE);
  337.    AmiUnlock();
  338.   return;
  339. }
  340.  
  341. /***************************************************
  342. * NetHandleGadget()
  343. *
  344. *    Handles gadget events for this panel
  345. ****************************************************/
  346. BOOL  NetHandleGadget(struct IntuiMessage *imsg)
  347. {
  348.  BOOL done = FALSE;
  349.  struct Gadget *gad = (struct Gadget *)(imsg->IAddress);
  350.  UWORD code = imsg->Code;
  351.  netNode *net,*nett,netw;
  352.  char response[200];
  353.  
  354.  
  355.  switch (gad->GadgetID) {
  356.  
  357.     case GID_NETACCBAL:
  358.         localnetbal = code;
  359.         if (netlistActive != -1) {
  360.             net = (netNode *)DataOrd2Node(&netList,netlistActive);
  361.             NetUpdateLocal(net);
  362.         }
  363.         break;
  364.     
  365.     case GID_NETLIST:
  366.         if (netlistActive == -1)
  367.             NetDisableGads(FALSE);
  368.  
  369.         netlistActive = code;
  370.         net = (netNode *)DataOrd2Node(&netList,netlistActive);
  371.         NetUpdateLocal(net);
  372.         GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETTYPE].gs_Gadget,
  373.             GTCY_Active, net->actype,
  374.             TAG_DONE);    
  375.         break;
  376.  
  377.     case GID_NETREPTYPE:
  378.         sumtype = code;
  379.         NetWorth();
  380.         break;
  381.  
  382.     case GID_NETTYPE:
  383.         net = (netNode *)DataOrd2Node(&netList,netlistActive);
  384.         net->actype = code;
  385.         GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETTYPE].gs_Gadget,
  386.             GTCY_Active, net->actype,
  387.             TAG_DONE);    
  388.         NetWorth();
  389.         break;
  390.  
  391.     case GID_NETNEW:
  392.         GF_LockGUI(netGUI);
  393.         if (AmiGetFile(netGUI,loadASL,fname,100)) {
  394.             sprintf(response,"Account already loaded:[%s]\n",fname);
  395.             if (DataIsUnique(netGUI,&netList,fname,TRUE,response) == TRUE) {
  396.  
  397.  
  398.             if (DataSummarize(fname,&netw) != TRUE) {
  399.                 DisplayBeep(netWin->WScreen);
  400.                 AmiAnnounce("Encountered trouble trying to read account file.");
  401.             }
  402.             else {
  403.                 /* convert over to our format */
  404.                 if (netw.balances.decimal != usrAccount.decimal) {
  405.                     DataBalConvert( &netw.balances.taxdeductcurr,
  406.                         netw.balances.decimal,usrAccount.decimal);
  407.                     DataBalConvert( &netw.balances.taxdeductstate,
  408.                         netw.balances.decimal,usrAccount.decimal);
  409.                     DataBalConvert( &netw.balances.currAmnt,
  410.                         netw.balances.decimal,usrAccount.decimal);
  411.                     DataBalConvert( &netw.balances.stateAmnt,
  412.                         netw.balances.decimal,usrAccount.decimal);
  413.                 }
  414.  
  415.                 if (netEntries == 0) {
  416.                     GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETSAVEAS].gs_Gadget,
  417.                         GA_Disabled, FALSE,
  418.                         TAG_DONE);
  419.                 }
  420.  
  421.                 GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETLIST].gs_Gadget,
  422.                     GTLV_Labels, ~0,
  423.                     TAG_DONE);
  424.  
  425.                 netw.actype = NETCREDIT;
  426.                 NetAddNode(&netw);                            
  427.                 netEntries++;
  428.  
  429.                 GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETLIST].gs_Gadget,
  430.                     GTLV_Labels, &netList,
  431.                     GTLV_Selected, netlistActive,
  432.                     TAG_DONE);    
  433.  
  434.                 NetWorth();
  435.             }
  436.             }
  437.  
  438.         }
  439.         GF_UnlockGUI(netGUI);
  440.  
  441.         break;
  442.  
  443.     case GID_NETSAVE:
  444.         if (NetSave(fname) != TRUE) {
  445.             DisplayBeep(netWin->WScreen);
  446.             AmiAnnounce("Encountered trouble trying to save net file.");
  447.         }
  448.         break;
  449.     
  450.     case GID_NETSAVEAS:
  451.         GF_LockGUI(netGUI);
  452.         if (AmiGetFile(netGUI,netsaveASL,fname,100)) {
  453.  
  454.             if (NetSave(fname) != TRUE) {
  455.                 DisplayBeep(netWin->WScreen);
  456.                 AmiAnnounce("Encountered trouble trying to save net file.");
  457.             }
  458.  
  459.             DataAttachIcon(iconPath,"AC_NetWorth",fname);
  460.             GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETSAVE].gs_Gadget,
  461.                 GA_Disabled, FALSE,
  462.                 TAG_DONE);
  463.  
  464.             sprintf(nettitle,"Net Worth Analysis: %s",netsaveASL->fr_File);
  465.             SetWindowTitles(netWin,nettitle,(UBYTE *)-1);
  466.         }
  467.         GF_UnlockGUI(netGUI);
  468.  
  469.         break;
  470.  
  471.     case GID_NETOPEN:
  472.         GF_LockGUI(netGUI);
  473.         if (AmiGetFile(netGUI,netloadASL,fname,100)) {
  474.  
  475.             GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETLIST].gs_Gadget,
  476.                 GTLV_Labels, ~0,
  477.                 TAG_DONE);
  478.  
  479.             NetFreeList();
  480.             sprintf(nettitle,"Net Worth Analysis: %s",netloadASL->fr_File);
  481.             SetWindowTitles(netWin,nettitle,(UBYTE *)-1);
  482.             
  483.             if (NetLoad(fname) != TRUE) {
  484.                 DisplayBeep(netWin->WScreen);
  485.                 AmiAnnounce("Encountered trouble trying to load net file.");
  486.             }
  487.  
  488.             GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETSAVE].gs_Gadget,
  489.                 GA_Disabled, FALSE,
  490.                 TAG_DONE);
  491.  
  492.             GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETSAVEAS].gs_Gadget,
  493.                 GA_Disabled, FALSE,
  494.                 TAG_DONE);
  495.  
  496.             GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETLIST].gs_Gadget,
  497.                 GTLV_Labels, &netList,
  498.                 GTLV_Selected, ~0,
  499.                 TAG_DONE);
  500.  
  501.             netlistActive = -1;
  502.             memset(&netw,0,sizeof(netNode));
  503.             NetUpdateLocal(&netw);
  504.             NetWorth();
  505.             NetDisableGads(TRUE);
  506.         }
  507.         GF_UnlockGUI(netGUI);
  508.         break;
  509.  
  510.     case GID_NETREMOVE:
  511.         /* detach and modify list */
  512.         GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETLIST].gs_Gadget,
  513.             GTLV_Labels, ~0,
  514.             TAG_DONE);
  515.             
  516.         net = (netNode *)DataOrd2Node(&netList,netlistActive);
  517.  
  518.         if (net->node.ln_Succ == (struct Node *)&netList.lh_Tail) 
  519.             netlistActive--;
  520.  
  521.         Remove(net);
  522.         FreeVec(net);
  523.                             
  524.         GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETLIST].gs_Gadget,
  525.             GTLV_Labels, &netList,
  526.             GTLV_Selected, (IsListEmpty(&netList))?~0:netlistActive,
  527.             TAG_DONE);        
  528.  
  529.         if (netlistActive == -1) {
  530.             memset(&netw,0,sizeof(netNode));
  531.             NetUpdateLocal(&netw);
  532.         }
  533.         else    {
  534.             nett = (netNode *)DataOrd2Node(&netList,netlistActive);
  535.             NetUpdateLocal(nett);
  536.             GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETTYPE].gs_Gadget,
  537.                 GTCY_Active, nett->actype,
  538.                 TAG_DONE);    
  539.         }
  540.  
  541.         if (IsListEmpty(&netList))
  542.             NetDisableGads(TRUE);
  543.  
  544.         netEntries--;
  545.         NetWorth();
  546.         break;
  547.  
  548.     case GID_NETCANCEL:
  549.         done = TRUE;
  550.         break;
  551.  
  552.  }
  553.  
  554.  GF_ReplyIMsg(imsg);
  555.  return (done);
  556. }
  557.  
  558. /****************************************************
  559. * NetInit()
  560. *
  561. *    Set up some globals
  562. *****************************************************/
  563. BOOL NetInit(void)
  564. {
  565.  amountType zero = 0;
  566.  
  567.  netdecimal = usrAccount.decimal;
  568.  
  569.  sprintf(nettitle,"Net Worth Analysis: untitled.ACnet");
  570.  SetWindowTitles(netWin,nettitle,(UBYTE *)-1);
  571.  
  572.  NewList (&netList);
  573.  
  574.  netlistActive = -1;
  575.  netEntries = 0;
  576.  
  577.  GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETLIST].gs_Gadget,
  578.             GTLV_Labels, &netList,
  579.             GTLV_Selected,~0,
  580.             TAG_DONE);
  581.  
  582.  GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETSAVE].gs_Gadget,
  583.     GA_Disabled, TRUE,
  584.     TAG_DONE);
  585.  
  586.  GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETSAVEAS].gs_Gadget,
  587.     GA_Disabled, TRUE,
  588.     TAG_DONE);
  589.  
  590.  sumtype = NETSTATE;
  591.  GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETREPTYPE].gs_Gadget,
  592.     GTCY_Active, sumtype,
  593.     TAG_DONE);
  594.  
  595.  localnetbal = NETSTATE;
  596.  GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETACCBAL].gs_Gadget,
  597.     GTCY_Active, localnetbal,
  598.     TAG_DONE);
  599.  
  600.  NetDisableGads(TRUE);
  601.  
  602.  /* clear out text gadgets */
  603.  DataBuildAmnt(TRUE,&zero,cbal);
  604.  DataBuildAmnt(TRUE,&zero,sbal);
  605.  DataBuildAmnt(TRUE,&zero,ltax);
  606.  DataBuildAmnt(TRUE,&zero,repdebit);
  607.  DataBuildAmnt(TRUE,&zero,repcredit);
  608.  DataBuildAmnt(TRUE,&zero,networth);
  609.  DataBuildAmnt(TRUE,&zero,nettax);
  610.  
  611. /*
  612.  GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETCBAL].gs_Gadget,
  613.     GTTX_Text,cbal,
  614.     TAG_DONE);
  615. */
  616.  
  617.  GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETSBAL].gs_Gadget,
  618.     GTTX_Text,sbal,
  619.     TAG_DONE);
  620.  
  621.  GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETLOCALTAX].gs_Gadget,
  622.     GTTX_Text,ltax,
  623.     TAG_DONE);
  624.  
  625.  GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETREPCREDIT].gs_Gadget,
  626.     GTTX_Text,repcredit,
  627.     TAG_DONE);
  628.  
  629.  GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETREPDEBIT].gs_Gadget,
  630.     GTTX_Text,repdebit,
  631.     TAG_DONE);
  632.  
  633.  GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETWORTH].gs_Gadget,
  634.     GTTX_Text,networth,
  635.     TAG_DONE);
  636.  
  637.  GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETTAX].gs_Gadget,
  638.     GTTX_Text,nettax,
  639.     TAG_DONE);
  640.  
  641.  
  642.  return (TRUE);
  643. }
  644.  
  645. /****************************************************
  646. * NetDisableGads()
  647. *
  648. *    Disable/Enable extra gadgets
  649. *****************************************************/
  650. void NetDisableGads(BOOL dis)
  651. {
  652.  
  653.  
  654.  GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETREMOVE].gs_Gadget,
  655.     GA_Disabled, dis,
  656.     TAG_DONE);
  657.  
  658.  GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETTYPE].gs_Gadget,
  659.     GA_Disabled, dis,
  660.     TAG_DONE);
  661.  
  662. }
  663.  
  664. /****************************************************
  665. * NetAddNode()
  666. *
  667. *    Add a node to the net list
  668. *****************************************************/
  669. netNode *NetAddNode(netNode *net)
  670. {
  671.  netNode *temp;
  672.  
  673.  temp = (netNode *)AllocVec(sizeof(netNode),MEMF_CLEAR);
  674.  if (temp == NULL)
  675.     return(NULL);
  676.  
  677.  memcpy(temp,net,sizeof(netNode));
  678.  temp->node.ln_Name = temp->acname;
  679.  AddTail(&netList,temp);
  680.  
  681.  return (temp);
  682. }
  683.  
  684. /*****************************************************
  685. * NetFreeList()
  686. *
  687. *    Free a node 
  688. ******************************************************/
  689. void NetFreeList(void)
  690. {
  691.  netNode *temp = (netNode*)netList.lh_Head, *next;
  692.  
  693.  if (IsListEmpty(&netList))
  694.     return;
  695.  
  696.  while ( (next=(netNode*)temp->node.ln_Succ)) {
  697.     FreeVec(temp);
  698.     temp = next;
  699.  }
  700. }
  701.  
  702.  
  703. /**************************************************************************
  704. * NetSave()
  705. *
  706. *    saves a net file
  707. ***************************************************************************/
  708. BOOL NetSave (char *fname)
  709. {
  710.  netNode *temp = (netNode *)netList.lh_Head, *next;
  711.  FILE *file;
  712.  
  713.  if (IsListEmpty(&netList))
  714.     return(TRUE);
  715.  
  716.  if ( (file = fopen(fname,"w")) == NULL)
  717.     return (FALSE);
  718.  
  719.  while ( (next = (netNode *)(temp->node.ln_Succ)) ) {
  720.         fprintf(file,"%s %s",temp->acname, (temp->actype==NETCREDIT)?"CREDIT":"DEBIT");
  721.         if (temp->node.ln_Succ != NULL)
  722.             fprintf(file,"\n");
  723.         temp = next;
  724.  }
  725.  
  726.  fclose(file);
  727.  return (TRUE);
  728. }
  729.  
  730. /**************************************************************************
  731. * netLoad()
  732. *
  733. *    Loads a net file
  734. ***************************************************************************/
  735. BOOL NetLoad (char *fname)
  736. {
  737.  char fstr[100];
  738.  char type[100];
  739.  char response[200];
  740.  netNode net;
  741.  FILE *file;
  742.  
  743.  NewList(&netList);
  744.  netEntries = 0;
  745.  
  746.  if ( (file = fopen(fname,"r")) == NULL)
  747.     return (FALSE);
  748.  
  749.  while ( fscanf(file,"%s %s",fstr,type) != EOF) {
  750.  
  751.         sprintf(response,"Account already loaded:[%s]\n",fstr);
  752.         if (DataIsUnique(netGUI,&netList,fstr,TRUE,response) == TRUE) {
  753.         
  754.             if (DataSummarize(fstr,&net) != TRUE) {
  755.                 DisplayBeep(netWin->WScreen);
  756.                 sprintf(response,"Failed to summarize [%s]\n",fstr);
  757.                 AmiAnnounce(response);
  758.             }
  759.             else {
  760.                 /* convert the balances to OUR decimal format */
  761.                 if (net.balances.decimal != usrAccount.decimal) {
  762.                     DataBalConvert( &net.balances.taxdeductcurr,
  763.                         net.balances.decimal,usrAccount.decimal);
  764.                     DataBalConvert( &net.balances.taxdeductstate,
  765.                         net.balances.decimal,usrAccount.decimal);
  766.                     DataBalConvert( &net.balances.currAmnt,
  767.                         net.balances.decimal,usrAccount.decimal);
  768.                     DataBalConvert( &net.balances.stateAmnt,
  769.                         net.balances.decimal,usrAccount.decimal);
  770.                 }
  771.         
  772.                 if (strcmpi(type,"debit") == 0)
  773.                     net.actype = NETDEBIT;
  774.                 else    net.actype = NETCREDIT;
  775.     
  776.                 NetAddNode(&net);
  777.  
  778.                 netEntries++;
  779.             }
  780.         }
  781.  }
  782.  
  783.  fclose(file);
  784.  return (TRUE);
  785. }
  786.  
  787. /*****************************************************************
  788. * NetWorth
  789. *
  790. *     Calculate total worth, update graphics
  791. ******************************************************************/
  792. void NetWorth(void)
  793. {
  794.  netNode *temp = (netNode*)netList.lh_Head, *next;
  795.  amountType zero = 0;
  796.  balanceType repcr, repdeb, nw, nt;
  797.  
  798.  DataInitBal(DEPOSITTYPE,&zero,&repcr);
  799.  DataInitBal(DEPOSITTYPE,&zero,&repdeb);
  800.  DataInitBal(DEPOSITTYPE,&zero,&nw);
  801.  DataInitBal(DEPOSITTYPE,&zero,&nt);
  802.  
  803.  if (IsListEmpty(&netList) != TRUE) {
  804.      while ( (next=(netNode*)temp->node.ln_Succ)) {
  805.         switch (temp->actype) {
  806.             case NETCREDIT:
  807.                 switch (sumtype) {
  808.                     case NETCURR:
  809.                         DataBalAddBal(netdecimal, &repcr,
  810.                             &temp->balances.currAmnt, &repcr);
  811.                         DataBalAddBal(netdecimal, &nt,
  812.                             &temp->balances.taxdeductcurr, &nt);
  813.                         break;
  814.  
  815.                     case NETSTATE:
  816.                         DataBalAddBal(netdecimal, &repcr,
  817.                             &temp->balances.stateAmnt, &repcr);
  818.                         DataBalAddBal(netdecimal, &nt,
  819.                             &temp->balances.taxdeductstate, &nt);
  820.                         break;
  821.                 }
  822.                 break;
  823.  
  824.             case NETDEBIT:
  825.                 switch (sumtype) {
  826.                     case NETCURR:
  827.                         DataBalAddBal(netdecimal, &repdeb,
  828.                             &temp->balances.currAmnt, &repdeb);
  829.                         DataBalAddBal(netdecimal, &nt,
  830.                             &temp->balances.taxdeductcurr, &nt);
  831.                         break;
  832.  
  833.                     case NETSTATE:
  834.                         DataBalAddBal(netdecimal, &repdeb,
  835.                             &temp->balances.stateAmnt, &repdeb);
  836.                         DataBalAddBal(netdecimal, &nt,
  837.                             &temp->balances.taxdeductstate, &nt);
  838.                         break;
  839.                 }
  840.                 break;
  841.         }
  842.         temp = next;
  843.      }
  844.  
  845.     repdeb.neg = !repdeb.neg;
  846.     DataBalAddBal(netdecimal,&nw, &repcr, &repdeb);
  847.     repdeb.neg = !repdeb.neg;
  848.  }
  849.  
  850.  /* build strings */
  851.  DataBuildBal(netdecimal,&repdeb,repdebit);
  852.  DataBuildBal(netdecimal,&repcr,repcredit);
  853.  DataBuildBal(netdecimal,&nw,networth);
  854.  DataBuildBal(netdecimal,&nt,nettax);
  855.  
  856.  /* update gadgets */
  857.  GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETREPCREDIT].gs_Gadget,
  858.     GTTX_Text,repcredit,
  859.     TAG_DONE);
  860.  
  861.  GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETREPDEBIT].gs_Gadget,
  862.     GTTX_Text,repdebit,
  863.     TAG_DONE);
  864.  
  865.  GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETWORTH].gs_Gadget,
  866.     GTTX_Text,networth,
  867.     TAG_DONE);
  868.  
  869.  GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETTAX].gs_Gadget,
  870.     GTTX_Text,nettax,
  871.     TAG_DONE);
  872. }
  873.  
  874. /*****************************************************************
  875. * NetUpdateLocal
  876. *
  877. *    Calcs local balances for selected account
  878. ******************************************************************/
  879. void NetUpdateLocal(netNode *net)
  880. {
  881.  
  882.  /* build strings */
  883.  if (localnetbal == NETSTATE) {
  884.     DataBuildBal(netdecimal,&net->balances.stateAmnt,sbal);
  885.     DataBuildBal(netdecimal,&net->balances.taxdeductstate,ltax);
  886.  }
  887.  else    {
  888.     DataBuildBal(netdecimal,&net->balances.currAmnt,sbal);
  889.     DataBuildBal(netdecimal,&net->balances.taxdeductcurr,ltax);
  890.  }
  891.  
  892.  /* GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETCBAL].gs_Gadget,
  893.     GTTX_Text, cbal,
  894.     TAG_DONE);
  895.  */
  896.  
  897.  GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETSBAL].gs_Gadget,
  898.     GTTX_Text, sbal,
  899.     TAG_DONE);
  900.  
  901.  GF_SetGadgetAttrs(netGUI,NETgadgetspecs[GID_NETLOCALTAX].gs_Gadget,
  902.     GTTX_Text, ltax,
  903.     TAG_DONE);
  904. }
  905.