/* command_list.h
 *
 */

/*
    fics - An internet chess server.
    Copyright (C) 1993  Richard V. Nash

    This program 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 2 of the License, or
    (at your option) any later version.

    This program 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.
*/

/* Revision history:
   name		email		yy/mm/dd	Change
   Richard Nash			93/10/22	Created
   Markus Uhlin			23/12/10	Cleaned up the file a bit
   Markus Uhlin			24/07/08	Reformatted and sorted the lists
   Markus Uhlin			24/07/13	Added 'iset' to the command list
   Markus Uhlin			24/11/24	Added 'sought' to the command list
*/

#ifndef _COMMAND_LIST_H
#define _COMMAND_LIST_H

#include "adminproc.h"
#include "comproc.h"
#include "eco.h"
#include "gameproc.h"
#include "iset.h"
#include "lists.h"
#include "matchproc.h"
#include "obsproc.h"
#include "playerdb.h"
#include "rating_conv.h"
#include "ratings.h"
#include "shutdown.h"
#include "sought.h"
#include "talkproc.h"

extern command_type	command_list[];
extern alias_type	g_alias_list[];

/*
  Parameter string format
  w - a word
  o - an optional word
  d - integer
  p - optional integer
  i - word or integer
  n - optional word or integer
  s - string to end
  t - optional string to end

  If the parameter option is given in lower case then the parameter is
  converted to lower case before being passsed to the function. If it is
  in upper case, then the parameter is passed as typed.
 */
/* Try to keep this list in alpha order, that is the way it is shown to
 * the 'help commands' command.
 */
 /* Name	Options	Functions	Security */
PUBLIC command_type command_list[] = {

  {"abort",              "",       com_abort,          ADMIN_USER},
  {"accept",             "n",      com_accept,         ADMIN_USER},
  {"addlist",            "ww",     com_addlist,        ADMIN_USER},
  {"adjourn",            "",       com_adjourn,        ADMIN_USER},
  {"alias",              "oT",     com_alias,          ADMIN_USER},
  {"allobservers",       "n",      com_allobservers,   ADMIN_USER},
  {"assess",             "oo",     com_assess,         ADMIN_USER},
  {"backward",           "p",      com_backward,       ADMIN_USER},
  {"bell",               "",       com_bell,           ADMIN_USER},
  {"best",               "o",      com_best,           ADMIN_USER},
  {"boards",             "o",      com_boards,         ADMIN_USER},
  {"clearmessages",      "n",      com_clearmessages,  ADMIN_USER},
  {"convert_bcf",        "d",      com_CONVERT_BCF,    ADMIN_USER},
  {"convert_elo",        "d",      com_CONVERT_ELO,    ADMIN_USER},
  {"convert_uscf",       "d",      com_CONVERT_USCF,   ADMIN_USER},
  {"cshout",             "S",      com_cshout,         ADMIN_USER},
  {"date",               "",       com_date,           ADMIN_USER},
  {"decline",            "n",      com_decline,        ADMIN_USER},
  {"draw",               "",       com_draw,           ADMIN_USER},
  {"eco",                "n",      com_eco,            ADMIN_USER},
  {"examine",            "on",     com_examine,        ADMIN_USER},
  {"finger",             "o",      com_stats,          ADMIN_USER},
  {"flag",               "",       com_flag,           ADMIN_USER},
  {"flip",               "",       com_flip,           ADMIN_USER},
  {"forward",            "p",      com_forward,        ADMIN_USER},
  {"games",              "o",      com_games,          ADMIN_USER},
  {"getpi",              "w",      com_getpi,          ADMIN_USER},
  {"goboard",            "w",      com_goboard,        ADMIN_USER},
  {"gonum",              "d",      com_gonum,          ADMIN_USER},
  {"handles",            "w",      com_handles,        ADMIN_USER},
  {"hbest",              "o",      com_hbest,          ADMIN_USER},
  {"help",               "o",      com_help,           ADMIN_USER},
  {"history",            "o",      com_history,        ADMIN_USER},
  {"hrank",              "oo",     com_hrank,          ADMIN_USER},
  {"inchannel",          "n",      com_inchannel,      ADMIN_USER},
  {"index",              "o",      com_index,          ADMIN_USER},
  {"info",               "",       com_info,           ADMIN_USER},
  {"iset",               "ww",     com_iset,           ADMIN_USER},
  {"it",                 "T",      com_it,             ADMIN_USER},
  {"journal",            "o",      com_journal,        ADMIN_USER},
  {"jsave",              "wwi",    com_jsave,          ADMIN_USER},
  {"kibitz",             "S",      com_kibitz,         ADMIN_USER},
  {"limits",             "",       com_limits,         ADMIN_USER},
  {"llogons",            "",       com_llogons,        ADMIN_USER},
  {"logons",             "o",      com_logons,         ADMIN_USER},
  {"mailhelp",           "o",      com_mailhelp,       ADMIN_USER},
  {"mailmess",           "",       com_mailmess,       ADMIN_USER},
  {"mailmoves",          "n",      com_mailmoves,      ADMIN_USER},
  {"mailoldmoves",       "o",      com_mailoldmoves,   ADMIN_USER},
  {"mailsource",         "o",      com_mailsource,     ADMIN_USER},
  {"mailstored",         "wi",     com_mailstored,     ADMIN_USER},
  {"match",              "wt",     com_match,          ADMIN_USER},
  {"messages",           "nT",     com_messages,       ADMIN_USER},
  {"mexamine",           "w",      com_mexamine,       ADMIN_USER},
  {"moretime",           "d",      com_moretime,       ADMIN_USER},
  {"moves",              "n",      com_moves,          ADMIN_USER},
  {"news",               "o",      com_news,           ADMIN_USER},
  {"next",               "",       com_more,           ADMIN_USER},
  {"observe",            "n",      com_observe,        ADMIN_USER},
  {"oldmoves",           "o",      com_oldmoves,       ADMIN_USER},
  {"open",               "",       com_open,           ADMIN_USER},
  {"partner",            "o",      com_partner,        ADMIN_USER},
  {"password",           "WW",     com_password,       ADMIN_USER},
  {"pause",              "",       com_pause,          ADMIN_USER},
  {"pending",            "",       com_pending,        ADMIN_USER},
  {"prefresh",           "",       com_prefresh,       ADMIN_USER},
  {"promote",            "w",      com_promote,        ADMIN_USER},
  {"ptell",              "S",      com_ptell,          ADMIN_USER},
  {"qtell",              "iS",     com_qtell,          ADMIN_USER},
  {"quit",               "",       com_quit,           ADMIN_USER},
  {"rank",               "oo",     com_rank,           ADMIN_USER},
  {"refresh",            "n",      com_refresh,        ADMIN_USER},
  {"resign",             "o",      com_resign,         ADMIN_USER},
  {"revert",             "",       com_revert,         ADMIN_USER},
  {"say",                "S",      com_say,            ADMIN_USER},
  {"servers",            "",       com_servers,        ADMIN_USER},
  {"set",                "wT",     com_set,            ADMIN_USER},
  {"shout",              "T",      com_shout,          ADMIN_USER},
  {"showlist",           "o",      com_showlist,       ADMIN_USER},
  {"simabort",           "",       com_simabort,       ADMIN_USER},
  {"simadjourn",         "",       com_simadjourn,     ADMIN_USER},
  {"simallabort",        "",       com_simallabort,    ADMIN_USER},
  {"simalladjourn",      "",       com_simalladjourn,  ADMIN_USER},
  {"simgames",           "o",      com_simgames,       ADMIN_USER},
  {"simmatch",           "w",      com_simmatch,       ADMIN_USER},
  {"simnext",            "",       com_simnext,        ADMIN_USER},
  {"simopen",            "",       com_simopen,        ADMIN_USER},
  {"simpass",            "",       com_simpass,        ADMIN_USER},
  {"simprev",            "",       com_simprev,        ADMIN_USER},
  {"smoves",             "wi",     com_smoves,         ADMIN_USER},
  {"sought",             "o",      com_sought,         ADMIN_USER},
  {"sposition",          "ww",     com_sposition,      ADMIN_USER},
  {"statistics",         "",       com_statistics,     ADMIN_USER},
  {"stored",             "o",      com_stored,         ADMIN_USER},
  {"style",              "d",      com_style,          ADMIN_USER},
  {"sublist",            "ww",     com_sublist,        ADMIN_USER},
  {"switch",             "",       com_switch,         ADMIN_USER},
  {"takeback",           "p",      com_takeback,       ADMIN_USER},
  {"tell",               "nS",     com_tell,           ADMIN_USER},
  {"time",               "n",      com_time,           ADMIN_USER},
  {"unalias",            "w",      com_unalias,        ADMIN_USER},
  {"unexamine",          "",       com_unexamine,      ADMIN_USER},
  {"unobserve",          "n",      com_unobserve,      ADMIN_USER},
  {"unpause",            "",       com_unpause,        ADMIN_USER},
  {"uptime",             "",       com_uptime,         ADMIN_USER},
  {"uscf",               "o",      com_uscf,           ADMIN_USER},
  {"variables",          "o",      com_variables,      ADMIN_USER},
  {"whenshut",           "",       com_whenshut,       ADMIN_USER},
  {"whisper",            "S",      com_whisper,        ADMIN_USER},
  {"who",                "T",      com_who,            ADMIN_USER},
  {"withdraw",           "n",      com_withdraw,       ADMIN_USER},
  {"xtell",              "wS",     com_xtell,          ADMIN_USER},
  {"znotify",            "",       com_znotify,        ADMIN_USER},

  {"addcomment",         "wS",     com_addcomment,     ADMIN_ADMIN},
  {"addplayer",          "WWS",    com_addplayer,      ADMIN_ADMIN},
  {"adjudicate",         "www",    com_adjudicate,     ADMIN_ADMIN},
  {"admin",              "",       com_admin,          ADMIN_ADMIN},
  {"ahelp",              "o",      com_adhelp,         ADMIN_ADMIN},
  {"anews",              "o",      com_anews,          ADMIN_ADMIN},
  {"announce",           "S",      com_announce,       ADMIN_ADMIN},
  {"annunreg",           "S",      com_annunreg,       ADMIN_ADMIN},
  {"asetadmin",          "wd",     com_asetadmin,      ADMIN_ADMIN},
  {"asetblitz",          "wdpppp", com_asetblitz,      ADMIN_ADMIN},
  {"asetemail",          "wO",     com_asetemail,      ADMIN_ADMIN},
  {"asethandle",         "WW",     com_asethandle,     ADMIN_ADMIN},
  {"asetlight",          "wdpppp", com_asetlight,      ADMIN_ADMIN},
  {"asetmaxplayers",     "p",      com_asetmaxplayer,  ADMIN_ADMIN},
  {"asetpasswd",         "wW",     com_asetpasswd,     ADMIN_ADMIN},
  {"asetrealname",       "wT",     com_asetrealname,   ADMIN_ADMIN},
  {"asetstd",            "wdpppp", com_asetstd,        ADMIN_ADMIN},
  {"asetv",              "wS",     com_asetv,          ADMIN_ADMIN},
  {"asetwild",           "wdpppp", com_asetwild,       ADMIN_ADMIN},
  {"canewsf",            "dS",     com_canewsf,        ADMIN_ADMIN},
  {"canewsi",            "S",      com_canewsi,        ADMIN_ADMIN},
  {"chkgame",            "i",      com_checkGAME,      ADMIN_ADMIN},
  {"chkip",              "w",      com_checkIP,        ADMIN_ADMIN},
  {"chkpl",              "w",      com_checkPLAYER,    ADMIN_ADMIN},
  {"chksc",              "d",      com_checkSOCKET,    ADMIN_ADMIN},
  {"chkts",              "",       com_checkTIMESEAL,  ADMIN_ADMIN},
  {"cmuzzle",            "o",      com_cmuzzle,        ADMIN_ADMIN},
  {"cnewsf",             "dS",     com_cnewsf,         ADMIN_ADMIN},
  {"cnewsi",             "S",      com_cnewsi,         ADMIN_ADMIN},
  {"muzzle",             "o",      com_muzzle,         ADMIN_ADMIN},
  {"nuke",               "w",      com_nuke,           ADMIN_ADMIN},
  {"pose",               "wS",     com_pose,           ADMIN_GOD},
  {"quota",              "p",      com_quota,          ADMIN_ADMIN},
  {"raisedead",          "WO",     com_raisedead,      ADMIN_ADMIN},
  {"remplayer",          "w",      com_remplayer,      ADMIN_ADMIN},
  {"rerank",             "w",      com_fixrank,        ADMIN_ADMIN},
  {"showcomment",        "w",      com_showcomment,    ADMIN_ADMIN},
  {"shutdown",           "oT",     com_shutdown,       ADMIN_ADMIN},
  {"summon",             "w",      com_summon,         ADMIN_ADMIN},

  {NULL, NULL, NULL, ADMIN_USER}
};

PUBLIC alias_type g_alias_list[] = {
  {"a",             "accept"},
  {"adhelp",        "ahelp"},
  {"bye",           "quit"},
  {"ch",            "channel"},
  {"cls",           "help cls"},
  {"comment",       "addcomment"},
  {"exit",          "quit"},
  {"f",             "finger"},
  {"g",             "games"},
  {"go",            "goboard"},
  {"goto",          "goboard"},
  {"h",             "help"},
  {"i",             "it"},
  {"in",            "inchannel"},
  {"logout",        "quit"},
  {"m",             "match"},
  {"ma",            "match"},
  {"more",          "next"},
  {"n",             "next"},
  {"o",             "observe"},
  {"p",             "who a"},
  {"pl",            "who a"},
  {"players",       "who a"},
  {"r",             "refresh"},
  {"re",            "refresh"}, // So r/re doesn't resign!
  {"saa",           "simallabort"},
  {"saab",          "simallaabort"},
  {"saadj",         "simalladjourn"},
  {"sab",           "simabort"},
  {"sadj",          "simadjourn"},
  {"sh",            "shout"},
  {"sn",            "simnext"},
  {"sp",            "simprev"},
  {"t",             "tell"},
  {"vars",          "variables"},
  {"w",             "who"},
  {"znotl",         "znotify"},

  {",",             "tell ,"},
  {".",             "tell ."},
  {"`",             "tell ."},

  {":",             "it"},
  {"I",             "it"},

  {"!",             "shout"},
  {"#",             "whisper"},
  {"*",             "kibitz"},
  {"+",             "addlist"},
  {"-",             "sublist"},
  {"=",             "showlist"},
  {"?",             "help"},

  {NULL, NULL}
};

#endif /* _COMMAND_LIST_H */