From fb4dca6c42147cd1ce082636640b50b5fac8826f Mon Sep 17 00:00:00 2001 From: Mistivia Date: Wed, 4 Dec 2024 21:12:39 +0800 Subject: finish fvm --- src/fvm.c | 1 + src/main.c | 28 ++++++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/fvm.c b/src/fvm.c index 6326dc8..db4b04b 100644 --- a/src/fvm.c +++ b/src/fvm.c @@ -424,6 +424,7 @@ int64_t fvm_execute(struct fvm *vm) { return vm->rv; default: fprintf(stderr, "unknown opcode.\n"); + exit(-1); break; } } diff --git a/src/main.c b/src/main.c index 62742b5..21b31c2 100644 --- a/src/main.c +++ b/src/main.c @@ -1,5 +1,29 @@ +#include +#include + #include "fvm.h" -int main() { - return 0; +int main(int argc, char **argv) { + struct fvm vm; + if (argc < 2) { + fprintf(stderr, "Usage: fvm \n"); + return -1; + } + FILE* fp = fopen(argv[1], "rb"); + if (fp == NULL) { + fprintf(stderr, "Failed to open file.\n"); + return -1; + } + fseek(fp, 0, SEEK_END); + int64_t flen = ftell(fp); + char *code = malloc(flen); + fseek(fp, 0, SEEK_SET); + int n = fread(code, 1, flen, fp); + if (n != flen) { + fprintf(stderr, "Failed to read from file.\n"); + exit(-1); + } + fvm_init(&vm, code, 2*1024*1024); + fvm_execute(&vm); + return vm.rv; } -- cgit v1.0