rendered paste body#define Text_AddBin(%1,%2,%3,%4,%5) Text_AddNum(%1, %2, %3, %4, %5, 0b10)#define Text_AddInt(%1,%2,%3,%4,%5) Text_AddNum(%1, %2, %3, %4, %5, 10)#define Text_AddHex(%1,%2,%3,%4,%5) Text_AddNum(%1, %2, %3, %4, %5, 0x10)#define to_digit(%1) ((%1) - '0')//#define is_digit(%1) (to_digit((%1)) <= 9 && to_digit((%1)) >= 0)is_digit(n) return ((n -= '0') <= 9 && n >= 0);#define LADJUST 1#define ZEROPAD 2Text_AddNum(output[], &maxlen, val, width, flags, base){ new text[33], digits, signedVal = val, pos; switch (base) { case 0b10: { do { text[digits++] = '0' + (val % 0b10); val >>>= 1; } while (val); } case 10: { if (val < 0) val = -val; do { text[digits++] = '0' + (val % 10); val /= 10; } while (val); if (signedVal < 0) { if (flags & ZEROPAD) output[pos++] = '-'; else text[digits++] = '-'; } } case 0x10: { do { text[digits++] = '0' + (val % 0x10); val >>>= 4; } while (val); } } if(!(flags & LADJUST)) { while (digits < width && maxlen) { output[pos++] = (flags & ZEROPAD) ? '0' : ' '; width--; maxlen--; } } while (digits-- && maxlen) { output[pos++] = text[digits]; width--; maxlen--; } if (flags & LADJUST) { while (width-- && maxlen) { output[pos++] = (flags & ZEROPAD) ? '0' : ' '; maxlen--; } } return pos;}Text_AddFloat(output[], &maxlen, Float:fval, width, prec){ new text[32], digits, pos, Float:signedVal = fval, val; if (fval < 0) fval = -fval; digits = 0; val = floatround(fval, floatround_floor); do { text[digits++] = '0' + val % 10; val /= 10; } while (val); if (signedVal < 0.0) text[digits++] = '-'; while (digits < width && maxlen) { output[pos++] = ' '; width--; maxlen--; } while (digits-- && maxlen) { output[pos++] = text[digits]; maxlen--; } if (prec < 0) prec = 6; digits = 0; while (digits < prec) { fval -= val; fval *= 10.0; val = floatround(fval, floatround_floor); text[digits++] = '0' + val % 10; } if (digits > 0 && maxlen) { output[pos++] = '.'; maxlen--; for (prec = 0; maxlen && prec < digits; prec++) { output[pos++] = text[prec]; maxlen--; } } return pos;}Text_AddString(output[], &maxlen, string[], width, prec){ new size, pos, pos2; if (!string[0]) { prec = -1; } if (prec >= 0) { for (size = 0; size < prec; size++) { if (string[size] == '\0') break; } } else { while (string[size]) size++; } if (size > maxlen) size = maxlen; maxlen -= size; width -= size; while (size--) { output[pos++] = string[pos2++]; } while (width-- > 0 && maxlen) { output[pos++] = ' '; maxlen--; } return pos;}/*Text_SendFormattedText(playerid, type, colorTime, identifier[], {Float,_}:...){ new messageid; if ((messageid = Text_FindTextPointers(identifier)) == TEXT_NO_POINTERS) return; new output[MAX_LANGUAGES][MAX_STRING] for (new i = (playerid == INVALID_PLAYER_ID) ? (0) : (playerid); i < MAX_PLAYERS; i++) { if (IsPlayerConnected(i)) { new Language:playerLanguage = Text_GetPlayerLanguage(i); if (output[playerLanguage][0]) goto display; new pos, // Input index p, // Output index arg = 4, tempString[MAX_STRING], ch, llen = MAX_STRING; tempString = Text_GetTextFromIndex(messageid, playerLanguage); while (true) { while (llen-- && (ch = tempString[pos++]) != '\0' && ch != '%') output[playerLanguage][p++] = ch; if (ch == '\0' || llen <= 0) goto done; pos++; new argStrings[MAX_STRING], flags, width, prec = -1, sign = '\0', n; rflag: ch = tempString[pos++]; reswitch: switch (ch) { case '-': { flags |= LADJUST; goto rflag; } case '.': { n = 0; while (is_digit((ch = tempString[pos++]))) n = 10 * n + (ch - '0'); prec = n < 0 ? -1 : n; goto reswitch; } case '0': { flags |= ZEROPAD; } case '1', '2', '3', '4', '5', '6', '7', '8', '9': { do { n = 10 * n + (ch - '0'); } while (is_digit((ch = tempString[pos++]))); width = n; goto reswitch; } case 'b': { p += Text_AddBin(output[playerLanguage][p], llen, getarg(arg++), width, flags); } case 'c': { output[playerLanguage][p++] = getarg(arg++); if (!llen--) goto done; // Not in original code - possible overflow } case 'd', 'i': { p += Text_AddInt(output[playerLanguage][p], llen, getarg(arg++), width, flags); } case 'f': { p += Text_AddFloat(output[playerLanguage][p], llen, Float:getarg(arg++), width, prec); } case 's': { for (new i = 0; i < MAX_STRING; i++) { if (!(argStrings[i] = getarg(arg, i))) break; } p += Text_AddString(output[playerLanguage][p], llen, argStrings, width, prec); arg++; } case 'h', 'x': { p += Text_AddHex(output[playerLanguage][p], llen, getarg(arg++), width, flags); } case '\0': { output[playerLanguage][p++] = '%'; if (!llen--) goto done; } default: { output[playerLanguage][p++] = ch; if (!llen--) goto done; } } } done: output[playerLanguage][p] = '\0'; display: if (type & TEXT_TYPE_CLIENT) { SendClientMessage(i, colorTime, output[playerLanguage]); } else if (type & TEXT_TYPE_GAME) { GameTextForPlayer(i, output[playerLanguage], colorTime, type & ~(TEXT_TYPE_CLIENT | TEXT_TYPE_GAME)); } } if (playerid != INVALID_PLAYER_ID) break; }}*/sprintf(tempString[], {Float,_}:...){ new pos, // Input index p, // Output index arg = 1, output[MAX_STRING], ch, llen = MAX_STRING, bool:trueVar = true; while (trueVar) { while (llen-- && (ch = tempString[pos++]) != '\0' && ch != '%') output[p++] = ch; if (ch == '\0' || llen <= 0) goto done; //pos++; new argStrings[MAX_STRING], flags, width, prec = -1, n; rflag: ch = tempString[pos++]; reswitch: switch (ch) { case '-': { flags |= LADJUST; goto rflag; } case '.': { n = 0; while (is_digit((ch = tempString[pos++]))) n = 10 * n + (ch - '0'); prec = n < 0 ? -1 : n; goto reswitch; } case '0': { flags |= ZEROPAD; } case '1', '2', '3', '4', '5', '6', '7', '8', '9': { do { n = 10 * n + (ch - '0'); } while (is_digit((ch = tempString[pos++]))); width = n; goto reswitch; } case 'b': { p += Text_AddBin(output[p], llen, getarg(arg++), width, flags); } case 'c': { output[p++] = getarg(arg++); if (!llen--) goto done; // Not in original code - possible overflow } case 'd', 'i': { p += Text_AddInt(output[p], llen, getarg(arg++), width, flags); } case 'f': { p += Text_AddFloat(output[p], llen, Float:getarg(arg++), width, prec); } case 's': { for (new i = 0; i < MAX_STRING; i++) { if (!(argStrings[i] = getarg(arg, i))) break; } print(argStrings); p += Text_AddString(output[p], llen, argStrings, width, prec); arg++; } case 'h', 'x': { p += Text_AddHex(output[p], llen, getarg(arg++), width, flags); } case '\0': { output[p++] = '%'; if (!llen--) goto done; } default: { output[p++] = ch; if (!llen--) goto done; } } } done: output[p] = '\0'; return output;}