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