static FILE *ao_lisp_file;
static int newline = 1;
+static char save_file[] = "lisp.image";
+
+int
+ao_lisp_os_save(void)
+{
+ FILE *save = fopen(save_file, "w");
+
+ if (!save) {
+ perror(save_file);
+ return 0;
+ }
+ fwrite(ao_lisp_pool, 1, AO_LISP_POOL_TOTAL, save);
+ fclose(save);
+ return 1;
+}
+
+int
+ao_lisp_os_restore_save(struct ao_lisp_os_save *save, int offset)
+{
+ FILE *restore = fopen(save_file, "r");
+ size_t ret;
+
+ if (!restore) {
+ perror(save_file);
+ return 0;
+ }
+ fseek(restore, offset, SEEK_SET);
+ ret = fread(save, sizeof (struct ao_lisp_os_save), 1, restore);
+ fclose(restore);
+ if (ret != 1)
+ return 0;
+ return 1;
+}
+
+int
+ao_lisp_os_restore(void)
+{
+ FILE *restore = fopen(save_file, "r");
+ size_t ret;
+
+ if (!restore) {
+ perror(save_file);
+ return 0;
+ }
+ ret = fread(ao_lisp_pool, 1, AO_LISP_POOL_TOTAL, restore);
+ fclose(restore);
+ if (ret != AO_LISP_POOL_TOTAL)
+ return 0;
+ return 1;
+}
+
int
ao_lisp_getc(void)
{
ao_lisp_file = NULL;
}
ao_lisp_read_eval_print();
+
+ printf ("collects: full: %d incremental %d\n",
+ ao_lisp_collects[AO_LISP_COLLECT_FULL],
+ ao_lisp_collects[AO_LISP_COLLECT_INCREMENTAL]);
+
+ printf ("freed: full %d incremental %d\n",
+ ao_lisp_freed[AO_LISP_COLLECT_FULL],
+ ao_lisp_freed[AO_LISP_COLLECT_INCREMENTAL]);
+
+ printf("loops: full %d incremental %d\n",
+ ao_lisp_loops[AO_LISP_COLLECT_FULL],
+ ao_lisp_loops[AO_LISP_COLLECT_INCREMENTAL]);
+
+ printf("loops per collect: full %f incremental %f\n",
+ (double) ao_lisp_loops[AO_LISP_COLLECT_FULL] /
+ (double) ao_lisp_collects[AO_LISP_COLLECT_FULL],
+ (double) ao_lisp_loops[AO_LISP_COLLECT_INCREMENTAL] /
+ (double) ao_lisp_collects[AO_LISP_COLLECT_INCREMENTAL]);
+
+ printf("freed per collect: full %f incremental %f\n",
+ (double) ao_lisp_freed[AO_LISP_COLLECT_FULL] /
+ (double) ao_lisp_collects[AO_LISP_COLLECT_FULL],
+ (double) ao_lisp_freed[AO_LISP_COLLECT_INCREMENTAL] /
+ (double) ao_lisp_collects[AO_LISP_COLLECT_INCREMENTAL]);
+
+ printf("freed per loop: full %f incremental %f\n",
+ (double) ao_lisp_freed[AO_LISP_COLLECT_FULL] /
+ (double) ao_lisp_loops[AO_LISP_COLLECT_FULL],
+ (double) ao_lisp_freed[AO_LISP_COLLECT_INCREMENTAL] /
+ (double) ao_lisp_loops[AO_LISP_COLLECT_INCREMENTAL]);
}