--- np2/common/profile.c 2004/03/31 14:02:50 1.6 +++ np2/common/profile.c 2004/06/12 15:32:52 1.10 @@ -336,7 +336,7 @@ PFILEH profile_open(const char *filename } } file_close(fh); - ret->buffer = (BYTE *)(ret + 1); + ret->buffer = (char *)(ret + 1); ret->buffers = size; ret->size = filesize; ret->flag = flag; @@ -401,7 +401,13 @@ BOOL profile_write(const char *app, cons return(FAILURE); } if (!pfp.apphit) { - newsize = pfp.applen + 2 + 2; + newsize = pfp.applen + 2; +#if defined(OSLINEBREAK_CR) || defined(OSLINEBREAK_CRLF) + newsize++; +#endif +#if defined(OSLINEBREAK_LF) || defined(OSLINEBREAK_CRLF) + newsize++; +#endif if (replace(hdl, pfp.pos, 0, newsize) != SUCCESS) { return(FAILURE); } @@ -409,13 +415,23 @@ BOOL profile_write(const char *app, cons *buf++ = '['; CopyMemory(buf, app, pfp.applen); buf += pfp.applen; - buf[0] = ']'; - buf[1] = '\r'; - buf[2] = '\n'; + *buf++ = ']'; +#if defined(OSLINEBREAK_CR) || defined(OSLINEBREAK_CRLF) + *buf++ = '\r'; +#endif +#if defined(OSLINEBREAK_LF) || defined(OSLINEBREAK_CRLF) + *buf++ = '\n'; +#endif pfp.pos += newsize; } datalen = strlen(data); - newsize = pfp.keylen + 1 + datalen + 2; + newsize = pfp.keylen + 1 + datalen; +#if defined(OSLINEBREAK_CR) || defined(OSLINEBREAK_CRLF) + newsize++; +#endif +#if defined(OSLINEBREAK_LF) || defined(OSLINEBREAK_CRLF) + newsize++; +#endif if (replace(hdl, pfp.pos, pfp.size, newsize) != SUCCESS) { return(FAILURE); } @@ -425,16 +441,91 @@ BOOL profile_write(const char *app, cons *buf++ = '='; CopyMemory(buf, data, datalen); buf += datalen; - buf[0] = '\r'; - buf[1] = '\n'; +#if defined(OSLINEBREAK_CR) || defined(OSLINEBREAK_CRLF) + *buf++ = '\r'; +#endif +#if defined(OSLINEBREAK_LF) || defined(OSLINEBREAK_CRLF) + *buf++ = '\n'; +#endif return(SUCCESS); } +static void bitmapset(BYTE *ptr, UINT pos, BOOL set) { -// ---- + UINT8 bit; + + ptr += (pos >> 3); + bit = 1 << (pos & 7); + if (set) { + *ptr |= bit; + } + else { + *ptr &= ~bit; + } +} + +static BOOL bitmapget(const BYTE *ptr, UINT pos) { + + return((ptr[pos >> 3] >> (pos & 7)) & 1); +} + +static void binset(BYTE *bin, UINT binlen, const char *src) { + + UINT i; + BYTE val; + BOOL set; + char c; + + for (i=0; i= '0') && (c <= '9')) { + val <<= 4; + val += c - '0'; + set = TRUE; + } + else { + c |= 0x20; + if ((c >= 'a') && (c <= 'f')) { + val <<= 4; + val += c - 'a' + 10; + set = TRUE; + } + } + src++; + } + if (set == FALSE) { + break; + } + bin[i] = val; + } +} + +static void binget(char *work, int size, const BYTE *bin, UINT binlen) { + + UINT i; + char tmp[8]; + + if (binlen) { + SPRINTF(tmp, "%.2x", bin[0]); + milstr_ncpy(work, tmp, size); + } + for (i=1; ivalue) = (!milstr_cmp(work, str_true))?1:0; break; - case PFTYPE_BITMAP: // Todo + case PFTYPE_BITMAP: + bitmapset((BYTE *)p->value, p->arg, + (!milstr_cmp(work, str_true))?TRUE:FALSE); + break; + case PFTYPE_BIN: + binset((BYTE *)p->value, p->arg, work); break; case PFTYPE_SINT8: @@ -489,6 +585,12 @@ const PFTBL *pterm; case PFTYPE_HEX32: *(UINT32 *)p->value = (UINT32)milstr_solveHEX(work); break; + + default: + if (cb != NULL) { + (*cb)(p, work); + } + break; } } p++; @@ -497,7 +599,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; @@ -524,9 +626,13 @@ const char *set; set = (*((UINT8 *)p->value))?str_true:str_false; break; - case PFTYPE_BITMAP: // Todo + case PFTYPE_BITMAP: + set = (bitmapget((BYTE *)p->value, p->arg))? + str_true:str_false; + break; + case PFTYPE_BIN: - set = NULL; + binget(work, sizeof(work), (BYTE *)p->value, p->arg); break; case PFTYPE_SINT8: @@ -566,7 +672,12 @@ const char *set; break; default: - set = NULL; + if (cb != NULL) { + set = (*cb)(p, work, sizeof(work)); + } + else { + set = NULL; + } break; } if (set) {