OpenTyrian: renamed all .cpp files back to .c, for easier marging
This commit is contained in:
268
project/jni/application/opentyrian/src/params.c
Normal file
268
project/jni/application/opentyrian/src/params.c
Normal file
@@ -0,0 +1,268 @@
|
||||
/*
|
||||
* OpenTyrian Classic: A modern cross-platform port of Tyrian
|
||||
* Copyright (C) 2007-2009 The OpenTyrian Development Team
|
||||
*
|
||||
* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
#include "arg_parse.h"
|
||||
#include "file.h"
|
||||
#include "joystick.h"
|
||||
#include "loudness.h"
|
||||
#include "network.h"
|
||||
#include "opentyr.h"
|
||||
#include "params.h"
|
||||
#include "varz.h"
|
||||
#include "xmas.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
JE_boolean richMode = false, constantPlay = false, constantDie = false;
|
||||
|
||||
/* YKS: Note: LOOT cheat had non letters removed. */
|
||||
const char pars[][9] = {
|
||||
"LOOT", "RECORD", "NOJOY", "CONSTANT", "DEATH", "NOSOUND", "NOXMAS", "YESXMAS"
|
||||
};
|
||||
|
||||
void JE_paramCheck( int argc, char *argv[] )
|
||||
{
|
||||
const Options options[] =
|
||||
{
|
||||
{ 'h', 'h', "help", false },
|
||||
|
||||
{ 's', 's', "no-sound", false },
|
||||
{ 'j', 'j', "no-joystick", false },
|
||||
{ 'x', 'x', "no-xmas", false },
|
||||
|
||||
{ 't', 't', "data", true },
|
||||
|
||||
{ 'n', 'n', "net", true },
|
||||
{ 256, 0, "net-player-name", true }, // TODO: no short codes because there should
|
||||
{ 257, 0, "net-player-number", true }, // be a menu for entering these in the future
|
||||
{ 'p', 'p', "net-port", true },
|
||||
{ 'd', 'd', "net-delay", true },
|
||||
|
||||
{ 'X', 'X', "xmas", false },
|
||||
{ 'c', 'c', "constant", false },
|
||||
{ 'k', 'k', "death", false },
|
||||
{ 'r', 'r', "record", false },
|
||||
{ 'l', 'l', "loot", false },
|
||||
|
||||
{ 0, 0, NULL, false}
|
||||
};
|
||||
Option option = { 0, NULL, 0 };
|
||||
|
||||
for (; ; )
|
||||
{
|
||||
option = parse_args(argc, (const char **)argv, options);
|
||||
|
||||
if (option.value == NOT_OPTION)
|
||||
break;
|
||||
|
||||
switch (option.value)
|
||||
{
|
||||
case INVALID_OPTION:
|
||||
case AMBIGUOUS_OPTION:
|
||||
case OPTION_MISSING_ARG:
|
||||
fprintf(stderr, "Try `%s --help' for more information.\n", argv[0]);
|
||||
exit(EXIT_FAILURE);
|
||||
break;
|
||||
|
||||
case 'h':
|
||||
printf("Usage: %s [OPTION...]\n\n"
|
||||
"Options:\n"
|
||||
" -h, --help Show help about options\n\n"
|
||||
" -s, --no-sound Disable audio\n"
|
||||
" -j, --no-joystick Disable joystick/gamepad input\n"
|
||||
" -x, --no-xmas Disable Christmas mode\n\n"
|
||||
" -t, --data=DIR Set Tyrian data directory\n\n"
|
||||
" -n, --net=HOST[:PORT] Start a networked game\n"
|
||||
" --net-player-name=NAME Sets local player name in a networked game\n"
|
||||
" --net-player-number=NUMBER Sets local player number in a networked game\n"
|
||||
" (1 or 2)\n"
|
||||
" -p, --net-port=PORT Local port to bind (default is 1333)\n"
|
||||
" -d, --net-delay=FRAMES Set lag-compensation delay (default is 1)\n", argv[0]);
|
||||
exit(0);
|
||||
break;
|
||||
|
||||
case 's':
|
||||
// Disables sound/music usage
|
||||
audio_disabled = true;
|
||||
break;
|
||||
|
||||
case 'j':
|
||||
// Disables joystick detection
|
||||
ignore_joystick = true;
|
||||
break;
|
||||
|
||||
case 'x':
|
||||
xmas = false;
|
||||
break;
|
||||
|
||||
// set custom Tyrian data directory
|
||||
case 't':
|
||||
custom_data_dir = option.arg;
|
||||
break;
|
||||
|
||||
case 'n':
|
||||
{
|
||||
isNetworkGame = true;
|
||||
|
||||
intptr_t temp = (intptr_t)strchr(option.arg, ':');
|
||||
if (temp)
|
||||
{
|
||||
temp -= (intptr_t)option.arg;
|
||||
|
||||
int temp_port = atoi(&option.arg[temp + 1]);
|
||||
if (temp_port > 0 && temp_port < 49152)
|
||||
network_opponent_port = temp_port;
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "%s: error: invalid network port number\n", argv[0]);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
network_opponent_host = (char *)malloc(temp + 1);
|
||||
strnztcpy(network_opponent_host, option.arg, temp);
|
||||
}
|
||||
else
|
||||
{
|
||||
network_opponent_host = (char *)malloc(strlen(option.arg) + 1);
|
||||
strcpy(network_opponent_host, option.arg);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 256: // --net-player-name
|
||||
network_player_name = (char *)malloc(strlen(option.arg) + 1);
|
||||
strcpy(network_player_name, option.arg);
|
||||
break;
|
||||
|
||||
case 257: // --net-player-number
|
||||
{
|
||||
int temp = atoi(option.arg);
|
||||
if (temp >= 1 && temp <= 2)
|
||||
thisPlayerNum = temp;
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "%s: error: invalid network player number\n", argv[0]);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'p':
|
||||
{
|
||||
int temp = atoi(option.arg);
|
||||
if (temp > 0 && temp < 49152)
|
||||
network_player_port = temp;
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "%s: error: invalid network port number\n", argv[0]);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'd':
|
||||
{
|
||||
int temp;
|
||||
if (sscanf(option.arg, "%d", &temp) == 1)
|
||||
network_delay = 1 + temp;
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "%s: error: invalid network delay value\n", argv[0]);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'X':
|
||||
xmas = true;
|
||||
break;
|
||||
|
||||
case 'c':
|
||||
/* Constant play for testing purposes (C key activates invincibility)
|
||||
This might be useful for publishers to see everything - especially
|
||||
those who can't play it */
|
||||
constantPlay = true;
|
||||
break;
|
||||
|
||||
case 'k':
|
||||
constantDie = true;
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
record_demo = true;
|
||||
break;
|
||||
|
||||
case 'l':
|
||||
// Gives you mucho bucks
|
||||
richMode = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
assert(false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// legacy parameter support
|
||||
for (int i = option.argn; i < argc; ++i)
|
||||
{
|
||||
for (uint j = 0; j < strlen(argv[i]); ++j)
|
||||
argv[i][j] = toupper((unsigned char)argv[i][j]);
|
||||
|
||||
for (uint j = 0; j < COUNTOF(pars); ++j)
|
||||
{
|
||||
if (strcmp(argv[i], pars[j]) == 0)
|
||||
{
|
||||
switch (j)
|
||||
{
|
||||
case 0:
|
||||
richMode = true;
|
||||
break;
|
||||
case 1:
|
||||
record_demo = true;
|
||||
break;
|
||||
case 2:
|
||||
ignore_joystick = true;
|
||||
break;
|
||||
case 3:
|
||||
constantPlay = true;
|
||||
break;
|
||||
case 4:
|
||||
constantDie = true;
|
||||
break;
|
||||
case 5:
|
||||
audio_disabled = true;
|
||||
break;
|
||||
case 6:
|
||||
xmas = false;
|
||||
break;
|
||||
case 7:
|
||||
xmas = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
assert(false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// kate: tab-width 4; vim: set noet:
|
||||
Reference in New Issue
Block a user