1 /******************************************************************************
2  * DESCRIPTION: Dinotrace source: Dinotrace functions and callback externs
3  *
4  * This file is part of Dinotrace.
5  *
6  * Author: Wilson Snyder <wsnyder@wsnyder.org>
7  *
8  * Code available from: http://www.veripool.org/dinotrace
9  *
10  ******************************************************************************
11  *
12  * Some of the code in this file was originally developed for Digital
13  * Semiconductor, a division of Digital Equipment Corporation.  They
14  * gratefuly have agreed to share it, and thus the base version has been
15  * released to the public with the following provisions:
16  *
17  *
18  * This software is provided 'AS IS'.
19  *
20  * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THE INFORMATION
21  * (INCLUDING ANY SOFTWARE) PROVIDED, INCLUDING ALL IMPLIED WARRANTIES OF
22  * MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR PURPOSE, AND
23  * NON-INFRINGEMENT. DIGITAL NEITHER WARRANTS NOR REPRESENTS THAT THE USE
24  * OF ANY SOURCE, OR ANY DERIVATIVE WORK THEREOF, WILL BE UNINTERRUPTED OR
25  * ERROR FREE.  In no event shall DIGITAL be liable for any damages
26  * whatsoever, and in particular DIGITAL shall not be liable for special,
27  * indirect, consequential, or incidental damages, or damages for lost
28  * profits, loss of revenue, or loss of use, arising out of or related to
29  * any use of this software or the information contained in it, whether
30  * such damages arise in contract, tort, negligence, under statute, in
31  * equity, at law or otherwise. This Software is made available solely for
32  * use by end users for information and non-commercial or personal use
33  * only.  Any reproduction for sale of this Software is expressly
34  * prohibited. Any rights not expressly granted herein are reserved.
35  *
36  ******************************************************************************
37  *
38  * Changes made over the basic version are covered by the GNU public licence.
39  *
40  * Dinotrace is free software; you can redistribute it and/or modify
41  * it under the terms of the GNU General Public License as published by
42  * the Free Software Foundation; either version 3, or (at your option)
43  * any later version.
44  *
45  * Dinotrace is distributed in the hope that it will be useful,
46  * but WITHOUT ANY WARRANTY; without even the implied warranty of
47  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
48  * GNU General Public License for more details.
49  *
50  * You should have received a copy of the GNU General Public License
51  * along with Dinotrace; see the file COPYING.  If not, write to
52  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
53  * Boston, MA 02111-1307, USA.
54  *
55  *****************************************************************************/
56 
57 /***********************************************************************/
58 /* Defined functions.... Really inlines, but old VMS compiler chokes */
59 
60 /***********************************************************************/
61 /* Relatively generic stuff */
62 
63 /* Utilities */
64 #ifndef MAX
65 # define MAX(_a_,_b_) ( ( ( _a_ ) > ( _b_ ) ) ? ( _a_ ) : ( _b_ ) )
66 #endif
67 
68 #ifndef MIN
69 # define MIN(_a_,_b_) ( ( ( _a_ ) < ( _b_ ) ) ? ( _a_ ) : ( _b_ ) )
70 #endif
71 
72 #ifndef ABS
73 # define ABS(_a_) ( ( ( _a_ ) < 0 ) ? ( - (_a_) ) : ( _a_ ) )
74 #endif
75 
76 /* Avoid binding error messages on XtFree, NOTE ALSO clears the pointer! */
77 #define DFree(ptr) { XtFree((char *)ptr); ptr = NULL; }
78 
79 /* Xt provides a nice XtNew, but a XtNewCalloc is nice too (clear storage) */
80 #define DNewCalloc(type) ((type *) XtCalloc(1, (unsigned) sizeof(type)))
81 
82 /* Useful for debugging messages */
83 #define DeNull(_str_) ( ((_str_)==NULL) ? "NULL" : (_str_) )
84 #define DeNullSignal(_sig_) ( ((_sig_)==NULL) ? "NULLPTR" : (DeNull((_sig_)->signame) ) )
85 
86 /* Correct endianness (little is stored in files, since that's what the program originally used) */
87 #if WORDS_BIGENDIAN
88 #define LITTLEENDIANIZE32(_lw_) \
89     ( (  (_lw_<<24)&0xff000000) | ((_lw_<< 8)&0x00ff0000) \
90       | ((_lw_>> 8)&0x0000ff00)  | ((_lw_>>24)&0x000000ff))
91 #else
92 #define LITTLEENDIANIZE32(_lw_) (_lw_)
93 #endif
94 
95 /***********************************************************************/
96 /* Dinotrace specifics */
97 
98 /* Callback.. force a prototype declaration to avoid warnings */
99 #define DAddCallback(widget, callback, func, trace) \
100     (XtAddCallback ((widget), (callback),  (XtCallbackProc)(func), (trace)))
101 
102 /* Schedule a redraw for trace or everybody */
103 #define draw_expose_needed(_trace_)	{ global->redraw_needed |= GRD_TRACE; (_trace_)->redraw_needed |= TRD_EXPOSE; }
104 #define draw_needed(_trace_)		{ global->redraw_needed |= GRD_TRACE; (_trace_)->redraw_needed |= TRD_REDRAW; }
105 #define draw_all_needed() 		{ global->redraw_needed |= GRD_ALL; }
106 #define draw_manual_needed() 		{ global->redraw_needed |= GRD_MANUAL; }
107 #define draw_needupd_sig_start()	{ global->updates_needed |= GUD_SIG_START; }
108 #define draw_needupd_sig_search()	{ global->updates_needed |= GUD_SIG_SEARCH; }
109 #define draw_needupd_val_search()	{ global->updates_needed |= GUD_VAL_SEARCH; }
110 #define draw_needupd_val_states()	{ global->updates_needed |= GUD_VAL_STATES; }
111 
112 /* dino_message_ack types */
113 #define	dino_error_ack(tr,msg)		dino_message_ack (tr, 0, msg)
114 #define	dino_warning_ack(tr,msg)	dino_message_ack (tr, 1, msg)
115 #define	dino_information_ack(tr,msg)	dino_message_ack (tr, 2, msg)
116 #define	CKPT() printf ("CKPT %s:%d\n", __FILE__, __LINE__)
117 
118 #define TIME_TO_XPOS_REL(_xtime_, _base_) \
119         ((int)( ((_xtime_) - (_base_)) * global->res + global->xstart ))
120 #define TIME_TO_XPOS(_xtime_) TIME_TO_XPOS_REL ((_xtime_), global->time)
121 
122 #define	TIME_WIDTH(_trace_) \
123 	((DTime_t)( ((_trace_)->width - XMARGIN - global->xstart) / global->res ))
124 
125 /* Point to next (prev) cptr.  Sizeof(value) is larger than we increment, */
126 /* so force types to get pointer += 4 bytes */
127 #define CPTR_NEXT(cptr) ((Value_t*) (((uint_t*)(cptr)) \
128 					+ ((cptr)->siglw.stbits.size)))
129 #define CPTR_PREV(cptr) ((Value_t*) (((uint_t*)(cptr)) \
130 					- ((cptr)->siglw.stbits.size_prev)))
131 #define CPTR_TIME(cptr) ((cptr)->time)
132 #define	val_copy(to_cptr,from_cptr) \
133 {\
134      (to_cptr)->siglw.number = (from_cptr)->siglw.number;\
135      (to_cptr)->time         = (from_cptr)->time;\
136      (to_cptr)->number[0]    = (from_cptr)->number[0];\
137      (to_cptr)->number[1]    = (from_cptr)->number[1];\
138      (to_cptr)->number[2]    = (from_cptr)->number[2];\
139      (to_cptr)->number[3]    = (from_cptr)->number[3];\
140      (to_cptr)->number[4]    = (from_cptr)->number[4];\
141      (to_cptr)->number[5]    = (from_cptr)->number[5];\
142      (to_cptr)->number[6]    = (from_cptr)->number[6];\
143      (to_cptr)->number[7]    = (from_cptr)->number[7];\
144  }
145 #define	val_zero(to_cptr) \
146 {\
147      (to_cptr)->siglw.number = 0;\
148      (to_cptr)->time         = 0;\
149      (to_cptr)->number[0]    = 0;\
150      (to_cptr)->number[1]    = 0;\
151      (to_cptr)->number[2]    = 0;\
152      (to_cptr)->number[3]    = 0;\
153      (to_cptr)->number[4]    = 0;\
154      (to_cptr)->number[5]    = 0;\
155      (to_cptr)->number[6]    = 0;\
156      (to_cptr)->number[7]    = 0;\
157  }
158 
159 /* Also identical commented function in dt_file if this isn't defined */
160 /* It is critical for speed that this be inlined, so we'll just define it */
161 #define	fil_add_cptr(sig_ptr, value_ptr, nocheck) \
162 {\
163     Value_t	*cptr;\
164     ulong_t diff;\
165     cptr = sig_ptr->cptr;\
166     if ( (nocheck)\
167 	|| ( cptr->siglw.stbits.state != (value_ptr)->siglw.stbits.state )\
168 	|| ( cptr->number[0] != (value_ptr)->number[0] )\
169 	|| ( cptr->number[1] != (value_ptr)->number[1] )\
170 	| ( cptr->number[2] != (value_ptr)->number[2] )\
171 	| ( cptr->number[3] != (value_ptr)->number[3] )\
172 	|| ( cptr->number[4] != (value_ptr)->number[4] )\
173 	| ( cptr->number[5] != (value_ptr)->number[5] )\
174 	| ( cptr->number[6] != (value_ptr)->number[6] )\
175 	| ( cptr->number[7] != (value_ptr)->number[7] ) ) {\
176 	diff = (uint_t*)sig_ptr->cptr - (uint_t*)sig_ptr->bptr;\
177 	if (diff > sig_ptr->blocks) {\
178 	    sig_ptr->blocks += BLK_SIZE;\
179 	    sig_ptr->bptr = (Value_t *)XtRealloc ((char*)(sig_ptr)->bptr,\
180 		       ((sig_ptr)->blocks*sizeof(unsigned int)) + (sizeof(Value_t)*2 + 2));\
181 	    sig_ptr->cptr = (Value_t *)((uint_t*)sig_ptr->bptr + diff);\
182 	}\
183 	(value_ptr)->siglw.stbits.size_prev = sig_ptr->cptr->siglw.stbits.size;\
184 	(value_ptr)->siglw.stbits.size = STATE_SIZE((value_ptr)->siglw.stbits.state);\
185 	if (sig_ptr->cptr->siglw.number || sig_ptr->cptr!=sig_ptr->bptr) {\
186 	    sig_ptr->cptr = CPTR_NEXT(sig_ptr->cptr);\
187 	}\
188 	val_copy (sig_ptr->cptr, (value_ptr));\
189     }\
190  }
191 
192 
193 /***********************************************************************/
194 /* Prototypes */
195 
196 /* Dinotrace */
197 extern char *	help_message (void);
198 
199 /* dt_dispmgr */
200 extern Trace_t *create_trace (int xs, int ys, int xp, int yp);
201 extern Trace_t *trace_create_split_window (Trace_t *trace);
202 extern Trace_t *malloc_trace (void);
203 extern void	init_globals (void);
204 extern void	create_globals (int argc, char **argv, Boolean_t sync);
205 extern void	set_cursor (int cursor_num);
206 extern int	last_set_cursor (void);
207 
208 extern void	trace_open_cb (Widget w);
209 extern void	trace_close_cb (Widget w);
210 extern void	trace_clear_cb (Widget w);
211 extern void	trace_exit_cb (Widget w);
212 
213 /* dt_customize routines */
214 extern void	cus_dialog_cb (Widget w, Trace_t *trace, XmAnyCallbackStruct *cb);
215 extern void	cus_read_cb (Widget w, Trace_t *trace, XmFileSelectionBoxCallbackStruct *cb);
216 extern void	cus_read_ok_cb (Widget w, Trace_t *trace, XmFileSelectionBoxCallbackStruct *cb);
217 extern void	cus_ok_cb (Widget w, Trace_t *trace, XmAnyCallbackStruct *cb);
218 extern void	cus_apply_cb (Widget w, Trace_t *trace, XmAnyCallbackStruct *cb);
219 extern void	cus_restore_cb (Widget w, Trace_t *trace, XmAnyCallbackStruct *cb);
220 extern void	cus_reread_cb (Widget w, Trace_t *trace, XmAnyCallbackStruct *cb);
221 extern void	cus_write_cb (Widget w);
222 extern void	cus_write_ok_cb (Widget w, Trace_t *trace, XmFileSelectionBoxCallbackStruct *cb);
223 
224 /* dt_cursor routines */
225 extern DCursor_t *cur_add (DTime_t time, ColorNum_t color, CursorType_t type, const char *note);
226 extern void	cur_remove (DCursor_t *);
227 extern void     cur_new (DTime_t ctime, ColorNum_t color, CursorType_t type, const char *note);
228 extern void     cur_move (DCursor_t *csr_ptr, DTime_t new_time);
229 extern void	cur_delete (DCursor_t *csr_ptr);
230 extern void	cur_delete_of_type (CursorType_t type);
231 extern void	cur_free (DCursor_t *csr_ptr);
232 extern DTime_t	cur_time_first (const Trace_t *trace);
233 extern DTime_t	cur_time_last (const Trace_t *trace);
234 extern void	cur_write (FILE *, const char *c);
235 extern char *	cur_examine_string (Trace_t *trace, DCursor_t *cursor_ptr);
236 extern void	cur_step (DTime_t step);
237 extern void	cur_note (DCursor_t* csr_ptr, const char* note);
238 
239 extern void	cur_add_cb (Widget w);
240 extern void	cur_add_current_cb (Widget w);
241 extern void	cur_add_next_cb (Widget w);
242 extern void     cur_add_simview_cb (Widget w);
243 extern void	cur_mov_cb (Widget w);
244 extern void	cur_del_cb (Widget w);
245 extern void	cur_clr_cb (Widget w);
246 extern void	cur_note_cb (Widget w);
247 extern void	cur_step_fwd_cb (Widget w);
248 extern void	cur_step_back_cb (Widget w);
249 extern void	cur_highlight_cb (Widget w);
250 extern void	cur_highlight_ev (Widget w, Trace_t *trace, XButtonPressedEvent *ev);
251 extern void     cur_highlight (DCursor_t *csr_ptr, ColorNum_t color);
252 extern void	cur_add_ev (Widget w, Trace_t *trace, XButtonPressedEvent *ev);
253 extern void	cur_move_ev (Widget w, Trace_t *trace, XButtonPressedEvent *ev);
254 extern void	cur_delete_ev (Widget w, Trace_t *trace, XButtonPressedEvent *ev);
255 extern void	cur_note_ev (Widget w, Trace_t* trace, XButtonPressedEvent* ev);
256 extern DCursor_t *cur_id_to_cursor (int id);
257 
258 /* dt_config routines */
259 extern void	config_read_defaults (Trace_t *trace, Boolean_t);
260 extern void	config_read_file (Trace_t *trace, char *, Boolean_t, Boolean_t);
261 extern void	config_trace_defaults (Trace_t *);
262 extern void	config_global_defaults (void);
263 extern void	config_parse_geometry (char *, Geometry_t *);
264 extern void	config_update_filenames (Trace_t *trace);
265 extern void	config_read_socket (char *line, char *name, int cmdnum, Boolean_t eof);
266 extern void	config_write_file (Trace_t *trace, char *filename);
267 extern SignalState_t *signalstate_find (const Trace_t *, const char *);
268 
269 /* dt_grid routines */
270 extern DTime_t	grid_primary_period (const Trace_t *trace);
271 extern void	grid_calc_autos (Trace_t *trace);
272 extern char *	grid_examine_string (Trace_t *trace, Grid_t *grid_ptr, DTime_t time);
273 
274 extern void	grid_customize_cb (Widget w);
275 extern void	grid_reset_cb (Widget w);
276 
277 /* dt_signal routines */
278 extern void	sig_update_search (void);
279 extern void	sig_free (Trace_t *trace, Signal_t *sig_ptr, Boolean_t select, Boolean_t recurse);
280 extern void	sig_highlight_selected (int color);
281 extern void	sig_radix_selected (Radix_t *radix_ptr);
282 extern void	sig_waveform_selected (Waveform_t waveform);
283 extern void	sig_modify_enables (Trace_t *);
284 extern void	sig_move_selected (Trace_t *new_trace, const char *after_pattern);
285 extern void	sig_rename_selected (const char *new_name);
286 extern void	sig_copy_selected (Trace_t *new_trace, const char *after_pattern);
287 extern void	sig_delete_selected (Boolean_t constant_flag, Boolean_t ignorexz);
288 extern void	sig_note (Signal_t* sig_ptr, const char *note);
289 extern void	sig_note_selected (const char *note);
290 extern void	sig_wildmat_select (Trace_t *, const char *pattern);
291 extern void	sig_goto_pattern (Trace_t *, const char *pattern);
292 extern void	sig_cross_preserve (Trace_t *trace);
293 extern void	sig_cross_restore (Trace_t *trace) ;
294 extern char *	sig_basename (const Trace_t *trace, const Signal_t *sig_ptr);
295 extern Signal_t *sig_find_signame (const Trace_t *trace, const char *signame);
296 extern Signal_t *sig_wildmat_signame (const Trace_t *trace, const char *signame);
297 extern void	sig_print_names (Trace_t *trace);
298 extern char *	sig_examine_string (const Trace_t *trace, const Signal_t *sig_ptr);
299 extern void	sig_new_file (Trace_t *trace, char *signame, int file_pos, int file_code, int bits, int msb, int lsb, union sig_file_type_u file_type);
300 
301 extern void	sig_add_cb (Widget w);
302 extern void	sig_mov_cb (Widget w);
303 extern void	sig_copy_cb (Widget w);
304 extern void	sig_del_cb (Widget w);
305 extern void	sig_radix_cb (Widget w);
306 extern void	sig_waveform_cb (Widget w);
307 extern void	sig_note_cb (Widget w);
308 extern void	sig_add_ev (Widget w, Trace_t *trace, XButtonPressedEvent *ev);
309 extern void	sig_move_ev (Widget w, Trace_t *trace, XButtonPressedEvent *ev);
310 extern void	sig_copy_ev (Widget w, Trace_t *trace, XButtonPressedEvent *ev);
311 extern void	sig_delete_ev (Widget w, Trace_t *trace, XButtonPressedEvent *ev);
312 extern void	sig_radix_ev (Widget w, Trace_t *trace, XButtonPressedEvent *ev);
313 extern void	sig_waveform_ev (Widget w, Trace_t *trace, XButtonPressedEvent *ev);
314 extern void	sig_note_ev (Widget w, Trace_t *trace, XButtonPressedEvent *ev);
315 extern void	sig_highlight_ev (Widget w, Trace_t *trace, XButtonPressedEvent *ev);
316 extern void	sig_highlight_cb (Widget w);
317 extern void	sig_highlight_current_cb (Widget w);
318 extern void	sig_highlight_next_cb (Widget w);
319 extern void	sig_highlight_keep_cb (Widget w);
320 extern void	sig_highlight_clear_cb (Widget w);
321 extern void	sig_select_cb (Widget w);
322 extern void	sig_cancel_cb (Widget w);
323 extern void	sig_search_cb (Widget w);
324 extern void	sig_search_ok_cb (Widget w, Trace_t *trace, XmSelectionBoxCallbackStruct *cb);
325 extern void	sig_search_apply_cb (Widget w, Trace_t *trace, XmSelectionBoxCallbackStruct *cb);
326 
327 /* dt_value routines */
328 extern void	val_minimize (Value_t *value_ptr, Signal_t *sig_ptr);
329 extern void	val_update_search (void);
330 extern void	val_states_update (void);
331 extern void	val_to_string (const Radix_t *radix_ptr, char *strg, const Value_t *value_ptr, int width,
332 			       Boolean_t display, Boolean_t dropleading);
333 extern Boolean_t  val_equal (const Value_t *vptra, const Value_t *vptrb);
334 extern void	val_radix_init (void);
335 extern Radix_t	*val_radix_find (const char *name);
336 
337 extern void	val_annotate_cb (Widget w);
338 extern void	val_annotate_ok_cb (Widget w, Trace_t *trace, XmAnyCallbackStruct *cb);
339 extern void	val_annotate_apply_cb (Widget w, Trace_t *trace, XmAnyCallbackStruct *cb);
340 extern void	val_annotate_do_cb (Widget w, Trace_t *trace, XmAnyCallbackStruct *cb);
341 extern void	val_examine_cb (Widget w);
342 extern void	val_examine_ev (Widget w, Trace_t *trace, XButtonPressedEvent *ev);
343 extern void	val_search_cb (Widget w);
344 extern void	val_search_ok_cb (Widget w, Trace_t *trace, XmSelectionBoxCallbackStruct *cb);
345 extern void	val_search_apply_cb (Widget w, Trace_t *trace, XmSelectionBoxCallbackStruct *cb);
346 extern void	val_highlight_cb (Widget w);
347 extern void	val_highlight_ev (Widget w, Trace_t *trace, XButtonPressedEvent *ev);
348 
349 /* dt_print routines */
350 extern void	print_internal (Trace_t *trace);
351 extern void	print_reset  (Trace_t *trace);
352 
353 extern void	print_dialog_cb (Widget w);
354 extern void	print_reset_cb  (Widget w);
355 extern void	print_direct_cb (Widget w);
356 extern void	print_req_cb (Widget w);
357 extern void	print_range_sensitives_cb (Widget w, RangeWidgets_t *range_ptr, XmSelectionBoxCallbackStruct *cb);
358 
359 /* dt_binary routines */
360 extern void	tempest_read (Trace_t *trace, int read_fd);
361 extern void	decsim_read_binary (Trace_t *trace, int read_fd);
362 
363 /* dt_ascii routines */
364 extern void	ascii_string_add_cptr (Signal_t *sig_ptr, const char *value_strg, DTime_t time, Boolean_t nocheck);
365 extern void	ascii_read (Trace_t *trace, int read_fd, FILE *decsim_z_readfp);
366 
367 /* dt_file routines */
368 extern void	fil_read (Trace_t *trace);
369 extern void	free_data (Trace_t *trace);
370 extern void	fil_make_busses (Trace_t *trace, Boolean_t not_tempest);
371 extern void	fil_trace_end (Trace_t *trace);
372 extern void 	fil_select_set_pattern (Trace_t *trace, Widget dialog, char *pattern);
373 #ifndef fil_add_cptr
374 extern void	fil_add_cptr (Signal_t *sig_ptr, Value_t *value_ptr, Boolean_t nocheck);
375 #endif
376 extern void	trace_reread_all (void);
377 extern void	trace_reread (Trace_t* trace);
378 
379 extern void	fil_format_option_cb (Widget w, Trace_t *trace, XmSelectionBoxCallbackStruct *cb);
380 extern void	fil_ok_cb (Widget w, Trace_t *trace, XmFileSelectionBoxCallbackStruct *cb);
381 extern void	trace_read_cb (Widget w, Trace_t *trace);
382 extern void	trace_reread_all_cb (Widget w, Trace_t *trace);
383 extern void	trace_reread_cb (Widget w, Trace_t *trace);
384 extern void	help_cb (Widget w);
385 extern void	help_trace_cb (Widget w);
386 extern void	help_doc_cb (Widget w);
387 
388 /* dt_util routines */
389 extern void	print_cptr (Value_t *value_ptr);
390 extern void	strcpy_overlap (char *d, char *s);
391 extern void	fgets_dynamic_extend (char **line_pptr, uint_t *length_ptr, uint_t newlen);
392 extern void	fgets_dynamic (char **line_pptr, uint_t *length_ptr, FILE *readfp);
393 extern int	wildmat (const char *s, const char *p);
394 extern void	upcase_string (char *tp);
395 extern void	file_directory (char *strg);
396 extern void	ok_apply_cancel (OkApplyWidgets_t *wid_ptr, Widget, Widget, XtCallbackProc, Trace_t*,
397 				 XtCallbackProc, Trace_t*, XtCallbackProc, Trace_t*, XtCallbackProc, Trace_t*);
398 extern char *	extract_first_xms_segment (XmString);
399 extern char *	date_string (time_t time_num);
400 extern void	dinodisk_directory (char *filename);
401 #if ! HAVE_STRDUP
402 extern char *	strdup (const char *);
403 #endif
404 
405 extern void	new_time (Trace_t *);
406 extern void	get_geometry (Trace_t *trace);
407 extern void	get_data_popup (Trace_t *trace, char *string, int type);
408 extern void	print_sig_info (Signal_t *sig_ptr);
409 extern Trace_t *widget_to_trace (Widget w);
410 extern Value_t *value_at_time (Signal_t *sig_ptr, DTime_t ctime);
411 extern DTime_t	posx_to_time (Trace_t *trace, Position x);
412 extern DTime_t	posx_to_time_edge (Trace_t *trace, Position x, Position y);
413 extern Signal_t *posy_to_signal (Trace_t *trace, Position y);
414 extern Grid_t *	posx_to_grid (Trace_t *trace, Position x, DTime_t *time_ptr);
415 extern DCursor_t *posx_to_cursor (Trace_t *trace, Position x);
416 extern DCursor_t *time_to_cursor (DTime_t xtime);
417 extern void	time_to_string (Trace_t *trace, char *strg, DTime_t ctime, Boolean_t relative);
418 extern double   time_to_cyc_num (DTime_t time);
419 extern DTime_t	cyc_num_to_time (double cyc_num);
420 extern DTime_t 	time_units_to_multiplier (TimeRep_t timerep);
421 extern char *	time_units_to_string (TimeRep_t timerep, Boolean_t showvalue);
422 extern void	string_to_value (Radix_t **radix_pptr, const char *strg, Value_t *value_ptr);
423 extern DTime_t	string_to_time (Trace_t *trace, char *strg);
424 
425 extern void	DManageChild (Widget w, Trace_t *trace, MCKeys_t keys);
426 extern void	add_event (int type, EventCallback_t callback);
427 extern void	remove_all_events (Trace_t *trace);
428 extern void	change_title (Trace_t *trace);
429 extern void	dino_message_ack (Trace_t *trace, int type, char *msg);
430 extern XmString	string_create_with_cr (const char *);
431 extern ColorNum_t submenu_to_color (Trace_t *trace, Widget, ColorNum_t, int);
432 extern int	option_to_number (Widget w, Widget *entry0_ptr, int maxnumber);
433 
434 extern void	cancel_all_events_cb (Widget w);
435 extern void	unmanage_cb (Widget w, Widget tag, XmAnyCallbackStruct *cb);
436 extern void	debug_print_screen_traces_cb (Widget w);
437 
438 /* dt_window routines */
439 extern void	vscroll_new (Trace_t *trace, int inc);
440 extern void	new_res (Trace_t *trace, float res_new);
441 extern void	win_full_res (Trace_t *trace);
442 
443 extern void	win_expose_cb (Widget w, Trace_t *trace);
444 extern void	win_resize_cb (Widget w, Trace_t *trace);
445 extern void	win_refresh_cb (Widget w, Trace_t *trace);
446 extern void	win_goto_cb (Widget w);
447 extern void	win_goto_option_cb (Widget w, Trace_t *trace, XmSelectionBoxCallbackStruct *cb);
448 extern void	win_goto_ok_cb (Widget w, Trace_t *trace, XmSelectionBoxCallbackStruct *cb);
449 extern void	win_goto_cancel_cb (Widget w, Trace_t *trace, XmAnyCallbackStruct *cb);
450 extern void	win_chg_res_cb (Widget w);
451 extern void	win_begin_cb (Widget w);
452 extern void	win_end_cb (Widget w);
453 extern void	win_inc_res_cb (Widget w);
454 extern void	win_dec_res_cb (Widget w);
455 extern void	win_full_res_cb (Widget w);
456 extern void	win_zoom_res_cb (Widget w);
457 extern void	win_namescroll_change_cb (Widget w);
458 extern void	win_note (Trace_t* trace, const char* text1, const char* text2, const char* notetext, Boolean_t forcursor);
459 extern void	res_zoom_click_ev (Widget w, Trace_t *trace, XButtonPressedEvent *ev);
460 extern void	debug_toggle_print_cb (Widget w);
461 extern void	debug_integrity_check_cb (Widget w);
462 extern void	debug_increase_debugtemp_cb (Widget w);
463 extern void	debug_decrease_debugtemp_cb (Widget w);
464 extern void	debug_statistics_cb (Widget w);
465 extern void	hscroll_unitinc_cb (Widget w);
466 extern void	hscroll_unitdec_cb (Widget w);
467 extern void	hscroll_pageinc_cb (Widget w);
468 extern void	hscroll_pagedec_cb (Widget w);
469 extern void	hscroll_drag_cb (Widget w);
470 extern void	vscroll_unitinc_cb (Widget w);
471 extern void	vscroll_unitdec_cb (Widget w);
472 extern void	vscroll_pageinc_cb (Widget w);
473 extern void	vscroll_pagedec_cb (Widget w);
474 extern void	vscroll_drag_cb (Widget w);
475 
476 /* dt_socket */
477 extern void	socket_set_os_signals (void);
478 extern void	socket_create (void);
479 
480 /* dt_draw */
481 extern void	update_scrollbar (Widget w, int value, int inc, int min, int max, int size);
482 extern void	draw_update_sigstart (void);
483 extern void	draw_perform (void);
484 extern void	draw_update (void);
485 extern void	draw_namescroll (Trace_t *trace);
486 extern void	draw_scroll_hook_cb_expose (void);
487 
488 /* dt_icon */
489 extern Pixmap	icon_dinos (void);
490 
491 /* dt_verilog */
492 extern void	verilog_read (Trace_t *trace, int read_fd);
493 
494 /* SimView Hooks */
495 extern void	simview_init (char *cmdlinearg);
496 extern void	simview_cur_create (int cur_num, double cyc_num, ColorNum_t color, char *color_name);
497 extern void	simview_cur_move (int cur_num, double cyc_num);
498 extern void	simview_cur_highlight (int cur_num, ColorNum_t color, char *color_name);
499 extern void	simview_cur_delete (int cur_num);
500