--- np2/common/profile.c 2004/03/31 11:59:17 1.5 +++ np2/common/profile.c 2004/04/07 13:33:23 1.7 @@ -434,7 +434,7 @@ BOOL profile_write(const char *app, cons // ---- void profile_iniread(const char *path, const char *app, - const PFTBL *tbl, UINT count) { + const PFTBL *tbl, UINT count, PFREAD cb) { PFILEH pfh; const PFTBL *p; @@ -450,11 +450,51 @@ const PFTBL *pterm; while(p < pterm) { if (profile_read(app, p->item, NULL, work, sizeof(work), pfh) == SUCCESS) { - switch(p->itemtype) { + switch(p->itemtype & PFITYPE_MASK) { + case PFTYPE_STR: + milstr_ncpy(p->value, work, p->arg); + break; + + case PFTYPE_BOOL: + *((UINT8 *)p->value) = (!milstr_cmp(work, str_true))?1:0; + break; + + case PFTYPE_BITMAP: // Todo + case PFTYPE_BIN: + break; + + case PFTYPE_SINT8: + case PFTYPE_UINT8: + *(UINT8 *)p->value = (UINT32)milstr_solveINT(work); + break; + + case PFTYPE_SINT16: + case PFTYPE_UINT16: + *(UINT16 *)p->value = (UINT32)milstr_solveINT(work); + break; + case PFTYPE_SINT32: case PFTYPE_UINT32: - *(UINT32 *)p->value = (UINT32)milstr_solveINT(work); - break; + *(UINT32 *)p->value = (UINT32)milstr_solveINT(work); + break; + + case PFTYPE_HEX8: + *(UINT8 *)p->value = (UINT8)milstr_solveHEX(work); + break; + + case PFTYPE_HEX16: + *(UINT16 *)p->value = (UINT16)milstr_solveHEX(work); + break; + + case PFTYPE_HEX32: + *(UINT32 *)p->value = (UINT32)milstr_solveHEX(work); + break; + + default: + if (cb != NULL) { + (*cb)(p, work); + } + break; } } p++; @@ -463,7 +503,7 @@ const PFTBL *pterm; } void profile_iniwrite(const char *path, const char *app, - const PFTBL *tbl, UINT count) { + const PFTBL *tbl, UINT count, PFWRITE cb) { PFILEH pfh; const PFTBL *p; @@ -478,19 +518,71 @@ const char *set; p = tbl; pterm = tbl + count; while(p < pterm) { - work[0] = '\0'; - set = work; - switch(p->itemtype) { - case PFTYPE_SINT32: - SPRINTF(work, str_d, *((SINT32 *)p->value)); - break; - - default: - set = NULL; - break; - } - if (set) { - profile_write(app, p->item, set, pfh); + if (!(p->itemtype & PFFLAG_RO)) { + work[0] = '\0'; + set = work; + switch(p->itemtype & PFITYPE_MASK) { + case PFTYPE_STR: + set = (char *)p->value; + break; + + case PFTYPE_BOOL: + set = (*((UINT8 *)p->value))?str_true:str_false; + break; + + case PFTYPE_BITMAP: // Todo + case PFTYPE_BIN: + set = NULL; + break; + + case PFTYPE_SINT8: + SPRINTF(work, str_d, *((SINT8 *)p->value)); + break; + + case PFTYPE_SINT16: + SPRINTF(work, str_d, *((SINT16 *)p->value)); + break; + + case PFTYPE_SINT32: + SPRINTF(work, str_d, *((SINT32 *)p->value)); + break; + + case PFTYPE_UINT8: + SPRINTF(work, str_u, *((UINT8 *)p->value)); + break; + + case PFTYPE_UINT16: + SPRINTF(work, str_u, *((UINT16 *)p->value)); + break; + + case PFTYPE_UINT32: + SPRINTF(work, str_u, *((UINT32 *)p->value)); + break; + + case PFTYPE_HEX8: + SPRINTF(work, str_x, *((UINT8 *)p->value)); + break; + + case PFTYPE_HEX16: + SPRINTF(work, str_x, *((UINT16 *)p->value)); + break; + + case PFTYPE_HEX32: + SPRINTF(work, str_x, *((UINT32 *)p->value)); + break; + + default: + if (cb != NULL) { + set = (*cb)(p, work, sizeof(work)); + } + else { + set = NULL; + } + break; + } + if (set) { + profile_write(app, p->item, set, pfh); + } } p++; }