i wish i couldve done it right the first time
This commit is contained in:
parent
2d622d98e0
commit
f3a0332bc3
|
@ -0,0 +1,91 @@
|
||||||
|
/* commandline.cpp
|
||||||
|
|
||||||
|
Copyright (C) 2009 DeSmuME team
|
||||||
|
|
||||||
|
This file is part of DeSmuME
|
||||||
|
|
||||||
|
DeSmuME 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.
|
||||||
|
|
||||||
|
DeSmuME 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.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with DeSmuME; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "commandline.h"
|
||||||
|
|
||||||
|
CommandLine::CommandLine()
|
||||||
|
: error(NULL)
|
||||||
|
, ctx(g_option_context_new (""))
|
||||||
|
{
|
||||||
|
load_slot = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
CommandLine::~CommandLine()
|
||||||
|
{
|
||||||
|
if(error) g_error_free (error);
|
||||||
|
g_option_context_free (ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CommandLine::loadCommonOptions()
|
||||||
|
{
|
||||||
|
//these options should be available in every port.
|
||||||
|
//my advice is, do not be afraid of using #ifdef here if it makes sense.
|
||||||
|
//but also see the gtk port for an example of how to combine this with other options
|
||||||
|
//(you may need to use ifdefs to cause options to be entered in the desired order)
|
||||||
|
static const GOptionEntry options[] = {
|
||||||
|
{ "load-slot", 0, 0, G_OPTION_ARG_INT, &load_slot, "Loads savegame from slot NUM", "NUM"},
|
||||||
|
{ NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
g_option_context_add_main_entries (ctx, options, "options");
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CommandLine::parse(int argc,char **argv)
|
||||||
|
{
|
||||||
|
g_option_context_parse (ctx, &argc, &argv, &error);
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
g_printerr("Error parsing command line arguments: %s\n", error->message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc == 2)
|
||||||
|
nds_file = argv[1];
|
||||||
|
if (argc > 2)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CommandLine::validate()
|
||||||
|
{
|
||||||
|
if (load_slot < 0 || load_slot > 10) {
|
||||||
|
g_printerr("I only know how to load from slots 1-10, 0 means 'do not load savegame' and is default\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CommandLine::errorHelp(const char* binName)
|
||||||
|
{
|
||||||
|
//TODO - strip this down to just the filename
|
||||||
|
g_printerr("USAGE: %s [options] [nds-file]\n", binName);
|
||||||
|
g_printerr("USAGE: %s --help - for help\n", binName);
|
||||||
|
}
|
||||||
|
|
||||||
|
void foo()
|
||||||
|
{
|
||||||
|
g_option_context_free(NULL);
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
/* commandline.h
|
||||||
|
|
||||||
|
Copyright (C) 2009 DeSmuME team
|
||||||
|
|
||||||
|
This file is part of DeSmuME
|
||||||
|
|
||||||
|
DeSmuME 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.
|
||||||
|
|
||||||
|
DeSmuME 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.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with DeSmuME; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _COMMANDLINE_H_
|
||||||
|
#define _COMMANDLINE_H_
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
//I hate C. we have to forward declare these with more detail than I like
|
||||||
|
typedef struct _GOptionContext GOptionContext;
|
||||||
|
typedef struct _GError GError;
|
||||||
|
|
||||||
|
//this class will also eventually try to take over the responsibility of using the args that it handles
|
||||||
|
//for example: preparing the emulator run by loading the rom, savestate, and/or movie in the correct pattern.
|
||||||
|
//it should also populate CommonSettings with its initial values
|
||||||
|
|
||||||
|
class CommandLine
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//actual options: these may move to another sturct
|
||||||
|
int load_slot;
|
||||||
|
std::string nds_file;
|
||||||
|
|
||||||
|
//load up the common commandline options
|
||||||
|
void loadCommonOptions();
|
||||||
|
|
||||||
|
bool parse(int argc,char **argv);
|
||||||
|
|
||||||
|
//validate the common commandline options
|
||||||
|
bool validate();
|
||||||
|
|
||||||
|
//print a little help message for cases when erroneous commandlines are entered
|
||||||
|
void errorHelp(const char* binName);
|
||||||
|
|
||||||
|
CommandLine();
|
||||||
|
~CommandLine();
|
||||||
|
|
||||||
|
GOptionContext *ctx;
|
||||||
|
GError *error;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue