From 21886fbc007a9d0ee41c7fcc5cc13ca2a0c54d09 Mon Sep 17 00:00:00 2001 From: Ruben van Leeuwen Date: Thu, 21 Sep 2017 16:42:10 +0200 Subject: [PATCH 1/2] added variable for args in print and println --- hardware/arduino/avr/cores/arduino/Print.h | 23 ++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/hardware/arduino/avr/cores/arduino/Print.h b/hardware/arduino/avr/cores/arduino/Print.h index 058a2abbdc4..410871f1fd5 100644 --- a/hardware/arduino/avr/cores/arduino/Print.h +++ b/hardware/arduino/avr/cores/arduino/Print.h @@ -34,6 +34,9 @@ #endif #define BIN 2 +#define PRINT_NOARG 0 +#define PRINT_LEADINGZERO 1 + class Print { private: @@ -66,11 +69,11 @@ class Print size_t print(const String &); size_t print(const char[]); size_t print(char); - size_t print(unsigned char, int = DEC); - size_t print(int, int = DEC); - size_t print(unsigned int, int = DEC); - size_t print(long, int = DEC); - size_t print(unsigned long, int = DEC); + size_t print(unsigned char, int = DEC, int = PRINT_NOARG); + size_t print(int, int = DEC, int = PRINT_NOARG); + size_t print(unsigned int, int = DEC, int = PRINT_NOARG); + size_t print(long, int = DEC, int = PRINT_NOARG); + size_t print(unsigned long, int = DEC, int = PRINT_NOARG); size_t print(double, int = 2); size_t print(const Printable&); @@ -78,11 +81,11 @@ class Print size_t println(const String &s); size_t println(const char[]); size_t println(char); - size_t println(unsigned char, int = DEC); - size_t println(int, int = DEC); - size_t println(unsigned int, int = DEC); - size_t println(long, int = DEC); - size_t println(unsigned long, int = DEC); + size_t println(unsigned char, int = DEC, int = PRINT_NOARG); + size_t println(int, int = DEC, int = PRINT_NOARG); + size_t println(unsigned int, int = DEC, int = PRINT_NOARG); + size_t println(long, int = DEC, int = PRINT_NOARG); + size_t println(unsigned long, int = DEC, int = PRINT_NOARG); size_t println(double, int = 2); size_t println(const Printable&); size_t println(void); From 838f79030b50783f01cdc497ae02ad26aa7559c3 Mon Sep 17 00:00:00 2001 From: Ruben van Leeuwen Date: Thu, 21 Sep 2017 17:00:54 +0200 Subject: [PATCH 2/2] Added the PRINT_LEADINGZERO functionality if PRINT_LEADINGZERO is in the arg, add a leading zero to a HEX if the value is smaler than 0x10 --- hardware/arduino/avr/cores/arduino/Print.cpp | 52 ++++++++++---------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/hardware/arduino/avr/cores/arduino/Print.cpp b/hardware/arduino/avr/cores/arduino/Print.cpp index 1e4c99a6552..78951938017 100644 --- a/hardware/arduino/avr/cores/arduino/Print.cpp +++ b/hardware/arduino/avr/cores/arduino/Print.cpp @@ -69,22 +69,22 @@ size_t Print::print(char c) return write(c); } -size_t Print::print(unsigned char b, int base) +size_t Print::print(unsigned char b, int base, int arg) { - return print((unsigned long) b, base); + return print((unsigned long) b, base, arg); } -size_t Print::print(int n, int base) +size_t Print::print(int n, int base, int arg) { - return print((long) n, base); + return print((long) n, base, arg); } -size_t Print::print(unsigned int n, int base) +size_t Print::print(unsigned int n, int base, int arg) { return print((unsigned long) n, base); } -size_t Print::print(long n, int base) +size_t Print::print(long n, int base, int arg) { if (base == 0) { return write(n); @@ -92,18 +92,18 @@ size_t Print::print(long n, int base) if (n < 0) { int t = print('-'); n = -n; - return printNumber(n, 10) + t; + return printNumber(n, 10, arg) + t; } - return printNumber(n, 10); + return printNumber(n, 10, arg); } else { - return printNumber(n, base); + return printNumber(n, base, arg); } } -size_t Print::print(unsigned long n, int base) +size_t Print::print(unsigned long n, int base, int arg) { if (base == 0) return write(n); - else return printNumber(n, base); + else return printNumber(n, base, arg); } size_t Print::print(double n, int digits) @@ -149,37 +149,37 @@ size_t Print::println(char c) return n; } -size_t Print::println(unsigned char b, int base) +size_t Print::println(unsigned char b, int base, int arg) { - size_t n = print(b, base); + size_t n = print(b, base, arg); n += println(); return n; } -size_t Print::println(int num, int base) +size_t Print::println(int num, int base, int arg) { - size_t n = print(num, base); + size_t n = print(num, base, arg); n += println(); return n; } -size_t Print::println(unsigned int num, int base) +size_t Print::println(unsigned int num, int base, int arg) { - size_t n = print(num, base); + size_t n = print(num, base, arg); n += println(); return n; } -size_t Print::println(long num, int base) +size_t Print::println(long num, int base, int arg) { - size_t n = print(num, base); + size_t n = print(num, base, arg); n += println(); return n; } -size_t Print::println(unsigned long num, int base) +size_t Print::println(unsigned long num, int base, int arg) { - size_t n = print(num, base); + size_t n = print(num, base, arg); n += println(); return n; } @@ -200,7 +200,7 @@ size_t Print::println(const Printable& x) // Private Methods ///////////////////////////////////////////////////////////// -size_t Print::printNumber(unsigned long n, uint8_t base) +size_t Print::printNumber(unsigned long n, uint8_t base, uint8_t arg) { char buf[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte. char *str = &buf[sizeof(buf) - 1]; @@ -209,14 +209,16 @@ size_t Print::printNumber(unsigned long n, uint8_t base) // prevent crash if called with base == 1 if (base < 2) base = 10; - - do { + //the argument is only valid for HEX values smaler than 0x10 + if(base != 8 || n>=16) arg = 0; + + do { char c = n % base; n /= base; *--str = c < 10 ? c + '0' : c + 'A' - 10; } while(n); - + if(arg == 1)*--str = '0'; return write(str); }