Ich habe mich für die Athena Widgets entschieden, weil für sie eine ausführliche Dokumentation unter /usr/X11/mit/hardcopy/ zu finden war und sie das Experimentieren mit editres erlauben. Die Lösung ist sehr minimalistisch, ich habe keinen Wert auf Portierbarkeit gelegt, und in die Grafik nur das nötigste gesteckt. Aber dies ist ja auch nur eine Übungsaufgabe, um Widgets kennenzulernen, und noch nicht die Semesteraufgabe, auch wenn der Arbeitsaufwand, um verläßliche Informationen zusammenzusuchen, schon eine Zumutung war. So habe ich zum Beispiel als Composite Widgets nur einfache Boxen statt Forms gewählt. Daß dabei gerade eine hübsche Ofenfront erscheint, ist allein das Ergebnis dieser speziellen Fonts und Labelgrößen. Startet man oven ohne die XOven-Resourcen, dann ist da kein Ofen mehr zu erkennen. Wenn Du einfach make eingibst, dann wird das Programm aber automatisch mit den richtigen Resourcen gestartet. In die grafische Gestaltung der Tür habe ich auch keine Mühe verschwendet. Es ist halt ein weißer Herd mit einer Tür ohne Fenster, man drückt auf sie, um sie zu öffnen oder zu schließen. Bei offener Tür erscheint der Innenraum als schwarzes Loch. Das ist natürlich sowohl auf Farb- als auch auf Schwarzweißschirmen lauffähig. Die Forderungen des Aufgabenblatts sind trotzdem komplett erfüllt, insbesondere wird bei offener Tür stets das Kochen angehalten. Die Heizleistung kann durch Drücken der Powertaste eingestellt werden. Die Uhr dient als Multifunktionsanzeige: im Grundzustand zeigt sie die Tageszeit (erkennbar am Doppelpunkt), wenn eine Kochzeit gewählt wurde, so wird diese angezeigt und wenn die Kochzeit sekundenweise heruntergezählt wird, so ist dies das Zeichen, daß der Herd gerade kocht. Während der Kochzeit kann wie bei einer Eieruhr mit den Zeiteinstellungstasten die Kochzeit verlängert oder verkürzt werden. Die Implementierung ist auch stabil bei Rechnerüberlastung, bei der Xt die Timeoutcallbacks nicht rechtzeitig auf die Reihe kriegt, es wird stets gegen die Systemzeit verglichen. Aus der Dokumentation wurde nirgends ersichtlich, ob das Toolkit sich forkt und etwa die Timeoutcallbacks nebenläufig ausführt. Ich habe rein sequentiell programmiert, und noch sind keine Probleme aufgetreten. Die Stoptaste hat bei laufendem Ofen die Funktion, den Kochvorgang anzuhalten, ohne die verbleibende Kochzeit zu löschen. Bei stillstehendem Herd löscht man mit der Stoptaste die Kochzeit und schaltet zurück auf Uhr. Ich habe überlegt, ob ich als dritte Funktion der Stoptaste ein Quit einbaue. Es ist jedoch unrealistisch für einen Mikrowellenherd, eine Selbstzerstörungstaste zu haben, ich empfehle daher den Control-C-Interrupt.