Mercurial > hg > aim92
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xaim/initialise.c Fri May 20 15:19:45 2011 +0100 @@ -0,0 +1,400 @@ +/* + Copyright (c) Applied Psychology Unit, Medical Research Council. 1993 + =========================================================================== + + Permission to use, copy, modify, and distribute this software without fee + is hereby granted for research purposes, provided that this copyright + notice appears in all copies and in all supporting documentation, and that + the software is not redistributed for any fee (except for a nominal + shipping charge). Anyone wanting to incorporate all or part of this + software in a commercial product must obtain a license from the Medical + Research Council. + + The MRC makes no representations about the suitability of this + software for any purpose. It is provided "as is" without express or + implied warranty. + + THE MRC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING + ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL + THE A.P.U. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES + OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + SOFTWARE. +*/ +/* +* initailise.c +* --------- +* Initialises lots of X things. +* +* M. Akeroyd. July 1993. version 1.10 +* Revisions: MAA: Christmas 1993. +* +*/ + + + +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#include <X11/Xos.h> +#include <X11/Xatom.h> +#include <stdio.h> + +#include "xreview.h" +#include "./xreview.bitmap" +#include <X11/cursorfont.h> + + + +/* General variables ....*/ + +extern char progname[MAX_STRING_LENGTH]; + +extern char *data_pointer; +extern long location[MAX_FRAMES]; + + + +/* X ....................*/ + +extern char display_name[MAX_STRING_LENGTH]; +extern char fontname[MAX_STRING_LENGTH]; + +extern Display *display; +extern int screen_num; +extern Screen *screen_ptr; +extern int depth; +extern unsigned int display_width, display_height; + +extern toplevelWindow control; +extern toplevelWindow axes; +extern Pixmap stipple_pixmap; +extern XImage *reviewimage; +extern Cursor cursor; + +extern GC button_gc; +extern XFontStruct *font_info; +extern int planemask; + + +/* .ctn ..................*/ + +extern int no_frames; +extern int width_ctn, height_ctn; +extern int x_ctn, y_ctn; +extern int reviewimage_bytesperline; +extern int reviewimage_bitmap_pad; + + +/* Command line ..........*/ +extern double scale; +extern int new_axes_x, new_axes_y; +extern int new_control_x, new_control_y; + +extern int axes_xflag, axes_yflag; +extern int controls_xflag, controls_yflag; +extern int verboseflag; +extern int titleflag; +extern int depthflag; +extern int reversevideoflag; +extern int byteorderflag; + + + +/*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ + + + + +void initialise_X_screen() +{ + display = XOpenDisplay(display_name); + if (display == NULL) { + fprintf(stderr, "xreview : cannot connect to X server %s\n", XDisplayName(display_name)); + exit(-1);} + + screen_num = DefaultScreen(display); + screen_ptr = DefaultScreenOfDisplay(display); + + display_width = DisplayWidth(display, screen_num); + display_height = DisplayHeight(display, screen_num); +} + + + +/*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ + + + +void initialise_axes_window(char *inputfn, char *titlestring, FILE *inputfp, char *argv[], int argc) +{ + char tempstring[MAX_STRING_LENGTH]; + int status; + +/*-----------------------------------*/ + + /* Set title to either the filename, "stdin", ot the -title option. */ + if (inputfp == stdin){ + strcpy(tempstring, "stdin"); + axes.window_name = tempstring; + axes.icon_name = tempstring;} + else { + axes.window_name = inputfn; + axes.icon_name = inputfn;} + + if (titleflag == ON){ + axes.window_name = titlestring; + axes.icon_name = titlestring; } + + /* Copy size off .ctn header */ + axes.width = width_ctn; + axes.height = height_ctn; + + /* Copy position off header */ + axes.x = x_ctn; + axes.y = y_ctn; + if (x_ctn == -1) + axes.x = display_width/2 - axes.width/2; + if (y_ctn == -1) + axes.y = display_height/2 - axes.height/2; + + /* If user requests new position, honour it */ + if (axes_xflag == ON) + axes.x = new_axes_x; + if (axes_yflag == ON) + axes.y = new_axes_y; + +/*---------------------------------*/ + + axes.win = XCreateSimpleWindow(display, RootWindow(display, screen_num), \ + axes.x, axes.y, axes.width, axes.height,\ + axes.border_width, \ + BlackPixel(display, screen_num), \ + WhitePixel(display, screen_num)); + + axes.icon_pixmap = XCreateBitmapFromData(display, axes.win, xreview_bits, \ + xreview_width, xreview_height); + axes.gc = XCreateGC(display, axes.win, axes.valuemask, &axes.values); + + axes.line_width = LINE_WIDTH_X; + axes.line_style = LINE_STYLE_X; + axes.cap_style = CAP_STYLE_X; + axes.join_style = JOIN_STYLE_X; + axes.foreground = BlackPixel(display, screen_num); + + XSelectInput(display, axes.win, ExposureMask | KeyPressMask | \ + ButtonPressMask | StructureNotifyMask); + XSetFont(display, axes.gc, font_info->fid); + if (reversevideoflag == OFF) { + XSetForeground(display, axes.gc, axes.foreground); + XSetBackground(display, axes.gc, WhitePixel(display, screen_num));} + else{ + XSetBackground(display, axes.gc, axes.foreground); + XSetForeground(display, axes.gc, WhitePixel(display, screen_num));} + + XSetLineAttributes(display, axes.gc, axes.line_width, axes.line_style,\ + axes.cap_style, axes.join_style); + XSetPlaneMask(display, axes.gc, planemask); + XDefineCursor(display, axes.win, cursor); + + axes.window_size = BIG_ENOUGH_X; + +/*---------------------------------*/ +/* Window Manager bits. Assume R4. */ + + axes.size_hints.flags = PPosition | PSize | PMinSize | PMaxSize; + axes.size_hints.min_width = axes.width; + axes.size_hints.max_width = axes.width; + axes.size_hints.min_height = axes.height; + axes.size_hints.max_height = axes.height; + + axes.wm_hints.initial_state = NormalState; + axes.wm_hints.input = True; + axes.wm_hints.icon_pixmap = axes.icon_pixmap; + axes.wm_hints.flags = StateHint | IconPixmapHint | InputHint; + + axes.class_hints.res_name = progname; + axes.class_hints.res_class = "Xreview"; + + status = XStringListToTextProperty(&axes.window_name, 1, &axes.windowName); + if (status == 0) { + if (verboseflag == ON) fprintf(stderr, "\n"); + fprintf(stderr,"xreview : structure allocation for cartoon windowName failed.\n"); + exit(-1); } + + status = XStringListToTextProperty(&axes.icon_name, 1, &axes.iconName); + if (status == 0) { + if (verboseflag == ON) fprintf(stderr, "\n"); + fprintf(stderr,"xreview : structure allocation for cartoon iconName failed.\n"); + exit(-1); } + + XSetWMProperties(display, axes.win, &axes.windowName, &axes.iconName, \ + argv, argc, \ + &axes.size_hints, &axes.wm_hints, &axes.class_hints); + +} + + + +/*----------------------------------------------------------------------*/ +/*----------------------------------------------------------------------*/ + + + +void initialise_control_window(char *inputfn, char *titlestring, FILE *inputfp, char *argv[], int argc) +{ + char tempstring[MAX_STRING_LENGTH]; + int status; + +/*----------------------------------*/ + + control.window_name = "xreview controls"; + control.icon_name = "Controls"; + + control.width = (int) CONTROL_WIDTH * scale; + control.height = (int) CONTROL_HEIGHT * scale; + + control.x = CONTROL_X; + control.y = CONTROL_Y; + + /* If user requests new position, honour it */ + if (controls_xflag == ON) + control.x = new_control_x; + if (controls_yflag == ON) + control.y = new_control_y; + +/*---------------------------------*/ + + control.win = XCreateSimpleWindow(display, RootWindow(display, screen_num), \ + control.x, control.y, control.width, \ + control.height, control.border_width, \ + BlackPixel(display, screen_num), \ + WhitePixel(display, screen_num)); + + control.icon_pixmap = XCreateBitmapFromData(display, control.win, \ + xreview_bits, \ + xreview_width, xreview_height); + control.gc = XCreateGC(display, control.win, \ + control.valuemask, &control.values); + + control.line_width = LINE_WIDTH_X; + control.line_style = LINE_STYLE_X; + control.cap_style = CAP_STYLE_X; + control.join_style = JOIN_STYLE_X; + control.foreground = BlackPixel(display, screen_num); + + XSelectInput(display, control.win, \ + ExposureMask | KeyPressMask | \ + ButtonPressMask | StructureNotifyMask); + XSetFont(display, control.gc, font_info->fid); + XSetForeground(display, control.gc, control.foreground); + XSetLineAttributes(display, control.gc, control.line_width, \ + control.line_style,control.cap_style, control.join_style); + XDefineCursor(display, control.win, cursor); + XSetWindowBackgroundPixmap(display, control.win, stipple_pixmap); + + control.window_size = BIG_ENOUGH_X; + +/*---------------------------------*/ +/* Window Manager bits. Assume R4. */ + + control.size_hints.flags = PPosition | PSize | PMinSize | PMaxSize; + control.size_hints.min_width = control.width; + control.size_hints.min_height = control.height; + control.size_hints.max_width = control.width; + control.size_hints.max_height = control.height; + + control.wm_hints.initial_state = NormalState; + control.wm_hints.input = True; + control.wm_hints.icon_pixmap = control.icon_pixmap; + control.wm_hints.flags = StateHint | IconPixmapHint | InputHint; + + control.class_hints.res_name = "xreview controls"; + control.class_hints.res_class = "Xreview"; + + status = XStringListToTextProperty(&control.window_name, 1, &control.windowName); + if (status == 0) { + if (verboseflag == ON) fprintf(stderr, "\n"); + fprintf(stderr,"xreview : structure allocation for Controls windowName failed.\n"); + exit(-1); } + + status = XStringListToTextProperty(&control.icon_name, 1, &control.iconName); + if (status == 0) { + if (verboseflag == ON) fprintf(stderr, "\n"); + fprintf(stderr,"xreview : structure allocation for Controls iconName failed.\n"); + exit(-1); } + + XSetWMProperties(display, control.win,&control.windowName,&control.iconName,\ + argv, argc, \ + &control.size_hints,&control.wm_hints,&control.class_hints); + +} + + + +/*--------------------------------------------------------------------*/ +/*--------------------------------------------------------------------*/ + + + +void initialise_image() +{ + int offset = 0; + + if (depthflag == MONO) + reviewimage = XCreateImage(display, DefaultVisual(display, screen_num),\ + depth, XYBitmap, \ + offset, data_pointer, axes.width, axes.height,\ + reviewimage_bitmap_pad, reviewimage_bytesperline); + else + reviewimage = XCreateImage(display, DefaultVisual(display, screen_num),\ + depth, XYPixmap, \ + offset, data_pointer, axes.width, axes.height,\ + reviewimage_bitmap_pad, reviewimage_bytesperline); + + if (byteorderflag == DEC) { + (*reviewimage).byte_order = LSBFirst; + (*reviewimage).bitmap_bit_order = LSBFirst; + (*reviewimage).bitmap_pad = 32;} + + if (byteorderflag == SUN) { + (*reviewimage).byte_order = MSBFirst; + (*reviewimage).bitmap_bit_order = MSBFirst; + (*reviewimage).bitmap_pad = 32;} + +} + + + + +/*----------------------------------------------------------------------*/ +/*----------------------------------------------------------------------*/ + + + + +void exit_xreview() +{ + reviewimage->data = (char *) location[1]; + XDestroyImage(reviewimage); + XUnloadFont(display, font_info->fid); + XFreeGC(display, axes.gc); + XFreeGC(display, control.gc); + XFreeGC(display, button_gc); + XCloseDisplay(display); + if (verboseflag==ON) fprintf(stderr, "\n"); + exit(1); +} + + + +/* The end.*/ +/*-------------------------------------------------------------------------*/ +/*-------------------------------------------------------------------------*/ + + + + +