2 * Copyright © 2016 Keith Packard <keithp@keithp.com>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
15 #include "ao_scheme.h"
18 static FILE *ao_scheme_file;
19 static int newline = 1;
21 static char save_file[] = "scheme.image";
24 ao_scheme_os_save(void)
26 FILE *save = fopen(save_file, "w");
32 fwrite(ao_scheme_pool, 1, AO_SCHEME_POOL_TOTAL, save);
38 ao_scheme_os_restore_save(struct ao_scheme_os_save *save, int offset)
40 FILE *restore = fopen(save_file, "r");
47 fseek(restore, offset, SEEK_SET);
48 ret = fread(save, sizeof (struct ao_scheme_os_save), 1, restore);
56 ao_scheme_os_restore(void)
58 FILE *restore = fopen(save_file, "r");
65 ret = fread(ao_scheme_pool, 1, AO_SCHEME_POOL_TOTAL, restore);
67 if (ret != AO_SCHEME_POOL_TOTAL)
78 return getc(ao_scheme_file);
81 if (ao_scheme_read_list)
94 main (int argc, char **argv)
99 ao_scheme_file = fopen(*argv, "r");
100 if (!ao_scheme_file) {
104 ao_scheme_read_eval_print();
105 fclose(ao_scheme_file);
106 ao_scheme_file = NULL;
108 ao_scheme_read_eval_print();
111 printf ("collects: full: %lu incremental %lu\n",
112 ao_scheme_collects[AO_SCHEME_COLLECT_FULL],
113 ao_scheme_collects[AO_SCHEME_COLLECT_INCREMENTAL]);
115 printf ("freed: full %lu incremental %lu\n",
116 ao_scheme_freed[AO_SCHEME_COLLECT_FULL],
117 ao_scheme_freed[AO_SCHEME_COLLECT_INCREMENTAL]);
119 printf("loops: full %lu incremental %lu\n",
120 ao_scheme_loops[AO_SCHEME_COLLECT_FULL],
121 ao_scheme_loops[AO_SCHEME_COLLECT_INCREMENTAL]);
123 printf("loops per collect: full %f incremental %f\n",
124 (double) ao_scheme_loops[AO_SCHEME_COLLECT_FULL] /
125 (double) ao_scheme_collects[AO_SCHEME_COLLECT_FULL],
126 (double) ao_scheme_loops[AO_SCHEME_COLLECT_INCREMENTAL] /
127 (double) ao_scheme_collects[AO_SCHEME_COLLECT_INCREMENTAL]);
129 printf("freed per collect: full %f incremental %f\n",
130 (double) ao_scheme_freed[AO_SCHEME_COLLECT_FULL] /
131 (double) ao_scheme_collects[AO_SCHEME_COLLECT_FULL],
132 (double) ao_scheme_freed[AO_SCHEME_COLLECT_INCREMENTAL] /
133 (double) ao_scheme_collects[AO_SCHEME_COLLECT_INCREMENTAL]);
135 printf("freed per loop: full %f incremental %f\n",
136 (double) ao_scheme_freed[AO_SCHEME_COLLECT_FULL] /
137 (double) ao_scheme_loops[AO_SCHEME_COLLECT_FULL],
138 (double) ao_scheme_freed[AO_SCHEME_COLLECT_INCREMENTAL] /
139 (double) ao_scheme_loops[AO_SCHEME_COLLECT_INCREMENTAL]);