Rev 17323 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
/** StatConn: Connector interface between application and interpreter language* Copyright (C) 1999--2001 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., 59 Temple Place - Suite 330, Boston,* MA 02111-1307, USA** $Id: SC_proxy.h,v 1.5 2001/12/10 09:35:34 ripley Exp $*/#ifndef _STATCONN_H_#define _STATCONN_H_#include "bdx.h"// system-specifics should be moved to some include file#include <windows.h>#define SYSCALL WINAPI#define EXPORT// forward definitionstruct _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-defstypedef 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 typedefstypedef 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 typedefstypedef 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 requiredtypedef 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 requiredtypedef 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 widthtypedef 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 widthtypedef void (SYSCALL *SC_GRAPHICSDEVICE_CIRCLE)(struct _SC_GraphicsDevice* object,double x,double y,double r,int col, // border colorint border, // fill colorint line_type,double line_width);typedef void (SYSCALL *SC_GRAPHICSDEVICE_POLYGON)(struct _SC_GraphicsDevice* object,int n,double* x,double* y,int bg, // border colorint fg // fill color);// 01-01-23 | baier | added "col" parametertypedef 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 widthtypedef void (SYSCALL *SC_GRAPHICSDEVICE_RECT)(struct _SC_GraphicsDevice* object,double x0,double y0,double x1,double y1,int bg, // border colorint fg, // fill colorint line_type,double line_width);// 00-06-22 | baier | added color, font and sizetypedef void (SYSCALL *SC_GRAPHICSDEVICE_TEXT)(struct _SC_GraphicsDevice* object,double x,double y,char const* string,double rot, // rotation in degreesdouble hadj, // horizontal adjustmentint color,int font, // 0-31, one of the predefined fontsint 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 removedtypedef void (SYSCALL *SC_GRAPHICSDEVICE_HOLD)(struct _SC_GraphicsDevice* object);// should clear display AND refresh coordinatestypedef 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 parameterstypedef double (SYSCALL *SC_GRAPHICSDEVICE_STRWIDTH)(struct _SC_GraphicsDevice* object,char const* string,int font, // 0-31, one of the predefined fontsint size // 8-64, point size);// 00-06-22 | baier | added font and size parameterstypedef 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 fontsint 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 Rtypedef struct _SC_Proxy_Object_Vtbl{// get interpreter versionSC_PROXY_GET_VERSION get_version;// initialize the interpreterSC_PROXY_INIT init;// terminate the interpreterSC_PROXY_TERMINATE terminate;// increase the reference count to this interface objectSC_PROXY_RETAIN retain;// decrease the reference count to this interface object, object will be// freed when count reaches 0SC_PROXY_RELEASE release;// set a symbol in the interpreter's global namespace to the BDX data passedSC_PROXY_SET_SYMBOL set_symbol;// return a symbol's value from the interpreter's global namespaceSC_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 interpreterSC_PROXY_QUERY_TYPES query_supported_types;// return information about available functionality in this interface and// the interpreterSC_PROXY_QUERY_OPS query_supported_operations;// free a BDX data buffer allocated by one of this interface's functionsSC_PROXY_FREE_DATA_BUFFER free_data_buffer;// set output, error and tracing devicesSC_PROXY_SET_CHARACTERDEVICE set_output_device;// retrieve information about interface and interpreterSC_PROXY_QUERY_INFO query_info;// add and remove a graphics deviceSC_PROXY_SET_GRAPHICSDEVICE set_graphics_device;} SC_Proxy_Object_Vtbl;// character device used for output, (textual) error messages and tracestypedef struct _SC_CharacterDevice_Vtbl{// get character device versionSC_CHARACTERDEVICE_GET_VERSION get_version;// increase the reference count to this interface objectSC_CHARACTERDEVICE_RETAIN retain;// decrease the reference count to this interface object, object will be// freed when count reaches 0SC_CHARACTERDEVICE_RELEASE release;// write a string to the output deviceSC_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 devicetypedef struct _SC_GraphicsDevice_Vtbl{// get graphics device versionSC_GRAPHICSDEVICE_GET_VERSION get_version;// increase the reference count to this interface objectSC_GRAPHICSDEVICE_RETAIN retain;// decrease the reference count to this interface object, object will be// freed when count reaches 0SC_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 versiontypedef int (SYSCALL* SC_PROXY_GET_OBJECT) (SC_Proxy_Object**,unsigned long);// this is valid for Windows only#define SC_PROXY_GET_OBJECT_FUN "SC_Proxy_get_object@8"#endif