Mercurial > hg > aim92
diff glib/windows.h @ 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/glib/windows.h Fri May 20 15:19:45 2011 +0100 @@ -0,0 +1,182 @@ +/* + Copyright (c) Applied Psychology Unit, Medical Research Council. 1988, 1989 + =========================================================================== + + 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. +*/ + +/* + windows.h + ========= + + A rather wave drawing oriented interface to window systems + + + + Authors : John Holdsworth, Paul Manson. + Written : 22nd March, 1989. + + Edited : + + 04 April 1989 (Paul Manson) -- Altered the axes entry point to also pass + the WindowObject (it is needed so that the + axes have something to attach to) + + 06 July 1989 (Paul Manson) -- Altered the <name> argument of newDisplayWindow() + to refer to the name of the window to be created, + rather than the display to use. + + 01 April 1990 (John Holdsworth) -- function operation changed to more general + segment operation to draw part of a wave. + The macro Function() preforms as before. + +*/ + +/* allowed extry pointy for a generic window object */ + +typedef struct _window_entries { + short (*x )( /* WindowOjbect info */ ) ; + short (*y )( /* WindowOjbect info */ ) ; + short (*width )( /* WindowOjbect info */ ) ; + short (*height )( /* WindowOjbect info */ ) ; + void (*draw )( /* WindowOjbect info, short *xs, *ys, int points */ ) ; + void (*clear )( /* WindowOjbect info */ ) ; + void (*close )( /* WindowOjbect info */ ) ; + int (*store )( /* WindowOjbect info */ ) ; + void (*recall )( /* WindowOjbect info, int which */ ) ; + void (*fillRow )( /* WindowOjbect info, int row, pixels[], width */ ) ; + void (*fillCol )( /* WindowOjbect info, int col, pixels[], height */ ) ; + void (*function)( /* WindowOjbect info, short *ys, int segment, skip ; + double offset, scale ; int start, points */ ) ; + int (*read )( /* WindowObject info, FILE *fptr, int which */ ) ; + void (*write )( /* WindowObject info, FILE *fptr */ ) ; + char (*pause )( /* WindowObject info */ ) ; + void (*axes )( /* WindowObject info, char *title ; + double xmin, xmax ; char *xtitle ; + double ymin, ymax ; char *ytitle */ ) ; + void (*marker )( /* WindowObject info, char *text, int start, pts */ ) ; + int (*special )( /* WindowObject info, int code, char *data */ ) ; + } windowEntries /* windowMethods */ ; + +typedef struct _window_class { + struct _window_class *super ; + windowEntries entries ; + } windowsClass ; + +/* external interface to window object */ + +typedef struct _window_object { + windowEntries *entries ; + char window[4] ; /* Window may be accessed as *( (Window) &window_object->window ) */ + /* struct { user data goes here in sub-class 1st item of which is window } ; */ + } *WindowObject ; + + +/* best guess at image structure for portable drawing optimisation */ + +typedef struct _window_image { + char *data ; int bytes_per_line, height, left_bit, right_bit, start_bit ; + } *WindowImage ; + +extern WindowImage window__current_image( /* WindowObject window */ ) ; + +/* #define prototypes to simulate operation as objects and check types */ + + +#define Width( _w ) \ + ( _w )->entries->width( _w ) + +#define Height( _w ) \ + ( _w )->entries->height( _w ) + + +#define Draw( _w, _xs , _ys , _points ) \ + ( _w )->entries->draw( _w, (short *) (_xs), (short *) (_ys), (int) (_points) ) + +#define Plot( _w, _xs , _ys , _points ) \ + ( _w )->entries->draw( _w, (short *) (_xs), (short *) (_ys), (int) -(_points) ) + + +#define Clear( _w ) \ + ( _w )->entries->clear( _w ) + +#define Close( _w ) \ + ( _w )->entries->close( _w ) + + +#define Store( _w ) \ + ( _w )->entries->store( _w ) + +#define Recall( _w, _which ) \ + ( _w )->entries->recall( _w, (int) ( _which ) ) + + +#define FillRow( _w, _row , _input , _black , _white , _match , _height ) \ + ( _w )->entries->fillRow( _w, (int) (_row), (short *) (_input), (int) (_black), (int) (_white), (int *) (_match), (int) (_height) ) + +#define FillCol( _w, _col , _input , _black , _white , _match , _height ) \ + ( _w )->entries->fillCol( _w, (int) (_col), (short *) (_input), (int) (_black), (int) (_white), (int *) (_match), (int) (_height) ) + + +/* function provided for backward compatability */ + +#define Function( _w, _ys , _points , _skip , _offset , _scale ) \ + ( _w )->entries->function( _w, (short *) ( _ys ), abs( (int) ( _points ) ), (int) ( _skip ), (double) ( _offset ), (double) ( _scale ), (int)0, (int)_points ) + +#define Segment( _w, _ys , _segment , _skip , _offset , _scale , _start , _points ) \ + ( _w )->entries->function( _w, (short *) ( _ys ), (int) ( _segment ), (int) ( _skip ), (double) ( _offset ), (double) ( _scale ), (int) ( _start ), (int) ( _points ) ) + + +#define Read( _w, _file, _which ) \ + ( _w )->entries->read( _w, _file, (int) (_which) ) + +#define Write( _w, _file ) \ + ( _w )->entries->write( _w, _file ) + + +#define Pause( _w ) \ + ( _w )->entries->pause( _w ) + +#define Axes( _w, _title , _xmin , _xmax , _xtitle , _ymin, _ymax , _ytitle ) \ + ( _w )->entries->axes( _w, (char *) (_title), (double) (_xmin), (double) (_xmax), (char *) (_xtitle), (double) (_ymin), (double) (_ymax), (char *) (_ytitle) ) + +#define Marker( _w, _label , _p, _points ) \ + ( _w )->entries->marker( _w, (char *) (_label), (int) _p, (int) _points ) + +#define Special( _w, _code , _data ) \ + ( _w )->entries->special( _w, (char *) (_code), (char *) (_data) ) + + +/* standard window object creation routines */ + +#define NewDisplayWindow( _name, _default_x, _default_y, _default_width, _default_height, _pixels ) \ + newDisplayWindow( _name, _default_x, _default_y, _default_width, _default_height, _pixels ) + +#define NewFILEWindow( _name, _default_x, _default_y, _default_width, _default_height, _pixels ) \ + newFILEWindow( _name, _default_x, _default_y, _default_width, _default_height, _pixels ) + +#define NewPSWindow( _name, _default_x, _default_y, _default_width, _default_height, _pixels ) \ + newPSWindow( _name, _default_x, _default_y, _default_width, _default_height, _pixels ) + +#define NewNullWindow( ) \ + newNullWindow( ) + +extern WindowObject newDisplayWindow(), newPSWindow(), newPostScriptWindow(), newFILEWindow(), newNullWindow(), NullWindowObject ; + +extern windowsClass *initPostScriptClass(), *initDisplayPostScriptClass() ;