mirror of
https://github.com/janet-lang/janet
synced 2025-08-03 20:43:55 +00:00
Add some command line options to the client program.
This commit is contained in:
parent
3481ee5747
commit
4a131fe47e
5
Makefile
5
Makefile
@ -3,7 +3,10 @@
|
|||||||
######################################################
|
######################################################
|
||||||
##### Set global variables for all gst Makefiles #####
|
##### Set global variables for all gst Makefiles #####
|
||||||
######################################################
|
######################################################
|
||||||
CFLAGS=-std=c99 -Wall -Wextra -I./include -g
|
|
||||||
|
VERSION=\"0.0.0-beta\"
|
||||||
|
|
||||||
|
CFLAGS=-std=c99 -Wall -Wextra -I./include -g -DGST_VERSION=$(VERSION)
|
||||||
PREFIX=/usr/local
|
PREFIX=/usr/local
|
||||||
GST_TARGET=client/gst
|
GST_TARGET=client/gst
|
||||||
GST_CORELIB=core/libgst.a
|
GST_CORELIB=core/libgst.a
|
||||||
|
@ -162,20 +162,102 @@ static int debug_repl(Gst *vm) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int client_strequal(const char *a, const char *b) {
|
||||||
|
while (*a)
|
||||||
|
if (*a++ != *b++) return 0;
|
||||||
|
return *a == *b;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define GST_CLIENT_HELP 1
|
||||||
|
#define GST_CLIENT_VERBOSE 2
|
||||||
|
#define GST_CLIENT_VERSION 4
|
||||||
|
#define GST_CLIENT_REPL 8
|
||||||
|
#define GST_CLIENT_UNKNOWN 16
|
||||||
|
|
||||||
int main(int argc, const char **argv) {
|
int main(int argc, const char **argv) {
|
||||||
Gst vm;
|
Gst vm;
|
||||||
int status = 0;
|
int status = -1;
|
||||||
|
int i;
|
||||||
|
int fileRead = 0;
|
||||||
|
uint64_t flags = 0;
|
||||||
|
|
||||||
|
/* Read the arguments. Ignore files. */
|
||||||
|
for (i = 1; i < argc; ++i) {
|
||||||
|
const char *arg = argv[i];
|
||||||
|
if (*arg == '-') {
|
||||||
|
/* Flag or option */
|
||||||
|
if (arg[1] == '-') {
|
||||||
|
/* Option */
|
||||||
|
if (client_strequal(arg + 2, "help")) {
|
||||||
|
flags |= GST_CLIENT_HELP;
|
||||||
|
} else if (client_strequal(arg + 2, "version")) {
|
||||||
|
flags |= GST_CLIENT_VERSION;
|
||||||
|
} else if (client_strequal(arg + 2, "verbose")) {
|
||||||
|
flags |= GST_CLIENT_VERBOSE;
|
||||||
|
} else if (client_strequal(arg + 2, "repl")) {
|
||||||
|
flags |= GST_CLIENT_REPL;
|
||||||
|
} else {
|
||||||
|
flags |= GST_CLIENT_UNKNOWN;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* Flag */
|
||||||
|
const char *c = arg;
|
||||||
|
while (*(++c)) {
|
||||||
|
switch (*c) {
|
||||||
|
case 'h':
|
||||||
|
flags |= GST_CLIENT_HELP;
|
||||||
|
break;
|
||||||
|
case 'V':
|
||||||
|
flags |= GST_CLIENT_VERSION;
|
||||||
|
break;
|
||||||
|
case 'v':
|
||||||
|
flags |= GST_CLIENT_VERBOSE;
|
||||||
|
break;
|
||||||
|
case 'r':
|
||||||
|
flags |= GST_CLIENT_REPL;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
flags |= GST_CLIENT_UNKNOWN;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle flags and options */
|
||||||
|
if ((flags & GST_CLIENT_HELP) || (flags & GST_CLIENT_UNKNOWN)) {
|
||||||
|
printf( "Usage:\n"
|
||||||
|
"%s -opts --fullopt1 --fullopt2 file1 file2...\n"
|
||||||
|
"\n"
|
||||||
|
" -h --help : Shows this information.\n"
|
||||||
|
" -V --verbose : Show more output.\n"
|
||||||
|
" -r --repl : Launch a repl after all files are processed.\n"
|
||||||
|
" -v --version : Print the version number and exit.\n\n",
|
||||||
|
argv[0]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (flags & GST_CLIENT_VERSION) {
|
||||||
|
printf("%s\n", GST_VERSION);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set up VM */
|
||||||
gst_init(&vm);
|
gst_init(&vm);
|
||||||
gst_stl_load(&vm);
|
gst_stl_load(&vm);
|
||||||
|
|
||||||
if (argc > 1) {
|
/* Read the arguments. Only process files. */
|
||||||
const char *filename;
|
for (i = 1; i < argc; ++i) {
|
||||||
|
const char *arg = argv[i];
|
||||||
|
if (*arg != '-') {
|
||||||
FILE *f;
|
FILE *f;
|
||||||
filename = argv[1];
|
f = fopen(arg, "rb");
|
||||||
f = fopen(filename, "rb");
|
fileRead = 1;
|
||||||
status = debug_run(&vm, f);
|
status = debug_run(&vm, f);
|
||||||
} else {
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!fileRead || (flags & GST_CLIENT_REPL)) {
|
||||||
status = debug_repl(&vm);
|
status = debug_repl(&vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,4 +93,3 @@
|
|||||||
# report
|
# report
|
||||||
|
|
||||||
(print num-tests-passed "of" num-tests-run "tests passed")
|
(print num-tests-passed "of" num-tests-run "tests passed")
|
||||||
(exit! 0)
|
|
Loading…
x
Reference in New Issue
Block a user