Rev 39265 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
/******************************************************************************** StatConn: Connector interface between application and interpreter language* Copyright (C) 1999--2006 Thomas Baier** This library is free software; you can redistribute it and/or* modify it under the terms of the GNU Library General Public* License as published by the Free Software Foundation; either* version 2 of the License, or (at your option) any later version.** This library is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU* Library General Public License for more details.** You should have received a copy of the GNU Library General Public* License along with this library; if not, write to the Free* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,* MA 02110-1301, USA.*******************************************************************************/#ifndef _STATCONN_H_#define _STATCONN_H_#ifdef __cplusplusextern "C" {#endif/* system specifics */#include "SC_system.h"#include "bdx.h"/* forward definition */struct _SC_Proxy_Object;struct _SC_CharacterDevice;struct _SC_GraphicsDevice;/* error codes *//* generic error and success codes */#define SC_PROXY_OK 0x00000000#define SC_PROXY_ERR_UNKNOWN 0x80000000#define SC_PROXY_ERR_INVALIDARG 0x80000001#define SC_PROXY_ERR_INVALIDFORMAT 0x80000002#define SC_PROXY_ERR_NOTIMPL 0x80000003/* initialization and termination */#define SC_PROXY_ERR_INITIALIZED 0x80000004#define SC_PROXY_ERR_NOTINITIALIZED 0x80000005/* evaluation, getting and setting symbols */#define SC_PROXY_ERR_INVALIDSYMBOL 0x80000006#define SC_PROXY_ERR_PARSE_INVALID 0x80000007#define SC_PROXY_ERR_PARSE_INCOMPLETE 0x80000008#define SC_PROXY_ERR_UNSUPPORTEDTYPE 0x80000009#define SC_PROXY_ERR_EVALUATE_STOP 0x8000000a/* version mismatch */#define SC_PROXY_ERR_INVALIDINTERFACEVERSION 0x80000010#define SC_PROXY_ERR_INVALIDINTERPRETERVERSION 0x80000011/* type mask values */#define SC_TM_SCALAR_BOOL (BDX_BOOL)#define SC_TM_SCALAR_INT (BDX_INT)#define SC_TM_SCALAR_DOUBLE (BDX_DOUBLE)#define SC_TM_SCALAR_STRING (BDX_STRING)#define SC_TM_SCALAR_ALL (SC_TM_SCALAR_BOOL \| SC_TM_SCALAR_INT \| SC_TM_SCALAR_DOUBLE \| SC_TM_SCALAR_STRING)#define SC_TM_ARRAY_BOOL (BDX_BOOL << 8)#define SC_TM_ARRAY_INT (BDX_INT << 8)#define SC_TM_ARRAY_DOUBLE (BDX_DOUBLE << 8)#define SC_TM_ARRAY_STRING (BDX_STRING << 8)#define SC_TM_ARRAY_ALL (SC_TM_ARRAY_BOOL \| SC_TM_ARRAY_INT \| SC_TM_ARRAY_DOUBLE \| SC_TM_ARRAY_STRING)#define SC_TM_VECTOR_BOOL (BDX_BOOL << 12)#define SC_TM_VECTOR_INT (BDX_INT << 12)#define SC_TM_VECTOR_DOUBLE (BDX_DOUBLE << 12)#define SC_TM_VECTOR_STRING (BDX_STRING << 12)#define SC_TM_VECTOR_ALL (SC_TM_VECTOR_BOOL \| SC_TM_VECTOR_INT \| SC_TM_VECTOR_DOUBLE \| SC_TM_VECTOR_STRING)/* information main keys */#define SC_INFO_MAIN_CONNECTOR 1#define SC_INFO_MAIN_INTERPRETER 2/* information sub keys */#define SC_INFO_SUB_NAME 1#define SC_INFO_SUB_DESCRIPTION 2#define SC_INFO_SUB_COPYRIGHT 3#define SC_INFO_SUB_LICENSE 4#define SC_INFO_SUB_MINORVERSION 5#define SC_INFO_SUB_MAJORVERSION 6/* function type-defs */typedef int (SYSCALL *SC_PROXY_GET_VERSION) (struct _SC_Proxy_Object* object,unsigned long* version);typedef int (SYSCALL *SC_PROXY_INIT) (struct _SC_Proxy_Object* object,char const* parameters);typedef int (SYSCALL *SC_PROXY_TERMINATE) (struct _SC_Proxy_Object* object);typedef int (SYSCALL *SC_PROXY_RETAIN) (struct _SC_Proxy_Object* object);typedef int (SYSCALL *SC_PROXY_RELEASE) (struct _SC_Proxy_Object* object);typedef int (SYSCALL *SC_PROXY_SET_SYMBOL) (struct _SC_Proxy_Object* object,char const* symbol,BDX_Data /* const */ * data);typedef int (SYSCALL *SC_PROXY_GET_SYMBOL) (struct _SC_Proxy_Object* object,char const* symbol,BDX_Data** data);typedef int (SYSCALL *SC_PROXY_EVALUATE) (struct _SC_Proxy_Object* object,char const* command,BDX_Data** data);typedef int (SYSCALL *SC_PROXY_EVALUATE_NORETURN) (struct _SC_Proxy_Object* object,char const* command);typedef int (SYSCALL *SC_PROXY_FREE_DATA_BUFFER) (struct _SC_Proxy_Object* object,BDX_Data* data);typedef int (SYSCALL *SC_PROXY_QUERY_TYPES) (struct _SC_Proxy_Object* object,long* type_mask);typedef int (SYSCALL *SC_PROXY_QUERY_OPS) (struct _SC_Proxy_Object* object,long* op_mask);typedef int (SYSCALL *SC_PROXY_SET_CHARACTERDEVICE)(struct _SC_Proxy_Object* object,struct _SC_CharacterDevice* device);typedef int (SYSCALL *SC_PROXY_QUERY_INFO) (struct _SC_Proxy_Object* object,long main_key,long sub_key,const char** information);typedef int (SYSCALL *SC_PROXY_SET_GRAPHICSDEVICE)(struct _SC_Proxy_Object* object,struct _SC_GraphicsDevice* device);/* character device function typedefs */typedef int (SYSCALL *SC_CHARACTERDEVICE_GET_VERSION)(struct _SC_CharacterDevice* object,unsigned long* version);typedef int (SYSCALL *SC_CHARACTERDEVICE_RETAIN)(struct _SC_CharacterDevice* object);typedef int (SYSCALL *SC_CHARACTERDEVICE_RELEASE)(struct _SC_CharacterDevice* object);typedef int (SYSCALL *SC_CHARACTERDEVICE_WRITE_STRING)(struct _SC_CharacterDevice* object,char const* string);typedef int (SYSCALL *SC_CHARACTERDEVICE_WRITE_STRING_LEVEL)(struct _SC_CharacterDevice* object,char const* string,unsigned long level);/* graphics device function typedefs */typedef int (SYSCALL *SC_GRAPHICSDEVICE_GET_VERSION)(struct _SC_GraphicsDevice* object,unsigned long* version);typedef int (SYSCALL *SC_GRAPHICSDEVICE_RETAIN)(struct _SC_GraphicsDevice* object);typedef int (SYSCALL *SC_GRAPHICSDEVICE_RELEASE)(struct _SC_GraphicsDevice* object);/* really no data, should not be required */typedef int (SYSCALL *SC_GRAPHICSDEVICE_OPEN)(struct _SC_GraphicsDevice* object,char const* display,double w,double h,double gamma,int colormodel,int maxcupe);/* should not be required */typedef void (SYSCALL *SC_GRAPHICSDEVICE_CLOSE)(struct _SC_GraphicsDevice* object);typedef void (SYSCALL *SC_GRAPHICSDEVICE_ACTIVATE)(struct _SC_GraphicsDevice* object);typedef void (SYSCALL *SC_GRAPHICSDEVICE_DEACTIVATE)(struct _SC_GraphicsDevice* object);/* 00-06-22 | baier | added color, line type and width */typedef void (SYSCALL *SC_GRAPHICSDEVICE_LINE)(struct _SC_GraphicsDevice* object,double x1,double y1,double x2,double y2,int color,int line_type,double line_width);/* 00-06-22 | baier | added line type and width */typedef void (SYSCALL *SC_GRAPHICSDEVICE_CIRCLE)(struct _SC_GraphicsDevice* object,double x,double y,double r,int col, /* border color */int border, /* fill color */int line_type,double line_width);typedef void (SYSCALL *SC_GRAPHICSDEVICE_POLYGON)(struct _SC_GraphicsDevice* object,int n,double* x,double* y,int bg, /* border color */int fg /* fill color */);/* 01-01-23 | baier | added "col" parameter */typedef void (SYSCALL *SC_GRAPHICSDEVICE_POLYLINE)(struct _SC_GraphicsDevice* object,int n,double* x,double* y,int col /* color */);/* 00-06-22 | baier | added line type and width */typedef void (SYSCALL *SC_GRAPHICSDEVICE_RECT)(struct _SC_GraphicsDevice* object,double x0,double y0,double x1,double y1,int bg, /* border color */int fg, /* fill color */int line_type,double line_width);/* 00-06-22 | baier | added color, font and size */typedef void (SYSCALL *SC_GRAPHICSDEVICE_TEXT)(struct _SC_GraphicsDevice* object,double x,double y,char const* string,double rot, /* rotation in degrees */double hadj, /* horizontal adjustment */int color,int font, /* 0-31, one of the predefined fonts */int size /* 8-64, point size */);typedef void (SYSCALL *SC_GRAPHICSDEVICE_CLIP)(struct _SC_GraphicsDevice* object,double x0,double x1,double y0,double y1);/* to be removed. refresh of width and heigth should be done on "newpage" */typedef void (SYSCALL *SC_GRAPHICSDEVICE_RESIZE)(struct _SC_GraphicsDevice* object);/* to be removed */typedef void (SYSCALL *SC_GRAPHICSDEVICE_HOLD)(struct _SC_GraphicsDevice* object);/* should clear display AND refresh coordinates */typedef void (SYSCALL *SC_GRAPHICSDEVICE_NEWPAGE)(struct _SC_GraphicsDevice* object);typedef int (SYSCALL *SC_GRAPHICSDEVICE_LOCATOR)(struct _SC_GraphicsDevice* object,double* x,double* y);typedef void (SYSCALL *SC_GRAPHICSDEVICE_MODE)(struct _SC_GraphicsDevice* object,int mode /* 1 when starting drawing, 0 when stopping */);/* 00-06-22 | baier | added font and size parameters */typedef double (SYSCALL *SC_GRAPHICSDEVICE_STRWIDTH)(struct _SC_GraphicsDevice* object,char const* string,int font, /* 0-31, one of the predefined fonts */int size /* 8-64, point size */);/* 00-06-22 | baier | added font and size parameters */typedef void (SYSCALL *SC_GRAPHICSDEVICE_METRICINFO)(struct _SC_GraphicsDevice* object,int character,double* ascent,double* descent,double* width,int font, /* 0-31, one of the predefined fonts */int size /* 8-64, point size */);/** interface version information:** 1 ... obsolete first interface* 2 ... get_version, set_symbol, evaluate_noreturn, evaluate* 3 ... added character devices for output, errors and tracing, info strings* 4 ... pass parameter string in init() function* 5 ... simple graphics device interface*/#define SC_PROXY_INTERFACE_VERSION 5/** interface version information:** 1 ... first version*/#define SC_CHARACTERDEVICE_VERSION 1/** interface version information:** 1 ... first version*/#define SC_GRAPHICSDEVICE_VERSION 1/* used for communication between the COM/CORBA server and R */typedef struct _SC_Proxy_Object_Vtbl{/* get interpreter version */SC_PROXY_GET_VERSION get_version;/* initialize the interpreter */SC_PROXY_INIT init;/* terminate the interpreter */SC_PROXY_TERMINATE terminate;/* increase the reference count to this interface object */SC_PROXY_RETAIN retain;/* decrease the reference count to this interface object, object will be *//* freed when count reaches 0 */SC_PROXY_RELEASE release;/* set a symbol in the interpreter's global namespace to the BDX data passed */SC_PROXY_SET_SYMBOL set_symbol;/* return a symbol's value from the interpreter's global namespace */SC_PROXY_GET_SYMBOL get_symbol;/* evaluate an expression, return result in a BDX data buffer (synchronously) */SC_PROXY_EVALUATE evaluate;/* evaluate an expression, do not return a result (synchronously) */SC_PROXY_EVALUATE_NORETURN evaluate_noreturn;/* return information about BDX data types supported by this interface and *//* the interpreter */SC_PROXY_QUERY_TYPES query_supported_types;/* return information about available functionality in this interface and *//* the interpreter */SC_PROXY_QUERY_OPS query_supported_operations;/* free a BDX data buffer allocated by one of this interface's functions */SC_PROXY_FREE_DATA_BUFFER free_data_buffer;/* set output, error and tracing devices */SC_PROXY_SET_CHARACTERDEVICE set_output_device;/* retrieve information about interface and interpreter */SC_PROXY_QUERY_INFO query_info;/* add and remove a graphics device */SC_PROXY_SET_GRAPHICSDEVICE set_graphics_device;} SC_Proxy_Object_Vtbl;/* character device used for output, (textual) error messages and traces */typedef struct _SC_CharacterDevice_Vtbl{/* get character device version */SC_CHARACTERDEVICE_GET_VERSION get_version;/* increase the reference count to this interface object */SC_CHARACTERDEVICE_RETAIN retain;/* decrease the reference count to this interface object, object will be *//* freed when count reaches 0 */SC_CHARACTERDEVICE_RELEASE release;/* write a string to the output device */SC_CHARACTERDEVICE_WRITE_STRING write_string;/* write a string to the output device. the string is echoed if the passed *//* level is less or equal to the current output level of the device (used *//* for conditional output) */SC_CHARACTERDEVICE_WRITE_STRING_LEVEL write_string_level;} SC_CharacterDevice_Vtbl;/* graphics device */typedef struct _SC_GraphicsDevice_Vtbl{/* get graphics device version */SC_GRAPHICSDEVICE_GET_VERSION get_version;/* increase the reference count to this interface object */SC_GRAPHICSDEVICE_RETAIN retain;/* decrease the reference count to this interface object, object will be *//* freed when count reaches 0 */SC_GRAPHICSDEVICE_RELEASE release;/* interface-specific functions following here! */SC_GRAPHICSDEVICE_OPEN open;SC_GRAPHICSDEVICE_CLOSE close;SC_GRAPHICSDEVICE_ACTIVATE activate;SC_GRAPHICSDEVICE_DEACTIVATE deactivate;SC_GRAPHICSDEVICE_LINE line;SC_GRAPHICSDEVICE_CIRCLE circle;SC_GRAPHICSDEVICE_POLYGON polygon;SC_GRAPHICSDEVICE_POLYLINE polyline;SC_GRAPHICSDEVICE_RECT rect;SC_GRAPHICSDEVICE_TEXT text;SC_GRAPHICSDEVICE_CLIP clip;SC_GRAPHICSDEVICE_RESIZE resize;SC_GRAPHICSDEVICE_HOLD hold;SC_GRAPHICSDEVICE_NEWPAGE newpage;SC_GRAPHICSDEVICE_LOCATOR locator;SC_GRAPHICSDEVICE_MODE mode;SC_GRAPHICSDEVICE_STRWIDTH strwidth;SC_GRAPHICSDEVICE_METRICINFO metricinfo;} SC_GraphicsDevice_Vtbl;/* abstract data type (implementation adds data) */typedef struct _SC_Proxy_Object{SC_Proxy_Object_Vtbl* vtbl;} SC_Proxy_Object;typedef struct _SC_CharacterDevice{SC_CharacterDevice_Vtbl* vtbl;} SC_CharacterDevice;typedef struct _SC_GraphicsDevice{SC_GraphicsDevice_Vtbl* vtbl;} SC_GraphicsDevice;/* entry point: retrieve a proxy object with a given version */typedef int (SYSCALL* SC_PROXY_GET_OBJECT) (SC_Proxy_Object**,unsigned long);#ifdef __cplusplus}#endif#endif