From f512b1bc2b537cd915ce4c895a88abccb231f08f Mon Sep 17 00:00:00 2001 From: johanknol Date: Tue, 13 Mar 2001 20:23:17 +0000 Subject: [PATCH] make printf* work again git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@681 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- device/include/stdarg.h | 32 +++++++++++++++++++++----------- device/include/stdio.h | 17 +++++------------ device/lib/printf_large.c | 10 ++-------- device/lib/vprintf.c | 22 ++++++++++++---------- 4 files changed, 40 insertions(+), 41 deletions(-) diff --git a/device/include/stdarg.h b/device/include/stdarg.h index 85a7f5d9..49e3a722 100644 --- a/device/include/stdarg.h +++ b/device/include/stdarg.h @@ -1,20 +1,30 @@ -/*-------------------------------------------------------------------------*/ -/* stdarg.h - ANSI macros for variable parameter list */ -/*-------------------------------------------------------------------------*/ +/*-----------------------------------------------------------------------------------*/ +/* stdarg.h - ANSI macros for variable parameter list */ +/*-----------------------------------------------------------------------------------*/ -#ifndef _STDARG_H -#define _STDARG_H 1 +#ifndef __SDC51_STDARG_H +#define __SDC51_STDARG_H 1 + +#if defined(__ds390) + +typedef unsigned char * va_list ; +#define va_arg(marker,type) *((type *)(marker -= sizeof(type))) +#define va_start(marker,first) { marker = &first; } -#if defined(SDCC_MODEL_LARGE) || defined(SDCC_MODEL_FLAT24) -typedef unsigned char _xdata * va_list ; #elif defined(SDCC_USE_XSTACK) + typedef unsigned char _pdata * va_list ; +#define va_arg(marker,type) *((type _data *)(marker -= sizeof(type))) +#define va_start(marker,first) { marker = (va_list)((char _pdata *)&first); } + #else -typedef unsigned char _data * va_list ; + +typedef unsigned char _data * va_list ; +#define va_arg(marker,type) *((type _data * )(marker -= sizeof(type))) +#define va_start(marker,first) { marker = (va_list) ((char _data * )&first); } + #endif -#define va_arg(valist,type) (*((type *)(valist -= sizeof(type)))) -#define va_start(valist,first) (valist = (va_list)&(first)) -#define va_end(valist) (valist = (va_list) 0) +#define va_end(marker) marker = (va_list) 0; #endif diff --git a/device/include/stdio.h b/device/include/stdio.h index 95ff2f09..4f145a91 100644 --- a/device/include/stdio.h +++ b/device/include/stdio.h @@ -27,28 +27,21 @@ #include -#ifdef SDCC_MODEL_FLAT24 -#ifndef TINIBIOS_H +#ifdef __ds390 #include -#endif TINIBIOS_H -#endif - -#if defined(SDCC_MODEL_LARGE) || defined(SDCC_MODEL_FLAT24) -#define XSPEC xdata -#else -#define XSPEC #endif extern printf_small (char *,...) reentrant; -extern printf (XSPEC const char *,...) reentrant; +extern printf (const char *,...) reentrant; extern int vprintf (const char *, va_list); -extern int sprintf (const char *, XSPEC const char *, ...) reentrant; +extern int sprintf (const char *, const char *, ...) reentrant; extern int vsprintf (const char *, const char *, va_list); extern int puts(const char *); extern char *gets(char *); extern char getchar(void); extern void putchar(char); -#endif + +#endif __SDC51_STDIO_H diff --git a/device/lib/printf_large.c b/device/lib/printf_large.c index 6697ca96..ce799a33 100644 --- a/device/lib/printf_large.c +++ b/device/lib/printf_large.c @@ -25,13 +25,7 @@ #include #include -#if defined(SDCC_MODEL_LARGE) || defined(SDCC_MODEL_FLAT24) -#define XSPEC xdata -#else -#define XSPEC -#endif - -int printf (XSPEC const char *format, ...) reentrant +int printf (const char *format, ...) reentrant { va_list arg; int done; @@ -43,7 +37,7 @@ int printf (XSPEC const char *format, ...) reentrant return done; } -int sprintf (const char *buf, XSPEC const char *format, ...) reentrant +int sprintf (const char *buf, const char *format, ...) reentrant { va_list arg; int done; diff --git a/device/lib/vprintf.c b/device/lib/vprintf.c index 1409507e..175c64bc 100644 --- a/device/lib/vprintf.c +++ b/device/lib/vprintf.c @@ -22,7 +22,9 @@ You are forbidden to forbid anyone else to use, share and improve what you give them. Help stamp out software-hoarding! -------------------------------------------------------------------------*/ +#ifdef __ds390 #define USE_FLOATS 1 +#endif #include #include @@ -157,12 +159,12 @@ static void output_float (float f, unsigned char reqWidth, signed char reqDecimals, bit left, bit zero, bit sign, bit space) { - XSPEC char negative=0; - XSPEC long integerPart; - XSPEC float decimalPart; - XSPEC char fpBuffer[128]; - XSPEC char fpBI=0, fpBD; - XSPEC unsigned char minWidth, i; + char negative=0; + long integerPart; + float decimalPart; + char fpBuffer[128]; + char fpBI=0, fpBD; + unsigned char minWidth, i; // save the sign if (f<0) { @@ -259,10 +261,10 @@ int vsprintf (const char *buf, const char *format, va_list ap) bit long_argument; bit float_argument; - XSPEC unsigned char width; - XSPEC signed char decimals; - XSPEC unsigned char length; - XSPEC char c; + unsigned char width; + signed char decimals; + unsigned char length; + char c; // reset output chars charsOutputted=0; -- 2.47.2