aboutsummaryrefslogtreecommitdiff
path: root/target
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2015-11-18 20:56:08 -0500
committerFranklin Wei <git@fwei.tk>2015-11-18 20:56:08 -0500
commit3127e63aae54f787e2f55523d9e3b7d5a060d834 (patch)
tree20e78631bed98f8f2bbcbfd82e8dcdfa743ac59b /target
parent814fc20cf78a9e10b603fba789be3ccd2830629d (diff)
downloadducky-3127e63aae54f787e2f55523d9e3b7d5a060d834.zip
ducky-3127e63aae54f787e2f55523d9e3b7d5a060d834.tar.gz
ducky-3127e63aae54f787e2f55523d9e3b7d5a060d834.tar.bz2
ducky-3127e63aae54f787e2f55523d9e3b7d5a060d834.tar.xz
barely working ducky-to-C transcompiler
Diffstat (limited to 'target')
-rw-r--r--target/unix/main.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/target/unix/main.c b/target/unix/main.c
index 278b889..ee2b696 100644
--- a/target/unix/main.c
+++ b/target/unix/main.c
@@ -4,12 +4,13 @@
#define COMPILE 1
#define INTERP 2
#define EXECUTE 3
+#define TRANSCOMPILE 4
char *progname;
void arg_error(void)
{
- printf("Usage: %s [-cei] FILE\n", progname);
+ printf("Usage: %s [-ceit] FILE\n", progname);
exit(EXIT_FAILURE);
}
@@ -28,6 +29,8 @@ int main(int argc, char *argv[])
action = INTERP;
else if(!strcmp(argv[i], "-e"))
action = EXECUTE;
+ else if(!strcmp(argv[i], "-t"))
+ action = TRANSCOMPILE;
else
file = argv[i];
}
@@ -39,7 +42,8 @@ int main(int argc, char *argv[])
if(*((uint32_t*)header) == DUCKY_MAGIC)
{
printf("Detected ducky bytecode signature.\n");
- action = EXECUTE;
+ if(action != TRANSCOMPILE)
+ action = EXECUTE;
}
lseek(fd, 0, SEEK_SET);
switch(action)
@@ -54,6 +58,10 @@ int main(int argc, char *argv[])
case EXECUTE:
ducky_vm(fd);
break;
+ case TRANSCOMPILE:
+ out_fd = open("a.c", O_WRONLY | O_CREAT | O_TRUNC, 0644);
+ ducky_to_c(fd, out_fd);
+ break;
default:
break;
}