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

  1. /* Amichecks arexx port! */
  2.  
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <libraries/asl.h>
  6. #include "amiCheck.h"
  7. #include "database.h"
  8. #include "libraries.h"
  9. #include "arexx.h"
  10. #include "regGadget.h"
  11.  
  12. extern char *quitstr;
  13.  
  14. void ArexxInit(void);
  15. BOOL ArexxHandleGadget(struct IntuiMessage *);
  16. BOOL ArexxGoodbye(struct IntuiMessage *);
  17. void AmiManageBalance(filterNode *find, entryNode *entry);
  18.  
  19. static entryNode new;
  20. static struct Window *arexxWin;
  21. GUIFront *arexxGUI;
  22. arexxNode copyMacros[MAXMACROS];
  23. static int catSel = 0;
  24.  
  25. static struct TagItem axgetfile[] = {
  26.     {ALT_Image, ALTI_GetFile},
  27.     {ALT_AslRequester, FALSE},
  28.     /*{GA_Immediate,TRUE},*/
  29.     {TAG_DONE},
  30. };
  31.  
  32. struct TagItem labeltags[] =
  33. {
  34.  {GTST_MaxChars,20},
  35.  {TAG_DONE},
  36. };
  37.  
  38. GadgetSpec AREXXgadgetspecs[] = 
  39. {
  40.     {STRING_KIND,18,0,{0,0,0,0,"Label 1:", NULL, GID_AXLABEL1,
  41.         PLACETEXT_LEFT},labeltags,GS_DefaultTags},
  42.     {STRING_KIND,18,0,{0,0,0,0,"Macro 1:", NULL, GID_AXFILE1,
  43.         PLACETEXT_LEFT},NULL,GS_DefaultTags},
  44.     {GETALT_KIND,0,0,{0,0,0,0,NULL, NULL, GID_AXGETFILE1,
  45.         PLACETEXT_LEFT},axgetfile,GS_DefaultTags},
  46.  
  47.     {STRING_KIND,18,0,{0,0,0,0,"Label 2:", NULL, GID_AXLABEL2,
  48.         PLACETEXT_LEFT},labeltags,GS_DefaultTags},
  49.     {STRING_KIND,18,0,{0,0,0,0,"Macro 2:", NULL, GID_AXFILE2,
  50.         PLACETEXT_LEFT},NULL,GS_DefaultTags},
  51.     {GETALT_KIND,0,0,{0,0,0,0,NULL, NULL, GID_AXGETFILE2,
  52.         PLACETEXT_LEFT},axgetfile,GS_DefaultTags},
  53.  
  54.     {STRING_KIND,18,0,{0,0,0,0,"Label 3:", NULL, GID_AXLABEL3,
  55.         PLACETEXT_LEFT},labeltags,GS_DefaultTags},
  56.     {STRING_KIND,18,0,{0,0,0,0,"Macro 3:", NULL, GID_AXFILE3,
  57.         PLACETEXT_LEFT},NULL,GS_DefaultTags},
  58.     {GETALT_KIND,0,0,{0,0,0,0,NULL, NULL, GID_AXGETFILE3,
  59.         PLACETEXT_LEFT},axgetfile,GS_DefaultTags},
  60.  
  61.     {STRING_KIND,18,0,{0,0,0,0,"Label 4:", NULL, GID_AXLABEL4,
  62.         PLACETEXT_LEFT},labeltags,GS_DefaultTags},
  63.     {STRING_KIND,18,0,{0,0,0,0,"Macro 4:", NULL, GID_AXFILE4,
  64.         PLACETEXT_LEFT},NULL,GS_DefaultTags},
  65.     {GETALT_KIND,0,0,{0,0,0,0,NULL, NULL, GID_AXGETFILE4,
  66.         PLACETEXT_LEFT},axgetfile,GS_DefaultTags},
  67.  
  68.     {STRING_KIND,18,0,{0,0,0,0,"Label 5:", NULL, GID_AXLABEL5,
  69.         PLACETEXT_LEFT},labeltags,GS_DefaultTags},
  70.     {STRING_KIND,18,0,{0,0,0,0,"Macro 5:", NULL, GID_AXFILE5,
  71.         PLACETEXT_LEFT},NULL,GS_DefaultTags},
  72.     {GETALT_KIND,0,0,{0,0,0,0,NULL, NULL, GID_AXGETFILE5,
  73.         PLACETEXT_LEFT},axgetfile,GS_DefaultTags},
  74.  
  75.     {STRING_KIND,18,0,{0,0,0,0,"Label 6:", NULL, GID_AXLABEL6,
  76.         PLACETEXT_LEFT},labeltags,GS_DefaultTags},
  77.     {STRING_KIND,18,0,{0,0,0,0,"Macro 6:", NULL, GID_AXFILE6,
  78.         PLACETEXT_LEFT},NULL,GS_DefaultTags},
  79.     {GETALT_KIND,0,0,{0,0,0,0,NULL, NULL, GID_AXGETFILE6,
  80.         PLACETEXT_LEFT},axgetfile,GS_DefaultTags},
  81.  
  82.     {STRING_KIND,18,0,{0,0,0,0,"Label 7:", NULL, GID_AXLABEL7,
  83.         PLACETEXT_LEFT},labeltags,GS_DefaultTags},
  84.     {STRING_KIND,18,0,{0,0,0,0,"Macro 7:", NULL, GID_AXFILE7,
  85.         PLACETEXT_LEFT},NULL,GS_DefaultTags},
  86.     {GETALT_KIND,0,0,{0,0,0,0,NULL, NULL, GID_AXGETFILE7,
  87.         PLACETEXT_LEFT},axgetfile,GS_DefaultTags},
  88.  
  89.     {STRING_KIND,18,0,{0,0,0,0,"Label 8:", NULL, GID_AXLABEL8,
  90.         PLACETEXT_LEFT},labeltags,GS_DefaultTags},
  91.     {STRING_KIND,18,0,{0,0,0,0,"Macro 8:", NULL, GID_AXFILE8,
  92.         PLACETEXT_LEFT},NULL,GS_DefaultTags},
  93.     {GETALT_KIND,0,0,{0,0,0,0,NULL, NULL, GID_AXGETFILE8,
  94.         PLACETEXT_LEFT},axgetfile,GS_DefaultTags},
  95.  
  96.     {STRING_KIND,18,0,{0,0,0,0,"Label 9:", NULL, GID_AXLABEL9,
  97.         PLACETEXT_LEFT},labeltags,GS_DefaultTags},
  98.     {STRING_KIND,18,0,{0,0,0,0,"Macro 9:", NULL, GID_AXFILE9,
  99.         PLACETEXT_LEFT},NULL,GS_DefaultTags},
  100.     {GETALT_KIND,0,0,{0,0,0,0,NULL, NULL, GID_AXGETFILE9,
  101.         PLACETEXT_LEFT},axgetfile,GS_DefaultTags},
  102.  
  103.     {STRING_KIND,18,0,{0,0,0,0,"Label 10:", NULL, GID_AXLABEL10,
  104.         PLACETEXT_LEFT},labeltags,GS_DefaultTags},
  105.     {STRING_KIND,18,0,{0,0,0,0,"Macro 10:", NULL, GID_AXFILE10,
  106.         PLACETEXT_LEFT},NULL,GS_DefaultTags},
  107.     {GETALT_KIND,0,0,{0,0,0,0,NULL, NULL, GID_AXGETFILE10,
  108.         PLACETEXT_LEFT},axgetfile,GS_DefaultTags},
  109.  
  110.     {BUTTON_KIND,0,0,{0,0,0,0,"_OK",NULL,GID_AXOK,
  111.         PLACETEXT_IN},NULL,GS_DefaultTags},
  112.     {BUTTON_KIND,0,0,{0,0,0,0,"_Cancel",NULL,GID_AXCANCEL,
  113.         PLACETEXT_IN},NULL,GS_DefaultTags},
  114.  
  115. };
  116.  
  117. GadgetSpec *AX_ArexxSpecs[] =
  118. {
  119.      &AREXXgadgetspecs[0],
  120.      &AREXXgadgetspecs[1],
  121.      &AREXXgadgetspecs[2],
  122.      &AREXXgadgetspecs[3],
  123.      &AREXXgadgetspecs[4],
  124.      &AREXXgadgetspecs[5],
  125.      &AREXXgadgetspecs[6],
  126.      &AREXXgadgetspecs[7],
  127.      &AREXXgadgetspecs[8],
  128.      &AREXXgadgetspecs[9],
  129.      &AREXXgadgetspecs[10],
  130.      &AREXXgadgetspecs[11],
  131.      &AREXXgadgetspecs[12],
  132.      &AREXXgadgetspecs[13],
  133.      &AREXXgadgetspecs[14],
  134.      &AREXXgadgetspecs[15],
  135.      &AREXXgadgetspecs[16],
  136.      &AREXXgadgetspecs[17],
  137.      &AREXXgadgetspecs[18],
  138.      &AREXXgadgetspecs[19],
  139.      &AREXXgadgetspecs[20],
  140.      &AREXXgadgetspecs[21],
  141.      &AREXXgadgetspecs[22],
  142.      &AREXXgadgetspecs[23],
  143.      &AREXXgadgetspecs[24],
  144.      &AREXXgadgetspecs[25],
  145.      &AREXXgadgetspecs[26],
  146.      &AREXXgadgetspecs[27],
  147.      &AREXXgadgetspecs[28],
  148.      &AREXXgadgetspecs[29],
  149.      &AREXXgadgetspecs[30],
  150.      &AREXXgadgetspecs[31],
  151.     NULL,
  152. };
  153.  
  154. ULONG AX_ArexxPanel[] =
  155. {
  156.   GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
  157.  
  158.   GUIL_HorizGroup,1,
  159.         GUIL_Flags, GUILF_EqualWidth | GUILF_EqualHeight,
  160.         GUIL_FrameType, GUILFT_Recess,
  161.  
  162.      GUIL_VertGroup,1,
  163.         GUIL_Flags, GUILF_LabelAlign | GUILF_EqualWidth,
  164.         
  165.     GUIL_VertGroup,0,
  166.         GUIL_Flags, GUILF_LabelAlign | GUILF_EqualWidth,
  167.         GUIL_GadgetSpecID, GID_AXLABEL1,
  168.         GUIL_HorizGroup,0,
  169.             GUIL_GadgetSpecID, GID_AXFILE1,
  170.             GUIL_GadgetSpecID, GID_AXGETFILE1,
  171.         TAG_DONE,
  172.     TAG_DONE,
  173.     GUIL_VertGroup,0,
  174.         GUIL_Flags, GUILF_LabelAlign | GUILF_EqualWidth,
  175.         GUIL_GadgetSpecID, GID_AXLABEL2,
  176.         GUIL_HorizGroup,0,
  177.             GUIL_GadgetSpecID, GID_AXFILE2,
  178.             GUIL_GadgetSpecID, GID_AXGETFILE2,
  179.         TAG_DONE,
  180.     TAG_DONE,
  181.  
  182.     GUIL_VertGroup,0,
  183.         GUIL_Flags, GUILF_LabelAlign | GUILF_EqualWidth,
  184.         GUIL_GadgetSpecID, GID_AXLABEL3,
  185.         GUIL_HorizGroup,0,
  186.             GUIL_GadgetSpecID, GID_AXFILE3,
  187.             GUIL_GadgetSpecID, GID_AXGETFILE3,
  188.         TAG_DONE,
  189.     TAG_DONE,
  190.  
  191.     GUIL_VertGroup,0,
  192.         GUIL_Flags, GUILF_LabelAlign | GUILF_EqualWidth,
  193.         GUIL_GadgetSpecID, GID_AXLABEL4,
  194.         GUIL_HorizGroup,0,
  195.             GUIL_GadgetSpecID, GID_AXFILE4,
  196.             GUIL_GadgetSpecID, GID_AXGETFILE4,
  197.         TAG_DONE,
  198.     TAG_DONE,
  199.  
  200.     GUIL_VertGroup,0,
  201.         GUIL_Flags, GUILF_LabelAlign | GUILF_EqualWidth,
  202.         GUIL_GadgetSpecID, GID_AXLABEL5,
  203.         GUIL_HorizGroup,0,
  204.             GUIL_GadgetSpecID, GID_AXFILE5,
  205.             GUIL_GadgetSpecID, GID_AXGETFILE5,
  206.         TAG_DONE,
  207.     TAG_DONE,
  208.  
  209.  
  210.      TAG_DONE,
  211.  
  212.      GUIL_VertGroup,1,
  213.         GUIL_Flags, GUILF_LabelAlign | GUILF_EqualWidth,
  214.  
  215.     GUIL_VertGroup,0,
  216.         GUIL_Flags, GUILF_LabelAlign | GUILF_EqualWidth,
  217.         GUIL_GadgetSpecID, GID_AXLABEL6,
  218.         GUIL_HorizGroup,0,
  219.             GUIL_GadgetSpecID, GID_AXFILE6,
  220.             GUIL_GadgetSpecID, GID_AXGETFILE6,
  221.         TAG_DONE,
  222.     TAG_DONE,
  223.     GUIL_VertGroup,0,
  224.         GUIL_Flags, GUILF_LabelAlign | GUILF_EqualWidth,
  225.         GUIL_GadgetSpecID, GID_AXLABEL7,
  226.         GUIL_HorizGroup,0,
  227.             GUIL_GadgetSpecID, GID_AXFILE7,
  228.             GUIL_GadgetSpecID, GID_AXGETFILE7,
  229.         TAG_DONE,
  230.     TAG_DONE,
  231.  
  232.     GUIL_VertGroup,0,
  233.         GUIL_Flags, GUILF_LabelAlign | GUILF_EqualWidth,
  234.         GUIL_GadgetSpecID, GID_AXLABEL8,
  235.         GUIL_HorizGroup,0,
  236.             GUIL_GadgetSpecID, GID_AXFILE8,
  237.             GUIL_GadgetSpecID, GID_AXGETFILE8,
  238.         TAG_DONE,
  239.     TAG_DONE,
  240.  
  241.     GUIL_VertGroup,0,
  242.         GUIL_Flags, GUILF_LabelAlign | GUILF_EqualWidth,
  243.         GUIL_GadgetSpecID, GID_AXLABEL9,
  244.         GUIL_HorizGroup,0,
  245.             GUIL_GadgetSpecID, GID_AXFILE9,
  246.             GUIL_GadgetSpecID, GID_AXGETFILE9,
  247.         TAG_DONE,
  248.     TAG_DONE,
  249.  
  250.     GUIL_VertGroup,0,
  251.         GUIL_Flags, GUILF_LabelAlign | GUILF_EqualWidth,
  252.         GUIL_GadgetSpecID, GID_AXLABEL10,
  253.         GUIL_HorizGroup,0,
  254.             GUIL_GadgetSpecID, GID_AXFILE10,
  255.             GUIL_GadgetSpecID, GID_AXGETFILE10,
  256.         TAG_DONE,
  257.     TAG_DONE,
  258.  
  259.  
  260.      TAG_DONE,
  261.  
  262.   TAG_DONE,
  263.  
  264.      GUIL_HorizGroup,1,
  265.         GUIL_Flags, GUILF_EqualSize | GUILF_EqualWidth,
  266.         
  267.            GUIL_GadgetSpecID, GID_AXOK,
  268.            GUIL_GadgetSpecID, GID_AXCANCEL,
  269.            
  270.     TAG_DONE, 
  271.  
  272.   TAG_DONE,
  273. };
  274.  
  275.  
  276. struct ARexxContext *axContext = NULL;
  277.  
  278. struct ARexxCommandTable commandTable[] =
  279. {
  280.  {AREXX_OPEN,        "OPEN", 
  281.             "FILENAME/A/F",
  282.             NULL},
  283.  
  284.  {AREXX_SAVE,        "SAVE", 
  285.             "FILENAME/F",
  286.             NULL},
  287.  
  288.  {AREXX_QUIT,        "QUIT", 
  289.             "FORCE/S",
  290.             NULL},
  291.  
  292.  {AREXX_GETRECORD,     "AC_GETRECORD",     
  293.             "ENTRY/A/N,TYPE/S,NAME/S,MEMO/S,DATE/S,AMOUNT/S,CLEARED/S,PRINTED/S,VOIDED/S,TAX/S,CHECKNUMBER/S,CATEGORIES/S",
  294.             NULL},
  295.  
  296.  {AREXX_GETBUDGET,    "AC_GETBUDGET",
  297.             "ENTRY/A/N,CATNUM/A/N,CATNAME/S,CATBUDGET/S",
  298.             NULL},
  299.  
  300.  {AREXX_GETINFO,    "AC_GETINFO",         
  301.             "ENTRIES/S,CURRBAL/S,STATEBAL/S,FILTBAL/S,FILENAME/S,HOLDER/S,ACCOUNT/S,BANK/S,OPENDATE/S,CLOSED/S,CLOSEDATE/S,STARTDEPOSIT/S", 
  302.             NULL},
  303.  
  304.  {AREXX_SETINFO,    "AC_SETINFO",         
  305.             "HOLDER/F,ACCOUNT/F,BANK/F,OPENDATE/F,CLOSED/N,CLOSEDATE/F,STARTDEPOSIT/F", 
  306.             NULL},
  307.  
  308.  {AREXX_USERSEL,     "AC_USERSEL",
  309.             "SETENTRY/N,GETENTRY/S",
  310.             NULL},
  311.  
  312.  {AREXX_EDITRECORD,    "AC_EDITRECORD",    
  313.             "ENTRY/A/N,NAME/F,MEMO/F,DATE/F,AMOUNT/F,CLEARED/N,PRINTED/N,VOIDED/N,TAX/N,CHECKNUMBER/N", 
  314.             NULL},
  315.  
  316.  {AREXX_ADDBUDGET,    "AC_ADDBUDGET",
  317.             "ENTRY/A/N,CATEGORY/A,BUDGETED/A",
  318.             NULL},
  319.  
  320.  {AREXX_DELBUDGET,    "AC_DELBUDGET",
  321.             "ENTRY/A/N,CATNUM/A/N",
  322.             NULL},
  323.  
  324.  {AREXX_DELRECORD,    "AC_DELRECORD",
  325.             "ENTRY/A/N",
  326.             NULL},
  327.  
  328.  {AREXX_BUILDRECORD,     "AC_BUILDRECORD",     
  329.             "TYPE/N,NAME/F,MEMO/F,DATE/F,AMOUNT/F,CLEARED/N,PRINTED/N,VOIDED/N,TAX/N,CHECKNUMBER/N",
  330.             NULL},
  331.  
  332.  {AREXX_BUILDBUDGET,    "AC_BUILDBUDGET",
  333.             "CATNAME/A,CATBUDGET/A",
  334.             NULL},
  335.  
  336.  {AREXX_PUTRECORD,    "AC_PUTRECORD",
  337.             "",
  338.             NULL},
  339.  
  340. #if 0
  341.  {AREXX_RUNMACRO,    "AC_RUNMACRO",
  342.             "NUMBER/N,LABEL",
  343.             NULL},
  344. #endif
  345.  
  346.  {AREXX_LOCK,        "AC_LOCK",
  347.             "",
  348.             NULL},
  349.  
  350.  {AREXX_UNLOCK,        "AC_UNLOCK",
  351.             "",
  352.             NULL},
  353.  
  354.  {AREXX_REBUILD,    "AC_REBUILD",
  355.             "",
  356.             NULL},
  357.  TABLE_END,
  358. };
  359.  
  360. LONG arexxSel = 0;
  361. char portName[100];
  362. char outString[100];
  363. char *errMsg = "Warning: Invalid state of command";
  364.  
  365. /*******************************************************
  366. * ArexxGUI()
  367. *
  368. *    Handles the arexx gui for the menu macros
  369. ********************************************************/
  370. BOOL ArexxGUI(void)
  371. {
  372.  UWORD ordinal;
  373.  BOOL done, noreply; 
  374.  ULONG signal;
  375.  
  376.    done = FALSE;
  377.  
  378.    /* lock edit window */
  379.    AmiLock();
  380.  
  381.    /* bring up this gui */
  382.    GF_SetGUIAttr(arexxGUI, GUI_OpenGUI, TRUE, TAG_DONE);
  383.    
  384.    /* grab window */
  385.    GF_GetGUIAttr(arexxGUI,GUI_Window,&arexxWin,TAG_DONE);
  386.  
  387.    ArexxInit();
  388.  
  389.    /* Process input events */
  390.     while (!done)
  391.        {
  392.          struct IntuiMessage *imsg;
  393.                     /* Wait for an event to occur */
  394.  
  395.                     signal = GF_Wait(guiapp,AmigaGuideSignal(agc));
  396.             if (signal & AmigaGuideSignal(agc)) {
  397.             AmiHelpMsg();
  398.             continue;
  399.             }
  400.  
  401.  
  402.                     /* We only bother to listen for CLOSEWINDOW events.
  403.                      * Of course, in a real application, you would be
  404.                      * examining the Class field for IDCMP_GADGETUP
  405.                      * messages and act accordingly.
  406.                      */
  407.  
  408.                     while (imsg = GF_GetIMsg(guiapp))
  409.                     {
  410.             noreply = TRUE;
  411.                         switch (imsg->Class) {
  412.                 case IDCMP_REFRESHWINDOW:
  413.                     RegRefresh(TRUE);
  414.                     break;
  415.  
  416.                                 case IDCMP_CLOSEWINDOW:
  417.                                         done = TRUE;
  418.                                         break;
  419.  
  420.                 case IDCMP_RAWKEY:
  421.                     AmiHelpKey(imsg,AREXX_PANEL);
  422.                     break;
  423.  
  424.                 case IDCMP_GADGETUP:
  425.                     noreply = FALSE;
  426.                     done=ArexxHandleGadget(imsg);
  427.                     break;
  428.                 }
  429.  
  430.             if (noreply) GF_ReplyIMsg(imsg);
  431.  
  432.              }
  433.   }
  434.  
  435.   /* close window */
  436.   GF_SetGUIAttr(arexxGUI, GUI_OpenGUI, FALSE, TAG_DONE);            
  437.   arexxWin = NULL;
  438.       
  439.   /* unlock window */
  440.   AmiUnlock();
  441.  
  442.   return FALSE;
  443. }
  444.  
  445. /*****************************************************************
  446. * ArexxHandleGadget()
  447. *
  448. *    Handle the gadgets of this panel
  449. ******************************************************************/
  450. BOOL ArexxHandleGadget(struct IntuiMessage *imsg)
  451. {
  452.  BOOL done = FALSE;
  453.  struct Gadget *gad =  (struct Gadget *)(imsg->IAddress);
  454.  UWORD code = imsg->Code;
  455.  
  456.  switch (gad->GadgetID) {
  457.     case GID_AXGETFILE1:
  458.         if (AmiGetFile(arexxGUI, otherRexxASL,copyMacros[0].macrofile,FILESIZE)) 
  459.             GF_SetGadgetAttrs (arexxGUI, AX_ArexxSpecs[GID_AXFILE1]->gs_Gadget,
  460.                 GTST_String,copyMacros[0].macrofile,
  461.                 TAG_DONE);
  462.         break;
  463.  
  464.     case GID_AXGETFILE2:
  465.         if (AmiGetFile(arexxGUI, otherRexxASL,copyMacros[1].macrofile,FILESIZE)) 
  466.             GF_SetGadgetAttrs (arexxGUI, AX_ArexxSpecs[GID_AXFILE2]->gs_Gadget,
  467.                 GTST_String,copyMacros[1].macrofile,
  468.                 TAG_DONE);
  469.         break;
  470.  
  471.     case GID_AXGETFILE3:
  472.         if (AmiGetFile(arexxGUI, otherRexxASL,copyMacros[2].macrofile,FILESIZE))
  473.             GF_SetGadgetAttrs (arexxGUI, AX_ArexxSpecs[GID_AXFILE3]->gs_Gadget,
  474.                 GTST_String,copyMacros[2].macrofile,
  475.                 TAG_DONE);
  476.         break;
  477.  
  478.     case GID_AXGETFILE4:
  479.         if (AmiGetFile(arexxGUI, otherRexxASL,copyMacros[3].macrofile,FILESIZE))
  480.             GF_SetGadgetAttrs (arexxGUI, AX_ArexxSpecs[GID_AXFILE4]->gs_Gadget,
  481.                 GTST_String,copyMacros[3].macrofile,
  482.                 TAG_DONE);
  483.         break;
  484.  
  485.     case GID_AXGETFILE5:
  486.         if (AmiGetFile(arexxGUI, otherRexxASL,copyMacros[4].macrofile,FILESIZE))
  487.             GF_SetGadgetAttrs (arexxGUI, AX_ArexxSpecs[GID_AXFILE5]->gs_Gadget,
  488.                 GTST_String,copyMacros[4].macrofile,
  489.                 TAG_DONE);
  490.         break;
  491.  
  492.     case GID_AXGETFILE6:
  493.         if (AmiGetFile(arexxGUI, otherRexxASL,copyMacros[5].macrofile,FILESIZE))
  494.             GF_SetGadgetAttrs (arexxGUI, AX_ArexxSpecs[GID_AXFILE6]->gs_Gadget,
  495.                 GTST_String,copyMacros[5].macrofile,
  496.                 TAG_DONE);
  497.         break;
  498.  
  499.  
  500.     case GID_AXGETFILE7:
  501.         if (AmiGetFile(arexxGUI, otherRexxASL,copyMacros[6].macrofile,FILESIZE))
  502.             GF_SetGadgetAttrs (arexxGUI, AX_ArexxSpecs[GID_AXFILE7]->gs_Gadget,
  503.                 GTST_String,copyMacros[6].macrofile,
  504.                 TAG_DONE);
  505.         break;
  506.  
  507.  
  508.     case GID_AXGETFILE8:
  509.         if (AmiGetFile(arexxGUI, otherRexxASL,copyMacros[7].macrofile,FILESIZE))
  510.             GF_SetGadgetAttrs (arexxGUI, AX_ArexxSpecs[GID_AXFILE8]->gs_Gadget,
  511.                 GTST_String,copyMacros[7].macrofile,
  512.                 TAG_DONE);
  513.         break;
  514.  
  515.  
  516.     case GID_AXGETFILE9:
  517.         if (AmiGetFile(arexxGUI, otherRexxASL,copyMacros[8].macrofile,FILESIZE))
  518.             GF_SetGadgetAttrs (arexxGUI, AX_ArexxSpecs[GID_AXFILE9]->gs_Gadget,
  519.                 GTST_String,copyMacros[8].macrofile,
  520.                 TAG_DONE);
  521.         break;
  522.  
  523.     case GID_AXGETFILE10:
  524.         if (AmiGetFile(arexxGUI, otherRexxASL,copyMacros[9].macrofile,FILESIZE))
  525.             GF_SetGadgetAttrs (arexxGUI, AX_ArexxSpecs[GID_AXFILE10]->gs_Gadget,
  526.                 GTST_String,copyMacros[9].macrofile,
  527.                 TAG_DONE);
  528.         break;
  529.  
  530.     case GID_AXCANCEL:
  531.         done = TRUE;
  532.         break;
  533.  
  534.     case GID_AXOK:
  535.         if (ArexxGoodbye(imsg)) {
  536.             done = TRUE;
  537.             memcpy(arexxMacros,copyMacros,sizeof(arexxNode)*MAXMACROS);
  538.         }
  539.         break;
  540.  }
  541.  
  542.  return (done);
  543. }
  544.  
  545. /********************************************************
  546. * ArexxGoodbye()
  547. *
  548. *    Pull in all data entry
  549. *********************************************************/
  550. BOOL ArexxGoodbye(struct IntuiMessage *imsg)
  551.  int x;
  552.  
  553.  for (x=0;x<MAXMACROS;x++) {
  554.     strcpy(copyMacros[x].macroname,
  555.         ((struct StringInfo *)(AX_ArexxSpecs[GID_AXLABEL1+(x*3)]->gs_Gadget)->SpecialInfo)->Buffer); 
  556.     strcpy(copyMacros[x].macrofile,
  557.         ((struct StringInfo *)(AX_ArexxSpecs[GID_AXFILE1+(x*3)]->gs_Gadget)->SpecialInfo)->Buffer);
  558.  }
  559.  
  560.  return (TRUE);
  561. }
  562.  
  563. /********************************************************
  564. * ArexxInit()
  565. *
  566. *    Initialize the interface
  567. *********************************************************/
  568. void ArexxInit(void)
  569. {
  570.  int x;
  571.  memcpy(copyMacros,arexxMacros,sizeof(arexxNode)*MAXMACROS);
  572.  
  573.  for (x=0;x<MAXMACROS;x++) {
  574.  
  575.      GF_SetGadgetAttrs (arexxGUI, AX_ArexxSpecs[ (x*3)+GID_AXLABEL1]->gs_Gadget,
  576.         GTST_String,copyMacros[x].macroname,
  577.         TAG_DONE);
  578.  
  579.     GF_SetGadgetAttrs (arexxGUI, AX_ArexxSpecs[(x*3)+GID_AXFILE1]->gs_Gadget,
  580.         GTST_String,copyMacros[x].macrofile,
  581.         TAG_DONE);
  582.  }
  583.  
  584. }
  585.  
  586. /*******************************************************
  587. * axOpen
  588. *
  589. *    Open the arexx port
  590. *******************************************************/
  591. BOOL axOpen(void)
  592. {
  593.  BOOL ret = FALSE;
  594.  
  595.  axContext = AllocARexxContext(
  596.     ER_Portname, "AMICHECK",
  597.     ER_CommandTable, commandTable,
  598.     ER_Author, AC_Author,
  599.     ER_Copyright, "Copyright© 1994,1995 Douglas M. Dyer",
  600.     ER_Version, AC_Version,
  601.     TAG_DONE);
  602.  
  603.  if (axContext != NULL) {
  604.     ret = TRUE;
  605.     sprintf(portName,"%s>",axContext->portname);
  606.     memset(&new,0,sizeof(entryNode));
  607.     memcpy(&new.date,&currDate,sizeof(dateType));
  608.  }
  609.  
  610.  return (ret);
  611. }
  612.  
  613. /*******************************************************
  614. * axClose
  615. *
  616. *    Close the arexx port
  617. *******************************************************/
  618. BOOL axClose(void)
  619. {
  620.  BOOL ret = TRUE;
  621.  
  622.  if (EasyRexxBase != NULL && axContext != NULL)
  623.     FreeARexxContext(axContext);
  624.  
  625.  return (ret);
  626. }
  627.  
  628. /*******************************************************
  629. * axOpenCmd()
  630. *
  631. *    Open the command shell
  632. ********************************************************/
  633. void axOpenCmd(void)
  634. {
  635.  
  636.  ARexxCommandShell(axContext,
  637.     ER_Prompt,     portName,
  638.     WA_Title,    "amiCheck CommandShell",
  639.     WA_Left,    0,
  640.     WA_Width,    320,
  641.     WA_Height,    100,
  642.     WA_DragBar,    TRUE,
  643.     WA_DepthGadget,    TRUE,
  644.     WA_SizeGadget,    TRUE,
  645.     WA_CloseGadget,    TRUE,
  646.     WA_MinWidth,    50,
  647.     WA_MinHeight,    50,
  648.     WA_MaxWidth,    ~0,
  649.     WA_MaxHeight,    ~0,
  650.     WA_SizeBBottom,    TRUE,
  651.     /*WA_PubScreen, amiWindow->WScreen, */
  652.     /*ER_Font,    amiWindow->WScreen->Font,*/
  653.     ER_Close,     FALSE,
  654.     TAG_DONE);
  655.  
  656. }
  657.  
  658. /*******************************************************
  659. * axCloseCmd()
  660. *
  661. *    Close the command shell
  662. ********************************************************/
  663. void axCloseCmd(void)
  664. {
  665.  ARexxCommandShell(axContext,
  666.     ER_Close, TRUE,
  667.     TAG_DONE);
  668. }
  669.  
  670. /*******************************************************
  671. * axHandle()
  672. *
  673. *    Handle all arexx commanding
  674. *******************************************************/
  675. BOOL axHandle(struct ARexxContext *cx)
  676. {
  677.  ULONG resultint = 1L;
  678.  LONG  result = RC_OK;
  679.  UBYTE *resultstring = NULL;
  680.  filterNode *filt;
  681.  BOOL done = FALSE;
  682.  
  683.  if (GetARexxMsg(cx)) {
  684.     switch (cx->id) {
  685.  
  686.         case AREXX_GETRECORD:
  687.             arexxSel = ARGNUMBER(cx,0);
  688.             if (arexxSel == 0 || arexxSel > entryCount) {
  689.                 result = RC_WARN;
  690.                 resultstring = errMsg;
  691.             }
  692.             else {
  693.                 if (ARG(cx,1)) {
  694.                     filt = (filterNode *)DataOrd2Node((struct List *)&filtered,arexxSel-1);
  695.                     resultint = filt->entry->type;
  696.                 }
  697.                 else if (ARG(cx,2)) {
  698.                     filt = (filterNode *)DataOrd2Node((struct List *)&filtered,arexxSel-1);
  699.                     resultstring = filt->entry->name;
  700.                 }
  701.                 else if (ARG(cx,3)) {
  702.                     filt = (filterNode *)DataOrd2Node((struct List *)&filtered,arexxSel-1);
  703.                     resultstring = filt->entry->memo;
  704.                 }
  705.                 else if (ARG(cx,4)) {
  706.                     filt = (filterNode *)DataOrd2Node((struct List *)&filtered,arexxSel-1);
  707.                     DataBuildDate(&filt->entry->date,outString);
  708.                     resultstring = outString;
  709.                 }
  710.                 else if (ARG(cx,5)) {
  711.                     filt = (filterNode *)DataOrd2Node((struct List *)&filtered,arexxSel-1);
  712.                     DataBuildAmnt(TRUE,&filt->entry->amount,outString);
  713.                     resultstring = outString;
  714.                 }
  715.                 else if (ARG(cx,6)) {
  716.                     filt = (filterNode *)DataOrd2Node((struct List *)&filtered,arexxSel-1);
  717.                     resultint = filt->entry->flags & CLEARED;
  718.                 }
  719.                 else if (ARG(cx,7)) {
  720.                     filt = (filterNode *)DataOrd2Node((struct List *)&filtered,arexxSel-1);
  721.                     resultint = filt->entry->flags & PRINTED;
  722.                 }
  723.                 else if (ARG(cx,8)) {
  724.                     filt = (filterNode *)DataOrd2Node((struct List *)&filtered,arexxSel-1);
  725.                     resultint = filt->entry->flags & VOIDED;
  726.                 }
  727.                 else if (ARG(cx,9)) {
  728.                     filt = (filterNode *)DataOrd2Node((struct List *)&filtered,arexxSel-1);
  729.                     resultint = filt->entry->flags & TAXDEDUCT;
  730.                 }
  731.                 else if (ARG(cx,10)) {
  732.                     filt = (filterNode *)DataOrd2Node((struct List *)&filtered,arexxSel-1);
  733.                     resultint = filt->entry->check;
  734.                 }
  735.                 else if (ARG(cx,11)) {
  736.                     resultint = 1;
  737.                 }
  738.                 else {
  739.                     result = RC_WARN;
  740.                     resultstring = errMsg;
  741.                 }
  742.  
  743.             }
  744.             break;
  745.  
  746.         case AREXX_USERSEL:
  747.             if (ARG(cx,0)) {
  748.                 arexxSel = ARGNUMBER(cx,0);
  749.                 if (arexxSel == 0 || arexxSel > entryCount) {
  750.                     result = RC_WARN;
  751.                     resultstring = errMsg;
  752.                 }
  753.                 else {
  754.                     resultint = arexxSel;
  755.                     selRow = arexxSel - 1;
  756.                     RegMoveToSel(&filtered);
  757.                 }
  758.             }
  759.             else if (ARG(cx,1)) {
  760.                 if (selRow < 0)
  761.                     resultint = 0;
  762.                 else     resultint = selRow + 1;            
  763.             }
  764.             else {
  765.                 result = RC_WARN;
  766.                 resultstring = errMsg;
  767.             }
  768.             break;
  769.  
  770.         case AREXX_SETINFO:
  771.             if (ARG(cx,0)) {
  772.                 strncpy(usrAccount.holder,ARGSTRING(cx,0),STRINGSIZE);
  773.             }
  774.             else if (ARG(cx,1)) {
  775.                 strncpy(usrAccount.accnt,ARGSTRING(cx,1),STRINGSIZE);
  776.             }
  777.             else if (ARG(cx,2)) {
  778.                 strncpy(usrAccount.bank,ARGSTRING(cx,2),STRINGSIZE);
  779.             }
  780.             else if (ARG(cx,3)) {
  781.                 if (DataVerifyDate(ARGSTRING(cx,3),outString)) {
  782.                     DataStoreDate(&usrAccount.openDate,outString);
  783.                 }
  784.                 else {
  785.                     result = RC_WARN;
  786.                     resultstring = errMsg;
  787.                     break;
  788.                 }
  789.             }
  790.             else if (ARG(cx,3)) {
  791.                 if (ARGNUMBER(cx,3))
  792.                     usrAccount.closed = TRUE;
  793.                 else    usrAccount.closed = FALSE;
  794.  
  795.             }
  796.             else if (ARG(cx,4)) {
  797.                 if (DataVerifyDate(ARGSTRING(cx,4),outString)) {
  798.                     DataStoreDate(&usrAccount.closeDate,outString);
  799.                 }
  800.                 else {
  801.                     result = RC_WARN;
  802.                     resultstring = errMsg;
  803.                     break;
  804.                 }
  805.             }
  806.             else if (ARG(cx,5)) {
  807.                 if ( (resultint = DataVerifyAmnt(ARGSTRING(cx,5),outString))) {
  808.                     DataStoreAmnt(&usrAccount.beginAmount,outString);
  809.                 }
  810.                 else {
  811.                     result = RC_WARN;
  812.                     resultstring = errMsg;
  813.                     break;
  814.                 }
  815.             }
  816.             break;
  817.     
  818.         case AREXX_GETINFO:
  819.             if (ARG(cx,0)) {
  820.                 resultint = entryCount;
  821.             }
  822.             else if (ARG(cx,1)) {
  823.                 resultstring = currStr;
  824.             }
  825.             else if (ARG(cx,2)) {
  826.                 resultstring = stateStr;
  827.             }
  828.             else if (ARG(cx,3)) {
  829.                 resultstring = filtStr;
  830.             }
  831.             else if (ARG(cx,4)) {
  832.                 resultstring = currFile;
  833.             }
  834.             else if (ARG(cx,5)) {
  835.                 resultstring = usrAccount.holder;
  836.             }
  837.             else if (ARG(cx,6)) {
  838.                 resultstring = usrAccount.accnt;
  839.             }
  840.             else if (ARG(cx,7)) {
  841.                 resultstring = usrAccount.bank;
  842.             }
  843.             else if (ARG(cx,8)) {
  844.                 DataBuildDate(&usrAccount.openDate,outString);
  845.                 resultstring = outString;
  846.             }
  847.             else if (ARG(cx,9)) {
  848.                 resultint = usrAccount.closed;
  849.             }
  850.             else if (ARG(cx,10)) {
  851.                  DataBuildDate(&usrAccount.closeDate,outString);
  852.                 resultstring = outString;
  853.             }
  854.             else if (ARG(cx,11)) {
  855.                 DataBuildAmnt(TRUE,&usrAccount.beginAmount,outString);
  856.                 resultstring = outString;
  857.             }
  858.             break;
  859.  
  860.         case AREXX_GETBUDGET:
  861.             arexxSel = ARGNUMBER(cx,0);
  862.             catSel = ARGNUMBER(cx,1);
  863.             if (arexxSel == 0 || arexxSel > entryCount || catSel != 1) {
  864.                 result = RC_WARN;
  865.                 resultstring = errMsg;
  866.                 break;
  867.             }
  868.             else {
  869.                 if (ARG(cx,2)) {
  870.                     filt = (filterNode *)DataOrd2Node((struct List *)&filtered,arexxSel-1);
  871.                     resultstring = filt->entry->category;
  872.                 }
  873.                 else if (ARG(cx,3)) {
  874.                     filt = (filterNode *)DataOrd2Node((struct List *)&filtered,arexxSel-1);
  875.                     DataBuildAmnt(TRUE,&filt->entry->amount,outString);
  876.                     resultstring = outString;
  877.                 }
  878.             }
  879.             break;
  880.  
  881.         case AREXX_OPEN:
  882.             AmiOpen(ARGSTRING(cx,0),FALSE);
  883.             break;
  884.  
  885.         case AREXX_QUIT:
  886.             if (ARG(cx,1)) {
  887.                 amiChangedItems = FALSE;
  888.                 done = TRUE;
  889.             }
  890.             else done = AmiAsk(quitstr);
  891.             break;
  892.  
  893.         case AREXX_ADDBUDGET:
  894.             arexxSel = ARGNUMBER(cx,0);
  895.             catSel = ARGNUMBER(cx,1);
  896.             if (arexxSel > entryCount || arexxSel == 0 ) {
  897.                 result = RC_WARN;
  898.                 resultstring = errMsg;
  899.                 break;
  900.             }
  901.  
  902.             filt = (filterNode *)DataOrd2Node( (struct List *)&filtered,arexxSel-1);
  903.             strncpy(filt->entry->category,ARGSTRING(cx,1),CATNAMESIZE);
  904.             amiChangedItems = TRUE;
  905.             break;
  906.  
  907.         case AREXX_DELBUDGET:
  908.             arexxSel = ARGNUMBER(cx,0);
  909.             catSel = ARGNUMBER(cx,1);
  910.             if (arexxSel > entryCount || arexxSel == 0 || catSel != 1) {
  911.                 result = RC_WARN;
  912.                 resultstring = errMsg;
  913.                 break;
  914.             }
  915.  
  916.             amiChangedItems = TRUE;
  917.             filt = (filterNode *)DataOrd2Node( (struct List *)&filtered,arexxSel-1);
  918.             strcpy(filt->entry->category, "None");
  919.             break;
  920.  
  921.         case AREXX_EDITRECORD:
  922.             arexxSel = ARGNUMBER(cx,0);
  923.             if (arexxSel == 0 || arexxSel > entryCount) {
  924.                 result = RC_WARN;
  925.                 resultstring = errMsg;
  926.                 break;
  927.             }
  928.  
  929.             amiChangedItems = TRUE;
  930.             filt = (filterNode *)DataOrd2Node( (struct List *)&filtered,arexxSel-1);
  931.  
  932.             if (ARG(cx,1)) {
  933.                 strncpy(filt->entry->name,ARGSTRING(cx,1),STRINGSIZE);
  934.             }
  935.  
  936.             else if (ARG(cx,2)) {
  937.                 strncpy(filt->entry->memo,ARGSTRING(cx,2),STRINGSIZE);
  938.             }
  939.             else if (ARG(cx,3)) {
  940.                 if ( (resultint = DataVerifyDate(ARGSTRING(cx,3),outString)))
  941.                     DataStoreDate(&filt->entry->date,outString);
  942.                 else {
  943.                     result = RC_WARN;
  944.                     resultstring = errMsg;
  945.                     break;
  946.                 }
  947.     
  948.             }
  949.             else if (ARG(cx,4)) {
  950.                 if ( (resultint = DataVerifyAmnt(ARGSTRING(cx,4),outString)))
  951.                     DataStoreAmnt(&filt->entry->amount,outString);
  952.                 else {
  953.                     result = RC_WARN;
  954.                     resultstring = errMsg;
  955.                     break;
  956.                 }
  957.             }
  958.             else if (ARG(cx,5)) {
  959.                 if (ARGNUMBER(cx,5))
  960.                     filt->entry->flags |= CLEARED;
  961.                 else    filt->entry->flags &= ~CLEARED;
  962.             }
  963.  
  964.             else if (ARG(cx,6)) {
  965.                 if (filt->entry->type == CHECKTYPE && ARGNUMBER(cx,6))
  966.                     filt->entry->flags |= PRINTED;
  967.                 else    filt->entry->flags &= ~PRINTED;
  968.             }
  969.  
  970.             else if (ARG(cx,7)) {
  971.                 if (filt->entry->type == CHECKTYPE && ARGNUMBER(cx,7))
  972.                     filt->entry->flags |= VOIDED;
  973.                 else    filt->entry->flags &= ~VOIDED;
  974.             }
  975.  
  976.             else if (ARG(cx,8)) {
  977.                 if (ARGNUMBER(cx,8))
  978.                     filt->entry->flags |= TAXDEDUCT;
  979.                 else    filt->entry->flags &= ~TAXDEDUCT;
  980.             }
  981.  
  982.             else if (ARG(cx,9)) {
  983.                 if (filt->entry->type == CHECKTYPE)
  984.                     filt->entry->check = ARGNUMBER(cx,9);
  985.             }
  986.  
  987.             break;
  988.  
  989.         case AREXX_BUILDRECORD:
  990.             if (ARG(cx,0)) {
  991.                 switch (ARGNUMBER(cx,0)) {
  992.                     case DEPOSITTYPE:
  993.                         new.type = DEPOSITTYPE;
  994.                         break;
  995.                     case WITHDRAWALTYPE:
  996.                         new.type = WITHDRAWALTYPE;
  997.                         break;
  998.                     case CHECKTYPE:
  999.                         new.type = CHECKTYPE;
  1000.                         break;
  1001.                 }
  1002.             }
  1003.             else if (ARG(cx,1)){
  1004.                 strncpy(new.name,ARGSTRING(cx,1),STRINGSIZE);
  1005.             }
  1006.             else if (ARG(cx,2)) {
  1007.                 strncpy(new.memo, ARGSTRING(cx,2),STRINGSIZE);
  1008.             }
  1009.             else if (ARG(cx,3)) {
  1010.                 if ( (resultint = DataVerifyDate(ARGSTRING(cx,3),outString)))
  1011.                     DataStoreDate(&new.date,outString);
  1012.                 else {
  1013.                     result = RC_WARN;
  1014.                     resultstring = errMsg;
  1015.                     break;
  1016.                 }
  1017.             }
  1018.             else if (ARG(cx,4)) {
  1019.                 if ( (resultint = DataVerifyAmnt(ARGSTRING(cx,4),outString)))
  1020.                     DataStoreAmnt(&new.amount,outString);
  1021.                 else {
  1022.                     result = RC_WARN;
  1023.                     resultstring = errMsg;
  1024.                     break;
  1025.                 }
  1026.             }
  1027.             else if (ARG(cx,5)) {
  1028.                 if (ARGNUMBER(cx,5))
  1029.                     new.flags |= CLEARED;
  1030.                 else    new.flags &= ~CLEARED;
  1031.             }
  1032.  
  1033.             else if (ARG(cx,6)) {
  1034.                 if (new.type == CHECKTYPE && ARGNUMBER(cx,6))
  1035.                     new.flags |= PRINTED;
  1036.                 else    new.flags &= ~PRINTED;
  1037.             }
  1038.  
  1039.             else if (ARG(cx,7)) {
  1040.                 if (new.type == CHECKTYPE && ARGNUMBER(cx,7))
  1041.                     new.flags |= VOIDED;
  1042.                 else    new.flags &= ~VOIDED;
  1043.             }
  1044.  
  1045.             else if (ARG(cx,8)) {
  1046.                 if (ARGNUMBER(cx,8))
  1047.                     new.flags |= TAXDEDUCT;
  1048.                 else    new.flags &= ~TAXDEDUCT;
  1049.             }
  1050.  
  1051.             else if (ARG(cx,9)) {
  1052.                 if (new.type == CHECKTYPE)
  1053.                     new.check = ARGNUMBER(cx,9);
  1054.             }
  1055.             break;
  1056.  
  1057.         case AREXX_BUILDBUDGET:
  1058.             strncpy(new.category,ARGSTRING(cx,0),CATNAMESIZE);
  1059.             break;
  1060.     
  1061.         case AREXX_PUTRECORD:
  1062.             /* verify our stuff.. */
  1063.             if ( currFile[0] == 0  || (new.type != CHECKTYPE && new.flags & (VOIDED|PRINTED))) {
  1064.                 result = RC_WARN;
  1065.                 resultstring = errMsg;
  1066.                 break;
  1067.             }
  1068.  
  1069.             /* insert and update balance */
  1070.             amiChangedItems = TRUE;
  1071.             DataAddEntry(&new,&entries,&filt);
  1072.         
  1073.             /* zero out our copy */
  1074.             memset(&new,0,sizeof(entryNode));
  1075.             break;
  1076.  
  1077.         case AREXX_LOCK:
  1078.             AmiLock();
  1079.             break;
  1080.  
  1081.         case AREXX_UNLOCK:
  1082.             AmiUnlock();
  1083.             break;
  1084.  
  1085.         case AREXX_DELRECORD:
  1086.             arexxSel = ARGNUMBER(cx,0);
  1087.             if (arexxSel == 0 || arexxSel > entryCount) {
  1088.                 result = RC_WARN;
  1089.                 resultstring = errMsg;
  1090.                 break;
  1091.             }
  1092.             
  1093.             filt = (filterNode *)DataOrd2Node((struct List *)&filtered,arexxSel-1);
  1094.             DataRemoveEntry(filt->entry,filt);
  1095.             amiChangedItems = TRUE;
  1096.             break;
  1097.  
  1098.         case AREXX_REBUILD:
  1099.             DataRebuildFilters();
  1100.             DataInitBalances();
  1101.             DataFilterBalance(&filtered);
  1102.             selRow = -1;
  1103.  
  1104.             DataBuildBal(usrAccount.decimal,&amntState.currAmnt,currStr);
  1105.             DataBuildBal(usrAccount.decimal,&filtAmnt,filtStr);
  1106.  
  1107.             AmiUpdateFilt(filtStr);
  1108.             AmiUpdateCurr(currStr);
  1109.             RegRedrawFilter(0);
  1110.             break;
  1111.      }
  1112.  
  1113. #if 0
  1114.     if (result != RC_OK) {
  1115.         ReplyARexxMsg(cx,
  1116.             ER_ReturnCode,    result,
  1117.             ER_ErrorMessage, ER_ResultString,
  1118.             TAG_DONE);
  1119.     }
  1120. #endif
  1121.     if (result != RC_OK) {
  1122.         ReplyARexxMsg(cx,
  1123.             ER_Result,    result,
  1124.             ER_ErrorMessage, ER_ResultString,
  1125.             TAG_DONE);
  1126.     }
  1127.  
  1128.     else {
  1129.          ReplyARexxMsg(cx,
  1130.             ER_ReturnCode,    result,
  1131.             (resultstring==NULL)?TAG_IGNORE:ER_ResultString,resultstring,
  1132.             (resultstring==NULL)?ER_ResultLong:TAG_IGNORE,    resultint,
  1133.             TAG_DONE);
  1134.     }
  1135.  }
  1136.  
  1137.  return (done);
  1138. }
  1139.