★ APPLICATIONS ★ DIVERS ★ Blinkender Cursor ★ |
Flash (CPC Amstrad International) | Applications Divers |
Es gibt Computer, deren Cursor ständig blinkt Andere, wie etwa der Schneider, haben einen »ruhigen« Cursor. Beide Arten haben ihre Vorund Nachteile. Ein blinkender Cursor zum Beispiel ist in einem vollgeschriebenem Textfeld viel leichter erkennbar. Häufig findet man aber das Blinken ziemlich irritierend. Das folgende Programm bietet nun jedem die Möglichkeit, den Cursor nach dem eigenen Geschmack einzurichten. Es stellt einen zusätzlichen Befehl FLASH zur Verfügung, mit dessen Hilfe man den Cursor auf eine beliebige Frequenz einstellen kann. Entwickelt wurde das Programm auf einem CPC 464, es müßte aber auf einem CPC 664 oder einem 6128 auch laufen. Die genaue Form des Befehls ist: :Flash,n n ist dabei ein beliebiger numerischer Ausdruck, mit 0 < = n < 65536. Danach blinkt der Cursor, wobein die Dauer einer Hell- oder Dunkelperiode ist, gemessen in 1/50 Sekunden. n=0 stellt das Blinken vollständig ab. Der Doppelpunkt steht für den senkrechten Strich, chr$(&7C) (erreichbar mit SHIFT "Klammeraffe").
Der Befehl steht vom RUN an zur Verfügung, bis der Rechner zurückgesetzt wird. Das Ladeprogramm legt die Maschinenroutine unmittelbar unter HIMEM ab, setzt die absoluten Sprungziele richtig ein und reduziert HIMEM entsprechend. Der BASIC-Speicherplatz wird um nur 107 Byte verkleinert. Die Methode ist im Prinzip folgende: Das Betriebssystem pflegt eine Liste von sogenannten »Ereignissen«, die 50 mal in der Sekunde »angestoßen« werden. Ein Ereignis besteht im wesentlichen aus einer Ereignisroutine und einem Ereignisblock. Dieser enthält Systeminformationen über das jeweilige Ereignis. Beim Eintragen eines Ereignisses in die obige Liste, gibt man zusätzlich einen sogenannten Zähler und einen Wiederanlaufwert an. Der Anstoß eines Ereignisses, der, wie erwähnt, alle fünfzigstel Sekunden stattfindet bewirkt nun folgendes:
Wenn also der Zähler und Wiederanlaufwert 100 betragen, wird die Ereignisroutine alle 100/50 = 2 Sekunden durchgeführt. (Diese Technik wi rd übrigens von den BASIC-Befehlen EVERY und AFTER angewendet.) Die vorliegende Ereignisroutine unterhält ein Datenbyte mit der Information, ob sie den Cursor zuletzt aus- oder eingeschaltet hat Je nachdem werden die Cursor aller 8 Windows neu gesetzt bzw. gelöscht. Zum Ein- und Ausschalten des Cursors: Die Firmware stellt hierzu zwei Paare von Routinen zur Verfügung:
Der Cursor ist nur dann sichtbar, wenn er mit beiden Routinen (Cur Enable und Cur On) eingeschaltet wurde. Die Firmware selbst verwendet genau wie BASIC, grundsätzlich nur die Routinen Cur On/Off. Der Cursor ist ständig »enabled«. Mein Programm verwendet nun die Routinen Cur Enable/ Disable. Dadurch wird Blinken erreicht ohne den Zustand des Cursors, wie er durch BASIC gesetzt wird, zu verändern. Man kann diese Routinen auch von BASIC her aufrufen, z.B. mit CALL &BB81. Das dürfte eine nützliche Hilfe für Textverarbeitungsprogramme u.ä. sein. Das System wird durch den Befehl etwas verlangsamt. Messungen (an der Schleife t=time:for i= 1 to 5000:next:?(time-t)/ 300) ergaben folgende Werte:
Der Copycursor ist vom Blinken übrigens nicht betroffen. Dadurch kann man ihn leicht vom normalen Cursor unterscheiden.
|