Просмотр исходного кода

Move printing values into a separate function

Lucas Stadler лет назад: 8
Родитель
Сommit
34e3adcb5f
1 измененных файлов с 27 добавлено и 16 удалено
  1. 27 16
      scm/inc/driver.c

+ 27 - 16
scm/inc/driver.c

2
2
3
#include <stdio.h>
3
#include <stdio.h>
4
#include <stdlib.h>
4
#include <stdlib.h>
5
#include <string.h>
5
6
6
#define fixnum_mask  3 // 11
7
#define fixnum_mask  3 // 11
7
#define fixnum_tag   0 // 00
8
#define fixnum_tag   0 // 00
22
23
23
#define MAX_MEMORY (1 << 20)
24
#define MAX_MEMORY (1 << 20)
24
25
25
int scheme_entry(void *memory);
26
int scheme_entry(int *memory);
27
28
void print_value(int *val) {
29
	if ((*val & fixnum_mask) == fixnum_tag) {
30
		printf("%d", *val >> fixnum_shift);
31
	} else if ((*val & char_mask) == char_tag) {
32
		printf("#\\%c", *val >> char_shift);
33
	} else if ((*val & boolean_mask) == boolean_tag) {
34
		printf("#%s", (*val >> boolean_shift) == 1 ? "t" : "f");
35
	} else if (*val == empty_list) {
36
		printf("()");
37
	} else if ((*val & cons_mask) == cons_tag) {
38
		printf("(");
39
		printf("?");
40
		printf(" ");
41
		printf("?");
42
		printf(")");
43
	} else {
44
		printf("\nError: unhandled value: %d\n", *val);
45
		exit(1);
46
	}
47
}
26
48
27
int main(int argc, char **argv) {
49
int main(int argc, char **argv) {
28
	void *mem = malloc(MAX_MEMORY);
50
	int *mem = (int*)malloc(MAX_MEMORY * sizeof(int));
29
	if (mem == NULL) {
51
	if (mem == NULL) {
30
		perror("malloc");
52
		perror("malloc");
31
		exit(1);
53
		exit(1);
32
	}
54
	}
55
	memset(mem, 0, MAX_MEMORY * sizeof(int));
33
	int val = scheme_entry(mem);
56
	int val = scheme_entry(mem);
34
	if ((val & fixnum_mask) == fixnum_tag) {
35
		printf("%d\n", val >> fixnum_shift);
36
	} else if ((val & char_mask) == char_tag) {
37
		printf("#\\%c\n", val >> char_shift);
38
	} else if ((val & boolean_mask) == boolean_tag) {
39
		printf("#%s\n", (val >> boolean_shift) == 1 ? "t" : "f");
40
	} else if ((val & cons_mask) == cons_tag) {
41
		printf("cons!\n");
42
	} else if (val == empty_list) {
43
		printf("()\n");
44
	} else {
45
		printf("Error: unhandled value: %d\n", val);
46
		return 1;
47
	}
57
	print_value(&val);
58
	printf("\n");
48
	return 0;
59
	return 0;
49
}
60
}