Mail Archives: cygwin-apps/2001/04/10/11:41:22
Hi,
Sorry about the delay getting the no-x rxvt put into the
official distribution.  I couldn't resolve the fact that
I was colliding with the rxvt name.  Sure, I am using
the rxvt code OOTB, but I'm hobbling it by tying it to 
windows.
So I looked into making the X-look alike into a dll, and 
using run-time dynamic loading to load either libW11 or 
libX11.   This was surprisingly easy, save for two snags:
1. DISPLAY gets set to :0 by rxvt if DISPLAY isn't set. 
   This means that an rxvt launched from an rxvt will try 
   to open the X-display.  So my initial idea of using 
   DISPLAY to control which library to use is not as 
   straight forward as I hoped.  I would like to avoid
   asking new users to modify their environment and I
   would like to avoid parsing the command line args.
2. Maybe I'm approaching this wrong, but I'm  
   making wrappers for each X routine. 
   An example:
Display *XOpenDisplay(const char *name) {
    if (!f) f=_loadfunc("XOpenDisplay");
    return (f)(name);
}
   This worked great until I hit a varargs function:
XIC XCreateIC(XIM *im, ...) { 
    if (!f1) f1=_loadfunc("XCreateIC");
    return (f1)(im, ...);
}
   The naive approach is to just pass va_list:
     va_start(valist,im);
     return (f1)(im,valist);
   But I'm guessing that a more elaborate solution is 
   needed.  Anyone have experience with wrapping 
   vararg functions?
Thanks,
-steve o
__________________________________________________
Do You Yahoo!?
Get email at your own domain with Yahoo! Mail. 
http://personal.mail.yahoo.com/
- Raw text -