home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / OTL-MC4.DMS / in.adf / Archive / Prog.lha / Docs / Handler < prev    next >
Encoding:
Text File  |  1993-11-07  |  20.9 KB  |  382 lines

  1.  
  2. Das Handler-Konzept
  3. ===================
  4.  
  5.    In  Version  2 der Library wurde lediglich die Anzeige konstanter Texte
  6. unterstützt,  die  aus den auf Disk vorliegenden Projekt-Dateien entnommen
  7. wurden.   Ab  Library-Version  3  besteht noch zusätzlich die Möglichkeit,
  8. HotHelp  um  sogenannte  HotHelp-Handler  zu erweitern.  Diese sind in der
  9. Lage,  beliebige Texte zu erzeugen und an HotHelp weiterzuleiten, wenn der
  10. Benutzer einen normalerweise unbekannten Begriff angefordert hat.
  11.  
  12.    Bisher   erzeugte   HotHelp  lediglich  eine  Fehlermeldung,  wenn  ein
  13. gesuchter  Begriff  nicht  in  den  disk-residenten  Projekten aufgefunden
  14. werden  konnte.  Ab Version 3 leitet HotHelp nun einen unbekannten Begriff
  15. an  die HotHelp-Handler weiter.  Diese können dann überprüfen, ob sie über
  16. einen  zu  dem  Begriff passenden Hilfstext verfügen und diesen an HotHelp
  17. zurückgeben.   Dieser  Text muß aus keiner Datei entnommen werden, sondern
  18. kann  vom Handler beliebig während der Laufzeit generiert werden.  Dadurch
  19. eröffnen  sich bisher nicht mögliche Wege, über HotHelp interaktiv mit dem
  20. Anwender  zu  kommunizieren.   Die Datenbasis HotHelps, die bisher nur aus
  21. den  konstanten  Disk-Projekten  bestand,  kann durch Handler beliebig und
  22. flexibel   erweitert  werden.   Ein  Beispiel  dafür  zeigt  das  Programm
  23. HotKeyHelp,  das  vom  User  in  einem  Editor  markierte  Textblöcke  als
  24. Online-Projekte  verwaltet  und wieder in einem HotHelp-Fenster darstellen
  25. kann,  sobald  der entsprechende Schlüssel wieder angefordert wird.  Unter
  26. Version 2 der Library wäre dies unmöglich gewesen, da nur Texte aus vorher
  27. übersetzten Projekt-Dateien dargestellt werden konnten!
  28.  
  29.    Neben der Fähigkeit, Texte zu sonst unbekannten Begriffen darstellen zu
  30. können,  gibt HotHelp den einzelnen Handlern auch die Möglichkeit, die von
  31. ihnen  verwalteten  Texte  in  Pseudo-Projekte  einzuteilen, die genau wie
  32. normale  Projekte  behandelt  werden - mit dem großen Unterschied, daß ihr
  33. Inhalt erst zur Laufzeit bestimmt wird.  Die Projekt-Einteilung unterliegt
  34. dabei keinem festgelegten Format; ein Handler sollte lediglich auf Anfrage
  35. von  HotHelp  hin  in  der  Lage  sein,  einen  oder mehrere Projekt-Namen
  36. anzugeben.   Treten diese später als Teil eines unbekannten Such-Begriffes
  37. auf, sollte der Handler dann auch darauf reagieren.  HotHelp fordert diese
  38. Namen   an,   wenn   der  Benutzer  die  Projekt-Übersicht  aufruft.   Die
  39. zurückgegebenen  Namen  werden  dann  in  diese Übersicht mit aufgenommen.
  40. Diese  Möglichkeit  ist  insbesondere für Handler interessant, deren Texte
  41. verhältnismäßig   statisch   sind   (wie   dies   z.B.    bei  HotKeyHelps
  42. Online-Projekten  der  Fall ist).  Doch auch Handler, die keine statischen
  43. Texte  verwalten,  sollten  mindestens  einen  Projekt-Namen  angeben, der
  44. sinnvollerweise  einen  Bezug zur Aufgabe des Handlers haben sollte.  Wird
  45. kein   Name   angegeben,   kann   der   Handler   auch   nicht   über  die
  46. Projekt-Übersicht angesprochen werden.
  47.  
  48.    Wählt  der Benutzer eines der Pseudo-Projekte aus der Projekt-Übersicht
  49. an,  so  fordert  HotHelp  vom entsprechenden Handler einen dazu passenden
  50. Eintrag  mit  einleitenden  Informationen  an,  der  der  Startseite eines
  51. Disk-Projektes   entspricht.    Natürlich  kann  der  Handler  hier  einen
  52. beliebigen  Eintrag  zurückgeben - z.B.  auch eine Übersicht über alle von
  53. ihm  verwalteten  Texte  in  Form  von  Querverweisen.   Wird einer dieser
  54. Querverweise  ausgewählt,  kann  der  Handler dann den entsprechenden Text
  55. darstellen.
  56.  
  57.    Weiterhin  können  auch mehrere Texte eines Handlers gleichzeitig durch
  58. Verwendung  eines  Musters  angesprochen  werden.  Hierzu wird dem Handler
  59. nicht nur der gesuchte Begriff mitgeteilt; daneben erhält er auch noch die
  60. Information,  daß  es  sich  bei  dem  Begriff um ein Muster handelt.  Der
  61. Handler  sollte  dann  alle  von  ihm unterstützten Schlüssel-Begriffe mit
  62. diesem   Muster   vergleichen.    Zu   diesem  Zweck  stellt  HotHelp  die
  63. Library-Funktion  'HH_CheckPattern  ()'  zur Verfügung, die ein Muster mit
  64. einem   String   vergleicht.    Durch   Verwendung  dieser  Funktion  wird
  65. sichergestellt,   daß   der   Handler   genau  dieselben  Muster-Kennungen
  66. unterstützt   wie  die  HotHelp-Library,  da  die  Art  des  eingestellten
  67. Pattern-Matchings (DOS oder HotHelp-intern) dem Handler nicht bekannt ist.
  68.  
  69.    Hat  der  Handler  festgestellt, daß er über mehrere Schlüssel verfügt,
  70. die  zu dem geforderten Muster passen, sollte er intern eine entsprechende
  71. Übersicht  aufbauen.   Dabei  handelt  es  sich  um  einen  Text,  der die
  72. passenden  Schlüssel-Begriffe  in  Form  von Querverweisen enthält und der
  73. dann zur Ausgabe an HotHelp zurückgegeben wird.
  74.  
  75.    HotHelp merkt sich immer, ob der aktuelle Text eines Fensters aus einem
  76. normalen   Projekt   oder  von  einem  Handler  stammt.   Dies  beeinflußt
  77. insbesondere die Auswahl von Querverweisen.  Wird ein Querverweis in einem
  78. normalen  Projekt  ausgewählt,  durchsucht  HotHelp erst die Disk-Projekte
  79. nach  diesem  Schlüssel (entweder zuerst nur das aktuelle und nur im Falle
  80. eines  Mißerfolgs  die  restlichen,  oder aber direkt alle Projekte - dies
  81. kann  über  HotHelpPref  festgelegt  werden).   Nur,  wenn  er  dort nicht
  82. gefunden wurde, werden die Handler angesprochen.
  83.  
  84.    Stammt  der  aktuelle Text jedoch von einem Handler, so wird als erstes
  85. dieser  Handler  aufgefordert,  einen  zu  dem  Querverweis passenden Text
  86. anzugeben.   Nur,  wenn  der Handler nicht über einen solchen Text verfügt
  87. (weil  es  sich  z.B.   um  einen  Verweis auf einen Begriff aus einem der
  88. Standard-Projekte  handelt), werden diese Projekte durchsucht.  Erst, wenn
  89. der  Verweis  auch  hier  nicht  gefunden  wird,  wird  der Begriff an die
  90. restlichen  Handler übergeben.  Dadurch ist gewährleistet, daß ein Handler
  91. immer  als  erster  die  Möglichkeit hat, zu seinen Querverweisen passende
  92. Texte zu liefern.
  93.  
  94.  
  95. Technische Informationen
  96. ========================
  97.  
  98.    Bei  einem  Handler  handelt  es  sich um eine einzelne Funktion, deren
  99. Startadresse  HotHelp über die Funktion 'HH_AddHandler ()' bekannt gemacht
  100. werden  muß.  Zum Entfernen kann die Funktion 'HH_RemHandler ()' verwendet
  101. werden.    Diese  muß  spätestens  am  Programmende  aufgerufen  werden  -
  102. ansonsten würde HotHelp bei einem späteren Aufruf des Handlers die bereits
  103. aus dem Speicher entfernte Handler-Funktion anspringen...
  104.  
  105.    Es  können  ohne  weiteres  mehrere  Handler  von  einem  oder mehreren
  106. Programmen gleichzeitig installiert sein.  Die Reihenfolge, in der HotHelp
  107. die  Handler anspricht, richtet sich dabei nach einer Priorität, die Werte
  108. zwischen  -128 und 127 annehmen kann.  Normalerweise sollte ein Wert von 0
  109. verwendet  werden.   Je niedriger die Priorität ist, desto später wird der
  110. Handler auch angesprochen.
  111.  
  112.    Die   Handler   werden  entsprechend  ihrer  Priorität  in  eine  Liste
  113. eingegliedert.   Taucht  nun ein unbekannter Begriff auf, ruft HotHelp die
  114. erste   Handler-Funktion   der   Liste   auf   und   übergibt   ihr   eine
  115. HH_HandlerData-Struktur,  aus  der  die genauen Anforderungen hervorgehen.
  116. Die  Adresse  dieser  Struktur wird der Funktion in Register A0 übergeben.
  117. In  A1  erhält  die Funktion die Adresse eines beliebigen Daten-Bereiches,
  118. die  beim  Installieren  des  Handlers  festgelegt  wurde.  In den meisten
  119. Fällen  erwartet  HotHelp  noch  eine Rückmeldung des Handlers in Form des
  120. Rückgabewertes der Funktion, der wie üblich als 32-Bit-Wert in Register D0
  121. vorliegen muß.
  122.  
  123.    Wer  schon einmal einen Input-Handler programmiert hat, wird sicherlich
  124. eine  Reihe von Parallelen erkannt haben.  Für die Handler-Funktion gelten
  125. auch dieselben Voraussetzung wie für einen Input-Handler:
  126.  
  127.    Die  Funktion  läuft  nicht  als  Teil  des  Programms  ab,  in dem sie
  128. enthalten  ist,  sondern wird von der HotHelp-Library aus aufgerufen.  Aus
  129. diesem  Grund  enthält  (außer  den  Übergaberegistern  A0  und A1 und dem
  130. Stackpointer  A7)  kein  Register  einen  definierten  Wert - insbesondere
  131. irgendwelche Basis-Zeiger (wie üblicherweise A4 für den Datenbereich) sind
  132. NICHT   initialisiert;   dies   muß   durch   eine   eigene  Funktion  des
  133. entsprechenden   Compilers  sichergestellt  werden.   Bei  Verwendung  des
  134. Aztec-C-Compilers  muß  z.B.  direkt am Anfang der Funktion 'int_start ()'
  135. und  am  Ende 'int_end ()' aufgerufen werden.  Nähere Informationen finden
  136. Sie  in Ihrem Compiler-Handbuch.  Außerdem müssen (wie üblich) die Inhalte
  137. aller  Register  außer  A0,  A1,  D0  und  D1 während des Aufrufs erhalten
  138. bleiben.
  139.  
  140.    Im  Gegensatz  zu  Input-Handlern laufen HotHelp-Handler als Teil eines
  141. Prozesses ab, so daß auch DOS-Aufrufe möglich sind.  Ein Handler darf also
  142. grundsätzlich   alle   Library-Funktionen  aufrufen  -  mit  Ausnahme  von
  143. HotHelp-Funktionen!    Ausgenommen   von   dieser   Regel  sind  lediglich
  144. 'HH_CheckPattern  ()',  'HH_Translate  ()'  und 'HH_TranslateFree ()', die
  145. speziell  für  Handler  vorgesehen  wurden,  sowie  die  allgemeingültigen
  146. Funktionen,   die  in  keinem  direkten  Zusammenhang  zu  HotHelp  stehen
  147. ('HH_Request  ()',  'HH_StrCmp ()' etc.).  Alle anderen HotHelp-Funktionen
  148. dürfen in keinem Fall verwendet werden!
  149.  
  150.    Natürlich  ist  ein  HotHelp-Handler auch nicht so zeitkritisch wie ein
  151. Input-Handler  -  auch im Normalfall vergeht ja eine gewisse Zeit zwischen
  152. der  Eingabe eines Begriffes und dem Darstellen des zugehörigen Textes, da
  153. dieser erst nachgeladen werden muß.
  154.  
  155.    Da der Handler mit dem Stack desjenigen Prozesses arbeitet, der für die
  156. Verwaltung  des  entsprechenden  HotHelp-Fensters  zuständig  ist, sollten
  157. keine  großen  Datenmengen  auf  dem Stapel angelegt werden - werden diese
  158. benötigt,  sollten  sie besser dynamisch angelegt werden, um das Auftreten
  159. eines Stack-Overflows zu vermeiden.
  160.  
  161.    Handler-Funktionen  müssen  nicht  unbedingt  reentrant  sein:  HotHelp
  162. besitzt  ein  internes Schutzprotokoll, so daß immer nur ein einziger Task
  163. mit  der  Handler-Liste  arbeiten kann.  Somit können also auch problemlos
  164. globale  und statische Variablen verwendet werden.  Insbesondere folgt auf
  165. ein  HHA_KEY-  bzw.   HHA_PROJECT_START-Kommando  immer  als  nächstes ein
  166. HHA_FREE-Kommando.   Will  ein  weiterer  Prozeß einen Schlüssel von einem
  167. Handler anfordern, solange noch dessen zuletzt gelieferter Text bearbeitet
  168. wird, muß dieser Prozeß bis zum Ende der Aktion warten.
  169.  
  170.    Es  ist nicht gewährleistet, daß beim Aufruf einer Handler-Funktion das
  171. Multitasking aktiv ist - es kann auch evtl.  über 'Forbid ()' abgeschaltet
  172. worden  sein.   Dies  ist  normalerweise  kein  Problem, muß aber beachtet
  173. werden, wenn der Handler Kontakt mit anderen Prozessen aufnehmen soll.  In
  174. diesem Fall muß die Kommunikation über die von Exec angebotenen Mittel wie
  175. Signals  oder  Messages durchgeführt werden, so daß der andere Prozeß auch
  176. im Falle von ausgeschaltetem Multitasking in Aktion treten kann.
  177.  
  178.  
  179. Kommunikation mit dem Handler
  180. =============================
  181.  
  182.    Zur   Kommunikation   mit   einem   Handler   verwendet   HotHelp   die
  183. HH_HandlerData-Struktur.   Wird  ein  Handler  aufgerufen,  erhält  er von
  184. HotHelp  einen  Zeiger  auf eine solche Struktur übergeben.  Was genau vom
  185. Handler  angefordert wird, geht dann aus der Variable 'action' hervor.  In
  186. späteren Versionen können noch weitere Kommandos hinzukommen; daher sollte
  187. ein  Handler im Fall eines unbekannten 'action'-Wertes grundsätzlich FALSE
  188. zurückgeben.
  189.  
  190.    Im  Folgenden finden Sie dazu eine Übersicht über alle möglichen Werte,
  191. wobei  zu  jeder Aktion auch erklärt wird, welche Bedeutung die restlichen
  192. Variablen  der  Struktur  haben.   Nicht  genannte  Variablen  haben keine
  193. Bedeutung  für  das  entsprechende  Kommando  und dürfen vom Handler weder
  194. ausgelesen  noch verändert werden.  Da diese Vorschrift unbedingt beachtet
  195. werden  muß,  wird am Ende jedes Kommandos nochmals zusammengefaßt, welche
  196. Variablen  bei  der  Ausführung  ausgelesen  und welche beschrieben werden
  197. dürfen.  Außerdem wird noch erklärt, welche Werte von der Funktion bei der
  198. jeweiligen  Aktion  zurückgegeben  werden  dürfen.  Es ist nicht zulässig,
  199. andere  als  die  genannten  Werte  zurückzugeben,  da  evtl.  in späteren
  200. Library-Versionen noch weitere Rückgabewerte definiert werden.
  201.  
  202. HHA_PROJECTS:
  203.    HotHelp  benötigt  eine  Liste  aller von Handlern gebildeter Projekte.
  204.    Bei  dieser  Liste  handelt es sich um eine Exec-Standard-Liste in Form
  205.    einer  List-Struktur  unter  dem Namen 'pro_names'.  Der Handler sollte
  206.    nun  für  jedes  Projekt,  das  er unterstützt, eine neue Node-Struktur
  207.    dynamisch  erzeugen,  den Namen des Projekts in der 'ln_Name'-Variablen
  208.    dieser Struktur festhalten und die Struktur dann in die Liste einfügen.
  209.    Der  bisherige  Inhalt  der Liste darf nicht geändert werden; es dürfen
  210.    lediglich  neue  Elemente  hinzugefügt werden.  Die Reihenfolge, in der
  211.    die Namen eingefügt werden, ist beliebig, da die Liste anschließend von
  212.    HotHelp alphabetisch sortiert wird.
  213.    ACHTUNG:   Nachdem  HotHelp  die  Liste  komplett ausgewertet hat, wird
  214.    jeder  einzelne  Node der Liste durch den Aufruf 'FreeMem (node, sizeof
  215.    (struct  Node))'  wieder  freigegeben.   Aus  diesem  Grund müssen alle
  216.    Listenelemente  auch unbedingt dynamisch über 'AllocMem (sizeof (struct
  217.    Node), MEMF_CLEAR)' angelegt werden!  Wird dies nicht beachtet, kann es
  218.    zu Speicherplatzverlusten oder Abstürzen kommen!
  219.    Die  Strings,  die  die  Namen der Projekte beinhalten, können beliebig
  220.    angelegt  werden,  da  sie von HotHelp lediglich ausgelesen, nicht aber
  221.    beschrieben oder freigegeben werden.
  222.    Unterstützt  ein  Handler keinen Projekt-Namen, kann er dieses Kommando
  223.    ignorieren und TRUE zurückgeben.
  224.  
  225.    Definierte Rückgabewerte:
  226.       TRUE:
  227.          Der normale Rückgabewert, wenn kein Fehler auftrat.
  228.       -1:
  229.          Speicherplatzmangel.
  230.       -2:
  231.          DOS-Fehler.
  232.       -3:
  233.          Sonstiger Fehler.
  234.    Lesbar:
  235.       'action'
  236.    Beschreibbar:
  237.       'pro_names' (nur indirekt über Execs Listen-Funktionen 'AddHead ()',
  238.       'AddTail ()', 'Enqueue ()' und 'Insert ()')
  239.  
  240. HHA_KEY:
  241.    Dies  ist  der  Normalfall für einen Handler - HotHelp sucht nach einem
  242.    unbekannten  Schlüssel-Begriff.   Der  gesuchte  Begriff setzt sich aus
  243.    einem  Projekt-  und  einem Schlüssel-Namen zusammen, die aus 'project'
  244.    und  'key'  hervorgehen.   Falls  es  sich bei einem oder beiden um ein
  245.    Muster   handelt,   ist   das  entsprechende  Flag  'pro_pattern'  bzw.
  246.    'key_pattern'   gesetzt.    In  diesem  Fall  sollte  der  Handler  den
  247.    entsprechenden  String  mit Hilfe der 'HH_CheckPattern ()'-Funktion mit
  248.    allen   zur  Verfügung  stehenden  Projekt-  bzw.   Schlüssel-Begriffen
  249.    vergleichen.   Die  Muster  sollten nicht selber ausgewertet werden, da
  250.    sie  auch binäre Steuercodes beinhalten können.  Ein normaler Vergleich
  251.    (z.B.   mit  'strcmp  ()') sollte nur durchgeführt werden, wenn es sich
  252.    bei dem entsprechenden String nicht um ein Muster handelt.
  253.    'HH_CheckPattern  ()'  kann natürlich auch dann angewendet werden, wenn
  254.    es  sich  bei  dem  gesuchten String nicht um ein Pattern handelt - die
  255.    Funktion   ist   lediglich   nicht   so   effektiv  wie  ein  einfacher
  256.    Stringvergleich.
  257.    Als  Besonderheit  sollte  jeder  Handler  auch  den  Schlüssel-Begriff
  258.    'Startseite'  unterstützen  -  dieser  wird üblicherweise verwendet, um
  259.    einen  Text  mit  einleitenden  Informationen  über  das  entsprechende
  260.    Projekt zu liefern.  Es sollte sich um denselben Text handeln, der auch
  261.    beim HHA_PROJECT_START-Kommando zurückgegeben wird (s.u.).
  262.    Findet  der  Handler  einen  passenden  Schlüssel,  so  sollte  er  den
  263.    zugehörigen  Text  in einer HH_CustomText-Struktur festhalten und deren
  264.    Adresse  in  der Variablen 'custom_text' ablegen.  Falls im Falle eines
  265.    Patterns sogar mehrere passende Schlüssel vorliegen, sollte der Handler
  266.    statt  dessen einen Text erzeugen, in dem alle gefundenen Schlüssel als
  267.    Querverweise  auftauchen.   Dieser  Text muß dann ebenfalls in der oben
  268.    beschriebenen Form an HotHelp zurückgegeben werden, so daß der Benutzer
  269.    wie  üblich  nach  Eingabe  seines  Musters  eine  Übersicht  über alle
  270.    passenden  Schlüssel  erhält.   Informationen  über  den  Aufbau  einer
  271.    HH_CustomText-Struktur finden Sie bei deren Beschreibung.
  272.    Sobald  HotHelp  die Struktur ausgewertet und alle erforderlichen Daten
  273.    kopiert  hat,  wird  der  Handler mit dem HHA_FREE-Kommando aufgerufen,
  274.    damit  er  z.B.   jetzt nicht mehr benötigten Speicher wieder freigeben
  275.    kann.    Es   wird  garantiert,  daß  zwischen  dem  HHA_KEY-  und  dem
  276.    HHA_KEY_FREE-Kommando  kein  anderes  Kommando an den Handler geschickt
  277.    wird.
  278.  
  279.    Definierte Rückgabewerte:
  280.       TRUE:
  281.          Der  Handler verfügt über ein oder mehrere passende Schlüssel und
  282.          gibt  in 'custom_text' einen entsprechenden Text zurück.  HotHelp
  283.          beendet dann die Untersuchung und stellt diesen Text dar.  Nur in
  284.          diesem Fall dürfen auch Variablen der Struktur geändert werden.
  285.       FALSE:
  286.          Es  wurde  keine  passender  Schlüssel gefunden.  HotHelp spricht
  287.          daraufhin den nächsten Handler an.
  288.       -1:
  289.          Als  wohl typischster Fehler trat Speicherplatzmangel auf, so daß
  290.          der  Handler  seine  Aktionen  nicht durchführen konnte.  HotHelp
  291.          bricht die Suche ab und stellt einen Fehlertext dar.
  292.       -2:
  293.          DOS-Fehler.
  294.       -3:
  295.          Sonstiger Fehler.
  296.    Lesbar:
  297.       'action'
  298.       'project'
  299.       'key'
  300.       'pro_pattern'
  301.       'key_pattern'
  302.    Beschreibbar:
  303.       'custom_text'
  304.  
  305. HHA_PROJECT_START:
  306.    Wird  aus  der  Projekt-Übersicht ein Name ausgewählt, der nicht zu den
  307.    disk-residenten  Projekten gehört, sendet HotHelp der Reihe nach dieses
  308.    Kommando  zusammen mit dem entsprechenden Projekt-Namen an die Handler.
  309.    Der  Projekt-Name befindet sich im Buffer 'project'.  Er wird immer als
  310.    normaler  String  angegeben  (nicht  als  Muster), so daß ein einfacher
  311.    String-Vergleich  angewendet  werden  kann.   Der  Name  wird  immer in
  312.    Großbuchstaben  angegeben.   Erkennt  ein  Handler diesen Namen nun als
  313.    denjenigen  eines  von  ihm  unterstützten  Projektes, den er vorher in
  314.    einer  Projekt-Liste  angegeben  hat,  so  sollte er eine entsprechende
  315.    Startseite  erzeugen  und  über  die  'custom_text'-Struktur an HotHelp
  316.    zurückgeben  (s.o.).   Der  Aufbau  der  Startseite  sollte sich an den
  317.    normalen  Projekten  orientieren;  es  könnte  also  z.B.  ein Text mit
  318.    einleitenden  Informationen dargestellt werden oder auch eine Übersicht
  319.    über alle Schlüssel, die der Handler anbietet.
  320.    Es  muß  sich  bei dieser Startseite um denselben Text handeln, den der
  321.    Handler  auch im Fall eines HHA_KEY-Kommandos zurückliefern würde, wenn
  322.    der  Schlüssel  'Startseite'  lautet  (oder  ein entsprechendes Pattern
  323.    beinhaltet).     Nur    so   kann   gewährleistet   werden,   daß   die
  324.    Projekt-Startseite  durch das Vortext-Gadget wieder zurückgeholt werden
  325.    kann!
  326.    Sobald  HotHelp  die Struktur ausgewertet und alle erforderlichen Daten
  327.    kopiert  hat,  wird  der  Handler mit dem HHA_FREE-Kommando aufgerufen,
  328.    damit  er  z.B.   jetzt nicht mehr benötigten Speicher wieder freigeben
  329.    kann.   Es wird garantiert, daß zwischen dem HHA_PROJECT_START- und dem
  330.    HHA_KEY_FREE-Kommando  kein  anderes  Kommando an den Handler geschickt
  331.    wird.
  332.  
  333.    Definierte Rückgabewerte:
  334.       TRUE:
  335.          Der  Handler unterstützt den gesuchten Projektnamen und gibt über
  336.          'custom_text'  einen  passenden Text zurück, der dann von HotHelp
  337.          angezeigt  wird.   Nur  in  diesem Fall dürfen auch Variablen der
  338.          Struktur geändert werden.
  339.       FALSE:
  340.          Der  Handler  unterstützt  das  Projekt nicht, so daß HotHelp die
  341.          folgenden Handler ansprechen muß.
  342.       -1:
  343.          Speicherplatzmangel.
  344.       -2:
  345.          DOS-Fehler.
  346.       -3:
  347.          Sonstiger Fehler.
  348.    Lesbar:
  349.       'action'
  350.       'project'
  351.    Beschreibbar:
  352.       'custom_text'
  353.  
  354. HHA_FREE:
  355.    Nachdem  HotHelp  über  HHA_KEY  oder  HHA_PROJECT_START einen Text von
  356.    einem  Handler erhalten hat, wird dieser Text im entsprechenden Fenster
  357.    dargestellt.    Dazu   wird   eine   komplette   Kopie   des   gesamten
  358.    Text-Bereiches  der  HH_CustomText-Struktur  angefertigt.  Anschließend
  359.    werden  dieser  Bereich  und  die  Struktur selber nicht mehr benötigt.
  360.    HotHelp  ruft daher, direkt nachdem ein Handler-Text dargestellt wurde,
  361.    den  entsprechenden  Handler mit dieser Kennung auf.  Dieser sollte nun
  362.    alle  dynamisch  angelegten  Speicherbereiche  wieder freigeben, die er
  363.    beim  vorhergehenden HHA_KEY- bzw.  HHA_PROJECT_START-Kommando angelegt
  364.    hat.   Wurde  der  Text  z.B.  durch einen Aufruf von 'HH_Translate ()'
  365.    erzeugt,  wäre  jetzt  der passende Zeitpunkt für ein 'HH_TranslateFree
  366.    ()'.   Wurde  der  vielleicht  schon  vorher  übersetzte  Text von Disk
  367.    eingelesen,  so  kann  nun  sein  Speicherbereich  freigegeben  werden.
  368.    Dadurch wird gewährleistet, daß der nicht mehr benötigte Speicher nicht
  369.    länger blockiert wird.
  370.    Der Handler erhält in 'custom_text' einen Zeiger auf die (unveränderte)
  371.    Struktur,     die     er     beim    vorhergehenden    HHA_KEY-    oder
  372.    HHA_PROJECT_START-Kommando an HotHelp übergeben hatte.
  373.  
  374.    Definierte Rückgabewerte:
  375.       Die Handler-Funktion muß immer TRUE zurückgeben.
  376.    Lesbar:
  377.       'action'
  378.       'custom_text'
  379.    Beschreibbar:
  380.       -
  381.  
  382.