OSDN Git Service

ver1.1
[nysol/mining.git] / zdd / lib / SAPPOROBDD / src / BDDXc / window11.c
diff --git a/zdd/lib/SAPPOROBDD/src/BDDXc/window11.c b/zdd/lib/SAPPOROBDD/src/BDDXc/window11.c
new file mode 100755 (executable)
index 0000000..a0fc262
--- /dev/null
@@ -0,0 +1,224 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <X11/Xlib.h>
+#include "defs.h"
+
+#include "yubi.ic"
+#include "yubi_mask.ic"
+#include "wait.ic"
+#include "wait_mask.ic"
+
+#define DEFAULTWIDTH   500
+#define DEFAULTHEIGHT  600
+
+
+unsigned int   BDDIOwidth, BDDIOheight;
+
+       Display *disp;
+       Window  window;
+       GC      wingc;
+       XFontStruct     *fontinfo;
+static Cursor  yubicu, waitcu;
+       int     scrn;
+static int      cripx0, cripx1, cripy0, cripy1;
+
+
+void   SetCrippingWindow( x0, y0, x1, y1 )
+     unsigned int      x0, y0, x1, y1;
+{
+  cripx0 = x0;
+  cripy0 = y0;
+  cripx1 = x1;
+  cripy1 = y1;
+}
+
+
+static void    ClearWindow(){
+  XClearWindow( disp, window );
+}
+
+
+void   ResetWindowSize(){
+  XWindowAttributes    info;
+
+  XGetWindowAttributes( disp, window, &info );
+  if( info.width != BDDIOwidth || info.height != BDDIOheight ){
+    BDDIOwidth = info.width;
+    BDDIOheight = info.height;
+    SetCrippingWindow( 0, 0, BDDIOwidth, BDDIOheight );
+    ClearWindow();
+  }
+  LocationResetLocation( BDDIOwidth, BDDIOheight );
+}
+
+
+void   QueryColor( foreground, background )
+     int       *foreground, *background;
+{
+  *foreground = BlackPixel( disp, scrn );
+  *background = WhitePixel( disp, scrn );
+}
+
+
+static void    DefineCursor(){
+  static XColor   frground = {0L, 0, 0, 0};
+  static XColor   bground = {0L, 65535, 65535, 65535};
+  Pixmap   pix, maskpix;
+
+  pix = XCreateBitmapFromData( disp, window,
+                             yubi_bits, yubi_width, yubi_height );
+  maskpix = XCreateBitmapFromData( disp, window,
+                                 yubi_mask_bits,
+                                 yubi_mask_width, yubi_mask_height );
+/*  pix = XCreatePixmapFromBitmapData( disp, window,
+                                   yubi_bits, yubi_width, yubi_height,
+                                   BlackPixel( disp, scrn ),
+                                   WhitePixel( disp, scrn ),
+                                   1 );
+  maskpix = XCreatePixmapFromBitmapData( disp, window,
+                                   yubi_bits, yubi_width, yubi_height,
+                                   BlackPixel( disp, scrn ),
+                                   WhitePixel( disp, scrn ),
+                                   1 );
+*/  
+  yubicu = XCreatePixmapCursor( disp, pix, maskpix,
+                              &frground, &bground,
+                              (unsigned int)yubi_x_hot,
+                              (unsigned int)yubi_y_hot );
+  XFreePixmap( disp, pix );
+  XFreePixmap( disp, maskpix );
+
+  pix = XCreateBitmapFromData( disp, window,
+                             wait_bits, wait_width, wait_height );
+  maskpix = XCreateBitmapFromData( disp, window,
+                                 wait_mask_bits,
+                                 wait_mask_width, wait_mask_height );
+  waitcu = XCreatePixmapCursor( disp, pix, maskpix,
+                              &frground, &bground,
+                              (unsigned int)wait_x_hot,
+                              (unsigned int)wait_y_hot );
+  XFreePixmap( disp, pix );
+  XFreePixmap( disp, maskpix );
+}
+
+
+static void    KillCursor(){
+  XFreeCursor( disp, yubicu );
+  XFreeCursor( disp, waitcu );
+}
+
+
+int    WindowOpen( server, fontname )
+     char      *server;
+     char      *fontname;
+{
+  char geo[ 50 ], defgeo[ 50 ];
+  char fname[ 50 ];
+  
+  disp = XOpenDisplay( server );
+  if( disp == NULL ){
+    fprintf( stderr, "Can't open display '%s.'\n", server );
+    return( FALSE );
+  }
+  scrn = XDefaultScreen( disp );
+  if( fontname == NULL || *fontname == '\0' ){
+    strcpy( fname, "fixed" );
+  }
+  else{
+    strcpy( fname, fontname );
+  }
+  fontinfo = XLoadQueryFont( disp, fname );
+  if( fontinfo == NULL ){
+    fprintf( stderr, "Can't open font '%s.'\n", fname );
+    return( FALSE );
+  }
+  if( BDDIOwidth == 0 || BDDIOheight == 0 ){
+    BDDIOwidth = DEFAULTWIDTH;
+    BDDIOheight = DEFAULTHEIGHT;
+    SetCrippingWindow( 0, 0, BDDIOwidth, BDDIOheight );
+    LocationResetLocation( BDDIOwidth, BDDIOheight );
+  }
+  window = XCreateSimpleWindow( disp, XRootWindow( disp, scrn ),
+                     0, 0, BDDIOwidth, BDDIOheight, 3,
+                     BlackPixel( disp, scrn ), WhitePixel( disp, scrn ) );
+  XSelectInput( disp, window, ButtonPressMask | ExposureMask | KeyPressMask );
+
+  XStoreName( disp, window, "BDD viewer" );
+  wingc = XCreateGC( disp, window, 0, NULL );
+  XSetState( disp, wingc,
+           BlackPixel( disp, scrn ), WhitePixel( disp, scrn ),
+           GXcopy, AllPlanes );
+  XSetFont( disp, wingc, fontinfo->fid );
+  XSetArcMode( disp, wingc, ArcChord );
+  DefineCursor();
+  XDefineCursor( disp, window, waitcu );
+  XMapWindow( disp, window );
+  return( TRUE );
+}
+
+
+void   WindowClose(){
+  Spark();
+  XSync( disp, 0 );
+  KillCursor();
+  XDestroyWindow( disp, window );
+  XFreeFont( disp, fontinfo );
+  XCloseDisplay( disp );
+}
+     
+
+void   Wait(){
+  XEvent       event;
+  int          exitf;
+  static char  message[] = " Beware of X's bug!";
+
+  exitf = 0;
+  do{
+    XNextEvent( disp, &event );
+    switch( event.type ){
+    case Expose:
+      XDefineCursor( disp, window, waitcu );
+      Show();
+#ifdef VERBOSE
+      XDrawImageString( disp, window, wingc,
+                      0, 0 + fontinfo->ascent, message, strlen( message ) );
+#endif
+      XDefineCursor( disp, window, yubicu );
+      break;
+    case ButtonPress:
+      exitf = 1;
+      break;
+    }
+  }while( exitf == 0 );
+}
+
+
+int    MeanFontWidth(){
+  return( fontinfo->min_bounds.width );
+}
+
+
+int    DontCrip( x, y )
+     int       x, y;
+{
+  return( ( x >= cripx0 ) & ( x <= cripx1 )
+        & ( y >= cripy0 ) & ( y <= cripy1 ) );
+}
+
+
+Interrupt(){
+  int  b;
+  XEvent  event;
+
+  XSync( disp, 0 );
+/*  b = XCheckWindowEvent( window, ExposeWindow, &event );
+  if( b == 1 ){
+    XPutBackEvent( &event );
+  }
+  return( b );*/
+  return( 0 );
+}
+
+
+