/* PMDModel::load: load from file name */ bool PMDModel::load(const char *file, BulletPhysics *bullet, SystemTexture *systex) { int len; FILE *fp; size_t size; unsigned char *data; char *dir; bool ret; if(bullet == NULL || systex == NULL) return false; len = MMDFiles_strlen(file); if(len <= 0) return false; /* get model directory */ dir = MMDFiles_dirname(file); /* open file */ fp = MMDFiles_fopen(file, "rb"); if (!fp) return false; /* get file size */ size = MMDFiles_getfsize(file); /* allocate memory for reading data */ data = (unsigned char *) malloc(size); /* read all data */ fread(data, 1, size, fp); /* close file */ fclose(fp); /* initialize and load from the data memories */ ret = parse(data, (unsigned long) size, bullet, systex, dir); /* release memory for reading */ free(data); free(dir); return ret; }
/* MMDFiles_getfsize: get file size */ size_t MMDFiles_getfsize(const char *file) { FILE *fp; fpos_t size; fp = MMDFiles_fopen(file, "rb"); if (!fp) return 0; fseek(fp, 0, SEEK_END); fgetpos(fp, &size); fseek(fp, 0, SEEK_SET); fclose(fp); #if defined(_WIN32) || defined(__APPLE__) return (size_t) size; #else return (size_t) size.__pos; #endif /* _WIN32 || __APPLE__ */ }
/* MMDAgent_fopen: get file pointer */ FILE *MMDAgent_fopen(const char *file, const char *mode) { return MMDFiles_fopen(file, mode); }