diff --git a/radio/src/gui/horus/lcd.cpp b/radio/src/gui/horus/lcd.cpp index f25c0bdbd..4607879b3 100644 --- a/radio/src/gui/horus/lcd.cpp +++ b/radio/src/gui/horus/lcd.cpp @@ -2,7 +2,7 @@ * Copyright (C) OpenTX * * Based on code named - * th9x - http://code.google.com/p/th9x + * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x * @@ -195,7 +195,7 @@ void lcdDrawSizedText(coord_t x, coord_t y, const pm_char * s, uint8_t len, LcdF strcat_zchar(str, s, len); else strAppend(str, s, len); - + const coord_t orig_x = x; bool setx = false; while (len--) { @@ -431,11 +431,10 @@ void putsTimer(coord_t x, coord_t y, putstime_t tme, LcdFlags att) lcdDrawText(x, y, str, att); } -void drawStringWithIndex(coord_t x, coord_t y, const pm_char *str, int idx, LcdFlags att, const char *prefix) +void drawStringWithIndex(coord_t x, coord_t y, const pm_char * str, int idx, LcdFlags att, const char * prefix) { - // TODO quick & dirty, dangerous - char s[32]; - sprintf(s, "%s%s%d", prefix, str, abs(idx)); + char s[64]; + strAppendNumber(strAppend(strAppend(s, prefix), str), abs(idx)); lcdDrawText(x, y, s, att); } @@ -457,7 +456,7 @@ void putsMixerSource(coord_t x, coord_t y, uint8_t idx, LcdFlags att) s[1+LEN_INPUT_NAME] = '\0'; } else { - sprintf(s+1, "%02d", idx); + strAppendNumber(s+1, idx, 2); } lcdDrawText(x, y, s, att); } @@ -546,8 +545,7 @@ char * getStringAtIndex(char * dest, const char * s, int idx) char * getStringWithIndex(char * dest, const char * s, int idx) { - // TODO reimplement without the sprintf - sprintf(dest, "%s%d", s, abs(idx)); + strAppendNumber(strAppend(dest, s), abs(idx)); return dest; } diff --git a/radio/src/gui/horus/menu_general_sdmanager.cpp b/radio/src/gui/horus/menu_general_sdmanager.cpp index 78e154eec..3fdeea74d 100644 --- a/radio/src/gui/horus/menu_general_sdmanager.cpp +++ b/radio/src/gui/horus/menu_general_sdmanager.cpp @@ -2,7 +2,7 @@ * Copyright (C) OpenTX * * Based on code named - * th9x - http://code.google.com/p/th9x + * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x * @@ -259,7 +259,7 @@ bool menuGeneralSdManager(evt_t _event) TCHAR lfn[_MAX_LFN + 1]; fno.lfname = lfn; fno.lfsize = sizeof(lfn); - + if (menuVerticalOffset == 0) { reusableBuffer.sdmanager.offset = 0; memset(reusableBuffer.sdmanager.lines, 0, sizeof(reusableBuffer.sdmanager.lines)); @@ -347,7 +347,11 @@ bool menuGeneralSdManager(evt_t _event) if (reusableBuffer.sdmanager.lines[i][0]) { if (IS_DIRECTORY(reusableBuffer.sdmanager.lines[i])) { char s[sizeof(reusableBuffer.sdmanager.lines[0])+2]; - sprintf(s, "[%s]", reusableBuffer.sdmanager.lines[i]); + char * ptr = s; + *ptr++ = '['; + ptr = strAppend(ptr, reusableBuffer.sdmanager.lines[i]); + *ptr++ = ']'; + *ptr = '\0'; lcdDrawText(MENUS_MARGIN_LEFT, y, s, attr); } else { @@ -366,6 +370,6 @@ bool menuGeneralSdManager(evt_t _event) } lcdDrawBitmap(LCD_W/2, (LCD_H-MODEL_BITMAP_HEIGHT)/2, modelBitmap); } - + return true; } diff --git a/radio/src/gui/horus/menu_model_curves.cpp b/radio/src/gui/horus/menu_model_curves.cpp index 47cafb7b3..fc12703f6 100644 --- a/radio/src/gui/horus/menu_model_curves.cpp +++ b/radio/src/gui/horus/menu_model_curves.cpp @@ -2,7 +2,7 @@ * Copyright (C) OpenTX * * Based on code named - * th9x - http://code.google.com/p/th9x + * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x * @@ -248,7 +248,7 @@ bool menuModelCurveOne(evt_t event) lcdDrawSolidFilledRect(point.x, CURVE_CENTER_Y-CURVE_SIDE_WIDTH, 2, 2*CURVE_SIDE_WIDTH+2, CURVE_CURSOR_COLOR); char text[5]; - sprintf(text, "%d", points[i]); + strAppendNumber(text, points[i]); if (point.x >= CURVE_CENTER_X) { drawCurveVerticalScale(point.x-15); @@ -271,7 +271,7 @@ bool menuModelCurveOne(evt_t event) drawCurvePoint(point.x-3, point.y-4, CURVE_CURSOR_COLOR); - sprintf(text, "%d", x); + strAppendNumber(text, x); drawCurveCoord(limit(CURVE_CENTER_X-CURVE_SIDE_WIDTH-1, point.x-CURVE_COORD_WIDTH/2, CURVE_CENTER_X+CURVE_SIDE_WIDTH-CURVE_COORD_WIDTH+1), CURVE_CENTER_Y+CURVE_SIDE_WIDTH+2, text, selectionMode==1); if (s_editMode > 0) { diff --git a/radio/src/gui/horus/menu_model_inputs.cpp b/radio/src/gui/horus/menu_model_inputs.cpp index 88eb76ecb..3f2d0a813 100644 --- a/radio/src/gui/horus/menu_model_inputs.cpp +++ b/radio/src/gui/horus/menu_model_inputs.cpp @@ -2,7 +2,7 @@ * Copyright (C) OpenTX * * Based on code named - * th9x - http://code.google.com/p/th9x + * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x * @@ -190,17 +190,17 @@ bool menuModelExpoOne(evt_t event) char texty[5]; int x = getValue(ed->srcRaw); if (ed->srcRaw >= MIXSRC_FIRST_TELEM) { - sprintf(textx, "%d", calcRESXto100(x)); + strAppendNumber(textx, calcRESXto100(x)); // TODO putsTelemetryChannelValue(LCD_W-8, 6*FH, ed->srcRaw - MIXSRC_FIRST_TELEM, x); if (ed->scale > 0) x = (x * 1024) / convertTelemValue(ed->srcRaw - MIXSRC_FIRST_TELEM + 1, ed->scale); } else { - sprintf(textx, "%d", calcRESXto100(x)); + strAppendNumber(textx, calcRESXto100(x)); } x = limit(-1024, x, 1024); int y = limit(-1024, expoFn(x), 1024); - sprintf(texty, "%d", calcRESXto100(y)); + strAppendNumber(texty, calcRESXto100(y)); x = divRoundClosest(x*CURVE_SIDE_WIDTH, RESX); y = CURVE_CENTER_Y + getCurveYCoord(expoFn, x, CURVE_SIDE_WIDTH); @@ -569,4 +569,3 @@ bool menuModelExposAll(evt_t event) return true; } - diff --git a/radio/src/sdcard.cpp b/radio/src/sdcard.cpp index ad5911771..ddb754754 100644 --- a/radio/src/sdcard.cpp +++ b/radio/src/sdcard.cpp @@ -2,7 +2,7 @@ * Copyright (C) OpenTX * * Based on code named - * th9x - http://code.google.com/p/th9x + * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x * @@ -94,7 +94,7 @@ int findNextFileIndex(char * filename, const char * directory) char extension[LEN_FILE_EXTENSION+1]; strncpy(extension, getFileExtension(filename), sizeof(extension)); do { - char * pos = strAppendNumber(indexPos, ++index); + char * pos = strAppendNumber(indexPos, ++index, 2); strAppend(pos, extension); if (!isFileAvailable(filename, directory)) { return index; diff --git a/radio/src/strhelpers.cpp b/radio/src/strhelpers.cpp index a405eb4c1..b387d4434 100644 --- a/radio/src/strhelpers.cpp +++ b/radio/src/strhelpers.cpp @@ -2,7 +2,7 @@ * Copyright (C) OpenTX * * Based on code named - * th9x - http://code.google.com/p/th9x + * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x * @@ -110,7 +110,7 @@ uint8_t zlen(const char * str, uint8_t size) return 0; } -char *strcat_zchar(char * dest, const char * name, uint8_t size, const char *defaultName, uint8_t defaultNameSize, uint8_t defaultIdx) +char * strcat_zchar(char * dest, const char * name, uint8_t size, const char * defaultName, uint8_t defaultNameSize, uint8_t defaultIdx) { int8_t len = 0; @@ -145,13 +145,23 @@ char *strcat_zchar(char * dest, const char * name, uint8_t size, const char *def #endif #endif -char * strAppendNumber(char * dest, unsigned int value) +char * strAppendNumber(char * dest, unsigned int value, uint8_t digits, uint8_t radix) { - div_t qr = div(value, 10); - *dest++ = '0' + qr.quot; - *dest++ = '0' + qr.rem; - *dest = '\0'; - return dest; + if (digits == 0) { + unsigned int tmp = value; + digits = 1; + while (tmp >= 10) { + ++digits; + tmp /= radix; + } + } + dest[digits] = '\0'; + while(digits > 0) { + div_t qr = div(value, radix); + dest[--digits] = (qr.rem >= 10 ? 'A' : '0') + qr.rem; + value = qr.quot; + } + return dest + digits; } #if defined(CPUARM) || defined(SDCARD) @@ -174,7 +184,7 @@ char * strSetCursor(char * dest, int position) return dest; } -char * strAppendFilename(char *dest, const char *filename, const int size) +char * strAppendFilename(char * dest, const char * filename, const int size) { memset(dest, 0, size); for (int i=0; i