Autor Thema: TOS/MagiC // Uhr abschalten (Timerevent verhindern)  (Gelesen 37402 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

rainers

  • Gast
TOS/MagiC // Uhr abschalten (Timerevent verhindern)
« am: Mo 08.04.2013, 20:13:11 »
Hallo,

der Bildschirmschoner "TwiLight" hat eine Option "Uhren ausschalten".
So etwas würde ich gern in einem Programm ebenfalls tun, damit eine Bilddarstellung im Vollbildmodus nicht durch eine laufende Uhr gestört wird.

Hat jemand bitte einen Tip für mich, wie ich das bewerkstelligen kann? Sprache ist egal, solange es nicht Assembler ist (ich suche mir dann schon das Passende in ST-Pascal).
Ich kann mir denken, daß es irgend etwas wie "Disable Timer" geben wird, aber welche Funktion (GEM, BIOS, XBIOS) wäre es konkret.

Vielen Dank.
Gruß
-R.

Omikronman

  • Gast
Re: TOS/MagiC // Uhr abschalten (Timerevent verhindern)
« Antwort #1 am: Mo 08.04.2013, 20:19:57 »
Wie meinst Du das? Malt da im Hintergrund ein anderes Programm eine Uhrzeit über den Bildschirmschoner oder was? O.o

rainers

  • Gast
Re: TOS/MagiC // Uhr abschalten (Timerevent verhindern)
« Antwort #2 am: Mo 08.04.2013, 20:30:16 »
Kopf kratz ??? ;-)
Also Screensaver kennt doch TOS in dem Sinne nicht. Man kann die nur nachstellen.
Aber darum geht's mir nicht primär.

Meistens läuft doch oben/rechts in der Menüleiste eine Uhr. Und die reagiert auf ein Timer-Event.
Wenn nun ein Prog (zum Beispiel eben ein Screensaver) im Vollbildmodus läuft, dann sieht's ja echt bescheiden aus, wenn alle Sekunde oder zwei, die Uhrzeit neu dargestellt wird.
TwiLight zum Beispiel ist offenbar so programmiert, daß es per Option ermöglicht, das aussenden des Timer-Events zu unterdrücken (oder so etwas in der Art, ich kann da nur mutmaßen) und dadurch wird verhindert, daß die Uhr weiter angezeigt wird.

Im GFA-Basic gibt es zum Beispiel die Funktion "KILLTIMER", aber leider finde ich nichts Weitergehendes dazu.

-R.

Offline mfro

  • Benutzer
  • Beiträge: 1.640
Re: TOS/MagiC // Uhr abschalten (Timerevent verhindern)
« Antwort #3 am: Mo 08.04.2013, 20:31:08 »
...Ich kann mir denken, daß es irgend etwas wie "Disable Timer" geben wird, aber welche Funktion (GEM, BIOS, XBIOS) wäre es konkret.

Ich weiß nicht, ob sich das generell beantworten läßt, Uhrenprogramme können verschiedene Methoden benutzen, um sich auf den Schirm zu zaubern.

Die ganz grobe Methode müsste funktionieren (aber mit ziemlicher Sicherheit andere, möglicherweise unangenehme Nebeneffekte haben):

Jdisint(5); (* XBIOS #26 *)

Damit sperrst Du den Timer C Interrupt des MFP - die Uhrenroutine wird nicht mehr aufgerufen.

Nicht vergessen, vor Programmende mit
Jenabint(5); (* XBIOS #27 *)
den Timer C wieder zu aktivieren.

Gruß,
Markus
« Letzte Änderung: Mo 08.04.2013, 20:51:36 von mfro »
And remember: Beethoven wrote his first symphony in C

Omikronman

  • Gast
Re: TOS/MagiC // Uhr abschalten (Timerevent verhindern)
« Antwort #4 am: Mo 08.04.2013, 20:32:53 »
Ach so. Nein, oben läuft normalerweise keine Uhr. Es gab ACC´s, die oben eine Uhr einblenden konnten. Manche Programme wie der Tempus Editor hatten oben auch die Uhr drin. Ich würde einfach nach dem Programm oder ACC suchen, das die Uhr anzeigt und es beenden. Die Uhr anhalten geht nicht, und wenn würde oben eine stehende "Zeit" kommen. ;-)

rainers

  • Gast
Re: TOS/MagiC // Uhr abschalten (Timerevent verhindern)
« Antwort #5 am: Mo 08.04.2013, 20:39:29 »
Hallo Markus,

ja, in die Richtung zielt meine Frage. Aber ich befürchte, mit dieser "groben" Methode, werden gar keine Timer-Events mehr ausgelöst und damit wird das System höchstwahrscheinlich instabil.
Aber die XBIOS-Funktionen helfen mir schon einmal weiter, da kann ich weitersuchen. Vielen Dank dafür.

Grüße,
-R.

PS: @Imo: Die Uhr ist von mir ;-) und sie läuft oben/rechts ;-) Ich will sie nicht beenden, nur anhalten. Und wenn sie angehalten ist, zeigt sie auch keine Zeit mehr an, denn sie wird ja einfach nicht aufgerufen.

Offline mfro

  • Benutzer
  • Beiträge: 1.640
Re: TOS/MagiC // Uhr abschalten (Timerevent verhindern)
« Antwort #6 am: Mo 08.04.2013, 20:46:45 »
PS: @Imo: Die Uhr ist von mir ;-)

Wenn die Uhr von dir ist, dann müsstest Du ja wissen, wie sie programmiert ist, oder nicht?

Accessory oder Timer C?

And remember: Beethoven wrote his first symphony in C

Omikronman

  • Gast
Re: TOS/MagiC // Uhr abschalten (Timerevent verhindern)
« Antwort #7 am: Mo 08.04.2013, 20:47:04 »
Ich denke mal, das sind zwei völlig verschiedene Dinge. Die Uhr wird vom ST intern immer weiter getickt. Ob der Inhalt der Uhrzeit Variable auch irgendwie irgendwo ausgegeben wird, das ist dann die andere Frage. Ich vermute, Du willst die Darstellung der Uhr los werden, nicht die ganze Uhr. ;-)

Offline mfro

  • Benutzer
  • Beiträge: 1.640
Re: TOS/MagiC // Uhr abschalten (Timerevent verhindern)
« Antwort #8 am: Mo 08.04.2013, 20:52:27 »
Ich habe oben Mist geschrieben. Jdisint() ist XBIOS #26, nicht 25. Ich hab's korrigiert.
And remember: Beethoven wrote his first symphony in C

rainers

  • Gast
Re: TOS/MagiC // Uhr abschalten (Timerevent verhindern)
« Antwort #9 am: Mo 08.04.2013, 21:15:26 »
Ich vermute, Du willst die Darstellung der Uhr los werden, nicht die ganze Uhr. ;-)
Jaaaa. Genau das.  ;) Nur die Darstellung soll "weg".
Schei..., ich drück mich immer so verquer aus  ;)

Omikronman

  • Gast
Re: TOS/MagiC // Uhr abschalten (Timerevent verhindern)
« Antwort #10 am: Mo 08.04.2013, 21:30:46 »
Prima, also bleibt die Frage der Fragen: Wenn Du das selbst programmiert hast, wieso weißt Du dann nicht, an welcher Stelle des Programms Du die Uhr eingebaut hast? Die kannst doch dann auch selbst einfach wieder rauswerfen?! O.o
« Letzte Änderung: Mo 08.04.2013, 22:27:59 von Imo »

Offline neualtuser

  • Benutzer
  • Beiträge: 537
  • Habt spass und bleibt Gesund
Re: TOS/MagiC // Uhr abschalten (Timerevent verhindern)
« Antwort #11 am: Mo 08.04.2013, 21:42:20 »
moin

ich hab ja keine ahnung vom programieren aber ich denk mir doch das dein program die uhr in den Bildschirmspeicher schreibt.
Wenn dann beim Aufruf der routine die Uhrfarbe auf dein Hintergrund oder sonstwelche farbe gesetzt wird, ist sie ja auch nicht sichtbar.
Weil, ich habe mir so gedacht das der Uhranzeige ja auch eine farbe zugeordnet werden muss
Iss nur angelesenes halbwissen :-\
/TT-VME/ Rhotron Umbau

P.s. Leider gibt es hier einen Phantasielosen User der eine Verwechselung hervorruft.
Nicht Täuschen lassen !

rainers

  • Gast
Re: TOS/MagiC // Uhr abschalten (Timerevent verhindern)
« Antwort #12 am: Mo 08.04.2013, 21:51:04 »
Also jetzt kann ich nicht mehr folgen.
Die Uhr ist doch ein ACC. Die läuft immer. Sie tickt mit einem 250ms-Timer, schreibt die Zeit aber nur alle 2 sec.
Das Prog, welches im Vollbild-Modus läuft, ist ein anderes. Das ist ne Art Diashow von Bildern.
So.
Nun zeigt das Prog ein Bild an und die Uhr schreibt weiterhin ihren "Output". Und dann schreibt sie in "über" das Bild und das sieht doof aus.
Also soll das Prog, welches die Bilder (Diashow) anzeigt, dafür sorgen, daß die Uhr "ruht".

Mmmmhhhhh.

Offline 1ST1

  • Benutzer
  • Beiträge: 8.661
  • Gesperrter User
Re: TOS/MagiC // Uhr abschalten (Timerevent verhindern)
« Antwort #13 am: Mo 08.04.2013, 21:54:22 »
Reiner, wenn du die Uhr selbst geschrieben hast, dann solltest du sie einfach erweiteren, entweder dass sie eine feste Speicherzelle/Systemvariable/Cookiejar regelmäßig abfragt, oder über das Messagesystem von GEM Nachrichten empfangen kann. So kannst du deinem Uhren-ACC dann den Befehl geben, solange die Schnauze zu halten, bis ein gegenteiliger Befehl gesetzt wird. Den sendest du dann aus deinem Screensaver.

Ein unsauberer, fieser Trick, sozusagen "1980er Jahre Style"; wäre, den Bildschirmspeicher im Shifter zu verschieben, dein Bildschirmschoner nutzt dann den vom Shifter angesteuerten tatsächlichen Bildspeicher für seine grafische Effekthascherei, während alle GEM-konformen Programme weiterhin in den alten Bildspeicher malen. Sobald der Screensaver abgeschltet wird, wird das Register im Shifter wieder auf den Zustand davor restauriert. Das funktioniert aber nicht mit Grafikkarten. Das ist im Prinzip die Methode "Verdeckter Bildaufbau".
Ausgeloggter Mitleser, der hier NIE mehr aktiv wird. Am besten, meine Inhalte komplett löschen. Dabei berufe ich mich auf mein Urheberrecht, die DSGVO und auf die Rechte, die mir unter Impressunm&Datenschutz zugestanden werden. Tschö!

rainers

  • Gast
Re: TOS/MagiC // Uhr abschalten (Timerevent verhindern)
« Antwort #14 am: Mo 08.04.2013, 22:03:17 »
1ST1, (hach, jetzt weiß ích, wofür das ST steht, der Brüller  :D :D),

ja, die Idee hatte ich auch. Und letztendlich werde ich es wohl auch so tun.
Nur, meine Intention war es ja, die Uhr auch abzustellen, wenn Fremdprogramme im Vollbildmodus laufen. Und die werden ja wohl kaum meiner Kuckucksuhr sagen: Schnauze halten!
 ;)


Offline mfro

  • Benutzer
  • Beiträge: 1.640
Re: TOS/MagiC // Uhr abschalten (Timerevent verhindern)
« Antwort #15 am: Mo 08.04.2013, 22:08:27 »
Wenn Du die Uhr selbst geschrieben hast, hast Du das doch ganz bestimmt richtig und systemkonform gemacht. Nämlich den System Timer Vektor per XBRA-Verfahren verbogen.

Wenn das so ist, mußt Du in deinem Screensaver doch nur den XBRA-Eintrag suchen und temporär aus der Vektorkette aushängen. Zum Programmende trägst Du den "richtigen" Vektor wieder ein und alles ist gut.

Gruß,
Markus
And remember: Beethoven wrote his first symphony in C

Offline 1ST1

  • Benutzer
  • Beiträge: 8.661
  • Gesperrter User
Re: TOS/MagiC // Uhr abschalten (Timerevent verhindern)
« Antwort #16 am: Mo 08.04.2013, 22:26:30 »
Stimmt, XBRA sollte auch gehen, da habe ich garnicht mehr dran gedacht.
Ausgeloggter Mitleser, der hier NIE mehr aktiv wird. Am besten, meine Inhalte komplett löschen. Dabei berufe ich mich auf mein Urheberrecht, die DSGVO und auf die Rechte, die mir unter Impressunm&Datenschutz zugestanden werden. Tschö!

Offline m0n0

  • Benutzer
  • Beiträge: 984
Re: TOS/MagiC // Uhr abschalten (Timerevent verhindern)
« Antwort #17 am: Di 09.04.2013, 00:19:06 »
Hallo,

Die Uhr wir oben rechts im Menu angezeigt? Das heißt also es ist ein Programm das unter GEM läuft? Dann würde ich form_dial probieren, denn eigentlich sollte der Bildschirmschoner den Bildschirm sperren, und somit würde das neuzeichnen der Uhr so lange warten bis der Bildschirmschoner den Bildschirm wieder freigibt. Das hat auch den Vorteil das die Uhr kein CPU verbraucht während der Bildschirmschoner läuft.

Oder denke ich da Falsch und ein ACC kann form_dial nicht aufrufen?

Schwieriger wirds wenn die UHR auch im Kommandozeilen modus angezeigt werden soll - so wie bei clocky....

rainers

  • Gast
Re: TOS/MagiC // Uhr abschalten (Timerevent verhindern)
« Antwort #18 am: Di 09.04.2013, 06:52:19 »
Öööhm.
Ich bin doch kein "Hardcode coder". Ich wälze mich durch Bücher und wenn was Passendes gefunden wurde, dann nehme ich es und passe es meinen Bedürfnissen an. Sorry, wenn ich den Eindruck erweckt habe, ich könne programmieren. :D :D

Also meine Uhr ist praktisch ein Abfallprodukt. Sie ist in dem ACC enthalten, welches die CapsLock-LED steuert. Da dieses timer_event-gesteuert ist, dachte ich mir: Warum nicht dann darin auch gleich die Zeitanzeige verwirklichen.
Höchstwahrscheinlich ist der Begriff "Uhr" falsch. Es ist nur eine Zeitanzeige.
Weder XBRA habe ich verwendet, noch einen "System Timer Vektor" verbogen.
Hier ist der Auszug aus dem Code.
-----------------------------
BEGIN
   IF Init_Gem >= 0 THEN
   BEGIN
      i := 8;
      iDateTime_ := 0;
      TEXT_COLOR(BLACK);
      TEXT_HEIGTH(6);      
      SYS_FONT_SIZE(d, ch, d, d);
      WHILE TRUE DO
      BEGIN
         IF (i mod i2Seconds) = 0 THEN
         BEGIN
            i := 8;
            iDateTime := GET_DATE;
            if iDateTime <> iDateTime_ THEN
            BEGIN
               iDateTime_ := iDateTime;
               sDate := '00.00.00';
               dt := iDateTime & $1F;
               sDate[1] := Chr(dt div 10 + 48);
               sDate[2] := Chr(dt mod 10 + 48);
               dt := Shr(iDateTime, 5) & $F;
               sDate[4] := Chr(dt div 10 + 48);
               sDate[5] := Chr(dt mod 10 + 48);
               dt := Shr(iDateTime, 9) & $7F - 20;
               sDate[7] := Chr(dt div 10 + 48);
               sDate[8] := Chr(dt mod 10 + 48);               
            END;
            sTime := '00:00:00';
            iDateTime := GET_TIME;
            dt := Shr(iDateTime, 11) & $1F;
            sTime[1] := Chr(dt div 10 + 48);
            sTime[2] := Chr(dt mod 10 + 48);
            dt := Shr(iDateTime, 5) & $3F;
            sTime[4] := Chr(dt div 10 + 48);
            sTime[5] := Chr(dt mod 10 + 48);
            dt := 2 * (iDateTime & $1F);
            sTime[7] := Chr(dt div 10 + 48);
            sTime[8] := Chr(dt mod 10 + 48);
            DRAW_STRING(570, ch - 9, sDate);
            DRAW_STRING(570, ch, sTime);
         END;
         i := i + 1;
         iEvent := Get_Event(E_Timer, 0, 0, 0, 250,
                            false, 0, 0, 0, 0, false, 0, 0, 0, 0,
                            mbMsg, d, d, d, d, d, d);
      END;
   END;
END.

-----------------------------

Danke Euch.
-R.
« Letzte Änderung: Di 09.04.2013, 06:55:39 von Rainer (s) »

Offline mfro

  • Benutzer
  • Beiträge: 1.640
Re: TOS/MagiC // Uhr abschalten (Timerevent verhindern)
« Antwort #19 am: Di 09.04.2013, 07:36:04 »
Öööhm.
Ich bin doch kein "Hardcode coder". Ich wälze mich durch Bücher und wenn was Passendes gefunden wurde, dann nehme ich es und passe es meinen Bedürfnissen an. Sorry, wenn ich den Eindruck erweckt habe, ich könne programmieren. :D :D

Wieso? Das ist doch gut!

Allerdings waren wir ein wenig auf dem falschen Dampfer. Du hast dich nicht in den Timer-Event gehängt, sondern die "saubere" Methode gewählt (Accessory mit GEM-konformen AES Timer Events). Vergiß, was ich oben geschrieben habe (XBRA).

Das beste wird sein, Du baust in deine Uhr noch zwei Eventhandler (MU_MESAG) ein, die als "Uhr aus" und "Uhr an" interpretiert werden. Dazu evnt_timer() durch evnt_multi() ersetzen und zusätzlich zum Timer auf zwei selbst gewählte Nachrichtennummern (UHR_AUS, UHR_AN) warten.

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.

Ein schönes Beispiel für GEM-Multitasking ohne MiNT und Magic!
And remember: Beethoven wrote his first symphony in C