home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-385-Vol-1of3.iso
/
x
/
xyzext.zip
/
xyz
/
clients
/
xyztool
/
xyztool.c
< prev
Wrap
C/C++ Source or Header
|
1992-07-18
|
24KB
|
919 lines
#include <stdio.h>
#include <string.h>
#include <X11/Xlib.h>
#include "xyzext.h"
#include <xview/xview.h>
#include <xview/frame.h>
#include <xview/panel.h>
#include <xview/textsw.h>
#include <xview/notice.h>
#include <xview/notify.h>
char *display_env;
Display *xyz_display;
#define ENSURE_CONNECTION() \
if(xyz_display == NULL) { inform_no_xyz_display(panel); return; }
Bool polling;
int poll_interval;
FILE *devnull;
Frame frame;
Panel panel;
Textsw textsw;
Menu xyz_menu;
Menu instrument_menu;
Menu trace_menu;
Panel_item pattern_text;
Panel_item format_choice;
Frame pattern_frame;
Panel pattern_panel;
Frame connect_frame;
Panel connect_panel;
Panel_item connect_text;
Frame state_frame;
Panel state_panel;
Panel_item display_text;
Panel_item instrument_text;
Panel_item tracing_text;
Panel_item tracelevel_text;
Panel_item status_text;
Panel_item query_again_btn;
Panel_item poll_interval_slider;
Frame change_tag_frame;
Panel change_tag_panel;
Panel_item change_tagname_text;
Panel_item change_value_btn;
Panel_item change_value_text;
Panel_item change_tracelevel_btn;
Panel_item change_tracelevel_slider;
Frame get_tag_frame;
Panel get_tag_panel;
Panel_item get_tagname_text;
Panel_item get_value_text;
Panel_item get_tracelevel_text;
Frame cur_tracelevel_frame;
Panel cur_tracelevel_panel;
Panel_item cur_tracelevel_slider;
void poll_now_proc();
XYZ_value *oldvalues = NULL;
int oldnum = 0;
#define NUM_ALT_PATTERNS 4
void
inform_no_xyz_display(item)
Panel_item *item;
{
(void) notice_prompt(item, NULL,
NOTICE_MESSAGE_STRINGS, "Your are not connected to XYZ display!", NULL,
NOTICE_BUTTON_YES, "Ok",
NULL);
}
void
more_patterns_proc(item, event)
Panel_item item;
Event *event;
{
xv_set(pattern_frame, XV_SHOW, TRUE, FRAME_CMD_PUSHPIN_IN, TRUE, NULL);
}
void
connect_proc(item, event)
Panel_item item;
Event *event;
{
if(xyz_display == NULL) {
xv_set(connect_frame, XV_SHOW, TRUE, FRAME_CMD_PUSHPIN_IN, TRUE, NULL);
} else {
(void) notice_prompt(panel, NULL,
NOTICE_MESSAGE_STRINGS, "Please disconnect first!", NULL,
NOTICE_BUTTON_YES, "Ok",
NULL);
}
}
int
xyz_io_error(Display *dpy)
{
(void) notice_prompt(panel, NULL,
NOTICE_MESSAGE_STRINGS, "XYZ connection lost!", NULL,
NOTICE_BUTTON_YES, "Ok",
NULL);
xyz_display = NULL;
exit(1);
}
void
xyz_connect(display_name)
char *display_name;
{
xyz_display = XOpenDisplay(display_name);
if(xyz_display == NULL) {
(void) notice_prompt(connect_panel, NULL,
NOTICE_MESSAGE_STRINGS, "Could not connect to display!", NULL,
NOTICE_BUTTON_YES, "Ok",
NULL);
} else {
if(!XYZ_QueryExtension(xyz_display)) {
(void) notice_prompt(connect_panel, NULL,
NOTICE_MESSAGE_STRINGS, "Server not XYZ-capable!", NULL,
NOTICE_BUTTON_YES, "Ok",
NULL);
XCloseDisplay(xyz_display);
xyz_display = NULL;
} else {
oldnum = 0;
if(oldvalues != NULL) {
XYZ_FreeValueList(oldvalues);
}
XSynchronize(xyz_display, TRUE);
XSetIOErrorHandler(xyz_io_error);
xv_set(connect_frame,
FRAME_CMD_PUSHPIN_IN, FALSE,
WIN_SHOW, FALSE,
NULL);
xv_set(display_text, PANEL_VALUE, display_name, NULL);
}
}
}
Panel_setting;
connect_text_proc(item, event)
Panel_item item;
Event *event;
{
switch(event_action(event)) {
case '\n':
case '\r':
xyz_connect(xv_get(connect_text, PANEL_VALUE));
return PANEL_NONE;
default:
return panel_text_notify(item, event);
}
}
void
connect_btn_proc(item, event)
Panel_item item;
Event *event;
{
xyz_connect(xv_get(connect_text, PANEL_VALUE));
}
void
disconnect_proc(item, event)
Panel_item item;
Event *event;
{
if(xyz_display != NULL) {
XCloseDisplay(xyz_display);
xyz_display = NULL;
xv_set(state_frame,
FRAME_CMD_PUSHPIN_IN, FALSE,
WIN_SHOW, FALSE,
NULL);
xv_set(change_tag_frame,
FRAME_CMD_PUSHPIN_IN, FALSE,
WIN_SHOW, FALSE,
NULL);
xv_set(get_tag_frame,
FRAME_CMD_PUSHPIN_IN, FALSE,
WIN_SHOW, FALSE,
NULL);
xv_set(cur_tracelevel_frame,
FRAME_CMD_PUSHPIN_IN, FALSE,
WIN_SHOW, FALSE,
NULL);
} else {
(void) notice_prompt(connect_panel, NULL,
NOTICE_MESSAGE_STRINGS, "Not connected to XYZ display!", NULL,
NOTICE_BUTTON_YES, "Ok",
NULL);
}
}
void
get_tag_proc(item, event)
Panel_item item;
Event *event;
{
ENSURE_CONNECTION();
xv_set(get_tag_frame, XV_SHOW, TRUE, FRAME_CMD_PUSHPIN_IN, TRUE, NULL);
}
void
really_get_tag_proc(item, event)
Panel_item item;
Event *event;
{
int value;
int tracelevel;
char *tagname_str;
char string[20];
ENSURE_CONNECTION();
tagname_str = (char *) panel_get_value(get_tagname_text);
if(tagname_str == NULL || *tagname_str == '\0') {
(void) notice_prompt(change_tag_panel, NULL,
NOTICE_MESSAGE_STRINGS, "Please specify a tag name to get.", NULL,
NOTICE_BUTTON_YES, "Ok",
NULL);
return;
}
XYZ_GetTag(xyz_display, tagname_str, &value, &tracelevel);
sprintf(string, "%d", value);
xv_set(get_value_text, PANEL_VALUE, string, NULL);
sprintf(string, "%d", tracelevel);
xv_set(get_tracelevel_text, PANEL_VALUE, string, NULL);
}
void
update_state_panel(item, event)
Panel_item item;
Event *event;
{
int instrument;
int tracing;
int tracelevel;
int status;
char *string;
char number[4];
ENSURE_CONNECTION();
XYZ_QueryState(xyz_display,
&instrument, &tracing, &tracelevel, &status);
if(instrument) {
string = "On";
} else {
string = "Off";
}
xv_set(instrument_text, PANEL_VALUE, string, NULL);
if(tracing) {
string = "On";
} else {
string = "Off";
}
xv_set(tracing_text, PANEL_VALUE, string, NULL);
sprintf(number, "%d", tracelevel);
xv_set(tracelevel_text, PANEL_VALUE, number, NULL);
if(status == XYZ_ERROR) {
string = "ERROR";
} else {
string = "No error";
}
xv_set(status_text, PANEL_VALUE, string, NULL);
}
void
display_state_proc(item, event)
Panel_item item;
Event *event;
{
ENSURE_CONNECTION();
update_state_panel(item, event);
xv_set(state_frame, XV_SHOW, TRUE, FRAME_CMD_PUSHPIN_IN, TRUE, NULL);
}
void
full_reset_proc(item, event)
Event *event;
Panel_item item;
{
ENSURE_CONNECTION();
XYZ_Instrument(xyz_display, FALSE);
XYZ_Trace(xyz_display, FALSE);
XYZ_SetCurTraceLevel(xyz_display, 255);
XYZ_ResetValues(xyz_display);
XYZ_ResetTraceLevels(xyz_display);
update_state_panel(item, event);
}
void
quit_proc(item, event)
Event *event;
Panel_item item;
{
xv_destroy_safe(frame);
}
void
instrument_on_proc(item, event)
Event *event;
Panel_item item;
{
ENSURE_CONNECTION();
XYZ_Instrument(xyz_display, TRUE);
update_state_panel(item, event);
}
void
instrument_off_proc(item, event)
Event *event;
Panel_item item;
{
ENSURE_CONNECTION();
XYZ_Instrument(xyz_display, FALSE);
update_state_panel(item, event);
}
void
change_tag_proc(item, event)
Panel_item item;
Event *event;
{
ENSURE_CONNECTION();
xv_set(change_tag_frame, XV_SHOW, TRUE, FRAME_CMD_PUSHPIN_IN, TRUE, NULL);
}
void
reset_values_proc(item, event)
Event *event;
Panel_item item;
{
ENSURE_CONNECTION();
XYZ_ResetValues(xyz_display);
}
void
trace_on_proc(item, event)
Event *event;
Panel_item item;
{
ENSURE_CONNECTION();
XYZ_Trace(xyz_display, TRUE);
update_state_panel(item, event);
}
void
trace_off_proc(item, event)
Event *event;
Panel_item item;
{
ENSURE_CONNECTION();
XYZ_Trace(xyz_display, FALSE);
update_state_panel(item, event);
}
void
set_trace_level_proc(item, event)
Event *event;
Panel_item item;
{
ENSURE_CONNECTION();
xv_set(cur_tracelevel_frame,
XV_SHOW, TRUE,
FRAME_CMD_PUSHPIN_IN, TRUE,
NULL);
}
void
tag_trace_level_proc(item, event)
Event *event;
Panel_item item;
{
ENSURE_CONNECTION();
}
void
reset_tag_trace_levels_proc(item, event)
Event *event;
Panel_item item;
{
ENSURE_CONNECTION();
XYZ_ResetTraceLevels(xyz_display);
}
void
change_value_proc(item, event)
Event *event;
Panel_item item;
{
char *tagname_str;
char *value_str;
int value;
int rc;
ENSURE_CONNECTION();
tagname_str = (char *) panel_get_value(change_tagname_text);
if(tagname_str == NULL || *tagname_str == '\0') {
(void) notice_prompt(change_tag_panel, NULL,
NOTICE_MESSAGE_STRINGS,
"Please specify a tag name (or pattern) to change.", NULL,
NOTICE_BUTTON_YES, "Ok",
NULL);
return;
}
value_str = (char *) panel_get_value(change_value_text);
rc = sscanf(value_str, "%d", &value);
if(rc != 1) {
(void) notice_prompt(change_tag_panel, NULL,
NOTICE_MESSAGE_STRINGS, "Value not in right format", NULL,
NOTICE_BUTTON_YES, "Ok",
NULL);
return;
}
XYZ_SetValue(xyz_display, tagname_str, value);
}
void
change_tracelevel_proc(item, event)
Panel_item item;
Event *event;
{
char *tagname_str;
int value;
ENSURE_CONNECTION();
tagname_str = (char *) panel_get_value(change_tagname_text);
if(tagname_str == NULL || *tagname_str == '\0') {
(void) notice_prompt(item, NULL,
NOTICE_MESSAGE_STRINGS,
"Please specify a value (or pattern) to change.", NULL,
NOTICE_BUTTON_YES, "Ok",
NULL);
return;
}
value = (int) panel_get_value(change_tracelevel_slider);
XYZ_SetTraceLevel(xyz_display, tagname_str, value);
}
void
cur_tracelevel_proc(item, value, event)
Panel_item item;
int value;
Event *event;
{
ENSURE_CONNECTION();
XYZ_SetCurTraceLevel(xyz_display, value);
update_state_panel(item, event);
}
int
sort_values_helper(value1, value2)
XYZ_value *value1;
XYZ_value *value2;
{
return strcmp(value1->tagname, value2->tagname);
}
void
sort_values(values, num)
XYZ_value *values;
int num;
{
qsort(values, num, sizeof(XYZ_value), sort_values_helper);
}
possibly_show_tag(tagname, value)
char *tagname;
int value;
{
char value_str[20];
if(value != 0) {
sprintf(value_str, "%10d ", value);
textsw_insert(textsw, value_str, strlen(value_str));
textsw_insert(textsw, tagname, strlen(tagname));
textsw_insert(textsw, "\n", 1);
}
}
void
show_deltas(old, oldnum, new, newnum)
XYZ_value *old;
int oldnum;
XYZ_value *new;
int newnum;
{
int i;
int j;
int rc;
i = 0;
j = 0;
while(i < oldnum && j < newnum) {
rc = strcmp(old[i].tagname, new[j].tagname);
if(rc == 0) {
possibly_show_tag(new[j].tagname, new[j].value - old[i].value);
i++;
j++;
} else if(rc > 0) {
possibly_show_tag(new[j].tagname, new[j].value);
j++;
} else {
possibly_show_tag(old[i].tagname, -old[i].value);
i++;
}
}
if(i < oldnum) {
while(i < oldnum) {
possibly_show_tag(old[i].tagname, -old[i].value);
i++;
}
} else if(j < newnum) {
while(j < newnum) {
possibly_show_tag(new[j].tagname, new[j].value);
j++;
}
}
}
Notify_value
on_interval()
{
poll_now_proc(NULL, NULL);
return NOTIFY_DONE;
}
void
cont_poll_proc(item, value, event)
Panel_item item;
int value;
Event *event;
{
struct itimerval timer;
if(value) {
polling = TRUE;
timer.it_value.tv_usec = 0;
timer.it_value.tv_sec = poll_interval;
timer.it_interval.tv_usec = 0;
timer.it_interval.tv_sec = poll_interval;
notify_set_itimer_func(frame, on_interval, ITIMER_REAL, &timer, NULL);
} else {
polling = FALSE;
notify_set_itimer_func(frame, NOTIFY_FUNC_NULL, ITIMER_REAL, NULL, NULL);
}
}
void
poll_interval_proc(item, value, event)
Panel_item item;
int value;
Event *event;
{
struct itimerval timer;
poll_interval = value;
if(polling) {
timer.it_value.tv_usec = 0;
timer.it_value.tv_sec = poll_interval;
timer.it_interval.tv_usec = 0;
timer.it_interval.tv_sec = poll_interval;
notify_set_itimer_func(frame, on_interval, ITIMER_REAL, &timer, NULL);
}
}
void
poll_now_proc(item, event)
Panel_item item;
Event *event;
{
char *pattern_strs[1 + NUM_ALT_PATTERNS];
char *pattern_str;
XYZ_value *values;
char value_str[20];
int total;
int returned;
int lens[1 + NUM_ALT_PATTERNS];
int len;
int pats;
int i;
Panel_item text;
static int count = 0;
ENSURE_CONNECTION();
pats = 0;
pattern_str = (char *) panel_get_value(pattern_text);
len = strlen(pattern_str);
if(len > 0) {
lens[pats] = len;
pattern_strs[pats] = pattern_str;
pats++;
}
text = (Panel_item) xv_get(pattern_panel, PANEL_FIRST_ITEM);
for(i=0;i<NUM_ALT_PATTERNS;i++) {
pattern_str = (char *) panel_get_value(text);
len = strlen(pattern_str);
if(len > 0) {
lens[pats] = len;
pattern_strs[pats] = pattern_str;
pats++;
}
text = (Panel_item) xv_get(text, PANEL_NEXT_ITEM);
}
if(pats == 0 && item != NULL) {
(void) notice_prompt(panel, NULL,
NOTICE_MESSAGE_STRINGS, "No patterns are specified.", NULL,
NOTICE_BUTTON_YES, "Ok",
NULL);
return;
}
values = XYZ_ListValues(xyz_display, pats, pattern_strs, lens,
500, &total, &returned);
count++;
textsw_reset(textsw, 0, 0);
if(values == NULL) {
textsw_insert(textsw, "nothin\n", 7);
return;
}
sort_values(values, returned);
switch((int) panel_get_value(format_choice)) {
case 0:
show_deltas(NULL, 0, values, returned);
break;
case 1:
show_deltas(oldvalues, oldnum, values, returned);
break;
}
if(oldvalues != NULL) {
XYZ_FreeValueList(oldvalues);
}
oldvalues = values;
oldnum = returned;
}
main(argc, argv)
int argc;
char *argv[];
{
int i;
int width;
xv_init(XV_INIT_ARGC_PTR_ARGV, &argc, argv, NULL);
devnull = fopen("/dev/null", "w");
frame = (Frame) xv_create(NULL, FRAME,
FRAME_LABEL, "XamineYourZerver Tool",
NULL);
panel = (Panel) xv_create(frame, PANEL, NULL);
xyz_menu = (Menu) xv_create(NULL, MENU,
MENU_ACTION_ITEM, "Connect ...", connect_proc,
MENU_ACTION_ITEM, "Disconnect", disconnect_proc,
MENU_ACTION_ITEM, "Change tag ...", change_tag_proc,
MENU_ACTION_ITEM, "Get tag ...", get_tag_proc,
MENU_ACTION_ITEM, "Display state", display_state_proc,
MENU_ACTION_ITEM, "Full reset", full_reset_proc,
MENU_ACTION_ITEM, "Quit", quit_proc,
NULL);
instrument_menu = (Menu) xv_create(NULL, MENU,
MENU_ACTION_ITEM, "Turn on", instrument_on_proc,
MENU_ACTION_ITEM, "Turn off", instrument_off_proc,
MENU_ACTION_ITEM, "Reset values", reset_values_proc,
NULL);
trace_menu = (Menu) xv_create(NULL, MENU,
MENU_ACTION_ITEM, "Turn on", trace_on_proc,
MENU_ACTION_ITEM, "Turn off", trace_off_proc,
MENU_ACTION_ITEM, "Set trace level ...", set_trace_level_proc,
MENU_ACTION_ITEM, "Reset tag trace levels", reset_tag_trace_levels_proc,
NULL);
(void) xv_create(panel, PANEL_BUTTON,
PANEL_LABEL_STRING, "XYZ",
PANEL_ITEM_MENU, xyz_menu,
NULL);
(void) xv_create(panel, PANEL_BUTTON,
PANEL_LABEL_STRING, "Instrument",
PANEL_ITEM_MENU, instrument_menu,
NULL);
(void) xv_create(panel, PANEL_BUTTON,
PANEL_LABEL_STRING, "Trace",
PANEL_ITEM_MENU, trace_menu,
NULL);
window_fit_height(panel);
panel = (Panel) xv_create(frame, PANEL, WIN_BELOW, panel, NULL);
polling = FALSE;
(void) xv_create(panel, PANEL_CHECK_BOX,
PANEL_LAYOUT, PANEL_HORIZONTAL,
PANEL_LABEL_STRING, "Continous poll?",
PANEL_CHOICE_STRINGS, "", NULL,
PANEL_NOTIFY_PROC, cont_poll_proc,
NULL);
xv_set(panel, PANEL_LAYOUT, PANEL_HORIZONTAL, NULL);
format_choice = (Panel_item) xv_create(panel, PANEL_CHOICE,
PANEL_LABEL_STRING, "Poll output format:",
PANEL_CHOICE_STRINGS, "Absolute", "Delta", NULL,
PANEL_VALUE, 0,
NULL);
(void) xv_create(panel, PANEL_BUTTON,
PANEL_LABEL_STRING, "Poll now",
PANEL_NOTIFY_PROC, poll_now_proc,
NULL);
poll_interval = 10;
poll_interval_slider = (Panel_item) xv_create(panel, PANEL_SLIDER,
PANEL_LABEL_STRING, "Poll interval (seconds): ",
PANEL_MIN_VALUE, 1,
PANEL_MAX_VALUE, 60,
PANEL_VALUE, poll_interval,
PANEL_NOTIFY_PROC, poll_interval_proc,
NULL);
xv_set(panel, PANEL_LAYOUT, PANEL_VERTICAL, NULL);
(void) xv_create(panel, PANEL_BUTTON,
PANEL_LABEL_STRING, "More patterns ...",
PANEL_NOTIFY_PROC, more_patterns_proc,
NULL);
pattern_text = (Panel_item) xv_create(panel, PANEL_TEXT,
PANEL_LABEL_STRING, "Pattern: ",
PANEL_VALUE, "*",
PANEL_VALUE_DISPLAY_LENGTH, 60,
PANEL_VALUE_STORED_LENGTH, 100,
NULL);
window_fit_height(panel);
textsw = xv_create(frame, TEXTSW,
WIN_BELOW, panel,
WIN_ROWS, 12,
TEXTSW_BROWSING, TRUE,
TEXTSW_AGAIN_RECORDING, FALSE,
TEXTSW_HISTORY_LIMIT, 0,
TEXTSW_IGNORE_LIMIT, TEXTSW_INFINITY,
TEXTSW_LINE_BREAK_ACTION, TEXTSW_CLIP,
TEXTSW_INSERT_MAKES_VISIBLE, TEXTSW_IF_AUTO_SCROLL,
TEXTSW_MEMORY_MAXIMUM, 0,
TEXTSW_LOWER_CONTEXT, -1,
TEXTSW_UPPER_CONTEXT, -1,
TEXTSW_AUTO_SCROLL_BY, 0,
NULL);
window_fit_height(textsw);
window_fit_height(frame);
connect_frame = (Frame) xv_create(frame, FRAME_CMD,
FRAME_LABEL, "XYZ Connect",
NULL);
connect_panel = (Panel) xv_get(connect_frame, FRAME_CMD_PANEL);
display_env = (char *) getenv("XYZDISPLAY");
if(display_env == NULL) {
display_env = (char *) getenv("DISPLAY");
}
connect_text = (Panel_item) xv_create(connect_panel, PANEL_TEXT,
PANEL_LABEL_STRING, "X11 XYZ-capable display: ",
PANEL_VALUE, display_env != NULL ? display_env : "",
PANEL_VALUE_DISPLAY_LENGTH, 25,
PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
PANEL_NOTIFY_STRING, "\n\r",
PANEL_NOTIFY_PROC, connect_text_proc,
NULL);
(void) xv_create(connect_panel, PANEL_BUTTON,
PANEL_LABEL_STRING, "Connect",
PANEL_NOTIFY_PROC, connect_btn_proc,
NULL);
window_fit(connect_panel);
window_fit(connect_frame);
state_frame = (Frame) xv_create(frame, FRAME_CMD,
FRAME_LABEL, "XYZ Query State",
NULL);
state_panel = (Panel) xv_get(state_frame, FRAME_CMD_PANEL);
xv_set(state_panel, PANEL_LAYOUT, PANEL_VERTICAL, NULL);
display_text = (Panel_item) xv_create(state_panel, PANEL_TEXT,
PANEL_LABEL_STRING, "XYZ display:",
PANEL_VALUE_DISPLAY_LENGTH, 25,
PANEL_READ_ONLY, TRUE,
NULL);
instrument_text = (Panel_item) xv_create(state_panel, PANEL_TEXT,
PANEL_LABEL_STRING, "Instrumentation:",
PANEL_VALUE_DISPLAY_LENGTH, 3,
PANEL_READ_ONLY, TRUE,
NULL);
tracing_text = (Panel_item) xv_create(state_panel, PANEL_TEXT,
PANEL_LABEL_STRING, "Tracing:",
PANEL_VALUE_DISPLAY_LENGTH, 3,
PANEL_READ_ONLY, TRUE,
NULL);
tracelevel_text = (Panel_item) xv_create(state_panel, PANEL_TEXT,
PANEL_LABEL_STRING, "Current trace level:",
PANEL_VALUE_DISPLAY_LENGTH, 3,
PANEL_READ_ONLY, TRUE,
NULL);
width = (int) xv_get(tracelevel_text, PANEL_LABEL_WIDTH);
xv_set(display_text, PANEL_LABEL_WIDTH, width, NULL);
xv_set(instrument_text, PANEL_LABEL_WIDTH, width, NULL);
xv_set(tracing_text, PANEL_LABEL_WIDTH, width, NULL);
status_text = (Panel_item) xv_create(state_panel, PANEL_TEXT,
PANEL_LABEL_STRING, "Status:",
PANEL_READ_ONLY, TRUE,
PANEL_LABEL_WIDTH, width,
PANEL_VALUE_DISPLAY_LENGTH, 8,
NULL);
query_again_btn = (Panel_item) xv_create(state_panel, PANEL_BUTTON,
PANEL_LABEL_STRING, "Query again",
PANEL_NOTIFY_PROC, update_state_panel,
NULL);
window_fit(state_panel);
window_fit(state_frame);
change_tag_frame = (Frame) xv_create(frame, FRAME_CMD,
FRAME_LABEL, "XYZ Change Tag",
NULL);
change_tag_panel = (Panel) xv_get(change_tag_frame, FRAME_CMD_PANEL);
change_tagname_text = (Panel_item) xv_create(change_tag_panel, PANEL_TEXT,
PANEL_LABEL_STRING, "Tagname:",
PANEL_VALUE_DISPLAY_LENGTH, 40,
PANEL_VALUE_STORED_LENGTH, 100,
NULL);
xv_set(change_tag_panel, PANEL_LAYOUT, PANEL_VERTICAL, NULL);
change_value_btn = (Panel_item) xv_create(change_tag_panel, PANEL_BUTTON,
PANEL_LABEL_STRING, "Set value",
PANEL_NOTIFY_PROC, change_value_proc,
NULL);
xv_set(change_tag_panel, PANEL_LAYOUT, PANEL_HORIZONTAL, NULL);
change_value_text = (Panel_item) xv_create(change_tag_panel, PANEL_TEXT,
PANEL_LABEL_STRING, "Value:",
PANEL_VALUE_DISPLAY_LENGTH, 8,
NULL);
xv_set(change_tag_panel, PANEL_LAYOUT, PANEL_VERTICAL, NULL);
change_tracelevel_btn =
(Panel_item) xv_create(change_tag_panel, PANEL_BUTTON,
PANEL_LABEL_STRING, "Set trace level",
PANEL_NOTIFY_PROC, change_tracelevel_proc,
NULL);
xv_set(change_tag_panel, PANEL_LAYOUT, PANEL_HORIZONTAL, NULL);
change_tracelevel_slider =
(Panel_item) xv_create(change_tag_panel, PANEL_SLIDER,
PANEL_LABEL_STRING, "Trace level:",
PANEL_MIN_VALUE, 0,
PANEL_MAX_VALUE, 255,
NULL);
window_fit(change_tag_panel);
window_fit(change_tag_frame);
get_tag_frame = (Frame) xv_create(frame, FRAME_CMD,
FRAME_LABEL, "XYZ Get Tag",
NULL);
get_tag_panel = (Panel) xv_get(get_tag_frame, FRAME_CMD_PANEL);
xv_set(get_tag_panel, PANEL_LAYOUT, PANEL_HORIZONTAL, NULL);
(void) xv_create(get_tag_panel, PANEL_BUTTON,
PANEL_LABEL_STRING, "Get tag",
PANEL_NOTIFY_PROC, really_get_tag_proc,
NULL);
get_tagname_text = (Panel_item) xv_create(get_tag_panel, PANEL_TEXT,
PANEL_LABEL_STRING, "Tag name:",
PANEL_VALUE_DISPLAY_LENGTH, 40,
PANEL_VALUE_STORED_LENGTH, 100,
NULL);
xv_set(get_tag_panel, PANEL_LAYOUT, PANEL_VERTICAL, NULL);
get_value_text = (Panel_item) xv_create(get_tag_panel, PANEL_TEXT,
PANEL_LABEL_STRING, "Value:",
PANEL_READ_ONLY, TRUE,
PANEL_VALUE_DISPLAY_LENGTH, 8,
NULL);
get_tracelevel_text = (Panel_item) xv_create(get_tag_panel, PANEL_TEXT,
PANEL_LABEL_STRING, "Trace level:",
PANEL_READ_ONLY, TRUE,
PANEL_VALUE_DISPLAY_LENGTH, 8,
NULL);
window_fit(get_tag_panel);
window_fit(get_tag_frame);
cur_tracelevel_frame = (Frame) xv_create(frame, FRAME_CMD,
FRAME_LABEL, "XYZ Set Current Trace Level",
NULL);
cur_tracelevel_panel = (Panel) xv_get(cur_tracelevel_frame, FRAME_CMD_PANEL);
cur_tracelevel_slider =
(Panel_item) xv_create(cur_tracelevel_panel, PANEL_SLIDER,
PANEL_LABEL_STRING, "Current trace level:",
PANEL_MIN_VALUE, 0,
PANEL_MAX_VALUE, 255,
PANEL_NOTIFY_PROC, cur_tracelevel_proc,
NULL);
window_fit(cur_tracelevel_panel);
window_fit(cur_tracelevel_frame);
pattern_frame = (Frame) xv_create(frame, FRAME_CMD,
FRAME_LABEL, "More Patterns",
NULL);
pattern_panel = (Panel) xv_get(pattern_frame, FRAME_CMD_PANEL);
for(i=0;i<NUM_ALT_PATTERNS;i++) {
char label[40];
(void) sprintf(label, "Pattern %d:", i+2);
(void) xv_create(pattern_panel, PANEL_TEXT,
PANEL_LABEL_STRING, label,
PANEL_VALUE_DISPLAY_LENGTH, 60,
PANEL_VALUE_STORED_LENGTH, 100,
NULL);
}
window_fit(pattern_panel);
window_fit(pattern_frame);
xv_main_loop(frame);
if(xyz_display != NULL) {
XCloseDisplay(xyz_display);
}
exit(0);
}