File: xmpi_tr_segment.c

package info (click to toggle)
xmpi 2.2-1
  • links: PTS
  • area: main
  • in suites: potato
  • size: 1,232 kB
  • ctags: 1,656
  • sloc: ansic: 13,738; sh: 1,799; makefile: 233
file content (139 lines) | stat: -rw-r--r-- 2,663 bytes parent folder | download
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
/*
 *	XMPI
 *	Copyright 1997 The Ohio State University
 *	NJN
 *
 *	$Id: xmpi_tr_segment.c,v 1.2 1999/08/17 03:11:13 lamteam Exp $
 *
 *	Function:	- select and view a trace segment
 */

#include <Xm/SelectioB.h>
#include "xmpi.h"

/*
 * global functions
 */
void			xmpi_tr_select_segment();

/*
 * external functions
 */
extern int		xmpi_db_parse_segment();
extern void		xmpi_db_view();

/*
 * private functions
 */
static void		selcancel_cb();
static void		selseg_cb();

/*
 *	xmpi_tr_select_segment
 *
 *	Function:	- select, parse and view a trace segment
 *	Accepts:	- maximum segment number
 */
void
xmpi_tr_select_segment(maxseg)

int			maxseg;

{
	Widget		dialog_w;		/* dialog to select segment */
	XmString	str1, str2;		/* various strings */
	Arg		args[3];
	char		buf[32];		/* formatting buffer */
/*
 * If there is only a single segment then no selection is necessary.
 */
	if (maxseg == 1) {

		if (xmpi_db_parse_segment(0)) {
			xmpi_db_free();
			xmpi_ctl_resetinfo();
		} else {
			xmpi_db_view();
		}

		xmpi_unbusy();
		return;
	}
/*
 * Pop up a dialog to choose a segment number.  The OK callback will
 * parse and view the selected segment.
 */
	sprintf(buf, "Enter segment to display (0-%d)", maxseg - 1);
	str1 = XmStringCreateSimple(buf);
	str2 = XmStringCreateSimple("0");

	XtSetArg(args[0], XmNselectionLabelString, str1);
	XtSetArg(args[1], XmNautoUnmanage, False);
	XtSetArg(args[2], XmNtextString, str2);
	
	dialog_w = XmCreatePromptDialog(xmpi_shell, "prompt_pop", args, 3);
	
	XmStringFree(str1);
	XmStringFree(str2);
	XtAddCallback(dialog_w, XmNokCallback, selseg_cb, NULL);
	XtAddCallback(dialog_w, XmNcancelCallback, selcancel_cb, NULL);
	XtSetSensitive(XmSelectionBoxGetChild(dialog_w, XmDIALOG_HELP_BUTTON),
			False);
	XtManageChild(dialog_w);
	XtPopup(XtParent(dialog_w), XtGrabNone);
}

/*
 *	selseg_cb
 *
 *	Function:	- segment selection callback, parses and views
 *			  the selected segment
 *	Accepts:	- callback parms
 */
static void
selseg_cb(w, cdata, cbs)

Widget			w;
XtPointer		cdata;
XmSelectionBoxCallbackStruct
			*cbs;

{
	char		*s;
	int		segment;		/* segment number */

	XmStringGetLtoR(cbs->value, XmSTRING_DEFAULT_CHARSET, &s);

	segment = (s && *s) ? stoi((unsigned char *)s) : 0;

	XtFree(s);
	XtDestroyWidget(w);

	if (xmpi_db_parse_segment(segment)) {
		xmpi_db_free();
		xmpi_ctl_resetinfo();
	} else {
		xmpi_db_view();
	}

	xmpi_unbusy();
}

/*
 *	selcancel_cb
 *
 *	Function:	- segment selection cancel callback
 *	Accepts:	- callback parms
 */
static void
selcancel_cb(w, cdata, cbs)

Widget			w;
XtPointer		cdata;
XmSelectionBoxCallbackStruct
			*cbs;

{
	xmpi_ctl_resetinfo();
	XtDestroyWidget(w);
}