Das ATOS-Magazin 3/98
ATOS Programmierpraxis
GEMScript Teil II

# Wie gut Du sprechen GEMScript?

Weiterhin wird beim Versenden von GS_REPLY in ev_mgpbuff[3] und [4] ein Zeiger auf eine Struktur vom Typ GS_INFO mitgeschickt, die der anderen Applikation sagt, inwieweit die mit GS_REQUEST angesprochene Applikation GEMScript versteht. Diese Struktur hat folgenden Aufbau:

    typedef struct {
       long len;      /* Länge der Struktur in Bytes */
       int  version;  /* Version des Protokolls beim Sender (z.Z. 0x0110 = 1.1) */
       int  msgs;     /* Bitmap der unterstützten Nachrichten (GSM_xxx) */
       long ext;      /* benutzte Endung, etwa '.SIC' */
    } GS_INFO;

In msgs trägt der GS_REPLY-Versender einen Bitvektor ein, der unserem GS_REQUEST-Versender (z.B. dem Scriptinterpreter) angibt, welche Kommandos die Applikation versteht.

    GSM_COMMAND = 0x0001
    GSM_MACRO   = 0x0002
    GSM_WRITE   = 0x0004

Am wichtigsten ist hier erstmal GSM_COMMAND. Die beiden anderen Kommandos sind nur für Scriptinterpreter oder "aufnahmefähige Applikationen" nötig, aber dazu später mehr.

Wichtig ist, daß die GS_INFO-Struktur, deren Adresse verschickt wird, mit Mxalloc() als globaler Speicherblock angefordert wird, damit es beim Zugriff darauf unter Betriebssystemen mit Memory Protection (MiNT) keine Schwierigkeiten gibt. Außerdem sollte die Struktur sicherheitshalber erst wieder freigegeben werden, wenn die Applikation beendet wird, da der GS_REPLY-Empfänger (z.B. der Interpreter) die Daten in der Struktur nicht sofort auslesen muß. Die Variable ext ist nur für Interpreter wichtig, andere Applikationen sollten hier 0 eintragen.

GS_COMMAND: Aye, Sir.