Software > Coding
TOS/MagiC // Uhr abschalten (Timerevent verhindern)
rainers:
Hallo Markus,
vielen Dank für Deine tolle Hilfe und das Lob ;)
Sobald ich meine Pascal-Bücher wieder zur Verfügung habe, suche ich nach den Äquivalenz-Befehlen in ST-Pascal und setze Deinen Vorschlag um.
-R.
rainers:
--- Zitat von: mfro am Di 09.04.2013, 07:36:04 ---In dem Programm, das die Uhr loshaben will, schickst Du die entsprechende Nachricht (UHR_AUS) per appl_write() an dein Uhrenprogramm, dessen ap_id Du vorher mit appl_find() gesucht und gefunden hast. Die Uhr muß drauf reagieren und sich schlafen legen. Am Ende schickst Du ein UHR_AN and das Accessory und sie malt wieder auf dem Bildschirm rum.
--- Ende Zitat ---
Hallo Markus,
schade :( , das wäre auch zu einfach gewesen.
Wie ich schon vermutet hatte, ST-Pascal hat die Funktionen appl_find/appl_write in der Form wohl nicht in seinem Befehlsumfang.
Leider "beherrsche" ich gerade mal diese Sprache so leidlich, so daß eine Portierung nach C für mich nicht in Frage kommt.
Danke nochmals für Deine Hilfe.
-R.
rainers:
So. Habe mir das ganze mal unter richtiger Hardware angesehen.
Meine Uhr läuft oben/rechts. TwiLight schaltet sich ein. Die Uhr ist nicht mehr zu sehen (zeichnet nicht neu). TwiLight wird ausgeschaltet. Man kann kurz noch die Uhrzeit sehen, welche zum Zeitpunkt des Einschaltens von TwiLight aktuell war, kurz darauf wird die Uhrzeit aktualisiert.
Meine Uhr weiß nichts von TwiLight, "hört" also auch nicht auf Nachrichten von TwiLight. Und dennoch kann TwiLight dafür sorgen, daß die Uhr "stehen" bleibt.
Wie macht es das?
Würde mich riesig freuen, wenn einer der Programmier-Gurus hier einen Tip hat. Offenbar nutzt TwiLight irgendeine Systemfunktion, die es ermöglicht, die Uhr "anzuhalten".
Danke.
-R,
mfro:
Nachdem es für diesen Zweck keine Systemfunktion gibt, ist es sehr wahrscheinlich, daß die Uhr gar nicht wirklich ausgeschaltet wird, sondern fröhlich weiterarbeitet und bloß nichts (oder eben etwas anderes) zu sehen ist.
Der Trick ist einfach: Physbase() (XBIOS #2), Logbase() (XBIOS #3) und Setscreen() (XBIOS #5). Mit Setscreen() kann man die physikalische Bildschirmadresse (der Speicherbereich, der auf dem Schirm erscheint) und die logische Bildschirmadresse (der Speicherbereich, den die Zeichenfunktionen als Bildschirm betrachten) auf unterschiedliche Adressen setzen.
Das Programm könnte folgendermaßen vorgehen:
* mit Physbase() und/oder Logbase die aktuelle Bildschirmadresse in Erfahrung bringen
* mit Malloc() einen zweiten Bildschirmspeicher allokieren
* den löschen[li]mit Setscreen() den physikalischen Bildschirmspeicher auf den neuen Puffer setzen
[/li][/list]
Die Uhr malt weiter fröhlich ihre Uhrzeit, man sieht bloß nix, weil sie die auf den "versteckten" Bildschirm malt.
HamSTer:
die antwort stand hier doch schon. mit wind_update() den bildschirm für andere applikationen sperren.
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln