annotate xaim/initialise.c @ 0:5242703e91d3 tip

Initial checkin for AIM92 aimR8.2 (last updated May 1997).
author tomwalters
date Fri, 20 May 2011 15:19:45 +0100
parents
children
rev   line source
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