void ini_write(const char *path, const char *title, const INITBL *tbl, UINT count) { FILEH fh; const INITBL *p; const INITBL *pterm; BOOL set; char work[512]; fh = file_create(path); if (fh == FILEH_INVALID) { return; } milstr_ncpy(work, "[", sizeof(work)); milstr_ncat(work, title, sizeof(work)); milstr_ncat(work, "]\r\n", sizeof(work)); file_write(fh, work, strlen(work)); p = tbl; pterm = tbl + count; while(p < pterm) { work[0] = '\0'; set = SUCCESS; switch(p->itemtype) { case INITYPE_STR: iniwrsetstr(work, sizeof(work), (char *)p->value); break; case INITYPE_BOOL: milstr_ncpy(work, (*((BYTE *)p->value))?str_true:str_false, sizeof(work)); break; case INITYPE_BYTEARG: iniwrsetarg8(work, sizeof(work), (BYTE *)p->value, p->size); break; case INITYPE_SINT8: SPRINTF(work, str_d, *((char *)p->value)); break; case INITYPE_SINT16: SPRINTF(work, str_d, *((SINT16 *)p->value)); break; case INITYPE_SINT32: SPRINTF(work, str_d, *((SINT32 *)p->value)); break; case INITYPE_UINT8: SPRINTF(work, str_u, *((BYTE *)p->value)); break; case INITYPE_UINT16: SPRINTF(work, str_u, *((UINT16 *)p->value)); break; case INITYPE_UINT32: SPRINTF(work, str_u, *((UINT32 *)p->value)); break; case INITYPE_HEX8: SPRINTF(work, str_x, *((BYTE *)p->value)); break; case INITYPE_HEX16: SPRINTF(work, str_x, *((UINT16 *)p->value)); break; case INITYPE_HEX32: SPRINTF(work, str_x, *((UINT32 *)p->value)); break; default: set = FAILURE; break; } if (set == SUCCESS) { file_write(fh, p->item, strlen(p->item)); file_write(fh, "=", 1); file_write(fh, work, strlen(work)); file_write(fh, "\r\n", 2); } p++; } file_close(fh); }
void ini_write(const char *path, const char *title, INITBL *tbl, UINT count, BOOL create) { char work[512]; INITBL *p; INITBL *pterm; FILEH fh; BOOL set; fh = FILEH_INVALID; if (!create) { fh = file_open(path); if (fh != FILEH_INVALID) file_seek(fh, 0L, FSEEK_END); } if (fh == FILEH_INVALID) { fh = file_create(path); if (fh == FILEH_INVALID) return; } milstr_ncpy(work, "[", sizeof(work)); milstr_ncat(work, title, sizeof(work)); milstr_ncat(work, "]\n", sizeof(work)); file_write(fh, work, strlen(work)); p = tbl; pterm = tbl + count; while (p < pterm) { if (!(p->itemtype & INIFLAG_RO) || read_iniread_flag(p)) { work[0] = '\0'; set = SUCCESS; switch (p->itemtype & INITYPE_MASK) { case INITYPE_STR: iniwrsetstr(work, sizeof(work), (char *)p->value); break; case INITYPE_BOOL: milstr_ncpy(work, (*((UINT8 *)p->value)) ? str_true : str_false, sizeof(work)); break; case INITYPE_BITMAP: milstr_ncpy(work, inigetbmp((UINT8 *)p->value, p->arg) ? str_true : str_false, sizeof(work)); break; case INITYPE_ARGH8: iniwrsetargh8(work, sizeof(work), p); break; case INITYPE_SINT8: g_snprintf(work, sizeof(work), "%d", *((char *)p->value)); break; case INITYPE_SINT16: g_snprintf(work, sizeof(work), "%d", *((SINT16 *)p->value)); break; case INITYPE_SINT32: g_snprintf(work, sizeof(work), "%d", *((SINT32 *)p->value)); break; case INITYPE_UINT8: g_snprintf(work, sizeof(work), "%u", *((UINT8 *)p->value)); break; case INITYPE_UINT16: g_snprintf(work, sizeof(work), "%u", *((UINT16 *)p->value)); break; case INITYPE_UINT32: g_snprintf(work, sizeof(work), "%u", *((UINT32 *)p->value)); break; case INITYPE_HEX8: g_snprintf(work, sizeof(work), "%x", *((UINT8 *)p->value)); break; case INITYPE_HEX16: g_snprintf(work, sizeof(work), "%x", *((UINT16 *)p->value)); break; case INITYPE_HEX32: g_snprintf(work, sizeof(work), "%x", *((UINT32 *)p->value)); break; case INITYPE_KB: if (*(UINT8 *)p->value == KEY_KEY101) milstr_ncpy(work, "101", sizeof(work)); else milstr_ncpy(work, "106", sizeof(work)); break; case INITYPE_SNDDRV: g_snprintf(work, sizeof(work), "%s", snddrv_num2drv(*(UINT8 *)p->value)); break; case INITYPE_INTERP: g_snprintf(work, sizeof(work), "%s", iniwrinterp(*(UINT8 *)p->value)); break; default: set = FAILURE; break; } if (set == SUCCESS) { file_write(fh, p->item, strlen(p->item)); file_write(fh, " = ", 3); file_write(fh, work, strlen(work)); file_write(fh, "\n", 1); } } p++; } file_close(fh); }