// Convert the number to a string, and separate it with commas by three orders of magnitude void ToStr3(char *str, UINT size, UINT64 v) { char tmp[128]; char tmp2[128]; UINT i, len, wp; // Validate arguments if (str == NULL) { return; } ToStr64(tmp, v); wp = 0; len = StrLen(tmp); for (i = len - 1;((int)i) >= 0;i--) { tmp2[wp++] = tmp[i]; } tmp2[wp++] = 0; wp = 0; for (i = 0;i < len;i++) { if (i != 0 && (i % 3) == 0) { tmp[wp++] = ','; } tmp[wp++] = tmp2[i]; } tmp[wp++] = 0; wp = 0; len = StrLen(tmp); for (i = len - 1;((int)i) >= 0;i--) { tmp2[wp++] = tmp[i]; } tmp2[wp++] = 0; StrCpy(str, size, tmp2); }
// Output contents of the item void CfgAddItemText(BUF *b, ITEM *t, UINT depth) { char *data; char *sub = NULL; UINT len; UINT size; char *utf8; UINT utf8_size; wchar_t *string; // Validate arguments if (b == NULL || t == NULL) { return; } // Process the data by its type data = NULL; switch (t->Type) { case ITEM_TYPE_INT: data = Malloc(32); ToStr(data, *((UINT *)t->Buf)); break; case ITEM_TYPE_INT64: data = Malloc(64); ToStr64(data, *((UINT64 *)t->Buf)); break; case ITEM_TYPE_BYTE: data = ZeroMalloc(t->size * 4 + 32); len = B64_Encode(data, t->Buf, t->size); data[len] = 0; break; case ITEM_TYPE_STRING: string = t->Buf; utf8_size = CalcUniToUtf8(string); utf8_size++; utf8 = ZeroMalloc(utf8_size); utf8[0] = 0; UniToUtf8(utf8, utf8_size, string); size = utf8_size; data = utf8; break; case ITEM_TYPE_BOOL: size = 32; data = Malloc(size); if (*((bool *)t->Buf) == false) { StrCpy(data, size, TAG_FALSE); } else { StrCpy(data, size, TAG_TRUE); } break; } if (data == NULL) { return; } // Output the data line CfgAddData(b, t->Type, t->Name, data, sub, depth); // Memory release Free(data); if (sub != NULL) { Free(sub); } }