/*
 * Windows.c   (C) 1995 John M Haubrich Jr   All Rights Under Copyright Reserved
 *
 * Yeah, I know, icky title!
 */

#include "common.h"


struct NewMenu Menu_MainMenu[] = {
   NM_TITLE, (STRPTR)"Project", NULL, 0, NULL, NULL,
   NM_ITEM, (STRPTR)"New",            (STRPTR)"N", 0, 0L, (APTR)ID_MENU_NEW,
   NM_ITEM, (STRPTR)NM_BARLABEL,             NULL, 0, 0L, NULL,
   NM_ITEM, (STRPTR)"Open",           (STRPTR)"O", 0, 0L, (APTR)ID_MENU_OPEN,
   NM_ITEM, (STRPTR)"Save",           (STRPTR)"S", 0, 0L, (APTR)ID_MENU_SAVE,
   NM_ITEM, (STRPTR)"Save As...",     (STRPTR)"A", 0, 0L, (APTR)ID_MENU_SAVEAS,
   NM_ITEM, (STRPTR)NM_BARLABEL,             NULL, 0, 0L, NULL,
   NM_ITEM, (STRPTR)"About...",       (STRPTR)"?", 0, 0L, (APTR)ID_MENU_ABOUT,
   NM_ITEM, (STRPTR)"About MUI...",          NULL, 0, 0L, (APTR)ID_MENU_ABOUTMUI,
   NM_ITEM, (STRPTR)NM_BARLABEL,             NULL, 0, 0L, NULL,
   NM_ITEM, (STRPTR)"Quit",           (STRPTR)"Q", 0, 0L, (APTR)ID_MENU_QUIT,
   NM_TITLE, (STRPTR)"Settings", NULL, 0, NULL, NULL,
   NM_ITEM, (STRPTR)"MUI...",                NULL, 0, 0L, (APTR)ID_MENU_SETTINGSMUI,
};


extern struct MyGlobals  MG;
extern UBYTE  GL_szFault[256];

extern struct MainWindow         MAIN;
extern struct HiddenWindow       HIDDEN;
extern struct CardsWindow        CARDS;
extern struct VictoryWindow      VICTORY;

extern UBYTE  numarms[6];          // number armies ea plyr has to place
extern UBYTE  zoneowner[6];        // owner of a zone (1..6)
extern UBYTE  terrowner[44];       // owner of a territory (1..6)
extern UBYTE  terrarms[44];        // number of armies on a territory
extern UBYTE  fortterr[6];         // territory number of fortress
extern UBYTE  fortflags[7];        // number of flags flying in a fortress
extern UBYTE  hidden[6];           // where are the hidden armies?
extern UBYTE  plyrcards[6][7];     // a player's deck count -- (player#,card#)
                                   // plyrcards[][0] holds total # of cards plyr has

UBYTE *szCYC_ArmiesQty[] = { "1", "5", "10", "ALL", NULL };


/*
 * APP MESSAGE HOOK FUNCTIONS -----------------------
 */
SAVEDS ASM LONG AppMsgFunc( REG(a2)APTR obj, REG(a1)struct AppMessage **appmsg )
{
   struct WBArg      *ap;
   struct AppMessage *amsg = *appmsg;
   static char        buf[256];
   BOOL               fSure = TRUE;    // sure you want to load this?


   ap = amsg->am_ArgList;
   NameFromLock( ap->wa_Lock, buf, sizeof( buf ) );
   AddPart( buf, ap->wa_Name, sizeof( buf ) );

   // if there are items in the listview, ask before loading!
   fSure = MUI_Request( MG.App, MG.WIN_Main, 0, NULL, "OK|*Cancel",
                        "Are you sure you want to load the new file?", NULL );
   if ( fSure == TRUE )
   {
      // load data file
      strcpy( MG.szProjectSpec, buf );
      fnOpen( MG.szProjectSpec, FALSE );
   }

   return( 0 );
}
static const struct Hook AppMsgHook = { { NULL,NULL }, (VOID *)AppMsgFunc, NULL, NULL };

SAVEDS ASM LONG RefreshMapFunc( REG(a2)APTR obj, REG(a1)APTR dummy )
{
   get( MAIN.MCC_MouseArea, MUIA_MouseArea_RastPort, &MG.Rp );
   if ( MG.mooseptr )
   {
      SetFont( MG.Rp, MG.mooseptr );
   }
   fnRefreshMap();

   return( 0 );
}
static const struct Hook RefreshMapHook = { { NULL,NULL }, (VOID *)RefreshMapFunc, NULL, NULL };


//
// WINDOW: MAIN        ---------------------------------------------------
//
BOOL fnConstructMainWindow( void )
{
   MG.WIN_Main = WindowObject,
      MUIA_Window_ID, MAKE_ID('S','F','R','T'),
      MUIA_Window_AppWindow, TRUE,
      MUIA_Window_Title, "Steel Fortress - Release 3.0",
      MUIA_Window_Menustrip, MAIN.MENU_Strip = MUI_MakeObject( MUIO_MenustripNM, Menu_MainMenu, 0 ),
      MUIA_HelpNode, "mainwdw",
      WindowContents, VGroup,
         Child, HGroup,
            Child, MAIN.TXT_Player = TextObject,
               TextFrame,
               MUIA_Background, MUII_TextBack,
               MUIA_Text_Contents, "PLAYER M",
               MUIA_Text_SetMax, TRUE,
               End,
            Child, MAIN.CLF_PlayerColor = ColorfieldObject,
               MUIA_Colorfield_Pen, 0,
               MUIA_FixWidth, 32,
               End,
            Child, MAIN.TXT_StatusLine = TextObject,
               TextFrame,
               MUIA_Background, MUII_TextBack,
               End,
            End,
         Child, HGroup,
            Child, KeyLabel( "Armies", 'a' ),
            Child, MAIN.CYC_ArmiesQty = KeyCycle( szCYC_ArmiesQty, 'a' ),
            Child, HSpace(0),
            Child, MAIN.BUT_General = KeyCheckMark( FALSE, 'g' ),
            Child, MAIN.TXT_General = TextObject,
               End,
            Child, MAIN.BUT_Admiral = KeyCheckMark( FALSE, 'd' ),
            Child, MAIN.TXT_Admiral = TextObject,
               End,
            Child, HSpace(0),
            Child, Label( "Attack from" ),
            Child, MAIN.TXT_AttackFrom = TextObject,
               TextFrame,
               MUIA_Background, MUII_TextBack,
               End,
//            Child, MAIN.BUT_General = ImageObject, ImageButtonFrame,
//               MUIA_InputMode      , MUIV_InputMode_Toggle,
//               MUIA_Image_Spec     , "5:general.iff",
//               MUIA_Image_FreeHoriz, TRUE,
//               MUIA_Image_FreeVert , TRUE,
//               MUIA_FixWidth       , 25,
//               MUIA_FixHeight      , 25,
//               MUIA_Selected       , FALSE,
//               MUIA_Background     , MUII_ButtonBack,
//               MUIA_ShowSelState   , FALSE,
//               End,
            Child, Label( "To" ),
            Child, MAIN.TXT_AttackTo = TextObject,
               TextFrame,
               MUIA_Background, MUII_TextBack,
               End,
//            Child, MAIN.BUT_Admiral = ImageObject, ImageButtonFrame,
//               MUIA_InputMode      , MUIV_InputMode_Toggle,
//               MUIA_Image_Spec     , "5:admiral.iff",
//               MUIA_Image_FreeHoriz, TRUE,
//               MUIA_Image_FreeVert , TRUE,
//               MUIA_FixWidth       , 25,
//               MUIA_FixHeight      , 25,
//               MUIA_Selected       , FALSE,
//               MUIA_Background     , MUII_ButtonBack,
//               MUIA_ShowSelState   , FALSE,
//               End,
            End,
         Child, ScrollgroupObject,
            MUIA_Scrollgroup_FreeHoriz, TRUE,
            MUIA_Scrollgroup_FreeVert , TRUE,
            MUIA_Scrollgroup_Contents, VirtgroupObject, VirtualFrame, 
               Child, MAIN.MCC_MouseArea = MouseAreaObject,
                  MUIA_MouseArea_Image, "steelfort16.iff",
                  TAG_DONE),
               End,
            End,
         Child, HGroup,
            Child, MAIN.BUT_PlayCards = KeyButton( "Play Cards...", 'c' ),
            Child, HSpace(0),
            Child, MAIN.BUT_HiddenArmies = KeyButton( "Hidden Armies...", 'h' ),
            Child, HSpace(0),
            Child, MAIN.BUT_EndTurn = KeyButton( "End Turn", 'e' ),
            End,
         End,
      End;

   // window failed?
   if ( !MG.WIN_Main )
   {
      return( FALSE );
   }
   else
   {
      // get menu pointers
      MAIN.MENU_Open   = (APTR)DoMethod( MAIN.MENU_Strip, MUIM_FindUData, ID_MENU_OPEN   );
   	MAIN.MENU_Save   = (APTR)DoMethod( MAIN.MENU_Strip, MUIM_FindUData, ID_MENU_SAVE   );
      MAIN.MENU_SaveAs = (APTR)DoMethod( MAIN.MENU_Strip, MUIM_FindUData, ID_MENU_SAVEAS );

      // make gadget connections
      DoMethod( MG.App, MUIM_Notify, MUIA_Application_Iconified, FALSE,
                MG.App, 2, MUIM_CallHook, &RefreshMapHook );

      DoMethod( MG.WIN_Main, MUIM_Notify, MUIA_AppMessage, MUIV_EveryTime,
                MG.App, 3, MUIM_CallHook, &AppMsgHook, MUIV_TriggerValue );

      DoMethod( MG.WIN_Main, MUIM_Notify, MUIA_Window_CloseRequest, TRUE,
                MG.App, 2, MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit );

      DoMethod( MAIN.MCC_MouseArea, MUIM_Notify, MUIA_MouseArea_MouseClicked, TRUE,
                MG.App, 2, MUIM_Application_ReturnID, ID_MCC_MAIN_MOUSEAREA );

      DoMethod( MAIN.BUT_PlayCards   , MUIM_Notify, MUIA_Pressed, FALSE, MG.App, 2, MUIM_Application_ReturnID, ID_BUT_MAIN_PLAYCARDS    );
      DoMethod( MAIN.BUT_HiddenArmies, MUIM_Notify, MUIA_Pressed, FALSE, MG.App, 2, MUIM_Application_ReturnID, ID_BUT_MAIN_HIDDENARMIES );
      DoMethod( MAIN.BUT_EndTurn     , MUIM_Notify, MUIA_Pressed, FALSE, MG.App, 2, MUIM_Application_ReturnID, ID_BUT_MAIN_ENDTURN      );

      // set up help for menus
      DoMethod( MG.App, MUIM_Notify, MUIA_Application_MenuHelp, MUIV_EveryTime,
                MG.App, 5, MUIM_Application_ShowHelp, MG.WIN_Main, "PROGDIR:SteelFortress.guide", "mainmenus", 0 );

      // set tab cycle chain
      DoMethod( MG.WIN_Main, MUIM_Window_SetCycleChain,
                MAIN.CYC_ArmiesQty,
                MAIN.BUT_General,
                MAIN.BUT_Admiral,
                MAIN.BUT_PlayCards,
                MAIN.BUT_HiddenArmies,
                MAIN.BUT_EndTurn,
                NULL );

      // add window to Application object
      DoMethod( MG.App, OM_ADDMEMBER, MG.WIN_Main );

      return( TRUE );
   }
}
BOOL fnInitMainWindow( void )
{
   set( MG.WIN_Main, MUIA_Window_DefaultObject, MAIN.MCC_MouseArea );
   set( MG.WIN_Main, MUIA_Window_Open, TRUE );

   return( TRUE );
}
void fnClearMainWindow( void )
{
   set( MAIN.TXT_Player    , MUIA_Text_Contents, NULL  );
   set( MAIN.TXT_StatusLine, MUIA_Text_Contents, NULL  );
   set( MAIN.CYC_ArmiesQty , MUIA_Cycle_Active , 0     );
   set( MAIN.TXT_AttackFrom, MUIA_Text_Contents, NULL  );
   set( MAIN.BUT_General   , MUIA_Selected     , FALSE );
   set( MAIN.TXT_AttackTo  , MUIA_Text_Contents, NULL  );
//   set( MAIN.BUT_Commander , MUIA_Selected     , FALSE );
   set( MAIN.BUT_Admiral   , MUIA_Selected     , FALSE );

   set( MAIN.BUT_PlayCards   , MUIA_Disabled, TRUE );
   set( MAIN.BUT_HiddenArmies, MUIA_Disabled, TRUE );
   set( MAIN.BUT_EndTurn     , MUIA_Disabled, TRUE );
   set( MAIN.CYC_ArmiesQty   , MUIA_Disabled, TRUE );
}


//
// WINDOW: HIDDEN      ---------------------------------------------------
//
BOOL fnConstructHiddenWindow( void )
{
   MG.WIN_Hidden = WindowObject,
      MUIA_Window_ID, MAKE_ID('H','I','D','N'),
      MUIA_Window_Title, "Hidden Armies",
      MUIA_HelpNode, "hiddenwdw",
      WindowContents, VGroup,
         Child, HGroup,
            Child, HSpace(0),
            Child, HIDDEN.TXT_CurrentBonus = TextObject,
               End,
            Child, HSpace(0),
            End,
         Child, VSpace(0),
         Child, ColGroup(5),
            Child, HIDDEN.CHE_Player[0] = KeyCheckMark( FALSE, '1' ),
            Child, KeyLabel( "Player 1", '1' ),
            Child, HSpace(0),
            Child, HIDDEN.CHE_Player[3] = KeyCheckMark( FALSE, '4' ),
            Child, KeyLabel( "Player 4", '4' ),
            Child, HIDDEN.CHE_Player[1] = KeyCheckMark( FALSE, '2' ),
            Child, KeyLabel( "Player 2", '2' ),
            Child, HSpace(0),
            Child, HIDDEN.CHE_Player[4] = KeyCheckMark( FALSE, '5' ),
            Child, KeyLabel( "Player 5", '5' ),
            Child, HIDDEN.CHE_Player[2] = KeyCheckMark( FALSE, '3' ),
            Child, KeyLabel( "Player 3", '3' ),
            Child, HSpace(0),
            Child, HIDDEN.CHE_Player[5] = KeyCheckMark( FALSE, '6' ),
            Child, KeyLabel( "Player 6", '6' ),
            End,
         Child, VSpace(0),
         Child, HGroup,
            Child, HIDDEN.BUT_OK = SimpleButton( "OK" ),
            Child, HSpace(0),
            Child, HIDDEN.BUT_Cancel = SimpleButton( "Cancel" ),
            End,
         End,
      End;

   // window failed?
   if ( !MG.WIN_Hidden )
   {
      return( FALSE );
   }
   else
   {
      // make gadget connections
      DoMethod( MG.WIN_Hidden, MUIM_Notify, MUIA_Window_CloseRequest, TRUE,
                MG.App, 2, MUIM_Application_ReturnID, ID_BUT_HIDDEN_CANCEL );

      DoMethod( HIDDEN.BUT_OK    , MUIM_Notify, MUIA_Pressed, FALSE, MG.App, 2, MUIM_Application_ReturnID, ID_BUT_HIDDEN_OK     );
      DoMethod( HIDDEN.BUT_Cancel, MUIM_Notify, MUIA_Pressed, FALSE, MG.App, 2, MUIM_Application_ReturnID, ID_BUT_HIDDEN_CANCEL );

      // set tab cycle chain
      DoMethod( MG.WIN_Hidden, MUIM_Window_SetCycleChain,
                HIDDEN.CHE_Player[0],
                HIDDEN.CHE_Player[1],
                HIDDEN.CHE_Player[2],
                HIDDEN.CHE_Player[3],
                HIDDEN.CHE_Player[4],
                HIDDEN.CHE_Player[5],
                HIDDEN.BUT_OK,
                HIDDEN.BUT_Cancel,
                NULL );

      // add window to Application object
      DoMethod( MG.App, OM_ADDMEMBER, MG.WIN_Hidden );

      return( TRUE );
   }
}
BOOL fnInitHiddenWindow( void )
{
   set( MG.WIN_Hidden, MUIA_Window_Open, TRUE );
   set( MG.WIN_Hidden, MUIA_Window_DefaultObject, HIDDEN.BUT_OK );
   set( MG.WIN_Main, MUIA_Window_Sleep, TRUE );

   return( TRUE );
}
BOOL fnDestructHiddenWindow( BOOL fOKorCANCEL )
{
   switch( fOKorCANCEL )
   {
      case TRUE:     // OK
         set( MG.WIN_Hidden, MUIA_Window_Open, FALSE );
         break;
      case FALSE:    // CANCEL
         set( MG.WIN_Hidden, MUIA_Window_Open, FALSE );
         break;
   }

   set( MG.WIN_Main, MUIA_Window_Sleep, FALSE );
   return( TRUE );
}
void fnClearHiddenWindow( void )
{
   set( HIDDEN.TXT_CurrentBonus, MUIA_Text_Contents, NULL );
   set( HIDDEN.CHE_Player[0], MUIA_Selected, FALSE );
   set( HIDDEN.CHE_Player[1], MUIA_Selected, FALSE );
   set( HIDDEN.CHE_Player[2], MUIA_Selected, FALSE );
   set( HIDDEN.CHE_Player[3], MUIA_Selected, FALSE );
   set( HIDDEN.CHE_Player[4], MUIA_Selected, FALSE );
   set( HIDDEN.CHE_Player[5], MUIA_Selected, FALSE );
}


//
// WINDOW: CARDS       ---------------------------------------------------
//
BOOL fnConstructCardsWindow( void )
{
   MG.WIN_Cards = WindowObject,
      MUIA_Window_ID, MAKE_ID('C','A','R','D'),
      MUIA_Window_Title, "Play Cards",
      MUIA_HelpNode, "cardswdw",
      WindowContents, VGroup,
         Child, HGroup,
            Child, HSpace(0),
            Child, CARDS.TXT_Player = TextObject,
               End,
            Child, HSpace(0),
            End,
         Child, RectangleObject,
            MUIA_Rectangle_HBar, TRUE,
            End,
         Child, ColGroup(3),
            Child, Label1( "Admirals" ),
            Child, HSpace(0),
            Child, CARDS.TXT_Admirals = TextObject, TextFrame,
               MUIA_Background, MUII_TextBack,
               End,
            Child, Label1( "Generals" ),
            Child, HSpace(0),
            Child, CARDS.TXT_Generals = TextObject, TextFrame,
               MUIA_Background, MUII_TextBack,
               End,
            Child, CARDS.BUT_Troops = KeyButton( "Troops", 't' ),
            Child, HSpace(0),
            Child, CARDS.TXT_Troops = TextObject, TextFrame,
               MUIA_Background, MUII_TextBack,
               End,
            End,
         Child, VGroup, GroupFrameT( "Agents" ),
            Child, HGroup,
               Child, HSpace(0),
               Child, Label1( "Agents Remaining" ),
               Child, CARDS.TXT_AgentsLeft = TextObject, TextFrame,
                  MUIA_Background, MUII_TextBack,
                  End,
               Child, HSpace(0),
               End,
            Child, ColGroup(3),
               MUIA_Group_SameSize, TRUE,
               Child, CARDS.BUT_AgentsAgainst1 = KeyButton( "Austrian", 'a' ),
               Child, CARDS.BUT_AgentsAgainst3 = KeyButton( "French"  , 'f' ),
               Child, CARDS.BUT_AgentsAgainst5 = KeyButton( "Ottoman" , 'o' ),
               Child, CARDS.BUT_AgentsAgainst2 = KeyButton( "British" , 'b' ),
               Child, CARDS.BUT_AgentsAgainst4 = KeyButton( "German"  , 'g' ),
               Child, CARDS.BUT_AgentsAgainst6 = KeyButton( "Russian" , 'r' ),
               End,
            End,
         Child, VSpace(0),
         Child, HGroup,
            Child, HSpace(0),
            Child, CARDS.BUT_Cancel = SimpleButton( "Cancel" ),
            Child, HSpace(0),
            End,
         End,
      End;

   // window failed?
   if ( !MG.WIN_Cards )
   {
      return( FALSE );
   }
   else
   {
      // make gadget connections
      DoMethod( MG.WIN_Cards, MUIM_Notify, MUIA_Window_CloseRequest, TRUE,
                MG.App, 2, MUIM_Application_ReturnID, ID_BUT_CARDS_CANCEL );

      DoMethod( CARDS.BUT_AgentsAgainst1, MUIM_Notify, MUIA_Pressed, FALSE, MG.App, 2, MUIM_Application_ReturnID, ID_BUT_CARDS_AGENT1 );
      DoMethod( CARDS.BUT_AgentsAgainst2, MUIM_Notify, MUIA_Pressed, FALSE, MG.App, 2, MUIM_Application_ReturnID, ID_BUT_CARDS_AGENT2 );
      DoMethod( CARDS.BUT_AgentsAgainst3, MUIM_Notify, MUIA_Pressed, FALSE, MG.App, 2, MUIM_Application_ReturnID, ID_BUT_CARDS_AGENT3 );
      DoMethod( CARDS.BUT_AgentsAgainst4, MUIM_Notify, MUIA_Pressed, FALSE, MG.App, 2, MUIM_Application_ReturnID, ID_BUT_CARDS_AGENT4 );
      DoMethod( CARDS.BUT_AgentsAgainst5, MUIM_Notify, MUIA_Pressed, FALSE, MG.App, 2, MUIM_Application_ReturnID, ID_BUT_CARDS_AGENT5 );
      DoMethod( CARDS.BUT_AgentsAgainst6, MUIM_Notify, MUIA_Pressed, FALSE, MG.App, 2, MUIM_Application_ReturnID, ID_BUT_CARDS_AGENT6 );
      DoMethod( CARDS.BUT_Troops        , MUIM_Notify, MUIA_Pressed, FALSE, MG.App, 2, MUIM_Application_ReturnID, ID_BUT_CARDS_TROOPS );
      DoMethod( CARDS.BUT_Cancel        , MUIM_Notify, MUIA_Pressed, FALSE, MG.App, 2, MUIM_Application_ReturnID, ID_BUT_CARDS_CANCEL );

      // set tab cycle chain
      DoMethod( MG.WIN_Cards, MUIM_Window_SetCycleChain,
                CARDS.BUT_AgentsAgainst1,
                CARDS.BUT_AgentsAgainst2,
                CARDS.BUT_AgentsAgainst3,
                CARDS.BUT_AgentsAgainst4,
                CARDS.BUT_AgentsAgainst5,
                CARDS.BUT_AgentsAgainst6,
                CARDS.BUT_Troops,
                CARDS.BUT_Cancel,
                NULL );

      // add window to Application object
      DoMethod( MG.App, OM_ADDMEMBER, MG.WIN_Cards );

      return( TRUE );
   }
}
BOOL fnInitCardsWindow( void )
{
   set( CARDS.BUT_AgentsAgainst1, MUIA_Disabled, FALSE );
   set( CARDS.BUT_AgentsAgainst2, MUIA_Disabled, FALSE );
   set( CARDS.BUT_AgentsAgainst3, MUIA_Disabled, FALSE );
   set( CARDS.BUT_AgentsAgainst4, MUIA_Disabled, FALSE );
   set( CARDS.BUT_AgentsAgainst5, MUIA_Disabled, FALSE );
   set( CARDS.BUT_AgentsAgainst6, MUIA_Disabled, FALSE );

   switch( MG.ubCurrPlayer )
   {
      case 0:  set( CARDS.BUT_AgentsAgainst1, MUIA_Disabled, TRUE );    break;
      case 1:  set( CARDS.BUT_AgentsAgainst2, MUIA_Disabled, TRUE );    break;
      case 2:  set( CARDS.BUT_AgentsAgainst3, MUIA_Disabled, TRUE );    break;
      case 3:  set( CARDS.BUT_AgentsAgainst4, MUIA_Disabled, TRUE );    break;
      case 4:  set( CARDS.BUT_AgentsAgainst5, MUIA_Disabled, TRUE );    break;
      case 5:  set( CARDS.BUT_AgentsAgainst6, MUIA_Disabled, TRUE );    break;
   }

   if ( !fortflags[ 0 ] )   set( CARDS.BUT_AgentsAgainst1, MUIA_Disabled, TRUE );
   if ( !fortflags[ 1 ] )   set( CARDS.BUT_AgentsAgainst2, MUIA_Disabled, TRUE );
   if ( !fortflags[ 2 ] )   set( CARDS.BUT_AgentsAgainst3, MUIA_Disabled, TRUE );
   if ( !fortflags[ 3 ] )   set( CARDS.BUT_AgentsAgainst4, MUIA_Disabled, TRUE );
   if ( !fortflags[ 4 ] )   set( CARDS.BUT_AgentsAgainst5, MUIA_Disabled, TRUE );
   if ( !fortflags[ 5 ] )   set( CARDS.BUT_AgentsAgainst6, MUIA_Disabled, TRUE );

   if ( fortflags[ 0 ] )
      if ( terrarms[ fortterr[ 0 ] ] <= 2 )  set( CARDS.BUT_AgentsAgainst1, MUIA_Disabled, TRUE );
   if ( fortflags[ 1 ] )
      if ( terrarms[ fortterr[ 1 ] ] <= 2 )  set( CARDS.BUT_AgentsAgainst2, MUIA_Disabled, TRUE );
   if ( fortflags[ 2 ] )
      if ( terrarms[ fortterr[ 2 ] ] <= 2 )  set( CARDS.BUT_AgentsAgainst3, MUIA_Disabled, TRUE );
   if ( fortflags[ 3 ] )
      if ( terrarms[ fortterr[ 3 ] ] <= 2 )  set( CARDS.BUT_AgentsAgainst4, MUIA_Disabled, TRUE );
   if ( fortflags[ 4 ] )
      if ( terrarms[ fortterr[ 4 ] ] <= 2 )  set( CARDS.BUT_AgentsAgainst5, MUIA_Disabled, TRUE );
   if ( fortflags[ 5 ] )
      if ( terrarms[ fortterr[ 5 ] ] <= 2 )  set( CARDS.BUT_AgentsAgainst6, MUIA_Disabled, TRUE );

   sprintf( MG.szCardsPlayerTxt, "\33cPLAYER %d", MG.ubCurrPlayer + 1 );
   set( CARDS.TXT_Player, MUIA_Text_Contents, MG.szCardsPlayerTxt );

   sprintf( MG.szAgentsTxt, "%2.2d", plyrcards[ MG.ubCurrPlayer ][ CARD_AGENT ] );
   set( CARDS.TXT_AgentsLeft, MUIA_Text_Contents, MG.szAgentsTxt );

   sprintf( MG.szAdmiralsTxt, "%2.2d", plyrcards[ MG.ubCurrPlayer ][ CARD_ADMIRAL ] );
   set( CARDS.TXT_Admirals, MUIA_Text_Contents, MG.szAdmiralsTxt );

   sprintf( MG.szGeneralsTxt, "%2.2d", plyrcards[ MG.ubCurrPlayer ][ CARD_GENERAL ] );
   set( CARDS.TXT_Generals, MUIA_Text_Contents, MG.szGeneralsTxt );

   if ( plyrcards[ MG.ubCurrPlayer ][ CARD_AGENT ] == 0 )
   {
      set( CARDS.BUT_AgentsAgainst1, MUIA_Disabled, TRUE );
      set( CARDS.BUT_AgentsAgainst2, MUIA_Disabled, TRUE );
      set( CARDS.BUT_AgentsAgainst3, MUIA_Disabled, TRUE );
      set( CARDS.BUT_AgentsAgainst4, MUIA_Disabled, TRUE );
      set( CARDS.BUT_AgentsAgainst5, MUIA_Disabled, TRUE );
      set( CARDS.BUT_AgentsAgainst6, MUIA_Disabled, TRUE );
   }

   sprintf( MG.szTroopsTxt, "%2.2d", 3 * plyrcards[ MG.ubCurrPlayer ][ CARD_TROOPS ] );
   set( CARDS.TXT_Troops, MUIA_Text_Contents, MG.szTroopsTxt );
   if ( plyrcards[ MG.ubCurrPlayer ][ CARD_TROOPS ] == 0 )
   {
      set( CARDS.BUT_Troops, MUIA_Disabled, TRUE );
   }
   else
   {
      set( CARDS.BUT_Troops, MUIA_Disabled, FALSE );
   }

   set( MG.WIN_Cards, MUIA_Window_Open, TRUE );
   set( MG.WIN_Cards, MUIA_Window_DefaultObject, CARDS.BUT_Cancel );
   set( MG.WIN_Main, MUIA_Window_Sleep, TRUE );

   return( TRUE );
}

BOOL fnDestructCardsWindow( BOOL fOKorCANCEL )
{
   switch( fOKorCANCEL )
   {
      case TRUE:     // OK
         set( MG.WIN_Cards, MUIA_Window_Open, FALSE );
         break;
      case FALSE:    // CANCEL
         set( MG.WIN_Cards, MUIA_Window_Open, FALSE );
         break;
   }

   set( MG.WIN_Main, MUIA_Window_Sleep, FALSE );
   return( TRUE );
}
void fnClearCardsWindow( void )
{
   set( CARDS.TXT_Player    , MUIA_Text_Contents, NULL );
   set( CARDS.TXT_Admirals  , MUIA_Text_Contents, NULL );
   set( CARDS.TXT_Generals  , MUIA_Text_Contents, NULL );
//   set( CARDS.TXT_Commanders, MUIA_Text_Contents, NULL );
   set( CARDS.TXT_Troops    , MUIA_Text_Contents, NULL );
}


//
// WINDOW: VICTORY     ---------------------------------------------------
//
BOOL fnConstructVictoryWindow( void )
{
   MG.WIN_Victory = WindowObject,
      MUIA_Window_ID, MAKE_ID('V','I','C','T'),
      MUIA_Window_Title, "Victory!",
      MUIA_HelpNode, "victorywdw",
      WindowContents, VGroup,
         Child, ImageObject, ImageButtonFrame,
            MUIA_Image_Spec     , "5:victory.iff",
            MUIA_Image_FreeHoriz, TRUE,
            MUIA_Image_FreeVert , TRUE,
            MUIA_FixWidth       , 352,
            MUIA_FixHeight      , 240,
            MUIA_Selected       , FALSE,
            MUIA_Background     , MUII_ButtonBack,
            End,
         Child, VSpace(0),
         Child, HGroup,
            Child, VICTORY.BUT_PlayAgain = KeyButton( "Play again", 'p' ),
            Child, HSpace(0),
            Child, VICTORY.BUT_Quit      = KeyButton( "Quit", 'q' ),
            End,
         End,
      End;

   // window failed?
   if ( !MG.WIN_Victory )
   {
      return( FALSE );
   }
   else
   {
      // make gadget connections
      DoMethod( MG.WIN_Victory, MUIM_Notify, MUIA_Window_CloseRequest, TRUE,
                MG.App, 2, MUIM_Application_ReturnID, ID_BUT_VICTORY_QUIT );

      DoMethod( VICTORY.BUT_PlayAgain, MUIM_Notify, MUIA_Pressed, FALSE, MG.App, 2, MUIM_Application_ReturnID, ID_BUT_VICTORY_PLAY );
      DoMethod( VICTORY.BUT_Quit     , MUIM_Notify, MUIA_Pressed, FALSE, MG.App, 2, MUIM_Application_ReturnID, ID_BUT_VICTORY_QUIT );

      // set tab cycle chain
      DoMethod( MG.WIN_Victory, MUIM_Window_SetCycleChain,
                VICTORY.BUT_PlayAgain,
                VICTORY.BUT_Quit,
                NULL );

      // add window to Application object
      DoMethod( MG.App, OM_ADDMEMBER, MG.WIN_Victory );

      return( TRUE );
   }
}
BOOL fnInitVictoryWindow( void )
{
   set( MG.WIN_Victory, MUIA_Window_ActiveObject, VICTORY.BUT_PlayAgain );
   set( MG.WIN_Victory, MUIA_Window_Open, TRUE );
   set( MG.WIN_Main, MUIA_Window_Sleep, TRUE );

   return( TRUE );
}

BOOL fnDestructVictoryWindow( BOOL fOKorCANCEL )
{
   switch( fOKorCANCEL )
   {
      case TRUE:     // OK
         set( MG.WIN_Victory, MUIA_Window_Open, FALSE );
         break;
      case FALSE:    // CANCEL
         set( MG.WIN_Victory, MUIA_Window_Open, FALSE );
         break;
   }

   set( MG.WIN_Main, MUIA_Window_Sleep, FALSE );
   return( TRUE );
}
