Source file: /~heha/hs/dos/mrec_src.zip/MREC.TXT

Nicht ganz einfach bei der Erstellung eines Tastaturmakrorecorders ist
folgendes Problem:
Tastaturstatusabfragen (Int16 Funktion 01 oder 11) k”nnen von Programmen
auf 2 Weisen verwendet werden:
1. Gew”hnliche Abfrage
 Hierbei wird im Polling der Status abgefragt. Alternativ k”nnte auch direkt
 (mit Warten auf Taste) das BIOS gefragt werden (ReadKey). Damit schneidet
 sich der Programmierer allerdings den Weg ab, bspw. in einer objektorien-
 tierten Benutzerschnittstelle auch auf weitere Ereignisse reagieren zu k”nnen,
 wie z.B. Mausereignisse, Zeittakte und das Erfassen des Drckens von
 CTRL, SHIFT oder ALT zum Umschalten auf die Menleiste.
 Allerdings k”nnte es auch Programme geben, die fr Tasteneingaben ausschlieá-
 lich die Funktion 16/00 bzw. 16/10 verwenden. Hierfr werde ich im Programm
 MREC einen Schalter vorsehen.

2. Abfrage w„hrend einer Aktion
 Das Programm PROFIB.EXE z.B. fragt w„hrend des Druckvorgangs st„ndig die
 Tastatur ab, ob eine Taste gedrckt wurde, und leert den Tastaturpuffer
 gegebenfalls. Bloá wie soll man den Unterschied zum Fall 1. feststellen???
 Nach auáen ist dies absolut dasselbe Verhalten!
 N„mlich in Turbo Pascal:
 {$X+}                               				(1)
 for i:=1 to irgendwohin do begin
  TuIrgendwas;
  If KeyPressed then If ReadKey=0 then ReadKey;
  {Tastaturpuffer stets leeren!}
 end;

 Das Tastaturabfrageprogramm macht "dagegen":

 {$X+}								(2)
 repeat until keypressed;
 C1:=ReadKey;			{ASCII-Code}
 if C1=0 then C2:=ReadKey;	{Scan-Code erweiterte Tastatur}

L”sungen:
1. Der Interrupt 16/01 bzw. 16/11 meldet *stets* "Keine Taste", d.h.
 die TP-Fkt. KeyPressed meldet st„ndig FALSE. L„át Programme mit dem
 Programmstck (2) aufh„ngen, leider.
 Um beim Test nicht RESET drcken zu mssen, ist eine normale
 Tastaturabfrage zum Ausbruch aus der Schleife erforderlich

2. Der Interrupt 16/01 bzw. 16/11 meldet eine gewisse (ausreichend hohe)
 Anzahl an "Keine Taste", bis er die n„chste Taste "zum Verkauf" feilbietet.
 Dies funktioniert recht universell, es ist aber ein verteufelter
 Kompromiá zu schlieáen:
 - Die Zahl ist *so* hoch zu w„hlen, daá w„hrend eines Jobs keine Taste
 (mehr) emuliert wird (korrekte Funktion der Routine (1)).
 - Bei einer hohen Zahl dauert die Routine (2) sehr lange; oft viel l„nger
 als bei normaler Tastatureingabe
 Als L”sung hierfr k”nnte man die *echte* Tastatur abfragen und bei gedrckter
 Taste einen Ausbruch aus dieser Schleife erzwingen (siehe L”sung 1)

3. Ausnutzen k”nnte man, daá bei Druckjobs sich auf dem Bildschirm etwas
 „ndert, z.B. eine Zahl hochl„uft oder eine Balkengrafik sich ver„ndert.
 Man k”nnte wiedergabeseitig (?) diese Ver„nderung benutzen, um den Z„hler
 zurckzusetzen, der ansonsten analog zu L”sung 2 die Leseversuche z„hlen
 muá.

4. Die Umschaltung der Anzahl k”nnte dynamisch w„hrend der Emulation geschehen.
 Die Registrierung ist jedoch nicht w„hrend der Aufnahme m”glich, sodaá
 der entsprechende Befehl nachtr„glich in die Steuerdatei eingefgt werden
 muá.

Weitere Probleme und L”sungen:

- Die Tastenanschl„ge sind jedermann zug„nlich; Paáw”rter stehen praktisch
 im Klartext im Tastenfile. (L”sung: Scrambeln, was sonst!!)
- Das Tastaturfile kann also in 3 Arten vorkommen:
 + als editierbare ASCII-Datei ("Text")
 + als Bin„rdatei mit Tastencodes ("File of Integer")
 + als gescrambelte Bin„rdatei (Dateiaufbau ist natrlich geheim!)

 Umwandlungsm”glichkeit muá via MREC m”glich sein!
Detected encoding: UTF-80