+void save_map (struct Map * map) {
+// Save map to file "map".
+ FILE * file = fopen("map", "w");
+ fputc(map->width / CHAR_MAX, file);
+ fputc(map->width % CHAR_MAX, file);
+ uint16_t y, x;
+ for (y = 0; y < map->height; y++)
+ for (x = 0; x < map->width; x++)
+ fputc(map->cells[y * map->width + x], file);
+ fclose(file); }
+
+struct Map load_map () {
+// Load map from file.
+ FILE * file = fopen("map", "r");
+ struct Map map;
+ map.width = (fgetc(file) * CHAR_MAX) + fgetc(file);
+ long pos = ftell(file);
+ int c = fgetc(file);
+ uint32_t i = 0;
+ while (EOF != c) {
+ i++;
+ c = fgetc(file); }
+ map.cells = malloc(i * sizeof(char));
+ map.height = i / map.width;
+ fseek(file, pos, SEEK_SET);
+ c = fgetc(file);
+ i = 0;
+ while (EOF != c) {
+ map.cells[i] = (char) c;
+ c = fgetc(file);
+ i++; }
+ fclose(file);
+ return map; }
+