|
Hauptseite - Welches System? - Hardware - Software - Emulatoren - |
Internet MausNet Programmieren Verweise Über |
Die folgenden Beispiele stellen Definitionen für das SE-Protokoll zur Verfügung.
Sprache | C | Megamax Modula | LPR Modula | Pascal | Oberon |
---|---|---|---|---|---|
Beispiel | seproto.h | seproto.i | seproto.def | seproto.pas | seproto.mod |
/* SE-Protokoll zur Kommunikation zwischen Shells zur Programmentwicklung * und Editoren. * * Dieses Protokoll dient dazu, unter Multitasking-Systemen die Shell * zur Compilierung und „hnlichen Sachen zu veranlassen, und um Fehler- * meldungen und/oder Fehlerdateien an den Editor zurckzugeben. * * Kommandos bzw. Nachrichten von der Shell zum Editor beginnen * mit SE_, Nachrichten vom Editor zur Shell beginnen mit ES_ * * Da teilweise Zeiger auf Speicherbereiche bergeben werden, ist vom * jeweiligen Absender der Nachricht darauf zu achten, daž diese * Speicherbereiche vom Empf„nger auch lesbar sind (Memory Protection!). * Dafr sind diese als Readable zu allozieren! * */ #define SEPROTOVERSION 0x105 /* Die Versionsnummer des Protokolls. * Highbyte ist die Major Number * Lowbyte ist die Lower Number */ /* * Erweiterungen * * Datum Version Žnderungen * * 30.01.96 1.01 SE_CLOSE fr Dateien/Masken, mit Close-Flag * msg[5] = 0 -> nur sichern * msg[5] = 1 -> sichern + schliežen * ES/SE_PROJEKT mit leerem Argument (NULL) * Um zur Version 0x100 kompatibel zu sein, sollte * das Programm die Versionsnummer berprfen!! * * 13.08.96 1.02 SE_OPEN mit Zeilen- und Spaltennummer * neue Nachricht SE_MENU * * 19.11.96 1.03 bei ES_COMPILE kann der Dateiname auch NULL sein * * 08.01.97 1.04 SE_CLOSE: Flag 2 (schliežen ohne sichern) * SE_MENU: progName * * 23.12.97 1.05 ES_SHLCTRL neu, zur Kontrolle der Shell * Dafr neuer String in SEMENUINFO. */ #define SE_INIT 0x4200 /* Die Shell fragt an, ob ein Editor das SE-Protokoll * versteht. * Wort 3: Ein Bitset, welche Nachrichten die Shell versendet * Wort 4+5: Ein Bitset, welche Editorkommandos verstanden werden * Wort 6: Untersttze Versionsnummer des Protokolls * Als Antwort erh„lt es ein ES_OK vom Editor. */ #define SE_OK 0x4201 /* Die Shell sagt dem Editor, das sie das Protokoll * versteht. * Wort 3: Ein Bitset, welche Nachrichten die Shell versendet * Wort 4+5: Ein Bitset, welche Editorkommandos verstanden werden * Wort 6: Untersttze Versionsnummer des Protokolls * Wort 7: Die ApId des Programmes, dessen Nachricht beantwortet wird */ #define SE_ACK 0x4202 /* Die Shell best„tigt den Empfang eines Editorkommandos und gibt zurck, * ob das Kommando ausgefhrt wird. * Wort 3: TRUE: Kommando wird verstanden und ausgefhrt. * FALSE: Das Kommando wird nicht verstanden * Eine SE_ACK mit TRUE sagt nichts darber aus, ob das Kommando erfolg- * reich ausgefhrt wurde. Es sagt nur, daž die Shell das Kommando * versteht und ausfhren wird! */ #define SE_OPEN 0x4203 /* Die Shell sagt dem Editor, daž er einen Text ”ffnen * soll. Als Antwort erh„lt die Shell ein ES_ACK * Wort 3+4: Ein Zeiger auf den Filenamen des zu ”ffnenden Files * Wort 5+6: Cursorposition (Zeilennummer) * Wort 7 : Cursorposition (Spaltennummer) */ #define SE_ERROR 0x4204 /* Es ist ein Fehler beim Compilieren aufgetreten. * Wort 3+4: Ein Zeiger auf eine Infostruktur, die wie folgt * aufgebaut ist: * Wort 0+1: Ein Zeiger auf den Namen des compilierten Textes. * Wort 2+3: Ein Zeiger auf den Text der Fehlermeldung * Wort 4 : Die Fehlernummer * Wort 5+6: Die fehlerhafte Zeile * Wort 7 : Die Spalte mit dem Fehler (oder 0) * Mit ES_ACK best„tigt der Editor die Meldung. */ #define SE_ERRFILE 0x4205 /* Es sind Fehler aufgetreten. Die Fehlermeldungen stehen in einem * Errorfile, welches in der Message spezifiziert wird. * Wort 3+4: Ein Zeiger auf den Filenamen des Errorfiles mit den * Fehlermeldungen * Wort 5+6: Ein Zeiger auf den Namen des compilierten Textes * Mit ES_ACK best„tigt der Editor die Meldung. */ #define SE_PROJECT 0x4206 /* Die Shell teilt dem Editor mit, daž das Projekt ge„ndert wurde. * Der Filename des aktuellen Projektfiles wird als Parameter bergeben * Wird NULL bergeben, sollte das aktuelle Projekt abgemeldet werden. * Wort 3+4: Ein Zeiger auf den Namen des Projektfiles oder NULL * Der Editor best„tigt mit ES_ACK. * Eine vernnftige Reaktion des Editors w„re es in dem Fall, * ebenfalls das Projekt zu wechseln, sofern er diese untersttzt. */ #define SE_QUIT 0x4207 /* Die Shell teilt dem Editor mit, daž sie jetzt beendet wird. * Der Editor sollte in dem Fall die Shell als Kommunikationspartner * vergessen. * Parameter gibt es keine. * Es wird keine Antwort erwartet! */ #define SE_TERMINATE 0x4208 /* Die Shell teilt dem Editor mit, daž dieser sich beenden soll. * Der Editor sollte in dem Fall sich selbst beenden und seinen ganz * normalen Terminierungsprozež durchlaufen (und in dem auch ein ES_QUIT * schicken!). Der Grund fr so eine Meldung der Shell k”nnte zum Beispiel * zu wenig Speicher zum compilieren sein. * Mit ES_ACK best„tigt der Editor die Meldung. */ #define SE_CLOSE 0x4209 /* Die Shell teilt dem Editor mit, daž dieser bestimmte Texte sichern * bzw. schliežen soll. Beim Schliežen von ge„nderten Texten sollte der * Editor vorher nachfragen. * Wort 3+4: Ein Zeiger auf den Namen einer Datei oder eine Dateimaske. * '*.*' steht fr alle Textfenster (entspricht also dem SE_CLOSE * der Protokoll-Version 0x100). * Wort 5 : 0 = nur sichern * 1 = sichern und schliežen * 2 = schliežen ohne sichern * Mit ES_ACK best„tigt der Editor die Meldung. */ #define SE_MENU 0x420A /* Die Shell teilte dem Editor mit, was er fr die einzelnen Programme * in sein Men eintragen soll. * * Word 3+4: Ein Zeiger auf eine SEMENUINFO-Struktur mit den Eintr„gen. * Mit ES_ACK best„tigt der Editor die Meldung. */ #define ES_INIT 0x4240 /* Ein Editor fragt an, ob eine Shell das SE-Protokoll versteht. * Wort 3: Ein Bitset, welche Shellnachrichten verstanden werden * Wort 4+5: Ein Bitset, welche Editorkommandos versendet werden * Wort 6: Untersttze Versionsnummer des Protokolls * Als Antwort erh„lt es SE_OK von der Shell */ #define ES_OK 0x4241 /* Der Editor beantwortet die Anfrage der Shell nach dem Protokoll. * Wort 3: Ein Bitset, welche Shellnachrichten verstanden werden * Wort 4+5: Ein Bitset, welche Editorkommandos versendet werden * Wort 6: Untersttze Versionsnummer des Protokolls * Wort 7: Die ApId des Programmes, dessen Nachricht beantwortet wird */ #define ES_ACK 0x4242 /* Der Editor best„tigt den Empfang des Kommandos * Wort 3: TRUE: Kommando wird verstanden und ausgefhrt. * FALSE: Das Kommando wird nicht verstanden * Eine ES_ACK mit TRUE sagt nichts darber aus, ob das Kommando erfolg- * reich ausgefhrt wurde. Es sagt nur, daž der Editor das Kommando * versteht und ausfhren wird! */ #define ES_COMPILE 0x4243 /* Der Editor sagt der Shell, daž sie ein File bersetzen soll. * Ein Pointer auf den Dateinamen wird in der Message bergeben. * Wort 3+4: Zeiger auf den Namen der zu compilierenden Datei * (oder NULL). * Diese Nachricht muž mit SE_ACK best„tigt werden. */ #define ES_MAKE 0x4244 /* Der Editor sagt der Shell, daž sie ein Make ausfhren soll. * Ein Filename kann in der Message bergeben werden, muž aber * nicht gesetzt sein und muž von der Shell auch nicht beachtet * werden! * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL) * Die Shell best„tigt mit SE_ACK. */ #define ES_MAKEALL 0x4245 /* Der Editor sagt der Shell, daž ein komplettes Make All ausgefhrt * werden soll. Ein Filename fr das Makefile kann (muž nicht) in * der Message bergeben werden. * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL) * Die Shell best„tigt mit SE_ACK. */ #define ES_LINK 0x4246 /* Der Editor sagt der Shell, daž das Programm * gelinkt werden soll. Ein Filename kann * in der Message bergeben werden, muž aber * nicht unbedingt beachtet werden von der Shell! * Wort 3+4: Zeiger auf den Namen der Source, die gelinkt werden soll * (oder NULL) * Die Shell best„tigt mit SE_ACK. */ #define ES_EXEC 0x4247 /* Der Editor sagt der Shell, daž das Programm * zu der Source ausgefhrt werden soll. Ein * Filename kann bergeben werden, muž von der * Shell aber nicht beachtet werden. * Wort 3+4: Zeiger auf den Namen des auszufhrenden Files (oder NULL) * Bei einer Sourcedatei ist diese ggf. noch zu * compilieren und/oder zu linken * Die Shell best„tigt mit SE_ACK. */ #define ES_MAKEEXEC 0x4248 /* Die Shell soll ein Make ausfhren und danach das Programm ausfhren. * Ein Filename fr das Makefile kann (muž nicht) in der Message * bergeben werden. * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL) * Die Shell best„tigt mit SE_ACK. */ #define ES_PROJECT 0x4249 /* Der Editor teilt der Shell mit, daž das Project ge„ndert/gewechselt * wurde. Der Filename des Projektfiles wird als Parameter in der Message * bergeben. Wird NULL bergeben, sollte das aktuelle Projekt abgemeldet * werden. * Wort 3+4: Zeiger auf den Namen des Projektfiles oder NULL. * Die Shell best„tigt mit SE_ACK. * Eine vernnftige Reaktion der Shell w„re in dem Fall, ebenfalls * das Projekt zu wechseln, sofern sie diese untersttzt. */ #define ES_QUIT 0x424A /* Der Editor teilt der Shell mit, daž er jetzt beendet wird. * Die Shell sollte in dem Fall den Editor als Kommunikationspartner * vergessen. * Parameter gibt es keine. * Es wird keine Antwort erwartet! */ #define ES_SHLCTRL 0x424B /* * Sonstige Kontrolle der Shell durch den Editors. * Wort 3+4 Zeiger auf den Namen des obersten Fensters oder NULL. * Wort 5 Steuer-Flag: * 0: Shell soll sich toppen (Men/Fenster). * Die Shell best„tigt mit SE_ACK. */ /* Typdefinitionen fr die Nachrichten */ /* Dies definiert die einzelnen Bits, welche Nachrichten untersttzt werden */ /* Shell-Kommandos */ #define _SEINIT 0x0001 #define _SEOK 0x0002 #define _SEACK 0x0004 #define _SEOPEN 0x0008 #define _SEERROR 0x0010 #define _SEERRFILE 0x0020 #define _SEPROJECT 0x0040 #define _SEQUIT 0x0080 #define _SETERMINATE 0x0100 #define _SECLOSE 0x0200 #define _SEMENU 0x0400 /* Editor-Kommandos */ #define _ESINIT 0x0001 #define _ESOK 0x0002 #define _ESACK 0x0004 #define _ESCOMPILE 0x0008 #define _ESMAKE 0x0010 #define _ESMAKEALL 0x0020 #define _ESLINK 0x0040 #define _ESEXEC 0x0080 #define _ESMAKEEXEC 0x0100 #define _ESPROJECT 0x0200 #define _ESQUIT 0x0400 #define _ESSHLCTRL 0x0800 /* Die Nachricht SE_ERROR liefert einen Zeiger auf diese Struktur: */ typedef struct { char *errFile; /* Zeiger auf den Namen der compilierten Datei */ char *errMess; /* Zeiger auf die Fehlermeldung */ int errNum; /* Die Fehlernummer */ long errLine; /* Die fehlerhafte Zeile */ int errRow; /* Die Spalte mit dem Fehler (oder 0) */ } ERRINFO; /* Die Nachricht SE_MENU verwendet einen Zeiger auf diese Struktur: */ typedef struct { char *compStr; char *makeStr; char *makeAllStr; char *linkStr; char *execStr; char *makeExecStr; char *progName; /* neu ab 0x104 */ char *shellCtrlStr; /* neu fr ES_SHLCTRL ab 0x105 */ } SEMENUINFO;zum Anfang
DEFINITION MODULE SEProto; (* SE-Protokoll zur Kommunikation zwischen Shells zur Programmentwicklung * und Editoren. * * Dieses Protokoll dient dazu, unter Multitasking-Systemen die Shell * zur Compilierung und „hnlichen Sachen zu veranlassen, und um Fehler- * meldungen und/oder Fehlerdateien an den Editor zurckzugeben. * * Kommandos bzw. Nachrichten von der Shell zum Editor beginnen * mit SE_, Nachrichten vom Editor zur Shell beginnen mit ES_ * * Da teilweise Zeiger auf Speicherbereiche bergeben werden, ist vom * jeweiligen Absender der Nachricht darauf zu achten, daž diese * Speicherbereiche vom Empf„nger auch lesbar sind (Memory Protection!). * Dafr sind diese als Readable zu allozieren! * *) (* * Erweiterungen * * Datum Version Žnderungen * * 30.01.96 1.01 SE_CLOSE fr Dateien/Masken, mit Close-Flag * msg[5] = 0 -> nur sichern * msg[5] = 1 -> sichern + schliežen * ES/SE_PROJEKT mit leerem Argument (NULL) * Um zur Version 0x100 kompatibel zu sein, sollte * das Programm die Versionsnummer berprfen!! * * 13.08.96 1.02 SE_OPEN mit Zeilen- und Spaltennummer * neue Nachricht SE_MENU * * 19.11.96 1.03 bei ES_COMPILE kann der Dateiname auch NULL sein * * 08.01.97 1.04 SE_CLOSE: Flag 2 (schliežen ohne sichern) * SE_MENU: progName * * 23.12.97 1.05 ES_SHLCTRL neu, zur Kontrolle der Shell * Dafr neuer String in SEMENUINFO. *) EXPORT SE_INIT, SE_OK, SE_ACK, SE_OPEN, SE_ERROR, SE_ERRFILE, SE_PROJECT, SE_QUIT, SE_TERMINATE, SE_CLOSE, ES_INIT, ES_OK, ES_ACK, ES_COMPILE, ES_MAKE, ES_MAKEALL, ES_LINK, ES_EXEC, ES_MAKEEXEC, ES_PROJECT, ES_QUIT, SEPROTOVERSION, tShellCommands, tEditCommands, tShellSet, tEditSet, tPtrString, LONGBITSET, tErrInfo, tPtrErrInfo, tMessRec, tPtrMessRec; CONST SE_INIT = 4200H; (* Die Shell fragt an, ob ein Editor das SE-Protokoll * versteht. * Wort 3: Ein Bitset, welche Nachrichten die Shell versendet * Wort 4+5: Ein Bitset, welche Editorkommandos verstanden werden * Wort 6: Untersttze Versionsnummer des Protokolls * Als Antwort erh„lt es ein ES_OK vom Editor. *) SE_OK = 4201H; (* Die Shell sagt dem Editor, das sie das Protokoll * versteht. * Wort 3: Ein Bitset, welche Nachrichten die Shell versendet * Wort 4+5: Ein Bitset, welche Editorkommandos verstanden werden * Wort 6: Untersttze Versionsnummer des Protokolls * Wort 7: Die ApId des Programmes, dessen Nachricht beantwortet wird *) SE_ACK = 4202H; (* Die Shell best„tigt den Empfang eines Editorkommandos und gibt zurck, * ob das Kommando ausgefhrt wird. * Wort 3: TRUE: Kommando wird verstanden und ausgefhrt. * FALSE: Das Kommando wird nicht verstanden * Eine SE_ACK mit TRUE sagt nichts darber aus, ob das Kommando erfolg- * reich ausgefhrt wurde. Es sagt nur, daž die Shell das Kommando * versteht und ausfhren wird! *) SE_OPEN = 4203H; (* Die Shell sagt dem Editor, daž er einen Text ”ffnen * soll. Als Antwort erh„lt die Shell ein ES_ACK * Wort 3+4: Ein Zeiger auf den Filenamen des zu ”ffnenden Files * Wort 5+6: Cursorposition (Zeilennummer) * Wort 7 : Cursorposition (Spaltennummer) *) SE_ERROR = 4204H; (* Es ist ein Fehler beim Compilieren aufgetreten. * Wort 3+4: Ein Zeiger auf eine Infostruktur, die wie folgt * aufgebaut ist: * Wort 0+1: Ein Zeiger auf den Namen des compilierten Textes. * Wort 2+3: Ein Zeiger auf den Text der Fehlermeldung * Wort 4 : Die Fehlernummer * Wort 5+6: Die fehlerhafte Zeile * Wort 7 : Die Spalte mit dem Fehler (oder 0) * Mit ES_ACK best„tigt der Editor die Meldung. *) SE_ERRFILE = 4205H; (* Es sind Fehler aufgetreten. Die Fehlermeldungen stehen in einem * Errorfile, welches in der Message spezifiziert wird. * Wort 3+4: Ein Zeiger auf den Filenamen des Errorfiles mit den * Fehlermeldungen * Wort 5+6: Ein Zeiger auf den Namen des compilierten Textes * Mit ES_ACK best„tigt der Editor die Meldung. *) SE_PROJECT = 4206H; (* Die Shell teilt dem Editor mit, daž das Projekt ge„ndert wurde. * Der Filename des aktuellen Projektfiles wird als Parameter bergeben * Wird NULL bergeben, sollte das aktuelle Projekt abgemeldet werden. * Wort 3+4: Ein Zeiger auf den Namen des Projektfiles oder NULL * Der Editor best„tigt mit ES_ACK. * Eine vernnftige Reaktion des Editors w„re es in dem Fall, * ebenfalls das Projekt zu wechseln, sofern er diese untersttzt. *) SE_QUIT = 4207H; (* Die Shell teilt dem Editor mit, daž sie jetzt beendet wird. * Der Editor sollte in dem Fall die Shell als Kommunikationspartner * vergessen. * Parameter gibt es keine. * Es wird keine Antwort erwartet! *) SE_TERMINATE = 4208H; (* Die Shell teilt dem Editor mit, daž dieser sich beenden soll. * Der Editor sollte in dem Fall sich selbst beenden und seinen ganz * normalen Terminierungsprozež durchlaufen (und in dem auch ein ES_QUIT * schicken!). Der Grund fr so eine Meldung der Shell k”nnte zum Beispiel * zu wenig Speicher zum compilieren sein. * Mit ES_ACK best„tigt der Editor die Meldung. *) SE_CLOSE = 4209H; (* Die Shell teilt dem Editor mit, daž dieser bestimmte Texte sichern * bzw. schliežen soll. Beim Schliežen von ge„nderten Texten sollte der * Editor vorher nachfragen. * Wort 3+4: Ein Zeiger auf den Namen einer Datei oder eine Dateimaske. * '*.*' steht fr alle Textfenster (entspricht also dem SE_CLOSE * der Protokoll-Version 0x100). * Wort 5 : 0 = nur sichern * 1 = sichern und schliežen * Mit ES_ACK best„tigt der Editor die Meldung. *) SE_MENU = 420AH; (* Die Shell teilte dem Editor mit, was er fr die einzelnen Programme * in sein Men eintragen soll. * * Word 3+4: Ein Zeiger auf eine MenuInfo-Struktur mit den Eintr„gen. * Mit ES_ACK best„tigt der Editor die Meldung. *) ES_INIT = 4240H; (* Ein Editor fragt an, ob eine Shell das SE-Protokoll versteht. * Wort 3: Ein Bitset, welche Shellnachrichten verstanden werden * Wort 4+5: Ein Bitset, welche Editorkommandos versendet werden * Wort 6: Untersttze Versionsnummer des Protokolls * Als Antwort erh„lt es SE_OK von der Shell *) ES_OK = 4241H; (* Der Editor beantwortet die Anfrage der Shell nach dem Protokoll. * Wort 3: Ein Bitset, welche Shellnachrichten verstanden werden * Wort 4+5: Ein Bitset, welche Editorkommandos versendet werden * Wort 6: Untersttze Versionsnummer des Protokolls * Wort 7: Die ApId des Programmes, dessen Nachricht beantwortet wird *) ES_ACK = 4242H; (* Der Editor best„tigt den Empfang des Kommandos * Wort 3: TRUE: Kommando wird verstanden und ausgefhrt. * FALSE: Das Kommando wird nicht verstanden * Eine ES_ACK mit TRUE sagt nichts darber aus, ob das Kommando erfolg- * reich ausgefhrt wurde. Es sagt nur, daž der Editor das Kommando * versteht und ausfhren wird! *) ES_COMPILE = 4243H; (* Der Editor sagt der Shell, daž sie ein File bersetzen soll. * Ein Pointer auf den Dateinamen wird in der Message bergeben. * Wort 3+4: Zeiger auf den Namen der zu compilierenden Datei * (oder NULL). * Diese Nachricht muž mit SE_ACK best„tigt werden. *) ES_MAKE = 4244H; (* Der Editor sagt der Shell, daž sie ein Make ausfhren soll. * Ein Filename kann in der Message bergeben werden, muž aber * nicht gesetzt sein und muž von der Shell auch nicht beachtet * werden! * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL) * Die Shell best„tigt mit SE_ACK. *) ES_MAKEALL = 4245H; (* Der Editor sagt der Shell, daž ein komplettes Make All ausgefhrt * werden soll. Ein Filename fr das Makefile kann (muž nicht) in * der Message bergeben werden. * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL) * Die Shell best„tigt mit SE_ACK. *) ES_LINK = 4246H; (* Der Editor sagt der Shell, daž das Programm * gelinkt werden soll. Ein Filename kann * in der Message bergeben werden, muž aber * nicht unbedingt beachtet werden von der Shell! * Wort 3+4: Zeiger auf den Namen der Source, die gelinkt werden soll * (oder NULL) * Die Shell best„tigt mit SE_ACK. *) ES_EXEC = 4247H; (* Der Editor sagt der Shell, daž das Programm * zu der Source ausgefhrt werden soll. Ein * Filename kann bergeben werden, muž von der * Shell aber nicht beachtet werden. * Wort 3+4: Zeiger auf den Namen des auszufhrenden Files (oder NULL) * Bei einer Sourcedatei ist diese ggf. noch zu * compilieren und/oder zu linken * Die Shell best„tigt mit SE_ACK. *) ES_MAKEEXEC = 4248H; (* Die Shell soll ein Make ausfhren und danach das Programm ausfhren. * Ein Filename fr das Makefile kann (muž nicht) in der Message * bergeben werden. * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL) * Die Shell best„tigt mit SE_ACK. *) ES_PROJECT = 4249H; (* Der Editor teilt der Shell mit, daž das Project ge„ndert/gewechselt * wurde. Der Filename des Projektfiles wird als Parameter in der Message * bergeben. Wird NULL bergeben, sollte das aktuelle Projekt abgemeldet * werden. * Wort 3+4: Zeiger auf den Namen des Projektfiles oder NULL. * Die Shell best„tigt mit SE_ACK. * Eine vernnftige Reaktion der Shell w„re in dem Fall, ebenfalls * das Projekt zu wechseln, sofern sie diese untersttzt. *) ES_QUIT = 424AH; (* Der Editor teilt der Shell mit, daž er jetzt beendet wird. * Die Shell sollte in dem Fall den Editor als Kommunikationspartner * vergessen. * Parameter gibt es keine. * Es wird keine Antwort erwartet! *) ES_SHLCTRL = 424BH; (* * Sonstige Kontrolle der Shell durch den Editors. * Wort 3+4 Zeiger auf den Namen des obersten Fensters oder NULL. * Wort 5 Steuer-Flag: * 0: Shell soll sich toppen (Men/Fenster). * Die Shell best„tigt mit SE_ACK. *) SE_DATA = 0; (* Nur fr Typdeklaration benutzt, eigentlich berflssig *) SEPROTOVERSION = 105H; (* Die Versionsnummer des Protokolls. * Highbyte ist die Major Number * Lowbyte ist die Lower Number *) (* Typdefinitionen fr die Nachrichten *) (* Dies definiert die einzelnen Bits, welche Nachrichten untersttzt werden *) TYPE tShellCommands = (seInit, seOk, seAck, seOpen, seError, seErrfile, seProject, seQuit, seTerminate, seClose, seMenu ); tEditCommands = (esInit, esOk, esAck, esCompile, esMake, esMakeall, esLink, esExec, esMakeexec, esProject, esQuit, esShlctrl, res12, res13, res14, res15, res16, res17, res18, res19, res20, res21, res22, res23, res24, res25, res26, res27, res28, res29, res30, res31); tShellSet = SET OF tShellCommands; tEditSet = SET OF tEditCommands; tCtrlCommands = ( topShell ); tCtrlSet = SET OF tCtrlCommands; tString = ARRAY [0..255] OF CHAR; tPtrString = POINTER TO ARRAY [0..255] OF CHAR; (* Zeiger auf einen nullterminierten String *) LONGBITSET = SET OF [0..31]; (* Leider kennt das nicht jeder Compiler *) tErrInfo = RECORD errFile : tPtrString; (* Zeiger auf den Namen der compilierten Datei *) errMess : tPtrString; (* Zeiger auf die Fehlermeldung *) errNum : INTEGER; (* Die Fehlernummer *) errLine : LONGINT; (* Die fehlerhafte Zeile *) errRow : INTEGER; (* Die Spalte mit dem Fehler (oder 0) *) END; tPtrErrInfo = POINTER TO tErrInfo; tMenuInfo = RECORD compStr : tPtrString; makeStr : tPtrString; makeAllStr : tPtrString; linkStr : tPtrString; execStr : tPtrString; makeExecStr : tPtrString; progName : tPtrString; shellCtrlString : tPtrString; END; tPtrMenuInfo = POINTER TO tMenuInfo; (* šber diese Recorddefinition kann man alle * Messages des Protokolls behandeln *) tMessRec = RECORD msg : INTEGER; (* Messagenummer, Wort 0 *) apId : INTEGER; (* Applikation ID des Senders, Wort 1 *) overLen : INTEGER; (* šberl„nge der Nachricht (immer 0 fr SE-Protokoll), * Wort 2 *) CASE : CARDINAL OF SE_INIT, ES_INIT : shellBits: tShellSet; (* Bits, die angeben, welche Shell-Nachrichten * untersttzt werden (Wort 3) *) editBits : tEditSet; (* Bits, die angeben, welche Editor-Nachrichten * untersttzt werden (Worte 4 und 5) *) version : CARDINAL; (* Untersttze Versionsnummer des Protokolls * Aktuell: $102 *) | SE_OK, ES_OK : okShellBits: tShellSet; (* Bits, die angeben, welche Shell-Nachrichten * untersttzt werden (Wort 3) *) okEditBits : tEditSet; (* Bits, die angeben, welche Editor-Nachrichten * untersttzt werden (Worte 4 und 5) *) okVersion: CARDINAL; (* Untersttze Versionsnummer des Antwortenden * Aktuell: $102 *) otherId : INTEGER; (* Die ApId des Senders, auf das dies eine Antwort * ist (Wort 7) *) | SE_ACK, ES_ACK : acknowledge: BOOLEAN; (* TRUE: Kommando wurde akzeptiert, * FALSE: Kommando konnte nicht ausgefhrt werden *) | SE_OPEN : namePtr : tPtrString; (* Zeiger auf den Namen des zu ladenden Textes *) errLine : LONGINT; (* Die fehlerhafte Zeile *) errRow : INTEGER; (* Die Spalte mit dem Fehler (oder 0) *) | SE_ERROR : errorPtr : tPtrErrInfo; (* Zeiger auf Speicherbereich, der die Fehlermeldung * spezifiziert. *) | SE_ERRFILE : errPtr : tPtrString; (* Zeiger auf den Namen des Errorfiles *) fnamePtr : tPtrString; (* Zeiger auf den Namen der compilierten Datei *) | SE_CLOSE : maskPtr : tPtrString; (* Zeiger auf den Namen einer Datei oder eine * Dateimaske ('*.*' steht fr alle Textfenster) *) closeFlag : BOOLEAN; | SE_MENU : menuPtr : tPtrMenuInfo; (* Zeiger auf Speicherbereich, der die Mentexte * spezifiziert. *) | SE_PROJECT, ES_COMPILE, ES_MAKE, ES_MAKEALL, ES_LINK, ES_EXEC, ES_MAKEEXEC, ES_PROJECT : filePtr : tPtrString; (* Zeiger auf den Filenamen des Files, welches * behandelt werden soll *) | SE_QUIT, SE_TERMINATE, ES_QUIT, SE_DATA: data : ARRAY [0..4] OF INTEGER; (* Definition fr Maximall„nge des Records *) | ES_SHLCTRL: ctrlBits : tCtrlSet; END; END; tPtrMessRec = POINTER TO tMessRec; (* Ein Zeiger auf diese Messageblock *) END SEProto.zum Anfang
DEFINITION MODULE SEProto; (* SE-Protokoll zur Kommunikation zwischen Shells zur Programmentwicklung * und Editoren. * * Dieses Protokoll dient dazu, unter Multitasking-Systemen die Shell * zur Compilierung und „hnlichen Sachen zu veranlassen, und um Fehler- * meldungen und/oder Fehlerdateien an den Editor zurckzugeben. * * Kommandos bzw. Nachrichten von der Shell zum Editor beginnen * mit SE_, Nachrichten vom Editor zur Shell beginnen mit ES_ * * Da teilweise Zeiger auf Speicherbereiche bergeben werden, ist vom * jeweiligen Absender der Nachricht darauf zu achten, daž diese * Speicherbereiche vom Empf„nger auch lesbar sind (Memory Protection!). * Dafr sind diese als Readable zu allozieren! * *) (* * Erweiterungen * * Datum Version Žnderungen * * 30.01.96 1.01 SeClose fr Dateien/Masken, mit Close-Flag * msg[5] = 0 -> nur sichern * msg[5] = 1 -> sichern + schliežen * Es/SeProject mit leerem Argument (NULL) * Um zur Version 0x100 kompatibel zu sein, sollte * das Programm die Versionsnummer berprfen!! * * 13.08.96 1.02 SeOpen mit Zeilen- und Spaltennummer * neue Nachricht SE_MENU * * 19.11.96 1.03 bei EsCompile kann der Dateiname auch NULL sein * * 08.01.97 1.04 SeClose: Flag 2 (schliežen ohne sichern) * SeMenu: progName * * 23.12.97 1.05 EsShlctrl neu, zur Kontrolle der Shell * Dafr neuer String in SEMENUINFO. *) CONST SeInit = 4200H; (* Die Shell fragt an, ob ein Editor das SE-Protokoll * versteht. * Wort 3: Ein Bitset, welche Nachrichten die Shell versendet * Wort 4+5: Ein Bitset, welche Editorkommandos verstanden werden * Wort 6: Untersttze Versionsnummer des Protokolls * Als Antwort erh„lt es ein EsOk vom Editor. *) SeOk = 4201H; (* Die Shell sagt dem Editor, das sie das Protokoll * versteht. * Wort 3: Ein Bitset, welche Nachrichten die Shell versendet * Wort 4+5: Ein Bitset, welche Editorkommandos verstanden werden * Wort 6: Untersttze Versionsnummer des Protokolls * Wort 7: Die ApId des Programmes, dessen Nachricht beantwortet wird *) SeAck = 4202H; (* Die Shell best„tigt den Empfang eines Editorkommandos und gibt zurck, * ob das Kommando ausgefhrt wird. * Wort 3: TRUE: Kommando wird verstanden und ausgefhrt. * FALSE: Das Kommando wird nicht verstanden * Eine SE_ACK mit TRUE sagt nichts darber aus, ob das Kommando erfolg- * reich ausgefhrt wurde. Es sagt nur, daž die Shell das Kommando * versteht und ausfhren wird! *) SeOpen = 4203H; (* Die Shell sagt dem Editor, daž er einen Text ”ffnen * soll. Als Antwort erh„lt die Shell ein ES_ACK * Wort 3+4: Ein Zeiger auf den Filenamen des zu ”ffnenden Files * Wort 5+6: Cursorposition (Zeilennummer) * Wort 7 : Cursorposition (Spaltennummer) *) SeError = 4204H; (* Es ist ein Fehler beim Compilieren aufgetreten. * Wort 3+4: Ein Zeiger auf eine Infostruktur, die wie folgt * aufgebaut ist: * Wort 0+1: Ein Zeiger auf den Namen des compilierten Textes. * Wort 2+3: Ein Zeiger auf den Text der Fehlermeldung * Wort 4 : Die Fehlernummer * Wort 5+6: Die fehlerhafte Zeile * Wort 7 : Die Spalte mit dem Fehler (oder 0) * Mit EsAck best„tigt der Editor die Meldung. *) SeErrfile = 4205H; (* Es sind Fehler aufgetreten. Die Fehlermeldungen stehen in einem * Errorfile, welches in der Message spezifiziert wird. * Wort 3+4: Ein Zeiger auf den Filenamen des Errorfiles mit den * Fehlermeldungen * Wort 5+6: Ein Zeiger auf den Namen des compilierten Textes * Mit EsAck best„tigt der Editor die Meldung. *) SeProject = 4206H; (* Die Shell teilt dem Editor mit, daž das Projekt ge„ndert wurde. * Der Filename des aktuellen Projektfiles wird als Parameter bergeben * Wird NULL bergeben, sollte das aktuelle Projekt abgemeldet werden. * Wort 3+4: Ein Zeiger auf den Namen des Projektfiles oder NULL * Der Editor best„tigt mit ES_ACK. * Eine vernnftige Reaktion des Editors w„re es in dem Fall, * ebenfalls das Projekt zu wechseln, sofern er diese untersttzt. *) SeQuit = 4207H; (* Die Shell teilt dem Editor mit, daž sie jetzt beendet wird. * Der Editor sollte in dem Fall die Shell als Kommunikationspartner * vergessen. * Parameter gibt es keine. * Es wird keine Antwort erwartet! *) SeTerminate = 4208H; (* Die Shell teilt dem Editor mit, daž dieser sich beenden soll. * Der Editor sollte in dem Fall sich selbst beenden und seinen ganz * normalen Terminierungsprozež durchlaufen (und in dem auch ein ES_QUIT * schicken!). Der Grund fr so eine Meldung der Shell k”nnte zum Beispiel * zu wenig Speicher zum compilieren sein. * Mit EsAck best„tigt der Editor die Meldung. *) SeClose = 4209H; (* Die Shell teilt dem Editor mit, daž dieser bestimmte Texte sichern * bzw. schliežen soll. Beim Schliežen von ge„nderten Texten sollte der * Editor vorher nachfragen. * Wort 3+4: Ein Zeiger auf den Namen einer Datei oder eine Dateimaske. * '*.*' steht fr alle Textfenster (entspricht also dem SE_CLOSE * der Protokoll-Version 0x100). * Wort 5 : 0 = nur sichern * 1 = sichern und schliežen * Mit EsAck best„tigt der Editor die Meldung. *) SeMenu = 420AH; (* Die Shell teilte dem Editor mit, was er fr die einzelnen Programme * in sein Men eintragen soll. * * Word 3+4: Ein Zeiger auf eine MenuInfo-Struktur mit den Eintr„gen. * Mit EsAck best„tigt der Editor die Meldung. *) EsInit = 4240H; (* Ein Editor fragt an, ob eine Shell das SE-Protokoll versteht. * Wort 3: Ein Bitset, welche Shellnachrichten verstanden werden * Wort 4+5: Ein Bitset, welche Editorkommandos versendet werden * Wort 6: Untersttze Versionsnummer des Protokolls * Als Antwort erh„lt es SE_OK von der Shell *) EsOk = 4241H; (* Der Editor beantwortet die Anfrage der Shell nach dem Protokoll. * Wort 3: Ein Bitset, welche Shellnachrichten verstanden werden * Wort 4+5: Ein Bitset, welche Editorkommandos versendet werden * Wort 6: Untersttze Versionsnummer des Protokolls * Wort 7: Die ApId des Programmes, dessen Nachricht beantwortet wird *) EsAck = 4242H; (* Der Editor best„tigt den Empfang des Kommandos * Wort 3: TRUE: Kommando wird verstanden und ausgefhrt. * FALSE: Das Kommando wird nicht verstanden * Eine ES_ACK mit TRUE sagt nichts darber aus, ob das Kommando erfolg- * reich ausgefhrt wurde. Es sagt nur, daž der Editor das Kommando * versteht und ausfhren wird! *) EsCompile = 4243H; (* Der Editor sagt der Shell, daž sie ein File bersetzen soll. * Ein Pointer auf den Dateinamen wird in der Message bergeben. * Wort 3+4: Zeiger auf den Namen der zu compilierenden Datei * (oder NULL). * Diese Nachricht muž mit SeAck best„tigt werden. *) EsMake = 4244H; (* Der Editor sagt der Shell, daž sie ein Make ausfhren soll. * Ein Filename kann in der Message bergeben werden, muž aber * nicht gesetzt sein und muž von der Shell auch nicht beachtet * werden! * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL) * Die Shell best„tigt mit SeAck. *) EsMakeall = 4245H; (* Der Editor sagt der Shell, daž ein komplettes Make All ausgefhrt * werden soll. Ein Filename fr das Makefile kann (muž nicht) in * der Message bergeben werden. * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL) * Die Shell best„tigt mit SeAck. *) EsLink = 4246H; (* Der Editor sagt der Shell, daž das Programm * gelinkt werden soll. Ein Filename kann * in der Message bergeben werden, muž aber * nicht unbedingt beachtet werden von der Shell! * Wort 3+4: Zeiger auf den Namen der Source, die gelinkt werden soll * (oder NULL) * Die Shell best„tigt mit SeAck. *) EsExec = 4247H; (* Der Editor sagt der Shell, daž das Programm * zu der Source ausgefhrt werden soll. Ein * Filename kann bergeben werden, muž von der * Shell aber nicht beachtet werden. * Wort 3+4: Zeiger auf den Namen des auszufhrenden Files (oder NULL) * Bei einer Sourcedatei ist diese ggf. noch zu * compilieren und/oder zu linken * Die Shell best„tigt mit SeAck. *) EsMakeexec = 4248H; (* Die Shell soll ein Make ausfhren und danach das Programm ausfhren. * Ein Filename fr das Makefile kann (muž nicht) in der Message * bergeben werden. * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL) * Die Shell best„tigt mit SeAck. *) EsProject = 4249H; (* Der Editor teilt der Shell mit, daž das Project ge„ndert/gewechselt * wurde. Der Filename des Projektfiles wird als Parameter in der Message * bergeben. Wird NULL bergeben, sollte das aktuelle Projekt abgemeldet * werden. * Wort 3+4: Zeiger auf den Namen des Projektfiles oder NULL. * Die Shell best„tigt mit SeAck. * Eine vernnftige Reaktion der Shell w„re in dem Fall, ebenfalls * das Projekt zu wechseln, sofern sie diese untersttzt. *) EsQuit = 424AH; (* Der Editor teilt der Shell mit, daž er jetzt beendet wird. * Die Shell sollte in dem Fall den Editor als Kommunikationspartner * vergessen. * Parameter gibt es keine. * Es wird keine Antwort erwartet! *) EsShlctrl = 424BH; (* * Sonstige Kontrolle der Shell durch den Editors. * Wort 3+4 Zeiger auf den Namen des obersten Fensters oder NULL. * Wort 5 Steuer-Flag: * 0: Shell soll sich toppen (Men/Fenster). * Die Shell best„tigt mit SeAck. *) SeData = 0; (* Nur fr Typdeklaration benutzt, eigentlich berflssig *) SEPROTOVERSION = 105H; (* Die Versionsnummer des Protokolls. * Highbyte ist die Major Number * Lowbyte ist die Lower Number *) (* Typdefinitionen fr die Nachrichten *) (* Dies definiert die einzelnen Bits, welche Nachrichten untersttzt werden *) TYPE tShellCommands = (seInit, seOk, seAck, seOpen, seError, seErrfile, seProject, seQuit, seTerminate, seClose, seMenu ); tEditCommands = (esInit, esOk, esAck, esCompile, esMake, esMakeall, esLink, esExec, esMakeexec, esProject, esQuit, esShlctrl, res12, res13, res14, res15(*, res16, res17, res18, res19, res20, res21, res22, res23, res24, res25, res26, res27, res28, res29, res30, res31*)); (* Beschraenkung LPR Modula *) tShellSet = SET OF tShellCommands; tEditSet = SET OF tEditCommands; tCtrlCommands = ( topShell ); tCtrlSet = SET OF tCtrlCommands; tString = ARRAY [0..255] OF CHAR; tPtrString = POINTER TO ARRAY [0..255] OF CHAR; (* Zeiger auf einen nullterminierten String *) tErrInfo = RECORD errFile : tPtrString; (* Zeiger auf den Namen der compilierten Datei *) errMess : tPtrString; (* Zeiger auf die Fehlermeldung *) errNum : INTEGER; (* Die Fehlernummer *) errLine : LONGINT; (* Die fehlerhafte Zeile *) errRow : INTEGER; (* Die Spalte mit dem Fehler (oder 0) *) END; tPtrErrInfo = POINTER TO tErrInfo; tMenuInfo = RECORD compStr : tPtrString; makeStr : tPtrString; makeAllStr : tPtrString; linkStr : tPtrString; execStr : tPtrString; makeExecStr : tPtrString; progName : tPtrString; shellCtrlString : tPtrString; END; tPtrMenuInfo = POINTER TO tMenuInfo; (* šber diese Recorddefinition kann man alle * Messages des Protokolls behandeln *) tMessRec = RECORD msg : INTEGER; (* Messagenummer, Wort 0 *) apId : INTEGER; (* Applikation ID des Senders, Wort 1 *) overLen : INTEGER; (* šberl„nge der Nachricht (immer 0 fr SE-Protokoll), * Wort 2 *) CASE : CARDINAL OF SeInit, EsInit : shellBits: tShellSet; (* Bits, die angeben, welche Shell-Nachrichten * untersttzt werden (Wort 3) *) editBits : tEditSet; (* Bits, die angeben, welche Editor-Nachrichten * untersttzt werden (Worte 4 und 5) *) version : CARDINAL; (* Untersttze Versionsnummer des Protokolls * Aktuell: $102 *) | SeOk, EsOk : okShellBits: tShellSet; (* Bits, die angeben, welche Shell-Nachrichten * untersttzt werden (Wort 3) *) okEditBits : tEditSet; (* Bits, die angeben, welche Editor-Nachrichten * untersttzt werden (Worte 4 und 5) *) okVersion: CARDINAL; (* Untersttze Versionsnummer des Antwortenden * Aktuell: $102 *) otherId : INTEGER; (* Die ApId des Senders, auf das dies eine Antwort * ist (Wort 7) *) | SeAck, EsAck : acknowledge: BOOLEAN; (* TRUE: Kommando wurde akzeptiert, * FALSE: Kommando konnte nicht ausgefhrt werden *) | SeOpen : namePtr : tPtrString; (* Zeiger auf den Namen des zu ladenden Textes *) errLine : LONGINT; (* Die fehlerhafte Zeile *) errRow : INTEGER; (* Die Spalte mit dem Fehler (oder 0) *) | SeError : errorPtr : tPtrErrInfo; (* Zeiger auf Speicherbereich, der die Fehlermeldung * spezifiziert. *) | SeErrfile : errPtr : tPtrString; (* Zeiger auf den Namen des Errorfiles *) fnamePtr : tPtrString; (* Zeiger auf den Namen der compilierten Datei *) | SeClose : maskPtr : tPtrString; (* Zeiger auf den Namen einer Datei oder eine * Dateimaske ('*.*' steht fr alle Textfenster) *) closeFlag : BOOLEAN; | SeMenu : menuPtr : tPtrMenuInfo; (* Zeiger auf Speicherbereich, der die Mentexte * spezifiziert. *) | SeProject, EsCompile, EsMake, EsMakeall, EsLink, EsExec, EsMakeexec, EsProject : filePtr : tPtrString; (* Zeiger auf den Filenamen des Files, welches * behandelt werden soll *) | SeQuit, SeTerminate, EsQuit, SeData: data : ARRAY [0..4] OF INTEGER; (* Definition fr Maximall„nge des Records *) | EsShlctrl: ctrlBits : tCtrlSet; END; END; tPtrMessRec = POINTER TO tMessRec; (* Ein Zeiger auf diese Messageblock *) END SEProto.zum Anfang
(* SE-Protokoll zur Kommunikation zwischen Shells zur Programmentwicklung * und Editoren. * * Dieses Protokoll dient dazu, unter Multitasking-Systemen die Shell * zur Compilierung und „hnlichen Sachen zu veranlassen, und um Fehler- * meldungen und/oder Fehlerdateien an den Editor zurckzugeben. * * Kommandos bzw. Nachrichten von der Shell zum Editor beginnen * mit SE_, Nachrichten vom Editor zur Shell beginnen mit ES_ * * Da teilweise Zeiger auf Speicherbereiche bergeben werden, ist vom * jeweiligen Absender der Nachricht darauf zu achten, daž diese * Speicherbereiche vom Empf„nger auch lesbar sind (Memory Protection!). * Dafr sind diese als Readable zu allozieren! * *) (* * Erweiterungen * * Datum Version Žnderungen * * 30.01.96 1.01 SE_CLOSE fr Dateien/Masken, mit Close-Flag * msg[5] = 0 -> nur sichern * msg[5] = 1 -> sichern + schliežen * ES/SE_PROJEKT mit leerem Argument (NULL) * Um zur Version 0x100 kompatibel zu sein, sollte * das Programm die Versionsnummer berprfen!! * * 13.08.96 1.02 SE_OPEN mit Zeilen- und Spaltennummer * neue Nachricht SE_MENU * * 19.11.96 1.03 bei ES_COMPILE kann der Dateiname auch NULL sein * * 08.01.97 1.04 SE_CLOSE: Flag 2 (schliežen ohne sichern) * SE_MENU: progName * * 23.12.97 1.05 ES_SHLCTRL neu, zur Kontrolle der Shell * Dafr neuer String in SEMENUINFO. *) const SE_INIT = $4200; (* Die Shell fragt an, ob ein Editor das SE-Protokoll * versteht. * Wort 3: Ein Bitset, welche Nachrichten die Shell versendet * Wort 4+5: Ein Bitset, welche Editorkommandos verstanden werden * Wort 6: Untersttze Versionsnummer des Protokolls * Als Antwort erh„lt es ein ES_OK vom Editor. *) SE_OK = $4201; (* Die Shell sagt dem Editor, das sie das Protokoll * versteht. * Wort 3: Ein Bitset, welche Nachrichten die Shell versendet * Wort 4+5: Ein Bitset, welche Editorkommandos verstanden werden * Wort 6: Untersttze Versionsnummer des Protokolls * Wort 7: Die ApId des Programmes, dessen Nachricht beantwortet wird *) SE_ACK = $4202; (* Die Shell best„tigt den Empfang eines Editorkommandos und gibt zurck, * ob das Kommando ausgefhrt wird. * Wort 3: TRUE: Kommando wird verstanden und ausgefhrt. * FALSE: Das Kommando wird nicht verstanden * Eine SE_ACK mit TRUE sagt nichts darber aus, ob das Kommando erfolg- * reich ausgefhrt wurde. Es sagt nur, daž die Shell das Kommando * versteht und ausfhren wird! *) SE_OPEN = $4203; (* Die Shell sagt dem Editor, daž er einen Text ”ffnen * soll. Als Antwort erh„lt die Shell ein ES_ACK * Wort 3+4: Ein Zeiger auf den Filenamen des zu ”ffnenden Files * Wort 5+6: Cursorposition (Zeilennummer) * Wort 7 : Cursorposition (Spaltennummer) *) SE_ERROR = $4204; (* Es ist ein Fehler beim Compilieren aufgetreten. * Wort 3+4: Ein Zeiger auf eine Infostruktur, die wie folgt * aufgebaut ist: * Wort 0+1: Ein Zeiger auf den Namen des compilierten Textes. * Wort 2+3: Ein Zeiger auf den Text der Fehlermeldung * Wort 4 : Die Fehlernummer * Wort 5+6: Die fehlerhafte Zeile * Wort 7 : Die Spalte mit dem Fehler (oder 0) * Mit ES_ACK best„tigt der Editor die Meldung. *) SE_ERRFILE = $4205; (* Es sind Fehler aufgetreten. Die Fehlermeldungen stehen in einem * Errorfile, welches in der Message spezifiziert wird. * Wort 3+4: Ein Zeiger auf den Filenamen des Errorfiles mit den * Fehlermeldungen * Wort 5+6: Ein Zeiger auf den Namen des compilierten Textes * Mit ES_ACK best„tigt der Editor die Meldung. *) SE_PROJECT = $4206; (* Die Shell teilt dem Editor mit, daž das Projekt ge„ndert wurde. * Der Filename des aktuellen Projektfiles wird als Parameter bergeben * Wird NULL bergeben, sollte das aktuelle Projekt abgemeldet werden. * Wort 3+4: Ein Zeiger auf den Namen des Projektfiles oder NULL * Der Editor best„tigt mit ES_ACK. * Eine vernnftige Reaktion des Editors w„re es in dem Fall, * ebenfalls das Projekt zu wechseln, sofern er diese untersttzt. *) SE_QUIT = $4207; (* Die Shell teilt dem Editor mit, daž sie jetzt beendet wird. * Der Editor sollte in dem Fall die Shell als Kommunikationspartner * vergessen. * Parameter gibt es keine. * Es wird keine Antwort erwartet! *) SE_TERMINATE = $4208; (* Die Shell teilt dem Editor mit, daž dieser sich beenden soll. * Der Editor sollte in dem Fall sich selbst beenden und seinen ganz * normalen Terminierungsprozež durchlaufen (und in dem auch ein ES_QUIT * schicken!). Der Grund fr so eine Meldung der Shell k”nnte zum Beispiel * zu wenig Speicher zum compilieren sein. * Mit ES_ACK best„tigt der Editor die Meldung. *) SE_CLOSE = $4209; (* Die Shell teilt dem Editor mit, daž dieser bestimmte Texte sichern * bzw. schliežen soll. Beim Schliežen von ge„nderten Texten sollte der * Editor vorher nachfragen. * Wort 3+4: Ein Zeiger auf den Namen einer Datei oder eine Dateimaske. * '*.*' steht fr alle Textfenster (entspricht also dem SE_CLOSE * der Protokoll-Version 0x100). * Wort 5 : 0 = nur sichern * 1 = sichern und schliežen * Mit ES_ACK best„tigt der Editor die Meldung. *) SE_MENU = $420A; (* Die Shell teilte dem Editor mit, was er fr die einzelnen Programme * in sein Men eintragen soll. * * Word 3+4: Ein Zeiger auf eine MenuInfo-Struktur mit den Eintr„gen. * Mit ES_ACK best„tigt der Editor die Meldung. *) ES_INIT = $4240; (* Ein Editor fragt an, ob eine Shell das SE-Protokoll versteht. * Wort 3: Ein Bitset, welche Shellnachrichten verstanden werden * Wort 4+5: Ein Bitset, welche Editorkommandos versendet werden * Wort 6: Untersttze Versionsnummer des Protokolls * Als Antwort erh„lt es SE_OK von der Shell *) ES_OK = $4241; (* Der Editor beantwortet die Anfrage der Shell nach dem Protokoll. * Wort 3: Ein Bitset, welche Shellnachrichten verstanden werden * Wort 4+5: Ein Bitset, welche Editorkommandos versendet werden * Wort 6: Untersttze Versionsnummer des Protokolls * Wort 7: Die ApId des Programmes, dessen Nachricht beantwortet wird *) ES_ACK = $4242; (* Der Editor best„tigt den Empfang des Kommandos * Wort 3: TRUE: Kommando wird verstanden und ausgefhrt. * FALSE: Das Kommando wird nicht verstanden * Eine ES_ACK mit TRUE sagt nichts darber aus, ob das Kommando erfolg- * reich ausgefhrt wurde. Es sagt nur, daž der Editor das Kommando * versteht und ausfhren wird! *) ES_COMPILE = $4243; (* Der Editor sagt der Shell, daž sie ein File bersetzen soll. * Ein Pointer auf den Dateinamen wird in der Message bergeben. * Wort 3+4: Zeiger auf den Namen der zu compilierenden Datei * (oder NULL). * Diese Nachricht muž mit SE_ACK best„tigt werden. *) ES_MAKE = $4244; (* Der Editor sagt der Shell, daž sie ein Make ausfhren soll. * Ein Filename kann in der Message bergeben werden, muž aber * nicht gesetzt sein und muž von der Shell auch nicht beachtet * werden! * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL) * Die Shell best„tigt mit SE_ACK. *) ES_MAKEALL = $4245; (* Der Editor sagt der Shell, daž ein komplettes Make All ausgefhrt * werden soll. Ein Filename fr das Makefile kann (muž nicht) in * der Message bergeben werden. * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL) * Die Shell best„tigt mit SE_ACK. *) ES_LINK = $4246; (* Der Editor sagt der Shell, daž das Programm * gelinkt werden soll. Ein Filename kann * in der Message bergeben werden, muž aber * nicht unbedingt beachtet werden von der Shell! * Wort 3+4: Zeiger auf den Namen der Source, die gelinkt werden soll * (oder NULL) * Die Shell best„tigt mit SE_ACK. *) ES_EXEC = $4247; (* Der Editor sagt der Shell, daž das Programm * zu der Source ausgefhrt werden soll. Ein * Filename kann bergeben werden, muž von der * Shell aber nicht beachtet werden. * Wort 3+4: Zeiger auf den Namen des auszufhrenden Files (oder NULL) * Bei einer Sourcedatei ist diese ggf. noch zu * compilieren und/oder zu linken * Die Shell best„tigt mit SE_ACK. *) ES_MAKEEXEC = $4248; (* Die Shell soll ein Make ausfhren und danach das Programm ausfhren. * Ein Filename fr das Makefile kann (muž nicht) in der Message * bergeben werden. * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL) * Die Shell best„tigt mit SE_ACK. *) ES_PROJECT = $4249; (* Der Editor teilt der Shell mit, daž das Project ge„ndert/gewechselt * wurde. Der Filename des Projektfiles wird als Parameter in der Message * bergeben. Wird NULL bergeben, sollte das aktuelle Projekt abgemeldet * werden. * Wort 3+4: Zeiger auf den Namen des Projektfiles oder NULL. * Die Shell best„tigt mit SE_ACK. * Eine vernnftige Reaktion der Shell w„re in dem Fall, ebenfalls * das Projekt zu wechseln, sofern sie diese untersttzt. *) ES_QUIT = $424A; (* Der Editor teilt der Shell mit, daž er jetzt beendet wird. * Die Shell sollte in dem Fall den Editor als Kommunikationspartner * vergessen. * Parameter gibt es keine. * Es wird keine Antwort erwartet! *) ES_SHLCTRL = $424B; (* * Sonstige Kontrolle der Shell durch den Editors. * Wort 3+4 Zeiger auf den Namen des obersten Fensters oder NULL. * Wort 5 Steuer-Flag: * 0: Shell soll sich toppen (Men/Fenster). * Die Shell best„tigt mit SE_ACK. *) SE_DATA = 0; (* Nur fr Typdeklaration benutzt, eigentlich berflssig *) SEPROTOVERSION = $105; (* Die Versionsnummer des Protokolls. * Highbyte ist die Major Number * Lowbyte ist die Lower Number *) (* Typdefinitionen fr die Nachrichten *) (* Dies definiert die einzelnen Bits, welche Nachrichten untersttzt werden *) type tShellCommands = (seInit, seOk, seAck, seOpen, seError, seErrfile, seProject, seQuit, seTerminate, seClose, seMenu ); tEditCommands = (esInit, esOk, esAck, esCompile, esMake, esMakeall, esLink, esExec, esMakeexec, esProject, esQuit, esShlctrl, res12, res13, res14, res15, res16, res17, res18, res19, res20, res21, res22, res23, res24, res25, res26, res27, res28, res29, res30, res31); tShellSet = SET OF tShellCommands; tEditSet = SET OF tEditCommands; tCtrlCommands = ( topShell ); tCtrlSet = SET OF tCtrlCommands; tString = ARRAY [0..255] OF CHAR; tPtrString = ^ tString; (* Zeiger auf einen nullterminierten String *) LONGBITSET = SET OF 0..31; (* Leider kennt das nicht jeder Compiler *) tErrInfo = RECORD errFile : tPtrString; (* Zeiger auf den Namen der compilierten Datei *) errMess : tPtrString; (* Zeiger auf die Fehlermeldung *) errNum : INTEGER; (* Die Fehlernummer *) errLine : LONG_INTEGER; (* Die fehlerhafte Zeile *) errRow : INTEGER; (* Die Spalte mit dem Fehler (oder 0) *) END; tPtrErrInfo = ^ tErrInfo; tMenuInfo = RECORD compStr : tPtrString; makeStr : tPtrString; makeAllStr : tPtrString; linkStr : tPtrString; execStr : tPtrString; makeExecStr : tPtrString; progName : tPtrString; shellCtrlString : tPtrString; END; tPtrMenuInfo = ^ tMenuInfo; (* šber diese Recorddefinition kann man alle * Messages des Protokolls behandeln *) tMessRec = RECORD msg : INTEGER; (* Messagenummer, Wort 0 *) apId : INTEGER; (* Applikation ID des Senders, Wort 1 *) overLen : INTEGER; (* šberl„nge der Nachricht (immer 0 fr SE-Protokoll), * Wort 2 *) CASE INTEGER OF SE_INIT, ES_INIT : ( shellBits: tShellSet; (* Bits, die angeben, welche Shell-Nachrichten * untersttzt werden (Wort 3) *) editBits : tEditSet; (* Bits, die angeben, welche Editor-Nachrichten * untersttzt werden (Worte 4 und 5) *) version : INTEGER ); (* Untersttze Versionsnummer des Protokolls * Aktuell: $102 *) SE_OK, ES_OK : ( okShellBits: tShellSet; (* Bits, die angeben, welche Shell-Nachrichten * untersttzt werden (Wort 3) *) okEditBits : tEditSet; (* Bits, die angeben, welche Editor-Nachrichten * untersttzt werden (Worte 4 und 5) *) okVersion: INTEGER; (* Untersttze Versionsnummer des Antwortenden * Aktuell: $102 *) otherId : INTEGER ); (* Die ApId des Senders, auf das dies eine Antwort * ist (Wort 7) *) SE_ACK, ES_ACK : ( acknowledge: BOOLEAN ); (* TRUE: Kommando wurde akzeptiert, * FALSE: Kommando konnte nicht ausgefhrt werden *) SE_OPEN : ( namePtr : tPtrString; (* Zeiger auf den Namen des zu ladenden Textes *) errLine : LONG_INTEGER; (* Die fehlerhafte Zeile *) errRow : INTEGER ); (* Die Spalte mit dem Fehler (oder 0) *) SE_ERROR : ( errorPtr : tPtrErrInfo ); (* Zeiger auf Speicherbereich, der die Fehlermeldung * spezifiziert. *) SE_ERRFILE : ( errPtr : tPtrString; (* Zeiger auf den Namen des Errorfiles *) fnamePtr : tPtrString ); (* Zeiger auf den Namen der compilierten Datei *) SE_CLOSE : ( maskPtr : tPtrString; (* Zeiger auf den Namen einer Datei oder eine * Dateimaske ('*.*' steht fr alle Textfenster) *) closeFlag : BOOLEAN ); SE_MENU : ( menuPtr : tPtrMenuInfo ); (* Zeiger auf Speicherbereich, der die Mentexte * spezifiziert. *) SE_PROJECT, ES_COMPILE, ES_MAKE, ES_MAKEALL, ES_LINK, ES_EXEC, ES_MAKEEXEC, ES_PROJECT : ( filePtr : tPtrString ); (* Zeiger auf den Filenamen des Files, welches * behandelt werden soll *) SE_QUIT, SE_TERMINATE, ES_QUIT, SE_DATA: ( data : ARRAY [0..4] OF INTEGER ); (* Definition fr Maximall„nge des Records *) ES_SHLCTRL: ( ctrlBits : tCtrlSet ); END; tPtrMessRec = ^ tMessRec; (* Ein Zeiger auf diese Messageblock *)zum Anfang
MODULE SEProtocol; IMPORT Str:=Strings; (* SE-Protokoll zur Kommunikation zwischen Shells zur Programmentwicklung * und Editoren. * * Dieses Protokoll dient dazu, unter Multitasking-Systemen die Shell * zur Compilierung und „hnlichen Sachen zu veranlassen, und um Fehler- * meldungen und/oder Fehlerdateien an den Editor zurckzugeben. * * Kommandos bzw. Nachrichten von der Shell zum Editor beginnen * mit SE, Nachrichten vom Editor zur Shell beginnen mit ES * * Da teilweise Zeiger auf Speicherbereiche bergeben werden, ist vom * jeweiligen Absender der Nachricht darauf zu achten, daž diese * Speicherbereiche vom Empf„nger auch lesbar sind (Memory Protection!). * Dafr sind diese als Readable zu allozieren! * * * Erweiterungen * * Datum Version Žnderungen * * 27.01.96 101 SE_CLOSE fr Dateien oder Masken * Wort 5 : 0 = nur sichern * 1 = sichern und schliežen * ES/SE_PROJEKT mit leerem Argument * 17.07.96 102 SE_MENU definiert * 30.07.96 SE_OPEN mit Cursor-Pos. * * 19.11.96 103 ES_COMPILER auch ohne Argument * * 08.01.97 1.04 SE_CLOSE: Flag 2 (schliežen ohne sichern) * SE_MENU: progName * * 23.12.97 1.05 ES_SHLCTRL neu, zur Kontrolle der Shell * Dafr neuer String in SEMENUINFO. *) CONST SEPROTOVERSION *= 105H; SEINIT *= 4200H; (* Die Shell fragt an, ob ein Editor das SE-Protokoll * versteht. * Wort 3: Ein Bitset, welche Nachrichten die Shell versendet * Wort 4+5: Ein Bitset, welche Editorkommandos verstanden werden * Wort 6: Untersttze Versionsnummer des Protokolls * Als Antwort erh„lt es ein ESOK vom Editor. *) SEOK *= 4201H; (* Die Shell sagt dem Editor, das sie das Protokoll * versteht. * Wort 3: Ein Bitset, welche Nachrichten die Shell versendet * Wort 4+5: Ein Bitset, welche Editorkommandos verstanden werden * Wort 6: Untersttze Versionsnummer des Protokolls * Wort 7: Die ApId des Programmes, dessen Nachricht beantwortet wird *) SEACK *= 4202H; (* Die Shell best„tigt den Empfang eines Editorkommandos und gibt zurck, * ob das Kommando ausgefhrt wird. * Wort 3: TRUE: Kommando wird verstanden und ausgefhrt. * FALSE: Das Kommando wird nicht verstanden * Eine SEACK mit TRUE sagt nichts darber aus, ob das Kommando erfolg- * reich ausgefhrt wurde. Es sagt nur, daž die Shell das Kommando * versteht und ausfhren wird! *) SEOPEN *= 4203H; (* Die Shell sagt dem Editor, daž er einen Text ”ffnen * soll. Als Antwort erh„lt die Shell ein ESACK * Wort 3+4: Ein Zeiger auf den Filenamen des zu ”ffnenden Files * Wort 5+6: Zeilennummer oder null * Wort 7 : Spaltennummer oder null *) SEERROR *= 4204H; (* Es ist ein Fehler beim Compilieren aufgetreten. * Wort 3+4: Ein Zeiger auf eine Infostruktur, die wie folgt * aufgebaut ist: * Wort 0+1: Ein Zeiger auf den Namen des compilierten Textes. * Wort 2+3: Ein Zeiger auf den Text der Fehlermeldung * Wort 4 : Die Fehlernummer * Wort 5+6: Die fehlerhafte Zeile * Wort 7 : Die Spalte mit dem Fehler (oder 0) * Mit ESACK best„tigt der Editor die Meldung. *) SEERRFILE *= 4205H; (* Es sind Fehler aufgetreten. Die Fehlermeldungen stehen in einem * Errorfile, welches in der Message spezifiziert wird. * Wort 3+4: Ein Zeiger auf den Filenamen des Errorfiles mit den * Fehlermeldungen * Wort 5+6: Ein Zeiger auf den Namen des compilierten Textes * Mit ESACK best„tigt der Editor die Meldung. *) SEPROJECT *= 4206H; (* Die Shell teilt dem Editor mit, daž das Projekt * ge„ndert wurde. Der Filename des aktuellen * Projektfiles wird als Parameter bergeben * Wort 3+4: Ein Zeiger auf den Namen des Projektfiles (oder NULL!) * Der Editor best„tigt mit ESACK. * Eine vernnftige Reaktion des Editors w„re es in dem Fall, * ebenfalls das Projekt zu wechseln, sofern er diese untersttzt. *) SEQUIT *= 4207H; (* Die Shell teilt dem Editor mit, daž sie jetzt beendet wird. * Der Editor sollte in dem Fall die Shell als Kommunikationspartner * vergessen. * Parameter gibt es keine. * Es wird keine Antwort erwartet! *) SETERMINATE *= 4208H; (* Die Shell teilt dem Editor mit, daž dieser sich beenden soll. * Der Editor sollte in dem Fall sich selbst beenden und seinen ganz * normalen Terminierungsprozež durchlaufen (und in dem auch ein ESQUIT * schicken!). Der Grund fr so eine Meldung der Shell k”nnte zum Beispiel * zu wenig Speicher zum compilieren sein. * Mit ESACK best„tigt der Editor die Meldung. *) SECLOSE *= 4209H; (* Die Shell teilt dem Editor mit, daž dieser alle Texte schliežen soll. * Der Editor sollte bei ge„nderten Texten vorher nachfragen. * Wort 3+4: Ein Zeiger auf den Namen einer Datei oder eine Dateimaske. * Bei '*.*', alle Textfenster. * Wort 5: 0 = nur sichern, 1 = sicher und schliežen * Mit ESACK best„tigt der Editor die Meldung. *) SEMENU *= 420AH; (* Die Shell teilt dem Editor mit, was er in sein Men fr die einzelnen * Programme eintragen soll. * Wort 3+4: Ein Zeiger auf die entsprechende Struktur (s.u.) *) ESINIT *= 4240H; (* Ein Editor fragt an, ob eine Shell das SE-Protokoll versteht. * Wort 3: Ein Bitset, welche Shellnachrichten verstanden werden * Wort 4+5: Ein Bitset, welche Editorkommandos versendet werden * Wort 6: Untersttze Versionsnummer des Protokolls * Als Antwort erh„lt es SEOK von der Shell *) ESOK *= 4241H; (* Der Editor beantwortet die Anfrage der Shell nach dem Protokoll. * Wort 3: Ein Bitset, welche Shellnachrichten verstanden werden * Wort 4+5: Ein Bitset, welche Editorkommandos versendet werden * Wort 6: Untersttze Versionsnummer des Protokolls * Wort 7: Die ApId des Programmes, dessen Nachricht beantwortet wird *) ESACK *= 4242H; (* Der Editor best„tigt den Empfang des Kommandos * Wort 3: TRUE: Kommando wird verstanden und ausgefhrt. * FALSE: Das Kommando wird nicht verstanden * Eine ESACK mit TRUE sagt nichts darber aus, ob das Kommando erfolg- * reich ausgefhrt wurde. Es sagt nur, daž der Editor das Kommando * versteht und ausfhren wird! *) ESCOMPILE *= 4243H; (* Der Editor sagt der Shell, daž sie ein File bersetzen soll. * Ein Pointer auf den Dateinamen wird in der Message bergeben. * Wort 3+4: Zeiger auf den Namen der zu compilierenden Datei (oder NIL). * Diese Nachricht muž mit SEACK best„tigt werden. *) ESMAKE *= 4244H; (* Der Editor sagt der Shell, daž sie ein Make ausfhren soll. * Ein Filename kann in der Message bergeben werden, muž aber * nicht gesetzt sein und muž von der Shell auch nicht beachtet * werden! * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NIL) * Die Shell best„tigt mit SEACK. *) ESMAKEALL *= 4245H; (* Der Editor sagt der Shell, daž ein komplettes Make All ausgefhrt * werden soll. Ein Filename fr das Makefile kann (muž nicht) in * der Message bergeben werden. * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NIL) * Die Shell best„tigt mit SEACK. *) ESLINK *= 4246H; (* Der Editor sagt der Shell, daž das Programm * gelinkt werden soll. Ein Filename kann * in der Message bergeben werden, muž aber * nicht unbedingt beachtet werden von der Shell! * Wort 3+4: Zeiger auf den Namen der Source, die gelinkt werden soll * (oder NULL) * Die Shell best„tigt mit SEACK. *) ESEXEC *= 4247H; (* Der Editor sagt der Shell, daž das Programm * zu der Source ausgefhrt werden soll. Ein * Filename kann bergeben werden, muž von der * Shell aber nicht beachtet werden. * Wort 3+4: Zeiger auf den Namen des auszufhrenden Files (oder NIL) * Bei einer Sourcedatei ist diese ggf. noch zu * compilieren und/oder zu linken * Die Shell best„tigt mit SEACK. *) ESMAKEEXEC *= 4248H; (* Die Shell soll ein Make ausfhren und danach das Programm ausfhren. * Ein Filename fr das Makefile kann (muž nicht) in der Message * bergeben werden. * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NIL) * Die Shell best„tigt mit SEACK. *) ESPROJECT *= 4249H; (* Der Editor teilt der Shell mit, daž das Project * ge„ndert/gewechselt wurde. Der Filename des * Projektfiles wird als Parameter in der Message * bergeben. * Wort 3+4: Zeiger auf den Namen des Projektfiles (oder NIL!) * Die Shell best„tigt mit SEACK. * Eine vernnftige Reaktion der Shell w„re in dem Fall, ebenfalls * das Projekt zu wechseln, sofern es diese untersttzt. *) ESQUIT *= 424AH; (* Der Editor teilt der Shell mit, daž er jetzt beendet wird. * Die Shell sollte in dem Fall den Editor als Kommunikationspartner * vergessen. * Parameter gibt es keine. * Es wird keine Antwort erwartet! *) ES_SHLCTRL *= 424BH; (* * Sonstige Kontrolle der Shell durch den Editors. * Wort 3+4 Zeiger auf den Namen des obersten Fensters oder NULL. * Wort 5 Steuer-Flag: * 0: Shell soll sich toppen (Men/Fenster). * Die Shell best„tigt mit SE_ACK. *) SEDATA *= 0; (* Nur fr Typdeklaration benutzt, eigentlich berflssig *) (* Die Bits fr SE_INIT/ES_INIT *) seINIT *= 0; seOK *=1; seACK *=2; seOPEN *=3; seERROR *=4; seERRFILE *=5; sePROJECT *=6; seQUIT *=7; seTERMINATE*=8; seCLOSE *=9; seMENU *=10; esINIT *=0; esOK *=1; esACK *=2; esCOMPILE *=3; esMAKE *=4; esMAKEALL *=5; esLINK *=6; esEXEC *=7; esMAKEEXEC *=8; esPROJECT *=9; esQUIT *=10; esSHLCTRL *=11; TYPE ShellSet* = SET; EditSet* = SET; ErrInfo* = RECORD errFile* : Str.ptr; (* Zeiger auf den Namen der compilierten Datei *) errMess* : Str.ptr; (* Zeiger auf die Fehlermeldung *) errNum* : INTEGER; (* Die Fehlernummer *) errLine* : LONGINT; (* Die fehlerhafte Zeile *) errRow* : INTEGER; (* Die Spalte mit dem Fehler (oder 0) *) END; PtrErrInfo* = POINTER TO ErrInfo; MenuInfo* = RECORD compStr* : Str.ptr; makeStr* : Str.ptr; makeAllStr* : Str.ptr; linkStr* : Str.ptr; execStr* : Str.ptr; makeExecStr* : Str.ptr; progName* : Str.ptr; shellCtrlStr* : Str.ptr; END(*RECORD*); PtrMenuInfo*= POINTER TO MenuInfo; END SEProtocol.zum Anfang
![]() |
English version not yet available. |