⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uemf.c

📁 RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
💻 C
字号:
/* * uemf.c -- GoAhead Micro Embedded Management Framework * * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved. * * See the file "license.txt" for usage and redistribution license requirements *//********************************** Description *******************************//* *	This module provides compatibility with the full GoAhead EMF. *	It is a collection of routines which permits the GoAhead WebServer to *	run stand-alone and to also load as a solution pack under the GoAhead EMF. *//*********************************** Includes *********************************/#include	"uemf.h"/********************************** Local Data ********************************/int emfInst;							/* Application instance handle *//****************************** Forward Declarations **************************/extern void defaultErrorHandler(int etype, char_t *buf);static void (*errorHandler)(int etype, char_t *msg) = defaultErrorHandler;extern void	defaultTraceHandler(int level, char_t *buf);static void (*traceHandler)(int level, char_t *buf) = defaultTraceHandler;/************************************* Code ***********************************//* *	Error message that doesn't need user attention. Customize this code *	to direct error messages to wherever the developer wishes */void error(E_ARGS_DEC, int etype, char_t *fmt, ...){	va_list 	args;	char_t		*fmtBuf, *buf;	va_start(args, fmt);	fmtValloc(&fmtBuf, E_MAX_ERROR, fmt, args);	if (etype == E_LOG) {		fmtAlloc(&buf, E_MAX_ERROR, T("%s\n"), fmtBuf);#if DEV	} else if (etype == E_ASSERT) {		fmtAlloc(&buf, E_MAX_ERROR, 			T("Assertion %s, failed at %s %d\n"), fmtBuf, E_ARGS); #endif	} else if (etype == E_USER) {		fmtAlloc(&buf, E_MAX_ERROR, T("%s\n"), fmtBuf);	}	va_end(args);	bfree(B_L, fmtBuf);	if (errorHandler) {		errorHandler(etype, buf);	}	bfreeSafe(B_L, buf);}/******************************************************************************//* *	Replace the default error handler. Return pointer to old error handler. */void (*errorSetHandler(void (*function)(int etype, char_t *msg))) \	(int etype, char_t *msg){	void (*oldHandler)(int etype, char_t *buf);	oldHandler = errorHandler;	errorHandler = function;	return oldHandler;}/******************************************************************************//* *	Trace log. Customize this function to log trace output */void trace(int level, char_t *fmt, ...){	va_list 	args;	char_t		*buf;	va_start(args, fmt);	fmtValloc(&buf, VALUE_MAX_STRING, fmt, args);	if (traceHandler) {		traceHandler(level, buf);	}	bfreeSafe(B_L, buf);	va_end(args);}/******************************************************************************//* *	Trace log. Customize this function to log trace output */void traceRaw(char_t *buf){	if (traceHandler) {		traceHandler(0, buf);	}}/******************************************************************************//* *	Replace the default trace handler. Return a pointer to the old handler. */void (*traceSetHandler(void (*function)(int level, char_t *buf))) 	(int level, char *buf){	void (*oldHandler)(int level, char_t *buf);	oldHandler = traceHandler;	if (function) {		traceHandler = function;	}	return oldHandler;}/******************************************************************************//* *	Save the instance handle */void emfInstSet(int inst){	emfInst = inst;}/******************************************************************************//* *	Get the instance handle */int emfInstGet(){	return emfInst;}/******************************************************************************//* *	Convert a string to lower case */char_t *strlower(char_t *string){	char_t	*s;	a_assert(string);	if (string == NULL) {		return NULL;	}	s = string;	while (*s) {		if (gisupper(*s)) {			*s = (char_t) gtolower(*s);		}		s++;	}	*s = '\0';	return string;}/******************************************************************************//*  *	Convert a string to upper case */char_t *strupper(char_t *string){	char_t	*s;	a_assert(string);	if (string == NULL) {		return NULL;	}	s = string;	while (*s) {		if (gislower(*s)) {			*s = (char_t) gtoupper(*s);		}		s++;	}	*s = '\0';	return string;}/******************************************************************************//* *	Convert integer to ascii string. Allow a NULL string in which case we *	allocate a dynamic buffer.  */char_t *stritoa(int n, char_t *string, int width){	char_t	*cp, *lim, *s;	char_t	buf[16];						/* Just temp to hold number */	int		next, minus;	a_assert(string && width > 0);	if (string == NULL) {		if (width == 0) {			width = 10;		}		if ((string = balloc(B_L, width + 1)) == NULL) {			return NULL;		}	}	if (n < 0) {		minus = 1;		n = -n;		width--;	} else {		minus = 0;	}	cp = buf;	lim = &buf[width - 1];	while (n > 9 && cp < lim) {		next = n;		n /= 10;		*cp++ = (char_t) (next - n * 10 + '0');	}	if (cp < lim) {		*cp++ = (char_t) (n + '0');	}	s = string;	if (minus) {		*s++ = '-';	}	while (cp > buf) {		*s++ = *--cp;	}	*s++ = '\0';	return string;}/******************************************************************************//* *	Stubs */char_t *basicGetProduct(){	return T("uemf");}char_t *basicGetAddress(){	return T("localhost");}int errorOpen(char_t *pname){	return 0;}void errorClose(){}/******************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -