fis-gtm/sr_unix/dse_cmd.c

390 lines
25 KiB
C

/****************************************************************
* *
* Copyright 2001, 2013 Fidelity Information Services, Inc. *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
* under a license. If you do not know the terms of *
* the license, please stop and do not read further. *
* *
****************************************************************/
#include "mdef.h"
#include "gdsroot.h"
#include "gdsblk.h"
#include "gtm_facility.h"
#include "fileinfo.h"
#include "gdsbt.h"
#include "gdsfhead.h"
#include "gdskill.h"
#include "gdscc.h"
#include "filestruct.h"
#include "jnl.h"
#include "hashtab_int4.h" /* needed for tp.h */
#include "buddy_list.h"
#include "tp.h"
#include "repl_msg.h"
#include "gtmsource.h"
#include "util.h"
#include "cli.h"
#include "cache.h"
#include "op.h"
#include "gt_timer.h"
#include "io.h"
#include "dse.h"
#include "compiler.h"
#include "dse_exit.h"
#include "util_spawn.h"
#include "util_help.h"
#include "dse_cmd_disallow.h"
/*************************************************************
* NOTE
* This file might have lines longer than 132 characters
* since the command tables are being initialized.
*
* Entries need to be made in sorted order (lexicographic) within
* each table.
************************************************************/
static readonly CLI_PARM dse_ftime_parm_values[] = {
{ "FLUSH_TIME", 1, PARM_REQ}
};
static readonly CLI_ENTRY dse_add_qual[] = {
{ "BLOCK", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "DATA", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_STR, 0 },
{ "KEY", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_STR, 0 },
{ "OFFSET", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "POINTER", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "RECORD", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "STAR", dse_adstar, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ 0 }
};
static readonly CLI_ENTRY dse_cache_qual[] = {
{ "ALL", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NON_NEG, 0, 0 },
{ "CHANGE", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NON_NEG, 0, 0 },
{ "CRIT", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ "OFFSET", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "RECOVER", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NON_NEG, 0, 0 },
{ "SHOW", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NON_NEG, 0, 0 },
{ "SIZE", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "VALUE", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "VERIFY", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NON_NEG, 0, 0 },
{ 0 }
};
static readonly CLI_ENTRY dse_all_qual[] = {
{ "ALL", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ "BUFFER_FLUSH", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ "CRITINIT", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ "DUMP", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ "FREEZE", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ "OVERRIDE", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ "REFERENCE", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ "RELEASE", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ "RENEW", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ "SEIZE", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ "WCINIT", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ 0 }
};
static readonly CLI_ENTRY true_false_nochange[] = {
{ "FALSE", 0, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, NEG, VAL_N_A, 0 },
{ "NOCHANGE", 0, 0, 0, 0, 0, DEFA_PRESENT, VAL_DISALLOWED, 0, NEG, VAL_N_A, 0 },
{ "TRUE", 0, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, NEG, VAL_N_A, 0 },
{ 0, 0, 0 }
};
static readonly CLI_ENTRY never_always_allowexisting[] = {
{ "ALWAYS", 0, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, NON_NEG, VAL_STR, 0 },
{ "EXISTING", 0, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, NON_NEG, VAL_STR, 0 },
{ "FALSE", 0, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, NON_NEG, VAL_STR, 0 },
{ "NEVER", 0, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, NON_NEG, VAL_STR, 0 },
{ "TRUE", 0, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, NON_NEG, VAL_STR, 0 },
{ 0, 0, 0 }
};
static readonly CLI_ENTRY db_vers[] = {
{ "V4", 0, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, NON_NEG, VAL_N_A, 0 },
{ "V6", 0, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, NON_NEG, VAL_N_A, 0 },
};
static readonly CLI_ENTRY dse_cfhead_qual[] = {
{ "ABANDONED_KILLS", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "AVG_BLKS_READ", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "BLKS_TO_UPGRADE", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "BLK_SIZE", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "BLOCKS_FREE", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "B_BYTESTREAM", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "B_COMPREHENSIVE", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "B_DATABASE", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "B_INCREMENTAL", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "B_RECORD", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "CERT_DB_VER", 0, 0, 0, db_vers, 0, 0, VAL_REQ, 0, NON_NEG, VAL_STR, 0 },
{ "COMMITWAIT_SPIN_COUNT", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "CORRUPT_FILE", 0, 0, 0, true_false_nochange, 0, 0, VAL_REQ, 0, NON_NEG, VAL_STR, 0 },
{ "CRIT", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ "CURRENT_TN", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "DB_WRITE_FMT", 0, 0, 0, db_vers, 0, 0, VAL_REQ, 0, NON_NEG, VAL_STR, 0 },
{ "DECLOCATION", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "DECVALUE", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "DEF_COLLATION", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "DUALSITE_RESYNC_SEQNO", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "ENCRYPTION_HASH", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NON_NEG, 0, 0 },
{ "FLUSH_TIME", 0, 0, dse_ftime_parm_values, 0, 0, 0, VAL_NOT_REQ, 0, NON_NEG, VAL_TIME, 0 },
{ "FREEZE", 0, 0, 0, true_false_nochange, 0, 0, VAL_REQ, 0, NON_NEG, VAL_STR, 0 },
{ "FULLY_UPGRADED", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "GOT2V5ONCE", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "GVSTATSRESET", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NON_NEG, 0, 0 },
{ "HARD_SPIN_COUNT", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "HEXLOCATION", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "HEXVALUE", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "INHIBIT_KILLS", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "INTERRUPTED_RECOV", 0, 0, 0, true_false_nochange, 0, 0, VAL_REQ, 0, NON_NEG, VAL_STR, 0 },
{ "JNL_SYNCIO", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_STR, 0 },
{ "JNL_YIELD_LIMIT", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "KEY_MAX_SIZE", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "KILL_IN_PROG", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "LOCATION", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "MACHINE_NAME", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_STR, 0 },
{ "MAX_TN", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "MBM_SIZE", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
/* Maintain MUTEX_* qualifiers for backward compatibility; remove these entries after sufficient time has passed for users to have
* made the switch to the synonymn qualifiers that don't have the MUTEX_ prefix.
*/
{ "MUTEX_HARD_SPIN_COUNT", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "MUTEX_SLEEP_SPIN_COUNT", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "MUTEX_SPIN_SLEEP_TIME", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
/* End MUTEX_* qualifiers */
{ "NULL_SUBSCRIPTS", 0, 0, 0, never_always_allowexisting, 0, 0, VAL_REQ, 0, NON_NEG, VAL_STR, 0 },
{ "ONLINE_NBB", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_STR, 0 },
{ "OVERRIDE", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ "PRE_READ_TRIGGER_FACTOR", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "QDBRUNDOWN", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ "RC_SRV_COUNT", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "RECORD_MAX_SIZE", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "REFERENCE_COUNT", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "REG_SEQNO", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "RESERVED_BYTES", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "SIZE", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "SLEEP_SPIN_COUNT", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "SPIN_SLEEP_TIME", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "STDNULLCOLL", 0, 0, 0, true_false_nochange, 0, 0, VAL_REQ, 0, NON_NEG, VAL_STR, 0 },
{ "STRM_NUM", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "STRM_REG_SEQNO", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "TIMERS_PENDING", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "TOTAL_BLKS", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "TRIGGER_FLUSH", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "UPD_RESERVED_AREA", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "UPD_WRITER_TRIGGER_FACTOR", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "VALUE", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "WAIT_DISK", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "WARN_MAX_TN", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "WRITES_PER_FLUSH", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ "ZQGBLMOD_SEQNO", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "ZQGBLMOD_TN", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ 0 }
};
static readonly CLI_ENTRY dse_change_qual[] = {
{ "BLOCK", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "BSIZ", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "CMPC", dse_chng_rhead, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "FILEHEADER", dse_chng_fhead, dse_cfhead_qual, 0, 0, cli_disallow_dse_chng_fhead, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "LEVEL", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "OFFSET", dse_chng_rhead, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "RECORD", dse_chng_rhead, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "RSIZ", dse_chng_rhead, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "TN", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ 0 }
};
static readonly CLI_ENTRY dse_crit_qual[] = {
{ "ALL", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ "CRASH", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ "CYCLE", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ "INIT", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ "OWNER", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ "RELEASE", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ "REMOVE", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ "RESET", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ "SEIZE", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ 0 }
};
static readonly CLI_ENTRY dse_rdmp_qual[] = {
{ "BLOCK", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "COUNT", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "GLO", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NON_NEG, 0, 0 },
{ "OFFSET", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "RECORD", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "ZWR", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NON_NEG, 0, 0 },
{ 0 }
};
static readonly CLI_ENTRY dse_fdmp_qual[] = {
{ "ALL", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ "BACKUP", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ "BASIC", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ "BG_TRC", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ "DB_CSH", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ "ENVIRONMENT", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ "GVSTATS", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ "JOURNAL", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ "MIXEDMODE", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ "RETRIES", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ "SNAPSHOT", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ "SUPPLEMENTARY", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ "TPBLKMOD", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ "TPRETRIES", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ "UPDPROC", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ 0 }
};
static readonly CLI_ENTRY dse_dump_qual[] = {
{ "BLOCK", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "COUNT", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "CRIT", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ "FILEHEADER", dse_dmp_fhead, dse_fdmp_qual, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ "GLO", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NON_NEG, 0, 0 },
{ "HEADER", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ "OFFSET", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "RECORD", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "ZWR", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NON_NEG, 0, 0 },
{ 0 }
};
static readonly CLI_ENTRY dse_eval_qual[] = {
{ "DECIMAL", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NON_NEG, 0, 0 },
{ "HEXADECIMAL", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NON_NEG, 0, 0 },
{ "NUMBER", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ 0 }
};
static readonly CLI_PARM dse_freg_parm_values[] = {
{ "REGION", "*", PARM_REQ}
};
static readonly CLI_ENTRY dse_find_qual[] = {
{ "BLOCK", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "CRIT", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ "EXHAUSTIVE", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NON_NEG, 0, 0 },
{ "FREEBLOCK", dse_f_free, 0, 0, 0, 0, 0, VAL_N_A, 0, NON_NEG, 0, 0 },
{ "HINT", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "KEY", dse_f_key, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_STR, 0 },
{ "REGION", dse_f_reg, 0, dse_freg_parm_values, 0, 0, 0, VAL_NOT_REQ, 0, NON_NEG, VAL_STR, 0 },
{ "SIBLINGS", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NON_NEG, 0, 0 },
{ 0 }
};
static readonly CLI_ENTRY dse_integrit_qual[] = {
{ "BLOCK", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "CRIT", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ 0 }
};
static readonly CLI_ENTRY dse_map_qual[] = {
{ "BLOCK", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "BUSY", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NON_NEG, 0, 0 },
{ "FREE", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NON_NEG, 0, 0 },
{ "MASTER", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NON_NEG, 0, 0 },
{ "RESTORE_ALL", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NON_NEG, 0, 0 },
{ 0 }
};
static readonly CLI_ENTRY dse_open_qual[] = {
{ "FILE", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_STR, 0 },
{ "OCHSET", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_STR, 0 },
{ 0 }
};
static readonly CLI_ENTRY dse_over_qual[] = {
{ "BLOCK", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "DATA", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_STR, 0 },
{ "OFFSET", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "OCHSET", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, 0 },
{ 0 }
};
static readonly CLI_ENTRY dse_range_qual[] = {
{ "BUSY", 0, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, NEG, VAL_N_A, 0 },
{ "CRIT", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ "FROM", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "INDEX", 0, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, NON_NEG, VAL_N_A, 0 },
{ "LOST", 0, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, NON_NEG, VAL_N_A, 0 },
{ "LOWER", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_STR, 0 },
{ "STAR", 0, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, NON_NEG, VAL_N_A, 0 },
{ "TO", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "UPPER", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_STR, 0 },
{ 0 }
};
static readonly CLI_ENTRY dse_remove_qual[] = {
{ "BLOCK", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "COUNT", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "OFFSET", dse_rmrec, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "RECORD", dse_rmrec, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "VERSION", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ 0 }
};
static readonly CLI_ENTRY dse_restore_qual[] = {
{ "BLOCK", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "FROM", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "REGION", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_STR, 0 },
{ "VERSION", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_DCM },
{ 0 }
};
static readonly CLI_ENTRY dse_save_qual[] = {
{ "BLOCK", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "COMMENT", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_STR, 0 },
{ "CRIT", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, NEG, 0, 0 },
{ "LIST", 0, 0, 0, 0, 0, 0, VAL_N_A, 0, 0, 0, 0 },
{ 0 }
};
static readonly CLI_ENTRY dse_shift_qual[] = {
{ "BACKWARD", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "FORWARD", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ "OFFSET", 0, 0, 0, 0, 0, 0, VAL_REQ, 0, NON_NEG, VAL_NUM, VAL_HEX },
{ 0 }
};
GBLDEF CLI_ENTRY dse_cmd_ary[] = {
{ "ADD", dse_adrec, dse_add_qual, 0, 0, cli_disallow_dse_add, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "ALL", dse_all, dse_all_qual, 0, 0, cli_disallow_dse_all, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "BUFFER_FLUSH", dse_flush, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "CACHE", dse_cache, dse_cache_qual, 0, 0, cli_disallow_dse_cache, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "CHANGE", dse_chng_bhead, dse_change_qual, 0, 0, cli_disallow_dse_change, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "CLOSE", dse_close, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "CRITICAL", dse_crit, dse_crit_qual, 0, 0, cli_disallow_dse_crit, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "DUMP", dse_dmp, dse_dump_qual, 0, 0, cli_disallow_dse_dump, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "EVALUATE", dse_eval, dse_eval_qual, 0, 0, 0, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "EXIT", dse_exit, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "FIND", dse_f_blk, dse_find_qual, 0, 0, cli_disallow_dse_find, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "HELP", util_help, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, 0, 0, 0 },
{ "INTEGRIT", dse_integ, dse_integrit_qual, 0, 0, 0, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "MAPS", dse_maps, dse_map_qual, 0, 0, cli_disallow_dse_maps, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "OPEN", dse_open, dse_open_qual, 0, 0, 0, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "OVERWRITE", dse_over, dse_over_qual, 0, 0, 0, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "PAGE", dse_page, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "QUIT", dse_exit, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "RANGE", dse_range, dse_range_qual, 0, 0, 0, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "REMOVE", dse_rmsb, dse_remove_qual, 0, 0, cli_disallow_dse_remove, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "RESTORE", dse_rest, dse_restore_qual, 0, 0, 0, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "SAVE", dse_save, dse_save_qual, 0, 0, cli_disallow_dse_save, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "SHIFT", dse_shift, dse_shift_qual, 0, 0, cli_disallow_dse_shift, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "SPAWN", util_spawn, 0, 0, 0, 0, 0, VAL_DISALLOWED, 1, 0, 0, 0 },
{ "VERSION", dse_version, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ "WCINIT", dse_wcreinit, 0, 0, 0, 0, 0, VAL_DISALLOWED, 0, 0, 0, 0 },
{ 0 }
};
/* for SPAWN actually value is disallowed, but parameter is allowed. */