/**************************************************************** Uebungen zur Vorlesung "Graphische Datenverarbeitung" Sommersemester 1997 Programm: stoppuhr.c Autor: Christian Boehm ****************************************************************/ # include # include struct timeval time1, time2 ; /* tdiff * Hilfsfunktion zur Ermittlung der Zeitdifferenz in Millisekunden */ int tdiff (struct timeval t1, struct timeval t2) { return (t2.tv_sec*1000+t2.tv_usec/1000-t1.tv_sec*1000-t1.tv_usec/1000) ; } /* Callback-Funktionen */ void StartCB (Widget w , XtPointer p1, XtPointer p2) { printf ("Start\n") ; gettimeofday(&time1, NULL); } void StopCB (Widget w , XtPointer p1, XtPointer p2) { gettimeofday(&time2, NULL); printf ("Stop: %d msec\n", tdiff (time1, time2) ) ; } void LoeschenCB (Widget w , XtPointer p1, XtPointer p2) { printf ("Loeschen\n") ; } void ExitCB (Widget w , XtPointer p1, XtPointer p2) { exit (0) ; } main (int argc, char ** argv) { XtAppContext kontext; /* Applikations-Umgebung */ Widget applShell, box, startBt, stopBt, loeschenBt, exitBt; applShell = XtAppInitialize (& kontext, "Stoppuhr", (XrmOptionDescRec *) NULL, 0, & argc, argv, (String *) NULL, (Arg *) NULL, 0); box = XtCreateManagedWidget ("box", xmRowColumnWidgetClass, applShell, (Arg *) NULL, 0); startBt = XtCreateManagedWidget ("START", xmPushButtonWidgetClass, box, (Arg *) NULL, 0); stopBt = XtCreateManagedWidget ("STOP", xmPushButtonWidgetClass, box, (Arg *) NULL, 0); loeschenBt = XtCreateManagedWidget ("LOESCHEN", xmPushButtonWidgetClass, box, (Arg *) NULL, 0); exitBt = XtCreateManagedWidget ("EXIT", xmPushButtonWidgetClass, box, (Arg *) NULL, 0); /* Callbacks registrieren */ XtAddCallback (startBt, XmNactivateCallback, StartCB, (XtPointer) NULL) ; XtAddCallback (stopBt, XmNactivateCallback, StopCB, (XtPointer) NULL) ; XtAddCallback (loeschenBt, XmNactivateCallback, LoeschenCB, (XtPointer) NULL) ; XtAddCallback (exitBt, XmNactivateCallback, ExitCB, (XtPointer) NULL) ; XtRealizeWidget (applShell); XtAppMainLoop (kontext); }