DEFKEY Programmbeschreibung Auf der Tastatur des Amiga befinden sich zwar Funktionstasten, aber leider werden diese vom Betriebssystem vernachlässigt. Eine Möglichkeit, diesen Tasten Zeichenketten zuzuweisen, wie sie die meisten anderen Rechner bieten, ist im CLI nicht vorgesehen. Studiert man jedoch die entsprechenden Manuals, so stellt man fest, daß sich im Prinzip jede Taste der Tastatur mit beliebigen Strings belegen läßt, wenn man die Zuordnungstabelle von Taste zu Zeichencode, die sogenannte Keymap, entsprechend modifiziert. Als ersten Schritt auf dem Weg zur benutzerdefinierbaren Tastatur benötigt man eine sogenannte Keymap, wie sie im Rom Kernel Manual unter Console.device beschrieben ist. Mit Debugger ( oder auch einfach über TYPE xx OPT H ) und Editor kann man sich den Assembler-Quelltext einer Tastaturbelegung aus dem DEVS:KEYMAPS Directory beschaffen, zweckmässigerweise wählt man die d-Keymap. Das Ergebnis dieser Arbeit liegt als Keymap.asm vor. Nun lassen sich die Ursprünglichen Zeichenfolgen der Funktionstasten ( normalerweise liefern die Tasten F1-F10 die Zeichenfolgen 0~ - 9~ , ist ein Steuerzeichen mit dem Code $9B ), durch eigene Strings ersetzen, und man hat nach assemblieren und linken seine persöhnliche Tastaturbelegung. Da man für gewöhnlich für verschiedene Arbeitsvorgänge verschiedene Tasten- belegungen haben möchte, liegt es nahe, anstatt jedesmal eine neue Keymap zu erzeugen, mittels eines Programms die jeweils benötigten Zeichenfolgen in der gerade geladene Keymap einzutragen. Diese Aufgabe übernimmt das Programm DEFKEY. Damit das Programm ordnungs- gemäß arbeiten kann, benötigt es eine Keymap, in der genügend Speicherplatz für eigene Strings reserviert ist ( bei dem vorliegenden Programm jeweils 32 Byte pro Taste, da dies laut Manual der maximal mögliche Wert ist. Inzwischen hat sich aber gezeigt, das Console.device auch größere Werte verarbeiten kann. Falls gewünscht, kann man die maximal mögliche Stringlänge also auch größer wählen, indem man die Konstante StrLen sowohl in Keymap.asm als auch in Defkey.asm auf einen anderen Wert setzt. Allerdings sollte man dabei im Hinterkopf behalten, daß die Länge aller Strings für eine Taste (normal und geshifted) unter 256 Byte liegen sollte. Vernünftig und ausreichend sollte ein Wert von etwa 80 sein. Das Programm DEFKEY erkennt geeignete Keymaps daran, daß hinter der sogenannten 'Repeatable Bit Table' die Konstante 'user' steht. Das File Keymap.asm gehört zur deutschen Tastatur. Möchte man DEFKEY mit einer anderen Tastatur benutzen, so sollte man darauf achten, daß die Keymap die folgenden Bedingungen erfüllt: für jede Funktionstaste muß in der Keymap ein Bereich von 4Byte + 2*Strlen reserviert sein und diese Bereiche sollten direkt aufeinanderfolgen. Hinter der Repeatable Bit Table muß die Konstante 'user' gefolgt von einem Pointer auf den Speicherbereich für die erste Funktionstaste ( Key-Nummer $50 ) stehen. Ist eine solche Keymap geladen, so ermöglicht es das Programm, den einzelnen Tasten beliebge Strings zuzuweisen, indem man als Parameter die Funktionstaste gefolgt von einem Doppelpunkt und darauf, getrennt durch einen Zwischenraum den String in Anführungsstrichen oder Hochkommas eingibt. Für die geshifteten Tasten addiert man zur jeweiligen Tastennummer 10 dazu. Beispiel: soll die F1-Taste den Text "Hello World" liefern, so gibt man das Kommando DEFKEY F1: "Hello World" In einigen Fällen soll der String auch Steuerzeichen enthalten, z.B. Escape- Sequenzen im ED-Editor oder auch das RETURN-Zeichen nach einem CLI-Kommando, um das Kommando auszuführen. Dazu kann man den Code des gewünschten Steuerzeichens dezimal oder hexadezimal in der Kommandozeile angeben. Die gebräuchlichsten Steuer- zeichen erkennt das Programm auch unter dem symbolischen Namen. Implementiert sind die folgenden: NUL (0) für ein Nullbyte, BS (8) für Backspace, TAB (9) als Tabulatorcode, CR ($D) steht für Return, LF ($A) oder NL ($A) für Line Feed, ESC ($1B) für Escape, DEL ($7F) für Delete und schliesslich CSI ($9B) den sogenannten Control Sequence Introducer für Kommandos an die Console.device. Abgesehen von einigen speziellen Programmen, benötigt man allerdings nur die beiden Zeichen CR und ESC. Möchte man weitere Symbole einführen, so sind Name ( max. 4 Zeichen ) und Wert in der entsprechende Tabelle in Defkey.asm einzutragen. Enthält ein String mehrere Steuerzeichen oder Texte, so sind die einzelnen Bestandteile durch Kommas oder Zwischenräume voneinander zu trennen. Jetzt noch einige Beispiele: die Taste F2 soll ein Directory ausgeben. Dies läßt sich auf die folgenden Weisen erreichen: a) DEFKEY F2: 'dir opt a' CR b) DEFKEY F2: 'dir opt a' 13 c) DEFKEY f2: "dir opt a" $D Will man von ED aus mit Shift-F1 wieder ins CLI zurück, so gibt man das Kommando DEFKEY f11: ESC 'X' CR Im CLI ist es möglich, durch die Eingabe von CTRL-X die momentane Zeile zu löschen. Mit DEFKEY F5: $18 übernimmt die F5-Taste diese Funktion. Damit man nicht die Übersicht verliert, gib DEFKEY ohne Parameter die aktuelle Tastenbelegung aus, und die Kommandos DEFKEY ? und DEFKEY HELP liefern zwei kurze Hilfstexte. Die in der Keymap gespeicherte Tastenbelegung schreibt man sich zweckmäßigerweise auf eine Schablone, die man in die Mulde oberhalb der Funktionstasten ( beim Amiga 1000 ) legt. Zur Installation von DEFKEY: zuerst sind die Quelltexte Keymap.asm und Defkey.asm zu assemblieren und zu Linken. Die Quelltexte wurden für den Macro Assembler von Metacomco (Version 10.178) erstellt, sollten aber auch von anderen Assemblern verarbeitet werden können, wenn man die lokalen Labels, das sind die Zahlen gefolgt von $ ) ersetzt. Darauf kopiert man die Keymap unter dem Namen d1 in das DEVS:KEYMAPS Directory und aktiviert sie mit SETMAP D1. Das DEFKEY-Programm kopiert man am besten in das C: Directory. Wenn alles gut gegangen ist, sollte die Eingabe von DEFKEY jetzt die Ausgabe der Funktionstastenbelegung bewirken. In der Startup-Sequence kann man nun noch den Befehl SETMAP d durch SETMAP d1 ersetzen, und die neue Keymap steht nach jedem Einschalten zur Verfügung.