From 7f7a412e8467399eda03fbeed0ff5de9c22b009f Mon Sep 17 00:00:00 2001
From: Andrey Nakin <andrey.nakin@gmail.com>
Date: 周六, 18 4月 2015 21:13:06 +0800
Subject: [PATCH] 	modified:   libscpi/inc/scpi/config.h

---
 libscpi/inc/scpi/config.h |   63 ++++++++++++++++++++++++++++++-
 1 files changed, 61 insertions(+), 2 deletions(-)

diff --git a/libscpi/inc/scpi/config.h b/libscpi/inc/scpi/config.h
index de27110..92b544b 100644
--- a/libscpi/inc/scpi/config.h
+++ b/libscpi/inc/scpi/config.h
@@ -41,6 +41,33 @@
 extern "C" {
 #endif
 
+/* Compiler specific */
+/* 8bit PIC - PIC16, etc */
+#if defined(_MPC_)
+#define HAVE_STRNLEN            0
+#define HAVE_STRNCASECMP        0
+#define HAVE_STRNICMP           1
+#endif
+
+/* PIC24 */
+#if defined(__C30__)
+#define HAVE_STRNLEN            0
+#define HAVE_STRNCASECMP        0
+#define HAVE_STRNICMP           0
+#endif
+
+/* PIC32mx */
+#if defined(__C32__)
+#define HAVE_STRNLEN            0
+#define HAVE_STRNCASECMP        1
+#define HAVE_STRNICMP           0
+#endif
+
+/* AVR libc */
+#if defined(__AVR_LIBC_VERSION__)
+#define HAVE_DTOSTRE            1
+#endif
+
 /* ======== test strnlen ======== */
 #ifndef HAVE_STRNLEN
 #define HAVE_STRNLEN            1
@@ -48,6 +75,10 @@
 /* ======== test strncasecmp ======== */
 #ifndef HAVE_STRNCASECMP
 #define HAVE_STRNCASECMP        1
+#endif
+/* ======== test strnicmp ======== */
+#ifndef HAVE_STRNICMP
+#define HAVE_STRNICMP           0
 #endif
 
 /* define local macros depending on existance of strnlen */
@@ -57,13 +88,41 @@
 #define SCPI_strnlen(s, l)	BSD_strnlen((s), (l))
 #endif
 
-/* define local macros depending on existance of strncasecmp */
+/* define local macros depending on existance of strncasecmp and strnicmp */
 #if HAVE_STRNCASECMP
 #define SCPI_strncasecmp(s1, s2, l)	strncasecmp((s1), (s2), (l))
+#elif HAVE_STRNICMP
+#define SCPI_strncasecmp(s1, s2, l)     strnicmp((s1), (s2), (l))
 #else
-#define SCPI_strncasecmp(s1, s2, l)	strcasecmp((s1), (s2))
+#define SCPI_strncasecmp(s1, s2, l)	OUR_strncasecmp((s1), (s2), (l))
 #endif
 
+#if HAVE_DTOSTRE
+
+char * dtostre(
+	double __val,
+	char * __s,
+	unsigned char __prec,
+	unsigned char __flags);
+
+#ifndef DTOSTRE_ALWAYS_SIGN
+#define	DTOSTRE_ALWAYS_SIGN 0x01
+#endif
+
+#ifndef DTOSTR_PLUS_SIGN
+#define	DTOSTR_PLUS_SIGN 0x02
+#endif
+
+#ifndef DTOSTR_UPPERCASE
+#define	DTOSTR_UPPERCASE 0x04
+#endif
+
+#define SCPI_doubleToStr(v, s, l) strlen(dtostre((v), (s), 6, DTOSTR_PLUS_SIGN | DTOSTRE_ALWAYS_SIGN | DTOSTR_UPPERCASE))
+#else
+#define SCPI_doubleToStr(v, s, l) snprintf((s), (l), "%lg", (v))
+#endif
+
+
 #ifdef	__cplusplus
 }
 #endif

--
Gitblit v1.9.1