pint32 P_APIENTRY pAssetGetRemainingLength(PAsset *asset) { PASSERT(asset != P_NULL); if (asset != P_NULL) { PFile *fp = (PFile *)asset->pHandle; pint32 currentPosition = pftell(fp); pfseek(fp, 0, P_FILE_SEEK_FROM_END); return (pftell(fp) - currentPosition); } return 0; }
pint32 P_APIENTRY pAssetGetSize(PAsset *asset) { PASSERT(asset != P_NULL); if (asset != P_NULL) { PFile *fp = (PFile *)asset->pHandle; pfseek(fp, 0, P_FILE_SEEK_FROM_END); return pftell(fp); } return 0; }
pInt32 PStreamFile::getPosition() { return pftell(m_file); }
int init_newton_transform(preprocessed *prep, float reqscale, char *filename, int dimen) /* */ { int ii, jj; unsigned short matdim; double scale, onerow[MAX_DIMEN]; PFile* dfpt; long foffset; double xfp; /* Open file */ ASSERT(prep); ASSERT(filename); dfpt = file_must_open(NULL, filename, ("rb"), ESR_TRUE); prep->post_proc |= LIN_TRAN; prep->use_dim = dimen; pfread(&matdim, sizeof(short), 1, dfpt); if (matdim > MAX_DIMEN) SERVICE_ERROR(BAD_IMELDA); create_linear_transform(prep, matdim, 1); pfread(&scale, sizeof(double), 1, dfpt); if (reqscale != 0) scale = reqscale; #if DEBUG PLogMessage("L: LDA Suggested scale is %.1f\n", scale); #endif if (!prep->dim) prep->dim = matdim; else if (prep->dim != matdim) { log_report("Data (%d) and LDA (%d) dimensions don't match\n", prep->dim, matdim); SERVICE_ERROR(BAD_IMELDA); } /* Eigenvalues, ignored */ pfread(onerow, sizeof(double), matdim, dfpt); /* Translation Vector */ pfread(onerow, sizeof(double), matdim, dfpt); for (ii = 0; ii < matdim; ii++) { xfp = scale * (onerow[ii] - UTB_MEAN) + UTB_MEAN; if (xfp > 0.0) xfp += 0.5; else if (xfp < 0.0) xfp -= 0.5; prep->offset[ii] = (imeldata) xfp; } /* The imelda matrix */ for (ii = 0; ii < matdim; ii++) { pfread(onerow, sizeof(double), matdim, dfpt); for (jj = 0; jj < matdim; jj++) prep->imelda[ii][jj] = (covdata)(scale * onerow[jj]); } prep->imel_shift = scale_matrix_for_fixedpoint(prep->matrix, prep->imelda, matdim); /* The inverse imelda matrix */ foffset = pftell(dfpt); pfread(onerow, sizeof(double), matdim, dfpt); if (pfeof(dfpt) != 0) { #ifdef SREC_ENGINE_VERBOSE_LOGGING PLogMessage("W: Inverting imelda matrix"); #endif invert_matrix(prep->imelda, prep->inverse, prep->dim); } else { pfseek(dfpt, foffset, SEEK_SET); for (ii = 0; ii < matdim; ii++) { pfread(onerow, sizeof(double), matdim, dfpt); for (jj = 0; jj < matdim; jj++) prep->inverse[ii][jj] = (covdata)(onerow[jj] / scale); } } prep->inv_shift = scale_matrix_for_fixedpoint(prep->invmat, prep->inverse, matdim); pfclose(dfpt); return (0); }