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