/* generates object names, if they are missing */ static int generate_names(DATAFILE *dat, int n) { int i; while (dat->type != DAT_END) { if (!*get_datafile_property(dat, DAT_NAME)) { char tmp[32]; sprintf(tmp, "%03d_%c%c%c%c", n++, (dat->type>>24)&0xFF, (dat->type>>16)&0xFF, (dat->type>>8)&0xFF, dat->type&0xFF); for (i=4; tmp[i]; i++) { if (((tmp[i] < '0') || (tmp[i] > '9')) && ((tmp[i] < 'A') || (tmp[i] > 'Z')) && ((tmp[i] < 'a') || (tmp[i] > 'z'))) tmp[i] = 0; } datedit_set_property(dat, DAT_NAME, tmp); } if (dat->type == DAT_FILE) n = generate_names((DATAFILE *)dat->dat, n); dat++; }
void TileRepository::importDatafile(DATAFILE *file) { if (!file) return; TileType *tempTileType; BITMAP *tempBitmap; // Import bitmaps from the datafile while (file->type != DAT_END) { switch (file->type) { case DAT_FILE: // Go recursively into nested datafiles importDatafile((DATAFILE*)file->dat); break; case DAT_BITMAP: // Create a new tile type and add it to the hash_map tempBitmap = create_bitmap(((BITMAP*)file->dat)->w, ((BITMAP*)file->dat)->h); blit((BITMAP*)file->dat, tempBitmap, 0, 0, 0, 0, tempBitmap->w, tempBitmap->h); tempTileType = new TileType(tempBitmap, get_datafile_property(file, DAT_ID('N','A','M','E'))); tileTypes.insert(make_pair(tempTileType->getName(), tempTileType)); break; } file++; } }
/* worker function for counting objects with origin */ static int do_origin_check(DATAFILE *dat, int *param, int param2) { AL_CONST char *orig = get_datafile_property(dat, DAT_ORIG); if (orig[0]) (*param)++; return D_O_K; }
/* worker function for changing to a relative filename */ static int do_change_relative(DATAFILE *dat, int *param, int param2) { AL_CONST char *orig = get_datafile_property(dat, DAT_ORIG); char relative[FILENAME_LENGTH]; if (!orig[0] || is_relative_filename(orig)) { (*param)++; return D_O_K; } make_relative_filename(relative, grabber_data_file, orig, FILENAME_LENGTH); datedit_set_property(dat, DAT_ORIG, relative); return D_REDRAW; }
/* loads object names from a header file, if they are missing */ static void load_header(DATAFILE *dat, AL_CONST char *filename) { char buf[160], buf2[160]; int datsize, i, c, c2; PACKFILE *f; datsize = 0; while (dat[datsize].type != DAT_END) datsize++; f = pack_fopen(filename, F_READ); if (f) { while (pack_fgets(buf, 160, f) != 0) { if (strncmp(buf, "#define ", 8) == 0) { c2 = 0; c = 8; while ((buf[c]) && (buf[c] != ' ')) buf2[c2++] = buf[c++]; buf2[c2] = 0; while (buf[c]==' ') c++; i = 0; while ((buf[c] >= '0') && (buf[c] <= '9')) { i *= 10; i += buf[c] - '0'; c++; } if ((i < datsize) && (!*get_datafile_property(dat+i, DAT_NAME))) datedit_set_property(dat+i, DAT_NAME, buf2); } } pack_fclose(f); } else { /* don't let the error propagate */ errno = 0; } }