xref: /aoo41x/main/sal/osl/os2/debug_printf.c (revision 82ad63bb)
1dcc6e752SPedro Giffuni /*************************************************************************
2dcc6e752SPedro Giffuni 
3dcc6e752SPedro Giffuni    Copyright 2011 Yuri Dario <mc6530@mclink.it>
4dcc6e752SPedro Giffuni 
5dcc6e752SPedro Giffuni    Licensed under the Apache License, Version 2.0 (the "License");
6dcc6e752SPedro Giffuni    you may not use this file except in compliance with the License.
7dcc6e752SPedro Giffuni    You may obtain a copy of the License at
8dcc6e752SPedro Giffuni 
9dcc6e752SPedro Giffuni        http://www.apache.org/licenses/LICENSE-2.0
10dcc6e752SPedro Giffuni 
11dcc6e752SPedro Giffuni    Unless required by applicable law or agreed to in writing, software
12dcc6e752SPedro Giffuni    distributed under the License is distributed on an "AS IS" BASIS,
13dcc6e752SPedro Giffuni    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14dcc6e752SPedro Giffuni    See the License for the specific language governing permissions and
15dcc6e752SPedro Giffuni    limitations under the License.
16dcc6e752SPedro Giffuni 
17dcc6e752SPedro Giffuni  ************************************************************************/
18dcc6e752SPedro Giffuni 
19dcc6e752SPedro Giffuni #define INCL_DOS
20dcc6e752SPedro Giffuni #ifdef OS2
21dcc6e752SPedro Giffuni #include <svpm.h>
22dcc6e752SPedro Giffuni #else
23dcc6e752SPedro Giffuni #include <os2.h>
24dcc6e752SPedro Giffuni #endif
25dcc6e752SPedro Giffuni #include <dlfcn.h>
26dcc6e752SPedro Giffuni #include <stdarg.h>
27dcc6e752SPedro Giffuni #include <stdlib.h>
28dcc6e752SPedro Giffuni #ifdef TESTME
29dcc6e752SPedro Giffuni #include <stdio.h>
30dcc6e752SPedro Giffuni #endif
31*82ad63bbSYuri Dario #include "sal/types.h"
32dcc6e752SPedro Giffuni 
33dcc6e752SPedro Giffuni typedef APIRET _PMPRINTF(const char*, ...);
34dcc6e752SPedro Giffuni typedef _PMPRINTF* PMPRINTF;
35dcc6e752SPedro Giffuni 
36dcc6e752SPedro Giffuni static void* 	hmodPmPrintf = NULL;
37dcc6e752SPedro Giffuni static PMPRINTF	pfnPmPrintf = NULL;
38dcc6e752SPedro Giffuni 
debug_printf(const char * format,...)39*82ad63bbSYuri Dario int SAL_DLLPUBLIC_EXPORT debug_printf( const char* format, ...)
40dcc6e752SPedro Giffuni {
41dcc6e752SPedro Giffuni 	va_list	args;
42dcc6e752SPedro Giffuni 	int		cnt;
43dcc6e752SPedro Giffuni 
44dcc6e752SPedro Giffuni 	if (hmodPmPrintf == NULL) {
45dcc6e752SPedro Giffuni 		// try dll loading
46dcc6e752SPedro Giffuni 		hmodPmPrintf = dlopen( "PMPRINTF", 0);
47dcc6e752SPedro Giffuni 		if (hmodPmPrintf == NULL)
48dcc6e752SPedro Giffuni 			return -1;
49dcc6e752SPedro Giffuni 
50dcc6e752SPedro Giffuni 		// search function
51dcc6e752SPedro Giffuni 		pfnPmPrintf = dlsym(hmodPmPrintf, "PmPrintfVa");
52dcc6e752SPedro Giffuni 		if (!pfnPmPrintf)
53dcc6e752SPedro Giffuni 			return -1;
54dcc6e752SPedro Giffuni 
55dcc6e752SPedro Giffuni 	}
56dcc6e752SPedro Giffuni 
57dcc6e752SPedro Giffuni 	// function loaded, print data
58dcc6e752SPedro Giffuni 	va_start(args, format);
59dcc6e752SPedro Giffuni 	cnt = pfnPmPrintf(format, args);
60dcc6e752SPedro Giffuni 	va_end(args);
61dcc6e752SPedro Giffuni 
62dcc6e752SPedro Giffuni 	return cnt;
63dcc6e752SPedro Giffuni }
64dcc6e752SPedro Giffuni 
65dcc6e752SPedro Giffuni 
66dcc6e752SPedro Giffuni #ifdef TESTME
main(void)67dcc6e752SPedro Giffuni int main( void)
68dcc6e752SPedro Giffuni {
69dcc6e752SPedro Giffuni 	printf( "Test PMPRINTF.DLL output, check PM window.\n");
70dcc6e752SPedro Giffuni 	debug_printf( "Test PMPRINTF.DLL output, check PM window.");
71dcc6e752SPedro Giffuni 	debug_printf( "Test PMPRINTF.DLL output: integer %d", 12345);
72dcc6e752SPedro Giffuni 	debug_printf( "Test PMPRINTF.DLL output: float %f", 123.45);
73dcc6e752SPedro Giffuni 	debug_printf( "Test PMPRINTF.DLL output: string '%s'", "Hello World");
74dcc6e752SPedro Giffuni 	exit(0);
75dcc6e752SPedro Giffuni }
76dcc6e752SPedro Giffuni #endif // TESTME
77