00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef _MIDAS_H_
00015 #define _MIDAS_H_
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #define DATABASE_VERSION 3
00042
00043
00044 #define MIDAS_VERSION "2.0.0"
00045
00046
00047 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00048
00049
00050
00051
00052
00053 #if defined( VAX ) || defined( __VMS )
00054 #define OS_VMS
00055 #endif
00056
00057 #if defined( _MSC_VER )
00058 #define OS_WINNT
00059 #endif
00060
00061 #if defined( __MSDOS__ )
00062 #define OS_MSDOS
00063 #endif
00064
00065 #if defined ( vxw )
00066 #define OS_VXWORKS
00067 #undef OS_UNIX
00068 #endif
00069
00070 #if !defined(OS_LINUX)
00071 #if defined ( __linux__ )
00072 #define OS_LINUX
00073 #endif
00074 #endif
00075
00076 #if defined(OS_LINUX) || defined(OS_OSF1) || defined(OS_ULTRIX) || defined(OS_FREEBSD) || defined(OS_SOLARIS) || defined(OS_IRIX) || defined(OS_DARWIN)
00077 #define OS_UNIX
00078 #endif
00079
00080 #if !defined(OS_IRIX) && !defined(OS_VMS) && !defined(OS_MSDOS) && !defined(OS_UNIX) && !defined(OS_VXWORKS) && !defined(OS_WINNT)
00081 #error MIDAS cannot be used on this operating system
00082 #endif
00083
00084
00085
00086 #ifdef USE_ROOT
00087 #include <TObjArray.h>
00088 #include <TFolder.h>
00089 #include <TCutG.h>
00090 #endif
00091
00092
00093
00094 #ifndef MIDAS_TYPE_DEFINED
00095 #define MIDAS_TYPE_DEFINED
00096
00097 typedef unsigned char BYTE;
00098 typedef unsigned short int WORD;
00099 #ifndef OS_WINNT // Windows defines already DWORD
00100 typedef unsigned int DWORD;
00101 #endif
00102
00103 #ifndef OS_WINNT
00104 #ifndef OS_VXWORKS
00105 typedef DWORD BOOL;
00106 #endif
00107 #endif
00108
00109 #endif
00110
00111
00112
00113
00114
00115
00116
00117 #if defined(OS_MSDOS)
00118 typedef long int INT;
00119 #elif defined( OS_WINNT )
00120
00121
00122 #ifndef _INC_WINDOWS
00123 #include <windows.h>
00124 #endif
00125
00126 #undef DB_TRUNCATED
00127
00128 #else
00129 typedef int INT;
00130 #endif
00131
00132 typedef INT HNDLE;
00133
00134
00135 #ifdef OS_VXWORKS
00136 #ifndef __INCvxWorksh
00137 #include <vxWorks.h>
00138 #endif
00139 #endif
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151 #if defined(__alpha) || defined(_LP64)
00152 #define POINTER_T long int
00153 #else
00154 #define POINTER_T int
00155 #endif
00156
00157
00158 #define PTYPE POINTER_T
00159
00160
00161 #if defined(OS_WINNT)
00162 typedef HANDLE midas_thread_t;
00163 #elif defined(OS_UNIX)
00164 #include <pthread.h>
00165 typedef pthread_t midas_thread_t;
00166 #else
00167 typedef INT midas_thread_t;
00168 #endif
00169
00170 #define TRUE 1
00171 #define FALSE 0
00172
00173
00174 #if defined(OS_MSDOS) || defined(OS_WINNT)
00175 #define DIR_SEPARATOR '\\'
00176 #define DIR_SEPARATOR_STR "\\"
00177 #elif defined(OS_VMS)
00178 #define DIR_SEPARATOR ']'
00179 #define DIR_SEPARATOR_STR "]"
00180 #else
00181 #define DIR_SEPARATOR '/'
00182 #define DIR_SEPARATOR_STR "/"
00183 #endif
00184
00185
00186 #if defined( _MSC_VER )
00187 #define INLINE __inline
00188 #elif defined(__GNUC__)
00189 #define INLINE __inline__
00190 #else
00191 #define INLINE
00192 #endif
00193
00194
00195 #ifndef _LARGEFILE64_SOURCE
00196 #define O_LARGEFILE 0
00197 #endif
00198
00199
00200 #if defined( _MSC_VER )
00201 #pragma warning( disable: 4996)
00202 #endif
00203
00204
00205 #if defined(OS_WINNT)
00206 typedef HANDLE MUTEX_T;
00207 #elif defined(OS_LINUX)
00208 typedef pthread_mutex_t MUTEX_T;
00209 #else
00210 typedef INT MUTEX_T
00211 #endif
00212
00213
00214 #endif
00215
00216
00217
00218
00219
00220
00221 #ifndef MAX_EVENT_SIZE
00222 #define MAX_EVENT_SIZE 0x400000
00223 #endif
00224
00225 #ifdef OS_WINNT
00226 #define TAPE_BUFFER_SIZE 0x100000
00227 #else
00228 #define TAPE_BUFFER_SIZE 0x8000
00229 #endif
00230 #define NET_TCP_SIZE 0xFFFF
00231 #define OPT_TCP_SIZE 8192
00232 #define NET_UDP_SIZE 8192
00233
00234 #define EVENT_BUFFER_NAME "SYSTEM"
00235 #define DEFAULT_ODB_SIZE 0x100000
00236
00237 #define NAME_LENGTH 32
00238 #define HOST_NAME_LENGTH 256
00239 #define MAX_CLIENTS 64
00240 #define MAX_EVENT_REQUESTS 10
00241 #define MAX_OPEN_RECORDS 256
00242 #define MAX_ODB_PATH 256
00243 #define MAX_EXPERIMENT 32
00244 #define BANKLIST_MAX 1024
00245 #define STRING_BANKLIST_MAX BANKLIST_MAX * 4
00246
00247
00248 #define MIDAS_TCP_PORT 1175
00249
00250
00251
00252 #define DEFAULT_RPC_TIMEOUT 10000
00253 #define WATCHDOG_INTERVAL 1000
00254
00255 #define DEFAULT_WATCHDOG_TIMEOUT 10000
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268 #define STATE_STOPPED 1
00269 #define STATE_PAUSED 2
00270 #define STATE_RUNNING 3
00271
00272
00273
00274 #define FORMAT_MIDAS 1
00275 #define FORMAT_YBOS 2
00276 #define FORMAT_ASCII 3
00277 #define FORMAT_FIXED 4
00278 #define FORMAT_DUMP 5
00279 #define FORMAT_HBOOK 6
00280 #define FORMAT_ROOT 7
00281
00282
00283
00284 #define GET_ALL (1<<0)
00285 #define GET_NONBLOCKING (1<<1)
00286 #define GET_RECENT (1<<2)
00287
00288
00289
00290 #define TID_BYTE 1
00291 #define TID_SBYTE 2
00292 #define TID_CHAR 3
00293 #define TID_WORD 4
00294 #define TID_SHORT 5
00295 #define TID_DWORD 6
00296 #define TID_INT 7
00297 #define TID_BOOL 8
00298 #define TID_FLOAT 9
00299 #define TID_DOUBLE 10
00300 #define TID_BITFIELD 11
00301 #define TID_STRING 12
00302 #define TID_ARRAY 13
00303 #define TID_STRUCT 14
00304 #define TID_KEY 15
00305 #define TID_LINK 16
00306 #define TID_LAST 17
00307
00308
00309
00310 #define SYNC 0
00311 #define ASYNC 1
00312 #define DETACH 2
00313
00314
00315
00316 #define MODE_READ (1<<0)
00317 #define MODE_WRITE (1<<1)
00318 #define MODE_DELETE (1<<2)
00319 #define MODE_EXCLUSIVE (1<<3)
00320 #define MODE_ALLOC (1<<7)
00321
00322
00323
00324 #define RPC_OTIMEOUT 1
00325 #define RPC_OTRANSPORT 2
00326 #define RPC_OCONVERT_FLAG 3
00327 #define RPC_OHW_TYPE 4
00328 #define RPC_OSERVER_TYPE 5
00329 #define RPC_OSERVER_NAME 6
00330 #define RPC_CONVERT_FLAGS 7
00331 #define RPC_ODB_HANDLE 8
00332 #define RPC_CLIENT_HANDLE 9
00333 #define RPC_SEND_SOCK 10
00334 #define RPC_WATCHDOG_TIMEOUT 11
00335 #define RPC_NODELAY 12
00336
00337 #define RPC_TCP 0
00338 #define RPC_FTCP 1
00339
00340
00341
00342 #define WF_WATCH_ME (1<<0)
00343 #define WF_CALL_WD (1<<1)
00344
00345
00346
00347 #define TR_START (1<<0)
00348 #define TR_STOP (1<<1)
00349 #define TR_PAUSE (1<<2)
00350 #define TR_RESUME (1<<3)
00351 #define TR_STARTABORT (1<<4)
00352 #define TR_DEFERRED (1<<12)
00353
00354
00355
00356 #define EQ_PERIODIC (1<<0)
00357 #define EQ_POLLED (1<<1)
00358 #define EQ_INTERRUPT (1<<2)
00359 #define EQ_MULTITHREAD (1<<3)
00360 #define EQ_SLOW (1<<4)
00361 #define EQ_MANUAL_TRIG (1<<5)
00362 #define EQ_FRAGMENTED (1<<6)
00363 #define EQ_EB (1<<7)
00364
00365
00366
00367
00368 #define RO_RUNNING (1<<0)
00369 #define RO_STOPPED (1<<1)
00370 #define RO_PAUSED (1<<2)
00371 #define RO_BOR (1<<3)
00372 #define RO_EOR (1<<4)
00373 #define RO_PAUSE (1<<5)
00374 #define RO_RESUME (1<<6)
00375
00376 #define RO_TRANSITIONS (RO_BOR|RO_EOR|RO_PAUSE|RO_RESUME)
00377 #define RO_ALWAYS (0xFF)
00378
00379 #define RO_ODB (1<<8)
00380
00381
00382
00383
00384
00385
00386 #define CH_BS 8
00387 #define CH_TAB 9
00388 #define CH_CR 13
00389
00390 #define CH_EXT 0x100
00391
00392 #define CH_HOME (CH_EXT+0)
00393 #define CH_INSERT (CH_EXT+1)
00394 #define CH_DELETE (CH_EXT+2)
00395 #define CH_END (CH_EXT+3)
00396 #define CH_PUP (CH_EXT+4)
00397 #define CH_PDOWN (CH_EXT+5)
00398 #define CH_UP (CH_EXT+6)
00399 #define CH_DOWN (CH_EXT+7)
00400 #define CH_RIGHT (CH_EXT+8)
00401 #define CH_LEFT (CH_EXT+9)
00402
00403
00404
00405
00406
00407
00408
00409 #define LAM_SOURCE(c, s) (c<<24 | ((s) & 0xFFFFFF))
00410
00411
00412
00413
00414
00415 #define LAM_STATION(s) (1<<(s-1))
00416
00417
00418
00419
00420
00421 #define LAM_SOURCE_CRATE(c) (c>>24)
00422
00423
00424
00425
00426
00427 #define LAM_SOURCE_STATION(s) ((s) & 0xFFFFFF)
00428
00429
00430
00431 #define CNAF 0x1
00432 #define CNAF_nQ 0x2
00433
00434 #define CNAF_INHIBIT_SET 0x100
00435 #define CNAF_INHIBIT_CLEAR 0x101
00436 #define CNAF_CRATE_CLEAR 0x102
00437 #define CNAF_CRATE_ZINIT 0x103
00438 #define CNAF_TEST 0x110
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448 #ifndef MAX
00449 #define MAX(a,b) (((a) > (b)) ? (a) : (b))
00450 #endif
00451
00452
00453
00454 #ifndef MIN
00455 #define MIN(a,b) (((a) < (b)) ? (a) : (b))
00456 #endif
00457
00458
00459
00460
00461
00462 #define ALIGN8(x) (((x)+7) & ~7)
00463
00464
00465
00466 #define VALIGN(adr,align) (((POINTER_T) (adr)+align-1) & ~(align-1))
00467
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477 #define EVENTID_ALL -1
00478 #define TRIGGER_ALL -1
00479
00480
00481
00482 #define MT_ERROR (1<<0)
00483 #define MT_INFO (1<<1)
00484 #define MT_DEBUG (1<<2)
00485 #define MT_USER (1<<3)
00486 #define MT_LOG (1<<4)
00487 #define MT_TALK (1<<5)
00488 #define MT_CALL (1<<6)
00489 #define MT_ALL 0xFF
00490
00491 #define MT_ERROR_STR "ERROR"
00492 #define MT_INFO_STR "INFO"
00493 #define MT_DEBUG_STR "DEBUG"
00494 #define MT_USER_STR "USER"
00495 #define MT_LOG_STR "LOG"
00496 #define MT_TALK_STR "TALK"
00497 #define MT_CALL_STR "CALL"
00498
00499 #define MERROR MT_ERROR, __FILE__, __LINE__
00500 #define MINFO MT_INFO, __FILE__, __LINE__
00501 #define MDEBUG MT_DEBUG, __FILE__, __LINE__
00502 #define MUSER MT_USER, __FILE__, __LINE__
00503 #define MLOG MT_LOG, __FILE__, __LINE__
00504 #define MTALK MT_TALK, __FILE__, __LINE__
00505 #define MCALL MT_CALL, __FILE__, __LINE__
00506
00507
00508
00509
00510
00511
00512
00513
00514
00515
00516
00517
00518
00519
00520
00521 #define SUCCESS 1
00522 #define CM_SUCCESS 1
00523 #define CM_SET_ERROR 102
00524 #define CM_NO_CLIENT 103
00525 #define CM_DB_ERROR 104
00526 #define CM_UNDEF_EXP 105
00527 #define CM_VERSION_MISMATCH 106
00528 #define CM_SHUTDOWN 107
00529 #define CM_WRONG_PASSWORD 108
00530 #define CM_UNDEF_ENVIRON 109
00531 #define CM_DEFERRED_TRANSITION 110
00532 #define CM_TRANSITION_IN_PROGRESS 111
00533 #define CM_TIMEOUT 112
00534 #define CM_INVALID_TRANSITION 113
00535 #define CM_TOO_MANY_REQUESTS 114
00536
00537
00538
00539
00540
00541
00542
00543 #define BM_SUCCESS 1
00544 #define BM_CREATED 202
00545 #define BM_NO_MEMORY 203
00546 #define BM_INVALID_NAME 204
00547 #define BM_INVALID_HANDLE 205
00548 #define BM_NO_SLOT 206
00549 #define BM_NO_SEMAPHORE 207
00550 #define BM_NOT_FOUND 208
00551 #define BM_ASYNC_RETURN 209
00552 #define BM_TRUNCATED 210
00553 #define BM_MULTIPLE_HOSTS 211
00554 #define BM_MEMSIZE_MISMATCH 212
00555 #define BM_CONFLICT 213
00556 #define BM_EXIT 214
00557 #define BM_INVALID_PARAM 215
00558 #define BM_MORE_EVENTS 216
00559 #define BM_INVALID_MIXING 217
00560 #define BM_NO_SHM 218
00561
00562
00563
00564
00565
00566
00567 #define DB_SUCCESS 1
00568 #define DB_CREATED 302
00569 #define DB_NO_MEMORY 303
00570 #define DB_INVALID_NAME 304
00571 #define DB_INVALID_HANDLE 305
00572 #define DB_NO_SLOT 306
00573 #define DB_NO_SEMAPHORE 307
00574 #define DB_MEMSIZE_MISMATCH 308
00575 #define DB_INVALID_PARAM 309
00576 #define DB_FULL 310
00577 #define DB_KEY_EXIST 311
00578 #define DB_NO_KEY 312
00579 #define DB_KEY_CREATED 313
00580 #define DB_TRUNCATED 314
00581 #define DB_TYPE_MISMATCH 315
00582 #define DB_NO_MORE_SUBKEYS 316
00583 #define DB_FILE_ERROR 317
00584 #define DB_NO_ACCESS 318
00585 #define DB_STRUCT_SIZE_MISMATCH 319
00586 #define DB_OPEN_RECORD 320
00587 #define DB_OUT_OF_RANGE 321
00588 #define DB_INVALID_LINK 322
00589 #define DB_CORRUPTED 323
00590 #define DB_STRUCT_MISMATCH 324
00591 #define DB_TIMEOUT 325
00592 #define DB_VERSION_MISMATCH 326
00593
00594
00595
00596
00597
00598
00599 #define SS_SUCCESS 1
00600 #define SS_CREATED 402
00601 #define SS_NO_MEMORY 403
00602 #define SS_INVALID_NAME 404
00603 #define SS_INVALID_HANDLE 405
00604 #define SS_INVALID_ADDRESS 406
00605 #define SS_FILE_ERROR 407
00606 #define SS_NO_SEMAPHORE 408
00607 #define SS_NO_PROCESS 409
00608 #define SS_NO_THREAD 410
00609 #define SS_SOCKET_ERROR 411
00610 #define SS_TIMEOUT 412
00611 #define SS_SERVER_RECV 413
00612 #define SS_CLIENT_RECV 414
00613 #define SS_ABORT 415
00614 #define SS_EXIT 416
00615 #define SS_NO_TAPE 417
00616 #define SS_DEV_BUSY 418
00617 #define SS_IO_ERROR 419
00618 #define SS_TAPE_ERROR 420
00619 #define SS_NO_DRIVER 421
00620 #define SS_END_OF_TAPE 422
00621 #define SS_END_OF_FILE 423
00622 #define SS_FILE_EXISTS 424
00623 #define SS_NO_SPACE 425
00624 #define SS_INVALID_FORMAT 426
00625 #define SS_NO_ROOT 427
00626 #define SS_SIZE_MISMATCH 428
00627 #define SS_NO_MUTEX 429
00628
00629
00630
00631
00632
00633
00634 #define RPC_SUCCESS 1
00635 #define RPC_ABORT SS_ABORT
00636 #define RPC_NO_CONNECTION 502
00637 #define RPC_NET_ERROR 503
00638 #define RPC_TIMEOUT 504
00639 #define RPC_EXCEED_BUFFER 505
00640 #define RPC_NOT_REGISTERED 506
00641 #define RPC_CONNCLOSED 507
00642 #define RPC_INVALID_ID 508
00643 #define RPC_SHUTDOWN 509
00644 #define RPC_NO_MEMORY 510
00645 #define RPC_DOUBLE_DEFINED 511
00646 #define RPC_MUTEX_TIMEOUT 512
00647
00648
00649
00650
00651
00652
00653 #define FE_SUCCESS 1
00654 #define FE_ERR_ODB 602
00655 #define FE_ERR_HW 603
00656 #define FE_ERR_DISABLED 604
00657 #define FE_ERR_DRIVER 605
00658
00659
00660
00661 #define HS_SUCCESS 1
00662 #define HS_FILE_ERROR 702
00663 #define HS_NO_MEMORY 703
00664 #define HS_TRUNCATED 704
00665 #define HS_WRONG_INDEX 705
00666 #define HS_UNDEFINED_EVENT 706
00667 #define HS_UNDEFINED_VAR 707
00668
00669
00670
00671 #define FTP_SUCCESS 1
00672 #define FTP_NET_ERROR 802
00673 #define FTP_FILE_ERROR 803
00674 #define FTP_RESPONSE_ERROR 804
00675 #define FTP_INVALID_ARG 805
00676
00677
00678
00679 #define EL_SUCCESS 1
00680 #define EL_FILE_ERROR 902
00681 #define EL_NO_MESSAGE 903
00682 #define EL_TRUNCATED 904
00683 #define EL_FIRST_MSG 905
00684 #define EL_LAST_MSG 906
00685
00686
00687
00688 #define AL_SUCCESS 1
00689 #define AL_INVALID_NAME 1002
00690 #define AL_ERROR_ODB 1003
00691 #define AL_RESET 1004
00692
00693
00694
00695 #define CMD_INIT 1
00696 #define CMD_EXIT 2
00697 #define CMD_START 3
00698 #define CMD_STOP 4
00699 #define CMD_IDLE 5
00700 #define CMD_GET_THRESHOLD 6
00701 #define CMD_GET_THRESHOLD_CURRENT 7
00702 #define CMD_GET_THRESHOLD_ZERO 8
00703 #define CMD_SET_LABEL 9
00704 #define CMD_GET_LABEL 10
00705 #define CMD_OPEN 11
00706 #define CMD_CLOSE 12
00707 #define CMD_MISC_LAST 12
00708
00709 #define CMD_SET_FIRST CMD_MISC_LAST+1
00710 #define CMD_SET CMD_SET_FIRST // = 13
00711 #define CMD_SET_VOLTAGE_LIMIT CMD_SET_FIRST+1
00712 #define CMD_SET_CURRENT_LIMIT CMD_SET_FIRST+2
00713 #define CMD_SET_RAMPUP CMD_SET_FIRST+3
00714 #define CMD_SET_RAMPDOWN CMD_SET_FIRST+4
00715 #define CMD_SET_TRIP_TIME CMD_SET_FIRST+5
00716 #define CMD_SET_LAST CMD_SET_FIRST+5
00717
00718 #define CMD_GET_FIRST CMD_SET_LAST+1
00719 #define CMD_GET CMD_GET_FIRST // = 19
00720 #define CMD_GET_CURRENT CMD_GET_FIRST+1
00721 #define CMD_GET_LAST CMD_GET_FIRST+1
00722
00723 #define CMD_GET_DIRECT CMD_GET_LAST+1
00724 #define CMD_GET_DEMAND CMD_GET_DIRECT // = 22
00725 #define CMD_GET_VOLTAGE_LIMIT CMD_GET_DIRECT+1
00726 #define CMD_GET_CURRENT_LIMIT CMD_GET_DIRECT+2
00727 #define CMD_GET_RAMPUP CMD_GET_DIRECT+3
00728 #define CMD_GET_RAMPDOWN CMD_GET_DIRECT+4
00729 #define CMD_GET_TRIP_TIME CMD_GET_DIRECT+5
00730 #define CMD_GET_DIRECT_LAST CMD_GET_DIRECT+5
00731
00732 #define CMD_ENABLE_COMMAND (1<<14)
00733 #define CMD_DISABLE_COMMAND (1<<15)
00734
00735
00736
00737 #define CMD_WRITE 100
00738 #define CMD_READ 101
00739 #define CMD_PUTS 102
00740 #define CMD_GETS 103
00741 #define CMD_DEBUG 104
00742 #define CMD_NAME 105
00743
00744
00745
00746 #define CMD_INTERRUPT_ENABLE 100
00747 #define CMD_INTERRUPT_DISABLE 101
00748 #define CMD_INTERRUPT_ATTACH 102
00749 #define CMD_INTERRUPT_DETACH 103
00750
00751
00752
00753 #define BD_GETS(s,z,p,t) info->bd(CMD_GETS, info->bd_info, s, z, p, t)
00754 #define BD_READS(s,z,p,t) info->bd(CMD_READ, info->bd_info, s, z, p, t)
00755 #define BD_PUTS(s) info->bd(CMD_PUTS, info->bd_info, s)
00756 #define BD_WRITES(s) info->bd(CMD_WRITE, info->bd_info, s)
00757
00758
00759
00760
00761
00762
00763
00764
00765 #define ANA_CONTINUE 1
00766 #define ANA_SKIP 0
00767
00768
00769
00770
00771
00772
00773
00774
00775
00776
00777
00778
00779
00780
00781 typedef struct {
00782 short int event_id;
00783 short int trigger_mask;
00784 DWORD serial_number;
00785 DWORD time_stamp;
00786 DWORD data_size;
00787 } EVENT_HEADER;
00788
00789
00790
00791
00792
00793
00794 #define TRIGGER_MASK(e) ((((EVENT_HEADER *) e)-1)->trigger_mask)
00795
00796
00797
00798
00799
00800
00801 #define EVENT_ID(e) ((((EVENT_HEADER *) e)-1)->event_id)
00802
00803
00804
00805
00806
00807
00808 #define SERIAL_NUMBER(e) ((((EVENT_HEADER *) e)-1)->serial_number)
00809
00810
00811
00812
00813
00814
00815 #define TIME_STAMP(e) ((((EVENT_HEADER *) e)-1)->time_stamp)
00816
00817
00818
00819
00820
00821
00822 #define DATA_SIZE(e) ((((EVENT_HEADER *) e)-1)->data_size)
00823
00824 #define EVENT_SOURCE(e,o) (* (INT*) (e+o))
00825
00826
00827
00828 #define EVENTID_BOR ((short int) 0x8000)
00829 #define EVENTID_EOR ((short int) 0x8001)
00830 #define EVENTID_MESSAGE ((short int) 0x8002)
00831
00832
00833
00834 #define EVENTID_FRAG1 ((unsigned short) 0xC000)
00835 #define EVENTID_FRAG ((unsigned short) 0xD000)
00836
00837
00838
00839 #define MIDAS_MAGIC 0x494d
00840
00841
00842
00843
00844 typedef struct {
00845 INT id;
00846 BOOL valid;
00847 short int event_id;
00848 short int trigger_mask;
00849 INT sampling_type;
00850 } EVENT_REQUEST;
00851
00852 typedef struct {
00853 char name[NAME_LENGTH];
00854 INT pid;
00855 INT unused0;
00856 INT unused;
00857 INT port;
00858 INT read_pointer;
00859 INT max_request_index;
00860 INT num_received_events;
00861 INT num_sent_events;
00862 INT num_waiting_events;
00863 float data_rate;
00864 BOOL read_wait;
00865 INT write_wait;
00866 BOOL wake_up;
00867 BOOL all_flag;
00868 DWORD last_activity;
00869 DWORD watchdog_timeout;
00870
00871 EVENT_REQUEST event_request[MAX_EVENT_REQUESTS];
00872
00873 } BUFFER_CLIENT;
00874
00875 typedef struct {
00876 char name[NAME_LENGTH];
00877 INT num_clients;
00878 INT max_client_index;
00879 INT size;
00880 INT read_pointer;
00881 INT write_pointer;
00882 INT num_in_events;
00883 INT num_out_events;
00884
00885 BUFFER_CLIENT client[MAX_CLIENTS];
00886
00887 } BUFFER_HEADER;
00888
00889
00890
00891 typedef struct {
00892 BOOL attached;
00893 INT client_index;
00894 BUFFER_HEADER *buffer_header;
00895 void *buffer_data;
00896 char *read_cache;
00897 INT read_cache_size;
00898 INT read_cache_rp;
00899 INT read_cache_wp;
00900 char *write_cache;
00901 INT write_cache_size;
00902 INT write_cache_rp;
00903 INT write_cache_wp;
00904 HNDLE semaphore;
00905 INT shm_handle;
00906 INT index;
00907 BOOL callback;
00908
00909 } BUFFER;
00910
00911 typedef struct {
00912 DWORD type;
00913 INT num_values;
00914 char name[NAME_LENGTH];
00915 INT data;
00916 INT total_size;
00917 INT item_size;
00918 WORD access_mode;
00919 WORD notify_count;
00920 INT next_key;
00921 INT parent_keylist;
00922 INT last_written;
00923 } KEY;
00924
00925 typedef struct {
00926 INT parent;
00927 INT num_keys;
00928 INT first_key;
00929 } KEYLIST;
00930
00931
00932
00933
00934
00935
00936
00937
00938
00939
00940 #define DF_INPUT (1<<0)
00941 #define DF_OUTPUT (1<<1)
00942 #define DF_PRIO_DEVICE (1<<2)
00943 #define DF_READ_ONLY (1<<3)
00944 #define DF_MULTITHREAD (1<<4) //*< access device with a dedicated thread */
00945 #define DF_HW_RAMP (1<<5) //*< high voltage device can do hardware ramping */
00946
00947 typedef struct {
00948 char name[NAME_LENGTH];
00949 INT(*bd) (INT cmd, ...);
00950 void *bd_info;
00951 } BUS_DRIVER;
00952
00953 typedef struct {
00954 float variable[CMD_GET_LAST+1];
00955 char label[NAME_LENGTH];
00956 } DD_MT_CHANNEL;
00957
00958 typedef struct {
00959 INT n_channels;
00960 midas_thread_t thread_id;
00961 INT status;
00962 DD_MT_CHANNEL *channel;
00963
00964 } DD_MT_BUFFER;
00965
00966 typedef struct {
00967 WORD event_id;
00968 WORD trigger_mask;
00969 char buffer[NAME_LENGTH];
00970 INT eq_type;
00971 INT source;
00972 char format[8];
00973 BOOL enabled;
00974 INT read_on;
00975 INT period;
00976 double event_limit;
00977 DWORD num_subevents;
00978 INT history;
00979 char frontend_host[NAME_LENGTH];
00980 char frontend_name[NAME_LENGTH];
00981 char frontend_file_name[256];
00982 char status[256];
00983 char status_color[NAME_LENGTH];
00984 } EQUIPMENT_INFO;
00985
00986 typedef struct {
00987 char name[NAME_LENGTH];
00988 INT(*dd) (INT cmd, ...);
00989 INT channels;
00990 INT(*bd) (INT cmd, ...);
00991 DWORD flags;
00992 void *dd_info;
00993 DD_MT_BUFFER *mt_buffer;
00994 INT stop_thread;
00995 MUTEX_T *mutex;
00996 INT semaphore;
00997 EQUIPMENT_INFO *pequipment;
00998 } DEVICE_DRIVER;
00999
01000 INT device_driver(DEVICE_DRIVER *device_driver, INT cmd, ...);
01001
01002 typedef struct {
01003 double events_sent;
01004 double events_per_sec;
01005 double kbytes_per_sec;
01006 } EQUIPMENT_STATS;
01007
01008 typedef struct eqpmnt *PEQUIPMENT;
01009
01010 typedef struct eqpmnt {
01011 char name[NAME_LENGTH];
01012 EQUIPMENT_INFO info;
01013 INT(*readout) (char *, INT);
01014 INT(*cd) (INT cmd, PEQUIPMENT);
01015 DEVICE_DRIVER *driver;
01016 void *event_descrip;
01017 void *cd_info;
01018 INT status;
01019 DWORD last_called;
01020 DWORD last_idle;
01021 DWORD poll_count;
01022 INT format;
01023 HNDLE buffer_handle;
01024 HNDLE hkey_variables;
01025 DWORD serial_number;
01026 DWORD subevent_number;
01027 DWORD odb_out;
01028 DWORD odb_in;
01029 DWORD bytes_sent;
01030 DWORD events_sent;
01031 EQUIPMENT_STATS stats;
01032 } EQUIPMENT;
01033
01034
01035
01036
01037
01038
01039
01040
01041
01042 #define BANK_FORMAT_VERSION 1
01043 #define BANK_FORMAT_32BIT (1<<4)
01044
01045 typedef struct {
01046 DWORD data_size;
01047 DWORD flags;
01048 } BANK_HEADER;
01049
01050 typedef struct {
01051 char name[4];
01052 WORD type;
01053 WORD data_size;
01054 } BANK;
01055
01056 typedef struct {
01057 char name[4];
01058 DWORD type;
01059 DWORD data_size;
01060 } BANK32;
01061
01062 typedef struct {
01063 char name[NAME_LENGTH];
01064 DWORD type;
01065 DWORD n_data;
01066 } TAG;
01067
01068 typedef struct {
01069 char name[9];
01070 WORD type;
01071 DWORD size;
01072 char **init_str;
01073 BOOL output_flag;
01074 void *addr;
01075 DWORD n_data;
01076 HNDLE def_key;
01077 } BANK_LIST;
01078
01079
01080
01081
01082
01083
01084
01085
01086 typedef struct {
01087 char name[NAME_LENGTH];
01088 char author[NAME_LENGTH];
01089 INT(*analyzer) (EVENT_HEADER *, void *);
01090
01091 INT(*bor) (INT run_number);
01092 INT(*eor) (INT run_number);
01093 INT(*init) ();
01094 INT(*exit) ();
01095 void *parameters;
01096 INT param_size;
01097 char **init_str;
01098 BOOL enabled;
01099 void *histo_folder;
01100 } ANA_MODULE;
01101
01102 typedef struct {
01103 INT event_id;
01104 INT trigger_mask;
01105 INT sampling_type;
01106 char buffer[NAME_LENGTH];
01107 BOOL enabled;
01108 char client_name[NAME_LENGTH];
01109 char host[NAME_LENGTH];
01110 } AR_INFO;
01111
01112 typedef struct {
01113 double events_received;
01114 double events_per_sec;
01115 double events_written;
01116 } AR_STATS;
01117
01118 typedef struct {
01119 char event_name[NAME_LENGTH];
01120 AR_INFO ar_info;
01121 INT(*analyzer) (EVENT_HEADER *, void *);
01122 ANA_MODULE **ana_module;
01123 BANK_LIST *bank_list;
01124 INT rwnt_buffer_size;
01125 BOOL use_tests;
01126 char **init_string;
01127 INT status;
01128 HNDLE buffer_handle;
01129 HNDLE request_id;
01130 HNDLE hkey_variables;
01131 HNDLE hkey_common;
01132 void *addr;
01133 struct {
01134 DWORD run;
01135 DWORD serial;
01136 DWORD time;
01137 } number;
01138 DWORD events_received;
01139 DWORD events_written;
01140 AR_STATS ar_stats;
01141
01142 } ANALYZE_REQUEST;
01143
01144
01145 typedef struct {
01146 char filename[256];
01147 BOOL rwnt;
01148 BOOL histo_dump;
01149 char histo_dump_filename[256];
01150 BOOL clear_histos;
01151 char last_histo_filename[256];
01152 BOOL events_to_odb;
01153 char global_memory_name[8];
01154 } ANA_OUTPUT_INFO;
01155
01156 #define ANA_OUTPUT_INFO_STR "\
01157 Filename = STRING : [256] run%05d.asc\n\
01158 RWNT = BOOL : 0\n\
01159 Histo Dump = BOOL : 0\n\
01160 Histo Dump Filename = STRING : [256] his%05d.rz\n\
01161 Clear histos = BOOL : 1\n\
01162 Last Histo Filename = STRING : [256] last.rz\n\
01163 Events to ODB = BOOL : 1\n\
01164 Global Memory Name = STRING : [8] ONLN\n\
01165 "
01166
01167
01168
01169 typedef struct {
01170 char name[80];
01171 BOOL registered;
01172 DWORD count;
01173 DWORD previous_count;
01174 BOOL value;
01175 } ANA_TEST;
01176
01177 #define SET_TEST(t, v) { if (!t.registered) test_register(&t); t.value = (v); }
01178 #define TEST(t) (t.value)
01179
01180 #ifdef DEFINE_TESTS
01181 #define DEF_TEST(t) ANA_TEST t = { #t, 0, 0, FALSE };
01182 #else
01183 #define DEF_TEST(t) extern ANA_TEST t;
01184 #endif
01185
01186
01187
01188
01189
01190
01191
01192
01193
01194 #define RT_DATA (*((DWORD *) "HSDA"))
01195 #define RT_DEF (*((DWORD *) "HSDF"))
01196
01197 typedef struct {
01198 DWORD record_type;
01199 DWORD event_id;
01200 DWORD time;
01201 DWORD def_offset;
01202 DWORD data_size;
01203 } HIST_RECORD;
01204
01205 typedef struct {
01206 DWORD event_id;
01207 char event_name[NAME_LENGTH];
01208 DWORD def_offset;
01209 } DEF_RECORD;
01210
01211 typedef struct {
01212 DWORD event_id;
01213 DWORD time;
01214 DWORD offset;
01215 } INDEX_RECORD;
01216
01217 typedef struct {
01218 DWORD event_id;
01219 char event_name[NAME_LENGTH];
01220 DWORD n_tag;
01221 TAG *tag;
01222 DWORD hist_fh;
01223 DWORD index_fh;
01224 DWORD def_fh;
01225 DWORD base_time;
01226 DWORD def_offset;
01227 } HISTORY;
01228
01229
01230
01231
01232
01233
01234
01235
01236
01237
01238
01239
01240 typedef struct {
01241 INT state;
01242 INT online_mode;
01243 INT run_number;
01244 INT transition_in_progress;
01245 INT start_abort;
01246 INT requested_transition;
01247 char start_time[32];
01248 DWORD start_time_binary;
01249 char stop_time[32];
01250 DWORD stop_time_binary;
01251 } RUNINFO;
01252
01253 #define RUNINFO_STR(_name) const char *_name[] = {\
01254 "[.]",\
01255 "State = INT : 1",\
01256 "Online Mode = INT : 1",\
01257 "Run number = INT : 0",\
01258 "Transition in progress = INT : 0",\
01259 "Start abort = INT : 0",\
01260 "Requested transition = INT : 0",\
01261 "Start time = STRING : [32] Tue Sep 09 15:04:42 1997",\
01262 "Start time binary = DWORD : 0",\
01263 "Stop time = STRING : [32] Tue Sep 09 15:04:42 1997",\
01264 "Stop time binary = DWORD : 0",\
01265 "",\
01266 NULL }
01267
01268
01269
01270
01271
01272
01273
01274
01275
01276
01277
01278
01279 typedef struct {
01280 BOOL required;
01281 INT watchdog_timeout;
01282 DWORD check_interval;
01283 char start_command[256];
01284 BOOL auto_start;
01285 BOOL auto_stop;
01286 BOOL auto_restart;
01287 char alarm_class[32];
01288 DWORD first_failed;
01289 } PROGRAM_INFO;
01290
01291 #define AT_INTERNAL 1
01292 #define AT_PROGRAM 2
01293 #define AT_EVALUATED 3
01294 #define AT_PERIODIC 4
01295 #define AT_LAST 4
01296
01297 #define PROGRAM_INFO_STR(_name) const char *_name[] = {\
01298 "[.]",\
01299 "Required = BOOL : n",\
01300 "Watchdog timeout = INT : 10000",\
01301 "Check interval = DWORD : 180000",\
01302 "Start command = STRING : [256] ",\
01303 "Auto start = BOOL : n",\
01304 "Auto stop = BOOL : n",\
01305 "Auto restart = BOOL : n",\
01306 "Alarm class = STRING : [32] ",\
01307 "First failed = DWORD : 0",\
01308 "",\
01309 NULL }
01310
01311
01312
01313 typedef struct {
01314 BOOL write_system_message;
01315 BOOL write_elog_message;
01316 INT system_message_interval;
01317 DWORD system_message_last;
01318 char execute_command[256];
01319 INT execute_interval;
01320 DWORD execute_last;
01321 BOOL stop_run;
01322 char display_bgcolor[32];
01323 char display_fgcolor[32];
01324 } ALARM_CLASS;
01325
01326 #define ALARM_CLASS_STR(_name) const char *_name[] = {\
01327 "[.]",\
01328 "Write system message = BOOL : y",\
01329 "Write Elog message = BOOL : n",\
01330 "System message interval = INT : 60",\
01331 "System message last = DWORD : 0",\
01332 "Execute command = STRING : [256] ",\
01333 "Execute interval = INT : 0",\
01334 "Execute last = DWORD : 0",\
01335 "Stop run = BOOL : n",\
01336 "Display BGColor = STRING : [32] red",\
01337 "Display FGColor = STRING : [32] black",\
01338 "",\
01339 NULL }
01340
01341
01342
01343 typedef struct {
01344 BOOL active;
01345 INT triggered;
01346 INT type;
01347 INT check_interval;
01348 DWORD checked_last;
01349 char time_triggered_first[32];
01350 char time_triggered_last[32];
01351 char condition[256];
01352 char alarm_class[32];
01353 char alarm_message[80];
01354 } ALARM;
01355
01356 #define ALARM_ODB_STR(_name) const char *_name[] = {\
01357 "[.]",\
01358 "Active = BOOL : n",\
01359 "Triggered = INT : 0",\
01360 "Type = INT : 3",\
01361 "Check interval = INT : 60",\
01362 "Checked last = DWORD : 0",\
01363 "Time triggered first = STRING : [32] ",\
01364 "Time triggered last = STRING : [32] ",\
01365 "Condition = STRING : [256] /Runinfo/Run number > 100",\
01366 "Alarm Class = STRING : [32] Alarm",\
01367 "Alarm Message = STRING : [80] Run number became too large",\
01368 "",\
01369 NULL }
01370
01371 #define ALARM_PERIODIC_STR(_name) const char *_name[] = {\
01372 "[.]",\
01373 "Active = BOOL : n",\
01374 "Triggered = INT : 0",\
01375 "Type = INT : 4",\
01376 "Check interval = INT : 28800",\
01377 "Checked last = DWORD : 0",\
01378 "Time triggered first = STRING : [32] ",\
01379 "Time triggered last = STRING : [32] ",\
01380 "Condition = STRING : [256] ",\
01381 "Alarm Class = STRING : [32] Warning",\
01382 "Alarm Message = STRING : [80] Please do your shift checks",\
01383 "",\
01384 NULL }
01385
01386
01387
01388
01389
01390 #ifndef DOXYGEN_SHOULD_SKIP_THIS
01391
01392
01393
01394 #ifdef _MEM_DBG
01395 #define M_MALLOC(x) dbg_malloc((x), __FILE__, __LINE__)
01396 #define M_CALLOC(x,y) dbg_calloc((x), (y), __FILE__, __LINE__)
01397 #define M_FREE(x) dbg_free ((x), __FILE__, __LINE__)
01398 #else
01399 #define M_MALLOC(x) malloc(x)
01400 #define M_CALLOC(x,y) calloc(x,y)
01401 #define M_FREE(x) free(x)
01402 #endif
01403
01404 void *dbg_malloc(unsigned int size, char *file, int line);
01405 void *dbg_calloc(unsigned int size, unsigned int count, char *file, int line);
01406 void dbg_free(void *adr, char *file, int line);
01407
01408
01409
01410 #ifdef extname
01411 #define PAWC_NAME pawc_
01412 #else
01413 #define PAWC_NAME PAWC
01414 #endif
01415
01416 #define PAWC_DEFINE(size) \
01417 INT PAWC_NAME[size/4]; \
01418 INT pawc_size = size
01419
01420
01421 #undef GetCurrentTime
01422
01423
01424
01425
01426
01427 #define RPC_IN (1 << 0)
01428 #define RPC_OUT (1 << 1)
01429 #define RPC_POINTER (1 << 2)
01430 #define RPC_FIXARRAY (1 << 3)
01431 #define RPC_VARARRAY (1 << 4)
01432 #define RPC_OUTGOING (1 << 5)
01433
01434
01435
01436 #define ST_NONE 0
01437 #define ST_SINGLE 1
01438 #define ST_MTHREAD 2
01439 #define ST_MPROCESS 3
01440 #define ST_SUBPROCESS 4
01441 #define ST_REMOTE 5
01442
01443
01444
01445 typedef struct {
01446 WORD tid;
01447 WORD flags;
01448 INT n;
01449 } RPC_PARAM;
01450
01451 typedef struct {
01452 INT id;
01453 char *name;
01454 RPC_PARAM param[20];
01455 INT(*dispatch) (INT, void **);
01456 } RPC_LIST;
01457
01458
01459
01460 #define RPC_MIN_ID 1
01461 #define RPC_MAX_ID 9999
01462
01463
01464
01465 #define CF_ENDIAN (1<<0)
01466 #define CF_IEEE2VAX (1<<1)
01467 #define CF_VAX2IEEE (1<<2)
01468 #define CF_ASCII (1<<3)
01469
01470 #define CBYTE(_i) (* ((BYTE *) prpc_param[_i]))
01471 #define CPBYTE(_i) ( ((BYTE *) prpc_param[_i]))
01472
01473 #define CSHORT(_i) (* ((short *) prpc_param[_i]))
01474 #define CPSHORT(_i) ( ((short *) prpc_param[_i]))
01475
01476 #define CINT(_i) (* ((INT *) prpc_param[_i]))
01477 #define CPINT(_i) ( ((INT *) prpc_param[_i]))
01478
01479 #define CWORD(_i) (* ((WORD *) prpc_param[_i]))
01480 #define CPWORD(_i) ( ((WORD *) prpc_param[_i]))
01481
01482 #define CLONG(_i) (* ((long *) prpc_param[_i]))
01483 #define CPLONG(_i) ( ((long *) prpc_param[_i]))
01484
01485 #define CDWORD(_i) (* ((DWORD *) prpc_param[_i]))
01486 #define CPDWORD(_i) ( ((DWORD *) prpc_param[_i]))
01487
01488 #define CHNDLE(_i) (* ((HNDLE *) prpc_param[_i]))
01489 #define CPHNDLE(_i) ( ((HNDLE *) prpc_param[_i]))
01490
01491 #define CBOOL(_i) (* ((BOOL *) prpc_param[_i]))
01492 #define CPBOOL(_i) ( ((BOOL *) prpc_param[_i]))
01493
01494 #define CFLOAT(_i) (* ((float *) prpc_param[_i]))
01495 #define CPFLOAT(_i) ( ((float *) prpc_param[_i]))
01496
01497 #define CDOUBLE(_i) (* ((double *) prpc_param[_i]))
01498 #define CPDOUBLE(_i) ( ((double *) prpc_param[_i]))
01499
01500 #define CSTRING(_i) ( ((char *) prpc_param[_i]))
01501 #define CARRAY(_i) ( ((void *) prpc_param[_i]))
01502
01503 #define CBYTE(_i) (* ((BYTE *) prpc_param[_i]))
01504 #define CPBYTE(_i) ( ((BYTE *) prpc_param[_i]))
01505
01506 #define CSHORT(_i) (* ((short *) prpc_param[_i]))
01507 #define CPSHORT(_i) ( ((short *) prpc_param[_i]))
01508
01509 #define CINT(_i) (* ((INT *) prpc_param[_i]))
01510 #define CPINT(_i) ( ((INT *) prpc_param[_i]))
01511
01512 #define CWORD(_i) (* ((WORD *) prpc_param[_i]))
01513 #define CPWORD(_i) ( ((WORD *) prpc_param[_i]))
01514
01515 #define CLONG(_i) (* ((long *) prpc_param[_i]))
01516 #define CPLONG(_i) ( ((long *) prpc_param[_i]))
01517
01518 #define CDWORD(_i) (* ((DWORD *) prpc_param[_i]))
01519 #define CPDWORD(_i) ( ((DWORD *) prpc_param[_i]))
01520
01521 #define CHNDLE(_i) (* ((HNDLE *) prpc_param[_i]))
01522 #define CPHNDLE(_i) ( ((HNDLE *) prpc_param[_i]))
01523
01524 #define CBOOL(_i) (* ((BOOL *) prpc_param[_i]))
01525 #define CPBOOL(_i) ( ((BOOL *) prpc_param[_i]))
01526
01527 #define CFLOAT(_i) (* ((float *) prpc_param[_i]))
01528 #define CPFLOAT(_i) ( ((float *) prpc_param[_i]))
01529
01530 #define CDOUBLE(_i) (* ((double *) prpc_param[_i]))
01531 #define CPDOUBLE(_i) ( ((double *) prpc_param[_i]))
01532
01533 #define CSTRING(_i) ( ((char *) prpc_param[_i]))
01534 #define CARRAY(_i) ( ((void *) prpc_param[_i]))
01535
01536
01537
01538 #define cBYTE (* ((BYTE *) prpc_param[--n_param]))
01539 #define cPBYTE ( ((BYTE *) prpc_param[--n_param]))
01540
01541 #define cSHORT (* ((short *) prpc_param[--n_param]))
01542 #define cPSHORT ( ((short *) prpc_param[--n_param]))
01543
01544 #define cINT (* ((INT *) prpc_param[--n_param]))
01545 #define cPINT ( ((INT *) prpc_param[--n_param]))
01546
01547 #define cWORD (* ((WORD *) prpc_param[--n_param]))
01548 #define cPWORD ( ((WORD *) prpc_param[--n_param]))
01549
01550 #define cLONG (* ((long *) prpc_param[--n_param]))
01551 #define cPLONG ( ((long *) prpc_param[--n_param]))
01552
01553 #define cDWORD (* ((DWORD *) prpc_param[--n_param]))
01554 #define cPDWORD ( ((DWORD *) prpc_param[--n_param]))
01555
01556 #define cHNDLE (* ((HNDLE *) prpc_param[--n_param]))
01557 #define cPHNDLE ( ((HNDLE *) prpc_param[--n_param]))
01558
01559 #define cBOOL (* ((BOOL *) prpc_param[--n_param]))
01560 #define cPBOOL ( ((BOOL *) prpc_param[--n_param]))
01561
01562 #define cFLOAT (* ((float *) prpc_param[--n_param]))
01563 #define cPFLOAT ( ((float *) prpc_param[--n_param]))
01564
01565 #define cDOUBLE (* ((double *) prpc_param[--n_param]))
01566 #define cPDOUBLE ( ((double *) prpc_param[--n_param]))
01567
01568 #define cSTRING ( ((char *) prpc_param[--n_param]))
01569 #define cARRAY ( ((void *) prpc_param[--n_param]))
01570
01571
01572
01573
01574 #ifdef __cplusplus
01575 extern "C" {
01576 #endif
01577
01578
01579 #if defined(OS_WINNT) && defined(MIDAS_DLL)
01580 #define EXPRT __declspec(dllexport)
01581 #else
01582 #define EXPRT
01583 #endif
01584
01585
01586 INT EXPRT cm_get_error(INT code, char *string);
01587 char EXPRT *cm_get_version(void);
01588 INT EXPRT cm_get_revision(void);
01589 INT EXPRT cm_get_environment(char *host_name, int host_name_size,
01590 char *exp_name, int exp_name_size);
01591 INT EXPRT cm_list_experiments(const char *host_name,
01592 char exp_name[MAX_EXPERIMENT][NAME_LENGTH]);
01593 INT EXPRT cm_select_experiment(const char *host_name, char *exp_name);
01594 INT EXPRT cm_connect_experiment(const char *host_name, const char *exp_name,
01595 const char *client_name, void (*func) (char *));
01596 INT EXPRT cm_connect_experiment1(const char *host_name, const char *exp_name,
01597 const char *client_name,
01598 void (*func) (char *), INT odb_size,
01599 DWORD watchdog_timeout);
01600 INT EXPRT cm_disconnect_experiment(void);
01601 INT EXPRT cm_register_transition(INT transition, INT(*func) (INT, char *),
01602 int sequence_number);
01603 INT EXPRT cm_deregister_transition(INT transition);
01604 INT EXPRT cm_set_transition_sequence(INT transition, INT sequence_number);
01605 INT EXPRT cm_query_transition(int *transition, int *run_number, int *trans_time);
01606 INT EXPRT cm_register_deferred_transition(INT transition, BOOL(*func) (INT, BOOL));
01607 INT EXPRT cm_check_deferred_transition(void);
01608 INT EXPRT cm_transition(INT transition, INT run_number, char *error,
01609 INT strsize, INT async_flag, INT debug_flag);
01610 INT EXPRT cm_register_server(void);
01611 INT EXPRT cm_register_function(INT id, INT(*func) (INT, void **));
01612 INT EXPRT cm_connect_client(char *client_name, HNDLE * hConn);
01613 INT EXPRT cm_disconnect_client(HNDLE hConn, BOOL bShutdown);
01614 INT EXPRT cm_set_experiment_database(HNDLE hDB, HNDLE hKeyClient);
01615 INT EXPRT cm_get_experiment_database(HNDLE * hDB, HNDLE * hKeyClient);
01616 INT EXPRT cm_set_experiment_semaphore(INT semaphore_alarm, INT semaphore_elog, INT semaphore_history, INT semaphore_msg);
01617 INT EXPRT cm_get_experiment_semaphore(INT * semaphore_alarm, INT * semaphore_elog, INT * semaphore_history, INT * semaphore_msg);
01618 INT EXPRT cm_set_client_info(HNDLE hDB, HNDLE * hKeyClient,
01619 char *host_name, char *client_name,
01620 INT computer_id, char *password, DWORD watchdog_timeout);
01621 INT EXPRT cm_get_client_info(char *client_name);
01622 INT EXPRT cm_check_client(HNDLE hDB, HNDLE hKeyClient);
01623 INT EXPRT cm_set_watchdog_params(BOOL call_watchdog, DWORD timeout);
01624 INT EXPRT cm_get_watchdog_params(BOOL * call_watchdog, DWORD * timeout);
01625 INT EXPRT cm_get_watchdog_info(HNDLE hDB, char *client_name,
01626 DWORD * timeout, DWORD * last);
01627 INT EXPRT cm_enable_watchdog(BOOL flag);
01628 void EXPRT cm_watchdog(int);
01629 INT EXPRT cm_shutdown(const char *name, BOOL bUnique);
01630 INT EXPRT cm_exist(const char *name, BOOL bUnique);
01631 INT EXPRT cm_cleanup(const char *client_name, BOOL ignore_timeout);
01632 INT EXPRT cm_yield(INT millisec);
01633 INT EXPRT cm_execute(const char *command, char *result, INT buf_size);
01634 INT EXPRT cm_synchronize(DWORD * sec);
01635 INT EXPRT cm_asctime(char *str, INT buf_size);
01636 INT EXPRT cm_time(DWORD * t);
01637 BOOL EXPRT cm_is_ctrlc_pressed();
01638 void EXPRT cm_ack_ctrlc_pressed();
01639
01640 INT EXPRT cm_set_msg_print(INT system_mask, INT user_mask, int (*func) (const char *));
01641 INT EXPRT cm_msg(INT message_type, const char *filename, INT line,
01642 const char *routine, const char *format, ...);
01643 INT EXPRT cm_msg1(INT message_type, const char *filename, INT line,
01644 const char *facility, const char *routine, const char *format, ...);
01645 INT EXPRT cm_msg_register(void (*func)
01646 (HNDLE, HNDLE, EVENT_HEADER *, void *));
01647 INT EXPRT cm_msg_retrieve(INT n_message, char *message, INT buf_size);
01648
01649 BOOL EXPRT equal_ustring(const char *str1, const char *str2);
01650
01651
01652 INT EXPRT bm_open_buffer(char *buffer_name, INT buffer_size, INT * buffer_handle);
01653 INT EXPRT bm_close_buffer(INT buffer_handle);
01654 INT EXPRT bm_close_all_buffers(void);
01655 INT EXPRT bm_init_buffer_counters(INT buffer_handle);
01656 INT EXPRT bm_get_buffer_info(INT buffer_handle, BUFFER_HEADER * buffer_header);
01657 INT EXPRT bm_get_buffer_level(INT buffer_handle, INT * n_bytes);
01658 INT EXPRT bm_set_cache_size(INT buffer_handle, INT read_size, INT write_size);
01659 INT EXPRT bm_compose_event(EVENT_HEADER * event_header,
01660 short int event_id, short int trigger_mask,
01661 DWORD size, DWORD serial);
01662 INT EXPRT bm_request_event(INT buffer_handle, short int event_id,
01663 short int trigger_mask, INT sampling_type,
01664 INT * request_id, void (*func) (HNDLE, HNDLE,
01665 EVENT_HEADER *, void *));
01666 INT EXPRT bm_add_event_request(INT buffer_handle, short int event_id,
01667 short int trigger_mask,
01668 INT sampling_type, void (*func) (HNDLE,
01669 HNDLE,
01670 EVENT_HEADER
01671 *,
01672 void *),
01673 INT request_id);
01674 INT EXPRT bm_delete_request(INT request_id);
01675 INT EXPRT bm_send_event(INT buffer_handle, void *event, INT buf_size, INT async_flag);
01676 INT EXPRT bm_receive_event(INT buffer_handle, void *destination,
01677 INT * buf_size, INT async_flag);
01678 INT EXPRT bm_skip_event(INT buffer_handle);
01679 INT EXPRT bm_flush_cache(INT buffer_handle, INT async_flag);
01680 INT EXPRT bm_poll_event(INT flag);
01681 INT EXPRT bm_empty_buffers(void);
01682
01683
01684 INT EXPRT db_open_database(const char *database_name, INT database_size,
01685 HNDLE * hdb, const char *client_name);
01686 INT EXPRT db_close_database(HNDLE database_handle);
01687 INT EXPRT db_close_all_databases(void);
01688 INT EXPRT db_protect_database(HNDLE database_handle);
01689
01690 INT EXPRT db_create_key(HNDLE hdb, HNDLE key_handle, const char *key_name, DWORD type);
01691 INT EXPRT db_create_link(HNDLE hdb, HNDLE key_handle, const char *link_name,
01692 const char *destination);
01693 INT EXPRT db_set_value(HNDLE hdb, HNDLE hKeyRoot, const char *key_name,
01694 const void *data, INT size, INT num_values, DWORD type);
01695 INT EXPRT db_set_value_index(HNDLE hDB, HNDLE hKeyRoot, const char *key_name, const void *data,
01696 INT data_size, INT index, DWORD type, BOOL truncate);
01697 INT EXPRT db_get_value(HNDLE hdb, HNDLE hKeyRoot, const char *key_name,
01698 void *data, INT * size, DWORD type, BOOL create);
01699 INT EXPRT db_find_key(HNDLE hdb, HNDLE hkey, const char *name, HNDLE * hsubkey);
01700 INT EXPRT db_find_link(HNDLE hDB, HNDLE hKey, const char *key_name, HNDLE * subhKey);
01701 INT EXPRT db_find_key1(HNDLE hdb, HNDLE hkey, const char *name, HNDLE * hsubkey);
01702 INT EXPRT db_find_link1(HNDLE hDB, HNDLE hKey, const char *key_name, HNDLE * subhKey);
01703 INT EXPRT db_scan_tree(HNDLE hDB, HNDLE hKey, int level,
01704 INT(*callback) (HNDLE, HNDLE, KEY *, INT, void *), void *info);
01705 INT EXPRT db_scan_tree_link(HNDLE hDB, HNDLE hKey, int level,
01706 void (*callback) (HNDLE, HNDLE, KEY *, INT,
01707 void *), void *info);
01708 INT EXPRT db_get_path(HNDLE hDB, HNDLE hKey, char *path, INT buf_size);
01709 INT EXPRT db_delete_key(HNDLE database_handle, HNDLE key_handle, BOOL follow_links);
01710 INT EXPRT db_enum_key(HNDLE hdb, HNDLE key_handle, INT index, HNDLE * subkey_handle);
01711 INT EXPRT db_enum_link(HNDLE hdb, HNDLE key_handle, INT index, HNDLE * subkey_handle);
01712 INT EXPRT db_get_next_link(HNDLE hdb, HNDLE key_handle, HNDLE * subkey_handle);
01713 INT EXPRT db_get_key(HNDLE hdb, HNDLE key_handle, KEY * key);
01714 INT EXPRT db_get_link(HNDLE hdb, HNDLE key_handle, KEY * key);
01715 INT EXPRT db_get_key_info(HNDLE hDB, HNDLE hKey, char *name,
01716 INT name_size, INT * type, INT * num_values,
01717 INT * item_size);
01718 INT EXPRT db_get_key_time(HNDLE hdb, HNDLE key_handle, DWORD * delta);
01719 INT EXPRT db_rename_key(HNDLE hDB, HNDLE hKey, const char *name);
01720 INT EXPRT db_reorder_key(HNDLE hDB, HNDLE hKey, INT index);
01721 INT EXPRT db_get_data(HNDLE hdb, HNDLE key_handle, void *data,
01722 INT * buf_size, DWORD type);
01723 INT EXPRT db_get_link_data(HNDLE hdb, HNDLE key_handle, void *data,
01724 INT * buf_size, DWORD type);
01725 INT EXPRT db_get_data1(HNDLE hDB, HNDLE hKey, void *data,
01726 INT * buf_size, DWORD type, INT * num_values);
01727 INT EXPRT db_get_data_index(HNDLE hDB, HNDLE hKey, void *data,
01728 INT * buf_size, INT index, DWORD type);
01729 INT EXPRT db_set_data(HNDLE hdb, HNDLE hKey, const void *data, INT buf_size,
01730 INT num_values, DWORD type);
01731 INT EXPRT db_set_link_data(HNDLE hDB, HNDLE hKey,
01732 const void *data, INT buf_size, INT num_values, DWORD type);
01733 INT EXPRT db_set_data_index(HNDLE hDB, HNDLE hKey, const void *data, INT size,
01734 INT index, DWORD type);
01735 INT EXPRT db_set_link_data_index(HNDLE hDB, HNDLE hKey, const void *data, INT size,
01736 INT index, DWORD type);
01737 INT EXPRT db_set_data_index2(HNDLE hDB, HNDLE hKey, const void *data,
01738 INT size, INT index, DWORD type, BOOL bNotify);
01739 INT EXPRT db_set_num_values(HNDLE hDB, HNDLE hKey, INT num_values);
01740 INT EXPRT db_merge_data(HNDLE hDB, HNDLE hKeyRoot, const char *name,
01741 void *data, INT data_size, INT num_values, INT type);
01742 INT EXPRT db_set_mode(HNDLE hdb, HNDLE key_handle, WORD mode, BOOL recurse);
01743 INT EXPRT db_create_record(HNDLE hdb, HNDLE hkey, const char *name, const char *init_str);
01744 INT EXPRT db_check_record(HNDLE hDB, HNDLE hKey, const char *key_name,
01745 const char *rec_str, BOOL correct);
01746 INT EXPRT db_open_record(HNDLE hdb, HNDLE hkey, void *ptr, INT rec_size,
01747 WORD access, void (*dispatcher) (INT, INT,
01748 void *), void *info);
01749 INT EXPRT db_close_record(HNDLE hdb, HNDLE hkey);
01750 INT EXPRT db_get_record(HNDLE hdb, HNDLE hKey, void *data, INT * buf_size, INT align);
01751 INT EXPRT db_get_record_size(HNDLE hdb, HNDLE hKey, INT align, INT * buf_size);
01752 INT EXPRT db_set_record(HNDLE hdb, HNDLE hKey, void *data, INT buf_size, INT align);
01753 INT EXPRT db_send_changed_records(void);
01754 INT EXPRT db_get_open_records(HNDLE hDB, HNDLE hKey, char *str,
01755 INT buf_size, BOOL fix);
01756
01757 INT EXPRT db_add_open_record(HNDLE hDB, HNDLE hKey, WORD access_mode);
01758 INT EXPRT db_remove_open_record(HNDLE hDB, HNDLE hKey, BOOL lock);
01759
01760 INT EXPRT db_load(HNDLE hdb, HNDLE key_handle, const char *filename, BOOL bRemote);
01761 INT EXPRT db_save(HNDLE hdb, HNDLE key_handle, const char *filename, BOOL bRemote);
01762 INT EXPRT db_copy(HNDLE hDB, HNDLE hKey, char *buffer, INT * buffer_size, char *path);
01763 INT EXPRT db_paste(HNDLE hDB, HNDLE hKeyRoot, const char *buffer);
01764 INT EXPRT db_paste_xml(HNDLE hDB, HNDLE hKeyRoot, const char *buffer);
01765 INT EXPRT db_save_struct(HNDLE hDB, HNDLE hKey, const char *file_name,
01766 const char *struct_name, BOOL append);
01767 INT EXPRT db_save_string(HNDLE hDB, HNDLE hKey, const char *file_name,
01768 const char *string_name, BOOL append);
01769 INT EXPRT db_save_xml(HNDLE hDB, HNDLE hKey, const char *file_name);
01770 INT EXPRT db_copy_xml(HNDLE hDB, HNDLE hKey, char *buffer, INT * buffer_size);
01771
01772 INT EXPRT db_sprintf(char *string, const void *data, INT data_size, INT index, DWORD type);
01773 INT EXPRT db_sprintff(char *string, const char *format, const void *data, INT data_size, INT index, DWORD type);
01774 INT EXPRT db_sprintfh(char *string, const void *data, INT data_size, INT index, DWORD type);
01775 INT EXPRT db_sscanf(const char *string, void *data, INT * data_size, INT index, DWORD type);
01776 char EXPRT *strcomb(const char **list);
01777
01778
01779 void EXPRT bk_init(void *pbh);
01780 void EXPRT bk_init32(void *event);
01781 BOOL EXPRT bk_is32(void *event);
01782 INT EXPRT bk_size(void *pbh);
01783 void EXPRT bk_create(void *pbh, const char *name, WORD type, void *pdata);
01784 INT EXPRT bk_delete(void *event, const char *name);
01785 INT EXPRT bk_close(void *pbh, void *pdata);
01786 INT EXPRT bk_list(void *pbh, char *bklist);
01787 INT EXPRT bk_locate(void *pbh, const char *name, void *pdata);
01788 INT EXPRT bk_iterate(void *pbh, BANK ** pbk, void *pdata);
01789 INT EXPRT bk_iterate32(void *pbh, BANK32 ** pbk, void *pdata);
01790 INT EXPRT bk_swap(void *event, BOOL force);
01791 INT EXPRT bk_find(BANK_HEADER * pbkh, const char *name, DWORD * bklen,
01792 DWORD * bktype, void **pdata);
01793
01794
01795 INT EXPRT rpc_clear_allowed_hosts();
01796 INT EXPRT rpc_add_allowed_host(const char* hostname);
01797
01798 INT EXPRT rpc_register_functions(const RPC_LIST * new_list, INT(*func) (INT, void **));
01799 INT EXPRT rpc_register_function(INT id, INT(*func) (INT, void **));
01800 INT EXPRT rpc_get_option(HNDLE hConn, INT item);
01801 INT EXPRT rpc_set_option(HNDLE hConn, INT item, INT value);
01802 INT EXPRT rpc_set_name(const char *name);
01803 INT EXPRT rpc_get_name(char *name);
01804 INT EXPRT rpc_is_remote(void);
01805 INT EXPRT rpc_set_debug(void (*func) (char *), INT mode);
01806 void EXPRT rpc_debug_printf(const char *format, ...);
01807
01808 INT EXPRT rpc_register_server(INT server_type, const char *name, INT * port,
01809 INT(*func) (INT, void **));
01810 INT EXPRT rpc_register_client(const char *name, RPC_LIST * list);
01811 INT EXPRT rpc_server_thread(void *pointer);
01812 INT EXPRT rpc_server_shutdown(void);
01813 INT EXPRT rpc_client_call(HNDLE hConn, const INT routine_id, ...);
01814 INT EXPRT rpc_call(const INT routine_id, ...);
01815 INT EXPRT rpc_tid_size(INT id);
01816 char EXPRT *rpc_tid_name(INT id);
01817 INT EXPRT rpc_server_connect(const char *host_name, const char *exp_name);
01818 INT EXPRT rpc_client_connect(const char *host_name, INT midas_port,
01819 const char *client_name, HNDLE * hConnection);
01820 INT EXPRT rpc_client_disconnect(HNDLE hConn, BOOL bShutdown);
01821
01822 INT EXPRT rpc_send_event(INT buffer_handle, void *source, INT buf_size,
01823 INT async_flag, INT mode);
01824 INT EXPRT rpc_flush_event(void);
01825
01826 void EXPRT rpc_get_convert_flags(INT * convert_flags);
01827 void EXPRT rpc_convert_single(void *data, INT tid, INT flags, INT convert_flags);
01828 void EXPRT rpc_convert_data(void *data, INT tid, INT flags, INT size,
01829 INT convert_flags);
01830
01831
01832 DWORD EXPRT ss_millitime(void);
01833 DWORD EXPRT ss_time(void);
01834 DWORD EXPRT ss_settime(DWORD seconds);
01835 char EXPRT *ss_asctime(void);
01836 INT EXPRT ss_sleep(INT millisec);
01837 BOOL EXPRT ss_kbhit(void);
01838
01839 double EXPRT ss_nan(void);
01840 int EXPRT ss_isnan(double x);
01841 int EXPRT ss_isfin(double x);
01842
01843 void EXPRT ss_clear_screen(void);
01844 void EXPRT ss_printf(INT x, INT y, const char *format, ...);
01845 void ss_set_screen_size(int x, int y);
01846
01847 char EXPRT *ss_getpass(char *prompt);
01848 INT EXPRT ss_getchar(BOOL reset);
01849 char EXPRT *ss_crypt(const char *key, const char *salt);
01850 char EXPRT *ss_gets(char *string, int size);
01851
01852 void EXPRT *ss_ctrlc_handler(void (*func) (int));
01853
01854
01855 INT EXPRT ss_directio_give_port(INT start, INT end);
01856 INT EXPRT ss_directio_lock_port(INT start, INT end);
01857
01858
01859 INT EXPRT ss_tape_open(char *path, INT oflag, INT * channel);
01860 INT EXPRT ss_tape_close(INT channel);
01861 INT EXPRT ss_tape_status(char *path);
01862 INT EXPRT ss_tape_read(INT channel, void *pdata, INT * count);
01863 INT EXPRT ss_tape_write(INT channel, void *pdata, INT count);
01864 INT EXPRT ss_tape_write_eof(INT channel);
01865 INT EXPRT ss_tape_fskip(INT channel, INT count);
01866 INT EXPRT ss_tape_rskip(INT channel, INT count);
01867 INT EXPRT ss_tape_rewind(INT channel);
01868 INT EXPRT ss_tape_spool(INT channel);
01869 INT EXPRT ss_tape_mount(INT channel);
01870 INT EXPRT ss_tape_unmount(INT channel);
01871 INT EXPRT ss_tape_get_blockn(INT channel);
01872
01873
01874 double EXPRT ss_disk_free(char *path);
01875 double EXPRT ss_file_size(char *path);
01876 INT EXPRT ss_file_remove(char *path);
01877 INT EXPRT ss_file_find(char *path, char *pattern, char **plist);
01878 double EXPRT ss_disk_size(char *path);
01879
01880
01881 INT EXPRT hs_set_path(char *path);
01882 INT EXPRT hs_define_event(DWORD event_id, char *name, TAG * tag, DWORD size);
01883 INT EXPRT hs_write_event(DWORD event_id, void *data, DWORD size);
01884 INT EXPRT hs_count_events(DWORD ltime, DWORD * count);
01885 INT EXPRT hs_enum_events(DWORD ltime, char *event_name,
01886 DWORD * name_size, INT event_id[], DWORD * id_size);
01887 INT EXPRT hs_count_vars(DWORD ltime, DWORD event_id, DWORD * count);
01888 INT EXPRT hs_enum_vars(DWORD ltime, DWORD event_id, char *var_name,
01889 DWORD * size, DWORD * var_n, DWORD * n_size);
01890 INT EXPRT hs_get_var(DWORD ltime, DWORD event_id, char *var_name,
01891 DWORD * type, INT * n_data);
01892 INT EXPRT hs_get_event_id(DWORD ltime, char *name, DWORD * id);
01893 INT EXPRT hs_get_tags(DWORD ltime, DWORD event_id, char event_name[NAME_LENGTH], int *n_tags, TAG **tags);
01894 INT EXPRT hs_read(DWORD event_id, DWORD start_time, DWORD end_time,
01895 DWORD interval, char *tag_name, DWORD var_index,
01896 DWORD * time_buffer, DWORD * tbsize,
01897 void *data_buffer, DWORD * dbsize, DWORD * type, DWORD * n);
01898 INT EXPRT hs_dump(DWORD event_id, DWORD start_time, DWORD end_time,
01899 DWORD interval, BOOL binary_time);
01900 INT EXPRT hs_fdump(char *file_name, DWORD id, BOOL binary_time);
01901
01902
01903 INT EXPRT el_retrieve(char *tag, char *date, int *run, char *author,
01904 char *type, char *system, char *subject,
01905 char *text, int *textsize, char *orig_tag,
01906 char *reply_tag, char *attachment1,
01907 char *attachment2, char *attachment3, char *encoding);
01908 INT EXPRT el_submit(int run, const char *author, const char *type, const char *system,
01909 const char *subject, const char *text, const char *reply_to,
01910 const char *encoding, const char *afilename1, char *buffer1,
01911 INT buffer_size1, const char *afilename2, char *buffer2,
01912 INT buffer_size2, const char *afilename3, char *buffer3,
01913 INT buffer_size3, char *tag, INT tag_size);
01914 INT EXPRT el_search_message(char *tag, int *fh, BOOL walk);
01915 INT EXPRT el_search_run(int run, char *return_tag);
01916 INT EXPRT el_delete_message(char *tag);
01917
01918
01919 INT EXPRT al_check();
01920 INT EXPRT al_trigger_alarm(const char *alarm_name, const char *alarm_message,
01921 const char *default_class, const char *cond_str, INT type);
01922 INT EXPRT al_trigger_class(const char *alarm_class, const char *alarm_message, BOOL first);
01923 INT EXPRT al_reset_alarm(const char *alarm_name);
01924 BOOL EXPRT al_evaluate_condition(const char *condition, char *value);
01925
01926
01927 INT get_frontend_index();
01928 void register_cnaf_callback(int debug);
01929 void mfe_error(const char *error);
01930 void mfe_set_error(void (*dispatcher) (const char *));
01931 int set_equipment_status(const char *name, const char *eq_status, const char *status_color);
01932
01933
01934 void EXPRT test_register(ANA_TEST * t);
01935 void EXPRT add_data_dir(char *result, char *file);
01936 void EXPRT lock_histo(INT id);
01937
01938 void EXPRT open_subfolder(char *name);
01939 void EXPRT close_subfolder();
01940
01941
01942 size_t EXPRT strlcpy(char *dst, const char *src, size_t size);
01943 size_t EXPRT strlcat(char *dst, const char *src, size_t size);
01944
01945 #ifdef __cplusplus
01946 }
01947 #ifdef USE_ROOT
01948 extern TFolder *gManaHistosFolder;
01949 extern TObjArray *gHistoFolderStack;
01950
01951
01952
01953
01954 template < typename TH1X >
01955 TH1X EXPRT * h1_book(const char *name, const char *title,
01956 int bins, double min, double max)
01957 {
01958 TH1X *hist;
01959
01960
01961 if (!gHistoFolderStack->Last())
01962 hist = (TH1X *) gManaHistosFolder->FindObjectAny(name);
01963 else
01964 hist = (TH1X *) ((TFolder *) gHistoFolderStack->Last())->FindObjectAny(name);
01965
01966 if (hist == NULL) {
01967 hist = new TH1X(name, title, bins, min, max);
01968 if (!gHistoFolderStack->Last())
01969 gManaHistosFolder->Add(hist);
01970 else
01971 ((TFolder *) gHistoFolderStack->Last())->Add(hist);
01972 }
01973
01974 return hist;
01975 }
01976
01977 template < typename TH1X >
01978 TH1X EXPRT * h1_book(const char *name, const char *title, int bins, double edges[])
01979 {
01980 TH1X *hist;
01981
01982
01983 if (!gHistoFolderStack->Last())
01984 hist = (TH1X *) gManaHistosFolder->FindObjectAny(name);
01985 else
01986 hist = (TH1X *) ((TFolder *) gHistoFolderStack->Last())->FindObjectAny(name);
01987
01988 if (hist == NULL) {
01989 hist = new TH1X(name, title, bins, edges);
01990 if (!gHistoFolderStack->Last())
01991 gManaHistosFolder->Add(hist);
01992 else
01993 ((TFolder *) gHistoFolderStack->Last())->Add(hist);
01994 }
01995
01996 return hist;
01997 }
01998
01999 template < typename TH2X >
02000 TH2X EXPRT * h2_book(const char *name, const char *title,
02001 int xbins, double xmin, double xmax,
02002 int ybins, double ymin, double ymax)
02003 {
02004 TH2X *hist;
02005
02006
02007 if (!gHistoFolderStack->Last())
02008 hist = (TH2X *) gManaHistosFolder->FindObjectAny(name);
02009 else
02010 hist = (TH2X *) ((TFolder *) gHistoFolderStack->Last())->FindObjectAny(name);
02011
02012 if (hist == NULL) {
02013 hist = new TH2X(name, title, xbins, xmin, xmax, ybins, ymin, ymax);
02014 if (!gHistoFolderStack->Last())
02015 gManaHistosFolder->Add(hist);
02016 else
02017 ((TFolder *) gHistoFolderStack->Last())->Add(hist);
02018 }
02019
02020 return hist;
02021 }
02022
02023 template < typename TH2X >
02024 TH2X EXPRT * h2_book(const char *name, const char *title,
02025 int xbins, double xmin, double xmax, int ybins, double yedges[])
02026 {
02027 TH2X *hist;
02028
02029
02030 if (!gHistoFolderStack->Last())
02031 hist = (TH2X *) gManaHistosFolder->FindObjectAny(name);
02032 else
02033 hist = (TH2X *) ((TFolder *) gHistoFolderStack->Last())->FindObjectAny(name);
02034
02035 if (hist == NULL) {
02036 hist = new TH2X(name, title, xbins, xmin, xmax, ybins, yedges);
02037 if (!gHistoFolderStack->Last())
02038 gManaHistosFolder->Add(hist);
02039 else
02040 ((TFolder *) gHistoFolderStack->Last())->Add(hist);
02041 }
02042
02043 return hist;
02044 }
02045
02046 template < typename TH2X >
02047 TH2X EXPRT * h2_book(const char *name, const char *title,
02048 int xbins, double xedges[], int ybins, double ymin, double ymax)
02049 {
02050 TH2X *hist;
02051
02052
02053 if (!gHistoFolderStack->Last())
02054 hist = (TH2X *) gManaHistosFolder->FindObjectAny(name);
02055 else
02056 hist = (TH2X *) ((TFolder *) gHistoFolderStack->Last())->FindObjectAny(name);
02057
02058 if (hist == NULL) {
02059 hist = new TH2X(name, title, xbins, xedges, ybins, ymin, ymax);
02060 if (!gHistoFolderStack->Last())
02061 gManaHistosFolder->Add(hist);
02062 else
02063 ((TFolder *) gHistoFolderStack->Last())->Add(hist);
02064 }
02065
02066 return hist;
02067 }
02068
02069 template < typename TH2X >
02070 TH2X EXPRT * h2_book(const char *name, const char *title,
02071 int xbins, double xedges[], int ybins, double yedges[])
02072 {
02073 TH2X *hist;
02074
02075
02076 if (!gHistoFolderStack->Last())
02077 hist = (TH2X *) gManaHistosFolder->FindObjectAny(name);
02078 else
02079 hist = (TH2X *) ((TFolder *) gHistoFolderStack->Last())->FindObjectAny(name);
02080
02081 if (hist == NULL) {
02082 hist = new TH2X(name, title, xbins, xedges, ybins, yedges);
02083 if (!gHistoFolderStack->Last())
02084 gManaHistosFolder->Add(hist);
02085 else
02086 ((TFolder *) gHistoFolderStack->Last())->Add(hist);
02087 }
02088
02089 return hist;
02090 }
02091
02092
02093
02094
02095
02096 #define H1_BOOK(n,t,b,min,max) (h1_book<TH1F>(n,t,b,min,max))
02097 #define H2_BOOK(n,t,xb,xmin,xmax,yb,ymin,ymax) (h2_book<TH2F>(n,t,xb,xmin,xmax,yb,ymin,ymax))
02098
02099 TCutG *cut_book(const char *name);
02100 #endif
02101
02102 #endif
02103 #endif
02104
02105 #endif
02106
02107
02108
02109
02110
02111