From e46b131dcaa9a841fc374610a13fdbde1840bee9 Mon Sep 17 00:00:00 2001 From: sewardj Date: Fri, 23 Jun 2000 09:41:11 +0000 Subject: [PATCH] [project @ 2000-06-23 09:41:11 by sewardj] Changes to make DietHEP.dll usable from Visual Basic: * Export DH_LoadLibrary and DH_GetProcAddress using stdcall, not ccall. * Append all messages to a logfile, diet_hep_logfile.txt, for debugging. --- ghc/includes/DietHEP.h | 6 +++-- ghc/interpreter/DietHEP.def | 4 ++-- ghc/interpreter/README.BUILDING.HUGS | 4 ++++ ghc/interpreter/dh_demo.c | 6 +++-- ghc/interpreter/hugs.c | 43 +++++++++++++++++++++++++--------- 5 files changed, 46 insertions(+), 17 deletions(-) diff --git a/ghc/includes/DietHEP.h b/ghc/includes/DietHEP.h index ca62de8..28b3c05 100644 --- a/ghc/includes/DietHEP.h +++ b/ghc/includes/DietHEP.h @@ -3,8 +3,10 @@ typedef enum { dh_stdcall, dh_ccall } DH_CALLCONV; typedef int DH_MODULE; typedef char* DH_LPCSTR; -extern DH_MODULE DH_LoadLibrary ( DH_LPCSTR modname ); -extern void* DH_GetProcAddress ( DH_CALLCONV cconv, +extern __attribute__((__stdcall__)) + DH_MODULE DH_LoadLibrary ( DH_LPCSTR modname ); +extern __attribute__((__stdcall__)) + void* DH_GetProcAddress ( DH_CALLCONV cconv, DH_MODULE hModule, DH_LPCSTR lpProcName ); diff --git a/ghc/interpreter/DietHEP.def b/ghc/interpreter/DietHEP.def index 2b5031e..705a322 100644 --- a/ghc/interpreter/DietHEP.def +++ b/ghc/interpreter/DietHEP.def @@ -1,3 +1,3 @@ EXPORTS -DH_GetProcAddress -DH_LoadLibrary +DH_GetProcAddress@12 +DH_LoadLibrary@4 diff --git a/ghc/interpreter/README.BUILDING.HUGS b/ghc/interpreter/README.BUILDING.HUGS index a91e333..c4be6ea 100644 --- a/ghc/interpreter/README.BUILDING.HUGS +++ b/ghc/interpreter/README.BUILDING.HUGS @@ -15,6 +15,10 @@ SplitObjs=NO # essential Then you need to configure like this: + cd ghc + autoconf + cd .. + autoconf ./configure --host=i386-unknown-mingw32 --enable-win32-dlls Then diff --git a/ghc/interpreter/dh_demo.c b/ghc/interpreter/dh_demo.c index f9de33d..e925b7e 100644 --- a/ghc/interpreter/dh_demo.c +++ b/ghc/interpreter/dh_demo.c @@ -11,9 +11,11 @@ typedef int DH_MODULE; typedef char* DH_LPCSTR; __declspec(dllimport) -extern DH_MODULE DH_LoadLibrary ( DH_LPCSTR modname ); +extern __stdcall + DH_MODULE DH_LoadLibrary ( DH_LPCSTR modname ); __declspec(dllimport) -extern void* DH_GetProcAddress ( DH_CALLCONV cconv, +extern __stdcall + void* DH_GetProcAddress ( DH_CALLCONV cconv, DH_MODULE hModule, DH_LPCSTR lpProcName ); diff --git a/ghc/interpreter/hugs.c b/ghc/interpreter/hugs.c index 68fc93f..508091b 100644 --- a/ghc/interpreter/hugs.c +++ b/ghc/interpreter/hugs.c @@ -9,8 +9,8 @@ * included in the distribution. * * $RCSfile: hugs.c,v $ - * $Revision: 1.75 $ - * $Date: 2000/05/26 10:14:33 $ + * $Revision: 1.76 $ + * $Date: 2000/06/23 09:41:11 $ * ------------------------------------------------------------------------*/ #include @@ -143,6 +143,14 @@ static ConId currentModule_failed = NIL; /* Remember failed module from :r */ extern void setRtsFlags ( int ); static int diet_hep_initialised = 0; +static FILE* dh_logfile; + +static +void printf_now ( void ) +{ + time_t now = time(NULL); + printf("\n=== DietHEP event at %s",ctime(&now)); +} static void diet_hep_initialise ( void* cstackbase ) @@ -158,6 +166,14 @@ void diet_hep_initialise ( void* cstackbase ) diet_hep_initialised = 1; CStackBase = cstackbase; + + dh_logfile = freopen("diet_hep_logfile.txt","a",stdout); + assert(dh_logfile); + + printf_now(); + printf("===---===---=== DietHEP initialisation ===---===---===\n\n"); + fflush(stdout); + EnableOutput(1); setInstallDir ( "diet_hep" ); @@ -170,8 +186,8 @@ void diet_hep_initialise ( void* cstackbase ) prelOK = loadThePrelude(); if (!prelOK) { - fprintf(stderr, "diet_hep_initialise: fatal error: " - "can't load the Prelude.\n" ); + printf("diet_hep_initialise: fatal error: " + "can't load the Prelude.\n" ); exit(1); } @@ -229,20 +245,22 @@ void* DH_GetProcAddress_wrk ( DH_CALLCONV cconv, } /*----------- EXPORTS -------------*/ -__declspec(dllexport) + __attribute__((__stdcall__)) DH_MODULE DH_LoadLibrary ( DH_LPCSTR modname ) { int xxx; DH_MODULE hdl; diet_hep_initialise ( &xxx ); + printf_now(); + printf("=== DH_LoadLibrary: request to load `%s'\n\n", modname ); + fflush(stdout); hdl = DH_LoadLibrary_wrk ( modname ); - printf ( "hdl = %d\n", hdl ); return hdl; } -__declspec(dllexport) + __attribute__((__stdcall__)) void* DH_GetProcAddress ( DH_CALLCONV cconv, DH_MODULE hModule, @@ -250,6 +268,9 @@ DH_GetProcAddress ( DH_CALLCONV cconv, { int xxx; diet_hep_initialise ( &xxx ); + printf_now(); + printf("=== DH_GetProcAddress: request for `%s'\n\n", lpProcName ); + fflush(stdout); return DH_GetProcAddress_wrk ( cconv, hModule, lpProcName ); } @@ -929,13 +950,13 @@ static void ppMG ( void ) u = hd(t); switch (whatIs(u)) { case GRP_NONREC: - FPrintf ( stderr, " %s\n", textToStr(textOf(snd(u)))); + Printf ( " %s\n", textToStr(textOf(snd(u)))); break; case GRP_REC: - FPrintf ( stderr, " {" ); + Printf ( " {" ); for (v = snd(u); nonNull(v); v=tl(v)) - FPrintf ( stderr, "%s ", textToStr(textOf(hd(v))) ); - FPrintf ( stderr, "}\n" ); + Printf ( "%s ", textToStr(textOf(hd(v))) ); + Printf ( "}\n" ); break; default: internal("ppMG"); -- 1.7.10.4