Mercurial > hg > aim92
diff xaim/xreview.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/xreview.c Fri May 20 15:19:45 2011 +0100 @@ -0,0 +1,614 @@ +/* + 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. +*/ + +/* +* xreview +* ---------- +* +* A program for animating an AIM 'cartoon bitmap'. +* Requires X windows, but most varieties, r4, r5, Sun OpenWindows +* (but see also the makefile) +* +* The underlying algorithm is: +* 1. load the entire cartoon into memory, as one contiguos block. +* 2. compute, and save, the memory locations of each frame's start. +* 3. Set the memory pointer of an XImage structure to the first one, and draw +* 4. Reset the pointer to the next frame, and redraw ... +* 5. Continue for however many frames there are. +* +* +* +* A large proportion of this was inspired by the "basic window" +* program of the O'Reilly X manuals, vol 1. More inspiritaion came from +* John Holdsworth's code. +* +* +* M.Akeroyd July 1993. version 1.00 +* +* revisions: MAA: Christmas 1993. rewrites for public release, also some +* bug fixes. +* Includes the linux hacks. +*/ + + +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#include <X11/Xos.h> +#include <X11/Xatom.h> +#include <X11/Xmu/Xmu.h> +#include <X11/keysym.h> +#include <X11/cursorfont.h> + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <math.h> +#include <time.h> + +#include "xreview.h" +#include "./stipple_a" /* for the Control Window background */ + + + + +/* Function declarations */ +/*-------------------------------------------------------------------------*/ + +void parsecommandline (int argc, char *argv[], char inputfn[], char titlestring[], char fontname[]); +int readheader(FILE *inputfp, char filefn[]); +FILE *open_file (char filefn[], FILE *dir_default, int streamtype); +void close_files (FILE *fp); + + +void initialise_control_window(char *inputfn, char *titlestring, FILE *inputfp, char *argv[], int argc); +void initialise_axes_window(char *inputfn, char *titlestring, FILE *inputfp, char *argv[], int argc); +void initialise_buttons(); +void initialise_image(); + + +void drawimage(int frame); +void drawtext(Window win, GC gc, XFontStruct *font_info, unsigned int width, \ + unsigned int height, char *text); +void drawbutton(Window control_win, Window button_local, GC *button_local_gc,\ + int width, int height, char *text, int fill_ground, \ + int text_ground); +void flashbutton(Window top_win, Window button_local, GC *button_local_gc, \ + int width, int height, char *text); + +void initialise_X_screen(); +void load_font(); + + + +/* Data arrays: global */ +/*-------------------------------------------------------------------------*/ + +char *data_pointer; +char *data_pointer_sideways; +long location[MAX_FRAMES]; /* frames: a reasonably big number */ +int frame = 1; /* start frame */ +FILE *inputfp; +char inputfn[MAX_STRING_LENGTH]; + +/* .ctn header */ +/*-------------------------------------------------------------------------*/ + +char header[MAX_LINES_HEADER][MAX_LINE_LENGTH]; +int header_lines; + +int no_frames; +int frameheight; /* number of channels */ +int framewidth_samples; /* pwidth + nwidth * samplerate */ +int frameshift_samples; /* frstep_aid * samplerate */ +double frstep_aid; /* msecs */ +double pwidth; /* msecs */ +double nwidth; /* msecs: NEGATIVE */ +int width_ctn; /* pixels */ +int height_ctn; /* pixels */ +int x_ctn; /* pixels */ +int y_ctn; /* pixels */ +long samplerate; /* samples per sec */ +int mincf; /* Hz */ +int maxcf; /* Hz */ + + +/* misc */ +/*-------------------------------------------------------------------------*/ + +char progname[MAX_STRING_LENGTH]; +char fontname[MAX_STRING_LENGTH]; +char display_name[MAX_STRING_LENGTH]; + +int verboseflag = OFF; /* -v option */ +int axes_xflag = OFF; /* -image_x option */ +int axes_yflag = OFF; /* -image_y option */ +int controls_xflag = OFF; /* -controls_x option */ +int controls_yflag = OFF; /* -controls_y option */ +int titleflag = OFF; /* -title option */ +int bytesflag = OFF; /* -lsb, -msb options */ +int bitmap_pad_flag = OFF; /* ditto */ +int new_axes_x, new_axes_y; +int new_control_x, new_control_y; +int controlwindowflag = OFF; /* -controls option */ +double scale = 1.0; + +long waittime_millisecs = 1; /* time to wait imbetween frames */ +long waittime_microsecs ; + +int animate_start = 1; /* animation start frame */ +int animate_stop = 9999; /* animation end frame: gets set to EOF */ +int animate_skip = 1; /* animation skip */ + +int sidewaysflag = OFF; + + + +/* X variables */ +/*-------------------------------------------------------------------------*/ +/* There are 3 classes of window: +* "axes window": where the cartoon itself is. Called "axes" for historical +* reasons. Button presses cause (1) animations, or (2) mapping +* of the Controls Window, or (3) exit. This window CANNOT +* be resized. +* Used, reasonably interchangealby, with 'image' +* "controls window": where the Animation Control buttons are. Button presses +* --- if not on a 'button' --- do nothing. This window +* can't be resized either. +* "buttons": there are lots of them. eg button_startf. These are subwindows +* of the Controls Window. Pressing the left mouse button causes +* something exciting to happen. +* There are also 'information buttons', which say things +* like the filename, number of frames, etc. Pressing one of these +* doesn't do anything. +*/ + +Display *display; +int screen_num; +Screen *screen_ptr; +int depth = 1; +unsigned int display_width_X, display_height_X; +unsigned int display_width, display_height; + +Pixmap stipple_pixmap; + + +/* Windows */ + +toplevelWindow axes; +toplevelWindow control; + +buttonWindow button_quit, button_close; +buttonWindow button_animate; +buttonWindow button_startf, button_startb, button_stopf, button_stopb; +buttonWindow button_skipf, button_skipb, button_faster, button_slower; +buttonWindow button_firstframe, button_lastframe, button_middle; +buttonWindow button_stepb, button_stepbb; +buttonWindow button_stepf, button_stepff; +buttonWindow info_speed, info_start, info_stop, info_skip; +buttonWindow info_title, info_frame; +buttonWindow info_time, info_freq, info_frstep; + +XFontStruct *font_info; +int pointsize = DEFAULT_POINTSIZE; +GC button_gc; +int button_borderwidth = 0; + +XImage *reviewimage; +int reviewimage_bytesperline = BYTES_PER_LINE; +int reviewimage_bitmap_pad = BITMAP_PAD; + +Cursor cursor; + +XEvent report; +int depthflag = MONO; /* assume a monochrome screen */ +int planemask = 0x1; /* works with my colour sparc */ +int xsyncflag = OFF; +int reversevideoflag = OFF; /* gets set to ON if DECstation */ +int byteorderflag = SERVER; /* ie, the physical screen */ + + + + + +/* ...................... Main ..............................*/ +/* .........................................................................*/ +/* .........................................................................*/ + + + + +void main (int argc, char *argv[]) +{ + int n; + int header_bytes = 0; + int alreadydrawnflag = OFF; + + char titlestring[MAX_STRING_LENGTH]; + char tempstring[MAX_STRING_LENGTH]; + + + int required_bytes; + long status; + long starttime, localtime; + long x; + + +/*-----------------------------*/ + + strcpy(progname, argv[0]); + strcpy(fontname, ""); + strcpy(inputfn, ""); + strcpy(titlestring, ""); + + /* Machine specific defaults */ +#ifdef HOST_SPARC + byteorderflag = SUN; + reversevideoflag = OFF; +#endif +#ifdef HOST_DECSTATION + byteorderflag = DEC; + reversevideoflag = ON; +#endif +#ifdef HOST_LINUXPC + byteorderflag = DEC; + reversevideoflag = ON; +#endif + + parsecommandline(argc, argv, inputfn, titlestring, fontname); + +/*-----------------------------*/ + + /* Open Display: this also finds the screen size */ + initialise_X_screen(); + +/*-----------------------------*/ + + + if (xsyncflag == ON) { + XSynchronize(display, True); + fprintf(stderr, "XSynchronize on \n");} + + inputfp = open_file(inputfn, stdin, READ); + header_bytes = readheader(inputfp, inputfn); + +/*-----------------------------*/ + + /* define bytes_per_line of the XImage. This seems to be, at least on a + * Colour SS-10, to be + * (width-1) + * ( --------- +1 ) *4 + * 32 + * where the INTEGER part of the division is all that is needed. + * + * Examples: + * width=100 to 128 bytes=16 (100 is the smallest AIM window allowed.- + * 129 -- 160 20 + * 161 -- 192 24 + * 193 -- 224 28 + */ + + reviewimage_bytesperline = (int) ((int) ((width_ctn -1) / 32) +1) *4; + +/*-----------------------------*/ + + /* Allocate lots of space: + * no of frames by .ctn size + */ + + if (depthflag == MONO) + depth = 1; + else + depth = DefaultDepth(display, screen_num); + + required_bytes = no_frames*height_ctn*reviewimage_bytesperline*depth; + + if (verboseflag == ON) { + fprintf(stderr, "xreview : reserving %i * %i * %i = %i bytes.\n", no_frames, (height_ctn*reviewimage_bytesperline), depth, required_bytes); } + + data_pointer = (char *) malloc((size_t) required_bytes); + if (data_pointer == NULL) { + fprintf(stderr, "xreview : unable to allocate %i bytes for XImage.\n", required_bytes); + fclose(inputfp); + exit(-1);} + + /* sideways scroll */ + if (sidewaysflag == ON) { + required_bytes = no_frames*height_ctn*reviewimage_bytesperline*depth; + if (verboseflag == ON) { + fprintf(stderr, "xreview : reserving %i * %i = %i bytes.\n", (no_frames*height_ctn*reviewimage_bytesperline), depth, required_bytes); } + data_pointer_sideways = (char *) malloc((size_t) required_bytes); + if (data_pointer_sideways == NULL) { + fprintf(stderr, "xreview : unable to allocate %i bytes for XImage.\n", required_bytes); + fclose(inputfp); + exit(-1);}} + +/*-----------------------------*/ + + /* load .ctn data */ + loaddata(inputfp); + close_files(inputfp); + if (animate_stop == 9999) + animate_stop = no_frames; + + if (sidewaysflag == ON) { + for (x=location[0]; x<=location[0]+required_bytes-1; x++) + data_pointer_sideways[x] = data_pointer[x];} + +/*-----------------------------*/ + + /* Find a font, in this order: + * 1. command-line + * 2. Times family + * 3. Lucida family. + * If can't find any, should crash. + */ + + font_info = NULL; + + if ((strcmp(fontname, "") == 0 ) || + ((font_info = XLoadQueryFont(display, fontname)) == NULL)) { + sprintf(fontname, "-adobe-times-medium-r-normal--%i-*-*-*-*-*-*-*", pointsize); + if ((font_info = XLoadQueryFont(display, fontname)) == NULL) { + sprintf(fontname, "-b&h-lucida-medium-r-normal-sans-%i-*-*-*-*-*-*-*", pointsize); + if ((font_info = XLoadQueryFont(display, fontname)) == NULL) { + fprintf(stderr, "xreview : unable to find fonts.\n"); + exit(-1); }}} + +/*-----------------------------*/ + + /* define a cursor */ + cursor = XCreateFontCursor(display, XC_top_left_arrow); + +/*-----------------------------*/ + + initialise_axes_window(inputfn, titlestring, inputfp, argv, argc); + XMapWindow(display, axes.win); + + /* define the background pixmap */ + stipple_pixmap = XCreatePixmapFromBitmapData(display, \ + RootWindow(display, screen_num), stipple_a_bits, \ + stipple_a_width, stipple_a_height, \ + BlackPixel(display, screen_num), \ + WhitePixel(display, screen_num), \ + DefaultDepth(display, screen_num)); + + initialise_control_window(inputfn, titlestring, inputfp, argv, argc); + if (controlwindowflag == ON) + XMapWindow(display, control.win); + + initialise_buttons(); + + initialise_image(); + +/*------------------------------*/ + + + +/*----------------------------- + * EVENT LOOP + *----------------------------- + */ + + + + while (1) { + XNextEvent(display, &report); + + if (report.xany.window == axes.win) + switch_axes(); + else if (report.xany.window == control.win) + switch_control(); + else + switch_buttons(); + + } /* while */ + + + /*---------------------------------------------------------*/ + + +} /* main */ + + + + + +/*......................................................................*/ +/*......................................................................*/ + + + + + +void parsecommandline(int argc, char *argv[], char inputfn[], char titlestring[], char fontname[]) +{ + int x=1, helpflag = OFF; + int control_width =0; + char control_size[MAX_STRING_LENGTH]; + + strcpy(control_size, ""); + + while (x < argc){ + if (!strcmp(argv[x], "-input")) {strcpy(inputfn, argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-inp")) {strcpy(inputfn, argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-i")) {strcpy(inputfn, argv[x+1]); x+=2;} + + else if (!strcmp(argv[x], "-help")) {helpflag = ON; x+=1;} + else if (!strcmp(argv[x], "-h")) {helpflag = ON; x+=1;} + else if (!strcmp(argv[x], "-verbose")) {verboseflag = ON; x+=1;} + else if (!strcmp(argv[x], "-ver")) {verboseflag = ON; x+=1;} + else if (!strcmp(argv[x], "-v")) {verboseflag = ON; x+=1;} + + else if (!strcmp(argv[x], "-side")) {sidewaysflag = ON; x+=1;} + else if (!strcmp(argv[x], "-sideways")) {sidewaysflag = ON; x+=1;} + else if (!strcmp(argv[x], "-controls")) {controlwindowflag = ON; x+=1;} + else if (!strcmp(argv[x], "-con")) {controlwindowflag = ON; x+=1;} + else if (!strcmp(argv[x], "-c")) {controlwindowflag = ON; x+=1;} + else if (!strcmp(argv[x], "-controls_x")) {controls_xflag = ON; new_control_x = atoi(argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-cx")) {controls_xflag = ON; new_control_x = atoi(argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-controls_y")) {controls_yflag = ON; new_control_y = atoi(argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-cy")) {controls_yflag = ON; new_control_y = atoi(argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-image_x")) {axes_xflag = ON; new_axes_x = atoi(argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-ix")) {axes_xflag = ON; new_axes_x = atoi(argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-image_y")) {axes_yflag = ON; new_axes_y = atoi(argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-iy")) {axes_yflag = ON; new_axes_y = atoi(argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-controls_scale")) {scale = atof(argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-cscale")) {scale = atof(argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-controls_width")) {control_width = atoi(argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-cw")) {control_width = atoi(argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-controls_size")) {strcpy(control_size, argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-csize")) {strcpy(control_size, argv[x+1]); x+=2;} + + else if (!strcmp(argv[x], "-display")) {strcpy(display_name, argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-d")) {strcpy(display_name, argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-font")) {strcpy(fontname, argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-fn")) {strcpy(fontname, argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-point")) {pointsize = atoi(argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-p")) {pointsize = atoi(argv[x+1]); x+=2;} + + else if (!strcmp(argv[x], "-wait")) {waittime_millisecs = atol(argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-w")) {waittime_millisecs = atol(argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-speed")) {waittime_millisecs = atol(argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-start")) {animate_start = atoi(argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-stop")) {animate_stop = atoi(argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-skip")) {animate_skip = atoi(argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-frame")) {frame = atoi(argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-fra")) {frame = atoi(argv[x+1]); x+=2;} + + else if (!strcmp(argv[x], "-title")) {titleflag = ON; strcpy(titlestring, argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-tit")) {titleflag = ON; strcpy(titlestring, argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-t")) {titleflag = ON; strcpy(titlestring, argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-mono")) {depthflag = MONO; x+=1;} + else if (!strcmp(argv[x], "-colour")) {depthflag = COLOUR; planemask = AllPlanes; x+=1; } + else if (!strcmp(argv[x], "-planemask")) {planemask = atoi(argv[x+1]); x+=2;} + else if (!strcmp(argv[x], "-xsync")) {xsyncflag = ON; x+=1;} + else if (!strcmp(argv[x], "-rv")) {if (reversevideoflag == ON) + reversevideoflag = OFF; + else + reversevideoflag = ON; + x+=1;} + else if (!strcmp(argv[x], "-lsb")) {byteorderflag = DEC; x+=1;} + else if (!strcmp(argv[x], "-msb")) {byteorderflag = SUN; x+=1;} + else if (!strcmp(argv[x], "-dec")) {byteorderflag = DEC; reversevideoflag = ON; x+=1;} + else if (!strcmp(argv[x], "-sun")) {byteorderflag = SUN; reversevideoflag = OFF; x+=1;} + else if (x = (argc-1)) {strcpy(inputfn, argv[x]); x+=1;} + + else {fprintf(stderr, "xreview: unknown option %s\n", argv[x]); + exit(-1);} + + } + + if (helpflag == ON) + { + fprintf(stderr, "\n"); + fprintf(stderr, "--------------------------------------------------------------------------------\n"); + fprintf(stderr, " xreview\n"); + fprintf(stderr, "--------------------------------------------------------------------------------\n\n"); + fprintf(stderr, " usage: xreview -input 'filename.ctn' <options> \n"); + fprintf(stderr, " or xreview <options> 'filename.ctn' \n"); + fprintf(stderr, " or cat 'filename.ctn' | xreview <options> \n\n\n"); + fprintf(stderr, " Command line options Abbrev.\n"); + fprintf(stderr, "--------------------------------------------------------------------------------\n"); + fprintf(stderr, "-input <.ctn file> Input file (default = stdin). -i\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "-controls Map Controls window. -con\n"); + fprintf(stderr, "-controls_x <int> Controls window position (pixels). -cx\n"); + fprintf(stderr, "-controls_y <int> Controls window position (pixels). -cy\n"); + fprintf(stderr, "-controls_width <int> Controls window width (pixels). -cw\n"); + fprintf(stderr, "-controls_scale <flt> Scale factor for size of Controls Window. -cscale\n"); + fprintf(stderr, "-controls_size Controls Window size: 'tiny', 'small' or 'normal'. -csize\n"); + fprintf(stderr, "-image_x <int> Image position (pixels). -ix\n"); + fprintf(stderr, "-image_y <int> Image position (pixels). -iy\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "-display <string> X Display server to use. -d\n"); + fprintf(stderr, "-font <string> Font. -fn\n"); + fprintf(stderr, "-point <int> Point-size of default font (Times, medium weight). -p\n"); + fprintf(stderr, "-title <string> Title of Image window & icon. -t\n"); + fprintf(stderr, "-mono Assume Monochrome (single-plane) cartoons. (default) \n"); + fprintf(stderr, "-colour Assume Colour (multiplane) cartoons. \n"); + fprintf(stderr, "-planemask <int> Value of PlaneMask for copying XImage (default=1) \n"); + fprintf(stderr, "-rv Reverse-video the cartoon window colours. \n"); + fprintf(stderr, "-lsb Assume cartoon's bit & byte orders are LSBFirst (ie, DEC).\n"); + fprintf(stderr, "-msb Assume cartoon's bit & byte orders are MSBFirst (ie, Sun).\n"); + fprintf(stderr, "-dec Alias for -lsb -rv \n"); + fprintf(stderr, "-sun Alias for -msb \n"); + fprintf(stderr, "\n"); + fprintf(stderr, "-speed <int> Wait-time between frames (msecs) (default = %i). -speed\n", waittime_millisecs); + fprintf(stderr, "-start <int> Animation start (frames) (default=1). -start\n"); + fprintf(stderr, "-stop <int> Animation stop (frames) (default=last frame). -stop\n"); + fprintf(stderr, "-skip <int> Animation skip (frames) (default=1). -skip\n"); + fprintf(stderr, "-frame <int> Initial display frame (default=1). -fra\n"); + fprintf(stderr, "-sideways Scroll cartoon sideways (right->left) -side\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "-verbose Print some running information (to stderr). -v\n"); + fprintf(stderr, "-help Print this page (to stderr). -h\n"); + fprintf(stderr, "\n\n" ); + fprintf(stderr, " Image Window Controls \n"); + fprintf(stderr, "--------------------------------------------------------------------------------\n"); + fprintf(stderr, " Left button Animate cartoon. \n"); + fprintf(stderr, " Middle button Map Controls window. \n"); + fprintf(stderr, " Right button Quit. \n\n"); + fprintf(stderr, " SPACE or RET Animate cartoon. \n"); + fprintf(stderr, " F or f Set speed faster by x2. \n"); + fprintf(stderr, " S or s Set speed slower by x2. \n"); + fprintf(stderr, " N or n Next frame. \n"); + fprintf(stderr, " P or p Previous frame. \n"); + fprintf(stderr, " Q or q Quit. \n"); + fprintf(stderr, "\n\n"); + exit(-1);} + + if (strcmp(control_size, "") != 0){ + if (strcmp(control_size, "normal") == 0) { + scale=1.00; + pointsize=18;} + else if (strcmp(control_size, "small") == 0) { + scale=0.80; + pointsize=14;} + else if (strcmp(control_size, "tiny") == 0) { + scale=0.60; + pointsize=10;} + else { + fprintf(stderr, "xreview : illegal control_size value.\n"); + exit(-1);} + } + + if (control_width != 0) + scale = (double) control_width / CONTROL_WIDTH; + + +} + + +/* The end.*/ + + +/*-------------------------------------------------------------------------*/ +/*-------------------------------------------------------------------------*/ + + + + + +