msystem.h

Go to the documentation of this file.
00001 /********************************************************************\
00002 
00003   Name:         MSYSTEM.H
00004   Created by:   Stefan Ritt
00005 
00006   Contents:     Function declarations and constants for internal
00007                 routines
00008 
00009   $Id: msystem.h 4805 2010-08-31 13:32:31Z olchanski $
00010 
00011 \********************************************************************/
00012 
00013 /**dox***************************************************************/
00014 /** @file msystem.h
00015 The Midas System include file
00016 */
00017 
00018 /** @defgroup msystemincludecode The msystem.h & system.c
00019  */
00020 /** @defgroup msdefineh System Define
00021  */
00022 /** @defgroup msmacroh System Macros
00023  */
00024 /** @defgroup mssectionh System Structure Declaration
00025  */
00026 
00027 /**dox***************************************************************/
00028 /** @addtogroup msystemincludecode
00029  *  
00030  *  @{  */
00031 
00032 /**dox***************************************************************/
00033 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00034 
00035 #include "midasinc.h"
00036 
00037 /**dox***************************************************************/
00038 #endif                          /* DOXYGEN_SHOULD_SKIP_THIS */
00039 
00040 /**dox***************************************************************/
00041 /** @addtogroup msdefineh
00042  *  
00043  *  @{  */
00044 
00045 /**
00046 data representations
00047 */
00048 #define DRI_16              (1<<0)  /**< - */
00049 #define DRI_32              (1<<1)  /**< - */
00050 #define DRI_64              (1<<2)  /**< - */
00051 #define DRI_LITTLE_ENDIAN   (1<<3)  /**< - */
00052 #define DRI_BIG_ENDIAN      (1<<4)  /**< - */
00053 #define DRF_IEEE            (1<<5)  /**< - */
00054 #define DRF_G_FLOAT         (1<<6)  /**< - */
00055 #define DR_ASCII            (1<<7)  /**< - */
00056 
00057 /**dox***************************************************************/
00058           /** @} *//* end of msdefineh */
00059 
00060 /**dox***************************************************************/
00061 /** @addtogroup msmacroh
00062  *  
00063  *  @{  */
00064 
00065 /* Byte and Word swapping big endian <-> little endian */
00066 /**
00067 SWAP WORD macro */
00068 #ifndef WORD_SWAP
00069 #define WORD_SWAP(x) { BYTE _tmp;                               \
00070                        _tmp= *((BYTE *)(x));                    \
00071                        *((BYTE *)(x)) = *(((BYTE *)(x))+1);     \
00072                        *(((BYTE *)(x))+1) = _tmp; }
00073 #endif
00074 
00075 /**
00076 SWAP DWORD macro */
00077 #ifndef DWORD_SWAP
00078 #define DWORD_SWAP(x) { BYTE _tmp;                              \
00079                        _tmp= *((BYTE *)(x));                    \
00080                        *((BYTE *)(x)) = *(((BYTE *)(x))+3);     \
00081                        *(((BYTE *)(x))+3) = _tmp;               \
00082                        _tmp= *(((BYTE *)(x))+1);                \
00083                        *(((BYTE *)(x))+1) = *(((BYTE *)(x))+2); \
00084                        *(((BYTE *)(x))+2) = _tmp; }
00085 #endif
00086 
00087 /**
00088 SWAP QWORD macro */
00089 #ifndef QWORD_SWAP
00090 #define QWORD_SWAP(x) { BYTE _tmp;                              \
00091                        _tmp= *((BYTE *)(x));                    \
00092                        *((BYTE *)(x)) = *(((BYTE *)(x))+7);     \
00093                        *(((BYTE *)(x))+7) = _tmp;               \
00094                        _tmp= *(((BYTE *)(x))+1);                \
00095                        *(((BYTE *)(x))+1) = *(((BYTE *)(x))+6); \
00096                        *(((BYTE *)(x))+6) = _tmp;               \
00097                        _tmp= *(((BYTE *)(x))+2);                \
00098                        *(((BYTE *)(x))+2) = *(((BYTE *)(x))+5); \
00099                        *(((BYTE *)(x))+5) = _tmp;               \
00100                        _tmp= *(((BYTE *)(x))+3);                \
00101                        *(((BYTE *)(x))+3) = *(((BYTE *)(x))+4); \
00102                        *(((BYTE *)(x))+4) = _tmp; }
00103 #endif
00104 
00105 /**dox***************************************************************/
00106           /** @} *//* end of msmacroh */
00107 
00108 /**dox***************************************************************/
00109 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00110 
00111 /**
00112 Definition of implementation specific constants */
00113 #define MESSAGE_BUFFER_SIZE    100000   /**< buffer used for messages */
00114 #define MESSAGE_BUFFER_NAME    "SYSMSG" /**< buffer name for messages */
00115 #define MAX_RPC_CONNECTION     64       /**< server/client connections   */
00116 #define MAX_STRING_LENGTH      256      /**< max string length for odb */
00117 #define NET_BUFFER_SIZE        (ALIGN8(MAX_EVENT_SIZE)+sizeof(EVENT_HEADER)+\
00118 4*8 + sizeof(NET_COMMAND_HEADER))
00119 
00120 /*------------------------------------------------------------------*/
00121 /* flag for conditional compilation of debug messages */
00122 #undef  DEBUG_MSG
00123 
00124 /* flag for local routines (not for pure network clients) */
00125 #if !defined ( OS_MSDOS ) && !defined ( OS_VXWORKS )
00126 #define LOCAL_ROUTINES
00127 #endif
00128 
00129 /* YBOS support not in MSDOS */
00130 #if !defined ( OS_MSDOS )
00131 #define YBOS_SUPPORT
00132 #endif
00133 
00134 /*------------------------------------------------------------------*/
00135 
00136 /* Mapping of function names for socket operations */
00137 
00138 #ifdef OS_MSDOS
00139 
00140 #define closesocket(s) close(s)
00141 #define ioctlsocket(s,c,d) ioctl(s,c,d)
00142 #define malloc(i) farmalloc(i)
00143 
00144 #undef NET_TCP_SIZE
00145 #define NET_TCP_SIZE 0x7FFF
00146 
00147 #undef MAX_EVENT_SIZE
00148 #define MAX_EVENT_SIZE 4096
00149 
00150 #endif /* OS_MSDOS */
00151 
00152 #ifdef OS_VMS
00153 
00154 #define closesocket(s) close(s)
00155 #define ioctlsocket(s,c,d)
00156 
00157 #ifndef FD_SET
00158 typedef struct {
00159    INT fds_bits;
00160 } fd_set;
00161 
00162 #define FD_SET(n, p)    ((p)->fds_bits |= (1 << (n)))
00163 #define FD_CLR(n, p)    ((p)->fds_bits &= ~(1 << (n)))
00164 #define FD_ISSET(n, p)  ((p)->fds_bits & (1 << (n)))
00165 #define FD_ZERO(p)      ((p)->fds_bits = 0)
00166 #endif /* FD_SET */
00167 
00168 #endif /* OS_VMS */
00169 
00170 /* Missing #defines in VMS */
00171 
00172 #ifdef OS_VMS
00173 
00174 #define P_WAIT   0
00175 #define P_NOWAIT 1
00176 #define P_DETACH 4
00177 
00178 #endif
00179 
00180 /* and for UNIX */
00181 
00182 #ifdef OS_UNIX
00183 
00184 #define closesocket(s) close(s)
00185 #define ioctlsocket(s,c,d) ioctl(s,c,d)
00186 #ifndef stricmp
00187 #define stricmp(s1, s2) strcasecmp(s1, s2)
00188 #endif
00189 
00190 #define P_WAIT   0
00191 #define P_NOWAIT 1
00192 #define P_DETACH 4
00193 
00194 extern char **environ;
00195 
00196 #endif
00197 
00198 #ifndef FD_SETSIZE
00199 #define FD_SETSIZE 32
00200 #endif
00201 
00202 /* and VXWORKS */
00203 
00204 #ifdef OS_VXWORKS
00205 
00206 #define P_NOWAIT 1
00207 #define closesocket(s) close(s)
00208 #define ioctlsocket(s,c,d) ioctl(s,c,d)
00209 
00210 #endif
00211 
00212 /* missing O_BINARY for non-PC */
00213 #ifndef O_BINARY
00214 #define O_BINARY 0
00215 #define O_TEXT   0
00216 #endif
00217 
00218 /* min/max/abs macros */
00219 #ifndef MAX
00220 #define MAX(a,b)            (((a) > (b)) ? (a) : (b))
00221 #endif
00222 
00223 #ifndef MIN
00224 #define MIN(a,b)            (((a) < (b)) ? (a) : (b))
00225 #endif
00226 
00227 #ifndef ABS
00228 #define ABS(a)              (((a) < 0)   ? -(a) : (a))
00229 #endif
00230 
00231 /* missing tell() for some operating systems */
00232 #define TELL(fh) lseek(fh, 0, SEEK_CUR)
00233 
00234 /* define file truncation */
00235 #ifdef OS_WINNT
00236 #define TRUNCATE(fh) chsize(fh, TELL(fh))
00237 #else
00238 #define TRUNCATE(fh) ftruncate(fh, TELL(fh))
00239 #endif
00240 
00241 /* reduced shared memory size */
00242 #ifdef OS_SOLARIS
00243 #define MAX_SHM_SIZE      0x20000       /* 128k */
00244 #endif
00245 
00246 /*------------------------------------------------------------------*/
00247 
00248 /* Network structures */
00249 
00250 typedef struct {
00251    DWORD routine_id;            /* routine ID like ID_BM_xxx    */
00252    DWORD param_size;            /* size in Bytes of parameter   */
00253 } NET_COMMAND_HEADER;
00254 
00255 typedef struct {
00256    NET_COMMAND_HEADER header;
00257    char param[32];              /* parameter array              */
00258 } NET_COMMAND;
00259 
00260 
00261 typedef struct {
00262    DWORD serial_number;
00263    DWORD sequence_number;
00264 } UDP_HEADER;
00265 
00266 #define UDP_FIRST 0x80000000l
00267 #define TCP_FAST  0x80000000l
00268 
00269 #define MSG_BM       1
00270 #define MSG_ODB      2
00271 #define MSG_CLIENT   3
00272 #define MSG_SERVER   4
00273 #define MSG_LISTEN   5
00274 #define MSG_WATCHDOG 6
00275 
00276 /* RPC structures */
00277 
00278 struct callback_addr {
00279    char host_name[HOST_NAME_LENGTH];
00280    unsigned short host_port1;
00281    unsigned short host_port2;
00282    unsigned short host_port3;
00283    int debug;
00284    char experiment[NAME_LENGTH];
00285    char directory[MAX_STRING_LENGTH];
00286    char user[NAME_LENGTH];
00287    INT index;
00288 };
00289 
00290 typedef struct {
00291    char host_name[HOST_NAME_LENGTH];    /*  server name        */
00292    INT port;                    /*  ip port                 */
00293    char exp_name[NAME_LENGTH];  /*  experiment to connect   */
00294    int send_sock;               /*  tcp send socket         */
00295    INT remote_hw_type;          /*  remote hardware type    */
00296    char client_name[NAME_LENGTH];       /* name of remote client    */
00297    INT transport;               /*  RPC_TCP/RPC_FTCP        */
00298    INT rpc_timeout;             /*  in milliseconds         */
00299 
00300 } RPC_CLIENT_CONNECTION;
00301 
00302 typedef struct {
00303    char host_name[HOST_NAME_LENGTH];    /*  server name        */
00304    INT port;                    /*  ip port                 */
00305    char exp_name[NAME_LENGTH];  /*  experiment to connect   */
00306    int send_sock;               /*  tcp send socket         */
00307    int recv_sock;               /*  tcp receive socket      */
00308    int event_sock;              /*  event socket            */
00309    INT remote_hw_type;          /*  remote hardware type    */
00310    INT transport;               /*  RPC_TCP/RPC_FTCP        */
00311    INT rpc_timeout;             /*  in milliseconds         */
00312 
00313 } RPC_SERVER_CONNECTION;
00314 
00315 typedef struct {
00316    INT tid;                     /*  thread id               */
00317    char prog_name[NAME_LENGTH]; /*  client program name     */
00318    char host_name[HOST_NAME_LENGTH];    /*  client name        */
00319    int send_sock;               /*  tcp send socket         */
00320    int recv_sock;               /*  tcp receive socket      */
00321    int event_sock;              /*  tcp event socket        */
00322    INT remote_hw_type;          /*  hardware type           */
00323    INT transport;               /*  RPC_TCP/RPC_FTCP        */
00324    INT watchdog_timeout;        /*  in milliseconds         */
00325    DWORD last_activity;         /*  time of last recv       */
00326    INT convert_flags;           /*  convertion flags        */
00327    char *net_buffer;            /*  TCP cache buffer        */
00328    char *ev_net_buffer;
00329    INT net_buffer_size;         /*  size of TCP cache       */
00330    INT write_ptr, read_ptr, misalign;   /* pointers for cache */
00331    INT ev_write_ptr, ev_read_ptr, ev_misalign;
00332    HNDLE odb_handle;            /*  handle to online datab. */
00333    HNDLE client_handle;         /*  client key handle .     */
00334 
00335 } RPC_SERVER_ACCEPTION;
00336 
00337 /**dox***************************************************************/
00338 #endif                          /* DOXYGEN_SHOULD_SKIP_THIS */
00339 
00340 /**dox***************************************************************/
00341 /** @addtogroup mssectionh
00342  *  
00343  *  @{  */
00344 
00345 typedef struct {
00346    INT size;                          /**< size in bytes              */
00347    INT next_free;                     /**< Address of next free block */
00348 } FREE_DESCRIP;
00349 
00350 typedef struct {
00351    INT handle;                        /**< Handle of record base key  */
00352    WORD access_mode;                  /**< R/W flags                  */
00353    WORD flags;                        /**< Data format, ...           */
00354 
00355 } OPEN_RECORD;
00356 
00357 typedef struct {
00358    char name[NAME_LENGTH];      /* name of client             */
00359    INT pid;                     /* process ID                 */
00360    INT unused0;                 /* was thread ID              */
00361    INT unused;                  /* was thread handle          */
00362    INT port;                    /* UDP port for wake up       */
00363    INT num_open_records;        /* number of open records     */
00364    DWORD last_activity;         /* time of last activity      */
00365    DWORD watchdog_timeout;      /* timeout in ms              */
00366    INT max_index;               /* index of last opren record */
00367 
00368    OPEN_RECORD open_record[MAX_OPEN_RECORDS];
00369 
00370 } DATABASE_CLIENT;
00371 
00372 typedef struct {
00373    char name[NAME_LENGTH];      /* name of database           */
00374    INT version;                 /* database version           */
00375    INT num_clients;             /* no of active clients       */
00376    INT max_client_index;        /* index of last client       */
00377    INT key_size;                /* size of key area in bytes  */
00378    INT data_size;               /* size of data area in bytes */
00379    INT root_key;                /* root key offset            */
00380    INT first_free_key;          /* first free key memory      */
00381    INT first_free_data;         /* first free data memory     */
00382 
00383    DATABASE_CLIENT client[MAX_CLIENTS]; /* entries for clients        */
00384 
00385 } DATABASE_HEADER;
00386 
00387 /* Per-process buffer access structure (descriptor) */
00388 
00389 typedef struct {
00390    char name[NAME_LENGTH];      /* Name of database             */
00391    BOOL attached;               /* TRUE if database is attached */
00392    INT client_index;            /* index to CLIENT str. in buf. */
00393    DATABASE_HEADER *database_header;    /* pointer to database header   */
00394    void *database_data;         /* pointer to database data     */
00395    HNDLE semaphore;             /* semaphore handle             */
00396    INT lock_cnt;                /* flag to avoid multiple locks */
00397    HNDLE shm_handle;            /* handle (id) to shared memory */
00398    INT index;                   /* connection index / tid       */
00399    BOOL protect;                /* read/write protection        */
00400 
00401 } DATABASE;
00402 
00403 /* Open record descriptor */
00404 
00405 typedef struct {
00406    HNDLE handle;                /* Handle of record base key  */
00407    HNDLE hDB;                   /* Handle of record's database */
00408    WORD access_mode;            /* R/W flags                  */
00409    void *data;                  /* Pointer to local data      */
00410    void *copy;                  /* Pointer of copy to data    */
00411    INT buf_size;                /* Record size in bytes       */
00412    void (*dispatcher) (INT, INT, void *);       /* Pointer to dispatcher func. */
00413    void *info;                  /* addtl. info for dispatcher */
00414 
00415 } RECORD_LIST;
00416 
00417 /* Event request descriptor */
00418 
00419 typedef struct {
00420    INT buffer_handle;           /* Buffer handle */
00421    short int event_id;          /* same as in EVENT_HEADER */
00422    short int trigger_mask;
00423    void (*dispatcher) (HNDLE, HNDLE, EVENT_HEADER *, void *);   /* Dispatcher func. */
00424 
00425 } REQUEST_LIST;
00426 
00427 /**dox***************************************************************/
00428           /** @} *//* end of mssectionh */
00429 
00430 /**dox***************************************************************/
00431 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00432 
00433 /*---- Logging channel information ---------------------------------*/
00434 
00435 #define CHN_SETTINGS_STR(_name) const char *_name[] = {\
00436 "[Settings]",\
00437 "Active = BOOL : 1",\
00438 "Type = STRING : [8] Disk",\
00439 "Filename = STRING : [256] run%05d.mid",\
00440 "Format = STRING : [8] MIDAS",\
00441 "Compression = INT : 0",\
00442 "ODB dump = BOOL : 1",\
00443 "Log messages = DWORD : 0",\
00444 "Buffer = STRING : [32] SYSTEM",\
00445 "Event ID = INT : -1",\
00446 "Trigger mask = INT : -1",\
00447 "Event limit = DOUBLE : 0",\
00448 "Byte limit = DOUBLE : 0",\
00449 "Subrun Byte limit = DOUBLE : 0",\
00450 "Tape capacity = DOUBLE : 0",\
00451 "Subdir format = STRING : [32]",\
00452 "Current filename = STRING : [256]",\
00453 "",\
00454 "[Statistics]",\
00455 "Events written = DOUBLE : 0",\
00456 "Bytes written = DOUBLE : 0",\
00457 "Bytes written uncompressed = DOUBLE : 0",\
00458 "Bytes written total = DOUBLE : 0",\
00459 "Bytes written subrun = DOUBLE : 0",\
00460 "Files written = DOUBLE : 0",\
00461 "",\
00462 NULL}
00463 
00464 typedef struct {
00465    BOOL active;
00466    char type[8];
00467    char filename[256];
00468    char format[8];
00469    INT compression;
00470    BOOL odb_dump;
00471    DWORD log_messages;
00472    char buffer[32];
00473    INT event_id;
00474    INT trigger_mask;
00475    double event_limit;
00476    double byte_limit;
00477    double subrun_byte_limit;
00478    double tape_capacity;
00479    char subdir_format[32];
00480    char current_filename[256];
00481 } CHN_SETTINGS;
00482 
00483 typedef struct {
00484    double events_written;
00485    double bytes_written;
00486    double bytes_written_uncompressed;
00487    double bytes_written_total;
00488    double bytes_written_subrun;
00489    double files_written;
00490 } CHN_STATISTICS;
00491 
00492 typedef struct {
00493    INT handle;
00494    char path[256];
00495    INT type;
00496    INT format;
00497    INT compression;
00498    INT subrun_number;
00499    INT buffer_handle;
00500    INT msg_buffer_handle;
00501    INT request_id;
00502    INT msg_request_id;
00503    HNDLE stats_hkey;
00504    HNDLE settings_hkey;
00505    CHN_SETTINGS settings;
00506    CHN_STATISTICS statistics;
00507    void **format_info;
00508    FTP_CON *ftp_con;
00509    void *gzfile;
00510 } LOG_CHN;
00511 
00512 #define LOG_TYPE_DISK 1
00513 #define LOG_TYPE_TAPE 2
00514 #define LOG_TYPE_FTP  3
00515 
00516 /*---- VxWorks specific taskSpawn arguments ----------------------*/
00517 
00518 typedef struct {
00519    char name[32];
00520    int priority;
00521    int options;
00522    int stackSize;
00523    int arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10;
00524 } VX_TASK_SPAWN;
00525 
00526 /*---- Channels for ss_suspend_set_dispatch() ----------------------*/
00527 
00528 #define CH_IPC        1
00529 #define CH_CLIENT     2
00530 #define CH_SERVER     3
00531 #define CH_LISTEN     4
00532 
00533 /*---- Function declarations ---------------------------------------*/
00534 
00535 /* make functions callable from a C++ program */
00536 #ifdef __cplusplus
00537 extern "C" {
00538 #endif
00539 
00540    /*---- common function ----*/
00541    INT EXPRT cm_set_path(char *path);
00542    INT EXPRT cm_get_path(char *path);
00543    INT cm_dispatch_ipc(char *message, int s);
00544    INT EXPRT cm_msg_log(INT message_type, const char *message);
00545    INT EXPRT cm_msg_log1(INT message_type, const char *message, const char *facility);
00546    void EXPRT name2c(char *str);
00547 
00548    /*---- buffer manager ----*/
00549    INT bm_lock_buffer(INT buffer_handle);
00550    INT bm_unlock_buffer(INT buffer_handle);
00551    INT bm_notify_client(char *buffer_name, int s);
00552    INT EXPRT bm_mark_read_waiting(BOOL flag);
00553    INT bm_push_event(char *buffer_name);
00554    INT bm_check_buffers(void);
00555    INT EXPRT bm_remove_event_request(INT buffer_handle, INT request_id);
00556    void EXPRT bm_defragment_event(HNDLE buffer_handle, HNDLE request_id,
00557                                   EVENT_HEADER * pevent, void *pdata,
00558                                   void (*dispatcher) (HNDLE, HNDLE,
00559                                                       EVENT_HEADER *, void *));
00560 
00561    /*---- online database ----*/
00562    INT EXPRT db_lock_database(HNDLE database_handle);
00563    INT EXPRT db_unlock_database(HNDLE database_handle);
00564    INT EXPRT db_get_lock_cnt(HNDLE database_handle);
00565    INT db_update_record(INT hDB, INT hKey, int s);
00566    INT db_close_all_records(void);
00567    INT EXPRT db_flush_database(HNDLE hDB);
00568    INT EXPRT db_notify_clients(HNDLE hDB, HNDLE hKey, BOOL bWalk);
00569    INT EXPRT db_set_client_name(HNDLE hDB, const char *client_name);
00570    INT db_delete_key1(HNDLE hDB, HNDLE hKey, INT level, BOOL follow_links);
00571    INT EXPRT db_show_mem(HNDLE hDB, char *result, INT buf_size, BOOL verbose);
00572 
00573    /*---- rpc functions -----*/
00574    RPC_LIST EXPRT *rpc_get_internal_list(INT flag);
00575    INT rpc_server_receive(INT idx, int sock, BOOL check);
00576    INT rpc_server_callback(struct callback_addr *callback);
00577    INT EXPRT rpc_server_accept(int sock);
00578    INT rpc_client_accept(int sock);
00579    INT rpc_get_server_acception(void);
00580    INT rpc_set_server_acception(INT idx);
00581    INT EXPRT rpc_set_server_option(INT item, POINTER_T value);
00582    POINTER_T EXPRT rpc_get_server_option(INT item);
00583    INT recv_tcp_check(int sock);
00584    INT recv_event_check(int sock);
00585    INT rpc_deregister_functions(void);
00586    INT rpc_check_channels(void);
00587    void EXPRT rpc_client_check();
00588    INT rpc_server_disconnect(void);
00589    int EXPRT rpc_get_send_sock(void);
00590    int EXPRT rpc_get_event_sock(void);
00591    INT EXPRT rpc_set_opt_tcp_size(INT tcp_size);
00592    INT EXPRT rpc_get_opt_tcp_size(void);
00593 
00594    /*---- system services ----*/
00595    INT ss_shm_open(const char *name, INT size, void **adr, HNDLE *handle, BOOL get_size);
00596    INT ss_shm_close(const char *name, void *adr, HNDLE handle, INT destroy_flag);
00597    INT ss_shm_flush(const char *name, const void *adr, INT size, HNDLE handle);
00598    INT ss_shm_delete(const char *name);
00599    INT ss_shm_protect(HNDLE handle, void *adr);
00600    INT ss_shm_unprotect(HNDLE handle, void **adr);
00601    INT ss_spawnv(INT mode, char *cmdname, char *argv[]);
00602    INT ss_shell(int sock);
00603    INT EXPRT ss_daemon_init(BOOL keep_stdout);
00604    INT EXPRT ss_system(char *command);
00605    INT EXPRT ss_exec(char *cmd, INT * child_pid);
00606    BOOL EXPRT ss_existpid(INT pid);
00607    INT EXPRT ss_getpid(void);
00608    INT EXPRT ss_gettid(void);
00609    INT ss_set_async_flag(INT flag);
00610    INT EXPRT ss_semaphore_create(const char *semaphore_name, HNDLE * semaphore_handle);
00611    INT EXPRT ss_semaphore_wait_for(HNDLE semaphore_handle, INT timeout);
00612    INT EXPRT ss_semaphore_release(HNDLE semaphore_handle);
00613    INT EXPRT ss_semaphore_delete(HNDLE semaphore_handle, INT destroy_flag);
00614    INT EXPRT ss_mutex_create(MUTEX_T **mutex);
00615    INT EXPRT ss_mutex_wait_for(MUTEX_T *mutex, INT timeout);
00616    INT EXPRT ss_mutex_release(MUTEX_T *mutex);
00617    INT EXPRT ss_mutex_delete(MUTEX_T *mutex);
00618    INT ss_alarm(INT millitime, void (*func) (int));
00619    INT ss_suspend_get_port(INT * port);
00620    INT ss_suspend_set_dispatch(INT channel, void *connection, INT(*dispatch) ());
00621    INT ss_resume(INT port, char *message);
00622    INT ss_suspend_exit(void);
00623    INT ss_exception_handler(void (*func) ());
00624    void EXPRT ss_force_single_thread();
00625    INT EXPRT ss_suspend(INT millisec, INT msg);
00626    midas_thread_t EXPRT ss_thread_create(INT(*func) (void *), void *param);
00627    INT EXPRT ss_thread_kill(midas_thread_t thread_id);
00628    INT EXPRT ss_get_struct_align(void);
00629    INT EXPRT ss_timezone(void);
00630    INT EXPRT ss_stack_get(char ***string);
00631    void EXPRT ss_stack_print();
00632    void EXPRT ss_stack_history_entry(char *tag);
00633    void EXPRT ss_stack_history_dump(char *filename);
00634 
00635    /*---- socket routines ----*/
00636    INT EXPRT send_tcp(int sock, char *buffer, DWORD buffer_size, INT flags);
00637    INT EXPRT recv_tcp(int sock, char *buffer, DWORD buffer_size, INT flags);
00638    INT send_udp(int sock, char *buffer, DWORD buffer_size, INT flags);
00639    INT recv_udp(int sock, char *buffer, DWORD buffer_size, INT flags);
00640    INT EXPRT recv_string(int sock, char *buffer, DWORD buffer_size, INT flags);
00641 
00642    /*---- system logging ----*/
00643    INT EXPRT ss_syslog(const char *message);
00644 
00645    /*---- event buffer routines ----*/
00646    INT EXPRT eb_create_buffer(INT size);
00647    INT EXPRT eb_free_buffer(void);
00648    BOOL EXPRT eb_buffer_full(void);
00649    BOOL EXPRT eb_buffer_empty(void);
00650    EVENT_HEADER EXPRT *eb_get_pointer(void);
00651    INT EXPRT eb_increment_pointer(INT buffer_handle, INT event_size);
00652    INT EXPRT eb_send_events(BOOL send_all);
00653 
00654    /*---- dual memory event buffer routines ----*/
00655    INT EXPRT dm_buffer_create(INT size, INT usize);
00656    INT EXPRT dm_buffer_release(void);
00657    BOOL EXPRT dm_area_full(void);
00658    EVENT_HEADER EXPRT *dm_pointer_get(void);
00659    INT EXPRT dm_pointer_increment(INT buffer_handle, INT event_size);
00660    INT EXPRT dm_area_send(void);
00661    INT EXPRT dm_area_flush(void);
00662    INT EXPRT dm_task(void *pointer);
00663    DWORD EXPRT dm_buffer_time_get(void);
00664    INT EXPRT dm_async_area_send(void *pointer);
00665 
00666    /*---- ring buffer routines ----*/
00667    int EXPRT rb_set_nonblocking();
00668    int EXPRT rb_create(int size, int max_event_size, int *ring_buffer_handle);
00669    int EXPRT rb_delete(int ring_buffer_handle);
00670    int EXPRT rb_get_wp(int handle, void **p, int millisec);
00671    int EXPRT rb_increment_wp(int handle, int size);
00672    int EXPRT rb_get_rp(int handle, void **p, int millisec);
00673    int EXPRT rb_increment_rp(int handle, int size);
00674    int EXPRT rb_get_buffer_level(int handle, int * n_bytes);
00675 
00676 /*---- Include RPC identifiers -------------------------------------*/
00677 
00678 #include "mrpc.h"
00679 
00680 #ifdef __cplusplus
00681 }
00682 #endif
00683 /**dox***************************************************************/
00684 #endif                          /* DOXYGEN_SHOULD_SKIP_THIS */
00685           
00686 /**dox***************************************************************//** @} *//* end of msystemincludecode */

Midas DOC Version 3.0.0 ---- PSI Stefan Ritt ----
Contributions: Pierre-Andre Amaudruz - Sergio Ballestrero - Suzannah Daviel - Doxygen - Peter Green - Qing Gu - Greg Hackman - Gertjan Hofman - Paul Knowles - Exaos Lee - Rudi Meier - Glenn Moloney - Dave Morris - John M O'Donnell - Konstantin Olchanski - Renee Poutissou - Tamsen Schurman - Andreas Suter - Jan M.Wouters - Piotr Adam Zolnierczuk