aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2024-12-04 21:12:39 +0800
committerMistivia <i@mistivia.com>2024-12-04 21:12:39 +0800
commitfb4dca6c42147cd1ce082636640b50b5fac8826f (patch)
tree06a9c15c5e16aab848a17d0da675c0999bdd13db /src/main.c
parent74f4561982a73374942bf7fbb66ee5367da535cc (diff)
finish fvm
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c28
1 files changed, 26 insertions, 2 deletions
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 <stdio.h>
+#include <stdlib.h>
+
#include "fvm.h"
-int main() {
- return 0;
+int main(int argc, char **argv) {
+ struct fvm vm;
+ if (argc < 2) {
+ fprintf(stderr, "Usage: fvm <program-file>\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;
}