aboutsummaryrefslogtreecommitdiff
path: root/circuitpython/shared/runtime/stdout_helpers.c
diff options
context:
space:
mode:
authorRaghuram Subramani <raghus2247@gmail.com>2022-06-19 19:47:51 +0530
committerRaghuram Subramani <raghus2247@gmail.com>2022-06-19 19:47:51 +0530
commit4fd287655a72b9aea14cdac715ad5b90ed082ed2 (patch)
tree65d393bc0e699dd12d05b29ba568e04cea666207 /circuitpython/shared/runtime/stdout_helpers.c
parent0150f70ce9c39e9e6dd878766c0620c85e47bed0 (diff)
add circuitpython code
Diffstat (limited to 'circuitpython/shared/runtime/stdout_helpers.c')
-rw-r--r--circuitpython/shared/runtime/stdout_helpers.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/circuitpython/shared/runtime/stdout_helpers.c b/circuitpython/shared/runtime/stdout_helpers.c
new file mode 100644
index 0000000..500b974
--- /dev/null
+++ b/circuitpython/shared/runtime/stdout_helpers.c
@@ -0,0 +1,36 @@
+#include <string.h>
+#include <unistd.h>
+#include "py/mpconfig.h"
+#include "py/mphal.h"
+
+/*
+ * Extra stdout functions
+ * These can be either optimized for a particular port, or reference
+ * implementation below can be used.
+ */
+
+// Send "cooked" string of given length, where every occurrence of
+// LF character is replaced with CR LF.
+void mp_hal_stdout_tx_strn_cooked(const char *str, size_t len) {
+ bool last_cr = false;
+ while (len > 0) {
+ size_t i = 0;
+ if (str[0] == '\n' && !last_cr) {
+ mp_hal_stdout_tx_strn("\r", 1);
+ i = 1;
+ }
+ // Lump all characters on the next line together.
+ while ((last_cr || str[i] != '\n') && i < len) {
+ last_cr = str[i] == '\r';
+ i++;
+ }
+ mp_hal_stdout_tx_strn(str, i);
+ str = &str[i];
+ len -= i;
+ }
+}
+
+// Send zero-terminated string
+void mp_hal_stdout_tx_str(const char *str) {
+ mp_hal_stdout_tx_strn(str, strlen(str));
+}