/**************************************************************** Uebungen zur Vorlesung "Graphische Datenverarbeitung" Sommersemester 1997 Programm: stoppuhr2.c Autor: Christian Boehm ****************************************************************/ # include # include # include struct timeval time1, time2 ; XtAppContext kontext; /* Applikations-Umgebung */ Widget textWdgt ; XtIntervalId timerId ; float Startzeit ; /* 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 timerCB (XtPointer p, XtIntervalId *i) { char s [80] ; gettimeofday(&time2, NULL); sprintf (s, "%.3f", (float)tdiff (time1, time2) * 0.001 + Startzeit) ; XmTextFieldSetString (textWdgt, s) ; timerId = XtAppAddTimeOut (kontext, 10, timerCB, (XtPointer) NULL) ; } void StartCB (Widget w , XtPointer p1, XtPointer p2) { char * s ; gettimeofday(&time1, NULL); s = XmTextFieldGetString (textWdgt) ; Startzeit = atof (s) ; XtFree (s) ; timerId = XtAppAddTimeOut (kontext, 10, timerCB, (XtPointer) NULL) ; } void StopCB (Widget w , XtPointer p1, XtPointer p2) { char s [80] ; gettimeofday(&time2, NULL); sprintf (s, "%.3f", (float)tdiff (time1, time2) * 0.001 + Startzeit) ; XmTextFieldSetString (textWdgt, s) ; XtRemoveTimeOut (timerId) ; } void LoeschenCB (Widget w , XtPointer p1, XtPointer p2) { XmTextFieldSetString (textWdgt, "0.000") ; } void ExitCB (Widget w , XtPointer p1, XtPointer p2) { exit (0) ; } main (int argc, char ** argv) { 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); textWdgt = XtCreateManagedWidget ("zeit", xmTextFieldWidgetClass, box, (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) ; XmTextFieldSetString (textWdgt, "0.000") ; XtRealizeWidget (applShell); XtAppMainLoop (kontext); }