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

  1. /* acctPanel.c 
  2.  *
  3.  *  defines the GUIFront characteristics of the acct account panel 
  4.  */
  5.   
  6. #include <stdio.h>  
  7. #include <intuition/gadgetclass.h>
  8. #include "amiCheck.h"
  9. #include "regGadget.h"
  10. #include "acctPanel.h"
  11. #include "dataBase.h"
  12. #include <string.h>
  13.  
  14. /* prototypes */
  15. BOOL AcctPHandleGadget(struct IntuiMessage *);
  16. BOOL AcctPHandleGadgetDown(struct IntuiMessage *);
  17. void AcctInit(BOOL);
  18. void AcctSlideDecimal(ULONG);
  19. void AcctConvAmnt(ULONG);
  20. BOOL AcctGoodbye(struct IntuiMessage *, accntState *);
  21.  
  22. BOOL acctretval,newacct;
  23. ExtErrorData AcctExtData;
  24. GUIFront *acctGUI;
  25. accntState tempAcct;
  26. struct Window *acctWin;
  27.  
  28. struct TagItem decimalTags[] = {
  29.     GTSL_Min, 0,
  30.     GTSL_Max, MAXDECIMAL,
  31.     GTSL_Level, 2,
  32.     GA_Immediate, TRUE,
  33.     TAG_DONE,
  34. };
  35.  
  36. /* define gadgetspec */
  37. GadgetSpec ACPgadgetspecs[] = 
  38. {
  39.  
  40.     {STRING_KIND,20,1,{0,0,0,0,"Account _Number",NULL, GID_ACPACCT,
  41.         PLACETEXT_LEFT}, strNameTags, GS_DefaultTags | GS_NoHeightExtend},
  42.  
  43.     {STRING_KIND,20,1,{0,0,0,0,"_Bank Name",NULL, GID_ACPBANK,
  44.         PLACETEXT_LEFT}, strNameTags, GS_DefaultTags| GS_NoHeightExtend},
  45.  
  46.     {INTEGER_KIND,CHECKSIZE,1,{0,0,0,0,"C_heck Number",NULL, GID_ACPCHECK,
  47.         PLACETEXT_LEFT}, strCheckTags, GS_DefaultTags| GS_NoHeightExtend},
  48.  
  49.     {STRING_KIND,DATESIZE,1,{0,0,0,0,"Date O_pened",NULL, GID_ACPOPEN,
  50.         PLACETEXT_LEFT}, strDateTags, GS_DefaultTags| GS_NoHeightExtend},
  51.  
  52.     {STRING_KIND,DATESIZE,1,{0,0,0,0,"Date C_losed",NULL, GID_ACPCLOSE,
  53.         PLACETEXT_LEFT}, strDateTags, GS_DefaultTags| GS_NoHeightExtend},
  54.  
  55.     {STRING_KIND,AMNTSIZE,1,{0,0,0,0,"Initial _Deposit",NULL, GID_ACPBALANCE,
  56.         PLACETEXT_LEFT}, strAmntTags, GS_DefaultTags| GS_NoHeightExtend},
  57.  
  58.     {STRING_KIND,20,1,{0,0,0,0,"Account _Holder",NULL, GID_ACPHOLDER,
  59.         PLACETEXT_LEFT}, strNameTags, GS_DefaultTags| GS_NoHeightExtend},
  60.  
  61.     {CHECKBOX_KIND,0,0,{0,0,0,0,"Clo_sed",NULL, GID_ACPCLOSED,
  62.         PLACETEXT_LEFT}, NULL, GS_DefaultTags},
  63.  
  64.         {BUTTON_KIND,0,0,{0,0,0,0,"_OK", NULL, GID_ACPOK,         
  65.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  66.  
  67.         {BUTTON_KIND,0,0,{0,0,0,0,"_Cancel", NULL, GID_ACPCANCEL,        
  68.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  69.  
  70.     {INTEGER_KIND,0,0,{0,0,0,0,"Decima_l",NULL,GID_ACPDECIMAL,
  71.         PLACETEXT_LEFT},TxtInt,GS_DefaultTags},
  72.     
  73.     {SLIDER_KIND,0,0,{0,0,0,0,NULL,NULL,GID_ACPDECSLIDE,
  74.         PLACETEXT_LEFT},decimalTags,GS_DefaultTags},
  75. };
  76.  
  77. /* set up array of pointers to our specs */
  78. GadgetSpec *ACP_AcctSpecs[] =
  79. {
  80.         &ACPgadgetspecs[0],
  81.         &ACPgadgetspecs[1],
  82.         &ACPgadgetspecs[2],
  83.         &ACPgadgetspecs[3],
  84.         &ACPgadgetspecs[4],
  85.         &ACPgadgetspecs[5],
  86.         &ACPgadgetspecs[6],
  87.         &ACPgadgetspecs[7],
  88.         &ACPgadgetspecs[8],
  89.     &ACPgadgetspecs[9],
  90.         &ACPgadgetspecs[10],
  91.     &ACPgadgetspecs[11],
  92.            NULL,
  93. };
  94.  
  95.  
  96. /* define the layout of this panel */
  97. ULONG ACP_AcctPanel[] =
  98. {
  99.    GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
  100.  
  101.    GUIL_HorizGroup, 1,
  102.         GUIL_Flags, GUILF_PropShare | GUILF_EqualHeight,
  103.     GUIL_FrameType, GUILFT_Recess,
  104.         
  105.     GUIL_VertGroup, 1,
  106.         GUIL_Flags, GUILF_LabelAlign | GUILF_PropShare | GUILF_EqualWidth,
  107.         GUIL_FrameType, GUILFT_Ridge,
  108.         GUIL_FrameHeadline, "Bank Information",
  109.  
  110.         GUIL_GadgetSpecID, GID_ACPHOLDER,
  111.         GUIL_GadgetSpecID, GID_ACPACCT,
  112.         GUIL_GadgetSpecID, GID_ACPBANK,
  113.         GUIL_GadgetSpecID, GID_ACPOPEN,
  114.     TAG_DONE,
  115.     
  116.     GUIL_VertGroup, 1,
  117.         GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
  118.  
  119.         GUIL_VertGroup, 1,
  120.             GUIL_Flags, GUILF_LabelAlign | GUILF_EqualWidth,
  121.             GUIL_FrameType, GUILFT_Ridge,
  122.             GUIL_FrameHeadline, "Account Defaults",
  123.         
  124.             GUIL_GadgetSpecID, GID_ACPCHECK,
  125.             GUIL_GadgetSpecID, GID_ACPBALANCE,
  126.  
  127.             GUIL_HorizGroup,0,
  128.                 GUIL_GadgetSpecID, GID_ACPDECIMAL,
  129.                 GUIL_GadgetSpecID, GID_ACPDECSLIDE,
  130.             TAG_DONE,
  131.  
  132.         TAG_DONE,
  133.  
  134.         GUIL_VertGroup,1,
  135.             GUIL_Flags, GUILF_LabelAlign | GUILF_EqualWidth,
  136.             GUIL_FrameType, GUILFT_Recess,
  137.  
  138.             GUIL_GadgetSpecID, GID_ACPCLOSED,
  139.             GUIL_GadgetSpecID, GID_ACPCLOSE,
  140.         TAG_DONE,
  141.  
  142.     TAG_DONE, 
  143.     TAG_DONE,
  144.     
  145.     GUIL_HorizGroup,1,
  146.         GUIL_Flags, GUILF_EqualSize | GUILF_EqualWidth,
  147.         
  148.            GUIL_GadgetSpecID, GID_ACPOK,
  149.            GUIL_GadgetSpecID, GID_ACPCANCEL,
  150.            
  151.     TAG_DONE,   
  152.            
  153. TAG_DONE,
  154. };
  155.  
  156.  
  157. /****************************************************
  158. * AcctGUI ()
  159. *
  160. *    Creates the GUI for the sort panel.
  161. *****************************************************/
  162. BOOL AcctGUI(char *str, BOOL newone)
  163. {
  164.  BOOL done = FALSE;
  165.  BOOL replyval;
  166.  ULONG signal;
  167.      
  168.    AmiLock();
  169.  
  170.         
  171.         GF_SetGUIAttr(acctGUI,GUI_OpenGUI,TRUE,TAG_DONE);
  172.          /* grab window */
  173.          GF_GetGUIAttr(acctGUI,GUI_Window,&acctWin,TAG_DONE);
  174.         SetWindowTitles(acctWin,str,(UBYTE *)-1);
  175.  
  176.         AcctInit(newone);
  177.  
  178.                 /* Process input events */
  179.                 while (!done)
  180.                 {
  181.                     struct IntuiMessage *imsg;
  182.  
  183.                     /* Wait for an event to occur */
  184.  
  185.                     signal = GF_Wait(guiapp,AmigaGuideSignal(agc));
  186.             if (signal & AmigaGuideSignal(agc)) {
  187.             AmiHelpMsg();
  188.             continue;
  189.             }
  190.  
  191.                     /* We only bother to listen for CLOSEWINDOW events.
  192.                      * Of course, in a real application, you would be
  193.                      * examining the Class field for IDCMP_GADGETUP
  194.                      * messages and act accordingly.
  195.                      */
  196.  
  197.                     while (imsg = GF_GetIMsg(guiapp))
  198.                     {
  199.             replyval = TRUE;
  200.                         switch (imsg->Class) {
  201.                 case IDCMP_REFRESHWINDOW:
  202.                     RegRefresh(TRUE);
  203.                     break;
  204.  
  205.                                 case IDCMP_CLOSEWINDOW:
  206.                     done = TRUE;
  207.                                         break;
  208.  
  209.                             case IDCMP_GADGETDOWN:
  210.                     replyval = FALSE;
  211.                     done=AcctPHandleGadgetDown(imsg);
  212.                     break;
  213.                 
  214.                 case IDCMP_MOUSEMOVE:
  215.                     AcctSlideDecimal(imsg->Code);
  216.                     break;
  217.  
  218.                 case IDCMP_GADGETUP:
  219.                     replyval = FALSE;
  220.                     done=AcctPHandleGadget(imsg);
  221.                     break;
  222.             
  223.                 case IDCMP_RAWKEY:
  224.                     AmiHelpKey(imsg,ACCOUNT_PANEL);
  225.                     break;
  226.                         }
  227.                                      
  228.                               
  229.                         if (replyval) GF_ReplyIMsg(imsg);
  230.                     }
  231.                 }
  232.  
  233.  
  234.    GF_SetGUIAttr(acctGUI, GUI_OpenGUI, FALSE, TAG_DONE);            
  235.    AmiUnlock();
  236.  
  237.  return (acctretval);
  238. }
  239.  
  240.  
  241. /**************************************************
  242. * AcctSlideDecimal()
  243. *
  244. *     control decimal slide gadget
  245. ***************************************************/
  246. void AcctSlideDecimal(ULONG decim)
  247. {
  248.  AcctConvAmnt(decim);
  249.  tempAcct.decimal = decim;
  250.  
  251.  /* update decimal */
  252.  GF_SetGadgetAttrs(acctGUI, ACP_AcctSpecs[GID_ACPDECIMAL]->gs_Gadget,
  253.     GTIN_Number, decim,
  254.     TAG_DONE);
  255. }
  256.  
  257. /***************************************************
  258. * AcctPHandleGadgetDown()
  259. *
  260. *    Handles gadget down events for this panel
  261. ****************************************************/
  262. BOOL  AcctPHandleGadgetDown(struct IntuiMessage *imsg)
  263. {
  264.  BOOL done = FALSE;
  265.  struct Gadget *gad =  (struct Gadget *)(imsg->IAddress);
  266.  UWORD code = imsg->Code;
  267.  
  268.  switch (gad->GadgetID) {
  269.  
  270.     case GID_ACPDECSLIDE:
  271.         AcctSlideDecimal(code);
  272.         break;
  273.  }
  274.  
  275.  GF_ReplyIMsg(imsg);
  276.  return done;    
  277. }
  278.  
  279. /***************************************************
  280. * AcctPHandleGadget()
  281. *
  282. *    Handles gadget events for this panel
  283. ****************************************************/
  284. BOOL  AcctPHandleGadget(struct IntuiMessage *imsg)
  285. {
  286.  BOOL done = FALSE;
  287.  struct Gadget *gad =  (struct Gadget *)(imsg->IAddress);
  288.  UWORD code = imsg->Code;
  289.  amountType zero=0;
  290.  balanceType origbal;
  291.  ULONG decim;
  292.  char newamntstr[AMNTSIZE];
  293.  char newdatestr[DATESIZE];
  294.  
  295.  switch (gad->GadgetID) {
  296.  
  297.     case GID_ACPHOLDER:
  298.         strncpy(tempAcct.holder,((struct StringInfo *)gad->SpecialInfo)->Buffer, STRINGSIZE);
  299.         break;
  300.  
  301.     case GID_ACPACCT:
  302.         strncpy(tempAcct.accnt,((struct StringInfo *)gad->SpecialInfo)->Buffer, STRINGSIZE);
  303.         break;
  304.  
  305.     case GID_ACPBANK:
  306.         strncpy(tempAcct.bank,((struct StringInfo *)gad->SpecialInfo)->Buffer, STRINGSIZE);
  307.         break;
  308.  
  309.     case GID_ACPCHECK:
  310.         tempAcct.checknumber = (UWORD)((struct StringInfo*)gad->SpecialInfo)->LongInt;
  311.         break;
  312.  
  313.     case GID_ACPBALANCE:
  314.         /* special case return early.... activated gadget */
  315.         decim = usrAccount.decimal;
  316.         usrAccount.decimal = tempAcct.decimal;
  317.         if (!DataVerifyAmnt(((struct StringInfo*)gad->SpecialInfo)->Buffer,newamntstr) ) {
  318.             usrAccount.decimal = decim;
  319.             DisplayBeep(acctWin->WScreen);
  320.             DataAnnounceAmount(acctGUI);
  321.             GF_ReplyIMsg(imsg);
  322.             DataSitNSpin(ACP_AcctSpecs[GID_ACPBALANCE]->gs_Gadget,acctWin);
  323.             return (done);
  324.         }
  325.          else {
  326.             DataStoreAmnt(&tempAcct.beginAmount,newamntstr );
  327.             GF_SetGadgetAttrs(acctGUI,ACP_AcctSpecs[GID_ACPBALANCE]->gs_Gadget,
  328.                 GTST_String,newamntstr,
  329.                 TAG_DONE);
  330.             usrAccount.decimal = decim;
  331.         }    
  332.         break;
  333.  
  334.     case GID_ACPOPEN:
  335.         /* special case return early.... activated gadget */
  336.         if (!DataVerifyDate(((struct StringInfo*)gad->SpecialInfo)->Buffer,newdatestr) ) {
  337.             DisplayBeep(acctWin->WScreen);
  338.             DataAnnounceDate(acctGUI);
  339.             GF_ReplyIMsg(imsg);
  340.             DataSitNSpin(ACP_AcctSpecs[GID_ACPOPEN]->gs_Gadget,acctWin);
  341.             return (done);
  342.         }
  343.          else {
  344.             DataStoreDate(&tempAcct.openDate,newdatestr );
  345.             GF_SetGadgetAttrs(acctGUI,ACP_AcctSpecs[GID_ACPOPEN]->gs_Gadget,
  346.                 GTST_String,newdatestr,
  347.                 TAG_DONE);
  348.         }
  349.         break;
  350.     
  351.     case GID_ACPCLOSE:
  352.         /* special case return early.... activated gadget */
  353.         if (!DataVerifyDate(((struct StringInfo*)gad->SpecialInfo)->Buffer,newdatestr) ) {
  354.             DisplayBeep(acctWin->WScreen);
  355.             DataAnnounceDate(acctGUI);
  356.             GF_ReplyIMsg(imsg);
  357.             DataSitNSpin(ACP_AcctSpecs[GID_ACPCLOSE]->gs_Gadget,acctWin);
  358.             return (done);
  359.         }
  360.          else {
  361.             DataStoreDate(&tempAcct.closeDate,newdatestr );
  362.             GF_SetGadgetAttrs(acctGUI,ACP_AcctSpecs[GID_ACPCLOSE]->gs_Gadget,
  363.                 GTST_String,newdatestr,
  364.                 TAG_DONE);
  365.         }
  366.         break;
  367.  
  368.     case GID_ACPCLOSED:
  369.         tempAcct.closed = code;
  370.         GF_SetGadgetAttrs (acctGUI, ACP_AcctSpecs[GID_ACPCLOSE]->gs_Gadget,
  371.             GA_Disabled, !tempAcct.closed,
  372.             TAG_DONE);
  373.         break;
  374.  
  375.     case GID_ACPDECIMAL:
  376.         decim = ((struct StringInfo*)gad->SpecialInfo)->LongInt;
  377.         if (decim > MAXDECIMAL) {
  378.             DisplayBeep(acctWin->WScreen);
  379.             DataAnnounce(acctGUI, "Too many decimal places");
  380.             GF_ReplyIMsg(imsg);
  381.             DataSitNSpin(ACP_AcctSpecs[GID_ACPDECIMAL]->gs_Gadget,acctWin);
  382.             return (done);
  383.         }
  384.         else {
  385.     
  386.             /* update in real-time our displayed amount for the user's
  387.                 feedback */
  388.             AcctConvAmnt(decim);
  389.             tempAcct.decimal = decim;
  390.  
  391.             /* update slider too */
  392.             GF_SetGadgetAttrs(acctGUI, ACP_AcctSpecs[GID_ACPDECSLIDE]->gs_Gadget,
  393.                 GTSL_Level, decim,
  394.                 TAG_DONE);
  395.         }
  396.         break;
  397.  
  398.     case GID_ACPCANCEL:
  399.         done = TRUE;
  400.         break;
  401.                          
  402.     case GID_ACPOK:
  403.         if (AcctGoodbye(imsg, &tempAcct)) {
  404.             amiChangedItems = TRUE;
  405.  
  406.             /* reflect this in the current balance */
  407.             if (newacct) 
  408.                 DataInitBal(DEPOSITTYPE,&zero,&origbal);
  409.             else  {
  410.                 memcpy(&origbal,&amntState.currAmnt,sizeof(balanceType));
  411.                 DataAddBal(WITHDRAWALTYPE,&usrAccount.beginAmount,&origbal);
  412.             }
  413.  
  414.             DataAddBal(DEPOSITTYPE,&tempAcct.beginAmount,&origbal);
  415.             memcpy(&amntState.currAmnt,&origbal,sizeof(balanceType));
  416.             memcpy(&usrAccount, &tempAcct, sizeof(accntState));
  417.             acctretval = TRUE;
  418.             done = TRUE;
  419.         }
  420.         else return (FALSE);
  421.          break;
  422.  }
  423.  
  424.  GF_ReplyIMsg(imsg);
  425.  return (done);
  426. }
  427.  
  428. /****************************************************
  429. * AcctInit()
  430. *
  431. *    Set up some globals
  432. *****************************************************/
  433. void AcctInit(BOOL newone)
  434. {
  435.  char strdate[DATESIZE];
  436.  char stramnt[AMNTSIZE];
  437.  UBYTE decim = usrAccount.decimal;
  438.  
  439.  /* grab window */
  440.  GF_GetGUIAttr(acctGUI,GUI_Window,&acctWin,TAG_DONE);
  441.  
  442.  acctretval = FALSE;
  443.  newacct = newone;
  444.  if (newone) {
  445.     usrAccount.decimal = 2;
  446.            memset(&tempAcct,0,sizeof(accntState));
  447.     tempAcct.checknumber = 1;
  448.     tempAcct.decimal = 2;
  449.     memcpy(&tempAcct.openDate,&currDate,sizeof(dateType));
  450.     memcpy(&tempAcct.closeDate,&currDate,sizeof(dateType));
  451.  }
  452.  else      memcpy(&tempAcct, &usrAccount,sizeof(accntState));
  453.  
  454.  GF_SetGadgetAttrs (acctGUI, ACP_AcctSpecs[GID_ACPBANK]->gs_Gadget,
  455.     GTST_String, tempAcct.bank,
  456.     TAG_DONE);
  457.  
  458.  GF_SetGadgetAttrs (acctGUI, ACP_AcctSpecs[GID_ACPACCT]->gs_Gadget,
  459.     GTST_String, tempAcct.accnt,
  460.     TAG_DONE);
  461.  
  462.  GF_SetGadgetAttrs (acctGUI, ACP_AcctSpecs[GID_ACPHOLDER]->gs_Gadget,
  463.     GTST_String, tempAcct.holder,
  464.     TAG_DONE);
  465.  
  466.  DataBuildAmnt(TRUE,&tempAcct.beginAmount,stramnt);
  467.  GF_SetGadgetAttrs (acctGUI, ACP_AcctSpecs[GID_ACPBALANCE]->gs_Gadget,
  468.     GTST_String,stramnt,
  469.     TAG_DONE);
  470.  
  471.  DataBuildDate(&tempAcct.openDate,strdate);
  472.  GF_SetGadgetAttrs (acctGUI, ACP_AcctSpecs[GID_ACPOPEN]->gs_Gadget,
  473.     GTST_String,strdate,
  474.     TAG_DONE);
  475.  
  476.  GF_SetGadgetAttrs (acctGUI, ACP_AcctSpecs[GID_ACPCLOSED]->gs_Gadget,
  477.     GTCB_Checked, tempAcct.closed,
  478.     TAG_DONE);
  479.  
  480.  GF_SetGadgetAttrs (acctGUI, ACP_AcctSpecs[GID_ACPCHECK]->gs_Gadget,
  481.     GTIN_Number, tempAcct.checknumber,
  482.     TAG_DONE);
  483.  
  484.  DataBuildDate(&tempAcct.closeDate,strdate);
  485.  GF_SetGadgetAttrs (acctGUI, ACP_AcctSpecs[GID_ACPCLOSE]->gs_Gadget,
  486.     GTST_String,strdate,
  487.     GA_Disabled, !tempAcct.closed,
  488.     TAG_DONE);
  489.  
  490.  GF_SetGadgetAttrs (acctGUI, ACP_AcctSpecs[GID_ACPDECIMAL]->gs_Gadget,
  491.     GTIN_Number, tempAcct.decimal,
  492.     GA_Disabled, !newone,
  493.     TAG_DONE);
  494.  
  495.  GF_SetGadgetAttrs (acctGUI, ACP_AcctSpecs[GID_ACPDECSLIDE]->gs_Gadget,
  496.     GTSL_Level, tempAcct.decimal,
  497.     GA_Disabled, !newone,
  498.     TAG_DONE);
  499.  
  500.  if (newone) usrAccount.decimal = decim;
  501. }
  502.  
  503. /*********************************************************
  504. * AcctGoodbye()
  505. *
  506. *    grabs strings
  507. **********************************************************/
  508. BOOL AcctGoodbye(struct IntuiMessage *imsg, accntState *temp)
  509. {
  510.  char *grab;
  511.  char newdatestr[DATESIZE+1];
  512.  char newamntstr[AMNTSIZE+1];
  513.  ULONG decim;
  514.  
  515.  /* check for "special" cases */
  516.  decim = usrAccount.decimal;
  517.  usrAccount.decimal = tempAcct.decimal;
  518.  grab = ((struct StringInfo *)(ACP_AcctSpecs[GID_ACPBALANCE]->gs_Gadget)->SpecialInfo)->Buffer;
  519.  if (!DataVerifyAmnt(grab,newamntstr) ) {
  520.     DisplayBeep(acctWin->WScreen);
  521.     DataAnnounceAmount(acctGUI);
  522.     GF_ReplyIMsg(imsg);
  523.     DataSitNSpin(ACP_AcctSpecs[GID_ACPBALANCE]->gs_Gadget,acctWin);
  524.     usrAccount.decimal = decim;
  525.     return (FALSE);
  526.  }
  527.  else {
  528.     DataStoreAmnt(&temp->beginAmount,newamntstr );
  529.     usrAccount.decimal = decim;
  530.  }    
  531.  
  532.  grab = ((struct StringInfo *)(ACP_AcctSpecs[GID_ACPOPEN]->gs_Gadget)->SpecialInfo)->Buffer;
  533.  if (!DataVerifyDate(grab,newdatestr) ) {
  534.     DisplayBeep(acctWin->WScreen);
  535.     DataAnnounceDate(acctGUI);
  536.     GF_ReplyIMsg(imsg);
  537.     DataSitNSpin(ACP_AcctSpecs[GID_ACPOPEN]->gs_Gadget,acctWin);
  538.     return (FALSE);
  539.  }
  540.  else {
  541.     DataStoreDate(&temp->openDate,newdatestr );
  542.  }
  543.  
  544. if (temp->closed) {
  545.  grab = ((struct StringInfo *)(ACP_AcctSpecs[GID_ACPCLOSE]->gs_Gadget)->SpecialInfo)->Buffer;
  546.  if (!DataVerifyDate(grab,newdatestr) ) {
  547.     DisplayBeep(acctWin->WScreen);
  548.     DataAnnounceDate(acctGUI);
  549.     GF_ReplyIMsg(imsg);
  550.     DataSitNSpin(ACP_AcctSpecs[GID_ACPCLOSE]->gs_Gadget,acctWin);
  551.     return (FALSE);
  552.  }
  553.  else {
  554.     DataStoreDate(&temp->closeDate,newdatestr );
  555.  }
  556. }
  557.  
  558.  /* grab basic strings */
  559.  temp->checknumber=(UWORD)((struct StringInfo*)(ACP_AcctSpecs[GID_ACPCHECK]->gs_Gadget)->SpecialInfo)->LongInt;
  560.  
  561.  grab = ((struct StringInfo *)(ACP_AcctSpecs[GID_ACPBANK]->gs_Gadget)->SpecialInfo)->Buffer;
  562.  strncpy(temp->bank,grab, STRINGSIZE);
  563.  
  564.  grab = ((struct StringInfo *)(ACP_AcctSpecs[GID_ACPHOLDER]->gs_Gadget)->SpecialInfo)->Buffer;
  565.  strncpy(temp->holder,grab, STRINGSIZE);
  566.  
  567.  grab = ((struct StringInfo *)(ACP_AcctSpecs[GID_ACPACCT]->gs_Gadget)->SpecialInfo)->Buffer;
  568.  strncpy(temp->accnt,grab, STRINGSIZE);
  569.  
  570.  return (TRUE);
  571. }
  572.  
  573. /**************************************************
  574. * AcctConvAmnt()
  575. *
  576. *    Convert the begin amount to the new format
  577. ***************************************************/
  578. void AcctConvAmnt(ULONG decim)
  579. {
  580.  balanceType temp;
  581.  amountType zero = 0;
  582.  char newamntstr[AMNTSIZE];    
  583.  UBYTE type, olddecimal;
  584.  
  585.  olddecimal = usrAccount.decimal;
  586.  usrAccount.decimal = tempAcct.decimal;
  587.  
  588.     /* obtain balance in our current form */
  589.     DataInitBal(DEPOSITTYPE, &tempAcct.beginAmount, &temp);
  590.  
  591.     /* now convert it */
  592.     DataBalConvert(&temp,tempAcct.decimal,decim);
  593.  
  594.  usrAccount.decimal = decim;
  595.      DataBalToAmnt(&temp,&type, &tempAcct.beginAmount);
  596.      DataBuildAmnt(TRUE,&tempAcct.beginAmount,newamntstr );
  597.  usrAccount.decimal = olddecimal;
  598.  
  599.  GF_SetGadgetAttrs(acctGUI,ACP_AcctSpecs[GID_ACPBALANCE]->gs_Gadget,
  600.     GTST_String,newamntstr,
  601.     TAG_DONE);
  602. }
  603.