[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r6923 - gnuradio/branches/developers/matt/u2f/firmware
From: |
eb |
Subject: |
[Commit-gnuradio] r6923 - gnuradio/branches/developers/matt/u2f/firmware/lib |
Date: |
Thu, 15 Nov 2007 10:32:32 -0700 (MST) |
Author: eb
Date: 2007-11-15 10:32:31 -0700 (Thu, 15 Nov 2007)
New Revision: 6923
Added:
gnuradio/branches/developers/matt/u2f/firmware/lib/printf.c.smaller
Modified:
gnuradio/branches/developers/matt/u2f/firmware/lib/printf.c
Log:
work-in-progress
Modified: gnuradio/branches/developers/matt/u2f/firmware/lib/printf.c
===================================================================
--- gnuradio/branches/developers/matt/u2f/firmware/lib/printf.c 2007-11-15
16:49:24 UTC (rev 6922)
+++ gnuradio/branches/developers/matt/u2f/firmware/lib/printf.c 2007-11-15
17:32:31 UTC (rev 6923)
@@ -20,7 +20,7 @@
*/
/*
- * Originally snatched from the SDCC z80 library ;)
+ * Based on code from the SDCC z80 library ;)
*/
#include <stdarg.h>
Added: gnuradio/branches/developers/matt/u2f/firmware/lib/printf.c.smaller
===================================================================
--- gnuradio/branches/developers/matt/u2f/firmware/lib/printf.c.smaller
(rev 0)
+++ gnuradio/branches/developers/matt/u2f/firmware/lib/printf.c.smaller
2007-11-15 17:32:31 UTC (rev 6923)
@@ -0,0 +1,137 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2007 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/*
+ * Based on code from the SDCC z80 library ;)
+ */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <hal_io.h> /* FIXME refactor into stdio */
+
+#define PUTCHAR(x) hal_putc(x)
+
+
+static void
+_printn(unsigned u, unsigned base, char issigned)
+{
+ const char *_hex = "0123456789ABCDEF";
+ if (issigned && ((int)u < 0)) {
+ PUTCHAR('-');
+ u = (unsigned)-((int)u);
+ }
+ if (u >= base)
+ _printn(u/base, base, 0);
+ PUTCHAR(_hex[u%base]);
+}
+
+static void
+_printf(const char *format, va_list va)
+{
+ while (*format) {
+ if (*format != '%')
+ PUTCHAR(*format);
+ else {
+ switch (*++format) {
+ case 0: /* hit end of format string */
+ return;
+ case 'c':
+ {
+ char c = (char)va_arg(va, int);
+ PUTCHAR(c);
+ break;
+ }
+ case 'u':
+ {
+ unsigned u = va_arg(va, unsigned);
+ _printn(u, 10, 0);
+ break;
+ }
+ case 'd':
+ {
+ unsigned u = va_arg(va, unsigned);
+ _printn(u, 10, 1);
+ break;
+ }
+ case 'x':
+ case 'p':
+ {
+ unsigned u = va_arg(va, unsigned);
+ _printn(u, 16, 0);
+ break;
+ }
+ case 's':
+ {
+ char *s = va_arg(va, char *);
+ while (*s) {
+ PUTCHAR(*s);
+ s++;
+ }
+ break;
+ }
+ }
+ }
+ format++;
+ }
+}
+
+#if 0
+static void
+_char_emitter(char c, void *pData __attribute__((unused)))
+{
+ hal_putc(c);
+}
+#endif
+
+int
+printf(const char *format, ...)
+{
+ va_list va;
+ va_start(va, format);
+
+ _printf(format, va);
+
+ // wrong return value...
+ return 0;
+}
+
+
+#if 0
+
+// Totally dangerous. Don't use
+static void
+_buf_emitter(char c, void *pData)
+{
+ *((*((char **)pData)))++ = c;
+}
+
+int sprintf(char *pInto, const char *format, ...)
+{
+ va_list va;
+ va_start(va, format);
+
+ _printf(format, _buf_emitter, &pInto, va);
+ *pInto++ = '\0';
+
+ // FIXME wrong return value
+ return 0;
+}
+#endif
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r6923 - gnuradio/branches/developers/matt/u2f/firmware/lib,
eb <=