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