diff --git a/include/shell.h b/include/shell.h index 5589e64b..ca8615cc 100644 --- a/include/shell.h +++ b/include/shell.h @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: shell.h,v 1.17 2006-07-21 09:40:10 qbix79 Exp $ */ +/* $Id: shell.h,v 1.18 2006-07-26 11:36:30 qbix79 Exp $ */ #ifndef DOSBOX_SHELL_H #define DOSBOX_SHELL_H @@ -105,7 +105,7 @@ public: void CMD_CHOICE(char * args); void CMD_ATTRIB(char * args); void CMD_PATH(char * args); - void CMD_SHIFT(char * /*args*/); + void CMD_SHIFT(char * args); void CMD_VER(char * args); /* The shell's variables */ Bit16u input_handle; diff --git a/src/shell/shell.cpp b/src/shell/shell.cpp index 01fc6272..146bd425 100644 --- a/src/shell/shell.cpp +++ b/src/shell/shell.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: shell.cpp,v 1.76 2006-07-21 09:40:10 qbix79 Exp $ */ +/* $Id: shell.cpp,v 1.77 2006-07-26 11:36:30 qbix79 Exp $ */ #include #include @@ -485,28 +485,49 @@ void SHELL_Init() { "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBC\033[0m\n" //"\n" //Breaks the startup message if you type a mount and a drive change. ); - MSG_Add("SHELL_CMD_CHDIR_HELP","Change Directory.\n"); + MSG_Add("SHELL_CMD_CHDIR_HELP","Displays/changes the current directory.\n"); + MSG_Add("SHELL_CMD_CHDIR_HELP_LONG","CHDIR [drive:][path]\n" + "CHDIR [..]\n" + "CD [drive:][path]\n" + "CD [..]\n\n" + " .. Specifies that you want to change to the parent directory.\n\n" + "Type CD drive: to display the current directory in the specified drive.\n" + "Type CD without parameters to display the current drive and directory.\n"); MSG_Add("SHELL_CMD_CLS_HELP","Clear screen.\n"); MSG_Add("SHELL_CMD_DIR_HELP","Directory View.\n"); MSG_Add("SHELL_CMD_ECHO_HELP","Display messages and enable/disable command echoing.\n"); MSG_Add("SHELL_CMD_EXIT_HELP","Exit from the shell.\n"); MSG_Add("SHELL_CMD_HELP_HELP","Show help.\n"); MSG_Add("SHELL_CMD_MKDIR_HELP","Make Directory.\n"); + MSG_Add("SHELL_CMD_MKDIR_HELP_LONG","MKDIR [drive:][path]\n" + "MD [drive:][path]\n"); MSG_Add("SHELL_CMD_RMDIR_HELP","Remove Directory.\n"); + MSG_Add("SHELL_CMD_RMDIR_HELP_LONG","RMDIR [drive:][path]\n" + "RD [drive:][path]\n"); MSG_Add("SHELL_CMD_SET_HELP","Change environment variables.\n"); MSG_Add("SHELL_CMD_IF_HELP","Performs conditional processing in batch programs.\n"); MSG_Add("SHELL_CMD_GOTO_HELP","Jump to a labeled line in a batch script.\n"); MSG_Add("SHELL_CMD_SHIFT_HELP","Leftshift commandline parameters in a batch script.\n"); MSG_Add("SHELL_CMD_TYPE_HELP","Display the contents of a text-file.\n"); + MSG_Add("SHELL_CMD_TYPE_HELP_LONG","TYPE [drive:][path][filename]\n"); MSG_Add("SHELL_CMD_REM_HELP","Add comments in a batch file.\n"); + MSG_Add("SHELL_CMD_REM_HELP_LONG","REM [comment]\n"); MSG_Add("SHELL_CMD_NO_WILD","This is a simple version of the command, no wildcards allowed!\n"); - MSG_Add("SHELL_CMD_RENAME_HELP","Renames files.\n"); - MSG_Add("SHELL_CMD_DELETE_HELP","Removes files.\n"); + MSG_Add("SHELL_CMD_RENAME_HELP","Renames one or more files.\n"); + MSG_Add("SHELL_CMD_RENAME_HELP_LONG","RENAME [drive:][path]filename1 filename2.\n" + "REN [drive:][path]filename1 filename2.\n\n" + "Note that you can not specify a new drive or path for your destination file.\n"); + MSG_Add("SHELL_CMD_DELETE_HELP","Removes one or more files.\n"); MSG_Add("SHELL_CMD_COPY_HELP","Copy files.\n"); MSG_Add("SHELL_CMD_CALL_HELP","Start a batch file from within another batch file.\n"); MSG_Add("SHELL_CMD_SUBST_HELP","Assign an internal directory to a drive.\n"); MSG_Add("SHELL_CMD_LOADHIGH_HELP","Loads a program into upper memory (requires xms=true,umb=true).\n"); MSG_Add("SHELL_CMD_CHOICE_HELP","Waits for a keypress and sets ERRORLEVEL.\n"); + MSG_Add("SHELL_CMD_CHOICE_HELP_LONG","CHOICE [/C:choices] [/N] [/S] text\n" + " /C[:]choices - Specifies allowable keys. Default is: yn.\n" + " /N - Do not display the choices at end of prompt.\n" + " /S - Enables case-sensitive choices to be selected.\n" + " text - The text to display as a prompt.\n"); MSG_Add("SHELL_CMD_ATTRIB_HELP","Does nothing. Provided for compatibility.\n"); MSG_Add("SHELL_CMD_PATH_HELP","Provided for compatibility.\n"); MSG_Add("SHELL_CMD_VER_HELP","View and set the reported DOS version.\n"); diff --git a/src/shell/shell_cmds.cpp b/src/shell/shell_cmds.cpp index 53b4a774..6d02e414 100644 --- a/src/shell/shell_cmds.cpp +++ b/src/shell/shell_cmds.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: shell_cmds.cpp,v 1.68 2006-07-21 09:40:10 qbix79 Exp $ */ +/* $Id: shell_cmds.cpp,v 1.69 2006-07-26 11:36:30 qbix79 Exp $ */ #include #include @@ -117,13 +117,24 @@ void DOS_Shell::DoCommand(char * line) { WriteOut(MSG_Get("SHELL_EXECUTE_ILLEGAL_COMMAND"),cmd); } +#define HELP(command) \ + if (ScanCMDBool(args,"?")) { \ + WriteOut(MSG_Get("SHELL_CMD_" command "_HELP")); \ + const char* long_m = MSG_Get("SHELL_CMD_" command "_HELP_LONG"); \ + WriteOut("\n"); \ + if(strcmp("Message not Found!\n",long_m)) WriteOut(long_m); \ + else WriteOut(command "\n"); \ + return; \ + } void DOS_Shell::CMD_CLS(char * args) { + HELP("CLS"); reg_ax=0x0003; CALLBACK_RunRealInt(0x10); }; void DOS_Shell::CMD_DELETE(char * args) { + HELP("DELETE"); /* Command uses dta so set it to our internal dta */ RealPt save_dta=dos.dta(); dos.dta(dos.tables.tempdta); @@ -163,6 +174,7 @@ void DOS_Shell::CMD_DELETE(char * args) { } void DOS_Shell::CMD_HELP(char * args){ + HELP("HELP"); /* Print the help */ WriteOut(MSG_Get("SHELL_CMD_HELP")); Bit32u cmd_index=0; @@ -174,6 +186,7 @@ void DOS_Shell::CMD_HELP(char * args){ } void DOS_Shell::CMD_RENAME(char * args){ + HELP("RENAME"); StripSpaces(args); if(!*args) {SyntaxError();return;} if((strchr(args,'*')!=NULL) || (strchr(args,'?')!=NULL) ) { WriteOut(MSG_Get("SHELL_CMD_NO_WILD"));return;} @@ -207,6 +220,7 @@ void DOS_Shell::CMD_RENAME(char * args){ } void DOS_Shell::CMD_ECHO(char * args){ + HELP("ECHO"); if (!*args) { if (echo) { WriteOut(MSG_Get("SHELL_CMD_ECHO_ON"));} else { WriteOut(MSG_Get("SHELL_CMD_ECHO_OFF"));} @@ -230,10 +244,12 @@ void DOS_Shell::CMD_ECHO(char * args){ void DOS_Shell::CMD_EXIT(char * args) { - exit=true; + HELP("EXIT"); + exit = true; }; void DOS_Shell::CMD_CHDIR(char * args) { + HELP("CHDIR"); StripSpaces(args); if (!*args) { Bit8u drive=DOS_GetDefaultDrive()+'A'; @@ -248,6 +264,7 @@ void DOS_Shell::CMD_CHDIR(char * args) { }; void DOS_Shell::CMD_MKDIR(char * args) { + HELP("MKDIR"); StripSpaces(args); char * rem=ScanCMDRemain(args); if (rem) { @@ -260,6 +277,7 @@ void DOS_Shell::CMD_MKDIR(char * args) { }; void DOS_Shell::CMD_RMDIR(char * args) { + HELP("RMDIR"); StripSpaces(args); char * rem=ScanCMDRemain(args); if (rem) { @@ -296,6 +314,7 @@ static void FormatNumber(Bitu num,char * buf) { } void DOS_Shell::CMD_DIR(char * args) { + HELP("DIR"); char numformat[16]; char path[DOS_PATHLENGTH]; @@ -437,6 +456,7 @@ void DOS_Shell::CMD_DIR(char * args) { } void DOS_Shell::CMD_COPY(char * args) { + HELP("COPY"); static char defaulttarget[] = "."; StripSpaces(args); /* Command uses dta so set it to our internal dta */ @@ -550,6 +570,7 @@ void DOS_Shell::CMD_COPY(char * args) { } void DOS_Shell::CMD_SET(char * args) { + HELP("SET"); StripSpaces(args); std::string line; if (!*args) { @@ -595,6 +616,7 @@ void DOS_Shell::CMD_SET(char * args) { } void DOS_Shell::CMD_IF(char * args) { + HELP("IF"); StripSpaces(args); bool has_not=false; char * comp=strchr(args,'='); @@ -659,6 +681,7 @@ void DOS_Shell::CMD_IF(char * args) { } void DOS_Shell::CMD_GOTO(char * args) { + HELP("GOTO"); StripSpaces(args); if (!bf) return; if (*args &&(*args==':')) args++; @@ -672,11 +695,13 @@ void DOS_Shell::CMD_GOTO(char * args) { } } -void DOS_Shell::CMD_SHIFT(char * /*args*/ ) { +void DOS_Shell::CMD_SHIFT(char * args ) { + HELP("SHIFT"); if(bf) bf->Shift(); } void DOS_Shell::CMD_TYPE(char * args) { + HELP("TYPE"); StripSpaces(args); if (!*args) { WriteOut(MSG_Get("SHELL_SYNTAXERROR")); @@ -701,15 +726,18 @@ nextfile: } void DOS_Shell::CMD_REM(char * args) { + HELP("REM"); } void DOS_Shell::CMD_PAUSE(char * args){ + HELP("PAUSE"); WriteOut(MSG_Get("SHELL_CMD_PAUSE")); Bit8u c;Bit16u n=1; DOS_ReadFile (STDIN,&c,&n); } void DOS_Shell::CMD_CALL(char * args){ + HELP("CALL"); this->call=true; /* else the old batchfile will be closed first */ this->ParseLine(args); this->call=false; @@ -719,6 +747,7 @@ void DOS_Shell::CMD_SUBST (char * args) { /* If more that one type can be substed think of something else * E.g. make basedir member dos_drive instead of localdrive */ + HELP("SUBST"); localDrive* ldp=0; char mountstring[DOS_PATHLENGTH+CROSS_LEN+20]; char temp_str[2] = { 0,0 }; @@ -771,6 +800,7 @@ void DOS_Shell::CMD_SUBST (char * args) { } void DOS_Shell::CMD_LOADHIGH(char *args){ + HELP("LOADHIGH"); Bit16u umb_start=dos_infoblock.GetStartOfUMBChain(); Bit8u umb_flag=dos_infoblock.GetUMBChainState(); Bit8u old_memstrat=DOS_GetMemAllocStrategy()&0xff; @@ -785,6 +815,7 @@ void DOS_Shell::CMD_LOADHIGH(char *args){ } void DOS_Shell::CMD_CHOICE(char * args){ + HELP("CHOICE"); static char defchoice[3] = {'y','n',0}; char *rem = NULL, *ptr; bool optN = ScanCMDBool(args,"N"); @@ -837,10 +868,12 @@ void DOS_Shell::CMD_CHOICE(char * args){ } void DOS_Shell::CMD_ATTRIB(char *args){ + HELP("ATTRIB"); // No-Op for now. } void DOS_Shell::CMD_PATH(char *args){ + HELP("PATH"); if(args && *args && strlen(args)){ char pathstring[DOS_PATHLENGTH+CROSS_LEN+20]={ 0 }; strcpy(pathstring,"set PATH="); @@ -860,6 +893,7 @@ void DOS_Shell::CMD_PATH(char *args){ } void DOS_Shell::CMD_VER(char *args) { + HELP("VER"); if(args && *args) { char* word = StripWord(args); if(strcasecmp(word,"set")) return;