home *** CD-ROM | disk | FTP | other *** search
/ ST-Computer Leser 1998 October / STC_CD_10_1998.iso / BASE / SEPROTO / SEPROTO.U < prev    next >
Text File  |  1998-09-26  |  33KB  |  1,096 lines

  1. # ########################################################################
  2. # @(#)seproto.u, Dirk Haun, 04.01.1998
  3. # Beschreibung des SE-Protokolls
  4. # ########################################################################
  5. # Geschrieben mit UDO Release 6 PL 7
  6. # ########################################################################
  7.  
  8. !language german
  9.  
  10. !docinfo [author]  Dirk Haun
  11. !docinfo [address] Europastr. 8
  12. !docinfo [address] D-64569 Nauheim
  13. !docinfo [address] ~
  14. !docinfo [address] Dirk Haun @ WI2
  15.  
  16. !docinfo [title]   Dokumentation zum
  17. !docinfo [program] SE-Protokoll
  18. !docinfo [version] Version 1.05
  19. !docinfo [date]    04.01.1998
  20.  
  21. !hyphen Edi!-tor
  22. !hyphen File!-name
  23. !hyphen Kom!-man!-do
  24. !hyphen Multi!-tasking
  25. !hyphen Pro!-to!-koll
  26. !hyphen schic!-ken
  27. !hyphen Zei!-ger
  28.  
  29. !raw [stg] @subject "Programmieren/Atari"
  30. !raw [stg] @options "+i +f +z"
  31.  
  32. !raw [stg] @extern "Chatwin"  CHATWIN.HYP/Main
  33. !raw [stg] @extern "Everest"  EVEREST.HYP
  34. !raw [stg] @extern "Fred"     FRED.HYP/Main
  35. !raw [stg] @extern "PC-Shell" PC_SHELL.HYP/Main
  36. !raw [stg] @extern "qed"      QED.HYP/Main
  37. !raw [stg] @extern "SE-Lib"   SELIB.HYP/Main
  38.  
  39. !raw [stg] @extern "Mxalloc"     TOS.HYP/Mxalloc
  40. !raw [stg] @extern "appl_write"  TOS.HYP/appl_write
  41. !raw [stg] @extern "appl_search" TOS.HYP/appl_search
  42.  
  43. !raw [stg] @extern "XAcc-Protokoll" XACC.HYP/Main
  44.  
  45. !use_nodes_inside_index [all]
  46. !use_label_inside_index [all]
  47. !use_alias_inside_index [all]
  48.  
  49. !no_effects asc
  50. !begin_document
  51.  
  52. !maketitle
  53. !tableofcontents
  54.  
  55. # ########################################################################
  56. !node Einleitung
  57. Sinn des SE-Protokolls ist die Kommunikation zwischen Shells zur 
  58. Pro!-gramm!-ent!-wicklung und Editoren, daher auch der Name: 
  59. Shell-Editor-Protokoll.
  60.  
  61. Dieses Protokoll dient dazu, unter Multitasking-Systemen die Shell vom 
  62. Editor aus zur Compilierung und ähnlichen Aktionen zu ver!-an!-lassen, 
  63. und um von der Shell Fehlermeldungen und/oder Fehlerdateien an den 
  64. Editor zurückzugeben.
  65.  
  66. Kommandos bzw. Nachrichten von der Shell an den Editor beginnen mit 
  67. (!V)SE_(!v), Nachrichten vom Editor an die Shell beginnen mit 
  68. (!V)ES_(!v).
  69.  
  70. Die aktuelle Versionsnummer des Protokolls ist 1.05.
  71.  
  72. !ifdest stg
  73. Bitte lesen Sie auch !..
  74. !subtoc stg
  75. !endif
  76.  
  77.  
  78. # ========================================================================
  79. !subnode Kontaktaufnahme
  80. Die Kontaktaufnahme läuft wie folgt ab:
  81.  
  82. Die Shell verschickt nach dem Start die Nachricht (!V)SE_INIT(!v). Als 
  83. Ant!-wort erhält sie darauf die Nachricht (!V)ES_OK(!v). Aus den 
  84. Bitfeldern in den bei!-den Nachrichten kann die Shell nun ableiten, 
  85. welche Kommandos sie an den Editor schicken kann und welche Kommandos 
  86. vom Editor zu er!-war!-ten sind. Wenn die Shell nicht mehr am 
  87. SE-Protokoll teilnehmen will (z.B. weil sie beendet wird), dann 
  88. schickt sie die Nachricht (!V)SE_QUIT(!v) an den Editor.
  89.  
  90. Der Editor verschickt nach dem Start die Nachricht (!V)ES_INIT(!v). 
  91. Als Ant!-wort erhält sie darauf die Nachricht (!V)SE_OK(!v). Aus den 
  92. Bitfeldern in den beiden Nachrichten kann der Editor nun ableiten, 
  93. welche Kommandos er an die Shell schicken kann und welche Kommandos 
  94. von der Shell zu er!-war!-ten sind. Wenn der Editor nicht mehr am 
  95. SE-Protokoll teilnehmen will (z.B. weil er beendet wird), dann schickt 
  96. er die Nachricht (!V)ES_QUIT(!v) an die Shell.
  97.  
  98. Bleibt die Frage, an wen Shell und Editor diese Nachrichten schicken 
  99. sollen. Das SE-Protokoll ist sinnvoll am ehesten unter einem 
  100. Multitasking-System einsetzbar, dort wird normalerweise die 
  101. AES-Funktion (!V)appl_search()(!v) zur Verfügung stehen. Shell und 
  102. Editor sollten also ein!-fach ihre jeweilige Init-Nachricht an alle 
  103. Prozesse (au₧er an System!-pro!-zesse) schicken.
  104.  
  105. Andere Möglichkeiten:
  106. !begin_itemize
  107.  !item Wenn die Shell den Namen ihres Editors kennt, kann sie sich 
  108.        na!-tür!-lich auch darauf beschränken, (!V)SE_INIT(!v) nur an 
  109.        diesen zu schicken.
  110.  
  111. !index XAcc-Protokoll
  112.  !item Wenn die Funktion (!V)appl_search()(!v) nicht zur Verfügung 
  113.        steht, bie!-tet sich das XAcc-Protokoll zur Kontaktaufnahme an: 
  114.        Shell und Editor sollten ihre Init-Nachrichten dann einfach an 
  115.        jeden Pro!-ze₧ schicken, der sich per XAcc anmeldet. Das 
  116.        XAcc-Protokoll sieht au₧er!-dem noch eine maschinenlesbare 
  117.        Kennung des Pro!-gramm!-typs (XDSC) vor, so da₧ man u.U. sogar 
  118.        erkennen kann, ob es sich bei dem 
  119.        Kom!-mu!-ni!-ka!-ti!-ons!-part!-ner um eine Shell (Kennung 
  120.        ''PE'' für ""Pro!-gramming En!-vi!-ron!-ment"") oder um einen 
  121.        Editor (Kennung ''ED'' für ""Text Editor"") handelt.
  122. !end_itemize
  123.  
  124.  
  125. # ========================================================================
  126. !subnode Anmerkungen
  127. !index Nachricht
  128.  
  129. Wenn im folgenden von einer ""Nachricht"" die Rede ist, dann ist damit 
  130. eine AES-Nachricht gemeint, die aus 8 Worten (Integers) besteht und 
  131. mit der AES-Funktion (!V)appl_write()(!v) verschickt wird. Das erste 
  132. Wort ent!-hält jeweils die Nummer der Nachricht, das zweite die 
  133. Ap!-pli!-ka!-ti!-ons-ID des Absenders, das dritte ist immer Null. Die 
  134. Be!-le!-gung der anderen Worte ist von der jeweiligen Nachricht 
  135. abhängig. Worte, für die keine Belegung angegeben wird, sind auf Null 
  136. zu setzen.
  137.  
  138. (!B)Bitte beachten:(!b) Da die Zählung bei 0 beginnt, ist mit ""Wort 
  139. 3"" im fol!-gen!-den das (!I)vierte(!i) Wort gemeint!
  140.  
  141. Zur Verdeutlichung nochmals in C:
  142. !begin_quote
  143. !begin_verbatim
  144.  int msg[8];
  145.  
  146.  msg[0] = SE_ACK;   /* Nachricht                         */
  147.  msg[1] = gl_apid;  /* ID des Absenders                  */
  148.  msg[2] = 0;        /* 0, d.h. keine Überlänge           */
  149.  msg[3] = TRUE;     /* dies ist "Wort 3"                 */
  150.  msg[4] = msg[5] = msg[6] = msg[7] = 0; /* Rest auf Null */
  151.  appl_write (editor, 16, msg);          /* abschicken    */
  152. !end_verbatim
  153. !end_quote
  154.  
  155. !smallskip
  156.  
  157. !index Zeiger
  158. Wenn in einer Nachricht ein Zeiger (d.h. eine Adresse) enthalten ist,
  159. dann wird das obere Wort der Adresse im ersten und das untere Wort im
  160. zweiten der angegebenen Worte übergeben.
  161.  
  162. Bei den Zeigern auf Speicherbereiche ist vom jeweiligen Absender der
  163. Nachricht darauf zu achten, da₧ diese Speicherbereiche vom Empfänger
  164. auch lesbar sind (Memory Protection!). Dafür sind diese als ""Read!-able""
  165. zu allozieren! Das geschieht über den Gemdos-Aufruf Mxalloc().
  166.  
  167. !smallskip
  168.  
  169. !index Zeilennummern
  170. Bei einigen Nachrichten können Zeilen- und Spaltennummern für eine 
  171. Cursorposition übergeben werden. Da es unterschiedliche Auffassungen 
  172. darüber gibt, ob Zeilen und/oder Spalten ab Null oder ab Eins gezählt 
  173. werden, wird empfohlen, diese Angaben vor der Übernahme zu überprüfen 
  174. und ggfs. zu korrigieren. Wenn der Editor seine Zeilen also ab Eins 
  175. zählt, dann sollte ihn die Zeilennummer Null nicht aus der Fassung 
  176. bringen, sondern er sollte sie wie Zeile Eins behandeln.
  177.  
  178.  
  179. # ########################################################################
  180. !node Nachrichten der Shell an den Editor
  181. Die Shell kann folgende Nachrichten bzw. Kommandos an den Editor
  182. sen!-den:
  183.  
  184. !begin_quote
  185. !begin_verbatim
  186.  Nachricht     Nummer
  187. ----------------------
  188.  SE_INIT       0x4200
  189.  SE_OK         0x4201
  190.  SE_ACK        0x4202
  191.  SE_OPEN       0x4203
  192.  SE_ERROR      0x4204
  193.  SE_ERRFILE    0x4205
  194.  SE_PROJECT    0x4206
  195.  SE_QUIT       0x4207
  196.  SE_TERMINATE  0x4208
  197.  SE_CLOSE      0x4209
  198.  SE_MENU       0x420A
  199. !end_verbatim
  200. !end_quote
  201.  
  202.  
  203. # ========================================================================
  204. !subnode SE_INIT
  205. !raw [stg] @xref ES_OK
  206. !raw [stg] @xref SE_QUIT
  207. Die Shell fragt an, ob ein Editor das SE-Protokoll versteht.
  208.  
  209. !smallskip
  210.  
  211. (!U)Aufbau der Nachricht(!u)
  212. !begin_xlist [Wort 4+5:~]
  213.  !item [Wort 3]: Ein Bitset, welche Nachrichten die Shell versendet:
  214.  
  215.      !begin_verbatim
  216.       Nachricht    Bit  Hex-Wert
  217.      ----------------------------
  218.       SE_INIT       0    0x0001
  219.       SE_OK         1    0x0002
  220.       SE_ACK        2    0x0004
  221.       SE_OPEN       3    0x0008
  222.       SE_ERROR      4    0x0010
  223.       SE_ERRFILE    5    0x0020
  224.       SE_PROJECT    6    0x0040
  225.       SE_QUIT       7    0x0080
  226.       SE_TERMINATE  8    0x0100
  227.       SE_CLOSE      9    0x0200
  228.       SE_MENU      10    0x0400
  229.      !end_verbatim
  230.  
  231.  !item [Wort 4+5]: Ein Bitset, welche Editorkommandos verstanden werden
  232.  
  233.      !begin_verbatim
  234.       Nachricht   Bit  Hex-Wert
  235.      ---------------------------
  236.       ES_INIT      0    0x0001
  237.       ES_OK        1    0x0002
  238.       ES_ACK       2    0x0004
  239.       ES_COMPILE   3    0x0008
  240.       ES_MAKE      4    0x0010
  241.       ES_MAKEALL   5    0x0020
  242.       ES_LINK      6    0x0040
  243.       ES_EXEC      7    0x0080
  244.       ES_MAKEEXEC  8    0x0100
  245.       ES_PROJECT   9    0x0200
  246.       ES_QUIT     10    0x0400
  247.       ES_SHLCTRL  11    0x0800
  248.      !end_verbatim
  249.      
  250.      (!B)Hinweis:(!b) Wort 4 und 5 bilden zusammen ein Langwort. Da 
  251.      für die bisher definierten Nachrichten aber nur 12 Bits benötigt 
  252.      werden, ist Wort 4 normalerweise Null.
  253.  
  254.  !item [Wort 6]: Unterstützte Versionsnummer des Protokolls als BCD-Zahl,
  255.                  also 0x0105 (hexadezimal) für Version 1.05
  256. !end_xlist
  257.  
  258. !smallskip
  259.  
  260. (!U)Antwort(!u)
  261.  
  262. Der Editor antwortet mit der Nachricht ES_OK.
  263.  
  264. !smallskip
  265.  
  266. (!B)siehe auch:(!b) ES_OK, SE_QUIT
  267.  
  268.  
  269. # ========================================================================
  270. !subnode SE_OK
  271. !raw [stg] @xref ES_INIT
  272. Die Shell sagt dem Editor, da₧ sie das Protokoll versteht.
  273.  
  274. !smallskip
  275.  
  276. (!U)Aufbau der Nachricht(!u)
  277. !begin_xlist [Wort 4+5:~]
  278.  !item [Wort 3]: Ein Bitset, welche Nachrichten die Shell versendet:
  279.  
  280.      !begin_verbatim
  281.       Nachricht    Bit  Hex-Wert
  282.      ----------------------------
  283.       SE_INIT       0    0x0001
  284.       SE_OK         1    0x0002
  285.       SE_ACK        2    0x0004
  286.       SE_OPEN       3    0x0008
  287.       SE_ERROR      4    0x0010
  288.       SE_ERRFILE    5    0x0020
  289.       SE_PROJECT    6    0x0040
  290.       SE_QUIT       7    0x0080
  291.       SE_TERMINATE  8    0x0100
  292.       SE_CLOSE      9    0x0200
  293.       SE_MENU      10    0x0400
  294.      !end_verbatim
  295.  
  296.  !item [Wort 4+5]: Ein Bitset, welche Editorkommandos verstanden werden:
  297.  
  298.      !begin_verbatim
  299.       Nachricht   Bit  Hex-Wert
  300.      ---------------------------
  301.       ES_INIT      0    0x0001
  302.       ES_OK        1    0x0002
  303.       ES_ACK       2    0x0004
  304.       ES_COMPILE   3    0x0008
  305.       ES_MAKE      4    0x0010
  306.       ES_MAKEALL   5    0x0020
  307.       ES_LINK      6    0x0040
  308.       ES_EXEC      7    0x0080
  309.       ES_MAKEEXEC  8    0x0100
  310.       ES_PROJECT   9    0x0200
  311.       ES_QUIT     10    0x0400
  312.       ES_SHLCTRL  11    0x0800
  313.      !end_verbatim
  314.  
  315.      (!B)Hinweis:(!b) Wort 4 und 5 bilden zusammen ein Langwort. Da 
  316.      für die bisher definierten Nachrichten aber nur 12 Bits benötigt 
  317.      werden, ist Wort 4 normalerweise Null.
  318.  
  319.  !item [Wort 6]: Unterstützte Versionsnummer des Protokolls als BCD-Zahl,
  320.                  also 0x0105 (hexadezimal) für Version 1.05
  321.  
  322.  !item [Wort 7]: Die ApId des Programmes, dessen Nachricht beantwortet wird
  323. !end_xlist
  324.  
  325. !smallskip
  326.  
  327. (!U)Antwort(!u)
  328.  
  329. Keine. (!V)SE_OK(!v) ist bereits die Antwort der Shell auf die Nachricht
  330. (!V)ES_INIT(!v).
  331.  
  332.  
  333. # ========================================================================
  334. !subnode SE_ACK
  335. Die Shell bestätigt den Empfang eines Editorkommandos und gibt zu!-rück,
  336. ob das Kommando ausgeführt wird.
  337.  
  338. !smallskip
  339.  
  340. (!U)Aufbau der Nachricht(!u)
  341. !begin_xlist [Wort 4+5:~]
  342.  !item [Wort 3]: (!V)TRUE(!v)~: Kommando wird verstanden und ausgeführt, (!nl)
  343.                  (!V)FALSE(!v): Das Kommando wird nicht verstanden
  344.  
  345.   Ein (!V)SE_ACK(!v) mit (!V)TRUE(!v) sagt nichts darüber aus, ob das
  346.   Kommando erfolgreich ausgeführt wurde. Es sagt nur, da₧ die Shell das
  347.   Kommando versteht und ausführen wird!
  348. !end_xlist
  349.  
  350. !smallskip
  351.  
  352. (!U)Antwort(!u)
  353.  
  354. Keine ((!V)SE_ACK(!v) ist bereits die Antwort auf eine Nachricht).
  355.  
  356. # ========================================================================
  357. !subnode SE_OPEN
  358. !raw [stg] @xref ES_ACK
  359. Die Shell sagt dem Editor, da₧ er einen Text öffnen soll.
  360.  
  361. !smallskip
  362.  
  363. (!U)Aufbau der Nachricht(!u)
  364. !begin_xlist [Wort 4+5:~]
  365.  !item [Wort 3+4]: Ein Zeiger auf den Filenamen des zu öffnenden Files
  366.  !item [Wort 5+6]: Zeile, in die der Cursor positioniert werden soll
  367.  !item [Wort 7]:   Spalte, in die der Cursor positioniert werden soll
  368. !end_xlist
  369.  
  370. !smallskip
  371.  
  372. (!U)Antwort(!u)
  373.  
  374. Als Antwort erhält die Shell ein ES_ACK.
  375.  
  376. !smallskip
  377.  
  378. (!B)Hinweise:(!b) Die Angabe einer Zeilen- und Spaltennummer ist erst 
  379. ab Protokollversion 1.02 vorgesehen. Programme, die noch ältere 
  380. Protokoll!-ver!-si!-onen verwenden, sollten aber eigentlich die Worte 
  381. 5-7 auf Null ge!-setzt haben. Will man ganz sicher gehen, mu₧ man 
  382. ggfs. die bei (!V)SE_INIT(!v) bzw. (!V)SE_OK(!v) übergebene 
  383. Versionsnummer der Shell abfragen.
  384.  
  385. Wenn die Shell keine Positionsangabe machen kann oder will, sollte sie 
  386. Zeile und Spalte auf Null setzen.
  387.  
  388.  
  389. # ========================================================================
  390. !subnode SE_ERROR
  391. !raw [stg] @xref ES_ACK
  392. Es ist ein Fehler beim Compilieren aufgetreten.
  393.  
  394. !smallskip
  395.  
  396. (!U)Aufbau der Nachricht(!u)
  397. !begin_xlist [Wort 4+5:~]
  398.  !item [Wort 3+4]: Ein Zeiger auf eine Infostruktur, die wie folgt
  399.                    auf!-ge!-baut ist:
  400. !end_xlist
  401.  
  402. !label ERRINFO
  403. !begin_verbatim
  404.     typedef struct
  405.     {
  406.       char *errFile; /* Zeiger auf den Namen der compilierten Datei */
  407.       char *errMess; /* Zeiger auf die Fehlermeldung                */
  408.       int errNum;    /* Die Fehlernummer                            */
  409.       long errLine;  /* Die fehlerhafte Zeile                       */
  410.       int errRow;    /* Die Spalte mit dem Fehler (oder 0)          */
  411.     } ERRINFO;
  412. !end_verbatim
  413.  
  414. !smallskip
  415.  
  416. (!U)Antwort(!u)
  417.  
  418. Mit (!V)ES_ACK(!v) bestätigt der Editor die Meldung.
  419.  
  420. !smallskip
  421.  
  422. (!B)Hinweis:(!b) Wenn die Shell keine Positionsangabe machen kann oder 
  423. will, sollte sie Zeile und Spalte auf Null setzen.
  424.  
  425.  
  426. # ========================================================================
  427. !subnode SE_ERRFILE
  428. !raw [stg] @xref ES_ACK
  429. Es sind Fehler aufgetreten. Die Fehlermeldungen stehen in einem
  430. Error!-file, welches in der Message spezifiziert wird.
  431.  
  432. !smallskip
  433.  
  434. (!U)Aufbau der Nachricht(!u)
  435. !begin_xlist [Wort 4+5:~]
  436.  !item [Wort 3+4]: Ein Zeiger auf den Filenamen des Errorfiles mit den
  437.                    Fehler!-meldungen
  438.  !item [Wort 5+6]: Ein Zeiger auf den Namen des compilierten Textes
  439. !end_xlist
  440.  
  441. !smallskip
  442.  
  443. (!U)Antwort(!u)
  444.  
  445. Mit ES_ACK bestätigt der Editor die Meldung.
  446.  
  447.  
  448. # ========================================================================
  449. !subnode SE_PROJECT
  450. !raw [stg] @xref ES_ACK
  451. Die Shell teilt dem Editor mit, da₧ das Projekt geändert wurde. Der
  452. Filename des aktuellen Projektfiles wird als Parameter übergeben. Wird 
  453. (!V)NULL(!v) übergeben, sollte das aktuelle Projekt abgemeldet werden.
  454.  
  455. Eine vernünftige Reaktion des Editors wäre es in dem Fall, ebenfalls das
  456. Projekt zu wechseln, sofern er dies unterstützt.
  457.  
  458. !smallskip
  459.  
  460. (!U)Aufbau der Nachricht(!u)
  461. !begin_xlist [Wort 4+5:~]
  462.  !item [Wort 3+4]: Ein Zeiger auf den Namen des Projektfiles oder 
  463.                    (!V)NULL(!v).
  464. !end_xlist
  465.  
  466. !smallskip
  467.  
  468. (!U)Antwort(!u)
  469.  
  470. Der Editor bestätigt mit ES_ACK.
  471.  
  472. !smallskip
  473.  
  474. (!B)Hinweis:(!b) Den Namen des Projektfiles auf (!V)NULL(!v) zu 
  475. setzen, ist erst ab Protokollversion 1.01 vorgesehen. Die Shell sollte 
  476. daher vorher über!-prüfen, ob der Editor mindestens Protokollversion 
  477. 1.01 unter!-stützt.
  478.  
  479.  
  480. # ========================================================================
  481. !subnode SE_QUIT
  482. Die Shell teilt dem Editor mit, da₧ sie jetzt beendet wird. Der Editor
  483. sollte in dem Fall die Shell als Kommunikationspartner vergessen.
  484.  
  485. !smallskip
  486.  
  487. (!U)Aufbau der Nachricht(!u)
  488. !begin_description
  489.  !item [keine Parameter]
  490. !end_description
  491.  
  492. !smallskip
  493.  
  494. (!U)Antwort(!u)
  495.  
  496. Es wird keine Antwort erwartet!
  497.  
  498.  
  499. # ========================================================================
  500. !subnode SE_TERMINATE
  501. !raw [stg] @xref ES_ACK
  502. Die Shell teilt dem Editor mit, da₧ dieser sich beenden soll. Der Editor
  503. sollte in dem Fall sich selbst beenden und seinen ganz nor!-ma!-len
  504. Terminierungsproze₧ durchlaufen (und dabei auch ein (!V)ES_QUIT(!v)
  505. ver!-schic!-ken!). Der Grund für so eine Meldung der Shell könnte zum
  506. Bei!-spiel zu wenig Speicher zum Compilieren sein.
  507.  
  508. !smallskip
  509.  
  510. (!U)Aufbau der Nachricht(!u)
  511. !begin_description
  512.  !item [keine Parameter]
  513. !end_description
  514.  
  515. !smallskip
  516.  
  517. (!U)Antwort(!u)
  518.  
  519. Mit ES_ACK bestätigt der Editor die Meldung.
  520.  
  521.  
  522. # ========================================================================
  523. !subnode SE_CLOSE
  524. !raw [stg] @xref ES_ACK
  525. Die Shell teilt dem Editor mit, da₧ dieser bestimmte Texte sichern 
  526. bzw. schlie₧en soll. Beim Schlie₧en von geänderten Texten sollte der 
  527. Editor vorher nachfragen.
  528.  
  529. !smallskip
  530.  
  531. (!U)Aufbau der Nachricht(!u)
  532. !begin_xlist [Wort 4+5:~]
  533.  !item [Wort 3+4]: Ein Zeiger auf den Namen einer Datei oder eine 
  534.                    Datei!-maske. ""(!V)*.*(!v)"" steht für alle 
  535.                    Textfenster (entspricht also dem (!V)SE_CLOSE(!v) 
  536.                    der Protokollversion 1.00).
  537.  !item [Wort 5]:   0 = nur sichern (!nl)
  538.                    1 = sichern und schlie₧en (!nl)
  539.                    2 = schlie₧en ohne Sichern (ab Version 1.04)
  540. !end_xlist
  541.  
  542. !smallskip
  543.  
  544. (!U)Antwort(!u)
  545.  
  546. Mit ES_ACK bestätigt der Editor die Meldung.
  547.  
  548. !smallskip
  549.  
  550. (!B)Hinweis:(!b) In der Protokollversion 1.00 waren für 
  551. (!V)SE_CLOSE(!v) noch keine Parameter vorgesehen. Editoren, die nur 
  552. Version 1.00 unterstützen, werden daher die Dateimasken und das Flag 
  553. ignorieren und alle Texte sichern.
  554.  
  555.  
  556. # ========================================================================
  557. !subnode SE_MENU
  558. !raw [stg] @xref ES_ACK
  559. Die Shell teilt dem Editor mit, was er für die einzelnen Programme in 
  560. sein Menü eintragen soll. Der Editor kann somit für die Menüpunkte, 
  561. die eine Aktion in der Shell auslösen, die gleichen Texte wie die 
  562. Shell verwenden.
  563.  
  564. !smallskip
  565.  
  566. (!U)Aufbau der Nachricht(!u)
  567. !begin_xlist [Wort 4+5:~]
  568.  !item [Wort 3+4]: Ein Zeiger auf eine Infostruktur, die wie folgt 
  569.                    auf!-ge!-baut ist:
  570. !end_xlist
  571.  
  572. !label SEMENUINFO
  573. !begin_verbatim
  574.   typedef struct
  575.   {
  576.     char *compStr;      /* Text für den Menüpunkt "Compiler"       */
  577.     char *makeStr;      /* Text für den Menüpunkt "Makefile"       */
  578.     char *makeAllStr;   /* Text für den Menüpunkt "Make all"       */
  579.     char *linkStr;      /* Text für den Menüpunkt "Linker"         */
  580.     char *execStr;      /* Text für den Menüpunkt "Execute"        */
  581.     char *makeExecStr;  /* Text für den Menüpunkt "Make & Execute" */
  582.     char *progName;     /* Name der Shell (ab Version 1.04)        */
  583.     char *shellCtrlStr; /* Text für den Menüpunkt "Shell Control"  */
  584.                         /* (ab Version 1.05)                       */
  585.   } SEMENUINFO;
  586. !end_verbatim
  587.  
  588. !smallskip
  589.  
  590. (!U)Antwort(!u)
  591.  
  592. Mit ES_ACK bestätigt der Editor die Meldung.
  593.  
  594. !smallskip
  595.  
  596. (!B)Hinweise:(!b) Die Texte sind allesamt optional und können auch 
  597. (!V)NULL(!v) sein, wenn die Shell keinen entsprechenden Menüpunkt hat. 
  598. Dies bedeutet jedoch nicht, da₧ die Shell nicht über diese 
  599. Funktionalität verfügt. Der Editor sollte daher für alle Texte ggfs. 
  600. Defaulttexte einsetzen.
  601.  
  602. Diese Nachricht existiert erst ab Protokollversion 1.02. Es genügt 
  603. aber der Test, ob das entsprechende Bit in (!V)ES_INIT(!v) bzw. 
  604. (!V)ES_OK(!v) gesetzt ist.
  605.  
  606. Beim Zugriff auf (!V)progName(!v) und (!V)shellCtrlStr(!v) mu₧ darauf 
  607. geachtet werden, da₧ der Kommunikationspartner diese auch schon 
  608. unterstützt (Protokollversion testen)!
  609.  
  610.  
  611. # ########################################################################
  612. !node Nachrichten des Editors an die Shell
  613. Der Editor kann folgende Nachrichten bzw. Kommandos an die Shell sen!-den:
  614.  
  615. !begin_quote
  616. !begin_verbatim
  617.  Nachricht    Nummer
  618. ---------------------
  619.  ES_INIT      0x4240
  620.  ES_OK        0x4241
  621.  ES_ACK       0x4242
  622.  ES_COMPILE   0x4243
  623.  ES_MAKE      0x4244
  624.  ES_MAKEALL   0x4245
  625.  ES_LINK      0x4246
  626.  ES_EXEC      0x4247
  627.  ES_MAKEEXEC  0x4248
  628.  ES_PROJECT   0x4249
  629.  ES_QUIT      0x424A
  630.  ES_SHLCTRL   0x424B
  631. !end_verbatim
  632. !end_quote
  633.  
  634.  
  635. # ========================================================================
  636. !subnode ES_INIT
  637. !raw [stg] @xref SE_OK
  638. Ein Editor fragt an, ob eine Shell das SE-Protokoll versteht.
  639.  
  640. !smallskip
  641.  
  642. (!U)Aufbau der Nachricht(!u)
  643. !begin_xlist [Wort 4+5:~]
  644.  !item [Wort 3]: Ein Bitset, welche Shellnachrichten verstanden werden:
  645.  
  646.      !begin_verbatim
  647.       Nachricht    Bit  Hex-Wert
  648.      ----------------------------
  649.       SE_INIT       0    0x0001
  650.       SE_OK         1    0x0002
  651.       SE_ACK        2    0x0004
  652.       SE_OPEN       3    0x0008
  653.       SE_ERROR      4    0x0010
  654.       SE_ERRFILE    5    0x0020
  655.       SE_PROJECT    6    0x0040
  656.       SE_QUIT       7    0x0080
  657.       SE_TERMINATE  8    0x0100
  658.       SE_CLOSE      9    0x0200
  659.       SE_MENU      10    0x0400
  660.      !end_verbatim
  661.  
  662.  !item [Wort 4+5]: Ein Bitset, welche Editorkommandos versendet werden:
  663.  
  664.      !begin_verbatim
  665.       Nachricht   Bit  Hex-Wert
  666.      ---------------------------
  667.       ES_INIT      0    0x0001
  668.       ES_OK        1    0x0002
  669.       ES_ACK       2    0x0004
  670.       ES_COMPILE   3    0x0008
  671.       ES_MAKE      4    0x0010
  672.       ES_MAKEALL   5    0x0020
  673.       ES_LINK      6    0x0040
  674.       ES_EXEC      7    0x0080
  675.       ES_MAKEEXEC  8    0x0100
  676.       ES_PROJECT   9    0x0200
  677.       ES_QUIT     10    0x0400
  678.       ES_SHLCTRL  11    0x0800
  679.      !end_verbatim
  680.  
  681.      (!B)Hinweis:(!b) Wort 4 und 5 bilden zusammen ein Langwort. Da 
  682.      für die bisher definierten Nachrichten aber nur 12 Bits benötigt 
  683.      werden, ist Wort 4 normalerweise Null.
  684.  
  685.  !item [Wort 6]: Unterstützte Versionsnummer des Protokolls als BCD-Zahl,
  686.                  also 0x0105 (hexadezimal) für Version 1.05
  687. !end_xlist
  688.  
  689. !smallskip
  690.  
  691. (!U)Antwort(!u)
  692.  
  693. Als Antwort erhält der Editor (!V)SE_OK(!v) von der Shell.
  694.  
  695.  
  696. # ========================================================================
  697. !subnode ES_OK
  698. !raw [stg] @xref SE_INIT
  699. Der Editor beantwortet die Anfrage der Shell nach dem Protokoll.
  700.  
  701. !smallskip
  702.  
  703. (!U)Aufbau der Nachricht(!u)
  704. !begin_xlist [Wort 4+5:~]
  705.  !item [Wort 3]: Ein Bitset, welche Shellnachrichten verstanden werden:
  706.  
  707.      !begin_verbatim
  708.       Nachricht    Bit  Hex-Wert
  709.      ----------------------------
  710.       SE_INIT       0    0x0001
  711.       SE_OK         1    0x0002
  712.       SE_ACK        2    0x0004
  713.       SE_OPEN       3    0x0008
  714.       SE_ERROR      4    0x0010
  715.       SE_ERRFILE    5    0x0020
  716.       SE_PROJECT    6    0x0040
  717.       SE_QUIT       7    0x0080
  718.       SE_TERMINATE  8    0x0100
  719.       SE_CLOSE      9    0x0200
  720.       SE_MENU      10    0x0400
  721.      !end_verbatim
  722.  
  723.  !item [Wort 4+5]: Ein Bitset, welche Editorkommandos versendet werden:
  724.  
  725.      !begin_verbatim
  726.       Nachricht   Bit  Hex-Wert
  727.      ---------------------------
  728.       ES_INIT      0    0x0001
  729.       ES_OK        1    0x0002
  730.       ES_ACK       2    0x0004
  731.       ES_COMPILE   3    0x0008
  732.       ES_MAKE      4    0x0010
  733.       ES_MAKEALL   5    0x0020
  734.       ES_LINK      6    0x0040
  735.       ES_EXEC      7    0x0080
  736.       ES_MAKEEXEC  8    0x0100
  737.       ES_PROJECT   9    0x0200
  738.       ES_QUIT     10    0x0400
  739.       ES_SHLCTRL  11    0x0800
  740.      !end_verbatim
  741.  
  742.      (!B)Hinweis:(!b) Wort 4 und 5 bilden zusammen ein Langwort. Da 
  743.      für die bisher definierten Nachrichten aber nur 12 Bits benötigt 
  744.      werden, ist Wort 4 normalerweise Null.
  745.  
  746.  !item [Wort 6]: Unterstützte Versionsnummer des Protokolls als BCD-Zahl,
  747.                  also 0x0105 (hexadezimal) für Version 1.05
  748.  
  749.  !item [Wort 7]: Die ApId des Programmes, dessen Nachricht beantwortet wird
  750. !end_xlist
  751.  
  752. !smallskip
  753.  
  754. (!U)Antwort(!u)
  755.  
  756. Keine. (!V)ES_OK(!v) ist bereits die Antwort des Editors auf die Nachricht
  757. (!V)SE_INIT(!v).
  758.  
  759.  
  760. # ========================================================================
  761. !subnode ES_ACK
  762. Der Editor bestätigt den Empfang des Kommandos.
  763.  
  764. !smallskip
  765.  
  766. (!U)Aufbau der Nachricht(!u)
  767. !begin_xlist [Wort 4+5:~]
  768.  !item [Wort 3]: (!V)TRUE(!v)~: Kommando wird verstanden und ausgeführt, (!nl)
  769.                  (!V)FALSE(!v): Das Kommando wird nicht verstanden
  770.  
  771.   Ein (!V)ES_ACK(!v) mit (!V)TRUE(!v) sagt nichts darüber aus, ob das
  772.   Kommando erfolgreich ausgeführt wurde. Es sagt nur, da₧ der Editor das
  773.   Kommando versteht und ausführen wird!
  774. !end_xlist
  775.  
  776. !smallskip
  777.  
  778. (!U)Antwort(!u)
  779.  
  780. Keine ((!V)ES_ACK(!v) ist bereits die Antwort auf eine Nachricht).
  781.  
  782.  
  783. # ========================================================================
  784. !subnode ES_COMPILE
  785. !raw [stg] @xref SE_ACK
  786. Der Editor sagt der Shell, da₧ sie ein File übersetzen soll. Ein Zeiger
  787. auf den Dateinamen kann in der Nachricht übergeben werden.
  788.  
  789. !smallskip
  790.  
  791. (!U)Aufbau der Nachricht(!u)
  792. !begin_xlist [Wort 4+5:~]
  793.  !item [Wort 3+4]: Zeiger auf den Namen der zu compilierenden Datei 
  794.                    oder (!V)NULL(!v).
  795. !end_xlist
  796.  
  797. !smallskip
  798.  
  799. (!U)Antwort(!u)
  800.  
  801. Diese Nachricht mu₧ mit SE_ACK bestätigt werden.
  802.  
  803. !smallskip
  804.  
  805. (!B)Hinweis:(!b) Den Namen der zu compilierenden Datei auf 
  806. (!V)NULL(!v) zu setzen, ist erst ab Protokollversion 1.03 vorgesehen. 
  807. Der Editor sollte daher vorher über!-prüfen, ob die Shell mindestens 
  808. Protokollversion 1.03 unter!-stützt.
  809.  
  810.  
  811. # ========================================================================
  812. !subnode ES_MAKE
  813. !raw [stg] @xref SE_ACK
  814. Der Editor sagt der Shell, da₧ sie ein Make ausführen soll. Ein Filename
  815. kann in der Nachricht übergeben werden, mu₧ aber nicht gesetzt sein und
  816. mu₧ von der Shell auch nicht beachtet werden!
  817.  
  818. !smallskip
  819.  
  820. (!U)Aufbau der Nachricht(!u)
  821. !begin_xlist [Wort 4+5:~]
  822.  !item [Wort 3+4]: Zeiger auf den Namen des Makefiles (oder NULL)
  823. !end_xlist
  824.  
  825. !smallskip
  826.  
  827. (!U)Antwort(!u)
  828.  
  829. Die Shell bestätigt mit SE_ACK.
  830.  
  831.  
  832. # ========================================================================
  833. !subnode ES_MAKEALL
  834. !raw [stg] @xref SE_ACK
  835. Der Editor sagt der Shell, da₧ ein komplettes ""Make All"" ausgeführt
  836. wer!-den soll. Ein Filename für das Makefile kann (mu₧ aber nicht) in
  837. der Nachricht übergeben werden.
  838.  
  839. !smallskip
  840.  
  841. (!U)Aufbau der Nachricht(!u)
  842. !begin_xlist [Wort 4+5:~]
  843.  !item [Wort 3+4]: Zeiger auf den Namen des Makefiles (oder NULL)
  844. !end_xlist
  845.  
  846. !smallskip
  847.  
  848. (!U)Antwort(!u)
  849.  
  850. Die Shell bestätigt mit SE_ACK.
  851.  
  852.  
  853. # ========================================================================
  854. !subnode ES_LINK
  855. !raw [stg] @xref SE_ACK
  856. Der Editor sagt der Shell, da₧ das Programm gelinkt werden soll. Ein
  857. Filename kann in der Nachricht übergeben werden, mu₧ aber nicht
  858. un!-be!-dingt von der Shell beachtet werden!
  859.  
  860. !smallskip
  861.  
  862. (!U)Aufbau der Nachricht(!u)
  863. !begin_xlist [Wort 4+5:~]
  864.  !item [Wort 3+4]: Zeiger auf den Namen der Source, die gelinkt werden
  865.                    soll (oder NULL)
  866. !end_xlist
  867.  
  868. !smallskip
  869.  
  870. (!U)Antwort(!u)
  871.  
  872. Die Shell bestätigt mit SE_ACK.
  873.  
  874.  
  875. # ========================================================================
  876. !subnode ES_EXEC
  877. !raw [stg] @xref SE_ACK
  878. Der Editor sagt der Shell, da₧ das Programm zu der Source ausgeführt
  879. werden soll. Ein Filename kann übergeben werden, mu₧ von der Shell aber
  880. nicht beachtet werden.
  881.  
  882. !smallskip
  883.  
  884. (!U)Aufbau der Nachricht(!u)
  885. !begin_xlist [Wort 4+5:~]
  886.  !item [Wort 3+4]: Zeiger auf den Namen des auszuführenden Files
  887.                    (oder NULL).
  888.  
  889.                    Bei einer Sourcedatei ist diese ggf. noch zu
  890.                    compilieren und/oder zu linken
  891. !end_xlist
  892.  
  893. !smallskip
  894.  
  895. (!U)Antwort(!u)
  896.  
  897. Die Shell bestätigt mit SE_ACK.
  898.  
  899.  
  900. # ========================================================================
  901. !subnode ES_MAKEEXEC
  902. !raw [stg] @xref SE_ACK
  903. Die Shell soll ein Make ausführen und danach das Programm ausführen.
  904. Ein Filename für das Makefile kann (mu₧ aber nicht) in der Nachricht
  905. übergeben werden.
  906.  
  907. !smallskip
  908.  
  909. (!U)Aufbau der Nachricht(!u)
  910. !begin_xlist [Wort 4+5:~]
  911.  !item [Wort 3+4]: Zeiger auf den Namen des Makefiles (oder NULL)
  912. !end_xlist
  913.  
  914. !smallskip
  915.  
  916. (!U)Antwort(!u)
  917.  
  918. Die Shell bestätigt mit SE_ACK.
  919.  
  920.  
  921. # ========================================================================
  922. !subnode ES_PROJECT
  923. !raw [stg] @xref SE_ACK
  924. Der Editor teilt der Shell mit, da₧ das Projekt geändert/gewechselt
  925. wur!-de. Der Filename des Projektfiles wird als Parameter in der
  926. Nach!-richt übergeben. Wird (!V)NULL(!v) übergeben, sollte das 
  927. aktuelle Projekt abgemeldet werden.
  928.  
  929. Eine vernünftige Reaktion der Shell wäre in dem Fall, ebenfalls das
  930. Projekt zu wechseln, sofern sie dies unterstützt.
  931.  
  932. !smallskip
  933.  
  934. (!U)Aufbau der Nachricht(!u)
  935. !begin_xlist [Wort 4+5:~]
  936.  !item [Wort 3+4]: Zeiger auf den Namen des Projektfiles oder 
  937.                    (!V)NULL(!v)
  938. !end_xlist
  939.  
  940. !smallskip
  941.  
  942. (!U)Antwort(!u)
  943.  
  944. Die Shell bestätigt mit SE_ACK.
  945.  
  946. !smallskip
  947.  
  948. (!B)Hinweis:(!b) Den Namen des Projektfiles auf (!V)NULL(!v) zu 
  949. setzen, ist erst ab Protokollversion 1.01 vorgesehen. Der Editor 
  950. sollte daher vorher über!-prüfen, ob die Shell mindestens 
  951. Protokollversion 1.01 unter!-stützt.
  952.  
  953.  
  954. # ========================================================================
  955. !subnode ES_QUIT
  956. Der Editor teilt der Shell mit, da₧ er jetzt beendet wird. Die Shell
  957. sollte in dem Fall den Editor als Kommunikationspartner vergessen.
  958.  
  959. !smallskip
  960.  
  961. (!U)Aufbau der Nachricht(!u)
  962. !begin_description
  963.  !item [keine Parameter]
  964. !end_description
  965.  
  966. !smallskip
  967.  
  968. (!U)Antwort(!u)
  969.  
  970. Es wird keine Antwort erwartet!
  971.  
  972.  
  973. # ========================================================================
  974. !subnode ES_SHLCTRL
  975. Nachricht des Editors zur Kontrolle der Shell.
  976.  
  977. !smallskip
  978.  
  979. (!U)Aufbau der Nachricht(!u)
  980. !begin_xlist [Wort 4+5:~]
  981.  !item [Wort 3+4]: Zeiger auf den Namen des obersten Fensters des 
  982.                    Editors oder (!V)NULL(!v)
  983.  !item [Wort 5]:   Steuer-Flags: (!nl)
  984.                    Bit 0: Shell soll sich toppen (Menü/Fenster)
  985. !end_xlist
  986.  
  987. !smallskip
  988.  
  989. (!U)Antwort(!u)
  990.  
  991. Die Shell bestätigt mit SE_ACK.
  992.  
  993. !smallskip
  994.  
  995. (!B)Hinweis:(!b) Diese Nachricht existiert erst ab Protokollversion 
  996. 1.05. Die übrigen Bits von Wort 5 sind für zukünftige Erweiterungen 
  997. reserviert.
  998.  
  999.  
  1000. # ########################################################################
  1001. !node History
  1002.  
  1003. (!B)Version 1.05(!b) vom 23.12.1997
  1004. !begin_itemize
  1005.  !item neue Nachricht (!V)ES_SHLCTRL(!v)
  1006.  !item neuer Eintrag (!V)shellCtrlStr(!v) in der Struktur 
  1007.        (!V)SEMENUINFO(!v) bei (!V)SE_MENU(!v)
  1008. !end_itemize
  1009.  
  1010. !smallskip
  1011.  
  1012. (!B)Version 1.04(!b) vom 08.01.1997
  1013. !begin_itemize
  1014.  !item Flag 2 (""nur schlie₧en"") bei (!V)SE_CLOSE(!v)
  1015.  !item neuer Eintrag (!V)progName(!v) in der Struktur 
  1016.        (!V)SEMENUINFO(!v) bei (!V)SE_MENU(!v)
  1017. !end_itemize
  1018.  
  1019. !smallskip
  1020.  
  1021. (!B)Version 1.03(!b) vom 19.11.1996
  1022. !begin_itemize
  1023. !item bei (!V)ES_COMPILE(!v) kann der Zeiger auf den Dateinamen jetzt 
  1024.       auch (!V)NULL(!v) sein.
  1025. !end_itemize
  1026.  
  1027. !smallskip
  1028.  
  1029. (!B)Version 1.02(!b) vom 13.08.1996
  1030. !begin_itemize
  1031.  !item neue Nachricht (!V)SE_MENU(!v)
  1032.  !item bei (!V)SE_OPEN(!v) kann nun auch eine Zeile und eine Spalte 
  1033.        angegeben werden
  1034. !end_itemize
  1035.  
  1036. !smallskip
  1037.  
  1038. (!B)Version 1.01(!b) vom 30.01.1996
  1039. !begin_itemize
  1040.  !item Angabe von Dateimasken und Close-Flag bei (!V)SE_CLOSE(!v)
  1041.  !item Projektname bei (!V)SE_PROJECT(!v) und (!V)ES_PROJECT(!v) kann 
  1042.        auch (!V)NULL(!v) sein
  1043. !end_itemize
  1044.  
  1045. !smallskip
  1046.  
  1047. (!B)Version 1.00(!b) vom 17.01.1994
  1048. !begin_itemize
  1049.  !item erste öffentliche Version
  1050. !end_itemize
  1051.  
  1052.  
  1053. # ########################################################################
  1054. !node Autoren und Programme
  1055. Das SE-Protokoll wurde von Dirk Steins @ K2 und Frank Storm @ AC2 
  1056. ent!-wickelt, die Erweiterungen zu den neueren Protokollversionen 
  1057. stammen von Christian Felsch @ HH und Dirk Haun @ WI2.
  1058.  
  1059. Die Zahl der Programme, die das SE-Protokoll unterstützen, ist leider 
  1060. noch nicht allzu gro₧:
  1061. !begin_itemize
  1062.  !item Editoren:
  1063.   !begin_itemize
  1064.    !item Everest von Oliver Schmidt (ab Version 3.5)
  1065.    !item Fred von Dirk Steins
  1066.    !item qed von Christian Felsch (ab Version 3.3, ab Version 3.70 
  1067.          wird zudem Protokollversion 1.01 unterstützt)
  1068.   !end_itemize
  1069.  !item Shells:
  1070.   !begin_itemize
  1071.    !item Chatwin von Dirk Haun (ab Version 3.04 wird das SE-Protokoll 
  1072.          komplett unterstützt, ältere Versionen unterstützen nur die 
  1073.          wichtigsten Nachrichten)
  1074.    !item Shell zum Megamax Modula-2 von Thomas Tempelmann
  1075.    !item PC-Shell von Frank Schramm (ab Version 3.01)
  1076.   !end_itemize
  1077.  !item Sonstiges:
  1078.   !begin_itemize
  1079.    !item SE-Lib von Manfred Rosenboom und Dirk Haun
  1080.    
  1081.          Dieser Bibliothek liegt auch der SE-Evaluator, eine Art 
  1082.          Debugger für das SE-Protokoll, bei.
  1083.   !end_itemize
  1084. !end_itemize
  1085.  
  1086. Es bleibt zu hoffen, da₧ weitere Editoren und Shells dieses nützliche 
  1087. Protokoll unterstützen werden. Dieser Text trägt dabei hoffentlich 
  1088. et!-was zur Verbreitung bei !..
  1089.  
  1090. !smallskip
  1091.  
  1092. Dirk Haun, (!today)
  1093. !end_document
  1094.