tomwalters@0
|
1 /*
|
tomwalters@0
|
2 Copyright (c) Applied Psychology Unit, Medical Research Council. 1993
|
tomwalters@0
|
3 ===========================================================================
|
tomwalters@0
|
4
|
tomwalters@0
|
5 Permission to use, copy, modify, and distribute this software without fee
|
tomwalters@0
|
6 is hereby granted for research purposes, provided that this copyright
|
tomwalters@0
|
7 notice appears in all copies and in all supporting documentation, and that
|
tomwalters@0
|
8 the software is not redistributed for any fee (except for a nominal
|
tomwalters@0
|
9 shipping charge). Anyone wanting to incorporate all or part of this
|
tomwalters@0
|
10 software in a commercial product must obtain a license from the Medical
|
tomwalters@0
|
11 Research Council.
|
tomwalters@0
|
12
|
tomwalters@0
|
13 The MRC makes no representations about the suitability of this
|
tomwalters@0
|
14 software for any purpose. It is provided "as is" without express or
|
tomwalters@0
|
15 implied warranty.
|
tomwalters@0
|
16
|
tomwalters@0
|
17 THE MRC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
tomwalters@0
|
18 ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
tomwalters@0
|
19 THE A.P.U. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES
|
tomwalters@0
|
20 OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
tomwalters@0
|
21 WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
tomwalters@0
|
22 ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
tomwalters@0
|
23 SOFTWARE.
|
tomwalters@0
|
24 */
|
tomwalters@0
|
25 /*
|
tomwalters@0
|
26 * initailise.c
|
tomwalters@0
|
27 * ---------
|
tomwalters@0
|
28 * Initialises lots of X things.
|
tomwalters@0
|
29 *
|
tomwalters@0
|
30 * M. Akeroyd. July 1993. version 1.10
|
tomwalters@0
|
31 * Revisions: MAA: Christmas 1993.
|
tomwalters@0
|
32 *
|
tomwalters@0
|
33 */
|
tomwalters@0
|
34
|
tomwalters@0
|
35
|
tomwalters@0
|
36
|
tomwalters@0
|
37 #include <X11/Xlib.h>
|
tomwalters@0
|
38 #include <X11/Xutil.h>
|
tomwalters@0
|
39 #include <X11/Xos.h>
|
tomwalters@0
|
40 #include <X11/Xatom.h>
|
tomwalters@0
|
41 #include <stdio.h>
|
tomwalters@0
|
42
|
tomwalters@0
|
43 #include "xreview.h"
|
tomwalters@0
|
44 #include "./xreview.bitmap"
|
tomwalters@0
|
45 #include <X11/cursorfont.h>
|
tomwalters@0
|
46
|
tomwalters@0
|
47
|
tomwalters@0
|
48
|
tomwalters@0
|
49 /* General variables ....*/
|
tomwalters@0
|
50
|
tomwalters@0
|
51 extern char progname[MAX_STRING_LENGTH];
|
tomwalters@0
|
52
|
tomwalters@0
|
53 extern char *data_pointer;
|
tomwalters@0
|
54 extern long location[MAX_FRAMES];
|
tomwalters@0
|
55
|
tomwalters@0
|
56
|
tomwalters@0
|
57
|
tomwalters@0
|
58 /* X ....................*/
|
tomwalters@0
|
59
|
tomwalters@0
|
60 extern char display_name[MAX_STRING_LENGTH];
|
tomwalters@0
|
61 extern char fontname[MAX_STRING_LENGTH];
|
tomwalters@0
|
62
|
tomwalters@0
|
63 extern Display *display;
|
tomwalters@0
|
64 extern int screen_num;
|
tomwalters@0
|
65 extern Screen *screen_ptr;
|
tomwalters@0
|
66 extern int depth;
|
tomwalters@0
|
67 extern unsigned int display_width, display_height;
|
tomwalters@0
|
68
|
tomwalters@0
|
69 extern toplevelWindow control;
|
tomwalters@0
|
70 extern toplevelWindow axes;
|
tomwalters@0
|
71 extern Pixmap stipple_pixmap;
|
tomwalters@0
|
72 extern XImage *reviewimage;
|
tomwalters@0
|
73 extern Cursor cursor;
|
tomwalters@0
|
74
|
tomwalters@0
|
75 extern GC button_gc;
|
tomwalters@0
|
76 extern XFontStruct *font_info;
|
tomwalters@0
|
77 extern int planemask;
|
tomwalters@0
|
78
|
tomwalters@0
|
79
|
tomwalters@0
|
80 /* .ctn ..................*/
|
tomwalters@0
|
81
|
tomwalters@0
|
82 extern int no_frames;
|
tomwalters@0
|
83 extern int width_ctn, height_ctn;
|
tomwalters@0
|
84 extern int x_ctn, y_ctn;
|
tomwalters@0
|
85 extern int reviewimage_bytesperline;
|
tomwalters@0
|
86 extern int reviewimage_bitmap_pad;
|
tomwalters@0
|
87
|
tomwalters@0
|
88
|
tomwalters@0
|
89 /* Command line ..........*/
|
tomwalters@0
|
90 extern double scale;
|
tomwalters@0
|
91 extern int new_axes_x, new_axes_y;
|
tomwalters@0
|
92 extern int new_control_x, new_control_y;
|
tomwalters@0
|
93
|
tomwalters@0
|
94 extern int axes_xflag, axes_yflag;
|
tomwalters@0
|
95 extern int controls_xflag, controls_yflag;
|
tomwalters@0
|
96 extern int verboseflag;
|
tomwalters@0
|
97 extern int titleflag;
|
tomwalters@0
|
98 extern int depthflag;
|
tomwalters@0
|
99 extern int reversevideoflag;
|
tomwalters@0
|
100 extern int byteorderflag;
|
tomwalters@0
|
101
|
tomwalters@0
|
102
|
tomwalters@0
|
103
|
tomwalters@0
|
104 /*--------------------------------------------------------------------------*/
|
tomwalters@0
|
105 /*--------------------------------------------------------------------------*/
|
tomwalters@0
|
106
|
tomwalters@0
|
107
|
tomwalters@0
|
108
|
tomwalters@0
|
109
|
tomwalters@0
|
110 void initialise_X_screen()
|
tomwalters@0
|
111 {
|
tomwalters@0
|
112 display = XOpenDisplay(display_name);
|
tomwalters@0
|
113 if (display == NULL) {
|
tomwalters@0
|
114 fprintf(stderr, "xreview : cannot connect to X server %s\n", XDisplayName(display_name));
|
tomwalters@0
|
115 exit(-1);}
|
tomwalters@0
|
116
|
tomwalters@0
|
117 screen_num = DefaultScreen(display);
|
tomwalters@0
|
118 screen_ptr = DefaultScreenOfDisplay(display);
|
tomwalters@0
|
119
|
tomwalters@0
|
120 display_width = DisplayWidth(display, screen_num);
|
tomwalters@0
|
121 display_height = DisplayHeight(display, screen_num);
|
tomwalters@0
|
122 }
|
tomwalters@0
|
123
|
tomwalters@0
|
124
|
tomwalters@0
|
125
|
tomwalters@0
|
126 /*--------------------------------------------------------------------------*/
|
tomwalters@0
|
127 /*--------------------------------------------------------------------------*/
|
tomwalters@0
|
128
|
tomwalters@0
|
129
|
tomwalters@0
|
130
|
tomwalters@0
|
131 void initialise_axes_window(char *inputfn, char *titlestring, FILE *inputfp, char *argv[], int argc)
|
tomwalters@0
|
132 {
|
tomwalters@0
|
133 char tempstring[MAX_STRING_LENGTH];
|
tomwalters@0
|
134 int status;
|
tomwalters@0
|
135
|
tomwalters@0
|
136 /*-----------------------------------*/
|
tomwalters@0
|
137
|
tomwalters@0
|
138 /* Set title to either the filename, "stdin", ot the -title option. */
|
tomwalters@0
|
139 if (inputfp == stdin){
|
tomwalters@0
|
140 strcpy(tempstring, "stdin");
|
tomwalters@0
|
141 axes.window_name = tempstring;
|
tomwalters@0
|
142 axes.icon_name = tempstring;}
|
tomwalters@0
|
143 else {
|
tomwalters@0
|
144 axes.window_name = inputfn;
|
tomwalters@0
|
145 axes.icon_name = inputfn;}
|
tomwalters@0
|
146
|
tomwalters@0
|
147 if (titleflag == ON){
|
tomwalters@0
|
148 axes.window_name = titlestring;
|
tomwalters@0
|
149 axes.icon_name = titlestring; }
|
tomwalters@0
|
150
|
tomwalters@0
|
151 /* Copy size off .ctn header */
|
tomwalters@0
|
152 axes.width = width_ctn;
|
tomwalters@0
|
153 axes.height = height_ctn;
|
tomwalters@0
|
154
|
tomwalters@0
|
155 /* Copy position off header */
|
tomwalters@0
|
156 axes.x = x_ctn;
|
tomwalters@0
|
157 axes.y = y_ctn;
|
tomwalters@0
|
158 if (x_ctn == -1)
|
tomwalters@0
|
159 axes.x = display_width/2 - axes.width/2;
|
tomwalters@0
|
160 if (y_ctn == -1)
|
tomwalters@0
|
161 axes.y = display_height/2 - axes.height/2;
|
tomwalters@0
|
162
|
tomwalters@0
|
163 /* If user requests new position, honour it */
|
tomwalters@0
|
164 if (axes_xflag == ON)
|
tomwalters@0
|
165 axes.x = new_axes_x;
|
tomwalters@0
|
166 if (axes_yflag == ON)
|
tomwalters@0
|
167 axes.y = new_axes_y;
|
tomwalters@0
|
168
|
tomwalters@0
|
169 /*---------------------------------*/
|
tomwalters@0
|
170
|
tomwalters@0
|
171 axes.win = XCreateSimpleWindow(display, RootWindow(display, screen_num), \
|
tomwalters@0
|
172 axes.x, axes.y, axes.width, axes.height,\
|
tomwalters@0
|
173 axes.border_width, \
|
tomwalters@0
|
174 BlackPixel(display, screen_num), \
|
tomwalters@0
|
175 WhitePixel(display, screen_num));
|
tomwalters@0
|
176
|
tomwalters@0
|
177 axes.icon_pixmap = XCreateBitmapFromData(display, axes.win, xreview_bits, \
|
tomwalters@0
|
178 xreview_width, xreview_height);
|
tomwalters@0
|
179 axes.gc = XCreateGC(display, axes.win, axes.valuemask, &axes.values);
|
tomwalters@0
|
180
|
tomwalters@0
|
181 axes.line_width = LINE_WIDTH_X;
|
tomwalters@0
|
182 axes.line_style = LINE_STYLE_X;
|
tomwalters@0
|
183 axes.cap_style = CAP_STYLE_X;
|
tomwalters@0
|
184 axes.join_style = JOIN_STYLE_X;
|
tomwalters@0
|
185 axes.foreground = BlackPixel(display, screen_num);
|
tomwalters@0
|
186
|
tomwalters@0
|
187 XSelectInput(display, axes.win, ExposureMask | KeyPressMask | \
|
tomwalters@0
|
188 ButtonPressMask | StructureNotifyMask);
|
tomwalters@0
|
189 XSetFont(display, axes.gc, font_info->fid);
|
tomwalters@0
|
190 if (reversevideoflag == OFF) {
|
tomwalters@0
|
191 XSetForeground(display, axes.gc, axes.foreground);
|
tomwalters@0
|
192 XSetBackground(display, axes.gc, WhitePixel(display, screen_num));}
|
tomwalters@0
|
193 else{
|
tomwalters@0
|
194 XSetBackground(display, axes.gc, axes.foreground);
|
tomwalters@0
|
195 XSetForeground(display, axes.gc, WhitePixel(display, screen_num));}
|
tomwalters@0
|
196
|
tomwalters@0
|
197 XSetLineAttributes(display, axes.gc, axes.line_width, axes.line_style,\
|
tomwalters@0
|
198 axes.cap_style, axes.join_style);
|
tomwalters@0
|
199 XSetPlaneMask(display, axes.gc, planemask);
|
tomwalters@0
|
200 XDefineCursor(display, axes.win, cursor);
|
tomwalters@0
|
201
|
tomwalters@0
|
202 axes.window_size = BIG_ENOUGH_X;
|
tomwalters@0
|
203
|
tomwalters@0
|
204 /*---------------------------------*/
|
tomwalters@0
|
205 /* Window Manager bits. Assume R4. */
|
tomwalters@0
|
206
|
tomwalters@0
|
207 axes.size_hints.flags = PPosition | PSize | PMinSize | PMaxSize;
|
tomwalters@0
|
208 axes.size_hints.min_width = axes.width;
|
tomwalters@0
|
209 axes.size_hints.max_width = axes.width;
|
tomwalters@0
|
210 axes.size_hints.min_height = axes.height;
|
tomwalters@0
|
211 axes.size_hints.max_height = axes.height;
|
tomwalters@0
|
212
|
tomwalters@0
|
213 axes.wm_hints.initial_state = NormalState;
|
tomwalters@0
|
214 axes.wm_hints.input = True;
|
tomwalters@0
|
215 axes.wm_hints.icon_pixmap = axes.icon_pixmap;
|
tomwalters@0
|
216 axes.wm_hints.flags = StateHint | IconPixmapHint | InputHint;
|
tomwalters@0
|
217
|
tomwalters@0
|
218 axes.class_hints.res_name = progname;
|
tomwalters@0
|
219 axes.class_hints.res_class = "Xreview";
|
tomwalters@0
|
220
|
tomwalters@0
|
221 status = XStringListToTextProperty(&axes.window_name, 1, &axes.windowName);
|
tomwalters@0
|
222 if (status == 0) {
|
tomwalters@0
|
223 if (verboseflag == ON) fprintf(stderr, "\n");
|
tomwalters@0
|
224 fprintf(stderr,"xreview : structure allocation for cartoon windowName failed.\n");
|
tomwalters@0
|
225 exit(-1); }
|
tomwalters@0
|
226
|
tomwalters@0
|
227 status = XStringListToTextProperty(&axes.icon_name, 1, &axes.iconName);
|
tomwalters@0
|
228 if (status == 0) {
|
tomwalters@0
|
229 if (verboseflag == ON) fprintf(stderr, "\n");
|
tomwalters@0
|
230 fprintf(stderr,"xreview : structure allocation for cartoon iconName failed.\n");
|
tomwalters@0
|
231 exit(-1); }
|
tomwalters@0
|
232
|
tomwalters@0
|
233 XSetWMProperties(display, axes.win, &axes.windowName, &axes.iconName, \
|
tomwalters@0
|
234 argv, argc, \
|
tomwalters@0
|
235 &axes.size_hints, &axes.wm_hints, &axes.class_hints);
|
tomwalters@0
|
236
|
tomwalters@0
|
237 }
|
tomwalters@0
|
238
|
tomwalters@0
|
239
|
tomwalters@0
|
240
|
tomwalters@0
|
241 /*----------------------------------------------------------------------*/
|
tomwalters@0
|
242 /*----------------------------------------------------------------------*/
|
tomwalters@0
|
243
|
tomwalters@0
|
244
|
tomwalters@0
|
245
|
tomwalters@0
|
246 void initialise_control_window(char *inputfn, char *titlestring, FILE *inputfp, char *argv[], int argc)
|
tomwalters@0
|
247 {
|
tomwalters@0
|
248 char tempstring[MAX_STRING_LENGTH];
|
tomwalters@0
|
249 int status;
|
tomwalters@0
|
250
|
tomwalters@0
|
251 /*----------------------------------*/
|
tomwalters@0
|
252
|
tomwalters@0
|
253 control.window_name = "xreview controls";
|
tomwalters@0
|
254 control.icon_name = "Controls";
|
tomwalters@0
|
255
|
tomwalters@0
|
256 control.width = (int) CONTROL_WIDTH * scale;
|
tomwalters@0
|
257 control.height = (int) CONTROL_HEIGHT * scale;
|
tomwalters@0
|
258
|
tomwalters@0
|
259 control.x = CONTROL_X;
|
tomwalters@0
|
260 control.y = CONTROL_Y;
|
tomwalters@0
|
261
|
tomwalters@0
|
262 /* If user requests new position, honour it */
|
tomwalters@0
|
263 if (controls_xflag == ON)
|
tomwalters@0
|
264 control.x = new_control_x;
|
tomwalters@0
|
265 if (controls_yflag == ON)
|
tomwalters@0
|
266 control.y = new_control_y;
|
tomwalters@0
|
267
|
tomwalters@0
|
268 /*---------------------------------*/
|
tomwalters@0
|
269
|
tomwalters@0
|
270 control.win = XCreateSimpleWindow(display, RootWindow(display, screen_num), \
|
tomwalters@0
|
271 control.x, control.y, control.width, \
|
tomwalters@0
|
272 control.height, control.border_width, \
|
tomwalters@0
|
273 BlackPixel(display, screen_num), \
|
tomwalters@0
|
274 WhitePixel(display, screen_num));
|
tomwalters@0
|
275
|
tomwalters@0
|
276 control.icon_pixmap = XCreateBitmapFromData(display, control.win, \
|
tomwalters@0
|
277 xreview_bits, \
|
tomwalters@0
|
278 xreview_width, xreview_height);
|
tomwalters@0
|
279 control.gc = XCreateGC(display, control.win, \
|
tomwalters@0
|
280 control.valuemask, &control.values);
|
tomwalters@0
|
281
|
tomwalters@0
|
282 control.line_width = LINE_WIDTH_X;
|
tomwalters@0
|
283 control.line_style = LINE_STYLE_X;
|
tomwalters@0
|
284 control.cap_style = CAP_STYLE_X;
|
tomwalters@0
|
285 control.join_style = JOIN_STYLE_X;
|
tomwalters@0
|
286 control.foreground = BlackPixel(display, screen_num);
|
tomwalters@0
|
287
|
tomwalters@0
|
288 XSelectInput(display, control.win, \
|
tomwalters@0
|
289 ExposureMask | KeyPressMask | \
|
tomwalters@0
|
290 ButtonPressMask | StructureNotifyMask);
|
tomwalters@0
|
291 XSetFont(display, control.gc, font_info->fid);
|
tomwalters@0
|
292 XSetForeground(display, control.gc, control.foreground);
|
tomwalters@0
|
293 XSetLineAttributes(display, control.gc, control.line_width, \
|
tomwalters@0
|
294 control.line_style,control.cap_style, control.join_style);
|
tomwalters@0
|
295 XDefineCursor(display, control.win, cursor);
|
tomwalters@0
|
296 XSetWindowBackgroundPixmap(display, control.win, stipple_pixmap);
|
tomwalters@0
|
297
|
tomwalters@0
|
298 control.window_size = BIG_ENOUGH_X;
|
tomwalters@0
|
299
|
tomwalters@0
|
300 /*---------------------------------*/
|
tomwalters@0
|
301 /* Window Manager bits. Assume R4. */
|
tomwalters@0
|
302
|
tomwalters@0
|
303 control.size_hints.flags = PPosition | PSize | PMinSize | PMaxSize;
|
tomwalters@0
|
304 control.size_hints.min_width = control.width;
|
tomwalters@0
|
305 control.size_hints.min_height = control.height;
|
tomwalters@0
|
306 control.size_hints.max_width = control.width;
|
tomwalters@0
|
307 control.size_hints.max_height = control.height;
|
tomwalters@0
|
308
|
tomwalters@0
|
309 control.wm_hints.initial_state = NormalState;
|
tomwalters@0
|
310 control.wm_hints.input = True;
|
tomwalters@0
|
311 control.wm_hints.icon_pixmap = control.icon_pixmap;
|
tomwalters@0
|
312 control.wm_hints.flags = StateHint | IconPixmapHint | InputHint;
|
tomwalters@0
|
313
|
tomwalters@0
|
314 control.class_hints.res_name = "xreview controls";
|
tomwalters@0
|
315 control.class_hints.res_class = "Xreview";
|
tomwalters@0
|
316
|
tomwalters@0
|
317 status = XStringListToTextProperty(&control.window_name, 1, &control.windowName);
|
tomwalters@0
|
318 if (status == 0) {
|
tomwalters@0
|
319 if (verboseflag == ON) fprintf(stderr, "\n");
|
tomwalters@0
|
320 fprintf(stderr,"xreview : structure allocation for Controls windowName failed.\n");
|
tomwalters@0
|
321 exit(-1); }
|
tomwalters@0
|
322
|
tomwalters@0
|
323 status = XStringListToTextProperty(&control.icon_name, 1, &control.iconName);
|
tomwalters@0
|
324 if (status == 0) {
|
tomwalters@0
|
325 if (verboseflag == ON) fprintf(stderr, "\n");
|
tomwalters@0
|
326 fprintf(stderr,"xreview : structure allocation for Controls iconName failed.\n");
|
tomwalters@0
|
327 exit(-1); }
|
tomwalters@0
|
328
|
tomwalters@0
|
329 XSetWMProperties(display, control.win,&control.windowName,&control.iconName,\
|
tomwalters@0
|
330 argv, argc, \
|
tomwalters@0
|
331 &control.size_hints,&control.wm_hints,&control.class_hints);
|
tomwalters@0
|
332
|
tomwalters@0
|
333 }
|
tomwalters@0
|
334
|
tomwalters@0
|
335
|
tomwalters@0
|
336
|
tomwalters@0
|
337 /*--------------------------------------------------------------------*/
|
tomwalters@0
|
338 /*--------------------------------------------------------------------*/
|
tomwalters@0
|
339
|
tomwalters@0
|
340
|
tomwalters@0
|
341
|
tomwalters@0
|
342 void initialise_image()
|
tomwalters@0
|
343 {
|
tomwalters@0
|
344 int offset = 0;
|
tomwalters@0
|
345
|
tomwalters@0
|
346 if (depthflag == MONO)
|
tomwalters@0
|
347 reviewimage = XCreateImage(display, DefaultVisual(display, screen_num),\
|
tomwalters@0
|
348 depth, XYBitmap, \
|
tomwalters@0
|
349 offset, data_pointer, axes.width, axes.height,\
|
tomwalters@0
|
350 reviewimage_bitmap_pad, reviewimage_bytesperline);
|
tomwalters@0
|
351 else
|
tomwalters@0
|
352 reviewimage = XCreateImage(display, DefaultVisual(display, screen_num),\
|
tomwalters@0
|
353 depth, XYPixmap, \
|
tomwalters@0
|
354 offset, data_pointer, axes.width, axes.height,\
|
tomwalters@0
|
355 reviewimage_bitmap_pad, reviewimage_bytesperline);
|
tomwalters@0
|
356
|
tomwalters@0
|
357 if (byteorderflag == DEC) {
|
tomwalters@0
|
358 (*reviewimage).byte_order = LSBFirst;
|
tomwalters@0
|
359 (*reviewimage).bitmap_bit_order = LSBFirst;
|
tomwalters@0
|
360 (*reviewimage).bitmap_pad = 32;}
|
tomwalters@0
|
361
|
tomwalters@0
|
362 if (byteorderflag == SUN) {
|
tomwalters@0
|
363 (*reviewimage).byte_order = MSBFirst;
|
tomwalters@0
|
364 (*reviewimage).bitmap_bit_order = MSBFirst;
|
tomwalters@0
|
365 (*reviewimage).bitmap_pad = 32;}
|
tomwalters@0
|
366
|
tomwalters@0
|
367 }
|
tomwalters@0
|
368
|
tomwalters@0
|
369
|
tomwalters@0
|
370
|
tomwalters@0
|
371
|
tomwalters@0
|
372 /*----------------------------------------------------------------------*/
|
tomwalters@0
|
373 /*----------------------------------------------------------------------*/
|
tomwalters@0
|
374
|
tomwalters@0
|
375
|
tomwalters@0
|
376
|
tomwalters@0
|
377
|
tomwalters@0
|
378 void exit_xreview()
|
tomwalters@0
|
379 {
|
tomwalters@0
|
380 reviewimage->data = (char *) location[1];
|
tomwalters@0
|
381 XDestroyImage(reviewimage);
|
tomwalters@0
|
382 XUnloadFont(display, font_info->fid);
|
tomwalters@0
|
383 XFreeGC(display, axes.gc);
|
tomwalters@0
|
384 XFreeGC(display, control.gc);
|
tomwalters@0
|
385 XFreeGC(display, button_gc);
|
tomwalters@0
|
386 XCloseDisplay(display);
|
tomwalters@0
|
387 if (verboseflag==ON) fprintf(stderr, "\n");
|
tomwalters@0
|
388 exit(1);
|
tomwalters@0
|
389 }
|
tomwalters@0
|
390
|
tomwalters@0
|
391
|
tomwalters@0
|
392
|
tomwalters@0
|
393 /* The end.*/
|
tomwalters@0
|
394 /*-------------------------------------------------------------------------*/
|
tomwalters@0
|
395 /*-------------------------------------------------------------------------*/
|
tomwalters@0
|
396
|
tomwalters@0
|
397
|
tomwalters@0
|
398
|
tomwalters@0
|
399
|
tomwalters@0
|
400
|