1
0
Fork 0

implemented feature request 1242202: "getting config values via z:\config"

Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@2283
This commit is contained in:
Peter Veenstra 2005-08-22 19:31:27 +00:00
parent a87cb5aac0
commit 44d90e5cf4
3 changed files with 43 additions and 9 deletions

View file

@ -16,7 +16,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* $Id: shell.h,v 1.12 2005-04-21 21:17:45 qbix79 Exp $ */
/* $Id: shell.h,v 1.13 2005-08-22 19:31:26 qbix79 Exp $ */
#ifndef DOSBOX_SHELL_H
#define DOSBOX_SHELL_H
@ -36,6 +36,9 @@
#define CMD_MAXCMDS 20
#define CMD_OLDSIZE 4096
extern Bitu call_shellstop;
/* first_shell is used to add and delete stuff from the shell env
* by "external" programs. (config) */
extern Program * first_shell;
class DOS_Shell;

View file

@ -16,7 +16,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* $Id: programs.cpp,v 1.21 2005-08-11 18:56:57 qbix79 Exp $ */
/* $Id: programs.cpp,v 1.22 2005-08-22 19:31:27 qbix79 Exp $ */
#include <vector>
#include <ctype.h>
@ -30,6 +30,7 @@
#include "support.h"
#include "cross.h"
#include "setup.h"
#include "shell.h"
Bitu call_program;
@ -226,6 +227,35 @@ void CONFIG::Run(void) {
return;
}
/* Code for getting the current configuration. *
* Official format: config -get "section property" *
* As a bonus it will set %CONFIG% to this value as well */
if(cmd->FindString("-get",temp_line,true)) {
std::string temp2 = "";
cmd->GetStringRemain(temp2);//So -get n1 n2= can be used without quotes
if(temp2 != "") temp_line = temp_line + " " + temp2;
std::string::size_type space = temp_line.find(" ");
if(space == std::string::npos) {
WriteOut(MSG_Get("PROGRAM_CONFIG_GET_SYNTAX"));
return;
}
//Copy the found property to a new string and erase from templine (mind the space)
std::string prop = temp_line.substr(space+1); temp_line.erase(space);
Section* sec = control->GetSection(temp_line.c_str());
if(!sec) {
WriteOut(MSG_Get("PROGRAM_CONFIG_SECTION_ERROR"),temp_line.c_str());
return;
}
char* val = sec->GetPropValue(prop.c_str());
WriteOut("%s",val);
first_shell->SetEnv("CONFIG",val);
return;
}
/* Code for the configuration changes *
* Official format: config -set "section property=value" *
* Accepted: without quotes and/or without -set and/or without section *
@ -305,4 +335,5 @@ void PROGRAMS_Init(Section* sec) {
MSG_Add("PROGRAM_CONFIG_USAGE","Config tool:\nUse -writeconf filename to write the current config.\nUse -writelang filename to write the current language strings.\n");
MSG_Add("PROGRAM_CONFIG_SECTION_ERROR","Section %s doesn't exist.\n");
MSG_Add("PROGRAM_CONFIG_PROPERTY_ERROR","Property %s doesn't have a section.\n");
MSG_Add("PROGRAM_CONFIG_GET_SYNTAX","Correct syntax: config -get \"section property\"");
}

View file

@ -16,7 +16,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* $Id: shell.cpp,v 1.61 2005-05-31 20:19:13 qbix79 Exp $ */
/* $Id: shell.cpp,v 1.62 2005-08-22 19:31:27 qbix79 Exp $ */
#include <stdlib.h>
#include <stdarg.h>
@ -31,7 +31,7 @@
Bitu call_shellstop;
/* Larger scope so shell_del autoexec can use it to
* remove things from the environment */
Program * new_program = 0;
Program * first_shell = 0;
static Bitu shellstop_handler(void) {
return CBRET_STOP;
@ -84,7 +84,7 @@ AutoexecObject::~AutoexecObject(){
if(!test) continue;
*test = 0;
//If the shell is running/exists update the environment
if(new_program) new_program->SetEnv(after_set,"");
if(first_shell) first_shell->SetEnv(after_set,"");
}
} else it++;
}
@ -511,8 +511,8 @@ void SHELL_Init() {
dos.psp(psp_seg);
SHELL_ProgramStart(&new_program);
new_program->Run();
delete new_program;
new_program = 0;//Make clear that it shouldn't be used anymore
SHELL_ProgramStart(&first_shell);
first_shell->Run();
delete first_shell;
first_shell = 0;//Make clear that it shouldn't be used anymore
}