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 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 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