Skip to content

Commit 4c03f45

Browse files
committed
allow source filename to be specified on the command line
1 parent d6d1d01 commit 4c03f45

File tree

3 files changed

+19
-5
lines changed

3 files changed

+19
-5
lines changed

main.c

+14-2
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,23 @@ SOFTWARE.
2828
static vm_t vm;
2929

3030
int main(int argc, char *argv[]) {
31-
(void)argc; (void)argv;
3231

33-
load(&vm);
32+
FILE *in = stdin;
33+
if (argc == 2) {
34+
in = fopen(argv[1], "r");
35+
if (in == NULL) {
36+
perror(argv[0]);
37+
exit(EXIT_FAILURE);
38+
}
39+
}
40+
41+
load(&vm, in);
3442
run(&vm);
3543

44+
if (argc == 2) {
45+
fclose(in);
46+
}
47+
3648
exit(EXIT_SUCCESS);
3749
}
3850

vm.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,14 @@ static op_t opcodes[NOPS] = {
6363
};
6464

6565

66-
void load(vm_t *vm) {
66+
void load(vm_t *vm, FILE *in) {
6767

6868
char line[96]; /* TODO move to const.h */
6969
int cap = 96;
7070

7171
memset(vm, '\0', sizeof(vm_t));
7272

73-
while (fgets(line, cap, stdin) != NULL) {
73+
while (fgets(line, cap, in) != NULL) {
7474

7575
chomp(line);
7676

vm.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,12 @@ SOFTWARE.
2323
#ifndef __VM_H
2424
#define __VM_H
2525

26+
#include <stdio.h>
27+
2628
#include "const.h"
2729
#include "types.h"
2830

29-
void load(vm_t *vm);
31+
void load(vm_t *vm, FILE *in);
3032
void run(vm_t *vm);
3133

3234
#endif

0 commit comments

Comments
 (0)