commit-gnuradio
[Top][All Lists]
Advanced

[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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]