1 
2 
3 /*
4  *  Author: Arvin Schnell
5  */
6 
7 
8 #include <stdio.h>
9 #include <ctype.h>
10 #include <math.h>
11 
12 #include <X11/Xlib.h>
13 #include <Xm/Xm.h>
14 #include <Xm/Scale.h>
15 
16 
17 void
myXGetDrawableSize(Display * display,Drawable drawable,unsigned int * width,unsigned int * height)18 myXGetDrawableSize (Display* display, Drawable drawable,
19 		    unsigned int* width, unsigned int* height)
20 {
21     Window root;
22     int x, y;
23     unsigned int border, depth;
24 
25     XGetGeometry (display, drawable, &root, &x, &y, width, height,
26 		  &border, &depth);
27 }
28 
29 
30 double
myXmScaleGetValue(Widget widget)31 myXmScaleGetValue (Widget widget)
32 {
33     int value;
34     short int point;
35     Arg args[] = {
36 	{ XmNvalue, (XtArgVal) & value },
37 	{ XmNdecimalPoints, (XtArgVal) & point }
38     };
39     XtGetValues (widget, args, XtNumber (args));
40 
41     double base = pow (10.0, point);
42     return value / base;
43 }
44 
45 
46 void
myXmScaleSetValue(Widget widget,double value)47 myXmScaleSetValue (Widget widget, double value)
48 {
49     short int point;
50     Arg args[] = {
51 	{ XmNdecimalPoints, (XtArgVal) & point }
52     };
53     XtGetValues (widget, args, XtNumber (args));
54 
55     double base = pow (10.0, point);
56     XmScaleSetValue (widget, (int) (value * base));
57 }
58 
59 
60 #ifndef _BSD_SOURCE
61 int
strcasecmp(const char * s1,const char * s2)62 strcasecmp (const char* s1, const char* s2)
63 {
64     const char* a1 = s1;
65     const char* a2 = s2;
66     while (true) {
67 	char c1 = tolower (*a1++);
68 	char c2 = tolower (*a2++);
69 	if (c1 == '\0' && c2 == '\0')
70 	    return 0;
71 	if (c1 != c2)
72 	    return c1 > c2 ? +1 : -1;
73     }
74 }
75 #endif
76 
77 
78 bool
one_bit_set(unsigned int x)79 one_bit_set (unsigned int x)
80 {
81     unsigned int m = x - 1;
82     return (x ^ m) >> 1 == m;
83 }
84