Atari Logo
Atari Computer

Hauptseite -
Welches System? -
Hardware -
Software -
Emulatoren -
Internet
MausNet
Programmieren
Verweise
Über

Beispiel: seproto

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


seproto.h

/* 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

seproto.i

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

seproto.def

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

seproto.pas

(* 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

seproto.mod

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


Best viewed with any browser English version not yet available.

Änderungen und Irrtümer vorbehalten. Letzte Änderung:
14 September 2001.
Home - Mail an den Webmaster - Impressum