/*
 * IssueTracker ARexx  (C) 1996 John Haubrich
 *                              All Rights Under Copyright Reserved
 *
 * Version 1.0
 *
 * Written using SAS/C 6.56
 * Using Magic User Interface (MUI) by Stefan Stuntz
 *
 * By John Haubrich
 *
 *
 * Version~ Date~~~~~~~ Comments~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * -------  ----        --------
 *             ;
 */

#include "common.h"

extern struct MyGlobals        MG;
extern struct MainWindow       MAIN;
extern char                    GL_szFault[256];


/*
 * AREXX HOOKS --------------------------------------
 */
SAVEDS ASM LONG RX_1ClearFunc      ( REG(a0) struct Hook *hook, REG(a2) Object *appl, REG(a1) ULONG *arg )
{
   ULONG ulForce;


   ulForce = *((ULONG *)arg);
   if ( ulForce )
   {
      return( RETURN_OK );
   }
   else if ( MUI_Request( MG.App, MG.WIN_MAIN, 0, NULL, "OK|*Cancel",
                          "Are you sure you wish to clear all data?", NULL ) == 1 )
   {
      return( RETURN_OK );
   }

   return( RETURN_ERROR );
}
SAVEDS ASM LONG RX_1OpenFunc       ( REG(a0) struct Hook *hook, REG(a2) Object *appl, REG(a1) ULONG *arg )
{
   ULONG  ulForce;
   char  *pszFile;
   BPTR   fh;


   pszFile =  ((char *)*arg);
   ulForce = *((ULONG *)(arg+1));

   if ( ulForce )
   {
      return( RETURN_OK );
   }
   else if ( MUI_Request( MG.App, MG.WIN_MAIN, 0, NULL, "OK|*Cancel",
                          "Data has been modified.\nAre you sure you wish to continue?", NULL ) == 1 )
   {
      fh = Open( pszFile, MODE_OLDFILE );
      if ( fh )
      {
         fnClearMainWindow();
         DoMethod( MAIN.DLIS_List, MUIM_DataList_Load, fh );
         Close( fh );
         return( RETURN_OK );
      }
      else
      {
         return( RETURN_ERROR );
      }
   }

   return( RETURN_ERROR );
}
SAVEDS ASM LONG RX_1SaveasFunc     ( REG(a0) struct Hook *hook, REG(a2) Object *appl, REG(a1) ULONG *arg )
{
   char  *pszFile;
   BPTR   fh;


   pszFile =  ((char *)*arg);

   fh = Open( pszFile, MODE_READWRITE );
   if ( fh )
   {
      DoMethod( MAIN.DLIS_List, MUIM_DataList_Save, fh );
      Close( fh );
      return( RETURN_OK );
   }
   else
   {
      return( RETURN_ERROR );
   }
}
SAVEDS ASM LONG RX_1QuitFunc       ( REG(a0) struct Hook *hook, REG(a2) Object *appl, REG(a1) ULONG *arg )
{
   ULONG  ulForce;


   ulForce = *((ULONG *)arg);

   if ( !ulForce )
   {
      if ( MUI_Request( MG.App, MG.WIN_MAIN, 0, NULL, "OK|*Cancel",
                        "Are you sure you want to quit?", NULL ) == 1 )
      {
         MG.running = FALSE;
      }
   }
   return( RETURN_OK );
}
SAVEDS ASM LONG RX_4MoveWdwFunc    ( REG(a0) struct Hook *hook, REG(a2) Object *appl, REG(a1) ULONG *arg )
{
   LONG   lX, lY;
   char  *pszWindow;


   pszWindow =  ((char *)*arg);
   lX        = *((ULONG *)(arg+1));
   lY        = *((ULONG *)(arg+2));


   if      ( strcmp( pszWindow, "MAIN" ) == 0 ) {  MoveWindow( MG.WIN_MAIN, lX, lY );  }


   return( RETURN_OK );
}
SAVEDS ASM LONG RX_4SizeWdwFunc    ( REG(a0) struct Hook *hook, REG(a2) Object *appl, REG(a1) ULONG *arg )
{
   LONG   lW, lH;
   char  *pszWindow;


   pszWindow =  ((char *)*arg);
   lW        = *((ULONG *)(arg+1));
   lH        = *((ULONG *)(arg+2));


   if      ( strcmp( pszWindow, "MAIN" ) == 0 ) {  SizeWindow( MG.WIN_MAIN, lW, lH );  }


   return( RETURN_OK );
}
SAVEDS ASM LONG RX_4ChangeWdwFunc  ( REG(a0) struct Hook *hook, REG(a2) Object *appl, REG(a1) ULONG *arg )
{
   LONG   lX, lY, lW, lH;
   char  *pszWindow;


   pszWindow =  ((char *)*arg);
   lX        = *((ULONG *)(arg+1));
   lY        = *((ULONG *)(arg+2));
   lW        = *((ULONG *)(arg+3));
   lH        = *((ULONG *)(arg+4));


   if      ( strcmp( pszWindow, "MAIN" ) == 0 ) {  ChangeWindowBox( MG.WIN_MAIN, lX, lY, lW, lH );  }


   return( RETURN_OK );
}
SAVEDS ASM LONG RX_4Wdw2FrontFunc  ( REG(a0) struct Hook *hook, REG(a2) Object *appl, REG(a1) ULONG *arg )
{
   char  *pszWindow;


   pszWindow =  ((char *)*arg);


   if      ( strcmp( pszWindow, "MAIN" ) == 0 ) {  WindowToFront( MG.WIN_MAIN );  }


   return( RETURN_OK );
}
SAVEDS ASM LONG RX_4Wdw2BackFunc   ( REG(a0) struct Hook *hook, REG(a2) Object *appl, REG(a1) ULONG *arg )
{
   char  *pszWindow;


   pszWindow =  ((char *)*arg);


   if      ( strcmp( pszWindow, "MAIN" ) == 0 ) {  WindowToBack( MG.WIN_MAIN );  }


   return( RETURN_OK );
}
SAVEDS ASM LONG RX_4ActivateWdwFunc( REG(a0) struct Hook *hook, REG(a2) Object *appl, REG(a1) ULONG *arg )
{
   char  *pszWindow;


   pszWindow =  ((char *)*arg);


   if      ( strcmp( pszWindow, "MAIN" ) == 0 ) {  ActivateWindow( MG.WIN_MAIN );  }


   return( RETURN_OK );
}
SAVEDS ASM LONG RX_4ZoomWdwFunc    ( REG(a0) struct Hook *hook, REG(a2) Object *appl, REG(a1) ULONG *arg )
{
   char  *pszWindow;


   pszWindow =  ((char *)*arg);


   if      ( strcmp( pszWindow, "MAIN" ) == 0 ) {  ZipWindow( MG.WIN_MAIN );  }


   return( RETURN_OK );
}
SAVEDS ASM LONG RX_4UnzoomWdwFunc  ( REG(a0) struct Hook *hook, REG(a2) Object *appl, REG(a1) ULONG *arg )
{
   char  *pszWindow;


   pszWindow =  ((char *)*arg);


   if      ( strcmp( pszWindow, "MAIN" ) == 0 ) {  ZipWindow( MG.WIN_MAIN );  }


   return( RETURN_OK );
}
SAVEDS ASM LONG RX_6LockGUIFunc    ( REG(a0) struct Hook *hook, REG(a2) Object *appl, REG(a1) ULONG *arg )
{
   set( MG.WIN_MAIN, MUIA_Application_Sleep, TRUE );
   return( RETURN_OK );
}
SAVEDS ASM LONG RX_6UnlockGUIFunc  ( REG(a0) struct Hook *hook, REG(a2) Object *appl, REG(a1) ULONG *arg )
{
   set( MG.WIN_MAIN, MUIA_Application_Sleep, FALSE );
   return( RETURN_OK );
}


/*
 * AREXX PROTOS -------------------------------------
 */
static const struct Hook RX_1ClearHook       = { {NULL, NULL}, (void *)RX_1ClearFunc      , NULL, NULL };
static const struct Hook RX_1OpenHook        = { {NULL, NULL}, (void *)RX_1OpenFunc       , NULL, NULL };
static const struct Hook RX_1SaveasHook      = { {NULL, NULL}, (void *)RX_1SaveasFunc     , NULL, NULL };
static const struct Hook RX_1QuitHook        = { {NULL, NULL}, (void *)RX_1QuitFunc       , NULL, NULL };
static const struct Hook RX_4MoveWdwHook     = { {NULL, NULL}, (void *)RX_4MoveWdwFunc    , NULL, NULL };
static const struct Hook RX_4SizeWdwHook     = { {NULL, NULL}, (void *)RX_4SizeWdwFunc    , NULL, NULL };
static const struct Hook RX_4ChangeWdwHook   = { {NULL, NULL}, (void *)RX_4ChangeWdwFunc  , NULL, NULL };
static const struct Hook RX_4Wdw2FrontHook   = { {NULL, NULL}, (void *)RX_4Wdw2FrontFunc  , NULL, NULL };
static const struct Hook RX_4Wdw2BackHook    = { {NULL, NULL}, (void *)RX_4Wdw2BackFunc   , NULL, NULL };
static const struct Hook RX_4ActivateWdwHook = { {NULL, NULL}, (void *)RX_4ActivateWdwFunc, NULL, NULL };
static const struct Hook RX_4ZoomWdwHook     = { {NULL, NULL}, (void *)RX_4ZoomWdwFunc    , NULL, NULL };
static const struct Hook RX_4UnzoomWdwHook   = { {NULL, NULL}, (void *)RX_4UnzoomWdwFunc  , NULL, NULL };
static const struct Hook RX_6LockGUIHook     = { {NULL, NULL}, (void *)RX_6LockGUIFunc    , NULL, NULL };
static const struct Hook RX_6UnlockGUIHook   = { {NULL, NULL}, (void *)RX_6UnlockGUIFunc  , NULL, NULL };


/*
 * AREXX --------------------------------------------
 */
static struct MUI_Command rxcommands[] =
{
   // PROJECT-RELATED COMMANDS
   { "NEW",    MC_TEMPLATE_ID,         ID_MENU_PROJECT_NEW,   NULL            },
   { "CLEAR",  "FORCE/S",              1,                     &RX_1ClearHook  },
   { "OPEN",   "FILENAME/A,FORCE/S",   2,                     &RX_1OpenHook   },
   { "SAVE",   MC_TEMPLATE_ID,         ID_MENU_PROJECT_SAVE,  NULL            },
   { "SAVEAS", "NAME/A",               1,                     &RX_1SaveasHook },
   { "CLOSE",  MC_TEMPLATE_ID,         ID_MENU_PROJECT_QUIT,  NULL            },
   { "QUIT",   "FORCE/S",              1,                     &RX_1QuitHook   },

   // WINDOW-RELATED COMMANDS
   { "MOVEWINDOW",      "WINDOW/A,LEFTEDGE/N,TOPEDGE/N", 3, &RX_4MoveWdwHook     },
   { "SIZEWINDOW",      "WINDOW/A,WIDTH/N,HEIGHT/N",     3, &RX_4SizeWdwHook     },
   { "CHANGEWINDOW",    "WINDOW/A,LEFTEDGE/N,TOPEDGE/N,WIDTH/N,HEIGHT/N",
                                                         5, &RX_4ChangeWdwHook   },
   { "WINDOWTOFRONT",   "WINDOW/A",                      1, &RX_4Wdw2FrontHook   },
   { "WINDOWTOBACK",    "WINDOW/A",                      1, &RX_4Wdw2BackHook    },
   { "ACTIVATEWINDOW",  "WINDOW/A",                      1, &RX_4ActivateWdwHook },
   { "ZOOMWINDOW",      "WINDOW/A",                      1, &RX_4ZoomWdwHook     },
   { "UNZOOMWINDOW",    "WINDOW/A",                      1, &RX_4UnzoomWdwHook   },

   // APPLICATION-SPECIFIC COMMANDS

   // INTERFACE COMMANDS
   { "LOCKGUI",   "", 0, &RX_6LockGUIHook    },
   { "UNLOCKGUI", "", 0, &RX_6UnlockGUIHook  },

   { NULL, NULL, NULL, NULL }
};

RXCommands = (struct MUI_Command *)rxcommands;
