-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprobe.h
381 lines (327 loc) · 10.5 KB
/
probe.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
/*************************************************************************\
* Copyright (c) 2002 The University of Chicago, as Operator of Argonne
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* This file is distributed subject to a Software License Agreement found
* in the file LICENSE that is included with this distribution.
\*************************************************************************/
/* Main include file for Probe */
# include "probeVersion.h"
#include <limits.h>
#define CA_PEND_IO_TIME 10
#define ECANAMESIZE 34
#define ALLOW_ARBITRARY_ENUMS
#define long2int(A) \
((A)>INT_MAX)?INT_MAX:(((A)<INT_MIN)?INT_MIN:(int)(A))
#define double2int(A) \
((A)>(double)INT_MAX)?INT_MAX:(((A)<(double)INT_MIN)?INT_MIN:(int)(A))
#define keepInRange(A,B,C) ((A)>(B))?(B):(((A)<(C))?(C):(A))
#define BUFF_SIZE 512
#define NDIALS 8
#define NO_UPDATE 0x00000000
#define UPDATE_LABEL1 0x00000001
#define UPDATE_LABEL2 0x00000002
#define UPDATE_LABEL3 0x00000004
#define UPDATE_LABEL4 0x00000008
#define UPDATE_LABEL 0x0000000F
#define UPDATE_STATUS1 0x00000010
#define UPDATE_STATUS2 0x00000020
#define UPDATE_STATUS3 0x00000040
#define UPDATE_STATUS4 0x00000080
#define UPDATE_STATUS 0x000000F0
#define UPDATE_DISPLAY1 0x00000100
#define UPDATE_DISPLAY2 0x00000200
#define UPDATE_DISPLAY3 0x00000400
#define UPDATE_DISPLAY4 0x00000800
#define UPDATE_DISPLAY 0x00000F00
#define UPDATE_TEXT1 0x00001000
#define UPDATE_TEXT2 0x00002000
#define UPDATE_TEXT3 0x00004000
#define UPDATE_TEXT4 0x00008000
#define UPDATE_TEXT 0x0000F000
#define UPDATE_SLIDER 0x00010000
#define UPDATE_BUTTON 0x00020000
#define UPDATE_DIAL 0x00040000
#define UPDATE_FORMAT 0x00080000
#define UPDATE_INFO 0x00100000
#define UPDATE_HIST 0x00200000
#define UPDATE_ADJUST 0x00400000
#define UPDATE_ALL 0x007FFFFF
#define UPDATE_LABELS 0x0000000F
#define UPDATE_STATUS 0x000000F0
#define UPDATE_DISPLAY 0x00000F00
#define UPDATE_TEXT 0x0000F000
#define UPDATE_PANELS 0x007F0000
#define UPDATE_DATA 0x003FFFF0
#define LABEL1 0
#define LABEL2 1
#define LABEL3 2
#define LABEL4 3
#define STATUS1 4
#define STATUS2 5
#define STATUS3 6
#define STATUS4 7
#define DISPLAY1 8
#define DISPLAY2 9
#define DISPLAY3 10
#define DISPLAY4 11
#define TEXT1 12
#define TEXT2 13
#define TEXT3 14
#define TEXT4 15
#define SLIDER 16
#define BUTTON 17
#define DIAL 18
#define FORMAT 19
#define INFO 20
#define HIST 21
#define ADJUST 22
#define LAST_ITEM 23
#define ALL_DOWN 0
#define HISTORY_UP 1
#define INFO_UP 2
#define FORMAT_UP 4
#define ADJUST_UP 8
#define MAIN_UP 16
#define MONITOR_UP 32
#define OPTION_UP 64
typedef struct DUStruct {
void (*proc)();
Widget w;
} displayProc;
typedef union {
struct dbr_time_enum E;
struct dbr_time_long L;
struct dbr_time_double D;
struct dbr_time_string S;
} DataBuf;
typedef union {
struct dbr_ctrl_enum E;
struct dbr_ctrl_long L;
struct dbr_ctrl_double D;
struct dbr_sts_string S;
} InfoBuf;
/*
* data structure for history
*/
#define HIST_MAX 0x00000001
#define HIST_MIN 0x00000002
#define HIST_STATUS 0x00000004
#define HIST_SEVERITY 0x00000008
#define HIST_ALL 0x0000000F
#define HIST_RESET_ALL 0x0000001F
typedef union {
double D;
long L;
short E;
char S[BUFF_SIZE];
} histBuf;
typedef struct HIStruct {
unsigned int updateMask;
histBuf max;
histBuf min;
short currentStatus;
short lastStatus;
short currentSeverity;
short lastSeverity;
time_t startTime;
time_t lastMaxTime;
time_t lastMinTime;
time_t currentStatusTime;
time_t lastStatusTime;
time_t currentSeverityTime;
time_t lastSeverityTime;
char startTimeStr[12];
char lastMaxTimeStr[12];
char lastMinTimeStr[12];
char currentStatusTimeStr[12];
char lastStatusTimeStr[12];
char currentSeverityTimeStr[12];
char lastSeverityTimeStr[12];
char formatStr[256];
Widget dialog;
} histData;
#define DEFAULT_DECIMAL_PLACES 3
#define DEFAULT_WIDTH 10
#define DEFAULT_UNITS ""
#define DEFAULT_FORMAT 'f'
#define DEFAULT_FORMAT_STR "%.3f"
typedef struct FORStruct {
Widget dialog;
Widget toggleButtons[16];
Widget eFButtons[2];
short defaultDecimalPlaces;
short defaultWidth;
char defaultFormat;
char defaultUnits[20];
char str[20];
char str1[20];
} formatData;
typedef struct INFOStruc {
Widget dialog;
char formatStr[256];
InfoBuf data;
} infoData;
/*
* data structures for Adjust Widget
*/
#define ADJUST_SLIDER_UP 0x00000001
#define ADJUST_BUTTONS_UP 0x00000002
#define ADJUST_DIALS_UP 0x00000004
#define SLIDER_LABEL 0x00000001
#define SLIDER_VALUE 0x00000002
#define SLIDER_LABEL_VALUE 0x00000003
#define MAX_ADJUST_BUTTONS 16
typedef struct {
int size;
int max, min;
double hopr, lopr, ctr, scl;
} SliderInfoD;
typedef struct {
int size;
int max, min;
long hopr, lopr, ctr;
} SliderInfoL;
typedef union {
SliderInfoD D;
SliderInfoL L;
} SliderInfo;
typedef struct SLIDERStruc {
Widget panel;
Widget slider;
Widget lowerLabel;
Widget upperLabel;
Widget valueLabel;
SliderInfo info;
} Slider;
typedef struct BUTTONStruc {
Widget panel;
Widget buttons[MAX_ADJUST_BUTTONS];
short buttonsSelected;
} Buttons;
typedef struct ADJStruc {
Widget dialog;
Widget panel;
Widget optionDialog;
Slider slider;
Buttons buttons;
Buttons dials;
unsigned int upMask;
unsigned int updateMask;
} adjData;
typedef struct probeAtom {
unsigned int updateMask;
unsigned int upMask;
int dataType;
DataBuf data;
long lastChangedTime;
long currentTime;
int changed;
infoData info;
chid chId;
evid eventId;
int connected;
int monitored;
histData hist;
formatData format;
adjData adjust;
displayProc d[LAST_ITEM];
} atom;
/* Function prototypes */
/* probe_main.c */
void winPrintf(Widget w, ...);
void errmsg(const char *fmt, ...);
void xerrmsg(const char *fmt, ...);
char *timeStamp(void);
int questionDialog(char *message, char *okBtnLabel, char *cancelBtnLabel,
char *helpBtnLabel);
/* probeAdjust.c */
void adjustCallback(Widget w, XtPointer clientData,
XtPointer callbackStruct);
void adjustCancelCallback(Widget w, XtPointer clientData,
XtPointer callbackStruct);
void textAdjustCallback(Widget w, XtPointer clientData,
XtPointer callbackData);
void updateAdjustPanel(atom *channel);
void textAdjustCallback(Widget w, XtPointer clientData,
XtPointer callbackData);
/* probeButtons.c */
void createButtons(atom *channel) ;
void destroyButtons(atom *channel);
void updateButtons(atom *channel, int dummy);
/* probeCa.c */
int channelIsAlreadyConnected(char name[], atom* channel);
int connectChannel(char name[], atom *channel);
void getChan(Widget w, XtPointer clientData,
XtPointer callbackStruct);
int getData(atom *channel);
void helpMonitor(Widget w, XtPointer clientData,
XtPointer callbackStrut);
void initChan(char *name, atom *channel);
void printData(struct event_handler_args arg);
void probeCAException(struct exception_handler_args arg);
void probeCASetValue(atom *channel);
int probeCATaskInit(atom *channel);
void quitMonitor(Widget w, XtPointer clientData,
XtPointer callbackStrut);
void startMonitor(Widget w, XtPointer clientData,
XtPointer callbackStruct);
void stopMonitor(Widget w,XtPointer clientData,
XtPointer callbackStruct);
void updateMonitor(XtPointer clientData, XtIntervalId *id);
void xs_ok_callback(Widget w, XtPointer clientData,
XtPointer callbackStrut);
/* probeFormat.c */
void formatCallback(Widget w, XtPointer clientData,
XtPointer callbackStruct);
void formatCancelCallback(Widget w, XtPointer clientData,
XtPointer callbackStruct);
void formatDialogCallback(Widget w, XtPointer clientData,
XtPointer callbackStruct);
void initFormat(atom *channel);
void setChannelDefaults(atom *channel);
/* probeHistory.c */
void histCallback(Widget w, XtPointer clientData,
XtPointer callbackData);
void histCancelCallback(Widget w, XtPointer clientData,
XtPointer callbackData);
void histResetCallback(Widget w, XtPointer clientData,
XtPointer callbackData);
void resetHistory(atom *channel);
void updateHistory(atom *channel);
void updateHistoryInfo(atom *channel);
/* probeInfo.c */
void infoCallback(Widget w, XtPointer clientData,
XtPointer callbackData);
void infoDialogCallback(Widget w, XtPointer clientData,
XtPointer callbackData);
/* probeInit.c */
void clearAdjust(adjData *a);
void clearButtons(Buttons *b);
void clearHistData(histData *h);
void clearSlider(Slider *s);
void initChannel(atom *channel);
/* probeSlider.c */
int calculateSliderMaxMin(atom *channel);
int createSlider(atom *channel);
void destroySlider(atom *channel);
void updateSlider(atom *channel);
/* probeUpdate.c */
void updateDataDisplay(atom *channel,unsigned int i);
void updateDisplay(atom *channel);
void updateInfo(atom *channel);
void updateLabelDisplay(atom *channel,unsigned int i);
void updateStatusDisplay(atom *channel,unsigned int i);
void updateTextDisplay(atom *channel,unsigned int i);
#ifdef PROBE_ALLOCATE_STORAGE
#define PROBE_EXTERN
#else
#define PROBE_EXTERN extern
#endif
/* Global variables */
PROBE_EXTERN Widget toplevel;
PROBE_EXTERN Window mainwindow;
PROBE_EXTERN Cursor watch;
PROBE_EXTERN Display *display;
PROBE_EXTERN int ca_pend_io_time;