#include <dlfcn.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <unistd.h>
#include <string.h>
/* 
   Devoted to Cyril Slobin for his excellent works in area
   of Russification

   Copyright (C) 2002 by V. Wagner
 */
void report(const char *function, const char *name);
XFontStruct *(*RealLoadQueryFont) (Display *display, const char* name);
Font (*RealLoadFont) (Display *display, const char *name);
Display* XOpenDisplay( const char* display_name) {
    void * handle=dlopen("libX11.so.6", RTLD_NOW | RTLD_GLOBAL);
    void *(*RealOpenDisplay)(const char*);
    if (!handle) exit(127);
    RealOpenDisplay=dlsym(handle, "XOpenDisplay");
    RealLoadQueryFont=dlsym(handle, "XLoadQueryFont");
	RealLoadFont=dlsym(handle,"XLoadFont");
    return (*RealOpenDisplay)(display_name);
}
XFontStruct *XLoadQueryFont (Display *display, _Xconst char* name) {
  report("XLoadQueryFont",name); 
  return (*RealLoadQueryFont) (display, name);
}  
Font XLoadFont (Display *display, _Xconst char *name) {
  report("XLoadFont",name);
  return (*RealLoadFont) (display, name);
}  

void report (const char *function,const char *name) {
  char buffer[1024];
  strcpy(buffer,function);
  strcat(buffer,": ");
  strcat(buffer,name);
  strcat(buffer,"\n");
  write(2,buffer,strlen(buffer));
}  
