/*
 * menus.h -- platform-indendent menu handling code for XBoard
 *
 * Copyright 1991 by Digital Equipment Corporation, Maynard,
 * Massachusetts.
 *
 * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,
 * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Free
 * Software Foundation, Inc.
 *
 * The following terms apply to Digital Equipment Corporation's copyright
 * interest in XBoard:
 * ------------------------------------------------------------------------
 * All Rights Reserved
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose and without fee is hereby granted,
 * provided that the above copyright notice appear in all copies and that
 * both that copyright notice and this permission notice appear in
 * supporting documentation, and that the name of Digital not be
 * used in advertising or publicity pertaining to distribution of the
 * software without specific, written prior permission.
 *
 * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
 * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
 * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
 * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
 * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
 * SOFTWARE.
 * ------------------------------------------------------------------------
 *
 * The following terms apply to the enhanced version of XBoard
 * distributed by the Free Software Foundation:
 * ------------------------------------------------------------------------
 *
 * GNU XBoard is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or (at
 * your option) any later version.
 *
 * GNU XBoard is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.  *
 *
 *------------------------------------------------------------------------
 ** See the file ChangeLog for a revision history.  */



typedef void MenuProc P((void));

typedef struct {
    char *string;
    char *accel;
    char *ref;
    MenuProc *proc;
    void *handle;
} MenuItem;

typedef struct {
    char *name;
    char *ref;
    MenuItem *mi;
} Menu;

typedef struct {
    char *name;
    Boolean value;
} Enables;

extern Menu menuBar[];

void ErrorPopUp P((char *title, char *text, int modal));
void AppendEnginesToMenu P((char *list));
void LoadGameProc P((void));
void LoadNextGameProc P((void));
void LoadPrevGameProc P((void));
void ReloadGameProc P((void));
void LoadPositionProc P((void));
void LoadNextPositionProc P((void));
void LoadPrevPositionProc P((void));
void ReloadPositionProc P((void));
void CopyPositionProc P((void));
void PastePositionProc P((void));
void CopyGameProc P((void));
void CopyGameListProc P((void));
void PasteGameProc P((void));
void SaveGameProc P((void));
void SavePositionProc P((void));
void ReloadCmailMsgProc P((void));
void QuitProc P((void));
void AnalyzeModeProc P((void));
void AnalyzeFileProc P((void));
void MatchProc P((void));
void MatchOptionsProc P((void));
void EditTagsProc P((void));
void EditCommentProc P((void));
void IcsInputBoxProc P((void));
void ChatProc P((void));
void AdjuWhiteProc P((void));
void AdjuBlackProc P((void));
void AdjuDrawProc P((void));
void RevertProc P((void));
void AnnotateProc P((void));
void AlwaysQueenProc P((void));
void AnimateDraggingProc P((void));
void AnimateMovingProc P((void));
void AutoflagProc P((void));
void AutoflipProc P((void));
void BlindfoldProc P((void));
void FlashMovesProc P((void));
void FlipViewProc P((void));
void HighlightDraggingProc P((void));
void HighlightLastMoveProc P((void));
void HighlightArrowProc P((void));
void MoveSoundProc P((void));
//void IcsAlarmProc P((void));
void OneClickProc P((void));
void PeriodicUpdatesProc P((void));
void PonderNextMoveProc P((void));
void PopupMoveErrorsProc P((void));
void PopupExitMessageProc P((void));
//void PremoveProc P((void));
void ShowCoordsProc P((void));
void ShowThinkingProc P((void));
void HideThinkingProc P((void));
void TestLegalityProc P((void));
void SaveSettingsProc P((void));
void SaveOnExitProc P((void));
void InfoProc P((void));
void ManProc P((void));
void GuideProc P((void));
void HomePageProc P((void));
void NewsPageProc P((void));
void BugReportProc P((void));
void AboutGameProc P((void));
void AboutProc P((void));
void DebugProc P((void));
void NothingProc P((void));
void ShuffleMenuProc P((void));
void EngineMenuProc P((void));
void UciMenuProc P((void));
void TimeControlProc P((void));
void OptionsProc P((void));
void NewVariantProc P((void));
void IcsTextProc P((void));
void LoadEngine1Proc P((void));
void LoadEngine2Proc P((void));
void FirstSettingsProc P((void));
void SecondSettingsProc P((void));
void GameListOptionsProc P((void));
void IcsOptionsProc P((void));
void SoundOptionsProc P((void));
void BoardOptionsProc P((void));
void LoadOptionsProc P((void));
void SaveOptionsProc P((void));
void SaveSettings P((char *));
void EditBookProc P((void));
void InitMenuMarkers P((void));
void FontsProc P((void));
void ShowGameListProc P((void)); // in ngamelist.c
void HistoryShowProc P((void));  // in nhistory.c

// only here because it is the only header shared by xoptions.c and usystem.c
void SetTextColor P((char **cnames, int fg, int bg, int attr));
void ConsoleWrite P((char *message, int count));

// must be moved to xengineoutput.h

void EngineOutputProc P((void));
void EvalGraphProc P((void));

int SaveGameListAsText P((FILE *f));
void FileNamePopUp P((char *label, char *def, char *filter,
		      FileProc proc, char *openMode));

void AppendMenuItem P((char *text, int n));
MenuItem *MenuNameToItem P((char *menuName));
void SetMenuEnables P((Enables *enab));
void EnableButtonBar P((int state));
char *ModeToWidgetName P((GameMode mode));
void CreateAnimVars P((void));
void CopySomething P((char *s));
void EditAnyPopUp P((char *tags, char **dest, char *title));



extern char  *gameCopyFilename, *gamePasteFilename;
extern Boolean saveSettingsOnExit;
extern char *settingsFileName;
extern int firstEngineItem;



#define CHECK (void *) 1
#define RADIO (void *) 2

#define OPTIONSDIALOG
#define INFOFILE     "xboard.info"
