use getpot for parsing args
This commit is contained in:
parent
7c9ab6de42
commit
7f4d5bebf4
4 changed files with 68 additions and 18 deletions
69
src/config.c
69
src/config.c
|
@ -1,3 +1,8 @@
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <getopt.h>
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
Config config = {
|
Config config = {
|
||||||
|
@ -7,23 +12,67 @@ Config config = {
|
||||||
.ui_font2 = "/usr/share/fonts/TTF/unifont.ttf",
|
.ui_font2 = "/usr/share/fonts/TTF/unifont.ttf",
|
||||||
.ui_font_size1 = 6,
|
.ui_font_size1 = 6,
|
||||||
.ui_font_size2 = 4,
|
.ui_font_size2 = 4,
|
||||||
.real_speed = true,
|
.throttle = false,
|
||||||
.verbose = true,
|
.verbose = false,
|
||||||
|
.allow_shutdn = false,
|
||||||
};
|
};
|
||||||
|
|
||||||
void parse_args( int argc, char* argv[] )
|
void parse_args( int argc, char* argv[] )
|
||||||
{
|
{
|
||||||
while ( --argc ) {
|
int option_index;
|
||||||
argv++;
|
int c = '?';
|
||||||
if ( argv[ 0 ][ 0 ] == '-' ) {
|
char* optstring = "hVs:";
|
||||||
switch ( argv[ 0 ][ 1 ] ) {
|
struct option long_options[] = {
|
||||||
case 't':
|
{"help", no_argument, NULL, 'h' },
|
||||||
config.real_speed = true;
|
{"verbose", no_argument, NULL, 'V' },
|
||||||
|
{"scale", required_argument, NULL, 's' },
|
||||||
|
{"throttle", no_argument, NULL, 1800},
|
||||||
|
{"allow-shutdown", no_argument, NULL, 1900},
|
||||||
|
|
||||||
|
{0, 0, 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
|
char* help_text = "usage: %s [options]\n"
|
||||||
|
"options:\n"
|
||||||
|
" -h --help what you are reading\n"
|
||||||
|
" -V --verbose be verbose (default: false)\n"
|
||||||
|
" -s --scale=<i> scale GUI (default: 3)\n"
|
||||||
|
" --throttle Throttle speed (default: false)\n"
|
||||||
|
" --allow-shutdown Enable SHUTDN instruction (default: false)\n";
|
||||||
|
while ( c != EOF ) {
|
||||||
|
c = getopt_long( argc, argv, optstring, long_options, &option_index );
|
||||||
|
|
||||||
|
switch ( c ) {
|
||||||
|
case 'h':
|
||||||
|
fprintf( stderr, help_text, config.progname );
|
||||||
|
exit( 0 );
|
||||||
break;
|
break;
|
||||||
case 'r':
|
case 's':
|
||||||
config.real_speed = false;
|
config.ui_scale = atoi( optarg );
|
||||||
|
break;
|
||||||
|
case 'V':
|
||||||
|
config.verbose = true;
|
||||||
|
break;
|
||||||
|
case 1800:
|
||||||
|
config.throttle = true;
|
||||||
|
break;
|
||||||
|
case 1900:
|
||||||
|
config.allow_shutdn = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '?':
|
||||||
|
case ':':
|
||||||
|
exit( 0 );
|
||||||
|
break;
|
||||||
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( optind < argc ) {
|
||||||
|
fprintf( stderr, "Invalid arguments : " );
|
||||||
|
while ( optind < argc )
|
||||||
|
fprintf( stderr, "%s\n", argv[ optind++ ] );
|
||||||
|
fprintf( stderr, "\n" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,8 +10,9 @@ typedef struct {
|
||||||
char* ui_font2;
|
char* ui_font2;
|
||||||
int ui_font_size1;
|
int ui_font_size1;
|
||||||
int ui_font_size2;
|
int ui_font_size2;
|
||||||
bool real_speed;
|
bool throttle;
|
||||||
bool verbose;
|
bool verbose;
|
||||||
|
bool allow_shutdn;
|
||||||
} Config;
|
} Config;
|
||||||
|
|
||||||
extern Config config;
|
extern Config config;
|
||||||
|
|
|
@ -117,7 +117,7 @@ bool emulator_run( void )
|
||||||
if ( !cpu.shutdown ) {
|
if ( !cpu.shutdown ) {
|
||||||
execute_instruction();
|
execute_instruction();
|
||||||
|
|
||||||
throttle( config.real_speed || cpu.keyintp );
|
throttle( config.throttle || cpu.keyintp );
|
||||||
|
|
||||||
if ( emulator_state == EMULATOR_STEP )
|
if ( emulator_state == EMULATOR_STEP )
|
||||||
emulator_set_state( EMULATOR_STOP );
|
emulator_set_state( EMULATOR_STOP );
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
#include "config.h"
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
#include "bus.h"
|
#include "bus.h"
|
||||||
#include "keyboard.h"
|
#include "keyboard.h"
|
||||||
|
@ -367,9 +368,8 @@ static void op806( byte* opc ) // C=ID
|
||||||
static void op807( byte* opc ) // SHUTDN
|
static void op807( byte* opc ) // SHUTDN
|
||||||
{
|
{
|
||||||
// TODO: Fix SHUTDN
|
// TODO: Fix SHUTDN
|
||||||
/* if ( !cpu.in[ 0 ] && !cpu.in[ 1 ] && !cpu.in[ 3 ] ) { */
|
cpu.shutdown = config.allow_shutdn && ( !cpu.in[ 0 ] && !cpu.in[ 1 ] && !cpu.in[ 3 ] );
|
||||||
/* cpu.shutdown = true; */
|
|
||||||
/* } */
|
|
||||||
cpu.pc += 3;
|
cpu.pc += 3;
|
||||||
cpu.cycles += 5;
|
cpu.cycles += 5;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue