windows-nt/Source/XPSP1/NT/base/cmd/ctable.h
2020-09-26 16:20:57 +08:00

174 lines
8.8 KiB
C

/*++
Copyright (c) 1988-1999 Microsoft Corporation
Module Name:
ctable.c
Abstract:
Command dispatch
--*/
/*** Operator and Command Jump Table
*
* This file is included by cmd.c and contains the operator and command jump
* table. Every command and operator has an entry in the table. The correct
* entry in the table can be found in two ways. The first way is to loop
* through the table and search for the operator or command name you want.
* The second way is to use the xxxTYP variables which are defined in cmd.h.
* (xxx is an abbreviation of the name of the operator/command you want.)
* These variables can be used as indexes into the table.
*
*/
/* Each entry in the table is made up of one of the following structures.
* The fields are:
* name - the name of the operator/command
* func - the function which executes the operator/command or NULL if ignore
* flags - bit 0 == 1 if the drives of the arguments should be checked
*/
struct ocentry {
TCHAR *name ;
int (*func)(struct cmdnode *) ;
TCHAR flags ;
ULONG msgno; // # used in printing help message
ULONG extmsgno; // # of additional help text when extensions enabled
ULONG noextramsg; //
} ;
/* The follow functions are the functions that execute operators and commands.
* The letter "e" has been prepended to all of the function names to keep the
* names from conflicting with the names of library routines and keywords.
*/
/* M000 - Removed declaration for eExport() from the collection below
* M002 - Removed declaration for eRem() from below
*/
int eBreak(struct cmdnode *n);
int eDirectory(), eRename(), eDelete(), eType(), eCopy(), ePause() ;
int eTime(), eVersion(), eVolume(), eChdir(), eMkdir(), eRmdir() ;
int eVerify(), eSet(), ePrompt(), ePath(), eExit(), eEcho() ;
int eGoto(), eShift(), eIf(), eFor(), eCls(), eComSep(), eOr(), eAnd() ;
int ePipe(), eParen(), eDate(), eErrorLevel(), eCmdExtVer(), eDefined() ;
int eExist(), eNot(), eStrCmp(), eSetlocal(), eEndlocal() ; /* M000 */
int eCall() ; /* M001 - Added this one */
int eExtproc() ; /* M002 - Added this one */
int eTitle();
int eStart() ; /* START @@*/
int eAppend() ; /* APPEND @@ */
int eKeys() ; /* KEYS @@5 */
int eMove() ; /* MOVE @@5 */
int eSpecialHelp();
int eColor(struct cmdnode *);
/* The following external definitions are for the strings which contain the
* names of the commands.
*/
/* M000 - Removed definition for ExpStr (EXPORT command) from below
*/
#if 1
extern TCHAR BreakStr[];
#endif
extern TCHAR DirStr[], RenamStr[], RenStr[], EraStr[], DelStr[], TypStr[], RemStr[] ;
extern TCHAR CopyStr[], PausStr[], TimStr[], VerStr[], VolStr[], CdStr[], ChdirStr[] ;
extern TCHAR MdStr[], MkdirStr[], RdStr[], RmdirStr[], VeriStr[], SetStr[] ;
extern TCHAR CPromptStr[], CPathStr[], ExitStr[], EchoStr[], GotoStr[] ;
extern TCHAR ShiftStr[], IfStr[], ForStr[], ClsStr[], DatStr[] ;
extern TCHAR ErrStr[], ExsStr[], NotStr[], SetlocalStr[], EndlocalStr[] ; /* M000 */
extern TCHAR CmdExtVerStr[], DefinedStr[] ;
extern TCHAR CallStr[] ; /* M001 - Added */
extern TCHAR ExtprocStr[] ; /* M002 - Added */
// extern TCHAR ChcpStr[] ; /* CHCP @@*/
extern TCHAR TitleStr[];
extern TCHAR StartStr[] ; /* START @@*/
extern TCHAR AppendStr[] ; /* APPEND @@ */
extern TCHAR KeysStr[] ; /* KEYS @@5 */
extern TCHAR MovStr[] ; /* MOVE @@5 */
extern TCHAR ColorStr[];
extern TCHAR PushDirStr[], PopDirStr[], AssocStr[], FTypeStr[];
/* JumpTable - operator and command jump table
* There is an entry in it for every operator and command. Those commands
* which have two names have two entries.
*
* ***NOTE: The order of the entries in this table corresponds to the defines
* mentioned earlier which are used to index into this table. They MUST
* be kept in sync!!
*/
typedef int (*PCN)(struct cmdnode *);
struct ocentry JumpTable[] = {
{DirStr, eDirectory, NOFLAGS , MSG_HELP_DIR, 0, 0},
{EraStr, eDelete, NOFLAGS , MSG_HELP_DEL_ERASE, MSG_HELP_DEL_ERASE_X, 0},
{DelStr, eDelete, NOFLAGS , MSG_HELP_DEL_ERASE, MSG_HELP_DEL_ERASE_X, 0},
{TypStr, eType, NOSWITCHES , MSG_HELP_TYPE, 0, 0},
{CopyStr, eCopy, CHECKDRIVES , MSG_HELP_COPY, 0, 0},
{CdStr, eChdir, CHECKDRIVES , MSG_HELP_CHDIR, MSG_HELP_CHDIR_X, 0},
{ChdirStr, eChdir, CHECKDRIVES , MSG_HELP_CHDIR, MSG_HELP_CHDIR_X, 0},
{RenamStr, eRename, CHECKDRIVES|NOSWITCHES, MSG_HELP_RENAME, 0, 0},
{RenStr, eRename, CHECKDRIVES|NOSWITCHES, MSG_HELP_RENAME, 0, 0},
{EchoStr, eEcho, NOFLAGS , MSG_HELP_ECHO, 0, 0},
{SetStr, eSet, NOFLAGS , MSG_HELP_SET, MSG_HELP_SET_X, 3},
{PausStr, ePause, NOFLAGS , MSG_HELP_PAUSE, 0, 0},
{DatStr, eDate, NOFLAGS , MSG_HELP_DATE, MSG_HELP_DATE_X, 0},
{TimStr, eTime, NOFLAGS , MSG_HELP_TIME, MSG_HELP_TIME_X, 0},
{CPromptStr, ePrompt, NOFLAGS , MSG_HELP_PROMPT, MSG_HELP_PROMPT_X, 0},
{MdStr, eMkdir, NOSWITCHES , MSG_HELP_MKDIR, MSG_HELP_MKDIR_X, 0},
{MkdirStr, eMkdir, NOSWITCHES , MSG_HELP_MKDIR, MSG_HELP_MKDIR_X, 0},
{RdStr, eRmdir, NOFLAGS , MSG_HELP_RMDIR, 0, 0},
{RmdirStr, eRmdir, NOFLAGS , MSG_HELP_RMDIR, 0, 0},
{CPathStr, ePath, NOFLAGS , MSG_HELP_PATH, 0, 0},
{GotoStr, eGoto, NOFLAGS , MSG_HELP_GOTO, MSG_HELP_GOTO_X, 0},
{ShiftStr, eShift, NOFLAGS , MSG_HELP_SHIFT, MSG_HELP_SHIFT_X, 0},
{ClsStr, eCls, NOSWITCHES , MSG_HELP_CLS, 0, 0},
{CallStr, eCall, NOFLAGS , MSG_HELP_CALL, MSG_HELP_CALL_X, 1},
{VeriStr, eVerify, NOSWITCHES , MSG_HELP_VERIFY, 0, 0},
{VerStr, eVersion, NOSWITCHES , MSG_HELP_VER, 0, 0},
{VolStr, eVolume, NOSWITCHES , MSG_HELP_VOL, 0, 0},
{ExitStr, eExit, NOFLAGS , MSG_HELP_EXIT, 0, 0},
{SetlocalStr, eSetlocal, NOFLAGS , MSG_HELP_SETLOCAL, MSG_HELP_SETLOCAL_X, 0},
{EndlocalStr, eEndlocal, NOFLAGS , MSG_HELP_ENDLOCAL, MSG_HELP_ENDLOCAL_X, 0},
{TitleStr, eTitle, NOFLAGS , MSG_HELP_TITLE, 0, 0},
{StartStr, eStart, NOFLAGS , MSG_HELP_START, MSG_HELP_START_X, 0},
{AppendStr, eAppend, NOFLAGS , MSG_HELP_APPEND, 0, 0},
{KeysStr, eKeys, NOSWITCHES , MSG_HELP_KEYS, 0, 0},
{MovStr, eMove, CHECKDRIVES , MSG_HELP_MOVE, 0, 0},
{PushDirStr, ePushDir, CHECKDRIVES|NOSWITCHES, MSG_HELP_PUSHDIR, MSG_HELP_PUSHDIR_X, 0},
{PopDirStr, ePopDir, CHECKDRIVES|NOSWITCHES, MSG_HELP_POPDIR, MSG_HELP_POPDIR_X, 0},
{AssocStr, eAssoc, EXTENSCMD , 0, MSG_HELP_ASSOC, 0},
{FTypeStr, eFType, EXTENSCMD , 0, MSG_HELP_FTYPE, 0},
{BreakStr, eBreak, NOFLAGS , MSG_HELP_BREAK, MSG_HELP_BREAK_X, 0},
{ColorStr, eColor, EXTENSCMD , 0, MSG_HELP_COLOR, 0},
{ForStr, (PCN)eFor, NOFLAGS , MSG_HELP_FOR, MSG_HELP_FOR_X, 3},
{IfStr, (PCN)eIf, NOFLAGS , MSG_HELP_IF, MSG_HELP_IF_X, 1},
{RemStr, NULL, NOFLAGS , MSG_HELP_REM, 0, 0},
{NULL, (PCN)eComSep,NOFLAGS , 0, 0, 0}, // LFTYP
{NULL, (PCN)eComSep,NOFLAGS , 0, 0, 0}, // CSTYP
{NULL, (PCN)eOr, NOFLAGS , 0, 0, 0}, // ORTYP
{NULL, (PCN)eAnd, NOFLAGS , 0, 0, 0}, // ANDTYP
{NULL, (PCN)ePipe, NOFLAGS , 0, 0, 0}, // PIPTYP
{NULL, (PCN)eParen, NOFLAGS , 0, 0, 0}, // PARTYP
{CmdExtVerStr, eCmdExtVer, EXTENSCMD , 0, 0, 0}, // CMDVERTYP
{ErrStr, eErrorLevel, NOFLAGS , 0, 0, 0}, // ERRTYP
{DefinedStr, eDefined, EXTENSCMD , 0, 0, 0}, // DEFTYP
{ExsStr, eExist, NOFLAGS , 0, 0, 0}, // EXSTYP
{NotStr, eNot, NOFLAGS , 0, 0, 0}, // NOTTYP
{NULL, eStrCmp, NOFLAGS , 0, 0, 0}, // STRTYP
{NULL, eGenCmp, NOFLAGS , 0, 0, 0}, // CMPTYP
{NULL, (PCN)eParen, NOFLAGS , 0, 0, 0}, // SILTYP
{NULL, (PCN)eSpecialHelp, NOFLAGS , 0, 0, 0} // HELPTYP
} ;