
   



       **************************************************************
       *                                                            *
       *                Ein Tastatur-Makro-Expander                 *
       *                                                            *
       **************************************************************
                                      
                               Jan Starzynski

                               Mamannstr. 105
                               O-2500 Rostock

                                3. Juni 1993




Inhaltsverzeichnis
==================

0.1) News
0.2) Was soll das?
0.3) Wie erstelle ich meine eigenen Abkrzungen?
0.4) Welche Probleme gibt es?
0.5) Wer mag programmieren?
0.6) Welche Programme gehren dazu?
0.7) Warum mir nicht mal schreiben?
0.8) Wann schreiben?


0.1) News
=========

Also, fr alle, die schon mit dem Expander gearbeitet haben. Was gibt's neues?
Zunchst natrlich die bliche Fehlerbeseitigung. Und hier war einiges zu tun.
Kleine,  aber hartnckige und teilweise in  ihren  Auswirkungen  katastrophale
Fehler.

  Backspaces zum Lschen von Makros standen vorher in der MKR-Datei, jetzt ist
BIOSMAKR selbst in der Lage, sowas zu bearbeiten. Des weiteren gibt es die M-
glichkeit,  bei der Eingabe den Status der Shift-Tasten  beachten  zu  lassen,
auerdem werden sie bei Ausgabe des Makrotextes automatisch  richtig  gesetzt.
Dadurch arbeitet BIOSMAKR ab sofort auch richtig mit TEMPUS und QED  zusammen.
(s.Abschnitt 0.3 )

  Auerdem gibt es jetzt 'Magic Keys' die von BIOSMAKR  ignoriert  werden,  um
einigen Programmen die Mglichkeit zu lassen,  ihren 'Spezialcode' direkt  aus
dem Tastaturpuffer lesen zu knnen. (s.Abschnitt 0.3 )

  Es lohnt also,  die MKR-Dateien nochmal neu zu bersetzen, auch wenn es noch
mit den alten funktioniert.

  In KBD2MKR wurden die Fehlerbehandlungsroutinen  verbessert.  Auerdem  wird
die erzeugte Makrotabelle sofort in den Speicher kopiert und als aktuelle  Ma-
krotabelle verwendent (natrlich nur, wenn fehlerfrei).


0.2) Was soll das?
==================

Jeder kennt sicher Programme,  in denen einzelne Tasten mit gewissen  Aktionen
belegt werden, sogenannte Tastaturmakros. Oftmals sind das die Funktionstasten
Control-, oder Alternate-Kombinationen. Leider gibt es das nicht in allen Pro-
grammen und unterschiedlich sind sie meist auch.  Auerdem mu  man  sich  die
entsprechende Taste und ihre Wirkung merken.  Das hat mir nicht gefallen,  und
so entstand in ein paar langen Nchten das Programm BIOSMAKR.PRG und ein dazu-
gehriges Tool.  Was ist nun neu? Die Tastaturmakros werden hier vllig anders
definiert,  eher wie Abkrzungen.  Wenn ich 'js.' eingebe, wird folgendes aus-
gegeben:

Jan Starzynski
Mamannstr. 105
O-2500 Rostock

  Es ist natrlich auch mglich,  Abkrzungen zu definieren, die nur aus einem
Zeichen bestehen,  womit wir wieder die alten Makros htten. Das wirklich neue
ist also die Mglichkeit, mit mehrbuchstabigen Makros zu arbeiten und die Mg-
lichkeit,  in nahezu jedem sauber programmierten Editor die gleichen Abkrzun-
gen zur Verfgung zu haben.


0.3) Wie erstelle ich meine eigenen Abkrzungen?
================================================

Hierzu dient das Programm KBD2MKR.TTP in Verbindung mit einem normalen  Ascii-
Editor. Ein Beispiel ist TEST.KBD, TEST.MKR ist die mit KBD2MKR.TTP bersetzte
Version davon. Das TTP-Programm wird wie folgt genutzt:

KBD2MKR -2 -s TEST.KBD TEST.MKR

  Die Option -2 bewirkt dabei,  da der Zustand der Shift-Tasten weder bei der
Ein- noch bei der Ausgabe bercksichtigt werden.  Dadurch gibt es wieder rger
mit QED etc.,  aber die MKR-Dateien werden etwas krzer.  (2 steht fr 2-Byte-
Modus [Scan+Ascii], normal ist der 3-Byte-Modus [Shift+Scan+Ascii])

  Die Option -s bewirkt, da die erzeugte Makrotabelle _nicht_ sofort bernom-
men wird, sondern nur auf Diskette gesichert wird.

  Beide Optionen knnen natrlich weggelassen werden,  Standard  sind  der  3-
Byte-Modus (mit Shift-Tasten) und das sofortige Aktualisieren der Makrotabelle
im Speicher.

Wie sind nun die Makroquelltexte aufgebaut?
-------------------------------------------

Als Beispiel nehme man TEST.KBD. Folgender Zeilenaufbau ist gefordert:

?Makro   Ersetzungstex * Kommentar
?Makro = Ersetzungstex * Kommentar
?Makro + Ersetzungstex * Kommentar
* Kommentar
(leere Zeile)

  Die erste Form bewahrt die Kompatibilitt zu den Makrodateien von xEDIT.  In
der  zweiten  Form  werden  alle  eingegebenen   Makrozeichen   durch   <Back-
space> gelscht und anschlieen der Ersetzungstext ausgegeben.  Beispeil hier-
fr ist das oben angebenen 'js.',  das erst gelscht  wird  und  dann  ersetzt
wird.  Die dritte Form ergnzt den eingegebenen Text durch den Text  nach  dem
Pluszeichen.  Bsp.:  #in wird zu #include <> , ohne #in vorher zu lschen. Die
dritte und vierte Form bewirken nichts.

  Die erste Form ist gleich der zweiten,  wenn dort das '=' hinter dem  ersten
Code kommt,  sprich,  es ist die Form fr die klassischen einbuchstabigen  Ma-
kros. Fr einbuchstabige Makros gibt es keine '+' Form!

Makro- und Ersetzungstext knnen in folgenden Formen eingegeben werden:

  1) Direkt als Code, die einzelnen Codes durch Leerzeichen getrennt. 

     Bsp: $3b00 = $0e08 $1c0d
         

     ersetzt die Funktiostaste f3 durch <Backspace> <Return>.  Dies wre bri-
     gens identisch zu 

     Bsp: $3b00 $0e08 $1c0d
         

     Erlaubte Zahlensysteme sind 

      a) Hexzahlen, gekennzeichnet durch $ oder & 

      b) Oktalzahlen, gekennzeichnet durch O oder o, (also der Buchstabe Oh) 

      c) Dezimalzahlen, die nicht gesondert gekennzeichnet werden 

        Erlaubt ist es auerdem,  vor den Codes die  gewnschte  Shift-Tasten-
     Kombination anzugeben,  geklammert durch 'S'.  Das geschieht in folgender
     Form:

     Bsp: ?S|~S $7f00 '{' **** Shift + Alt + '(' zu '{'
         

       Der Shift-Status bezieht sich dabei nur auf den  unmittelbar  folgenden
     Code. Die verschiedenen Tasten werden wie folgt dargestellt: 

      - |Shift 

      - ~Alternate 

      - ^Control 

     Zwischen linker und rechter Shifttaste wird nicht unterschieden, CapsLock
     wird ignoriert.

  2) als Zeichenketten in den Formen: 

      g) 'Zeichenkette' 

      h) "Zeichenkette" 

     Innerhalb der Zeichenketten haben folgende Kombinationen  eine  besondere
     Bedeutung: 

     \e      Escape-Taste
         \b      Backspace
         \t      Tabulator
         \r      Return
         \n      Control-Return
         \f1     die F-Tasten F1-F9
         .
         .
         .
         \f9
         \f0     F10
         \F1
         .
         .
         .
         \F9     die F-Tasten F1-F9, zusammen mit shift
         \F0     shift F10
         \c      Clr-Home
         \^      Pfeil hoch
         \<            links
         \>            rechts
         \_            unten
         \i      Insert
         \d      Delete
         \u      Undo
         \h      Help
         \p      kein Zeichen ausgeben: Pause
         \\      \
         \'      '
         \"      "
         \S      Begin einer Shift-Tasten-Erklrung, Ende mit S
                 ( also z.B.: \S~|^S )
         

       Hiermit ist es mglich,  eine Reihe von Sonderaktionen auszulsen, ohne
     sich mit Scancodes rumzuqlen. 

   Die 'rechte' Seite einer Tastendefinition mu immer mindestens ein  Zeichen
enthalten,  sonst gibt's eine Fehlermeldung.  Und noch ein Bonbon: Diese Regel
gilt nicht fr die ersten Definitionen,  wenn die dort definierten Makros  aus
nur einem Zeichen besteht.  Diese sind dann 'Magic  Keys',  die  von  BIOSMAKR
nicht beachtet wird.  Sobald aber einmal ein Ersetzungstext  angegeben  wurde,
ist die Angabe von 'Magic Keys' nicht mehr erlaubt.

Bsp. fr Definition:

?'\h'                   * Magic-Key: Help-Taste
?'\b'                   * Magic-Key: Backspace
?'An'+' Jan'            * erstes Makro
?'a'                    * Fehler: Magic keys hier nicht mehr erlaubt
?'\h a'+'Hilfe zu a'    * geht nicht, Help wird ignoriert
?'ab'+'a\h'             * geht: auf rechter Seite 'Magic Keys' erlaubt

  bewirkt,  da die Help- und die Backspace-Taste nicht beachtet  werden.  Das
heit,  es knnen auch keine Makros geschrieben werden, die die Help-Taste auf
der _linken_ Seite beinhalten.  Ich habe das eingefhrt,  weil BIOSMAKR  sonst
alle Zeichen aus dem Tastaturpuffer entfernt. Im Tastaturinterrupt ist nmlich
die Zeit zu knapp fr eine Bearbeitung,  und so hebe ich das Zeichen  auf  und
bearbeite es spter.  Der 'Magic Key' hingegen wird nicht  entfernt  und  auch
nicht bearbeitet,  steht somit anderen Anwendungen ganz normal zur  Verfgung.
(Ich hatte z.B.  rger mit Sysmon,  da dieser sein Shift-Help auch aus dem Ta-
staturpuffer direkt liest und durch BIOSMAKR nicht fand.) Achtung: Es wird nur
der Scan-Code auf bereinstimmung berprft.  Irgendwelche Shift-Tasten werden
dabei ignoriert,  bis auf die Ausnahem,  wo sie eine nderung  des  Scan-Codes
durch das Betriebssystem bewirken.

Bsp:
?'A' * alles mit 'a' oder 'A' wir ignoriert


0.4) Welche Probleme gibt es?
=============================

Zunchst einmal:  Der Makro-Expander berwacht alle Zeichen,  die ber die Ta-
statur eingegeben werden.  Das sind z.B. nicht die, die bei festgehaltener Ta-
ste automatisch eingegeben werden.  Aber das drfte  an  sich  kein  Hindernis
sein.  Schwieriger wird es mit dem Timing.  In manchen Programmen  kommen  die
Zeichen fr die Verarbeitung zu schnell in den Puffer und  werden  daher  ver-
schluckt.  Das fllt insbesondere immer dann auf,  wenn mehrzeilige Makros ge-
schrieben werden.  In xEdit trifft das z.B.  meist fr das  2.  Zeichen  einer
Zeile zu.  Die Ausgabe ist derzeit allerdings schon so gebremst,  da bei  mir
keine Probleme auftraten.  nderungen der Bremse werden im nchsten  Abschnitt
behandelt. Auerdem gibt es die Mglichkeit, spezielle 'Pausen' zu erzeugen.

  Ein Problem sind andere Programme,  die sich in den ikbdsys-Vektor  einklin-
ken,  z.B.  Bildschirmschoner. Sie sollten immer *VOR* BIOSMAKR im Auto-Ordner
stehen, sonst kriegen sie keine Tastendrcke mit.


0.5) Wer mag programmieren?
===========================

Jetzt zum programmtechnischen Teil.  Wie funktioniert das ganze nun? Eine Rou-
tine sitzt im 'ikbdsys'-Vektor (ber Kbdvbase()) geholt) und besorgt alle ein-
gegebenen Zeichen aus dem Tastaturpuffer. Diese werden dann der Makro-Auswert-
Routine bergeben und ggf.  in den Tastaturpuffer  zurckgeschrieben.  Weitere
auszugebende Zeichen werden im Gemdos-Vektor 'etv_timer' in den Tastaturpuffer
geschrieben.  Das ist im Prinzip auch schon alles. Probleme bereitet vor allem
die etwas komplizierte Pufferstruktur des TOS sowie einige Unklarheiten im Um-
gang des TOS mit den Schreib- und Lesezeigern der IOREC-Struktur.  Fr die Ta-
statur z.B.  werden beide Zeiger vertauscht.  Tastaturzeichen werden auf  ver-
schiedenen Pufferebenen behandelt,  so da es leicht vorkommen kann,  das  mal
ein Zeichen verschwindet,  weil es irgendwo ausgefiltert wurde  (bzw.  einfach
nicht registriert wurde). (alle Angaben fr Mega STE mit TOS 2.05)

  Das Programm installiert  einen  Cookie  mit  der  Bezeichnung  'JSmk'.  Der
Cookie-Wert zeigt auf folgende Struktur:

struct
{
    long magic;           /* 'JSmk' */
    int on_off_flag;      /* 0: kein Makroersatzt, <>0 Makroersatz */
    int speed;            /* Ausgabegeschwindigkeit 0: maximal */
    long makro_table_size; /* Platz fr Makrotabelle in Bytes */
    int *makro_table;     /* Zeiger auf Beginn der Tabelle */
    int max_makro;        /* Gre des Puffers fr eingebenen Zeichen */
    int *makro_receive;    /* Zeiger auf diesen Puffer */
};

  Dieselbe Struktur findet man mit Offset 4 im Text-Segment der Programmdatei.
Bitte dort keine Zeiger ndern. makro_table_size Bytes werden fr die Makrota-
belle im Speicher resident gehalten.  Die Gre max_makro darf nur verkleinert
werden,  das hat aber keinen positiven Effekt.  Jede Erhhung des Wertes speed
um 1 vergrert die Pause zwischen der Ausgabe zweier Zeichen um  20  ms  (ge-
nauer Tickcal() ms, 0: 20 ms).

  Im Programm befindet sich des weiteren eine Patch-Variable,  die  den  Namen
der Makrotabelle enthlt,  die beim Programm-Start geladen wird.  (Anfang  des
DATA-Segmentes)

  Die Makrotabelle im Speicher kann entweder durch ndern der Adresse gendert
werden oder durch kopieren einer neuen Tabelle an den alten Platz. Vorher aber
am besten durch on_off_flag die Routinen lahmlegen.


0.6) Welche Programme gehren dazu?
===================================

Zu diesem Paket gehren folgende Dateien: 

 - BIOSMAKR.PRG ; der eigentliche Expander 

 - KBD2MKR.TTP ; eine Art Compiler fr Makrodateien 

 - KBD2MKR.CNF ; die Konfigurationsdatei dazu 

 - KBDMKR.CPX ; CPX zum Einstellen diverser Parameter 

 - MKR_PRG.PRG ; wie das CPX, nur als Programm (oder nach Umbenennen als Acc)

 - MAKROKEY.DVI ; die Anleitung fr LaTeXianer 

 - MAKROKEY.TXT ; die Anleitung fr die Normalen 

 - TEST.KBD ; ein Makrotabelle im Ascii-Format 

 - TEST.MKR ; das bersetzte Teil dazu 

 - TASTE.TOS ; zeigt die bentigten Codes fr KBD2MKR an 

  Ich wre Euch zu Dank verpflichtet,  wenn Ihr diese Dateien alle vollstndig
und zusammen verbreitet. Des weiteren kann ich keine Garantie bernehmen, wenn
Euch durch diese Programme irgendwelche Daten  verloren  gehen  oder  sonstwie
Schaden entsteht. Trstet Euch, mich trifft's wahrscheinlich als ersten.

  Zur Bedienung nur kurz:  BIOSMAKR.PRG gehrt in den AUTO-Ordner,  kann  aber
auch vom Desktop gestartet werden. Das CPX oder das equivalente PRG dienen zum
schnellen Laden einer anderen Makrotabelle sowie zum Ein- und Ausschalten  der
Makroexpansion. Der Parameter Geschwindigkeit wurde weiter oben erlutert, die
Tabellengre bestimmt den Platz, der vom Programm fr die Makrotabelle reser-
viert wird.  Ist diese beim Start von  BIOSMAKR  grer  als  der  reservierte
Platz,  wird er automatisch vergrert.  nderungen, die hier eingetragen wer-
den, wirken erst, wenn sie abgespeichert wurden und 'resettet' wurde.


0.7) Warum mir nicht mal schreiben?
===================================

 

                               *!!! Achtung !!!*

                          Ich WAR im Maus-Netz unter

                            Jan Starzynski @ HRO

                               zu erreichen. 

  das ist jetzt nicht mehr so. Durch den Umzug ist mir das Telefon verlorenge-
gangen,  d.h.  hier gibt es keinen Anschlu. Und Telekom macht Mut: Frhestens
1995 soll es wieder soweit sein.  Jetzt kann man mich nur noch ber das Inter-
net erreichen.

p67@hp1.uni-rostock.de

  Wenn diese Adresse angegeben wird, kommt die mail auch aus dem Mausnet rich-
tig bei mir an.

Natrlich geht's auch ber die gelbe Post unter

  Jan Starzynski

Mamannstr. 105
O-2500 Rostock

Ich bin immer dankbar fr Ideen, Bug-Report etc.


0.8) Wann schreiben?
====================

na, am besten gleich nach dem Probieren.

  PS:    Sourcen sind zu haben gegen Rckumschlag. Es gibt die Makro-Ersetzung
auch als Einzelroutine zum Einbauen in eigene Programme. 

  PPS:    Schnen Dank an Roman Hodek fr seinen TeX2TXT-Konverter. Wie man an
der Text-Datei erkennen kann, funktioniert er ganz gut. 

So, dann sinniert mal weiter ber die Bedeutung der Zahl 42 und vor allem

