| /************************************************************************* |
| |
| Copyright 2011 Yuri Dario <mc6530@mclink.it> |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| |
| ************************************************************************/ |
| |
| #define INCL_DOS |
| #ifdef OS2 |
| #include <svpm.h> |
| #else |
| #include <os2.h> |
| #endif |
| #include <dlfcn.h> |
| #include <stdarg.h> |
| #include <stdlib.h> |
| #ifdef TESTME |
| #include <stdio.h> |
| #endif |
| |
| typedef APIRET _PMPRINTF(const char*, ...); |
| typedef _PMPRINTF* PMPRINTF; |
| |
| static void* hmodPmPrintf = NULL; |
| static PMPRINTF pfnPmPrintf = NULL; |
| |
| int _Export debug_printf( const char* format, ...) |
| { |
| va_list args; |
| int cnt; |
| |
| if (hmodPmPrintf == NULL) { |
| // try dll loading |
| hmodPmPrintf = dlopen( "PMPRINTF", 0); |
| if (hmodPmPrintf == NULL) |
| return -1; |
| |
| // search function |
| pfnPmPrintf = dlsym(hmodPmPrintf, "PmPrintfVa"); |
| if (!pfnPmPrintf) |
| return -1; |
| |
| } |
| |
| // function loaded, print data |
| va_start(args, format); |
| cnt = pfnPmPrintf(format, args); |
| va_end(args); |
| |
| return cnt; |
| } |
| |
| |
| #ifdef TESTME |
| int main( void) |
| { |
| printf( "Test PMPRINTF.DLL output, check PM window.\n"); |
| debug_printf( "Test PMPRINTF.DLL output, check PM window."); |
| debug_printf( "Test PMPRINTF.DLL output: integer %d", 12345); |
| debug_printf( "Test PMPRINTF.DLL output: float %f", 123.45); |
| debug_printf( "Test PMPRINTF.DLL output: string '%s'", "Hello World"); |
| exit(0); |
| } |
| #endif // TESTME |