On Tue, 9 Nov 1999 19:25:56 +0200 (FLE Standard Time), Tor Lillqvist wrote:
> > The OS/2 and UNIX code is doing the same !
> > The structure PLUG_IN_INFO is a REAL input and should be a parameter
> > input to gimp_main(). ex: gimp_main(argc,argv, &PLUG_IN_INFO);
> >
> > On UNIX they trust/use fork() to input the structure, but my OS/2
> > version will work on all system with or without forking.
>
>Sorry, I don't follow you here, I don't see any forking going on. To
>my understanding, PLUG_IN_INFO is (on Unix) a (data) entry point
>(i.e. a externally visible variable) in the plug-in executable, and
>the libgimp shared library references it. The problem with
>PLUG_IN_INFO on OS/2 apparently is that it's hard on OS/2 to refer to
>exported variables in the executable that has loaded a shared library
>from the library.
The UNIX do a fork() to start the plug-ins so i tough that it's was inherited with the
GIMP's->main->libgimp->PLUG_IN_INFO.
Well it was a long time so maybe i misunderstand the INPUT flow.
That's the real problem here. A simple input (PLUG_IN_INFO) is inputted at linking
time and not
at run time. I don't wanna know different linker methods to do a simple input to
libgimp.
A new programmer will waste a lot of time to rediscover this hidden input.
If the PLUG_IN_INFO have been inputted with parameters in the first place nobody have
been discussing this issue.
Here is my OS/2 patch to do what the UNIX,, linkers do :
Very simple and work on all systems ! :)
void set_gimp_PLUG_IN_INFO (const GPlugInInfo *p)
{
PLUG_IN_INFO = *p;
}
main (int argc, char *argv[])
{
set_gimp_PLUG_IN_INFO(&PLUG_IN_INFO);
return gimp_main (argc, argv);
}
Every programmer understand what's going on but they will
ask
Why call set_gimp_PLUG_IN_INFO() before gimp_main() ?
I would tell them "It's because gimp_main use PLUG_IN_INFO!".
And so on....
The final solution will be for all OS'es:
main (int argc, char *argv[])
{
return gimp_main (argc, argv, &PLUG_IN_INFO);
}
Simple, readable ,understandable and NO linking problems.
>
>Although on Win32 you could look up the PLUG_IN_INFO address in the
>plug-in executable from the DLL (as long as it is marked for export),
>I do it almost like OS/2: I pass the address of PLUG_IN_INFO to a
>function in libgimp, that stores it in a place easily accessible to
>libgimp. (On OS/2, you store a copy of PLUG_IN_INFO in libgimp, while
>on Win32 I only store a pointer.)
>
>I agree with you, the "pass PLUG_IN_INFO address as parameter from the
>plug-in to gimp_main in libgimp" approach could well be used for all
>platforms, it would clean up the ifdefs in gimp.c and gimp.h quite a
>bit.
>
>--tml
***********************************************************
* Asbj�rn Pettersen Phone work: +47 77 66 08 91 *
* Kongsberg Spacetec a.s Phone home: +47 77674022 *
* Telefax: +47 77 65 58 59 *
* Prestvannveien 38 www:http://www.spacetec.no *
* N-9005 Tromsoe, Norway email:[EMAIL PROTECTED] *
***********************************************************