# Tastatur

Es gibt mehrere Möglichkeiten um per Skript die Tastatur auszuwerten. Die einfachste Variante ist es, einer Taste eine Funktion zuzuweisen. Dies geschieht über den Funktionspointer, dem einfach eine Funktion zugewiesen wird. Wird die dazugehörige Taste gedrückt, so wird die zugewiesene Funktion aufgerufen und dieser der Scancode der Taste übergeben.
Hierzu zwei Beispiele: ``

    FUNCTION taste_1()
    	{
    	Anweisung;
    	}

    on_1 = taste_1;

`

    VAR scancode;

    FUNCTION taste(scancode)
    	{
    	IF (scancode == 2) { // Taste 1 wurde gedrückt }
    	IF (scancode == 3) { // Taste 2 wurde gedrückt }
    	}

    on_1 = taste;
    on_2 = taste;

`

Mit dem Funktionspointer ON_ANYKEY werden alle Tasten der Tastatur, Maus und des Joysticks einer Funktion zugewiesen.

Eine weitere Möglichkeit, einer Taste eine Funktion zuzuweisen, besteht mit dem Befehl

KEY_SET (scancode, function);

Dieser Befehl weist der Taste mit dem Scancode die angegbebe Funktion zu.

Soll überprüft werden, ob z.Z. eine Taste gedrückt ist, so kann das Flag KEY_ANY hierzu abgefragt werden.
Der Scancode, der zuletzt gedrückten Taste, steht in der Variablen KEY_LASTPRESSED

`

    FUNCTION taste
    	{
    	IF (KEY_ANY == on)
    		{
    		// eine Taste wird gedrückt
    		IF (KEY_LASTPRESSED == 2){ // Taste 1 wurde gedrückt }
    		}
    	}

`

Die Funktion KEY_PRESSED (Scancode); liefert einen Flag zurück, das je nachdem ob die Taste mit dem angegebenen Scancode gedrückt wurde, auf "on" oder auf "off" steht.

Sollen die Funktionsaufrufe unterbunden werden, so setzt man das Flag ENABLE_KEY auf "off".

Zur Steuerung z.B. der Spielfigur stellt C-Skript den Vektor KEY_FORCE zur Verfügung. Dieser Vektor liefert in seinen Variablen x, y und z eine Richtung, die von den Cursortasten und den BildAuf- BildAb-Tasten geliefert wird. Wird zusätzlich noch die Shift-Taste gedrückt, so wird die Richtung noch mit der Variablen SHIFT_SENSE multipliziert. ``

    Action bewegen
    	{
    	SHIFT_SENSE = 2;
    	while(1)
    		{
    		my.x += KEY_FORCE.x;
    		my.y += KEY_FORCE.y;
    		my.z += KEY_FORCE.z;
    		wait(1);
    		}
    	}

Für die Umwandlung von Taste in Scancode und umgekert, stehen zwei Funktionen zur Verfügung.

Scancode = KEY_FOR_STR (string);
STR_FOR_KEY (string, Scancode);

Für die Eingabe eines ganzen Strings, steht der INKEY (string); Befehl zur Verfügung. Die Eingabe des Textes wird mit der Return-Taste beendet. Ein Betätigen der Tasten [Esc], [Cursor Up], [Cursor Down], [Bild UP] oder [Bild DOWN] führt zum Abbruch der Eingabe und setzt den Sting auf den vorigen Text zurück. Aus diesem Grund sollte der Rückgabewert, gespeichert in der Variablen RESULT mit dem Scancode, der Returntaste(13) überprüft werden.
Hier wieder ein Beispiel:

`

    font arial_font = "Arial",1,20;
    string eingabetext[30];

    text Eingabezeile // Textobjekt definieren
    	{
    	layer = 1;
    	pos_x = 10;
    	pos_y = 10;
    	font = arial_font;
    	string = eingabetext;
    	flags = visible;
    	}

    function input()
    	{
    	str_trunc (eingabetext, 30);
    	result=0;
    	while((result != 13)&&(result != 27))
    		{
    		inkey(eingabetext);
    		}
    	}

    ON_a = input;

`