mirror of
https://github.com/aseprite/aseprite.git
synced 2024-11-20 05:14:45 +00:00
Added CheckArgs class.
This commit is contained in:
parent
33f804213d
commit
aac6e31e44
179
src/core/check_args.cpp
Normal file
179
src/core/check_args.cpp
Normal file
@ -0,0 +1,179 @@
|
||||
/* ASE - Allegro Sprite Editor
|
||||
* Copyright (C) 2001-2009 David Capello
|
||||
*
|
||||
* This program 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.
|
||||
*
|
||||
* This program 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 this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <allegro/unicode.h>
|
||||
|
||||
#include "core/core.h"
|
||||
#include "core/check_args.h"
|
||||
#include "core/cfg.h"
|
||||
#include "console.h"
|
||||
|
||||
CheckArgs::CheckArgs(int argc, char* argv[])
|
||||
: m_exe_name(argv[0])
|
||||
{
|
||||
Console console;
|
||||
int i, n, len;
|
||||
char *arg;
|
||||
|
||||
for (i=1; i<argc; i++) {
|
||||
arg = argv[i];
|
||||
|
||||
for (n=0; arg[n] == '-'; n++);
|
||||
len = strlen(arg+n);
|
||||
|
||||
/* option */
|
||||
if ((n > 0) && (len > 0)) {
|
||||
/* use other palette file */
|
||||
if (strncmp(arg+n, "palette", len) == 0) {
|
||||
if (++i < argc)
|
||||
m_palette_filename = argv[i];
|
||||
else
|
||||
usage(false);
|
||||
}
|
||||
/* video resolution */
|
||||
else if (strncmp(arg+n, "resolution", len) == 0) {
|
||||
if (++i < argc) {
|
||||
int c, num1=0, num2=0, num3=0;
|
||||
char *tok;
|
||||
|
||||
/* el próximo argumento debe indicar un formato de
|
||||
resolución algo como esto: 320x240[x8] o [8] */
|
||||
c = 0;
|
||||
|
||||
for (tok=ustrtok(argv[i], "x"); tok;
|
||||
tok=ustrtok(NULL, "x")) {
|
||||
switch (c) {
|
||||
case 0: num1 = ustrtol(tok, NULL, 10); break;
|
||||
case 1: num2 = ustrtol(tok, NULL, 10); break;
|
||||
case 2: num3 = ustrtol(tok, NULL, 10); break;
|
||||
}
|
||||
c++;
|
||||
}
|
||||
|
||||
switch (c) {
|
||||
case 1:
|
||||
set_config_int("GfxMode", "Depth", num1);
|
||||
break;
|
||||
case 2:
|
||||
case 3:
|
||||
set_config_int("GfxMode", "Width", num1);
|
||||
set_config_int("GfxMode", "Height", num2);
|
||||
if (c == 3)
|
||||
set_config_int("GfxMode", "Depth", num3);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
console.printf(_("%s: option \"res\" requires an argument\n"),
|
||||
m_exe_name);
|
||||
usage(false);
|
||||
}
|
||||
}
|
||||
/* verbose mode */
|
||||
else if (strncmp(arg+n, "verbose", len) == 0) {
|
||||
ase_mode |= MODE_VERBOSE;
|
||||
}
|
||||
/* show help */
|
||||
else if (strncmp(arg+n, "help", len) == 0) {
|
||||
usage(true);
|
||||
}
|
||||
/* show version */
|
||||
else if (strncmp(arg+n, "version", len) == 0) {
|
||||
ase_mode |= MODE_BATCH;
|
||||
|
||||
console.printf("ase %s\n", VERSION);
|
||||
}
|
||||
/* invalid argument */
|
||||
else {
|
||||
usage(false);
|
||||
}
|
||||
}
|
||||
/* graphic file to open */
|
||||
else if (n == 0)
|
||||
m_options.push_back(new Option(Option::OpenSprite, argv[i]));
|
||||
}
|
||||
|
||||
// GUI is the default mode
|
||||
if (!(ase_mode & MODE_BATCH))
|
||||
ase_mode |= MODE_GUI;
|
||||
}
|
||||
|
||||
CheckArgs::~CheckArgs()
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
void CheckArgs::clear()
|
||||
{
|
||||
for (iterator it = begin(); it != end(); ++it) {
|
||||
Option* option = *it;
|
||||
delete option;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows the available options for the program
|
||||
*/
|
||||
void CheckArgs::usage(bool show_help)
|
||||
{
|
||||
Console console;
|
||||
|
||||
ase_mode |= MODE_BATCH;
|
||||
|
||||
// show options
|
||||
if (show_help) {
|
||||
// copyright
|
||||
console.printf
|
||||
("ase %s -- Allegro Sprite Editor, %s\n"
|
||||
COPYRIGHT "\n\n",
|
||||
VERSION, _("A tool to create sprites"));
|
||||
|
||||
// usage
|
||||
console.printf
|
||||
("%s\n %s [%s] [%s]...\n\n",
|
||||
_("Usage:"), m_exe_name, _("OPTION"), _("FILE"));
|
||||
|
||||
/* options */
|
||||
console.printf
|
||||
("%s:\n"
|
||||
" -palette GFX-FILE %s\n"
|
||||
" -resolution WxH[xBPP] %s\n"
|
||||
" -verbose %s\n"
|
||||
" -help %s\n"
|
||||
" -version %s\n"
|
||||
"\n",
|
||||
_("Options"),
|
||||
_("Use a specific palette by default"),
|
||||
_("Change the resolution to use"),
|
||||
_("Explain what is being done (in stderr or a log file)"),
|
||||
_("Display this help and exits"),
|
||||
_("Output version information and exit"));
|
||||
|
||||
/* web-site */
|
||||
console.printf
|
||||
("%s: %s\n\n",
|
||||
_("Find more information in the ASE's official web site at:"), WEBSITE);
|
||||
}
|
||||
/* how to show options */
|
||||
else {
|
||||
console.printf(_("Try \"%s --help\" for more information.\n"),
|
||||
m_exe_name);
|
||||
}
|
||||
}
|
74
src/core/check_args.h
Normal file
74
src/core/check_args.h
Normal file
@ -0,0 +1,74 @@
|
||||
/* ASE - Allegro Sprite Editor
|
||||
* Copyright (C) 2001-2009 David Capello
|
||||
*
|
||||
* This program 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.
|
||||
*
|
||||
* This program 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 this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef CORE_CHECK_ARGS_H_INCLUDED
|
||||
#define CORE_CHECK_ARGS_H_INCLUDED
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
/**
|
||||
* Looks the input arguments in the command line.
|
||||
*/
|
||||
class CheckArgs
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Option specified in the parameters.
|
||||
*/
|
||||
class Option
|
||||
{
|
||||
int m_type;
|
||||
std::string m_data;
|
||||
|
||||
public:
|
||||
enum {
|
||||
OpenSprite,
|
||||
};
|
||||
|
||||
Option(int type, const char* data) : m_type(type), m_data(data) { }
|
||||
|
||||
int type() const { return m_type; }
|
||||
const char* data() const { return m_data.c_str(); }
|
||||
};
|
||||
|
||||
private:
|
||||
std::vector<Option*> m_options;
|
||||
std::string m_palette_filename;
|
||||
const char* m_exe_name;
|
||||
|
||||
public:
|
||||
typedef std::vector<Option*>::iterator iterator;
|
||||
|
||||
CheckArgs(int argc, char *argv[]);
|
||||
~CheckArgs();
|
||||
|
||||
void clear();
|
||||
|
||||
iterator begin() { return m_options.begin(); }
|
||||
iterator end() { return m_options.end(); }
|
||||
|
||||
std::string get_palette_filename() { return m_palette_filename; }
|
||||
|
||||
private:
|
||||
void usage(bool show_help);
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user