80 lines
1.6 KiB
C
80 lines
1.6 KiB
C
/* rizin - Copyleft 2011-2020 - pancake */
|
|
|
|
#include <rz_util.h>
|
|
#include <rz_main.h>
|
|
#include <rz_socket.h>
|
|
|
|
#if __UNIX__
|
|
static void fwd(int sig) {
|
|
/* do nothing? send kill signal to remote process */
|
|
}
|
|
|
|
static void rz_run_tty(void) {
|
|
/* TODO: Implement in native code */
|
|
rz_sys_xsystem("tty");
|
|
close(1);
|
|
dup2(2, 1);
|
|
rz_sys_signal(SIGINT, fwd);
|
|
for (;;) {
|
|
sleep(1);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
RZ_API int rz_main_rz_run(int argc, const char **argv) {
|
|
RzRunProfile *p;
|
|
int i, ret;
|
|
if (argc == 1 || !strcmp(argv[1], "-h")) {
|
|
printf("Usage: rz-run -v|-t|script.rr2 [directive ..]\n");
|
|
printf("%s", rz_run_help());
|
|
return 1;
|
|
}
|
|
if (!strcmp(argv[1], "-v")) {
|
|
return rz_main_version_print("rz_run");
|
|
}
|
|
const char *file = argv[1];
|
|
if (!strcmp(file, "-t")) {
|
|
#if __UNIX__
|
|
rz_run_tty();
|
|
return 0;
|
|
#else
|
|
eprintf("Not supported\n");
|
|
return 1;
|
|
#endif
|
|
}
|
|
if (*file && !strchr(file, '=')) {
|
|
p = rz_run_new(file);
|
|
} else {
|
|
bool noMoreDirectives = false;
|
|
int directiveIndex = 0;
|
|
p = rz_run_new(NULL);
|
|
for (i = *file ? 1 : 2; i < argc; i++) {
|
|
if (!strcmp(argv[i], "--")) {
|
|
noMoreDirectives = true;
|
|
continue;
|
|
}
|
|
if (noMoreDirectives) {
|
|
const char *word = argv[i];
|
|
char *line = directiveIndex
|
|
? rz_str_newf("arg%d=%s", directiveIndex, word)
|
|
: rz_str_newf("program=%s", word);
|
|
rz_run_parseline(p, line);
|
|
directiveIndex++;
|
|
free(line);
|
|
} else {
|
|
rz_run_parseline(p, argv[i]);
|
|
}
|
|
}
|
|
}
|
|
if (!p) {
|
|
return 1;
|
|
}
|
|
ret = rz_run_config_env(p);
|
|
if (ret) {
|
|
printf("error while configuring the environment.\n");
|
|
return 1;
|
|
}
|
|
ret = rz_run_start(p);
|
|
rz_run_free(p);
|
|
return ret;
|
|
}
|