[comp.windows.open-look] NOTIFY Dispatch WOES!

mms@crdgw1.ge.com (Mark Scoville) (06/19/91)

I am attempting EXPLICIT DISPATCHING, and am failing sorely!  After invoking
the application, I toggle back and forth about 3 times or so between 'Start
Loop' and 'STOP'.  At some point it hangs on STOP.

=================================
     SPARCstation 1/2
            SunOS 4.0.3/4.1
            XView 2.0
         DevGuide 1.1
               OW 2.0
=================================

Thanks in advance.

           **********************************************
           *        Mark Scoville (415) 683-4332        *
           *  mms@nmri.ge.com -OR- ...!sane!genmri!mms  *
           **********************************************

---------------------------- code fragment -------------------------
int				flag   = FALSE,
				looper = 0;

Display			*dpy;

void
main(argc, argv)
	int		argc;
	char	**argv;
{
	ntf_window1_objects	*ntf_window1;
	
	/* Initialize XView. */
	xv_init(XV_INIT_ARGC_PTR_ARGV, &argc, argv, 0);
	INSTANCE = xv_unique_key();
	
	/* Initialize user interface components. */
	ntf_window1 = ntf_window1_objects_initialize(NULL, NULL);
	dpy = (Display *)xv_get(ntf_window1->window1, XV_DISPLAY);
	xv_set(ntf_window1->window1, XV_SHOW, TRUE, NULL);
	XFlush(dpy);
	
	/* Turn control over to XView. */
	while(looper < 1000)
	{
		notify_dispatch();
		XFlush(dpy);
		LoopFct(ntf_window1);
	}
	exit(0);
}

/* Notify callback function for `button1'.  */
void
FctDoLoop(item, event)
	Panel_item	item;
	Event		*event;
{
	ntf_window1_objects	*ip = (ntf_window1_objects *) xv_get(item,
		XV_KEY_DATA, INSTANCE);
	
	switch (flag)
	{
		case FALSE:	xv_set(ip->button1,
                           PANEL_LABEL_STRING, "STOP", NULL);
					flag = TRUE;
					notify_stop();
					break;

		case TRUE:	xv_set(ip->button1,
                           PANEL_LABEL_STRING, "Start Loop", NULL);
					flag = FALSE;
					break;
	}
}

LoopFct(ip)
	ntf_window1_objects	*ip;
{
	char	val[20];

	while (flag)
	{
		notify_dispatch();
		XFlush(dpy);
		sprintf(val, "%d", looper++);
		xv_set(ip->textfield1, PANEL_VALUE, val, NULL);
	}
	return(0);
}
------------------------------ end code fragment -----------------------------