midas.h

Go to the documentation of this file.
00001 /********************************************************************\
00002 
00003   Name:         MIDAS.H
00004   Created by:   Stefan Ritt
00005 
00006   Contents:     Type definitions and function declarations needed
00007                 for MIDAS applications
00008 
00009 
00010   $Log: midas.h,v $
00011   Revision 1.122  2003/11/24 08:22:45  midas
00012   Changed timeouts from INT to DWORD, added ignore_timeout to cm_cleanup, adde '-f' flag to ODBEdit 'cleanup'
00013 
00014   Revision 1.121  2003/11/20 11:28:47  midas
00015   Added db_check_record
00016 
00017   Revision 1.120  2003/06/12 18:34:37  pierre
00018   add ss_tape_get_blockn
00019 
00020   Revision 1.119  2003/05/09 07:40:04  midas
00021   Added extra parameter to cm_get_environment
00022 
00023   Revision 1.118  2003/05/08 19:36:24  midas
00024   Changed size_t into INT
00025 
00026   Revision 1.117  2003/05/07 10:55:47  midas
00027   Export strlcpy
00028 
00029   Revision 1.116  2003/05/02 09:04:50  midas
00030   Version 1.9.3
00031 
00032   Revision 1.115  2003/05/02 09:03:01  midas
00033   Fixed buffer overflows by strlcpy()
00034 
00035   Revision 1.114  2003/04/22 15:14:09  midas
00036   Added #undef GetCurrentTime
00037 
00038   Revision 1.113  2003/04/22 12:00:56  midas
00039   Added rpc_client_check
00040 
00041   Revision 1.112  2003/04/22 10:09:21  midas
00042   Added RPC_NODELAY option
00043 
00044   Revision 1.111  2003/04/15 10:50:00  midas
00045   Removed unnecessary elements in KEY structure
00046 
00047   Revision 1.110  2003/04/15 08:16:48  midas
00048   Increased default ODB size to 1M
00049 
00050   Revision 1.109  2003/04/14 12:58:16  midas
00051   Added event_descrip to equipment
00052 
00053   Revision 1.108  2003/04/09 13:48:18  midas
00054   Added ROOT format
00055 
00056   Revision 1.107  2003/03/26 21:09:46  midas
00057   Corrected version string
00058 
00059   Revision 1.106  2003/03/22 06:56:12  olchansk
00060   add DB_CORRUPTED error code
00061 
00062   Revision 1.105  2003/03/17 06:36:55  olchansk
00063   really remove Windows-style "\r" characters
00064 
00065   Revision 1.104  2002/10/22 03:46:33  pierre
00066   add SS_NO_TAPE
00067 
00068   Revision 1.103  2002/09/19 17:50:22  pierre
00069   remove ^m
00070 
00071   Revision 1.102  2002/09/18 16:36:24  pierre
00072   add bk_list()
00073 
00074   Revision 1.101  2002/09/13 07:32:36  midas
00075   Added client name to cm_cleanup()
00076 
00077   Revision 1.100  2002/06/10 07:06:55  midas
00078   Added 'lock' parameter to db_remove_open_record() to work also remotely
00079 
00080   Revision 1.99  2002/06/06 07:49:46  midas
00081   Added DF_xxx flags for device drivers
00082 
00083   Revision 1.98  2002/06/06 07:15:03  midas
00084   Added demand_priority for SC FE
00085 
00086   Revision 1.97  2002/05/22 22:10:03  midas
00087   Version 1.9.1
00088 
00089   Revision 1.96  2002/05/22 05:43:32  midas
00090   Added extra variables to hs_enum_vars for mhist to display array size
00091 
00092   Revision 1.95  2002/05/16 18:01:13  midas
00093   Added subdir creation in logger and improved program restart scheme
00094 
00095   Revision 1.94  2002/05/15 23:44:47  midas
00096   Added EVENTID_FRAG for fragmented events
00097 
00098   Revision 1.93  2002/05/13 20:36:43  midas
00099   Changed type_t to unsigned int for malloc/free
00100 
00101   Revision 1.92  2002/05/13 17:56:36  midas
00102   Added improved malloc/free functions
00103 
00104   Revision 1.91  2002/05/10 01:41:19  midas
00105   Added optional debug output to cm_transition
00106 
00107   Revision 1.90  2002/05/09 18:16:55  midas
00108   Version 1.9.0
00109 
00110   Revision 1.89  2002/05/08 19:54:40  midas
00111   Added extra parameter to function db_get_value()
00112 
00113   Revision 1.88  2002/03/19 22:15:40  pierre
00114   Added  ~defined (OS_IRIX)
00115 
00116   Revision 1.87  2002/03/13 08:39:01  midas
00117   Added periodic alarms
00118 
00119   Revision 1.86  2001/10/03 08:36:02  midas
00120   Added DB_INVALID_LINK
00121 
00122   Revision 1.85  2001/08/22 13:51:14  midas
00123   Reorganized directio functions
00124 
00125   Revision 1.84  2001/08/08 11:44:59  midas
00126   Release 1.8.3
00127 
00128   Revision 1.83  2001/06/27 12:16:30  midas
00129   Added OS_IRIX
00130 
00131   Revision 1.82  2001/04/05 05:51:03  midas
00132   Added CMD_NAME
00133 
00134   Revision 1.81  2001/04/04 04:12:08  midas
00135   changed slow control commands
00136 
00137   Revision 1.80  2001/02/26 11:57:46  midas
00138   Added CMD_READ and CMD_WRITE
00139 
00140   Revision 1.79  2001/01/29 09:51:54  midas
00141   Put if defined(__linux__) under #if !defined(OS_LINUX)
00142 
00143   Revision 1.78  2001/01/22 08:26:58  midas
00144   Added evaluation of __linux__
00145 
00146   Revision 1.77  2001/01/04 11:27:37  midas
00147   Added bus driver commands and structures
00148 
00149   Revision 1.76  2000/11/20 12:23:17  midas
00150   Version 1.8.2
00151 
00152   Revision 1.75  2000/11/20 11:26:52  midas
00153   Added "use tests" in analyzer request
00154 
00155   Revision 1.74  2000/11/14 08:17:04  midas
00156   Added number of messages for cm_msg_retrieve and in odbedit "old" command
00157 
00158   Revision 1.73  2000/10/23 14:19:05  midas
00159   Added idle period for slow control equipment
00160 
00161   Revision 1.72  2000/09/29 13:31:10  midas
00162   ODBEdit cleanup now deletes open record with no client attached to
00163 
00164   Revision 1.71  2000/09/28 13:01:25  midas
00165   Added manual triggered events
00166 
00167   Revision 1.70  2000/08/21 14:19:11  midas
00168   bk_close return bank size
00169 
00170   Revision 1.69  2000/08/11 11:43:50  midas
00171   Added cm_msg1 to produce messages which go to a differnt logging file
00172 
00173   Revision 1.68  2000/06/07 10:49:07  midas
00174   Release 1.8.1
00175 
00176   Revision 1.67  2000/06/06 13:45:11  midas
00177   Added locking of histos
00178 
00179   Revision 1.66  2000/05/08 14:29:37  midas
00180   Added delete option in ELog
00181 
00182   Revision 1.65  2000/04/26 20:23:47  pierre
00183   - Moved doc++ comments for functions to midas.c (macros still in there)
00184 
00185   Revision 1.64  2000/04/17 17:07:05  pierre
00186   - new arg in hs_dump and hs_fdump (for mhist)
00187   - first round of doc++ comments
00188 
00189   Revision 1.63  2000/03/08 17:35:56  midas
00190   Version 1.8.0
00191 
00192   Revision 1.62  2000/03/02 21:57:31  midas
00193   Added new slow control commands
00194 
00195   Revision 1.61  2000/03/01 00:52:34  midas
00196   Added num_subevents into equipment, made events_sent a double
00197 
00198   Revision 1.60  2000/02/29 02:09:33  midas
00199   Added cm_is_ctrlc_pressed and cm_ack_ctrlc_pressed
00200 
00201   Revision 1.59  2000/02/25 22:22:45  midas
00202   Added abort feature in db_scan_tree
00203 
00204   Revision 1.58  2000/02/25 20:22:23  midas
00205   Added super-event scheme
00206 
00207   Revision 1.57  2000/02/24 22:33:16  midas
00208   Added deferred transitions
00209 
00210   Revision 1.56  2000/02/15 11:07:50  midas
00211   Changed GET_xxx to bit flags
00212 
00213   Revision 1.55  2000/02/09 08:03:27  midas
00214   Changed version to 1.7.1
00215 
00216   Revision 1.54  1999/12/08 00:29:34  pierre
00217   - Add CM_SET_LABEL for cd_gen/dd_epca (chn_acc)
00218 
00219   Revision 1.53  1999/11/19 09:49:36  midas
00220   Added watchdog_timeout to cm_set_client_info
00221 
00222   Revision 1.52  1999/11/09 13:17:00  midas
00223   Changed shared memory function names to ss_shm_xxx instead ss_xxx_shm
00224 
00225   Revision 1.51  1999/11/08 13:55:54  midas
00226   Added AT_xxx
00227 
00228   Revision 1.50  1999/11/04 15:53:54  midas
00229   Added some slow control commands
00230 
00231   Revision 1.49  1999/10/18 14:41:50  midas
00232   Use /programs/<name>/Watchdog timeout in all programs as timeout value. The
00233   default value can be submitted by calling cm_connect_experiment1(..., timeout)
00234 
00235   Revision 1.48  1999/10/08 15:07:04  midas
00236   Program check creates new internal alarm when triggered
00237 
00238   Revision 1.47  1999/10/07 13:17:34  midas
00239   Put a few EXPRT im msystem.h to make NT happy, updated NT makefile
00240 
00241   Revision 1.46  1999/10/06 08:56:33  midas
00242   Added /programs/xxx/required flag
00243 
00244   Revision 1.45  1999/09/27 13:49:03  midas
00245   Added bUnique parameter to cm_shutdown
00246 
00247   Revision 1.44  1999/09/27 12:54:55  midas
00248   Finished alarm system
00249 
00250   Revision 1.43  1999/09/23 12:45:48  midas
00251   Added 32 bit banks
00252 
00253   Revision 1.42  1999/09/22 15:39:36  midas
00254   Logger won't start run if disk file already exists
00255 
00256   Revision 1.41  1999/09/21 13:49:02  midas
00257   Added PROGRAM_INFO
00258 
00259   Revision 1.40  1999/09/17 15:06:46  midas
00260   Moved al_check into cm_yield() and rpc_server_thread
00261 
00262   Revision 1.39  1999/09/17 11:54:43  midas
00263   OS_LINUX & co automatically define OS_UNIX
00264 
00265   Revision 1.38  1999/09/17 11:48:04  midas
00266   Alarm system half finished
00267 
00268   Revision 1.37  1999/09/15 13:33:32  midas
00269   Added remote el_submit functionality
00270 
00271   Revision 1.36  1999/09/14 15:15:43  midas
00272   Moved el_xxx funtions into midas.c
00273 
00274   Revision 1.35  1999/09/14 11:46:04  midas
00275   Added EL_FIRST_MESSAGE
00276 
00277   Revision 1.34  1999/08/31 15:12:34  midas
00278   Added EL_LAST_MSG
00279 
00280   Revision 1.33  1999/08/26 15:18:22  midas
00281   Added EL_xxx codes
00282 
00283   Revision 1.32  1999/08/20 13:31:18  midas
00284   Analyzer saves and reloads online histos
00285 
00286   Revision 1.31  1999/08/03 11:15:07  midas
00287   Added bm_skip_event
00288 
00289   Revision 1.30  1999/07/15 07:35:12  midas
00290   Added ss_ctrlc_handler
00291 
00292   Revision 1.29  1999/07/13 08:24:27  midas
00293   Added ANA_TEST
00294 
00295   Revision 1.28  1999/06/28 12:01:33  midas
00296   Added hs_fdump
00297 
00298   Revision 1.27  1999/06/25 12:02:12  midas
00299   Added bk_delete function
00300 
00301   Revision 1.26  1999/06/23 09:58:28  midas
00302   Fixed typo
00303 
00304   Revision 1.25  1999/05/05 12:01:42  midas
00305   Added and modified hs_xxx functions
00306 
00307   Revision 1.24  1999/04/30 10:58:20  midas
00308   Added mode to rpc_set_debug
00309 
00310   Revision 1.23  1999/04/27 11:11:39  midas
00311   Added rpc_register_client
00312 
00313   Revision 1.22  1999/04/23 11:43:15  midas
00314   Increased version to 1.7.0
00315 
00316   Revision 1.21  1999/04/19 07:46:43  midas
00317   Added cm_msg_retrieve
00318 
00319   Revision 1.20  1999/04/15 09:59:09  midas
00320   Added key name to db_get_key_info
00321 
00322   Revision 1.19  1999/04/13 12:20:42  midas
00323   Added db_get_data1 (for Java)
00324 
00325   Revision 1.18  1999/04/08 15:23:46  midas
00326   Added CF_ASCII and db_get_key_info
00327 
00328   Revision 1.17  1999/03/02 10:00:07  midas
00329   Added ANA_CONTINUE and ANA_SKIP
00330 
00331   Revision 1.16  1999/02/18 13:06:27  midas
00332   Release 1.6.3
00333 
00334   Revision 1.15  1999/02/18 11:20:39  midas
00335   Added "level" parameter to db_scan_tree and db_scan_tree_link
00336 
00337   Revision 1.14  1999/02/11 13:20:29  midas
00338   Changed cm_msg from void to INT
00339 
00340   Revision 1.13  1999/02/09 14:38:54  midas
00341   Added debug logging facility
00342 
00343   Revision 1.12  1999/01/20 09:03:38  midas
00344   Added LAM_SOURCE_CRATE and LAM_SOURCE_STATION macros
00345 
00346   Revision 1.11  1999/01/19 10:26:39  midas
00347   Changed CRATE and STATION macros to LAM_SOURCE and LAM_STATION
00348 
00349   Revision 1.10  1999/01/13 09:40:48  midas
00350   Added db_set_data_index2 function
00351 
00352   Revision 1.9  1998/12/11 11:23:17  midas
00353   Release 1.6.2
00354 
00355   Revision 1.8  1998/12/10 10:18:38  midas
00356   Added SS_END_OF_FILE
00357 
00358   Revision 1.7  1998/10/29 15:58:05  midas
00359   Release 1.6.1
00360 
00361   Revision 1.6  1998/10/23 14:35:16  midas
00362   Added version comment
00363 
00364   Revision 1.5  1998/10/23 14:21:35  midas
00365   - Modified version scheme from 1.06 to 1.6.0
00366   - cm_get_version() now returns versino as string
00367 
00368   Revision 1.4  1998/10/23 13:11:13  midas
00369   Modified release number to 1.6
00370 
00371   Revision 1.3  1998/10/22 12:40:20  midas
00372   Added "oflag" to ss_tape_open()
00373 
00374   Revision 1.2  1998/10/12 12:18:59  midas
00375   Added Log tag in header
00376 
00377 
00378   Previous Revision history
00379   ------------------------------------------------------------------
00380   date         by    modification
00381   ---------    ---   ------------------------------------------------
00382   11-NOV-95    SR    created
00383   03-JUN-97    SR    increased number of clients to 32
00384 
00385 \********************************************************************/
00386 
00387 #ifndef _MIDAS_H_
00388 #define _MIDAS_H_
00389 
00390 /*------------------------------------------------------------------*/
00391 
00392 /* MIDAS library version number. This value is returned by 
00393    cm_get_version and will be incremented whenever changes are done
00394    to the MIDAS library. First digit is major release, second
00395    digit is minor release, third digit is patch level */
00396 
00397 /**dox***************************************************************/
00398 /** @file midas.h
00399 The main include file
00400 */
00401 
00402 /** @defgroup midasincludecode The midas.h & midas.c
00403  */
00404 /** @defgroup mdefineh Midas #define 
00405  */
00406 /** @defgroup mmacroh Midas Macros
00407  */
00408 /** @defgroup mdeferrorh Midas Error definition
00409  */
00410 /** @defgroup msectionh Midas Structure Declaration
00411  */
00412 
00413 /**dox***************************************************************/
00414 /** @addtogroup midasincludecode
00415  *  
00416  *  @{  */
00417 
00418 #define MIDAS_VERSION "1.9.3"
00419 
00420 /**dox***************************************************************/
00421 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00422 
00423 /*------------------------------------------------------------------*/
00424 
00425 /* find out on which operating system we are running */
00426 
00427 #if defined( VAX ) || defined( __VMS )
00428 #define OS_VMS
00429 #endif
00430 
00431 #if defined( _MSC_VER )
00432 #define OS_WINNT
00433 #endif
00434 
00435 #if defined( __MSDOS__ )
00436 #define OS_MSDOS
00437 #endif
00438 
00439 #if defined ( vxw )
00440 #define OS_VXWORKS
00441 #undef OS_UNIX
00442 #endif
00443 
00444 #if !defined(OS_LINUX)
00445 #if defined ( __linux__ )
00446 #define OS_LINUX
00447 #endif
00448 #endif
00449 
00450 #if defined(OS_LINUX) || defined(OS_OSF1) || defined(OS_ULTRIX) || defined(OS_FREEBSD) || defined(OS_SOLARIS) || defined(OS_IRIX)
00451 #define OS_UNIX
00452 #endif
00453 
00454 #if !defined(OS_IRIX) && !defined(OS_VMS) && !defined(OS_MSDOS) && !defined(OS_UNIX) && !defined(OS_VXWORKS) && !defined(OS_WINNT)
00455 #error MIDAS cannot be used on this operating system
00456 #endif
00457 
00458 /*------------------------------------------------------------------*/
00459 
00460 /* Define basic data types */
00461 
00462 #ifndef MIDAS_TYPE_DEFINED
00463 #define MIDAS_TYPE_DEFINED
00464 
00465 typedef unsigned char BYTE;
00466 typedef unsigned short int WORD;
00467 
00468 #ifdef __alpha
00469 typedef unsigned int DWORD;
00470 #else
00471 typedef unsigned long int DWORD;
00472 #endif
00473 
00474 #ifndef OS_WINNT
00475 #ifndef OS_VXWORKS
00476 typedef DWORD BOOL;
00477 #endif
00478 #endif
00479 
00480 #endif                          /* MIDAS_TYPE_DEFINED */
00481 
00482 /*
00483   Definitions depending on integer types:
00484 
00485   Note that the alpha chip uses 32 bit integers by default.
00486   Therefore always use 'INT' instead 'int'.
00487 */
00488 #if defined(OS_MSDOS)
00489 typedef long int INT;
00490 #elif defined( OS_WINNT )
00491 
00492 /* INT predefined in windows.h */
00493 #ifndef _INC_WINDOWS
00494 #include <windows.h>
00495 #endif
00496 
00497 #else
00498 typedef int INT;
00499 #endif
00500 
00501 typedef INT HNDLE;
00502 
00503 /* Include vxWorks for BOOL definition */
00504 #ifdef OS_VXWORKS
00505 #ifndef __INCvxWorksh
00506 #include <vxWorks.h>
00507 #endif
00508 #endif
00509 
00510 /*
00511   Definitions depending on pointer types:
00512 
00513   Note that the alpha chip uses 64 bit pointers by default.
00514   Therefore, when converting pointer to integers, always
00515   use the (PTYPE) cast.
00516 */
00517 #ifdef __alpha
00518 #define PTYPE              long int
00519 #else
00520 #define PTYPE              int
00521 #endif
00522 
00523 #define TRUE  1
00524 #define FALSE 0
00525 
00526 /* directory separator */
00527 #if defined(OS_MSDOS) || defined(OS_WINNT)
00528 #define DIR_SEPARATOR     '\\'
00529 #define DIR_SEPARATOR_STR "\\"
00530 #elif defined(OS_VMS)
00531 #define DIR_SEPARATOR     ']'
00532 #define DIR_SEPARATOR_STR "]"
00533 #else
00534 #define DIR_SEPARATOR     '/'
00535 #define DIR_SEPARATOR_STR "/"
00536 #endif
00537 
00538 /* inline functions */
00539 #if defined( _MSC_VER )
00540 #define INLINE __inline
00541 #elif defined(__GNUC__)
00542 #define INLINE __inline__
00543 #else
00544 #define INLINE
00545 #endif
00546 
00547 /**dox***************************************************************/
00548 #endif                          /* DOXYGEN_SHOULD_SKIP_THIS */
00549 
00550 /*------------------------------------------------------------------*/
00551 
00552 /* Definition of implementation specific constants */
00553 
00554 /* all buffer sizes must be multiples of 4 ! */
00555 
00556 #ifdef OS_WINNT
00557 #define TAPE_BUFFER_SIZE       0x100000      /**< buffer size for taping data */
00558 #else
00559 #define TAPE_BUFFER_SIZE       0x8000        /**< buffer size for taping data */
00560 #endif
00561 #define NET_TCP_SIZE           0xFFFF        /**< maximum TCP transfer        */
00562 #define OPT_TCP_SIZE           8192          /**< optimal TCP buffer size     */
00563 #define NET_UDP_SIZE           8192          /**< maximum UDP transfer        */
00564 
00565 #define EVENT_BUFFER_SIZE      0x100000      /**< buffer used for events      */
00566 #define EVENT_BUFFER_NAME      "SYSTEM"      /**< buffer name for commands    */
00567 #define MAX_EVENT_SIZE         0x80000       /**< maximum event size 512k     */
00568 #define DEFAULT_EVENT_BUFFER_SIZE 0x200000;  /**< 2M                          */
00569 #define DEFAULT_ODB_SIZE       0x100000      /**< online database 1M          */
00570 
00571 #define NAME_LENGTH            32            /**< length of names, mult.of 8! */
00572 #define HOST_NAME_LENGTH       256           /**< length of TCP/IP names      */
00573 #define MAX_CLIENTS            32            /**< client processes per buf/db */
00574 #define MAX_EVENT_REQUESTS     10            /**< event requests per client   */
00575 #define MAX_OPEN_RECORDS       100           /**< number of open DB records   */
00576 #define MAX_ODB_PATH           256           /**< length of path in ODB       */
00577 #define MAX_EXPERIMENT         32            /**< number of different exp.    */
00578 #define BANKLIST_MAX           32            /**< max # of banks in event     */
00579 #define STRING_BANKLIST_MAX    BANKLIST_MAX * 4   /**< for bk_list()          */
00580 
00581 
00582 #define MIDAS_TCP_PORT 1175     /* port under which server is listening */
00583 
00584 /* Timeouts [ms] */
00585 #define DEFAULT_RPC_TIMEOUT    10000
00586 #define WATCHDOG_INTERVAL      1000
00587 
00588 #define DEFAULT_WATCHDOG_TIMEOUT 10000
00589 
00590 /*------------------------------------------------------------------*/
00591 
00592 /* Enumeration definitions */
00593 
00594 /**dox***************************************************************/
00595 /** @addtogroup mdefineh
00596  *  
00597  *  @{  */
00598 
00599 /**
00600 System states */
00601 #define STATE_STOPPED 1      /**< MIDAS run stopped                  */
00602 #define STATE_PAUSED  2      /**< MIDAS run paused                   */
00603 #define STATE_RUNNING 3      /**< MIDAS run running                  */
00604 
00605 /**
00606 Data format */
00607 #define FORMAT_MIDAS  1       /**< MIDAS banks                        */
00608 #define FORMAT_YBOS   2       /**< YBOS  banks                        */
00609 #define FORMAT_ASCII  3       /**< ASCII format                       */
00610 #define FORMAT_FIXED  4       /**< Fixed length binary records        */
00611 #define FORMAT_DUMP   5       /**< Dump (detailed ASCII) format       */
00612 #define FORMAT_HBOOK  6       /**< CERN hbook (rz) format             */
00613 #define FORMAT_ROOT   7       /**< CERN ROOT format                   */
00614 
00615 /**
00616 Event Sampling type */
00617 #define GET_ALL   (1<<0)      /**< get all events (consume)           */
00618 #define GET_SOME  (1<<1)      /**< get as much as possible (sampling) */
00619 #define GET_FARM  (1<<2)      /**< distribute events over several
00620                                  clients (farming)                  */
00621 
00622 /**
00623 Data types Definition                         min      max    */
00624 #define TID_BYTE      1       /**< unsigned byte         0       255    */
00625 #define TID_SBYTE     2       /**< signed byte         -128      127    */
00626 #define TID_CHAR      3       /**< single character      0       255    */
00627 #define TID_WORD      4       /**< two bytes             0      65535   */
00628 #define TID_SHORT     5       /**< signed word        -32768    32767   */
00629 #define TID_DWORD     6       /**< four bytes            0      2^32-1  */
00630 #define TID_INT       7       /**< signed dword        -2^31    2^31-1  */
00631 #define TID_BOOL      8       /**< four bytes bool       0        1     */
00632 #define TID_FLOAT     9       /**< 4 Byte float format                  */
00633 #define TID_DOUBLE   10       /**< 8 Byte float format                  */
00634 #define TID_BITFIELD 11       /**< 32 Bits Bitfield      0  111... (32) */
00635 #define TID_STRING   12       /**< zero terminated string               */
00636 #define TID_ARRAY    13       /**< array with unknown contents          */
00637 #define TID_STRUCT   14       /**< structure with fixed length          */
00638 #define TID_KEY      15       /**< key in online database               */
00639 #define TID_LINK     16       /**< link in online database              */
00640 #define TID_LAST     17       /**< end of TID list indicator            */
00641 
00642 /**
00643 Synchronous / Asynchronous flags */
00644 #define SYNC          0
00645 #define ASYNC         1
00646 
00647 /**
00648 Access modes */
00649 #define MODE_READ      (1<<0)
00650 #define MODE_WRITE     (1<<1)
00651 #define MODE_DELETE    (1<<2)
00652 #define MODE_EXCLUSIVE (1<<3)
00653 #define MODE_ALLOC     (1<<7)
00654 
00655 /**
00656 RPC options */
00657 #define RPC_OTIMEOUT       1
00658 #define RPC_OTRANSPORT     2
00659 #define RPC_OCONVERT_FLAG  3
00660 #define RPC_OHW_TYPE       4
00661 #define RPC_OSERVER_TYPE   5
00662 #define RPC_OSERVER_NAME   6
00663 #define RPC_CONVERT_FLAGS  7
00664 #define RPC_ODB_HANDLE     8
00665 #define RPC_CLIENT_HANDLE  9
00666 #define RPC_SEND_SOCK      10
00667 #define RPC_WATCHDOG_TIMEOUT 11
00668 #define RPC_NODELAY        12
00669 
00670 #define RPC_TCP            0
00671 #define RPC_FTCP           1
00672 
00673 /**
00674 Watchdog flags */
00675 #define WF_WATCH_ME   (1<<0)    /* see cm_set_watchdog_flags   */
00676 #define WF_CALL_WD    (1<<1)
00677 
00678 /**
00679 Transitions values */
00680 #define TR_START      (1<<0)  /**< Start transition  */
00681 #define TR_STOP       (1<<1)  /**< Stop transition  */
00682 #define TR_PAUSE      (1<<2)  /**< Pause transition */
00683 #define TR_RESUME     (1<<3)  /**< Resume transition  */
00684 #define TR_PRESTART   (1<<4)
00685 #define TR_POSTSTART  (1<<5)
00686 #define TR_PRESTOP    (1<<6)
00687 #define TR_POSTSTOP   (1<<7)
00688 #define TR_PREPAUSE   (1<<8)
00689 #define TR_POSTPAUSE  (1<<9)
00690 #define TR_PRERESUME  (1<<10)
00691 #define TR_POSTRESUME (1<<11)
00692 #define TR_DEFERRED   (1<<12)
00693 
00694 /** 
00695 Equipment types */
00696 #define EQ_PERIODIC   (1<<0)   /**< Periodic Event */
00697 #define EQ_POLLED     (1<<1)   /**< Polling Event */
00698 #define EQ_INTERRUPT  (1<<2)   /**< Interrupt Event */
00699 #define EQ_SLOW       (1<<3)   /**< Slow Control Event */
00700 #define EQ_MANUAL_TRIG (1<<4)  /**< Manual triggered Event */
00701 #define EQ_FRAGMENTED (1<<5)   /**< Fragmented Event */
00702 
00703 /** 
00704 Read - On flags */
00705 #define RO_RUNNING    (1<<0)   /**< While running */
00706 #define RO_STOPPED    (1<<1)   /**< Before stopping the run */
00707 #define RO_PAUSED     (1<<2)   /**< ??? */
00708 #define RO_BOR        (1<<3)   /**< At the Begin of run */
00709 #define RO_EOR        (1<<4)   /**< At the End of run */
00710 #define RO_PAUSE      (1<<5)   /**< Before pausing the run */
00711 #define RO_RESUME     (1<<6)   /**< Before resuming the run */
00712 
00713 #define RO_TRANSITIONS (RO_BOR|RO_EOR|RO_PAUSE|RO_RESUME)      /**< At all transitions */
00714 #define RO_ALWAYS      (0xFF)      /**<  Always (independent of the run status) */
00715 
00716 #define RO_ODB        (1<<8)   /**< Submit data to ODB only */
00717 
00718 /**dox***************************************************************/
00719 /** @} */// end of mdefineh
00720 
00721 /**
00722 special characters */
00723 #define CH_BS             8
00724 #define CH_TAB            9
00725 #define CH_CR            13
00726 
00727 #define CH_EXT 0x100
00728 
00729 #define CH_HOME   (CH_EXT+0)
00730 #define CH_INSERT (CH_EXT+1)
00731 #define CH_DELETE (CH_EXT+2)
00732 #define CH_END    (CH_EXT+3)
00733 #define CH_PUP    (CH_EXT+4)
00734 #define CH_PDOWN  (CH_EXT+5)
00735 #define CH_UP     (CH_EXT+6)
00736 #define CH_DOWN   (CH_EXT+7)
00737 #define CH_RIGHT  (CH_EXT+8)
00738 #define CH_LEFT   (CH_EXT+9)
00739 
00740 /* event sources in equipment */
00741 /**
00742 Code the LAM crate and LAM station into a bitwise register.
00743 @param c Crate number
00744 @param s Slot number
00745 */
00746 #define LAM_SOURCE(c, s)         (c<<24 | ((s) & 0xFFFFFF))
00747 
00748 /** 
00749 Code the Station number bitwise for the LAM source.
00750 @param s Slot number
00751 */
00752 #define LAM_STATION(s)           (1<<(s-1))
00753 
00754 /** 
00755 Convert the coded LAM crate to Crate number.
00756 @param c coded crate
00757 */
00758 #define LAM_SOURCE_CRATE(c)      (c>>24)
00759 
00760 /** 
00761 Convert the coded LAM station to Station number.
00762 @param s Slot number
00763 */
00764 #define LAM_SOURCE_STATION(s)    ((s) & 0xFFFFFF)
00765 
00766 /**
00767 CNAF commands */
00768 #define CNAF        0x1         /* normal read/write                */
00769 #define CNAF_nQ     0x2         /* Repeat read until noQ            */
00770 
00771 #define CNAF_INHIBIT_SET         0x100
00772 #define CNAF_INHIBIT_CLEAR       0x101
00773 #define CNAF_CRATE_CLEAR         0x102
00774 #define CNAF_CRATE_ZINIT         0x103
00775 #define CNAF_TEST                0x110
00776 
00777 /**dox***************************************************************/
00778 /** @addtogroup mmacroh
00779  *  
00780  *  @{
00781  */
00782 
00783 /**
00784 max */
00785 #ifndef max
00786 #define max(a,b)            (((a) > (b)) ? (a) : (b))
00787 #endif
00788 
00789 /**
00790 min */
00791 #ifndef min
00792 #define min(a,b)            (((a) < (b)) ? (a) : (b))
00793 #endif
00794 
00795 /*------------------------------------------------------------------*/
00796 
00797 /**
00798 Align macro for data alignment on 8-byte boundary */
00799 #define ALIGN(x)  (((x)+7) & ~7)
00800 
00801 /**
00802 Align macro for variable data alignment */
00803 #define VALIGN(adr,align)  (((PTYPE) (adr)+align-1) & ~(align-1))
00804 
00805 /**dox***************************************************************/
00806 /** @} */// end of mmacroh
00807 
00808 /**dox***************************************************************/
00809 /** @addtogroup mdefineh
00810  *  
00811  *  @{  */
00812 /*
00813 * Bit flags */
00814 #define EVENTID_ALL        -1   /* any event id                   */
00815 #define TRIGGER_ALL        -1   /* any type of trigger            */
00816 
00817 /**
00818 System message types */
00819 #define MT_ERROR           (1<<0)     /**< - */
00820 #define MT_INFO            (1<<1)     /**< - */
00821 #define MT_DEBUG           (1<<2)     /**< - */
00822 #define MT_USER            (1<<3)     /**< - */
00823 #define MT_LOG             (1<<4)     /**< - */
00824 #define MT_TALK            (1<<5)     /**< - */
00825 #define MT_CALL            (1<<6)     /**< - */
00826 #define MT_ALL              0xFF      /**< - */
00827 
00828 #define MERROR             MT_ERROR, __FILE__, __LINE__ /**< - */
00829 #define MINFO              MT_INFO,  __FILE__, __LINE__ /**< - */
00830 #define MDEBUG             MT_DEBUG, __FILE__, __LINE__ /**< - */
00831 #define MUSER              MT_USER,  __FILE__, __LINE__ /**< produced by interactive user */
00832 #define MLOG               MT_LOG,   __FILE__, __LINE__ /**< info message which is only logged */
00833 #define MTALK              MT_TALK,  __FILE__, __LINE__ /**< info message for speech system */
00834 #define MCALL              MT_CALL,  __FILE__, __LINE__ /**< info message for telephone call */
00835 
00836 /**dox***************************************************************/
00837 /** @} */// end of mdefineh
00838 
00839 /**dox***************************************************************/
00840 /** @addtogroup mdeferrorh
00841  *  
00842  *  @{
00843  */
00844 
00845 /**dox***************************************************************/
00846 /**
00847  @defgroup err21 Status and error codes
00848  @{ */
00849 #define SUCCESS                       1 /**< Success */
00850 #define CM_SUCCESS                    1 /**< Same  */
00851 #define CM_SET_ERROR                102 /**< set  */
00852 #define CM_NO_CLIENT                103 /**< nobody */
00853 #define CM_DB_ERROR                 104 /**< db access error */
00854 #define CM_UNDEF_EXP                105 /**< - */
00855 #define CM_VERSION_MISMATCH         106 /**< - */
00856 #define CM_SHUTDOWN                 107 /**< - */
00857 #define CM_WRONG_PASSWORD           108 /**< - */
00858 #define CM_UNDEF_ENVIRON            109 /**< - */
00859 #define CM_DEFERRED_TRANSITION      110 /**< - */
00860 #define CM_TRANSITION_IN_PROGRESS   111 /**< - */
00861 /**dox***************************************************************/
00862 /** @} */// end of err21
00863 
00864 /**dox***************************************************************/
00865 /**
00866  @defgroup err22 Buffer Manager error codes
00867  @{ */
00868 #define BM_SUCCESS                    1   /**< - */
00869 #define BM_CREATED                  202   /**< - */
00870 #define BM_NO_MEMORY                203   /**< - */
00871 #define BM_INVALID_NAME             204   /**< - */
00872 #define BM_INVALID_HANDLE           205   /**< - */
00873 #define BM_NO_SLOT                  206   /**< - */
00874 #define BM_NO_MUTEX                 207   /**< - */
00875 #define BM_NOT_FOUND                208   /**< - */
00876 #define BM_ASYNC_RETURN             209   /**< - */
00877 #define BM_TRUNCATED                210   /**< - */
00878 #define BM_MULTIPLE_HOSTS           211   /**< - */
00879 #define BM_MEMSIZE_MISMATCH         212   /**< - */
00880 #define BM_CONFLICT                 213   /**< - */
00881 #define BM_EXIT                     214   /**< - */
00882 #define BM_INVALID_PARAM            215   /**< - */
00883 #define BM_MORE_EVENTS              216   /**< - */
00884 #define BM_INVALID_MIXING           217   /**< - */
00885 #define BM_NO_SHM                   218   /**< - */
00886 /**dox***************************************************************/
00887 /** @} */// end of group 22
00888 
00889 /**dox***************************************************************/
00890 /**  @defgroup err23 Online Database error codes 
00891 @{ */
00892 #define DB_SUCCESS                    1   /**< - */
00893 #define DB_CREATED                  302   /**< - */
00894 #define DB_NO_MEMORY                303   /**< - */
00895 #define DB_INVALID_NAME             304   /**< - */
00896 #define DB_INVALID_HANDLE           305   /**< - */
00897 #define DB_NO_SLOT                  306   /**< - */
00898 #define DB_NO_MUTEX                 307   /**< - */
00899 #define DB_MEMSIZE_MISMATCH         308   /**< - */
00900 #define DB_INVALID_PARAM            309   /**< - */
00901 #define DB_FULL                     310   /**< - */
00902 #define DB_KEY_EXIST                311   /**< - */
00903 #define DB_NO_KEY                   312   /**< - */
00904 #define DB_KEY_CREATED              313   /**< - */
00905 #define DB_TRUNCATED                314   /**< - */
00906 #define DB_TYPE_MISMATCH            315   /**< - */
00907 #define DB_NO_MORE_SUBKEYS          316   /**< - */
00908 #define DB_FILE_ERROR               317   /**< - */
00909 #define DB_NO_ACCESS                318   /**< - */
00910 #define DB_STRUCT_SIZE_MISMATCH     319   /**< - */
00911 #define DB_OPEN_RECORD              320   /**< - */
00912 #define DB_OUT_OF_RANGE             321   /**< - */
00913 #define DB_INVALID_LINK             322   /**< - */
00914 #define DB_CORRUPTED                323   /**< - */
00915 #define DB_STRUCT_MISMATCH          324   /**< - */
00916 /**dox***************************************************************/
00917 /** @} */// end of group 23
00918 
00919 /**dox***************************************************************/
00920 /**  @defgroup err24 System Services error code
00921 @{ */
00922 #define SS_SUCCESS                    1   /**< - */
00923 #define SS_CREATED                  402   /**< - */
00924 #define SS_NO_MEMORY                403   /**< - */
00925 #define SS_INVALID_NAME             404   /**< - */
00926 #define SS_INVALID_HANDLE           405   /**< - */
00927 #define SS_INVALID_ADDRESS          406   /**< - */
00928 #define SS_FILE_ERROR               407   /**< - */
00929 #define SS_NO_MUTEX                 408   /**< - */
00930 #define SS_NO_PROCESS               409   /**< - */
00931 #define SS_NO_THREAD                410   /**< - */
00932 #define SS_SOCKET_ERROR             411   /**< - */
00933 #define SS_TIMEOUT                  412   /**< - */
00934 #define SS_SERVER_RECV              413   /**< - */
00935 #define SS_CLIENT_RECV              414   /**< - */
00936 #define SS_ABORT                    415   /**< - */
00937 #define SS_EXIT                     416   /**< - */
00938 #define SS_NO_TAPE                  417   /**< - */
00939 #define SS_DEV_BUSY                 418   /**< - */
00940 #define SS_IO_ERROR                 419   /**< - */
00941 #define SS_TAPE_ERROR               420   /**< - */
00942 #define SS_NO_DRIVER                421   /**< - */
00943 #define SS_END_OF_TAPE              422   /**< - */
00944 #define SS_END_OF_FILE              423   /**< - */
00945 #define SS_FILE_EXISTS              424   /**< - */
00946 #define SS_NO_SPACE                 425   /**< - */
00947 #define SS_INVALID_FORMAT           426   /**< - */
00948 #define SS_NO_ROOT                  427   /**< - */
00949 /**dox***************************************************************/
00950 /** @} */// end of group 24
00951 
00952 /**dox***************************************************************/
00953 /**  @defgroup err25 Remote Procedure Calls error codes
00954 @{ */
00955 #define RPC_SUCCESS                   1   /**< - */
00956 #define RPC_ABORT              SS_ABORT   /**< - */
00957 #define RPC_NO_CONNECTION           502   /**< - */
00958 #define RPC_NET_ERROR               503   /**< - */
00959 #define RPC_TIMEOUT                 504   /**< - */
00960 #define RPC_EXCEED_BUFFER           505   /**< - */
00961 #define RPC_NOT_REGISTERED          506   /**< - */
00962 #define RPC_CONNCLOSED              507   /**< - */
00963 #define RPC_INVALID_ID              508   /**< - */
00964 #define RPC_SHUTDOWN                509   /**< - */
00965 #define RPC_NO_MEMORY               510   /**< - */
00966 #define RPC_DOUBLE_DEFINED          511   /**< - */
00967 /**dox***************************************************************/
00968 /** @} */// end of group 25
00969 
00970 /**dox***************************************************************/
00971 /**  @defgroup err26 Other errors
00972 @{ */
00973 #define FE_SUCCESS                    1   /**< - */
00974 #define FE_ERR_ODB                  602   /**< - */
00975 #define FE_ERR_HW                   603   /**< - */
00976 #define FE_ERR_DISABLED             604   /**< - */
00977 #define FE_ERR_DRIVER               605   /**< - */
00978 
00979 /** 
00980 History error code */
00981 #define HS_SUCCESS                    1   /**< - */
00982 #define HS_FILE_ERROR               702   /**< - */
00983 #define HS_NO_MEMORY                703   /**< - */
00984 #define HS_TRUNCATED                704   /**< - */
00985 #define HS_WRONG_INDEX              705   /**< - */
00986 #define HS_UNDEFINED_EVENT          706   /**< - */
00987 #define HS_UNDEFINED_VAR            707   /**< - */
00988 
00989 /** 
00990 FTP error code */
00991 #define FTP_SUCCESS                   1   /**< - */
00992 #define FTP_NET_ERROR               802   /**< - */
00993 #define FTP_FILE_ERROR              803   /**< - */
00994 #define FTP_RESPONSE_ERROR          804   /**< - */
00995 #define FTP_INVALID_ARG             805   /**< - */
00996 
00997 /** 
00998 ELog error code */
00999 #define EL_SUCCESS                    1   /**< - */
01000 #define EL_FILE_ERROR               902   /**< - */
01001 #define EL_NO_MESSAGE               903   /**< - */
01002 #define EL_TRUNCATED                904   /**< - */
01003 #define EL_FIRST_MSG                905   /**< - */
01004 #define EL_LAST_MSG                 906   /**< - */
01005 
01006 /** 
01007 Alarm error code */
01008 #define AL_SUCCESS                    1   /**< - */
01009 #define AL_INVALID_NAME            1002   /**< - */
01010 #define AL_ERROR_ODB               1003   /**< - */
01011 #define AL_RESET                   1004   /**< - */
01012 
01013 /** 
01014 Slow control commands error code */
01015 #define CMD_INIT                    (1<<0)
01016 #define CMD_EXIT                    (1<<1)
01017 #define CMD_IDLE                    (1<<2)
01018 #define CMD_SET                     (1<<3)
01019 #define CMD_SET_ALL                 (1<<4)
01020 #define CMD_GET                     (1<<5)
01021 #define CMD_GET_ALL                 (1<<6)
01022 #define CMD_GET_CURRENT             (1<<7)
01023 #define CMD_GET_CURRENT_ALL         (1<<8)
01024 #define CMD_SET_CURRENT_LIMIT       (1<<9)
01025 #define CMD_SET_CURRENT_LIMIT_ALL  (1<<10)
01026 #define CMD_GET_DEMAND             (1<<11)
01027 #define CMD_GET_DEFAULT_NAME       (1<<12)
01028 #define CMD_GET_DEFAULT_THRESHOLD  (1<<13)
01029 #define CMD_SET_LABEL              (1<<14)
01030 #define CMD_ENABLE_COMMAND         (1<<15)
01031 #define CMD_DISABLE_COMMAND        (1<<16)
01032 
01033 /** 
01034 Bus driver commands */
01035 #define CMD_WRITE                   100
01036 #define CMD_READ                    101
01037 #define CMD_PUTS                    102
01038 #define CMD_GETS                    103
01039 #define CMD_DEBUG                   104
01040 #define CMD_NAME                    105
01041 
01042 /** 
01043 Commands for interrupt events error code */
01044 #define CMD_INTERRUPT_ENABLE        100
01045 #define CMD_INTERRUPT_DISABLE       101
01046 #define CMD_INTERRUPT_ATTACH        102
01047 #define CMD_INTERRUPT_DETACH        103
01048 
01049 /**
01050 macros for bus driver access */
01051 #define BD_GETS(s,z,p,t)   info->bd(CMD_GETS, info->bd_info, s, z, p, t)
01052 #define BD_READS(s,z,p,t)  info->bd(CMD_READ, info->bd_info, s, z, p, t)
01053 #define BD_PUTS(s)         info->bd(CMD_PUTS, info->bd_info, s)
01054 #define BD_WRITES(s)       info->bd(CMD_WRITE, info->bd_info, s)
01055 
01056 /**dox***************************************************************/
01057 /** @} */// end of 26
01058 
01059 /**dox***************************************************************/
01060 /** @} */// end of mdeferrorh
01061 
01062 
01063 #define ANA_CONTINUE                  1
01064 #define ANA_SKIP                      0
01065 
01066 
01067 /*---- Buffer manager structures -----------------------------------*/
01068 
01069 /**dox***************************************************************/
01070 /** @addtogroup msectionh
01071  *  
01072  *  @{  */
01073 
01074 /**dox***************************************************************/
01075 /** @defgroup mbufferh Buffer Section
01076  *  @{  */
01077 /**
01078 Event header */
01079 typedef struct {
01080   short int event_id;            /**< event ID starting from one      */
01081   short int trigger_mask;        /**< hardware trigger mask           */
01082   DWORD serial_number;           /**< serial number starting from one */
01083   DWORD time_stamp;              /**< time of production of event     */
01084   DWORD data_size;               /**< size of event in bytes w/o header */
01085 } EVENT_HEADER;
01086 
01087 /**
01088 TRIGGER_MASK
01089 Extract or set the trigger mask field pointed by the argument.
01090 @param e pointer to the midas event (pevent)
01091 */
01092 #define TRIGGER_MASK(e)    ((((EVENT_HEADER *) e)-1)->trigger_mask)
01093 
01094 /**
01095 EVENT_ID
01096 Extract or set the event ID field pointed by the argument..
01097 @param e pointer to the midas event (pevent)
01098 */
01099 #define EVENT_ID(e)        ((((EVENT_HEADER *) e)-1)->event_id)
01100 
01101 /**
01102 SERIAL_NUMBER
01103 Extract or set/reset the serial number field pointed by the argument.
01104 @param e pointer to the midas event (pevent)
01105 */
01106 #define SERIAL_NUMBER(e)   ((((EVENT_HEADER *) e)-1)->serial_number)
01107 
01108 /**
01109 TIME_STAMP
01110 Extract or set/reset the time stamp field pointed by the argument.
01111 @param e pointer to the midas event (pevent)
01112 */
01113 #define TIME_STAMP(e)      ((((EVENT_HEADER *) e)-1)->time_stamp)
01114 #define EVENT_SOURCE(e,o)  (* (INT*) (e+o))
01115 
01116 /**
01117 system event IDs */
01118 #define EVENTID_BOR      ((short int) 0x8000)  /**< Begin-of-run      */
01119 #define EVENTID_EOR      ((short int) 0x8001)  /**< End-of-run        */
01120 #define EVENTID_MESSAGE  ((short int) 0x8002)  /**< Message events    */
01121 
01122 /**
01123 fragmented events */
01124 #define EVENTID_FRAG1    ((unsigned short) 0xC000)      /* first fragment */
01125 #define EVENTID_FRAG     ((unsigned short) 0xD000)      /* added to real event-id */
01126 
01127 /**
01128 magic number used in trigger_mask for BOR event */
01129 #define MIDAS_MAGIC      0x494d            /**< 'MI' */
01130 
01131 
01132 /**
01133 Buffer structure */
01134 typedef struct {
01135   INT id;                        /**< request id                      */
01136   BOOL valid;                    /**< indicating a valid entry        */
01137   short int event_id;            /**< event ID                        */
01138   short int trigger_mask;        /**< trigger mask                    */
01139   INT sampling_type;             /**< GET_ALL, GET_SOME, GET_FARM     */
01140                                  /**< dispatch function */
01141   void (*dispatch) (HNDLE, HNDLE, EVENT_HEADER *, void *);
01142 } EVENT_REQUEST;
01143 
01144 typedef struct {
01145   char name[NAME_LENGTH];             /**< name of client             */
01146   INT pid;                            /**< process ID                 */
01147   INT tid;                            /**< thread ID                  */
01148   INT thandle;                        /**< thread handle              */
01149   INT port;                           /**< UDP port for wake up       */
01150   INT read_pointer;                   /**< read pointer to buffer     */
01151   INT max_request_index;              /**< index of last request      */
01152   INT num_received_events;            /**< no of received events      */
01153   INT num_sent_events;                /**< no of sent events          */
01154   INT num_waiting_events;             /**< no of waiting events       */
01155   float data_rate;                    /**< data rate in kB/sec        */
01156   BOOL read_wait;                     /**< wait for read - flag       */
01157   INT write_wait;                     /**< wait for write # bytes     */
01158   BOOL wake_up;                       /**< client got a wake-up msg   */
01159   BOOL all_flag;                      /**< at least one GET_ALL request */
01160   DWORD last_activity;                /**< time of last activity      */
01161   DWORD watchdog_timeout;             /**< timeout in ms              */
01162 
01163   EVENT_REQUEST event_request[MAX_EVENT_REQUESTS];
01164 
01165 } BUFFER_CLIENT;
01166 
01167 typedef struct {
01168   char name[NAME_LENGTH];             /**< name of buffer             */
01169   INT num_clients;                    /**< no of active clients       */
01170   INT max_client_index;               /**< index of last client       */
01171   INT size;                           /**< size of data area in bytes */
01172   INT read_pointer;                   /**< read pointer               */
01173   INT write_pointer;                  /**< read pointer               */
01174   INT num_in_events;                  /**< no of received events      */
01175   INT num_out_events;                 /**< no of distributed events   */
01176 
01177   BUFFER_CLIENT client[MAX_CLIENTS];  /**< entries for clients        */
01178 
01179 } BUFFER_HEADER;
01180 
01181 /* Per-process buffer access structure (descriptor) */
01182 
01183 typedef struct {
01184   BOOL attached;                    /**< TRUE if buffer is attached   */
01185   INT client_index;                 /**< index to CLIENT str. in buf. */
01186   BUFFER_HEADER *buffer_header;     /**< pointer to buffer header     */
01187   void *buffer_data;                /**< pointer to buffer data       */
01188   char *read_cache;                 /**< cache for burst read         */
01189   INT read_cache_size;              /**< cache size in bytes          */
01190   INT read_cache_rp;                /**< cache read pointer           */
01191   INT read_cache_wp;                /**< cache write pointer          */
01192   char *write_cache;                /**< cache for burst read         */
01193   INT write_cache_size;             /**< cache size in bytes          */
01194   INT write_cache_rp;               /**< cache read pointer           */
01195   INT write_cache_wp;               /**< cache write pointer          */
01196   HNDLE mutex;                      /**< mutex/semaphore handle       */
01197   INT shm_handle;                   /**< handle to shared memory      */
01198   INT index;                        /**< connection index / tid       */
01199   BOOL callback;                    /**< callback defined for this buffer */
01200 
01201 } BUFFER;
01202 
01203 typedef struct {
01204   DWORD type;                         /**< TID_xxx type                      */
01205   INT num_values;                     /**< number of values                  */
01206   char name[NAME_LENGTH];             /**< name of variable                  */
01207   INT data;                           /**< Address of variable (offset)      */
01208   INT total_size;                     /**< Total size of data block          */
01209   INT item_size;                      /**< Size of single data item          */
01210   WORD access_mode;                   /**< Access mode                       */
01211   WORD notify_count;                  /**< Notify counter                    */
01212   INT next_key;                       /**< Address of next key               */
01213   INT parent_keylist;                 /**< keylist to which this key belongs */
01214   INT last_written;                   /**< Time of last write action  */
01215 } KEY;
01216 
01217 typedef struct {
01218   INT parent;                         /**< Address of parent key      */
01219   INT num_keys;                       /**< number of keys             */
01220   INT first_key;                      /**< Address of first key       */
01221 } KEYLIST;
01222 
01223 /**dox***************************************************************/
01224 /** @} */// end of msectionh
01225 
01226 /*---- Equipment ---------------------------------------------------*/
01227 
01228 /**dox***************************************************************/
01229 /** @defgroup mequipment Equipment related
01230  *  @{  */
01231 
01232 #define DF_INPUT       (1<<0)         /**< channel is input           */
01233 #define DF_OUTPUT      (1<<1)         /**< channel is output          */
01234 #define DF_PRIO_DEVICE (1<<2)         /**< get demand values from device instead of ODB */
01235 #define DF_READ_ONLY   (1<<3)         /**< never write demand values to device */
01236 
01237 typedef struct {
01238   char name[NAME_LENGTH];             /**< Driver name                       */
01239    INT(*bd) (INT cmd, ...);           /**< Device driver entry point         */
01240   void *bd_info;                      /**< Private info for bus driver       */
01241 } BUS_DRIVER;
01242 
01243 typedef struct {
01244   char name[NAME_LENGTH];             /**< Driver name                       */
01245    INT(*dd) (INT cmd, ...);           /**< Device driver entry point         */
01246   INT channels;                       /**< Number of channels                */
01247    INT(*bd) (INT cmd, ...);           /**< Bus driver entry point            */
01248   DWORD flags;                        /**< Combination of DF_xx              */
01249   void *dd_info;                      /**< Private info for device driver    */
01250 } DEVICE_DRIVER;
01251 
01252 typedef struct {
01253   WORD event_id;                      /**< Event ID associated with equipm.  */
01254   WORD trigger_mask;                  /**< Trigger mask                      */
01255   char buffer[NAME_LENGTH];           /**< Event buffer to send events into  */
01256   INT eq_type;                        /**< One of EQ_xxx                     */
01257   INT source;                         /**< Event source (LAM/IRQ)            */
01258   char format[8];                     /**< Data format to produce            */
01259   BOOL enabled;                       /**< Enable flag                       */
01260   INT read_on;                        /**< Combination of Read-On flags RO_xxx */
01261   INT period;                         /**< Readout interval/Polling time in ms */
01262   double event_limit;                 /**< Stop run when limit is reached    */
01263   DWORD num_subevents;                /**< Number of events in super event */
01264   INT history;                        /**< Log history                       */
01265   char frontend_host[NAME_LENGTH];    /**< Host on which FE is running       */
01266   char frontend_name[NAME_LENGTH];    /**< Frontend name                     */
01267   char frontend_file_name[256];       /**< Source file used for user FE      */
01268 } EQUIPMENT_INFO;
01269 
01270 typedef struct {
01271   double events_sent;
01272   double events_per_sec;
01273   double kbytes_per_sec;
01274 } EQUIPMENT_STATS;
01275 
01276 typedef struct eqpmnt *PEQUIPMENT;
01277 
01278 typedef struct eqpmnt {
01279   char name[NAME_LENGTH];               /**< Equipment name                            */
01280   EQUIPMENT_INFO info;                  /**< From above                                */
01281    INT(*readout) (char *, INT);         /**< Pointer to user readout routine           */
01282    INT(*cd) (INT cmd, PEQUIPMENT);      /**< Class driver routine                      */
01283   DEVICE_DRIVER *driver;                /**< Device driver list                        */
01284   void *event_descrip;                  /**< Init string for fixed events or bank list */
01285   void *cd_info;                        /**< private data for class driver             */
01286   INT status;                           /**< One of FE_xxx                             */
01287   DWORD last_called;                    /**< Last time event was read                  */
01288   DWORD last_idle;                      /**< Last time idle func was called            */
01289   DWORD poll_count;                     /**< Needed to poll 'period'                   */
01290   INT format;                           /**< FORMAT_xxx                                */
01291   HNDLE buffer_handle;                  /**< MIDAS buffer handle                       */
01292   HNDLE hkey_variables;                 /**< Key to variables subtree in ODB           */
01293   DWORD serial_number;                  /**< event serial number                       */
01294   DWORD subevent_number;                /**< subevent number                           */
01295   DWORD odb_out;                        /**< # updates FE -> ODB                       */
01296   DWORD odb_in;                         /**< # updated ODB -> FE                       */
01297   DWORD bytes_sent;                     /**< number of bytes sent                      */
01298   DWORD events_sent;                    /**< number of events sent                     */
01299   EQUIPMENT_STATS stats;
01300 } EQUIPMENT;
01301 /**dox***************************************************************/
01302 /** @} */// end of mequipmenth
01303 
01304 /*---- Banks -------------------------------------------------------*/
01305 
01306 /**dox***************************************************************/
01307 /** @defgroup mbank Bank related
01308  *  @{  */
01309 
01310 #define BANK_FORMAT_VERSION     1      /**< - */
01311 #define BANK_FORMAT_32BIT   (1<<4)     /**< - */
01312 
01313 typedef struct {
01314   DWORD data_size;                     /**< Size in bytes */
01315   DWORD flags;                         /**< internal flag */
01316 } BANK_HEADER;
01317 
01318 typedef struct {
01319   char name[4];                        /**< - */
01320   WORD type;                           /**< - */
01321   WORD data_size;                      /**< - */
01322 } BANK;
01323 
01324 typedef struct {
01325   char name[4];                        /**< - */
01326   DWORD type;                          /**< - */
01327   DWORD data_size;                     /**< - */
01328 } BANK32;
01329 
01330 typedef struct {
01331   char name[NAME_LENGTH];              /**< - */
01332   DWORD type;                          /**< - */
01333   DWORD n_data;                        /**< - */
01334 } TAG;
01335 
01336 typedef struct {
01337   char name[9];                        /**< - */
01338   WORD type;                           /**< - */
01339   DWORD size;                          /**< - */
01340   char **init_str;                     /**< - */
01341   BOOL output_flag;                    /**< - */
01342   void *addr;                          /**< - */
01343   DWORD n_data;                        /**< - */
01344   HNDLE def_key;                       /**< - */
01345 } BANK_LIST;
01346 /**dox***************************************************************/
01347 /** @} */// end of mbank
01348 
01349 /*---- Analyzer request --------------------------------------------*/
01350 /**dox***************************************************************/
01351 /** @defgroup manalyzer Analyzer related
01352  *  @{  */
01353 
01354 typedef struct {
01355   char name[NAME_LENGTH];             /**< Module name                       */
01356   char author[NAME_LENGTH];           /**< Author                            */
01357    INT(*analyzer) (EVENT_HEADER *, void *);/**< Pointer to user analyzer routine  */
01358    INT(*bor) (INT run_number);        /**< Pointer to begin-of-run routine   */
01359    INT(*eor) (INT run_number);        /**< Pointer to end-of-run routine     */
01360    INT(*init) ();                     /**< Pointer to init routine           */
01361    INT(*exit) ();                     /**< Pointer to exit routine           */
01362   void *parameters;                   /**< Pointer to parameter structure    */
01363   INT param_size;                     /**< Size of parameter structure       */
01364   char **init_str;                    /**< Parameter init string             */
01365   BOOL enabled;                       /**< Enabled flag                      */
01366 } ANA_MODULE;
01367 
01368 typedef struct {
01369   INT event_id;                       /**< Event ID associated with equipm.  */
01370   INT trigger_mask;                   /**< Trigger mask                      */
01371   INT sampling_type;                  /**< GET_ALL/GET_SOME                  */
01372   char buffer[NAME_LENGTH];           /**< Event buffer to send events into  */
01373   BOOL enabled;                       /**< Enable flag                       */
01374   char client_name[NAME_LENGTH];      /**< Analyzer name                     */
01375   char host[NAME_LENGTH];             /**< Host on which analyzer is running */
01376 } AR_INFO;
01377 
01378 typedef struct {
01379   double events_received;
01380   double events_per_sec;
01381   double events_written;
01382 } AR_STATS;
01383 
01384 typedef struct {
01385   char event_name[NAME_LENGTH];       /**< Event name                        */
01386   AR_INFO ar_info;                    /**< From above                        */
01387    INT(*analyzer) (EVENT_HEADER *, void *);/**< Pointer to user analyzer routine  */
01388   ANA_MODULE **ana_module;            /**< List of analyzer modules          */
01389   BANK_LIST *bank_list;               /**< List of banks for event           */
01390   INT rwnt_buffer_size;               /**< Size in events of RW N-tuple buf  */
01391   BOOL use_tests;                     /**< Use tests for this event          */
01392   char **init_string;
01393   INT status;                         /**< One of FE_xxx                     */
01394   HNDLE buffer_handle;                /**< MIDAS buffer handle               */
01395   HNDLE request_id;                   /**< Event request handle              */
01396   HNDLE hkey_variables;               /**< Key to variables subtree in ODB   */
01397   HNDLE hkey_common;                  /**< Key to common subtree             */
01398   void *addr;                         /**< Buffer for CWNT filling           */
01399   struct {                            /**< Buffer for event number for CWNT  */
01400     DWORD run;
01401     DWORD serial;
01402     DWORD time;
01403   } number;
01404   DWORD events_received;              /**< number of events sent             */
01405   DWORD events_written;               /**< number of events written          */
01406   AR_STATS ar_stats;
01407 
01408 } ANALYZE_REQUEST;
01409 
01410 /*---- Tests -------------------------------------------------------*/
01411 
01412 typedef struct {
01413   char name[80];
01414   BOOL registered;
01415   DWORD count;
01416   BOOL value;
01417 } ANA_TEST;
01418 
01419 #define SET_TEST(t, v) { if (!t.registered) test_register(&t); t.value = (v); }
01420 #define TEST(t) (t.value)
01421 
01422 #ifdef DEFINE_TESTS
01423 #define DEF_TEST(t) ANA_TEST t = { #t, 0, 0, FALSE };
01424 #else
01425 #define DEF_TEST(t) extern ANA_TEST t;
01426 #endif
01427 /**dox***************************************************************/
01428 /** @} */// end of mbank
01429 
01430 /*---- History structures ------------------------------------------*/
01431 
01432 /**dox***************************************************************/
01433 /** @defgroup mhistoryh History related
01434  *  @{  */
01435 
01436 #define RT_DATA (*((DWORD *) "HSDA"))
01437 #define RT_DEF  (*((DWORD *) "HSDF"))
01438 
01439 typedef struct {
01440   DWORD record_type;            /* RT_DATA or RT_DEF */
01441   DWORD event_id;
01442   DWORD time;
01443   DWORD def_offset;             /* place of definition */
01444   DWORD data_size;              /* data following this header in bytes */
01445 } HIST_RECORD;
01446 
01447 typedef struct {
01448   DWORD event_id;
01449   char event_name[NAME_LENGTH];
01450   DWORD def_offset;
01451 } DEF_RECORD;
01452 
01453 typedef struct {
01454   DWORD event_id;
01455   DWORD time;
01456   DWORD offset;
01457 } INDEX_RECORD;
01458 
01459 typedef struct {
01460   DWORD event_id;
01461   char event_name[NAME_LENGTH];
01462   DWORD n_tag;
01463   TAG *tag;
01464   DWORD hist_fh;
01465   DWORD index_fh;
01466   DWORD def_fh;
01467   DWORD base_time;
01468   DWORD def_offset;
01469 } HISTORY;
01470 /**dox***************************************************************/
01471 /** @} */// end of mhistory
01472 
01473 /*---- ODB runinfo -------------------------------------------------*/
01474 
01475 /**dox***************************************************************/
01476 /** @defgroup modbh ODB runinfo related
01477  *  @{  */
01478 /** Contains the main parameters regarding the run status.
01479     The containt reflects the current system ONLY if Midas clients
01480     are connected. Otherwise the status is erroneous.
01481 */
01482 typedef struct {
01483   INT state;                          /**< Current run condition  */
01484   INT online_mode;                    /**< Mode of operation online/offline */
01485   INT run_number;                     /**< Current processing run number      */
01486   INT transition_in_progress;         /**< Intermediate state during transition */
01487   INT requested_transition;           /**< Deferred transition request */
01488   char start_time[32];                /**< ASCII of the last start time */
01489   DWORD start_time_binary;            /**< Bin of the last start time */
01490   char stop_time[32];                 /**< ASCII of the last stop time */
01491   DWORD stop_time_binary;             /**< ASCII of the last stop time */
01492 } RUNINFO;
01493 
01494 #define RUNINFO_STR(_name) char *_name[] = {\
01495 "[.]",\
01496 "State = INT : 1",\
01497 "Online Mode = INT : 1",\
01498 "Run number = INT : 0",\
01499 "Transition in progress = INT : 0",\
01500 "Requested transition = INT : 0",\
01501 "Start time = STRING : [32] Tue Sep 09 15:04:42 1997",\
01502 "Start time binary = DWORD : 0",\
01503 "Stop time = STRING : [32] Tue Sep 09 15:04:42 1997",\
01504 "Stop time binary = DWORD : 0",\
01505 "",\
01506 NULL }
01507 /**dox***************************************************************/
01508 /** @} */// end of mhistory
01509 
01510 /*---- Alarm system ------------------------------------------------*/
01511 /**dox***************************************************************/
01512 /** @defgroup malarmh Alarm related
01513  * Alarm structre. 
01514  *  @{  */
01515 
01516 /********************************************************************/
01517 /**
01518 Program information structure */
01519 typedef struct {
01520   BOOL required;
01521   INT watchdog_timeout;
01522   DWORD check_interval;
01523   char start_command[256];
01524   BOOL auto_start;
01525   BOOL auto_stop;
01526   BOOL auto_restart;
01527   char alarm_class[32];
01528   DWORD first_failed;
01529 } PROGRAM_INFO;
01530 
01531 #define AT_INTERNAL   1 /**< - */
01532 #define AT_PROGRAM    2 /**< - */
01533 #define AT_EVALUATED  3 /**< - */
01534 #define AT_PERIODIC   4 /**< - */
01535 #define AT_LAST       4 /**< - */
01536 
01537 #define PROGRAM_INFO_STR(_name) char *_name[] = {\
01538 "[.]",\
01539 "Required = BOOL : n",\
01540 "Watchdog timeout = INT : 10000",\
01541 "Check interval = DWORD : 180000",\
01542 "Start command = STRING : [256] ",\
01543 "Auto start = BOOL : n",\
01544 "Auto stop = BOOL : n",\
01545 "Auto restart = BOOL : n",\
01546 "Alarm class = STRING : [32] ",\
01547 "First failed = DWORD : 0",\
01548 "",\
01549 NULL }
01550 
01551 /**
01552 Alarm class structure */
01553 typedef struct {
01554   BOOL write_system_message;
01555   BOOL write_elog_message;
01556   INT system_message_interval;
01557   DWORD system_message_last;
01558   char execute_command[256];
01559   INT execute_interval;
01560   DWORD execute_last;
01561   BOOL stop_run;
01562   char display_bgcolor[32];
01563   char display_fgcolor[32];
01564 } ALARM_CLASS;
01565 
01566 #define ALARM_CLASS_STR(_name) char *_name[] = {\
01567 "[.]",\
01568 "Write system message = BOOL : y",\
01569 "Write Elog message = BOOL : n",\
01570 "System message interval = INT : 60",\
01571 "System message last = DWORD : 0",\
01572 "Execute command = STRING : [256] ",\
01573 "Execute interval = INT : 0",\
01574 "Execute last = DWORD : 0",\
01575 "Stop run = BOOL : n",\
01576 "Display BGColor = STRING : [32] red",\
01577 "Display FGColor = STRING : [32] black",\
01578 "",\
01579 NULL }
01580 
01581 /**
01582 Alarm structure */
01583 typedef struct {
01584   BOOL active;
01585   INT triggered;
01586   INT type;
01587   INT check_interval;
01588   DWORD checked_last;
01589   char time_triggered_first[32];
01590   char time_triggered_last[32];
01591   char condition[256];
01592   char alarm_class[32];
01593   char alarm_message[80];
01594 } ALARM;
01595 
01596 #define ALARM_ODB_STR(_name) char *_name[] = {\
01597 "[.]",\
01598 "Active = BOOL : n",\
01599 "Triggered = INT : 0",\
01600 "Type = INT : 3",\
01601 "Check interval = INT : 60",\
01602 "Checked last = DWORD : 0",\
01603 "Time triggered first = STRING : [32] ",\
01604 "Time triggered last = STRING : [32] ",\
01605 "Condition = STRING : [256] /Runinfo/Run number > 100",\
01606 "Alarm Class = STRING : [32] Alarm",\
01607 "Alarm Message = STRING : [80] Run number became too large",\
01608 "",\
01609 NULL }
01610 
01611 #define ALARM_PERIODIC_STR(_name) char *_name[] = {\
01612 "[.]",\
01613 "Active = BOOL : n",\
01614 "Triggered = INT : 0",\
01615 "Type = INT : 4",\
01616 "Check interval = INT : 28800",\
01617 "Checked last = DWORD : 0",\
01618 "Time triggered first = STRING : [32] ",\
01619 "Time triggered last = STRING : [32] ",\
01620 "Condition = STRING : [256] ",\
01621 "Alarm Class = STRING : [32] Warning",\
01622 "Alarm Message = STRING : [80] Please do your shift checks",\
01623 "",\
01624 NULL }
01625 
01626 /**dox***************************************************************/
01627 /** @} */// end of malarmh
01628 
01629 /**dox***************************************************************/
01630 #ifndef DOXYGEN_SHOULD_SKIP_THIS
01631 
01632 /*---- malloc/free routines for debugging --------------------------*/
01633 
01634 #ifdef _MEM_DBG
01635 #define M_MALLOC(x)   dbg_malloc((x), __FILE__, __LINE__)
01636 #define M_CALLOC(x,y) dbg_calloc((x), (y), __FILE__, __LINE__)
01637 #define M_FREE(x)     dbg_free  ((x), __FILE__, __LINE__)
01638 #else
01639 #define M_MALLOC(x) malloc(x)
01640 #define M_CALLOC(x,y) calloc(x,y)
01641 #define M_FREE(x) free(x)
01642 #endif
01643 
01644 void *dbg_malloc(unsigned int size, char *file, int line);
01645 void *dbg_calloc(unsigned int size, unsigned int count, char *file,
01646                  int line);
01647 void dbg_free(void *adr, char *file, int line);
01648 
01649 /*---- CERN libray -------------------------------------------------*/
01650 
01651 #ifdef extname
01652 #define PAWC_NAME pawc_
01653 #else
01654 #define PAWC_NAME PAWC
01655 #endif
01656 
01657 #define PAWC_DEFINE(size) \
01658 INT PAWC_NAME[size/4];    \
01659 INT pawc_size = size
01660 
01661 /* bug in ROOT include files */
01662 #undef GetCurrentTime
01663 
01664 /*---- RPC ---------------------------------------------------------*/
01665 
01666 /**
01667 flags */
01668 #define RPC_IN       (1 << 0)
01669 #define RPC_OUT      (1 << 1)
01670 #define RPC_POINTER  (1 << 2)
01671 #define RPC_FIXARRAY (1 << 3)
01672 #define RPC_VARARRAY (1 << 4)
01673 #define RPC_OUTGOING (1 << 5)
01674 
01675 /**
01676 Server types */
01677 #define ST_NONE            0
01678 #define ST_SINGLE          1
01679 #define ST_MTHREAD         2
01680 #define ST_MPROCESS        3
01681 #define ST_SUBPROCESS      4
01682 #define ST_REMOTE          5
01683 
01684 /**
01685 function list */
01686 typedef struct {
01687   WORD tid;
01688   WORD flags;
01689   INT n;
01690 } RPC_PARAM;
01691 
01692 typedef struct {
01693   INT id;
01694   char *name;
01695   RPC_PARAM param[20];
01696    INT(*dispatch) (INT, void **);
01697 } RPC_LIST;
01698 
01699 /**
01700 IDs allow for users */
01701 #define RPC_MIN_ID    1
01702 #define RPC_MAX_ID 9999
01703 
01704 /**
01705 Data conversion flags */
01706 #define CF_ENDIAN          (1<<0)
01707 #define CF_IEEE2VAX        (1<<1)
01708 #define CF_VAX2IEEE        (1<<2)
01709 #define CF_ASCII           (1<<3)
01710 
01711 #define CBYTE(_i)        (* ((BYTE *)       prpc_param[_i]))
01712 #define CPBYTE(_i)       (  ((BYTE *)       prpc_param[_i]))
01713 
01714 #define CSHORT(_i)       (* ((short *)      prpc_param[_i]))
01715 #define CPSHORT(_i)      (  ((short *)      prpc_param[_i]))
01716 
01717 #define CINT(_i)         (* ((INT *)        prpc_param[_i]))
01718 #define CPINT(_i)        (  ((INT *)        prpc_param[_i]))
01719 
01720 #define CWORD(_i)        (* ((WORD *)       prpc_param[_i]))
01721 #define CPWORD(_i)       (  ((WORD *)       prpc_param[_i]))
01722 
01723 #define CLONG(_i)        (* ((long *)       prpc_param[_i]))
01724 #define CPLONG(_i)       (  ((long *)       prpc_param[_i]))
01725 
01726 #define CDWORD(_i)       (* ((DWORD *)      prpc_param[_i]))
01727 #define CPDWORD(_i)      (  ((DWORD *)      prpc_param[_i]))
01728 
01729 #define CHNDLE(_i)       (* ((HNDLE *)      prpc_param[_i]))
01730 #define CPHNDLE(_i)      (  ((HNDLE *)      prpc_param[_i]))
01731 
01732 #define CBOOL(_i)        (* ((BOOL *)       prpc_param[_i]))
01733 #define CPBOOL(_i)       (  ((BOOL *)       prpc_param[_i]))
01734 
01735 #define CFLOAT(_i)       (* ((float *)      prpc_param[_i]))
01736 #define CPFLOAT(_i)      (  ((float *)      prpc_param[_i]))
01737 
01738 #define CDOUBLE(_i)      (* ((double *)     prpc_param[_i]))
01739 #define CPDOUBLE(_i)     (  ((double *)     prpc_param[_i]))
01740 
01741 #define CSTRING(_i)      (  ((char *)       prpc_param[_i]))
01742 #define CARRAY(_i)       (  ((void *)       prpc_param[_i]))
01743 
01744 #define CBYTE(_i)        (* ((BYTE *)       prpc_param[_i]))
01745 #define CPBYTE(_i)       (  ((BYTE *)       prpc_param[_i]))
01746 
01747 #define CSHORT(_i)       (* ((short *)      prpc_param[_i]))
01748 #define CPSHORT(_i)      (  ((short *)      prpc_param[_i]))
01749 
01750 #define CINT(_i)         (* ((INT *)        prpc_param[_i]))
01751 #define CPINT(_i)        (  ((INT *)        prpc_param[_i]))
01752 
01753 #define CWORD(_i)        (* ((WORD *)       prpc_param[_i]))
01754 #define CPWORD(_i)       (  ((WORD *)       prpc_param[_i]))
01755 
01756 #define CLONG(_i)        (* ((long *)       prpc_param[_i]))
01757 #define CPLONG(_i)       (  ((long *)       prpc_param[_i]))
01758 
01759 #define CDWORD(_i)       (* ((DWORD *)      prpc_param[_i]))
01760 #define CPDWORD(_i)      (  ((DWORD *)      prpc_param[_i]))
01761 
01762 #define CHNDLE(_i)       (* ((HNDLE *)      prpc_param[_i]))
01763 #define CPHNDLE(_i)      (  ((HNDLE *)      prpc_param[_i]))
01764 
01765 #define CBOOL(_i)        (* ((BOOL *)       prpc_param[_i]))
01766 #define CPBOOL(_i)       (  ((BOOL *)       prpc_param[_i]))
01767 
01768 #define CFLOAT(_i)       (* ((float *)      prpc_param[_i]))
01769 #define CPFLOAT(_i)      (  ((float *)      prpc_param[_i]))
01770 
01771 #define CDOUBLE(_i)      (* ((double *)     prpc_param[_i]))
01772 #define CPDOUBLE(_i)     (  ((double *)     prpc_param[_i]))
01773 
01774 #define CSTRING(_i)      (  ((char *)       prpc_param[_i]))
01775 #define CARRAY(_i)       (  ((void *)       prpc_param[_i]))
01776 
01777 
01778 
01779 #define cBYTE            (* ((BYTE *)       prpc_param[--n_param]))
01780 #define cPBYTE           (  ((BYTE *)       prpc_param[--n_param]))
01781 
01782 #define cSHORT           (* ((short *)      prpc_param[--n_param]))
01783 #define cPSHORT          (  ((short *)      prpc_param[--n_param]))
01784 
01785 #define cINT             (* ((INT *)        prpc_param[--n_param]))
01786 #define cPINT            (  ((INT *)        prpc_param[--n_param]))
01787 
01788 #define cWORD            (* ((WORD *)       prpc_param[--n_param]))
01789 #define cPWORD           (  ((WORD *)       prpc_param[--n_param]))
01790 
01791 #define cLONG            (* ((long *)       prpc_param[--n_param]))
01792 #define cPLONG           (  ((long *)       prpc_param[--n_param]))
01793 
01794 #define cDWORD           (* ((DWORD *)      prpc_param[--n_param]))
01795 #define cPDWORD          (  ((DWORD *)      prpc_param[--n_param]))
01796 
01797 #define cHNDLE           (* ((HNDLE *)      prpc_param[--n_param]))
01798 #define cPHNDLE          (  ((HNDLE *)      prpc_param[--n_param]))
01799 
01800 #define cBOOL            (* ((BOOL *)       prpc_param[--n_param]))
01801 #define cPBOOL           (  ((BOOL *)       prpc_param[--n_param]))
01802 
01803 #define cFLOAT           (* ((float *)      prpc_param[--n_param]))
01804 #define cPFLOAT          (  ((float *)      prpc_param[--n_param]))
01805 
01806 #define cDOUBLE          (* ((double *)     prpc_param[--n_param]))
01807 #define cPDOUBLE         (  ((double *)     prpc_param[--n_param]))
01808 
01809 #define cSTRING          (  ((char *)       prpc_param[--n_param]))
01810 #define cARRAY           (  ((void *)       prpc_param[--n_param]))
01811 
01812 /*---- Function declarations ---------------------------------------*/
01813 
01814 /* make functions callable from a C++ program */
01815 #ifdef __cplusplus
01816 extern "C" {
01817 #endif
01818 
01819 /* make functions under WinNT dll exportable */
01820 #if defined(OS_WINNT) && defined(MIDAS_DLL)
01821 #define EXPRT __declspec(dllexport)
01822 #else
01823 #define EXPRT
01824 #endif
01825 
01826 /*---- common routines ----*/
01827   INT EXPRT cm_get_error(INT code, char *string);
01828   char EXPRT *cm_get_version(void);
01829   INT EXPRT cm_get_environment(char *host_name, int host_name_size,
01830                                char *exp_name, int exp_name_size);
01831   INT EXPRT cm_list_experiments(char *host_name,
01832                                 char
01833                                 exp_name[MAX_EXPERIMENT][NAME_LENGTH]);
01834   INT EXPRT cm_select_experiment(char *host_name, char *exp_name);
01835   INT EXPRT cm_connect_experiment(char *host_name, char *exp_name,
01836                                   char *client_name,
01837                                   void (*func) (char *));
01838   INT EXPRT cm_connect_experiment1(char *host_name, char *exp_name,
01839                                    char *client_name,
01840                                    void (*func) (char *), INT odb_size,
01841                                    DWORD watchdog_timeout);
01842   INT EXPRT cm_disconnect_experiment(void);
01843   INT EXPRT cm_register_transition(INT transition,
01844                                    INT(*func) (INT, char *));
01845   INT EXPRT cm_register_deferred_transition(INT transition,
01846                                             BOOL(*func) (INT, BOOL));
01847   INT EXPRT cm_check_deferred_transition(void);
01848   INT EXPRT cm_transition(INT transition, INT run_number, char *error,
01849                           INT strsize, INT async_flag, INT debug_flag);
01850   INT EXPRT cm_register_server(void);
01851   INT EXPRT cm_register_function(INT id, INT(*func) (INT, void **));
01852   INT EXPRT cm_connect_client(char *client_name, HNDLE * hConn);
01853   INT EXPRT cm_disconnect_client(HNDLE hConn, BOOL bShutdown);
01854   INT EXPRT cm_set_experiment_database(HNDLE hDB, HNDLE hKeyClient);
01855   INT EXPRT cm_get_experiment_database(HNDLE * hDB, HNDLE * hKeyClient);
01856   INT EXPRT cm_set_experiment_mutex(INT mutex_alarm, INT mutex_elog);
01857   INT EXPRT cm_get_experiment_mutex(INT * mutex_alarm, INT * mutex_elog);
01858   INT EXPRT cm_set_client_info(HNDLE hDB, HNDLE * hKeyClient,
01859                                char *host_name, char *client_name,
01860                                INT computer_id, char *password,
01861                                DWORD watchdog_timeout);
01862   INT EXPRT cm_get_client_info(char *client_name);
01863   INT EXPRT cm_set_watchdog_params(BOOL call_watchdog, DWORD timeout);
01864   INT EXPRT cm_get_watchdog_params(BOOL * call_watchdog, DWORD * timeout);
01865   INT EXPRT cm_get_watchdog_info(HNDLE hDB, char *client_name,
01866                                  DWORD * timeout, DWORD * last);
01867   INT EXPRT cm_enable_watchdog(BOOL flag);
01868   void EXPRT cm_watchdog(int);
01869   INT EXPRT cm_shutdown(char *name, BOOL bUnique);
01870   INT EXPRT cm_exist(char *name, BOOL bUnique);
01871   INT EXPRT cm_cleanup(char *client_name, BOOL ignore_timeout);
01872   INT EXPRT cm_yield(INT millisec);
01873   INT EXPRT cm_execute(char *command, char *result, INT buf_size);
01874   INT EXPRT cm_synchronize(DWORD * sec);
01875   INT EXPRT cm_asctime(char *str, INT buf_size);
01876   INT EXPRT cm_time(DWORD * time);
01877   BOOL EXPRT cm_is_ctrlc_pressed();
01878   void EXPRT cm_ack_ctrlc_pressed();
01879 
01880   INT EXPRT cm_set_msg_print(INT system_mask, INT user_mask,
01881                              int (*func) (const char *));
01882   INT EXPRT cm_msg(INT message_type, char *filename, INT line,
01883                    const char *routine, const char *format, ...);
01884   INT EXPRT cm_msg1(INT message_type, char *filename, INT line,
01885                     const char *facility, const char *routine,
01886                     const char *format, ...);
01887   INT EXPRT
01888       cm_msg_register(void (*func) (HNDLE, HNDLE, EVENT_HEADER *, void *));
01889   INT EXPRT cm_msg_retrieve(INT n_message, char *message, INT * buf_size);
01890 
01891   BOOL EXPRT equal_ustring(char *str1, char *str2);
01892   INT EXPRT strlcpy(char *dst, const char *src, INT size);
01893   INT EXPRT strlcat(char *dst, const char *src, INT size);
01894 
01895 /*---- buffer manager ----*/
01896   INT EXPRT bm_open_buffer(char *buffer_name, INT buffer_size,
01897                            INT * buffer_handle);
01898   INT EXPRT bm_close_buffer(INT buffer_handle);
01899   INT EXPRT bm_close_all_buffers(void);
01900   INT EXPRT bm_init_buffer_counters(INT buffer_handle);
01901   INT EXPRT bm_get_buffer_info(INT buffer_handle,
01902                                BUFFER_HEADER * buffer_header);
01903   INT EXPRT bm_get_buffer_level(INT buffer_handle, INT * n_bytes);
01904   INT EXPRT bm_set_cache_size(INT buffer_handle, INT read_size,
01905                               INT write_size);
01906   INT EXPRT bm_compose_event(EVENT_HEADER * event_header,
01907                              short int event_id, short int trigger_mask,
01908                              DWORD size, DWORD serial);
01909   INT EXPRT bm_request_event(INT buffer_handle, short int event_id,
01910                              short int trigger_mask, INT sampling_type,
01911                              INT * request_id, void (*func) (HNDLE, HNDLE,
01912                                                              EVENT_HEADER
01913                                                              *, void *));
01914   INT EXPRT bm_add_event_request(INT buffer_handle, short int event_id,
01915                                  short int trigger_mask, INT sampling_type,
01916                                  void (*func) (HNDLE, HNDLE,
01917                                                EVENT_HEADER *, void *),
01918                                  INT request_id);
01919   INT EXPRT bm_delete_request(INT request_id);
01920   INT EXPRT bm_send_event(INT buffer_handle, void *event, INT buf_size,
01921                           INT async_flag);
01922   INT EXPRT bm_receive_event(INT buffer_handle, void *destination,
01923                              INT * buf_size, INT async_flag);
01924   INT EXPRT bm_skip_event(INT buffer_handle);
01925   INT EXPRT bm_flush_cache(INT buffer_handle, INT async_flag);
01926   INT EXPRT bm_poll_event(INT flag);
01927   INT EXPRT bm_empty_buffers(void);
01928 
01929 /*---- online database functions -----*/
01930   INT EXPRT db_open_database(char *database_name, INT database_size,
01931                              HNDLE * hdb, char *client_name);
01932   INT EXPRT db_close_database(HNDLE database_handle);
01933   INT EXPRT db_close_all_databases(void);
01934   INT EXPRT db_protect_database(HNDLE database_handle);
01935 
01936   INT EXPRT db_create_key(HNDLE hdb, HNDLE key_handle, char *key_name,
01937                           DWORD type);
01938   INT EXPRT db_create_link(HNDLE hdb, HNDLE key_handle, char *link_name,
01939                            char *destination);
01940   INT EXPRT db_set_value(HNDLE hdb, HNDLE hKeyRoot, char *key_name,
01941                          void *data, INT size, INT num_values, DWORD type);
01942   INT EXPRT db_get_value(HNDLE hdb, HNDLE hKeyRoot, char *key_name,
01943                          void *data, INT * size, DWORD type, BOOL create);
01944   INT EXPRT db_find_key(HNDLE hdb, HNDLE hkey, char *name,
01945                         HNDLE * hsubkey);
01946   INT EXPRT db_find_link(HNDLE hDB, HNDLE hKey, char *key_name,
01947                          HNDLE * subhKey);
01948   INT EXPRT db_find_key1(HNDLE hdb, HNDLE hkey, char *name,
01949                          HNDLE * hsubkey);
01950   INT EXPRT db_find_link1(HNDLE hDB, HNDLE hKey, char *key_name,
01951                           HNDLE * subhKey);
01952   INT EXPRT db_scan_tree(HNDLE hDB, HNDLE hKey, int level,
01953                          INT(*callback) (HNDLE, HNDLE, KEY *, INT, void *),
01954                          void *info);
01955   INT EXPRT db_scan_tree_link(HNDLE hDB, HNDLE hKey, int level,
01956                               void (*callback) (HNDLE, HNDLE, KEY *, INT,
01957                                                 void *), void *info);
01958   INT EXPRT db_get_path(HNDLE hDB, HNDLE hKey, char *path, INT buf_size);
01959   INT EXPRT db_delete_key(HNDLE database_handle, HNDLE key_handle,
01960                           BOOL follow_links);
01961   INT EXPRT db_enum_key(HNDLE hdb, HNDLE key_handle, INT index,
01962                         HNDLE * subkey_handle);
01963   INT EXPRT db_enum_link(HNDLE hdb, HNDLE key_handle, INT index,
01964                          HNDLE * subkey_handle);
01965   INT EXPRT db_get_next_link(HNDLE hdb, HNDLE key_handle,
01966                              HNDLE * subkey_handle);
01967   INT EXPRT db_get_key(HNDLE hdb, HNDLE key_handle, KEY * key);
01968   INT EXPRT db_get_key_info(HNDLE hDB, HNDLE hKey, char *name,
01969                             INT name_size, INT * type, INT * num_values,
01970                             INT * item_size);
01971   INT EXPRT db_get_key_time(HNDLE hdb, HNDLE key_handle, DWORD * delta);
01972   INT EXPRT db_rename_key(HNDLE hDB, HNDLE hKey, char *name);
01973   INT EXPRT db_reorder_key(HNDLE hDB, HNDLE hKey, INT index);
01974   INT EXPRT db_get_data(HNDLE hdb, HNDLE key_handle, void *data,
01975                         INT * buf_size, DWORD type);
01976   INT EXPRT db_get_data1(HNDLE hDB, HNDLE hKey, void *data, INT * buf_size,
01977                          DWORD type, INT * num_values);
01978   INT EXPRT db_get_data_index(HNDLE hDB, HNDLE hKey, void *data,
01979                               INT * buf_size, INT index, DWORD type);
01980   INT EXPRT db_set_data(HNDLE hdb, HNDLE hKey, void *data, INT buf_size,
01981                         INT num_values, DWORD type);
01982   INT EXPRT db_set_data_index(HNDLE hDB, HNDLE hKey, void *data, INT size,
01983                               INT index, DWORD type);
01984   INT EXPRT db_set_data_index2(HNDLE hDB, HNDLE hKey, void *data, INT size,
01985                                INT index, DWORD type, BOOL bNotify);
01986   INT EXPRT db_set_num_values(HNDLE hDB, HNDLE hKey, INT num_values);
01987   INT EXPRT db_merge_data(HNDLE hDB, HNDLE hKeyRoot, char *name,
01988                           void *data, INT data_size, INT num_values,
01989                           INT type);
01990   INT EXPRT db_set_mode(HNDLE hdb, HNDLE key_handle, WORD mode,
01991                         BOOL recurse);
01992   INT EXPRT db_create_record(HNDLE hdb, HNDLE hkey, char *name,
01993                              char *init_str);
01994   INT EXPRT db_check_record(HNDLE hDB, HNDLE hKey, char *key_name,
01995                             char *rec_str, BOOL correct);
01996   INT EXPRT db_open_record(HNDLE hdb, HNDLE hkey, void *ptr, INT rec_size,
01997                            WORD access, void (*dispatcher) (INT, INT,
01998                                                             void *),
01999                            void *info);
02000   INT EXPRT db_close_record(HNDLE hdb, HNDLE hkey);
02001   INT EXPRT db_get_record(HNDLE hdb, HNDLE hKey, void *data,
02002                           INT * buf_size, INT align);
02003   INT EXPRT db_get_record_size(HNDLE hdb, HNDLE hKey, INT align,
02004                                INT * buf_size);
02005   INT EXPRT db_set_record(HNDLE hdb, HNDLE hKey, void *data, INT buf_size,
02006                           INT align);
02007   INT EXPRT db_send_changed_records(void);
02008   INT EXPRT db_get_open_records(HNDLE hDB, HNDLE hKey, char *str,
02009                                 INT buf_size, BOOL fix);
02010 
02011   INT EXPRT db_add_open_record(HNDLE hDB, HNDLE hKey, WORD access_mode);
02012   INT EXPRT db_remove_open_record(HNDLE hDB, HNDLE hKey, BOOL lock);
02013 
02014   INT EXPRT db_load(HNDLE hdb, HNDLE key_handle, char *filename,
02015                     BOOL bRemote);
02016   INT EXPRT db_save(HNDLE hdb, HNDLE key_handle, char *filename,
02017                     BOOL bRemote);
02018   INT EXPRT db_copy(HNDLE hDB, HNDLE hKey, char *buffer, INT * buffer_size,
02019                     char *path);
02020   INT EXPRT db_paste(HNDLE hDB, HNDLE hKeyRoot, char *buffer);
02021   INT EXPRT db_save_struct(HNDLE hDB, HNDLE hKey, char *file_name,
02022                            char *struct_name, BOOL append);
02023   INT EXPRT db_save_string(HNDLE hDB, HNDLE hKey, char *file_name,
02024                            char *string_name, BOOL append);
02025 
02026   INT EXPRT db_sprintf(char *string, void *data, INT data_size, INT index,
02027                        DWORD type);
02028   INT EXPRT db_sprintfh(char *string, void *data, INT data_size, INT index,
02029                         DWORD type);
02030   INT EXPRT db_sscanf(char *string, void *data, INT * data_size, INT index,
02031                       DWORD type);
02032   char EXPRT *strcomb(char **list);
02033 
02034 /*---- Bank routines ----*/
02035   void EXPRT bk_init(void *pbh);
02036   void EXPRT bk_init32(void *event);
02037   BOOL EXPRT bk_is32(void *event);
02038   INT EXPRT bk_size(void *pbh);
02039   void EXPRT bk_create(void *pbh, const char *name, WORD type,
02040                        void *pdata);
02041   INT EXPRT bk_delete(void *event, const char *name);
02042   INT EXPRT bk_close(void *pbh, void *pdata);
02043   INT EXPRT bk_list(void *pbh, char *bklist);
02044   INT EXPRT bk_locate(void *pbh, const char *name, void *pdata);
02045   INT EXPRT bk_iterate(void *pbh, BANK ** pbk, void *pdata);
02046   INT EXPRT bk_iterate32(void *pbh, BANK32 ** pbk, void *pdata);
02047   INT EXPRT bk_swap(void *event, BOOL force);
02048   INT EXPRT bk_find(BANK_HEADER * pbkh, const char *name, DWORD * bklen,
02049                     DWORD * bktype, void **pdata);
02050 
02051 /*---- RPC routines ----*/
02052   INT EXPRT rpc_register_functions(RPC_LIST * new_list,
02053                                    INT(*func) (INT, void **));
02054   INT EXPRT rpc_register_function(INT id, INT(*func) (INT, void **));
02055   INT EXPRT rpc_get_option(HNDLE hConn, INT item);
02056   INT EXPRT rpc_set_option(HNDLE hConn, INT item, INT value);
02057   INT EXPRT rpc_set_name(char *name);
02058   INT EXPRT rpc_get_name(char *name);
02059   INT EXPRT rpc_is_remote(void);
02060   INT EXPRT rpc_set_debug(void (*func) (char *), INT mode);
02061 
02062   INT EXPRT rpc_register_server(INT server_type, char *name, INT * port,
02063                                 INT(*func) (INT, void **));
02064   INT EXPRT rpc_register_client(char *name, RPC_LIST * list);
02065   INT EXPRT rpc_server_thread(void *pointer);
02066   INT EXPRT rpc_server_shutdown(void);
02067   INT EXPRT rpc_client_call(HNDLE hConn, const INT routine_id, ...);
02068   INT EXPRT rpc_call(const INT routine_id, ...);
02069   INT EXPRT rpc_tid_size(INT id);
02070   char EXPRT *rpc_tid_name(INT id);
02071   INT EXPRT rpc_server_connect(char *host_name, char *exp_name);
02072   INT EXPRT rpc_client_connect(char *host_name, INT midas_port,
02073                                char *client_name, HNDLE * hConnection);
02074   INT EXPRT rpc_client_disconnect(HNDLE hConn, BOOL bShutdown);
02075 
02076   INT EXPRT rpc_send_event(INT buffer_handle, void *source, INT buf_size,
02077                            INT async_flag);
02078   INT EXPRT rpc_flush_event(void);
02079 
02080   void EXPRT rpc_get_convert_flags(INT * convert_flags);
02081   void EXPRT rpc_convert_single(void *data, INT tid, INT flags,
02082                                 INT convert_flags);
02083   void EXPRT rpc_convert_data(void *data, INT tid, INT flags, INT size,
02084                               INT convert_flags);
02085 
02086 /*---- system services ----*/
02087   DWORD EXPRT ss_millitime(void);
02088   DWORD EXPRT ss_time(void);
02089   DWORD EXPRT ss_settime(DWORD seconds);
02090   char EXPRT *ss_asctime(void);
02091   INT EXPRT ss_sleep(INT millisec);
02092   BOOL EXPRT ss_kbhit(void);
02093 
02094   void EXPRT ss_clear_screen(void);
02095   void EXPRT ss_printf(INT x, INT y, const char *format, ...);
02096   void ss_set_screen_size(int x, int y);
02097 
02098   char EXPRT *ss_getpass(char *prompt);
02099   INT EXPRT ss_getchar(BOOL reset);
02100   char EXPRT *ss_crypt(char *key, char *salt);
02101   char EXPRT *ss_gets(char *string, int size);
02102 
02103   void EXPRT *ss_ctrlc_handler(void (*func) (int));
02104 
02105 /*---- direct io routines ----*/
02106   INT EXPRT ss_directio_give_port(INT start, INT end);
02107   INT EXPRT ss_directio_lock_port(INT start, INT end);
02108 
02109 /*---- tape routines ----*/
02110   INT EXPRT ss_tape_open(char *path, INT oflag, INT * channel);
02111   INT EXPRT ss_tape_close(INT channel);
02112   INT EXPRT ss_tape_status(char *path);
02113   INT EXPRT ss_tape_read(INT channel, void *pdata, INT * count);
02114   INT EXPRT ss_tape_write(INT channel, void *pdata, INT count);
02115   INT EXPRT ss_tape_write_eof(INT channel);
02116   INT EXPRT ss_tape_fskip(INT channel, INT count);
02117   INT EXPRT ss_tape_rskip(INT channel, INT count);
02118   INT EXPRT ss_tape_rewind(INT channel);
02119   INT EXPRT ss_tape_spool(INT channel);
02120   INT EXPRT ss_tape_mount(INT channel);
02121   INT EXPRT ss_tape_unmount(INT channel);
02122   INT EXPRT ss_tape_get_blockn(INT channel);
02123 
02124 /*---- disk routines ----*/
02125   double EXPRT ss_disk_free(char *path);
02126 /*-PAA-*/
02127   double EXPRT ss_file_size(char *path);
02128   INT EXPRT ss_file_remove(char *path);
02129   INT EXPRT ss_file_find(char *path, char *pattern, char **plist);
02130   double EXPRT ss_disk_size(char *path);
02131 
02132 /*---- history routines ----*/
02133   INT EXPRT hs_set_path(char *path);
02134   INT EXPRT hs_define_event(DWORD event_id, char *name, TAG * tag,
02135                             DWORD size);
02136   INT EXPRT hs_write_event(DWORD event_id, void *data, DWORD size);
02137   INT EXPRT hs_count_events(DWORD ltime, DWORD * count);
02138   INT EXPRT hs_enum_events(DWORD ltime, char *event_name,
02139                            DWORD * name_size, INT event_id[],
02140                            DWORD * id_size);
02141   INT EXPRT hs_count_vars(DWORD ltime, DWORD event_id, DWORD * count);
02142   INT EXPRT hs_enum_vars(DWORD ltime, DWORD event_id, char *var_name,
02143                          DWORD * size, DWORD * var_n, DWORD * n_size);
02144   INT EXPRT hs_get_var(DWORD ltime, DWORD event_id, char *var_name,
02145                        DWORD * type, INT * n_data);
02146   INT EXPRT hs_get_event_id(DWORD ltime, char *name, DWORD * id);
02147   INT EXPRT hs_read(DWORD event_id, DWORD start_time, DWORD end_time,
02148                     DWORD interval, char *tag_name, DWORD var_index,
02149                     DWORD * time_buffer, DWORD * tbsize, void *data_buffer,
02150                     DWORD * dbsize, DWORD * type, DWORD * n);
02151   INT EXPRT hs_dump(DWORD event_id, DWORD start_time, DWORD end_time,
02152                     DWORD interval, BOOL binary_time);
02153   INT EXPRT hs_fdump(char *file_name, DWORD id, BOOL binary_time);
02154 
02155 /*---- ELog functions ----*/
02156   INT EXPRT el_retrieve(char *tag, char *date, int *run, char *author,
02157                         char *type, char *system, char *subject,
02158                         char *text, int *textsize, char *orig_tag,
02159                         char *reply_tag, char *attachment1,
02160                         char *attachment2, char *attachment3,
02161                         char *encoding);
02162   INT EXPRT el_submit(int run, char *author, char *type, char *system,
02163                       char *subject, char *text, char *reply_to,
02164                       char *encoding, char *afilename1, char *buffer1,
02165                       INT buffer_size1, char *afilename2, char *buffer2,
02166                       INT buffer_size2, char *afilename3, char *buffer3,
02167                       INT buffer_size3, char *tag, INT tag_size);
02168   INT EXPRT el_search_message(char *tag, int *fh, BOOL walk);
02169   INT EXPRT el_search_run(int run, char *return_tag);
02170   INT EXPRT el_delete_message(char *tag);
02171 
02172 /*---- Alarm functions ----*/
02173   INT EXPRT al_check();
02174   INT EXPRT al_trigger_alarm(char *alarm_name, char *alarm_message,
02175                              char *default_class, char *cond_str,
02176                              INT type);
02177   INT EXPRT al_trigger_class(char *alarm_class, char *alarm_message,
02178                              BOOL first);
02179   INT EXPRT al_reset_alarm(char *alarm_name);
02180   BOOL EXPRT al_evaluate_condition(char *condition, char *value);
02181 
02182 /*---- analyzer functions ----*/
02183   void EXPRT test_register(ANA_TEST * t);
02184   void EXPRT add_data_dir(char *result, char *file);
02185   void EXPRT lock_histo(INT id);
02186 
02187 #ifdef __cplusplus
02188 }
02189 #endif
02190 #endif                          /* _MIDAS_H */
02191 /**dox***************************************************************/
02192 #endif                          /* DOXYGEN_SHOULD_SKIP_THIS */
02193 /**dox***************************************************************//** @} */// end of midasincludecode

Midas DOC Version 1.9.3 ---- PSI Stefan Ritt ----
Contributions: Pierre-Andre Amaudruz - Suzannah Daviel - Doxygen - Peter Green - Greg Hackman - Gertjan Hofman - Paul Knowles - Rudi Meier - Glenn Moloney - Dave Morris - Konstantin Olchanski - Renee Poutissou - Andreas Suter - Piotr Adam Zolnierczuk