home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / OTL-MC4.DMS / in.adf / Archive / Prog.lha / Docs / Funktionen < prev    next >
Encoding:
Text File  |  1994-02-14  |  82.7 KB  |  2,031 lines

  1.  
  2. HotHelp-Funktionen
  3. ==================
  4.  
  5.    Diese   Datei  beschreibt  alle  Funktionen  der  HotHelp.Library.  Die
  6. Beschreibungen   sind   in   Form   von   C-Kommentaren  gehalten  und  in
  7. alphabetischer   Reihenfolge   abgelegt.   Funktionen,   die  in  späteren
  8. Library-Version  neu  hinzugekommen  sind,  werden  durch  die Kennung der
  9. entsprechenden Version am Kopf der Beschreibung gekennzeichnet - im Moment
  10. handelt es sich hierbei lediglich um das Kürzel '(V3)' für unter Version 3
  11. hinzugekommene Funktionen.
  12.  
  13.    Die  Funktionen  können  neben  der alphabetischen Ordnung auch noch in
  14. mehrere Gruppen eingeteilt werden:
  15.  
  16.  
  17. Öffnen eines HotHelp-Fensters:
  18. =============================
  19.  
  20.    HH_ShowHelp
  21.    HH_ShowHelpTagList (V3)
  22.    HH_EasyHelp
  23.    HH_EasyASyncHelp (V3)
  24.  
  25. Steuerung von asynchronen Fenstern:
  26. ==================================
  27.  
  28.    HH_ASyncActivate (V3)
  29.    HH_ASyncCheckWindow (V3)
  30.    HH_ASyncCloseWindow (V3)
  31.    HH_ASyncCustomText (V3)
  32.    HH_ASyncGadget (V3)
  33.    HH_ASyncMenu (V3)
  34.    HH_ASyncPage (V3)
  35.    HH_ASyncScroll (V3)
  36.    HH_ASyncSearch (V3)
  37.    HH_ASyncStatus (V3)
  38.    HH_ASyncStrGadget (V3)
  39.    HH_ASyncWindowAddr (V3)
  40.  
  41. Funktionen für HotHelp-Handler:
  42. ==============================
  43.  
  44.    HH_AddHandler (V3)
  45.    HH_RemHandler (V3)
  46.    HH_CheckPattern (V3)
  47.    HH_Translate (V3)
  48.    HH_TranslateFree (V3)
  49.  
  50. Sonstige HotHelp-Funktionen:
  51. ===========================
  52.  
  53.    HH_AddProject
  54.    HH_CheckProject (V3)
  55.    HH_FontVersion
  56.    HH_KeyList (V3)
  57.    HH_OpenAll
  58.    HH_ProjectList (V3)
  59.  
  60. Allgemeine Funktionen:
  61. =====================
  62.  
  63.    HH_Beep (V3)
  64.    HH_BuildMenus (V3)
  65.    HH_CreatePath (V3)
  66.    HH_FileRequest (V3)
  67.    HH_Request (V3)
  68.    HH_ScanPalette (V3)
  69.    HH_Semprini (V3)
  70.    HH_SetPointer (V3)
  71.    HH_StrCmp (V3)
  72.    HH_StrNCmp (V3)
  73.    HH_ToUpper (V3)
  74.  
  75.  
  76. /*----------------------------------------------------------------------*\
  77.    NAME
  78.       HH_AddHandler - Installiert einen neuen Handler.
  79.                       (V3)
  80.  
  81.    SCHREIBWEISE
  82.       VOID HH_AddHandler
  83.          (
  84.          struct Interrupt *   ir
  85.          )
  86.  
  87.    FUNKTION
  88.       Mit  dieser  Funktion ist es möglich, HotHelp um einen neuen Handler
  89.       zu  erweitern  (eine genaue Beschreibung von HotHelp-Handlern finden
  90.       Sie    in    der    Datei   'Handler').    Sowohl   die   verwendete
  91.       Interrupt-Struktur  als  auch  der  Code der Handler-Funktion selber
  92.       dürfen  erst  wieder  geändert  oder  freigegeben  werden,  wenn der
  93.       Handler durch 'HH_RemHandler ()' wieder entfernt wurde.
  94.  
  95.    EINGABEN
  96.       ir:
  97.          Zeiger  auf  eine Interrupt-Struktur.  Dabei müssen die folgenden
  98.          Felder initialisiert werden:
  99.          is_Code:
  100.             In   dieser  Variablen  wird  die  Startadresse  der  Funktion
  101.             festgehalten, die als Handler aufgerufen werden soll.
  102.          is_Data:
  103.             Der  Inhalt dieser Variablen wird dem Handler später bei jedem
  104.             Aufruf  in  Register A1 übergeben.  Sofern benötigt, kann hier
  105.             z.B.  die Adresse eines vom Handler verwendeten Datenbereiches
  106.             angegeben werden.
  107.          is_Node.ln_Pri:
  108.             Die  Priorität  des  Handlers.  Es kann ein Wert zwischen -128
  109.             und  127  angegeben werden.  Je höher der Wert ist, desto eher
  110.             wird   der   Handler  im  Fall  eines  unbekannten  Schlüssels
  111.             angesprochen.   Im  Normalfall sollte ein Wert von 0 angegeben
  112.             werden.
  113.          Alle  anderen  Elemente  der Struktur sollten mit 0 initialisiert
  114.          werden.
  115.  
  116.    ERGEBNIS
  117.  
  118.    BEMERKUNG
  119.  
  120. \*----------------------------------------------------------------------*/
  121.  
  122.  
  123. /*----------------------------------------------------------------------*\
  124.    NAME
  125.       HH_AddProject - Lädt ein neues Projekt
  126.  
  127.    SCHREIBWEISE
  128.       LONG HH_AddProject
  129.          (
  130.          BYTE *   pro_path,
  131.          BYTE *   pro_name,
  132.          LONG     force
  133.          )
  134.  
  135.    FUNKTION
  136.       Normalerweise  werden  beim Öffnen des ersten Hilfs-Fensters alle in
  137.       'HOTHELP:Projekte' gefundenen Projekte geladen.  Über diese Funktion
  138.       kann  davon  abweichend ein Projekt aus einem beliebigen Verzeichnis
  139.       geladen werden.
  140.  
  141.    EINGABEN
  142.       pro_path:
  143.          Zeiger  auf einen String mit dem Namen des Verzeichnisses, in dem
  144.          sich das zu lesende Projekt befindet.
  145.       pro_name:
  146.          Name des Projektes, das geladen werden soll.
  147.       force:
  148.          Falls  das  Projekt ausgeschaltet ist, kann über diesen Parameter
  149.          bestimmt  werden, ob es dennoch geladen werden soll.  Ist 'force'
  150.          TRUE,  wird  der  Zustand  des Projektes ignoriert und es wird in
  151.          jedem  Fall  geladen;  ansonsten wird 'HH_ERROR_DISABLED' zurück-
  152.          gegeben, wenn ein ausgeschaltetes Projekt angesprochen wurde.
  153.  
  154.    ERGEBNIS
  155.       HH_ERROR_NONE  - Alles klar.
  156.       sonst          - Einer  der  HH_ERROR_-Codes.   Es wurde bereits ein
  157.                        Requester   mit   der   Fehlermeldung  in  Klartext
  158.                        ausgegeben.  Ausgenommen davon sind nur Fehlercodes
  159.                        mit Werten kleiner 10.
  160.  
  161.    BEMERKUNG
  162.  
  163. \*----------------------------------------------------------------------*/
  164.  
  165.  
  166. /*----------------------------------------------------------------------*\
  167.    NAME
  168.       HH_ASyncActivate - Aktivieren eines asynchronen HotHelp-Fensters.
  169.                          (V3)
  170.  
  171.    SCHREIBWEISE
  172.       LONG HH_ASyncActivate
  173.          (
  174.          LONG     id
  175.          )
  176.  
  177.    FUNKTION
  178.       Ein  asynchrones  Fenster  kann  mit  Hilfe  dieser  Funktion wieder
  179.       aktiviert werden.  Dabei werden folgende Aktionen durchgeführt:  Der
  180.       Screen,  auf  dem  sich  das  Window befindet, wird vor alle anderen
  181.       gebracht.   Falls er nach unten gezogen wurde, wird er wieder an den
  182.       oberen  Bildschirmrand  gebracht.  Das Fenster wird vor alle anderen
  183.       Fenster gebracht und anschließend aktiviert.
  184.       Die  Funktion  darf  auch auf Fenster angewendet werden, die bereits
  185.       geschlossen wurden, da die Library diesen Fall abfängt.
  186.  
  187.    EINGABEN
  188.       id:
  189.          Die  ID  des  asynchronen Fensters, die von 'HH_EasyASyncHelp ()'
  190.          oder  über  das  ID-Tag von 'HH_ShowHelpTagList ()' zurückgegeben
  191.          wurde und die das Fenster beschreibt, das hier manipuliert werden
  192.          soll.
  193.  
  194.    ERGEBNIS
  195.       HH_ERROR_NONE  - Alles klar.
  196.       sonst          - Einer  der  HH_ERROR_-Codes.   Es wurde bereits ein
  197.                        Requester   mit   der   Fehlermeldung  in  Klartext
  198.                        ausgegeben.  Ausgenommen davon sind nur Fehlercodes
  199.                        mit Werten kleiner 10.
  200.  
  201.    BEMERKUNG
  202.  
  203. \*----------------------------------------------------------------------*/
  204.  
  205.  
  206. /*----------------------------------------------------------------------*\
  207.    NAME
  208.       HH_ASyncCheckWindow - Überprüft,  ob  ein  asynchrones  Fenster noch
  209.                             existiert.
  210.                             (V3)
  211.  
  212.    SCHREIBWEISE
  213.       LONG HH_ASyncCheckWindow
  214.          (
  215.          LONG     id
  216.          )
  217.  
  218.    FUNKTION
  219.       Diese  Funktion  überprüft,  ob  ein  vorher  geöffnetes asynchrones
  220.       Fenster   noch   existiert   oder  ob  es  zwischenzeitlich  bereits
  221.       geschlossen wurde.
  222.       Die  Funktion  darf  auch auf Fenster angewendet werden, die bereits
  223.       geschlossen wurden, da die Library diesen Fall abfängt.
  224.  
  225.    EINGABEN
  226.       id:
  227.          Die  ID  des  asynchronen Fensters, die von 'HH_EasyASyncHelp ()'
  228.          oder  über  das  ID-Tag von 'HH_ShowHelpTagList ()' zurückgegeben
  229.          wurde  und die das Fenster beschreibt, das hier untersucht werden
  230.          soll.
  231.  
  232.    ERGEBNIS
  233.       TRUE  - Das überprüfte Fenster existiert noch.
  234.       FALSE - Das überprüfte Fenster ist geschlossen.
  235.  
  236. \*----------------------------------------------------------------------*/
  237.  
  238.  
  239. /*----------------------------------------------------------------------*\
  240.    NAME
  241.       HH_ASyncCloseWindow - Schließen eines asynchronen HotHelp-Fensters.
  242.                             (V3)
  243.  
  244.    SCHREIBWEISE
  245.       LONG HH_ASyncCloseWindow
  246.          (
  247.          LONG     id
  248.          )
  249.  
  250.    FUNKTION
  251.       Mit  dieser Funktion kann ein asynchrones Fenster wieder geschlossen
  252.       werden, ohne daß der User das Schließ-Gadget benutzt.
  253.       Die  Funktion  darf  auch auf Fenster angewendet werden, die bereits
  254.       geschlossen wurden, da die Library diesen Fall abfängt.
  255.  
  256.    EINGABEN
  257.       id:
  258.          Die  ID  des  asynchronen Fensters, die von 'HH_EasyASyncHelp ()'
  259.          oder  über  das  ID-Tag von 'HH_ShowHelpTagList ()' zurückgegeben
  260.          wurde und die das Fenster beschreibt, das hier manipuliert werden
  261.          soll.
  262.  
  263.    ERGEBNIS
  264.       HH_ERROR_NONE  - Alles klar.
  265.       sonst          - Einer  der  HH_ERROR_-Codes.   Es wurde bereits ein
  266.                        Requester   mit   der   Fehlermeldung  in  Klartext
  267.                        ausgegeben.  Ausgenommen davon sind nur Fehlercodes
  268.                        mit Werten kleiner 10.
  269.  
  270.    BEMERKUNG
  271.  
  272. \*----------------------------------------------------------------------*/
  273.  
  274.  
  275. /*----------------------------------------------------------------------*\
  276.    NAME
  277.       HH_ASyncCustomText - Zeigt  einen  Text  an,  der  nicht  aus  einer
  278.                            Projekt-Datei stammt.
  279.                            (V3)
  280.  
  281.    SCHREIBWEISE
  282.       LONG HH_ASyncCustomText
  283.          (
  284.          LONG                    id,
  285.          struct HH_CustomText *  text,
  286.          BYTE *                  input_pro,
  287.          BYTE *                  input_key
  288.          )
  289.  
  290.    FUNKTION
  291.       Normalerweise  zeigen  HotHelp-Fenster  nur  Texte  an,  die sich in
  292.       Projekt-Dateien  befinden,  die  vom  Programm  HotHelpComp erstellt
  293.       wurden.  Mit Hilfe dieser Funktion ist es nun auch möglich, in einem
  294.       asynchronen   HotHelp-Fenster  einen  beliebigen  Text  anzeigen  zu
  295.       lassen.  Dazu muß die Adresse des Speicherbereiches, in dem der Text
  296.       abgelegt wurde, zusammen mit einigen weiteren Informationen in einer
  297.       HH_CustomText-Struktur   festgehalten   und   dann  dieser  Funktion
  298.       übergeben werden.  HotHelp stellt den entsprechenden Text dann dar.
  299.       Diese  Methode  hat nur einen Nachteil:  Da der Text nicht aus einer
  300.       Projekt-Datei  stammt,  kann er auch nicht mehr zurückgeholt werden,
  301.       wenn  der  Benutzer  anschließend  einen  weiteren  Text  lädt.  Das
  302.       Vortext-Gadget  zeigt  in diesem Fall lediglich den Projekt-Text an,
  303.       der vor dem Einfügen dieses Textes geladen war.
  304.       Die  Funktion  darf  auch auf Fenster angewendet werden, die bereits
  305.       geschlossen wurden, da die Library diesen Fall abfängt.
  306.  
  307.    EINGABEN
  308.       id:
  309.          Die  ID  des  asynchronen Fensters, die von 'HH_EasyASyncHelp ()'
  310.          oder  über  das  ID-Tag von 'HH_ShowHelpTagList ()' zurückgegeben
  311.          wurde und die das Fenster beschreibt, das hier manipuliert werden
  312.          soll.
  313.       text:
  314.          Ein   Zeiger   auf  eine  initialisierte  HH_CustomText-Struktur.
  315.          Nähere   Informationen   finden  Sie  bei  der  Beschreibung  der
  316.          Struktur.
  317.       input_pro, input_key:
  318.          Über   diese   beiden   Zeiger   kann   der   Inhalt  der  beiden
  319.          Eingabe-Gadgets  geändert  werden.   Die hier angegebenen Strings
  320.          ersetzen dazu den alten Inhalt des Projekt-und Schlüssel-Gadgets.
  321.          Ist  dies nicht gewünscht, muß für beide Variablen NULL übergeben
  322.          werden.    Es   ist   nicht   möglich,   nur   eines  der  beiden
  323.          String-Gadgets allein zu beeinflußen.
  324.  
  325.    ERGEBNIS
  326.       HH_ERROR_NONE  - Alles klar.
  327.       sonst          - Einer  der  HH_ERROR_-Codes.   Es wurde bereits ein
  328.                        Requester   mit   der   Fehlermeldung  in  Klartext
  329.                        ausgegeben.  Ausgenommen davon sind nur Fehlercodes
  330.                        mit Werten kleiner 10.
  331.  
  332.    BEMERKUNG
  333.  
  334. \*----------------------------------------------------------------------*/
  335.  
  336.  
  337. /*----------------------------------------------------------------------*\
  338.    NAME
  339.       HH_ASyncGadget - Steuerung  der  Gadgets  eines asynchronen HotHelp-
  340.                        Fensters.
  341.                        (V3)
  342.  
  343.    SCHREIBWEISE
  344.       LONG HH_ASyncGadget
  345.          (
  346.          LONG     id,
  347.          LONG     mask
  348.          )
  349.  
  350.    FUNKTION
  351.       Über  diese  Funktion  können  alle  Gadgets  eines  HotHelp-Windows
  352.       angesprochen werden, als hätte der Benutzer sie selber angewählt.
  353.       Die  Funktion  darf  auch auf Fenster angewendet werden, die bereits
  354.       geschlossen wurden, da die Library diesen Fall abfängt.
  355.  
  356.    EINGABEN
  357.       id:
  358.          Die  ID  des  asynchronen Fensters, die von 'HH_EasyASyncHelp ()'
  359.          oder  über  das  ID-Tag von 'HH_ShowHelpTagList ()' zurückgegeben
  360.          wurde und die das Fenster beschreibt, das hier manipuliert werden
  361.          soll.
  362.       mask:
  363.             Eine   Maske  mit  den  HH_GADGET_-Codes.  Werden  mehrere  Codes
  364.             zusammen-geodert,  werden die entsprechenden Gadgets nacheinander
  365.             angewählt.  Das  Hilfe-Gadget  kann  durch  diesen  Aufruf  nicht
  366.             angesprochen  werden. Ebenso wird ignoriert, wenn das Fenster vom
  367.             Anwender in den Hilfsmodus geschaltet wurde.
  368.  
  369.    ERGEBNIS
  370.       HH_ERROR_NONE  - Alles klar.
  371.       sonst          - Einer  der  HH_ERROR_-Codes.   Es wurde bereits ein
  372.                        Requester   mit   der   Fehlermeldung  in  Klartext
  373.                        ausgegeben.  Ausgenommen davon sind nur Fehlercodes
  374.                        mit Werten kleiner 10.
  375.  
  376.    BEMERKUNG
  377.  
  378. \*----------------------------------------------------------------------*/
  379.  
  380.  
  381. /*----------------------------------------------------------------------*\
  382.    NAME
  383.       HH_ASyncMenu - Steuerung der Menus eines asynchronen HotHelp-Fensters.
  384.                      (V3)
  385.  
  386.    SCHREIBWEISE
  387.       LONG HH_ASyncMenu
  388.          (
  389.          LONG     id,
  390.          WORD     menu,
  391.          WORD     item
  392.          )
  393.  
  394.    FUNKTION
  395.       Mit   Hilfe  dieser  Funktion  kann  von  außen  die  Auswahl  eines
  396.       Menupunktes  durch  den  User simuliert werden.  Das HotHelp-Fenster
  397.       verhält  sich  genauso,  als  wenn  der  Benutzer  das Menu von Hand
  398.       angewählt hätte.
  399.       Bei   Angabe  von  unzulässigen  Menu-  oder  Item-Werten  wird  ein
  400.       Fehlercode zurückgegeben.
  401.       Die  Funktion  darf  auch auf Fenster angewendet werden, die bereits
  402.       geschlossen wurden, da die Library diesen Fall abfängt.
  403.  
  404.    EINGABEN
  405.       id:
  406.          Die  ID  des  asynchronen Fensters, die von 'HH_EasyASyncHelp ()'
  407.          oder  über  das  ID-Tag von 'HH_ShowHelpTagList ()' zurückgegeben
  408.          wurde und die das Fenster beschreibt, das hier manipuliert werden
  409.          soll.
  410.       menu:
  411.          Die  Nummer  des  Menus, aus dem das entsprechende Item angewählt
  412.          wird.   Die  Zählung  beginnt  immer  bei  0,  so  daß  0 für das
  413.          Views-Menu steht, 1 für das Such-Menu etc.
  414.       item:
  415.          Die  Nummer  des  Items  innerhalb  des  Menus 'menu'.  Auch hier
  416.          beginnt  die  Zählung  immer  bei 0.  Item 3 in Menu 2 setzt z.B.
  417.          die Textmarke Nr.  4 auf die aktuelle Position.
  418.  
  419.    ERGEBNIS
  420.       HH_ERROR_NONE  - Alles klar.
  421.       sonst          - Einer  der  HH_ERROR_-Codes.   Es wurde bereits ein
  422.                        Requester   mit   der   Fehlermeldung  in  Klartext
  423.                        ausgegeben.  Ausgenommen davon sind nur Fehlercodes
  424.                        mit Werten kleiner 10.
  425.  
  426.    BEMERKUNG
  427.  
  428. \*----------------------------------------------------------------------*/
  429.  
  430.  
  431. /*----------------------------------------------------------------------*\
  432.    NAME
  433.       HH_ASyncPage - Seitenweises Scrollen des Textes im HotHelp-Fenster
  434.                      (V3)
  435.  
  436.    SCHREIBWEISE
  437.       LONG HH_ASyncPage
  438.          (
  439.          LONG     id,
  440.          LONG     step
  441.          )
  442.  
  443.    FUNKTION
  444.       Diese    Funktion   dient   dazu,   den   Text   im   entsprechenden
  445.       HotHelp-Fenster  um  eine  Seite nach oben, unten, rechts oder links
  446.       bzw.  an den Textanfang oder das Textende zu scrollen.
  447.       Bitte  beachten  Sie, daß ein Links-/Rechts-Scrolling des Textes nur
  448.       sinnvoll  ist,  wenn  der  Text  über  Zeilen verfügt, die nicht als
  449.       Fließtext  umgebrochen werden.  Sie können das Vorhandensein solcher
  450.       Zeilen  über  die  Funktion  'HH_ASyncStatus  ()' abfragen; wenn die
  451.       Länge der längsten Zeile (txt_columns) größer ist als die Anzahl von
  452.       darstellbaren  Zeichen in einer Zeile (win_columns), kann über diese
  453.       Funktion  der sichtbare Textausschnitt verschoben werden (die Nummer
  454.       der ersten dargestellten Spalte geht aus 'first_column' hervor).
  455.       Die  Funktion  darf  auch auf Fenster angewendet werden, die bereits
  456.       geschlossen wurden, da die Library diesen Fall abfängt.
  457.  
  458.    EINGABEN
  459.       id:
  460.          Die  ID  des  asynchronen Fensters, die von 'HH_EasyASyncHelp ()'
  461.          oder  über  das  ID-Tag von 'HH_ShowHelpTagList ()' zurückgegeben
  462.          wurde und die das Fenster beschreibt, das hier manipuliert werden
  463.          soll.
  464.       step:
  465.          Die Variable darf 8 verschiedene Werte annehmen:
  466.          -1: Scrollt zeilenweise eine Seite in Richtung Textanfang.
  467.           1: Scrollt zeilenweise eine Seite in Richtung Textende.
  468.          -2: Zeigt die oberste Seite des Textes an.
  469.           2: Zeigt die unterste Seite des Textes an.
  470.          -3: Scrollt spaltenweise eine Seite in Richtung Zeilenanfang.
  471.           3: Scrollt spaltenweise eine Seite in Richtung Zeilenende.
  472.          -4: Bringt  den sichtbaren Textausschnitt ganz nach vorne, so daß
  473.              die Anfänge aller Zeilen sichtbar sind.
  474.           4: Bringt  den  sichtbaren  Textausschnitt  ganz nach hinten, so
  475.              daß das Ende der längsten Zeile des Textes sichtbar ist.
  476.  
  477.    ERGEBNIS
  478.       HH_ERROR_NONE  - Alles klar.
  479.       sonst          - Einer  der  HH_ERROR_-Codes.   Es wurde bereits ein
  480.                        Requester   mit   der   Fehlermeldung  in  Klartext
  481.                        ausgegeben.  Ausgenommen davon sind nur Fehlercodes
  482.                        mit Werten kleiner 10.
  483.  
  484.    BEMERKUNG
  485.  
  486. \*----------------------------------------------------------------------*/
  487.  
  488.  
  489. /*----------------------------------------------------------------------*\
  490.    NAME
  491.       HH_ASyncScroll - Scrollen des Textes im HotHelp-Fenster
  492.                        (V3)
  493.  
  494.    SCHREIBWEISE
  495.       LONG HH_ASyncScroll
  496.          (
  497.          LONG     id,
  498.          LONG     lines,
  499.          LONG     columns
  500.          )
  501.  
  502.    FUNKTION
  503.       Diese    Funktion   dient   dazu,   den   Text   im   entsprechenden
  504.       HotHelp-Fenster  um  eine  gewisse  Anzahl von Zeilen nach oben oder
  505.       unten  zu  scrollen.   Werden beim Scrollen der Anfang oder das Ende
  506.       des Textes erreicht, bricht die Funktion automatisch ab.
  507.       Die  Funktion  darf  auch auf Fenster angewendet werden, die bereits
  508.       geschlossen wurden, da die Library diesen Fall abfängt.
  509.  
  510.    EINGABEN
  511.       id:
  512.          Die  ID  des  asynchronen Fensters, die von 'HH_EasyASyncHelp ()'
  513.          oder  über  das  ID-Tag von 'HH_ShowHelpTagList ()' zurückgegeben
  514.          wurde und die das Fenster beschreibt, das hier manipuliert werden
  515.          soll.
  516.       lines:
  517.          Die Anzahl von Zeilen, die gescrollt werden.  Bei einem positiven
  518.          Wert wird der Textausschnitt in Richtung Textende verschoben, bei
  519.          einem negativen in Richtung Textanfang.  0 wird ignoriert.
  520.       columns:
  521.          Die  Anzahl  von  Spalten,  die gescrollt werden soll.  Bei einem
  522.          positiven  Wert  wird  der  Textausschnitt nach rechts, bei einem
  523.          negativen nach links verschoben. 0 wird ignoriert.
  524.          Bitte  bachten  Sie  auch  die  bei  'HH_ASyncPage  ()' gemachten
  525.          Bemerkungen zum Thema Links-Rechts-Scrolling.
  526.  
  527.    ERGEBNIS
  528.       HH_ERROR_NONE  - Alles klar.
  529.       sonst          - Einer  der  HH_ERROR_-Codes.   Es wurde bereits ein
  530.                        Requester   mit   der   Fehlermeldung  in  Klartext
  531.                        ausgegeben.  Ausgenommen davon sind nur Fehlercodes
  532.                        mit Werten kleiner 10.
  533.  
  534.    BEMERKUNG
  535.  
  536. \*----------------------------------------------------------------------*/
  537.  
  538.  
  539. /*----------------------------------------------------------------------*\
  540.    NAME
  541.       HH_ASyncSearch - Suchen innerhalb eines HotHelp-Fensters
  542.                        (V3)
  543.  
  544.    SCHREIBWEISE
  545.       LONG HH_ASyncSearch
  546.          (
  547.          LONG     id,
  548.          BYTE *   str,
  549.          UWORD    flags
  550.          )
  551.  
  552.    FUNKTION
  553.       Mit   Hilfe   dieser   Funktion   kann   die   Such-Funktion   eines
  554.       HotHelp-Fensters gesteuert werden.
  555.       Die  Funktion  darf  auch auf Fenster angewendet werden, die bereits
  556.       geschlossen wurden, da die Library diesen Fall abfängt.
  557.  
  558.    EINGABEN
  559.       id:
  560.          Die  ID  des  asynchronen Fensters, die von 'HH_EasyASyncHelp ()'
  561.          oder  über  das  ID-Tag von 'HH_ShowHelpTagList ()' zurückgegeben
  562.          wurde und die das Fenster beschreibt, das hier manipuliert werden
  563.          soll.
  564.       str:
  565.          Zeiger auf den String mit dem Suchbegriff.  Der String darf nicht
  566.          leer sein!
  567.       flags:
  568.          Eine  Kombination  der  drei  HH_SEARCH_...-Flags,  die  den drei
  569.          Checkmark-Gadgets im Such-Fenster entsprechen.
  570.  
  571.  
  572.    ERGEBNIS
  573.       HH_ERROR_NONE  - Alles klar.
  574.       sonst          - Einer  der  HH_ERROR_-Codes.   Es wurde bereits ein
  575.                        Requester   mit   der   Fehlermeldung  in  Klartext
  576.                        ausgegeben.  Ausgenommen davon sind nur Fehlercodes
  577.                        mit Werten kleiner 10.
  578.  
  579.    BEMERKUNG
  580.  
  581. \*----------------------------------------------------------------------*/
  582.  
  583.  
  584. /*----------------------------------------------------------------------*\
  585.    NAME
  586.       HH_ASyncStatus - Abfragen     des     Status    eines    asynchronen
  587.                        HotHelp-Fensters.
  588.                        (V3)
  589.  
  590.    SCHREIBWEISE
  591.       LONG HH_ASyncStatus
  592.          (
  593.          LONG                 id,
  594.          struct HH_Status *   status
  595.          )
  596.  
  597.    FUNKTION
  598.       Über    diese   Funktion   kann   der   Status   eines   asynchronen
  599.       HotHelp-Fensters  abgefragt  werden.   Dies  umfaßt den eingegebenen
  600.       Projekt-  und  Schlüssel-Begriff, Projekt- und Schlüssel des aktuell
  601.       dargestellten  Textes,  die  Anzahl  von  Zeilen und Spalten, die im
  602.       Fenster  angezeigt  werden können, die Anzahl von Zeilen und Spalten
  603.       im  gesamten  Text  und  die  Nummer der ersten sichtbaren Zeile und
  604.       Spalte.
  605.       Die  Funktion  darf  auch auf Fenster angewendet werden, die bereits
  606.       geschlossen wurden, da die Library diesen Fall abfängt.
  607.  
  608.    EINGABEN
  609.       id:
  610.          Die  ID  des  asynchronen Fensters, die von 'HH_EasyASyncHelp ()'
  611.          oder  über  das  ID-Tag von 'HH_ShowHelpTagList ()' zurückgegeben
  612.          wurde und die das Fenster beschreibt, das hier manipuliert werden
  613.          soll.
  614.       status:
  615.          Zeiger   auf   eine   HH_Status-Struktur,  die  von  HotHelp  mit
  616.          sinnvollen  Werten  ausgefüllt wird (sofern kein Fehler auftritt;
  617.          dann ist der Inhalt der Struktur undefiniert).
  618.  
  619.    ERGEBNIS
  620.       HH_ERROR_NONE  - Alles klar.
  621.       sonst          - Einer  der  HH_ERROR_-Codes.   Es wurde bereits ein
  622.                        Requester   mit   der   Fehlermeldung  in  Klartext
  623.                        ausgegeben.  Ausgenommen davon sind nur Fehlercodes
  624.                        mit Werten kleiner 10.
  625.  
  626.    BEMERKUNG
  627.       Da  der Benutzer jederzeit den sichtbaren Textausschnitt verschieben
  628.       oder  einen  neuen Text einlesen kann, kann nicht garantiert werden,
  629.       daß  die  Struktur  den  tatsächlichen  Inhalt  des HotHelp-Fensters
  630.       beschreibt.  Ggf.  sollte daher mit 'Forbid ()' gearbeitet werden.
  631.  
  632. \*----------------------------------------------------------------------*/
  633.  
  634.  
  635. /*----------------------------------------------------------------------*\
  636.    NAME
  637.       HH_ASyncStrGadget - Steuerung  der  String-Gadgets eines asynchronen
  638.                           HotHelp-Fensters.
  639.                           (V3)
  640.  
  641.    SCHREIBWEISE
  642.       LONG HH_ASyncStrGadget
  643.          (
  644.          LONG     id,
  645.          BYTE *   new_project,
  646.          BYTE *   new_key,
  647.          BYTE *   old_project,
  648.          BYTE *   old_key,
  649.          BOOL     check_all,
  650.          WORD     group
  651.          )
  652.  
  653.    FUNKTION
  654.       Diese  Funktion  ermöglicht  das  Setzen  bzw.   Auslesen der beiden
  655.       String-Gadgets  eines  asynchronen  HotHelp-Fensters.   Auslesen und
  656.       Setzen  können  auch  miteinander  verknüpft  werden; in diesem Fall
  657.       werden   die  alten  Inhalte  der  Gadgets  (vor  der  angeforderten
  658.       Änderung) zurückgegeben.
  659.       Die  Funktion  darf  auch auf Fenster angewendet werden, die bereits
  660.       geschlossen wurden, da die Library diesen Fall abfängt.
  661.  
  662.    EINGABEN
  663.       id:
  664.          Die  ID  des  asynchronen Fensters, die von 'HH_EasyASyncHelp ()'
  665.          oder  über  das  ID-Tag von 'HH_ShowHelpTagList ()' zurückgegeben
  666.          wurde und die das Fenster beschreibt, das hier manipuliert werden
  667.          soll.
  668.       new_project, new_key:
  669.          Zeiger  auf  den  neuen  Projekt-  bzw.   Schlüssel-String.   Die
  670.          Strings   dürfen   nicht  länger  als  HH_PROJECT_LEN  -  1  bzw.
  671.          HH_KEY_LEN - 1 sein.  Die Eingaben werden so behandelt, als hätte
  672.          der  User  die Strings von Hand in die beiden Gadgets eingetragen
  673.          und  dann  durch <Return> bestätigt.  Soll ein String unverändert
  674.          bleiben,  kann  die  entsprechende  Variable  als  NULL übergeben
  675.          werden.  Werden beide auf NULL gesetzt, werden sie ignoriert.
  676.       old_project, old_key:
  677.          Zeiger  auf  mindestens HH_PROJECT_LEN bzw.  HH_KEY_LEN Speicher.
  678.          Die  Inhalte  der  beiden String-Gadgets werden in diese Bereiche
  679.          kopiert.   Wird  statt  einer  Adresse  NULL  übergeben, wird die
  680.          entsprechende  Variable  ignoriert.   Bei  zwei  NULLs wird keine
  681.          Aktion  ausgeführt.   Trat  bei  der  Ausführung  ein Fehler auf,
  682.          beinhalten diese Variablen keine sinnvollen Werte.
  683.       check_all:
  684.          Dieser Parameter entspricht der 'OpenAll'-Option, die beim Öffnen
  685.          eines   HotHelp-Fensters  angegeben  werden  kann.   Er  ist  nur
  686.          sinnvoll,  wenn  auch  'new_project' und/oder 'new_key' angegeben
  687.          werden.   Falls  in  dem  angegebenen  Projekt kein Schlüssel des
  688.          gesuchten  Namens  gefunden  wird  und  wenn  hier TRUE übergeben
  689.          wurde, durchsucht HotHelp anschließend alle übrigen Projekte nach
  690.          diesem  Schlüssel.   Wird  FALSE  übergeben,  wird lediglich eine
  691.          Fehlermeldung ausgegeben.
  692.          Auf  diese  Weise  kann  der  Projekt-String als eine Art Vorgabe
  693.          aufgefaßt  werden:   Wird  der  gesuchte Schlüssel dort gefunden,
  694.          wird  er  dargestellt  - andernfalls werden automatisch auch alle
  695.          übrigen Projekte durchsucht.
  696.       group:
  697.          Über   diesen  Parameter  kann  die  Schlüssel-Gruppe  ausgewählt
  698.          werden,  aus  der  der  gesuchte Schlüssel entnommen werden soll.
  699.          Die  Option  ist  sehr  nützlich,  wenn ein Schlüssel mehrmals in
  700.          einem   Projekt,   aber   jeweils  in  unterschiedlichen  Gruppen
  701.          auftaucht,   um   gezielt   einen   bestimmten  dieser  Schlüssel
  702.          ansprechen zu können.
  703.          Werte kleiner 1 und größer 255 werden ignoriert.
  704.  
  705.    ERGEBNIS
  706.       HH_ERROR_NONE  - Alles klar.
  707.       sonst          - Einer  der  HH_ERROR_-Codes.   Es wurde bereits ein
  708.                        Requester   mit   der   Fehlermeldung  in  Klartext
  709.                        ausgegeben.  Ausgenommen davon sind nur Fehlercodes
  710.                        mit Werten kleiner 10.
  711.  
  712.    BEMERKUNG
  713.  
  714. \*----------------------------------------------------------------------*/
  715.  
  716.  
  717. /*----------------------------------------------------------------------*\
  718.    NAME
  719.        HH_ASyncWindowAddr  - Ermitteln der Window-Adresse eines asynchronen
  720.                             HotHelp-Fensters.
  721.                             (V3)
  722.  
  723.    SCHREIBWEISE
  724.       LONG HH_ASyncWindowAddr
  725.          (
  726.          LONG              id,
  727.          struct Window **  win
  728.          )
  729.  
  730.    FUNKTION
  731.       Über  diese  Funktion kann die Adresse des Windows eines asynchronen
  732.       HotHelp-Fensters ermittelt werden.
  733.       Die  Funktion  darf  auch auf Fenster angewendet werden, die bereits
  734.       geschlossen wurden, da die Library diesen Fall abfängt.
  735.  
  736.    EINGABEN
  737.       id:
  738.          Die  ID  des  asynchronen Fensters, die von 'HH_EasyASyncHelp ()'
  739.          oder  über  das  ID-Tag von 'HH_ShowHelpTagList ()' zurückgegeben
  740.          wurde und die das Fenster beschreibt, das hier manipuliert werden
  741.          soll.
  742.       win:
  743.          Wenn  die Funktionen keinen Fehler zurückliefert (HH_ERROR_NONE),
  744.          befindet  sich  in  der Variable, auf die dieser Parameter zeigt,
  745.          die  Adresse  der Window-Struktur des HotHelp-Fensters. Ansonsten
  746.          ist ihr Inhalt undefiniert.
  747.  
  748.    ERGEBNIS
  749.       HH_ERROR_NONE  - Alles klar.
  750.       sonst          - Einer  der  HH_ERROR_-Codes.   Es wurde bereits ein
  751.                        Requester   mit   der   Fehlermeldung  in  Klartext
  752.                        ausgegeben.  Ausgenommen davon sind nur Fehlercodes
  753.                        mit Werten kleiner 10.
  754.  
  755.    BEMERKUNG
  756.       Der Aufruf dieser Funktion und die Auswertung des Rückgabewertes muß
  757.       grundsätzlich   bei   ausgeschaltetem   Multitasking  ('Forbid  ()')
  758.       erfolgen,  da  andernfalls immer die Gefahr besteht, daß das Fenster
  759.       vom  User  geschlossen  wird  -  was  zu einem ungültigen Zeiger und
  760.       wahrscheinlich zu einem Absturz führt!
  761.       Die  Window-Struktur  darf  nur  ausgelesen  werden  - eine Änderung
  762.       (gleich  welcher  Art)  wird  nicht unterstützt und kann zu beliebig
  763.       katastrophalen Ergebnissen führen!
  764.  
  765. \*----------------------------------------------------------------------*/
  766.  
  767.  
  768. /*----------------------------------------------------------------------*\
  769.    NAME
  770.       HH_Beep - Aufblitzen des Bildschirms + Piepton
  771.                 (V3)
  772.  
  773.    SCHREIBWEISE
  774.       VOID HH_Beep
  775.          (
  776.          struct Screen *   screen
  777.          )
  778.  
  779.    FUNKTION
  780.       Während  die  Intuition-Funktion 'DisplayBeep ()' den Bildschirm nur
  781.       kurz  aufblitzen  läßt,  gibt  diese Funktion gleichzeitig auch noch
  782.       einen  Piepton  aus  (sofern  diese  Option  nicht  über HotHelpPref
  783.       ausgeschaltet wird).
  784.    
  785.    EINGABEN
  786.       screen:
  787.          Adresse  des  Screens,  der aufblitzen soll bzw.  NULL, wenn alle
  788.          Screens kurz hervorgehoben werden sollen.
  789.          
  790.    ERGEBNIS
  791.  
  792.    BEMERKUNG
  793.       Der  Einfachkeit  halber  wird der Piepton einfach über die Hardware
  794.       erzeugt.  Erzeugt gleichzeitig noch ein anderes Programm Sound (z.B.
  795.       auch  über  das Audio-Device), hört sich das Ergebnis wahrscheinlich
  796.       nicht sehr gut an...
  797.       Weiterhin  muß  noch  beachtet  werden,  daß  die  Funktion  nur von
  798.       Prozessen aufgerufen werden darf, da sie die DOS-Funktion 'Delay ()'
  799.       verwendet.
  800.  
  801. \*----------------------------------------------------------------------*/
  802.  
  803.  
  804. /*----------------------------------------------------------------------*\
  805.    NAME
  806.       HH_BuildMenus - Erzeugen von Menus aus NewMenu-Strukturen
  807.                       (V3)
  808.  
  809.    SCHREIBWEISE
  810.       struct Menu * HH_BuildMenus
  811.          (
  812.          struct NewMenu *     newmenu,
  813.          struct Remember **   remember,
  814.          struct Screen *      screen,
  815.          struct TextFont *    tf,
  816.          BOOL *               gadtools_menus,
  817.          BOOL                 get_shortcuts
  818.          )
  819.  
  820.    FUNKTION
  821.       Diese   Funktion   ähnelt   den   Funktionen  'CreateMenus  ()'  und
  822.       'LayoutMenus  ()'  der  GadTools-Library,  da sie aus einem Feld von
  823.       NewMenu-Strukturen  eine  verkettete  Liste von Menu-, MenuItem- und
  824.       IntuiText-Strukturen  erzeugt,  die  direkt  als  Menu ans Intuition
  825.       weitergereicht werden kann.
  826.       Ab  OS 2.0 greift die Funktion dazu auf die GadTools-Library zurück;
  827.       unter älteren OS-Versionen werden die benötigten Strukturen von Hand
  828.       erzeugt.   Ab  OS  3.0 werden die Menus mit dem neuen NEWLOOK-Design
  829.       erzeugt,   so   daß   das   entsprechende   Fenster   auch  mit  dem
  830.       WFLG_NewLookMenus-Flag geöffnet werden sollte.
  831.    
  832.    EINGABEN
  833.       newmenu:
  834.          Zeiger  auf  ein  Feld  von  NewMenu-Strukturen.   Die  folgenden
  835.          Features   dürfen   nicht  verwendet  werden:   IM_ITEM,  IM_SUB,
  836.          NM_IGNORE,  'nm_UserData'.   Alle  anderen GadTools-Möglichkeiten
  837.          werden unterstützt.
  838.          Shortcuts  können auf zwei Wegen angegeben werden:  als String in
  839.          'nm_CommKey'   oder   integriert   in   'nm_Label'.   Die  zweite
  840.          Möglichkeit ist sehr praktisch, wenn das Menu an mehrere Sprachen
  841.          angepaßt  werden  soll,  da  der Shortcut und die Beschriftung zu
  842.          einem String zusammengefaßt sind.  Der Shortcut muß dazu (umgeben
  843.          von  zwei  Underscores) an den Anfang des Strings gesetzt werden.
  844.          "_s_Sichern"  ist  ein  Beispiel  für  ein  MenuItem mit dem Text
  845.          "Sichern" und dem Shortcut "s".
  846.          Unter  OS  1.3  und 2.0 können andere Shortcuts als Kombinationen
  847.          mit  der  Amiga-Taste  (wie z.B.  CTRL-1 in HotHelp-Fenstern) nur
  848.          angezeigt   werden,   indem   der   entsprechende   Text  an  den
  849.          eigentlichen  Itemtext  angehängt  wird;  also:   "Setze  Marke 1
  850.          CTRL-1".   Ab  OS  3.0  können  auch Shortcuts mit mehr als einem
  851.          Zeichen  angegeben  werden.   Damit ein Item mit mehrbuchstabigem
  852.          Shortcut  unter  allen  Betriebssystem-Versionen angezeigt werden
  853.          kann,    muß    der   Text   in   folgendem   Format   vorliegen:
  854.          "_shortcut_ItemText shortcut".  Das obige Beispiel müßte also als
  855.          "_CTRL-1_Setze Marke 1 CTRL-1" abgelegt werden.  Ist der Shortcut
  856.          am  Anfang  des Strings also länger als ein Zeichen, geht HotHelp
  857.          davon  aus,  daß  der  String in genau diesem Format vorliegt und
  858.          behandelt ihn entsprechend.
  859.          Die    Library   ändert   zwar   nicht   die   Strings   in   den
  860.          NewMenu-Strukturen,  dafür  jedoch  die NewMenu-Strukturen selber
  861.          (Shortcuts  am  Stringanfang werden z.B.  übersprungen, indem der
  862.          'nm_Label'-Zeiger einfach entsprechend erhöht wird).  Dies sollte
  863.          beachtet   werden,  wenn  die  Funktion  mehrmals  mit  denselben
  864.          Strukturen aufgerufen wird.
  865.       remember:
  866.          Falls  noch  Speicher  für  die Umwandlung benötigt wird, wird er
  867.          über  diesen  Schlüssel  von  der Library angelegt; wird das Menu
  868.          nicht  mehr  verwendet,  kann der Speicher über 'FreeRemember ()'
  869.          einfach wieder freigegeben werden.
  870.       screen:
  871.          Zeiger auf den Screen, auf dem das Menu später dargestellt werden
  872.          soll.   Ab  OS  2.0  muß hier ein echter Screen übergeben werden;
  873.          unter   OS   1.3   reicht   auch  eine  über  'GetScreenData  ()'
  874.          initialisierte Kopie aus.
  875.       tf:
  876.          Die Menus werden unter Verwendung dieses Zeichensatzes aufgebaut.
  877.          Unter  OS  1.3  wird,  sofern  die  Menus  zu groß für den Screen
  878.          werden, auf Topaz-8 zurückgeschaltet.
  879.       gadtools_menus:
  880.          Die  Variable,  auf  die  dieser  Parameter  zeigt, kann nach der
  881.          Ausführung einen der beiden folgenden Werte beinhalten:
  882.          TRUE  - Die  Menus wurden mit Hilfe der GadTools-Library erzeugt;
  883.                  sie   müssen   später  wieder  über  'FreeMenus  ()'  und
  884.                  'FreeRemember (remember) freigegeben werden.
  885.          FALSE - Die   Menus   wurden   von   Hand   erzeugt;  sie  werden
  886.                  freigegeben,    indem   der   Schlüssel   'remember'   an
  887.                  'FreeRemember ()' übergeben wird.
  888.       get_shortcuts:
  889.          Dieses Flag  muß gesetzt werden, wenn die Library die übergebenen
  890.          Labels nach Shortcuts durchsuchen soll.
  891.          
  892.    ERGEBNIS
  893.       Ein  Zeiger  auf den erzeugten Menustrip bzw.  NULL, wenn ein Fehler
  894.       auftrat.
  895.  
  896.    BEMERKUNG
  897.  
  898. \*----------------------------------------------------------------------*/
  899.  
  900.  
  901. /*----------------------------------------------------------------------*\
  902.    NAME
  903.       HH_CheckPattern - Vergleich eines HotHelp-Patterns mit einem String
  904.                         (V3)
  905.  
  906.    SCHREIBWEISE
  907.       BOOL HH_CheckPattern
  908.          (
  909.          BYTE *   pattern,
  910.          BYTE *   str
  911.          )
  912.  
  913.    FUNKTION
  914.       Die  Funktion  vergleicht  einen  Muster-String  mit  einem weiteren
  915.       String  und entscheidet, ob das Muster den zweiten String beschreibt
  916.       oder nicht.
  917.       Sie  sollte lediglich von Handlern verwendet werden, die von HotHelp
  918.       ein  Muster  als Projekt- oder Schlüssel-Name erhalten.  Der Handler
  919.       kann  dann  mit  Hilfe  dieser  Funktion  alle  von  ihm verwalteten
  920.       Projekte oder Schlüssel mit dem entsprechenden Muster auf Gleichheit
  921.       überprüfen  und  so  dem  Benutzer eine Auswahl seiner Schlüssel zur
  922.       Verfügung  stellen.   Dadurch wird gewährleistet, daß auch bei einer
  923.       späteren  Erweiterung  von HotHelps Muster-Möglichkeiten die Handler
  924.       dieselben   Muster   wie   die   jeweils   aktuelle  Library-Version
  925.       anerkennen.   Ausführliche  Informationen über Handler finden Sie in
  926.       der gleichnamigen Datei.
  927.  
  928.    EINGABEN
  929.       pattern:
  930.          Zeiger  auf den String mit dem Muster, der von der Library an den
  931.          Handler übergeben wurde.
  932.       str:
  933.          Zeiger auf den String, der mit dem Muster in 'pattern' verglichen
  934.          werden soll.
  935.  
  936.    ERGEBNIS
  937.       TRUE  - 'pattern' und 'str' stimmen überein.
  938.       FALSE - Keine Übereinstimmung.
  939.  
  940.    BEMERKUNG
  941.  
  942. \*----------------------------------------------------------------------*/
  943.  
  944.  
  945. /*----------------------------------------------------------------------*\
  946.    NAME
  947.       HH_CheckProject - Überprüft, ob ein Projekt aktiv ist oder nicht
  948.                         (V3)
  949.  
  950.    SCHREIBWEISE
  951.       BOOL HH_CheckProject
  952.          (
  953.          BYTE *   name
  954.          )
  955.  
  956.    FUNKTION
  957.       Mit  Hilfe  dieser Funktion kann überprüft werden, ob ein bestimmtes
  958.       Projekt  existiert und aktiv ist - das bedeutet, daß jetzt Schlüssel
  959.       aus  diesem  Projekt  abgerufen werden können.  Die Funktion liefert
  960.       FALSE   zurück,   wenn   das   Projekt   nicht  existiert  (also  in
  961.       'HOTHELP:Projekte' keine  entsprechende  Header-Datei vorliegt) oder
  962.       wenn  das  Projekt  zwar existiert, aber über HotHelpPro deaktiviert
  963.       wurde.
  964.       HotHelp  vergleicht den Namen des gesuchten Projektes ohne Beachtung
  965.       von Groß- und Kleinschreibung.
  966.  
  967.    EINGABEN
  968.       name:
  969.          Name des gesuchten Projekts.
  970.  
  971.    ERGEBNIS
  972.       TRUE  - Es existiert ein aktives Projekt unter dem Namen 'name'.
  973.       FALSE - Es existiert kein solches Projekt.
  974.  
  975.    BEMERKUNG
  976.       Vor  Aufruf  der Funktion sollte über 'HH_OpenAll ()' sichergestellt
  977.       werden,  daß  die  Library  ihre  Ressourcen  bereits geöffnet hat -
  978.       andernfalls  gibt  die  Funktion  grundsätzlich FALSE zurück, da die
  979.       Library  noch  keine  Übersicht  über  die existierenden und aktiven
  980.       Projekte aufgebaut hat.
  981. \*----------------------------------------------------------------------*/
  982.  
  983.  
  984. /*----------------------------------------------------------------------*\
  985.    NAME
  986.       HH_CreatePath - Anlegen eines kompletten Pfades
  987.                       (V3)
  988.  
  989.    SCHREIBWEISE
  990.       BOOL HH_CreatePath   
  991.          (
  992.          BYTE *               path,
  993.          struct DiskObject *  dobj
  994.          )
  995.  
  996.    FUNKTION
  997.       Während die DOS-Funktion 'CreateDir ()' immer nur das letzte Element
  998.       eines  Pfades  neu  erzeugt, legt diese Funktion alle noch fehlenden
  999.       Verzeichnisse  neu  an.   Existiert der komplette Pfad bereits, wird
  1000.       keine  Aktion  durchgeführt.   Existiert  der Pfad schon, beschreibt
  1001.       aber kein Verzeichnis, sondern eine Datei, wird FALSE zurückgegeben.
  1002.  
  1003.    EINGABEN
  1004.       path:
  1005.          Der Name des zu erzeugenden Pfades.
  1006.       dobj:
  1007.          Falls  für  jedes neu erzeugte Verzeichnis auch ein Icon angelegt
  1008.          werden   soll,   so  muß  hier  eine  entsprechend  intialisierte
  1009.          DiskObject-Struktur   übergeben   werden,   die  ein  Drawer-Icon
  1010.          beschreibt.  Wird statt dessen NULL übergeben, werden keine Icons
  1011.          erzeugt.    Falls   beim  Schreiben  der  Icon-Datei  ein  Fehler
  1012.          auftritt,   wird  dies  NICHT  zurück  gemeldet  -  die  Funktion
  1013.          scheitert nur, wenn ein Verzeichnis nicht angelegt werden konnte!
  1014.  
  1015.    ERGEBNIS
  1016.       TRUE  - Alles klar.
  1017.       FALSE - Es  ist  ein  Fehler  aufgetreten  - es existiert schon eine
  1018.               Datei  unter  diesem  Namen,  ein  Teil des Pfades existiert
  1019.               schon  als  Datei oder ein Lock konnte nicht erlangt werden,
  1020.               weil das entsprechende Objekt schon verriegelt ist.
  1021.  
  1022.    BEMERKUNG
  1023.  
  1024. \*----------------------------------------------------------------------*/
  1025.  
  1026.  
  1027. /*----------------------------------------------------------------------*\
  1028.    NAME
  1029.       HH_EasyASyncHelp - ASynchrones Pendant zu 'HH_EasyHelp ()'.
  1030.                          (V3)
  1031.  
  1032.    SCHREIBWEISE
  1033.       LONG HH_EasyASyncHelp
  1034.          (
  1035.          BYTE *            project,
  1036.          BYTE *            key,
  1037.          struct Screen *   screen,
  1038.          struct Window *   window,
  1039.          BOOL              last_pos,
  1040.          BOOL              last_text
  1041.          )
  1042.  
  1043.    FUNKTION
  1044.       Wie 'HH_EasyHelp ()' öffnet auch diese Funktion ein HotHelp-Fenster,
  1045.       wobei  nur  einige  Einstellungen  getroffen werden können.  Während
  1046.       'HH_EasyHelp  ()'  jedoch erst zum Aufrufer zurückkehrt, nachdem das
  1047.       Fenster  wieder  geschlossen wurde, kehrt diese Funktion unmittelbar
  1048.       nach  dem  Öffnen des Fensters zurück - das aufrufende Programm kann
  1049.       also parallel (asynchron) zu HotHelp weiter ablaufen.
  1050.       HotHelp   steuert   des   neue  Fenster  vollkommen  unabhängig  vom
  1051.       aufrufenden  Programm,  so  daß  dieses  auch  beendet  werden kann,
  1052.       solange das Fenster noch geöffnet ist.
  1053.  
  1054.    EINGABEN
  1055.       project, key:
  1056.          Zeiger  auf  maximal  HH_PROJECT_LEN bzw.  HH_KEY_LEN Bytes.  Sie
  1057.          enthalten  den  Namen  des gewünschten Projekts bzw.  Schlüssels.
  1058.          Wird  NULL  übergeben,  setzt  HotHelp automatisch "*" dafür ein.
  1059.          Weiteres   siehe   bei   den   entsprechenden   Feldern   in  der
  1060.          HH_NewWindow-Struktur.
  1061.       screen, window:
  1062.          Zeiger  auf  Screen  und/oder Window, auf denen sich das HotHelp-
  1063.          Fenster  öffnen  soll.   Wird für 'window' ein Wert ungleich NULL
  1064.          angegeben,  wird das neue Fenster auf demselben Screen wie dieses
  1065.          Fenster  geöffnet  -  'screen'  wird  also  ignoriert.   Ist auch
  1066.          'screen' NULL, öffnet sich das Fenster auf dem Workbench-Screen.
  1067.       last_pos:
  1068.          Wird  hier  TRUE  übergeben, öffnet sich das Fenster an derselben
  1069.          Position  wie  das  als  letztes geschlossene Fenster, unabhängig
  1070.          davon,  welches  Programm  dieses  letzte Fenster geöffnet hatte!
  1071.          Ansonsten   öffnet  das  Fenster  sich  an  der  mit  HotHelpPref
  1072.          vorgegebenen Position.
  1073.       last_text:
  1074.          Wird  hier  TRUE übergeben, öffnet sich das Fenster mit demselben
  1075.          Inhalt  wie  das  als  letztes  geschlossene  Fenster, unabhängig
  1076.          davon, welches Programm dieses letzte Fenster geöffnet hatte!  In
  1077.          diesem Fall werden 'project' und 'key' ignoriert.
  1078.  
  1079.    ERGEBNIS
  1080.       0     - Das  Fenster konnte nicht geöffnet werden.  Es wurde bereits
  1081.               ein  Requester  mit einer entsprechenden Meldung ausgegeben.
  1082.       sonst - Die   ID   des   neuen  HotHelp-Handlers.   Diese  wird  zur
  1083.               Kommunikation  mit dem Handler benutzt, sofern das gewünscht
  1084.               ist.
  1085.  
  1086.       ACHTUNG:   Im  Gegensatz zu den übrigen Befehlen wird hier also kein
  1087.       Fehlercode  zurückgegeben,  sondern die ID, über die das Fenster mit
  1088.       Hilfe  der  'HH_ASync...'-Funktionen  von  außen  manipuliert werden
  1089.       kann.
  1090.  
  1091.    BEMERKUNG
  1092.  
  1093. \*----------------------------------------------------------------------*/
  1094.  
  1095.  
  1096. /*----------------------------------------------------------------------*\
  1097.    NAME
  1098.       HH_EasyHelp - Weniger komplexer Einstiegspunkt als 'HH_ShowHelp ()'.
  1099.  
  1100.    SCHREIBWEISE
  1101.       LONG HH_EasyHelp
  1102.          (
  1103.          BYTE *            project,
  1104.          BYTE *            key,
  1105.          struct Screen *   screen,
  1106.          struct Window *   window,
  1107.          BOOL              last_pos,
  1108.          BOOL              last_text
  1109.          )
  1110.  
  1111.    FUNKTION
  1112.       Die  Funktion  öffnet  ein  Fenster und stellt Hilfsinformationen zu
  1113.       einem  gewünschten  Thema  dar.  Dabei benötigt die Funktion weniger
  1114.       komplexe  Eingabedaten  als 'HH_ShowHelp ()', bietet dafür aber auch
  1115.       weniger  Möglichkeiten,  die  Interna  von  HotHelp anzusprechen; es
  1116.       werden  grundsätzlich  immer  die  im  HotHelpManager  eingestellten
  1117.       Default-Werte  benutzt.   Wenn  das kein Problem darstellt oder wenn
  1118.       die    verwendete    Programmier-Sprache   keine   zusammengesetzten
  1119.       Datentypen  kennt,  ist  diese  Funktion  jedoch  sicher  der ideale
  1120.       Einstiegspunkt.
  1121.  
  1122.    EINGABEN
  1123.       project, key:
  1124.          Zeiger  auf  maximal  HH_PROJECT_LEN bzw.  HH_KEY_LEN Bytes.  Sie
  1125.          enthalten  den  Namen  des gewünschten Projekts bzw.  Schlüssels.
  1126.          Wird  NULL  übergeben,  setzt  HotHelp automatisch "*" dafür ein.
  1127.          Weiteres   siehe   bei   den   entsprechenden   Feldern   in  der
  1128.          HH_NewWindow-Struktur.
  1129.       screen, window:
  1130.          Zeiger  auf  Screen  und/oder Window, auf denen sich das HotHelp-
  1131.          Fenster  öffnen  soll.   Wird für 'window' ein Wert ungleich NULL
  1132.          angegeben,  wird das neue Fenster auf demselben Screen wie dieses
  1133.          Fenster  geöffnet  -  'screen'  wird  also  ignoriert.   Ist auch
  1134.          'screen' NULL, öffnet sich das Fenster auf dem Workbench-Screen.
  1135.       last_pos:
  1136.          Wird  hier  TRUE  übergeben, öffnet sich das Fenster an derselben
  1137.          Position  wie  das  als  letztes geschlossene Fenster, unabhängig
  1138.          davon,  welches  Programm  dieses  letzte Fenster geöffnet hatte!
  1139.          Ansonsten  öffnet  das  Fenster  sich  an  der  im HotHelpManager
  1140.          vorgegebenen Position.
  1141.       last_text:
  1142.          Wird  hier  TRUE übergeben, öffnet sich das Fenster mit demselben
  1143.          Inhalt  wie  das  als  letztes  geschlossene  Fenster, unabhängig
  1144.          davon, welches Programm dieses letzte Fenster geöffnet hatte!  In
  1145.          diesem Fall werden 'project' und 'key' ignoriert.
  1146.  
  1147.    ERGEBNIS
  1148.       HH_ERROR_NONE  - Das  Fenster  konnte  problemlos  geöffnet  werden.
  1149.                        Tritt  später ein Fehler auf (z.B.  Text kann nicht
  1150.                        geladen  werden),  gibt  HotHelp eine entsprechende
  1151.                        Meldung  in  seinem  Fenster  aus  -  der  Aufrufer
  1152.                        erfährt davon jedoch nichts mehr (wozu auch?).
  1153.       sonst          - Einer  der HH_ERROR_-Codes.  Die meisten der Fehler
  1154.                        können  nur auftreten, wenn das allererste HotHelp-
  1155.                        Fenster  seit  dem letzten Booten geöffnet wird, da
  1156.                        sie  durch  einen  impliziten  Aufruf  der Funktion
  1157.                        'HH_OpenAll  ()'  hervorgerufen  werden.   Es wurde
  1158.                        bereits  ein  Requester  mit  der  Fehlermeldung in
  1159.                        Klartext  ausgegeben.   Ausgenommen  davon sind nur
  1160.                        Fehlercodes mit Werten kleiner 10.
  1161.  
  1162.    BEMERKUNG
  1163.  
  1164. \*----------------------------------------------------------------------*/
  1165.  
  1166.  
  1167. /*----------------------------------------------------------------------*\
  1168.    NAME
  1169.       HH_FileRequest - Erfragen eines Verzeichnis- und Datei-Namens.
  1170.                        (V3)
  1171.  
  1172.    SCHREIBWEISE
  1173.       BOOL HH_FileRequest
  1174.          (
  1175.          struct Window *   window,
  1176.          BYTE *            title,
  1177.          BYTE *            dir_buf,
  1178.          BYTE *            file_buf,
  1179.          BYTE *            pattern,
  1180.          UWORD             flags
  1181.          )
  1182.  
  1183.    FUNKTION
  1184.       Die  Funktion  stellt  einen File-Requester zur Verfügung.  Es wurde
  1185.       jedoch  darauf  verzichtet,  speziell  für  HotHelp  einen  weiteren
  1186.       FileReq  zu entwerfen; statt dessen versucht HotHelp, auf eine Reihe
  1187.       von  anderen  Shared  Libraries  zuzugreifen, die FileReqs anbieten.
  1188.       Als erstes wird versucht, die OS 2.0-Asl-Library zu öffnen und deren
  1189.       neuen  Standard-Req  zu  verwenden.   Schlägt  dies  fehl,  weil das
  1190.       Programm  unter  OS  1.3  arbeitet, spricht HotHelp nacheinander die
  1191.       ReqTools-,  die  RCT-  und  die Arp-Library an.  Sollte keine dieser
  1192.       vier Libraries gefunden werden (weil der User so dumm ist, mit einer
  1193.       absolut originalen 1.3-Workbench zu arbeiten...), greift HotHelp auf
  1194.       eine  Notlösung  zurück  und  fragt den User in einem Console-Window
  1195.       nach Verzeichnis- und Datei-Name...
  1196.       Die   Auswertung   der   Parameter   'pattern',   HHFR_SAVEMODE  und
  1197.       HHFR_DRAWERSONLY  hängt  vom  verwendeten  FileReq  ab;  je nachdem,
  1198.       welche  Library  vorhanden  ist,  können sie auch gänzlich ignoriert
  1199.       werden...
  1200.  
  1201.    EINGABEN
  1202.       window:
  1203.          Zeiger  auf  ein  Fenster,  auf  dessen Screen sich der Requester
  1204.          öffnen  soll  oder NULL, wenn der Default-Public-Screen verwendet
  1205.          werden soll.
  1206.       title:
  1207.          Zeiger  auf  einen  String,  der in der Titelzeile des Requesters
  1208.          angegeben   werden   soll.    Wird   NULL   übergeben,  wird  als
  1209.          Standard-Überschrift  'Abfrage' (bzw.  das entsprechende Wort der
  1210.          aktuellen Sprache) verwendet.
  1211.       dir_buf:
  1212.          Zeiger  auf  mindestens  260  BYTE.   In  diesem  String kann der
  1213.          Anfangswert  für  das  Verzeichnis-Gadget  vorgeben  werden.  Bei
  1214.          positivem  Abschluß  befindet  sich  hierin der Name des vom User
  1215.          ausgewählten Verzeichnisses.  Ansonsten enthält der Buffer keinen
  1216.          definierten Inhalt mehr.
  1217.       file_buf:
  1218.          Zeiger  auf  mindestens  40 BYTE, die den anfänglichen Inhalt des
  1219.          Datei-Gadgets  vorgeben.  Nach positiver Ausführung befindet sich
  1220.          hierin  der  Name der vom User ausgewählten Datei.  Ansonsten ist
  1221.          der Inhalt des Strings nicht definiert.
  1222.       pattern:
  1223.          Zeiger  auf  einen  String mit einem AmigaDOS-Pattern.  Es werden
  1224.          nur  die  durch  dieses  Pattern beschriebenen Dateien angezeigt.
  1225.          Ein   Übergabe-Wert  von  NULL  signalisiert,  daß  kein  Pattern
  1226.          gewünscht ist.
  1227.       flags:
  1228.          Es  existieren  momentan  drei  Flags,  die  hier  gesetzt werden
  1229.          können:
  1230.          HHFR_SAVEMODE:
  1231.             Durch  dieses Flag kann unterschieden werden, ob der Requester
  1232.             zum  Laden oder zum Speichern verwendet werden soll.  Dies hat
  1233.             z.B.  Einfluß auf die Hintergrund- und Textfarbe.
  1234.          HHFR_DRAWERSONLY:
  1235.             Wird  dieses  Flag  gesetzt,  so ermöglicht der File-Requester
  1236.             lediglich  die  Auswahl eines Verzeichnisses, jedoch nicht den
  1237.             Namen  einer  Datei.   Ist  es  gelöscht,  wird wie üblich ein
  1238.             Verzeichnis- und Dateiname erfragt.
  1239.          HHFR_BLOCKWINDOW:
  1240.             Wenn dieses Flag gesetzt ist und wenn bei 'window' ein Fenster
  1241.             angegeben  wurde,  dann  blockiert die Funktion dieses Fenster
  1242.             automatisch,  bis  der Requester wieder geschlossen wird.  Der
  1243.             User  kann  dann in dem angegebenen Fenster weder Gadgets noch
  1244.             Menüs betätigen.
  1245.  
  1246.    ERGEBNIS
  1247.       TRUE  - Der  Pfadname  der ausgewählten Datei geht aus 'dir_buf' und
  1248.               'file_buf' hervor.
  1249.       FALSE - Der  User  hat  die  Auswahl  abgebrochen  oder  es trat ein
  1250.               Systemfehler auf.
  1251.  
  1252.    BEMERKUNG
  1253.  
  1254. \*----------------------------------------------------------------------*/
  1255.  
  1256.  
  1257. /*----------------------------------------------------------------------*\
  1258.    NAME
  1259.       HH_FontVersion - Font-Typ der installierten Library testen.
  1260.  
  1261.    SCHREIBWEISE
  1262.       LONG HH_FontVersion
  1263.          (
  1264.          VOID
  1265.          )
  1266.  
  1267.    FUNKTION
  1268.       Mit   Hilfe   dieser   Funktion   läßt  sich  herausfinden,  ob  die
  1269.       installierte HotHelp-Library über einen eingebauten FastFont verfügt
  1270.       oder nicht.
  1271.  
  1272.    EINGABEN
  1273.  
  1274.    ERGEBNIS
  1275.       HH_FONT_NORMAL
  1276.       HH_FONT_FAST_8
  1277.  
  1278.    BEMERKUNG
  1279.  
  1280. \*----------------------------------------------------------------------*/
  1281.  
  1282.  
  1283. /*----------------------------------------------------------------------*\
  1284.    NAME
  1285.       HH_KeyList - Erzeugt eine Liste mit allen Schlüsseln eines Projekts
  1286.                    (V3)
  1287.  
  1288.    SCHREIBWEISE
  1289.       LONG HH_KeyList
  1290.          (
  1291.          BYTE *         project,
  1292.          struct List *  list
  1293.          )
  1294.  
  1295.    FUNKTION
  1296.       Mit  Hilfe  dieser  Funktion  kann  eine Liste aller Schlüssel eines
  1297.       bestimmten  Projektes  angefordert werden.  Zu diesem Zweck wird für
  1298.       jeden  Schlüssel  eine HH_Key-Struktur angelegt und ausgefüllt.  Die
  1299.       neuen  Strukturen  werden  dann  jeweils  am  Ende  der Liste 'list'
  1300.       angehängt.   Die  Liste muß vorher bereits initialisiert worden sein
  1301.       und  darf auch schon Elemente beinhalten.  Die neuen Einträge werden
  1302.       alphabetisch aufsteigend am Listenende angefügt.
  1303.       HotHelp  vergleicht den Namen des gesuchten Projektes ohne Beachtung
  1304.       von Groß- und Kleinschreibung.
  1305.       HotHelp   legt  den  Speicher  für  die  Strukturen  dynamisch  über
  1306.       'AllocMem ()' an, kümmert sich dann aber nicht mehr weiter um diesen
  1307.       Speicherplatz.   Das  bedeutet,  daß der Aufrufer die Listenelemente
  1308.       selber  wieder  freigeben  muß,  nachdem er sie komplett ausgewertet
  1309.       hat!   Die  Größe  jeder Struktur geht aus dem Element 'struct_size'
  1310.       hervor;  es  darf  auf  keinen Fall einfach 'sizeof (struct HH_Key)'
  1311.       verwendet  werden; dies könnte bei späteren Versionen der Library zu
  1312.       Speicherverlusten führen!
  1313.       ACHTUNG:   Auch im Fall eines Fehlers können schon einige Strukturen
  1314.       in  die  Liste eingefügt worden sein, die dann - trotz des Fehlers -
  1315.       vom Aufrufer freigegeben werden müssen!
  1316.  
  1317.    EINGABEN
  1318.       project:
  1319.          Name  des  Projektes,  dessen  Schlüssel ermittelt werden sollen.
  1320.          Wenn kein Projekt unter diesem Namen existiert, gibt die Funktion
  1321.          keinen  Fehlercode  zurück,  fügt aber auch keine Elemente in die
  1322.          Liste ein.
  1323.          Der  Name  wird  immer  ohne  Beachtung von Groß-/Kleinschreibung
  1324.          verglichen.
  1325.       list:
  1326.          Zeiger auf eine bereits initialisierte List-Struktur.
  1327.  
  1328.    ERGEBNIS
  1329.       HH_ERROR_NONE  - Alles klar.
  1330.       sonst          - Einer  der  HH_ERROR_-Codes.   Es wurde bereits ein
  1331.                        Requester   mit   der   Fehlermeldung  in  Klartext
  1332.                        ausgegeben.  Ausgenommen davon sind nur Fehlercodes
  1333.                        mit Werten kleiner 10.
  1334.  
  1335.    BEMERKUNG
  1336.       Vor  Aufruf  der Funktion sollte über 'HH_OpenAll ()' sichergestellt
  1337.       werden,  daß  die  Library  ihre  Ressourcen  bereits geöffnet hat -
  1338.       andernfalls  verfügt  die Library noch über keine Informationen über
  1339.       die  Projekte,  so daß das gesuchte Projekt auf keinen Fall gefunden
  1340.       wird und die Liste unverändert bleibt.
  1341. \*----------------------------------------------------------------------*/
  1342.  
  1343.  
  1344. /*----------------------------------------------------------------------*\
  1345.    NAME
  1346.       HH_OpenAll - Öffnet alle benötigten Ressourcen
  1347.  
  1348.    SCHREIBWEISE
  1349.       LONG HH_OpenAll
  1350.          (
  1351.          LONG  quiet
  1352.          )
  1353.  
  1354.    FUNKTION
  1355.       Normalerweise  öffnet die HotHelp-Library alle benötigten Ressourcen
  1356.       (Projekte,  Libraries,  Speicher etc.) automatisch, sobald das erste
  1357.       Hilfs-Fenster  geöffnet  wird.   Das  führt  beim  Öffnen des ersten
  1358.       Fensters  zu  einer  spürbaren Verzögerung.  Um dem abzuhelfen, kann
  1359.       die  Library mit Hilfe dieser Funktion zu einem beliebigen Zeitpunkt
  1360.       zum Öffnen ihrer benötigten Ressourcen veranlaßt werden.
  1361.  
  1362.    EINGABEN
  1363.       quiet:
  1364.          Der  Parameter  bezieht  sich  lediglich  auf  die Behandlung des
  1365.          normalerweise  benötigten  HOTHELP-Devices,  aus  dem die Vorein-
  1366.          stellungs-Datei   und  die  Projekte  gelesen  werden.   Ist  die
  1367.          Variable  gesetzt  (also  TRUE),  durchsucht  HotHelp  zuerst die
  1368.          Device-Liste,  ob  ein  solches  Device überhaupt existiert.  Nur
  1369.          wenn   es   gefunden  wurde,  versucht  HotHelp,  die  Daten  aus
  1370.          'HOTHELP:' zu laden.
  1371.          Dieses  Vorgehen  verhindert,  daß  sich  jedesmal  einer  dieser
  1372.          lästigen  'Please  insert  volume HOTHELP in any drive'-Requester
  1373.          öffnet,  wenn die Library ohne ein HOTHELP-Device verwendet wird.
  1374.          Ist  'quiet'  hingegen  FALSE, wird direkt versucht, die Daten zu
  1375.          lesen  - was evtl.  einen Requester ergibt, wenn das Device nicht
  1376.          gefunden wurde.
  1377.          Normalerweise  wird  'HH_OpenAll  ()'  implizit  beim  Öffnen des
  1378.          ersten  HotHelp-Fensters  aufgerufen.   Um auch dabei Einfluß auf
  1379.          das  Verhalten  bzgl.  'HOTHELP:' nehmen zu können, existiert das
  1380.          HH_FLAG_QUIET-Flag,   das   dieselbe   Wirkung   hat  wie  dieser
  1381.          Parameter.
  1382.  
  1383.    ERGEBNIS
  1384.       HH_ERROR_NONE  - Alles klar.
  1385.       sonst          - Einer  der  HH_ERROR_-Codes.   Es wurde bereits ein
  1386.                        Requester   mit   der   Fehlermeldung  in  Klartext
  1387.                        ausgegeben.  Ausgenommen davon sind nur Fehlercodes
  1388.                        mit Werten kleiner 10.
  1389.  
  1390.    BEMERKUNG
  1391.  
  1392. \*----------------------------------------------------------------------*/
  1393.  
  1394.  
  1395. /*----------------------------------------------------------------------*\
  1396.    NAME
  1397.       HH_ProjectList - Erzeugt eine Liste mit allen aktiven Projekten
  1398.                        (V3)
  1399.  
  1400.    SCHREIBWEISE
  1401.       LONG HH_ProjectList
  1402.          (
  1403.          struct List *  list
  1404.          )
  1405.  
  1406.    FUNKTION
  1407.       Diese  Funktion  legt  eine  Liste  mit  Angaben  über alle momentan
  1408.       aktiven  Projekte  an.   Zu diesem Zweck wird für jedes Projekt eine
  1409.       HH_Project-Struktur  angelegt  und ausgefüllt.  Die neuen Strukturen
  1410.       werden  dann  jeweils am Ende der Liste 'list' angehängt.  Die Liste
  1411.       muß  vorher  bereits  initialisiert  worden sein und darf auch schon
  1412.       Elemente   beinhalten.    Die  neuen  Einträge  werden  alphabetisch
  1413.       aufsteigend am Listenende angefügt.
  1414.       HotHelp   legt  den  Speicher  für  die  Strukturen  dynamisch  über
  1415.       'AllocMem ()' an, kümmert sich dann aber nicht mehr weiter um diesen
  1416.       Speicherplatz.   Das  bedeutet,  daß der Aufrufer die Listenelemente
  1417.       selber  wieder  freigeben  muß,  nachdem er sie komplett ausgewertet
  1418.       hat!   Die  Größe  jeder Struktur geht aus dem Element 'struct_size'
  1419.       hervor; es darf auf keinen Fall einfach 'sizeof (struct HH_Project)'
  1420.       verwendet  werden; dies könnte bei späteren Versionen der Library zu
  1421.       Speicherverlusten führen!
  1422.       ACHTUNG:   Auch im Fall eines Fehlers können schon einige Strukturen
  1423.       in  die  Liste eingefügt worden sein, die dann - trotz des Fehlers -
  1424.       vom Aufrufer freigegeben werden müssen!
  1425.  
  1426.    EINGABEN
  1427.       list:
  1428.          Zeiger auf eine bereits initialisierte List-Struktur.
  1429.  
  1430.    ERGEBNIS
  1431.       HH_ERROR_NONE  - Alles klar.
  1432.       sonst          - Einer  der  HH_ERROR_-Codes.   Es wurde bereits ein
  1433.                        Requester   mit   der   Fehlermeldung  in  Klartext
  1434.                        ausgegeben.  Ausgenommen davon sind nur Fehlercodes
  1435.                        mit Werten kleiner 10.
  1436.  
  1437.    BEMERKUNG
  1438.       Vor  Aufruf  der Funktion sollte über 'HH_OpenAll ()' sichergestellt
  1439.       werden,  daß  die  Library  ihre  Ressourcen  bereits geöffnet hat -
  1440.       andernfalls  liefert  die  Funktion  zwar keinen Fehler zurück, fügt
  1441.       aber auch keine Projekt-Namen in die Liste ein, da die Projekte noch
  1442.       nicht eingelesen wurden!
  1443. \*----------------------------------------------------------------------*/
  1444.  
  1445.  
  1446. /*----------------------------------------------------------------------*\
  1447.    NAME
  1448.       HH_RemHandler - Entfernt einen Handler.
  1449.                       (V3)
  1450.  
  1451.    SCHREIBWEISE
  1452.       VOID HH_RemHandler
  1453.          (
  1454.          struct Interrupt *   ir
  1455.          )
  1456.  
  1457.    FUNKTION
  1458.       Diese   Funktion   muß   verwendet  werden,  um  einen  vorher  über
  1459.       'HH_AddHandler  ()' installierten Handler wieder zu entfernen.  Dies
  1460.       muß  spätestens  am  Ende  des entsprechenden Programms durchgeführt
  1461.       werden.  Falls der Handler gerade von einem anderen Prozeß verwendet
  1462.       wird, wartet die Funktion ab, bis der Handler wieder frei ist.
  1463.  
  1464.    EINGABEN
  1465.       ir:
  1466.          Zeiger  auf  die Interrupt-Struktur, die bei der Installation des
  1467.          Handlers an 'HH_AddHandler ()' übergeben worden ist.
  1468.  
  1469.    ERGEBNIS
  1470.  
  1471.    BEMERKUNG
  1472.  
  1473. \*----------------------------------------------------------------------*/
  1474.  
  1475.  
  1476. /*----------------------------------------------------------------------*\
  1477.    NAME
  1478.       HH_Request - Öffnet einen Standard-Requester
  1479.                    (V3)
  1480.  
  1481.    SCHREIBWEISE
  1482.       LONG HH_Request
  1483.          (
  1484.          struct Window *   window,
  1485.          WORD              msg_id,
  1486.          BYTE *            title,
  1487.          BYTE *            str,
  1488.          BYTE *            gadget_text,
  1489.          BOOL              ask,
  1490.          BOOL              build_only
  1491.          )
  1492.  
  1493.    FUNKTION
  1494.       Mit  Hilfe dieser Funktion kann auf einfache Weise ein Requester mit
  1495.       einem  oder  zwei  Antwort-Gadgets  erzeugt  werden.   Die  Funktion
  1496.       verwendet dazu je nach der aktuellen Betriebssystem-Version entweder
  1497.       'EasyRequestArgs ()' oder 'AutoRequest ()'.   Sollte aus irgendeinem
  1498.       Grund  die  Intuition-Library nicht geöffnet werden können, wird die
  1499.       Meldung statt dessen in einem DOS-Console-Window angezeigt.
  1500.       Die  Funktion wird von den HotHelp-Tools verwendet, um auch unter OS
  1501.       1.3  einen  Komfort  ähnlich  dem  der 'EasyRequest ()'-Funktion zur
  1502.       Verfügung zu haben.
  1503.  
  1504.    EINGABEN
  1505.       window:
  1506.          Zeiger  auf  ein  Window,  auf  dessen  Screen sich der Requester
  1507.          öffnen soll bzw. NULL für den Default-Public-Screen.
  1508.       msg_id:
  1509.          Der  hier  angegebene Wert erläutert die Art der Nachricht näher.
  1510.          Wenn  der  User  ARQ  (den Requester-Improver von Martin Laubach)
  1511.          oder  die  RCT-Library  installiert  hat , wird die entsprechende
  1512.          kleine  Animation  oder eine mehr oder weniger passende Grafik im
  1513.          Requester-Fenster   angezeigt.   Andernfalls   wird  dieses  Flag
  1514.          ignoriert.
  1515.              HH_MSG_DEFAULT  - Es   soll   die   dem   Text   entsprechende
  1516.                               Standard-Animation  abgespielt  -  ARQ  z.B.
  1517.                               untersucht  dann  wie üblich den übergebenen
  1518.                               Text   und   wählt   selber   eine  passende
  1519.                               Animation aus.
  1520.             HH_MSG_INFO     - Information
  1521.             HH_MSG_DISK     - Diskette einlegen
  1522.             HH_MSG_DELETE   - Löschen
  1523.             HH_MSG_GURU     - Krititischer Fähler
  1524.             HH_MSG_RWERROR  - Schreib-/Lese-Fehler
  1525.             HH_MSG_WPROTECT - Diskette ist schreibgeschützt
  1526.             HH_MSG_PRINTER  - Drucker
  1527.             HH_MSG_QUESTION - Nachfrage
  1528.             HH_MSG_EXCLAM   - Ausrufezeichen
  1529.       title:
  1530.          Dieser String wird als Titel des Requesters verwendet.  Unter 1.3
  1531.          taucht  er  als  Überschrift innerhalb des Requesters auf, ab 2.0
  1532.          erscheint   er   in  der  Titelzeile  des  Fensters.   Wird  NULL
  1533.          übergeben,  wird  als  Standard-Überschrift  'Abfrage' (bzw.  das
  1534.          entsprechende Wort der aktuellen Sprache) verwendet.
  1535.       str:
  1536.          Der  String,  der  dargestellt  werden  soll.   Soll er sich über
  1537.          mehrere  Zeilen  erstrecken,  kann  dies  durch Einfügen von '\n'
  1538.          erzwungen  werden.   Unter  OS 1.3 wird der String geparst und es
  1539.          werden   automatisch   entsprechend   viele  IntuiText-Strukturen
  1540.          angelegt.
  1541.       gadget_text:
  1542.          Wird   hier   NULL  übergeben,  werden  für  die  Antwort-Gadgets
  1543.          Default-Texte  verwendet  ('Ja'/'Nein'/'OK'  bzw.   entsprechende
  1544.          Texte  der  aktuellen  Sprache).  Andernfalls stellt die Variable
  1545.          einen  Zeiger auf einen String dar.  Ist 'ask' gelöscht, wird der
  1546.          komplette  String  für  das  Bestätigungs-Gadget  verwendet.  Ist
  1547.          'ask'  hingegen  gesetzt,  erwartet  HotHelp  hier  zwei Texte im
  1548.          Format  "TextJa|TextNein"  (also getrennt durch das '|'-Zeichen).
  1549.          Mehr  als  zwei Gadgets können nicht dargestellt werden, da diese
  1550.          Möglichkeit erst ab OS 2.0 existiert.  Deshalb sollten auch nicht
  1551.          mehr  als  zwei einzelne Texte auf diese Weise übergeben werden -
  1552.          unter 2.0 würde zwar die Anzahl der Gadgets automatisch angepaßt,
  1553.          da  hier  die 'EasyRequest ()'-Funktion verwendet wird; unter 1.3
  1554.          wären aber nur die beiden ersten Texte sichtbar...
  1555.       ask:
  1556.          Wird  hier  TRUE  übergeben,  befinden  sich  am unteren Rand des
  1557.          Requesters  zwei  Gadgets  mit  der Beschriftung 'JA' (links) und
  1558.          'NEIN'  (rechts).   Wird  das linke ausgewählt, gibt die Funktion
  1559.          TRUE zurück, ansonsten FALSE.
  1560.          Wenn  für  'ask'  FALSE  übergeben  wird,  wird nur ein einzelnes
  1561.          Gadget  mit der Beschriftung 'OK' erzeugt.  Der Rückgabewert kann
  1562.          in diesem Fall ignoriert werden.
  1563.          Die   Gadget-Beschriftungen  sind  an  die  aktuell  eingestellte
  1564.          Sprache angepaßt.
  1565.       build_only:
  1566.          Dieser  Parameter  sollte normalerweise auf FALSE gesetzt werden,
  1567.          wenn  der  Requester  normal  behandelt  werden  soll.  Wird TRUE
  1568.          übergeben,  öffnet HotHelp lediglich den Requester und gibt einen
  1569.          Zeiger  auf den neuen Requester zurück (oder NULL im Fehlerfall).
  1570.          Der  Requester  muß  dann  vom  Aufrufer  später  explizit  durch
  1571.          'FreeSysRequest ()' geschlossen werden.
  1572.  
  1573.    ERGEBNIS
  1574.       (Ist abhängig von 'ask' und 'build_only').
  1575.  
  1576.    BEMERKUNG
  1577.  
  1578. \*----------------------------------------------------------------------*/
  1579.  
  1580.  
  1581. /*----------------------------------------------------------------------*\
  1582.    NAME
  1583.       HH_ScanPalette - Untersucht eine Palette nach passenden Farbwerten
  1584.  
  1585.    SCHREIBWEISE
  1586.       BOOL HH_ScanPalette
  1587.          (
  1588.          struct Screen *      scr,
  1589.          struct Rectangle *   rect
  1590.          )
  1591.  
  1592.    FUNKTION
  1593.       Soll  der Inhalt eines Fensters im neuen 3D-Look dargestellt werden,
  1594.       muß  dazu  bekannt  sein,  welche Farbe Weiß und welche Schwarz ist.
  1595.       Unter  1.3  ist  auf der Workbench Farbe 1 Weiß und Farbe 2 Schwarz,
  1596.       unter 2.0 ist es genau umgekehrt.  Ganz unangenehm wird es auf einem
  1597.       Custom-Screen  mit  unabhängiger  Palette:   dort  können die Farben
  1598.       vollkommen  beliebig  verteilt  sein.   Insbesondere  ist es ja auch
  1599.       möglich,  daß  das  reine  Schwarz  und  das  reine  Weiß  gar nicht
  1600.       verwendet  werden können, da die Hintergrund-Farbe bereits sehr hell
  1601.       oder sehr dunkel ist.
  1602.       Diese  Funktion  dient  nun  dazu,  die  Palette  eines  Screens  zu
  1603.       untersuchen und die Farben herauszusuchen, die am ehesten zum Aufbau
  1604.       einer  3D-Oberfläche  verwendet  werden  können.   Wenn die Funktion
  1605.       erfolgreich  verläuft,  liefert  sie  in  einer  (zweckentfremdeten)
  1606.       Rectangle-Struktur  vier  Werte  zurück, die jeweils eine Farbquelle
  1607.       angeben  (der  zweite  Parameter für 'SetAPen ()' und 'SetBPen ()'):
  1608.       die  Farbe für helle und für dunkle Rahmen, die Textfarbe sowie eine
  1609.       weitere Farbe, die zur Hervorhebung anderer Flächen verwendet werden
  1610.       kann.   Bei  einer  normalen  1.3-Palette werden die folgenden Werte
  1611.       zurückgeliefert:   Hell=1,  Dunkel=2,  Text=1  und Sonstiges=3.  Die
  1612.       2.0-Palette  wird  wie  folgt ausgewertet:  Hell=2, Dunkel=1, Text=1
  1613.       und  Sonstiges=3.   Auch  wenn die Farben nun durch ein Palette-Tool
  1614.       miteinander  ausgetauscht  würden,  könnte  die  Funktion  noch  die
  1615.       korrekten Farbquellen identifizieren.  Probleme treten lediglich auf
  1616.       Bildschirmen    mit    sehr    kontrastarmen    oder   sehr   vielen
  1617.       unterschiedlichen  bunten  Farben auf.  Hier gibt die Funktion evtl.
  1618.       Werte  an,  die  nicht  optimal sind, oder kann gar keinen Vorschlag
  1619.       machen.      Einigermaßen     'normale'     Paletten    (mittelhelle
  1620.       Hintergrundfarbe,   Schwarz   und   Weiß   und   ein   oder  mehrere
  1621.       Kontrastfarben) werden jedoch ohne Probleme verarbeitet.
  1622.       Falls  das Programm unter mindestens OS 2.0 läuft und der gewünschte
  1623.       Screen  über  eine NEWLOOK-DrawInfo verfügt, werden einfach die dort
  1624.       angegebenen Farbquellen verwendet.
  1625.  
  1626.    EINGABEN
  1627.       scr:
  1628.          Zeiger  auf  einen Screen, dessen Palette untersucht werden soll.
  1629.          Es  muß  ein Zeiger auf eine komplette Struktur übergeben werden,
  1630.          nicht nur eine Kopie, wie sie z.B. 'GetScreenData ()' liefert.
  1631.       rect:
  1632.          Zeiger   auf   eine   Rectangle-Struktur.    Nach   erfolgreicher
  1633.          Ausführung  enthalten  ihre Elemente die Farbquellen für die vier
  1634.          verschiedenen Bereiche:
  1635.             MinX: Hell
  1636.             MaxX: Dunkel
  1637.             MinY: Text
  1638.             MaxY: Kontrastfarbe
  1639.  
  1640.    ERGEBNIS
  1641.       TRUE  - Die Palette enthält passende Farben.
  1642.       FALSE - Die   Farben  sind  zu  kontrastarm,  um  vernünftige  Werte
  1643.               ermitteln zu können.
  1644.  
  1645.    BEMERKUNG
  1646.  
  1647. \*----------------------------------------------------------------------*/
  1648.  
  1649.  
  1650. /*----------------------------------------------------------------------*\
  1651.    NAME
  1652.       HH_Semprini - Implementation des Semprini-Algorithmus.
  1653.  
  1654.    SCHREIBWEISE
  1655.       LONG HH_Semprini
  1656.          (
  1657.          VOID
  1658.          )
  1659.  
  1660.    FUNKTION
  1661.       Diese  Funktion  führt  den  1969  von  T.Jones,  E.Idle,  J.Cleese,
  1662.       M.Palin,  G.Chapman  und T.Gilliam an den bekannten BBC-Laboratories
  1663.       in  London  entwickelten  Semprini-Algorithmus durch.  Eine genauere
  1664.       Beschreibung dieses Algorithmus entnehmen Sie bitte dem Standardwerk
  1665.       von M.Python:  'How to make your Circus fly'
  1666.  
  1667.    EINGABEN
  1668.       Keine.
  1669.  
  1670.    ERGEBNIS
  1671.       TRUE oder ein Wert ungleich TRUE im Normalfall; sonst FALSE oder ein
  1672.       Wert ungleich FALSE.
  1673.  
  1674.    BEMERKUNG
  1675.  
  1676. \*----------------------------------------------------------------------*/
  1677.  
  1678.  
  1679. /*----------------------------------------------------------------------*\
  1680.    NAME
  1681.       HH_SetPointer - Setzen eines Standard-Mauszeigers.
  1682.  
  1683.    SCHREIBWEISE
  1684.       VOID HH_SetPointer
  1685.          (
  1686.          struct Window *   window,
  1687.          LONG              type
  1688.          )
  1689.  
  1690.    FUNKTION
  1691.       Die   Funktion   setzt   für   das   übergebene  Fenster  einen  der
  1692.       Standard-Mauszeiger.  Hierbei handelt es sich entweder um das Abbild
  1693.       einer  Stoppuhr,  die anzeigt, daß das Programm momentan beschäftigt
  1694.       ist  und  nicht  auf User-Eingabe reagiert, oder um einen Zeiger mit
  1695.       einem  angehängten  Fragezeichen, der symbolisiert, daß zu allen nun
  1696.       angeklickten  Bildschirmbereichen  ein  Hilfstext dargestellt werden
  1697.       kann.
  1698.       Der  neue  Zeiger  kann  jederzeit  über  'ClearPointer  ()'  wieder
  1699.       entfernt werden.
  1700.  
  1701.    EINGABEN
  1702.       window:
  1703.          Zeiger auf das Window, für das der Zeiger gesetzt werden soll.
  1704.       type:
  1705.          Typ des Zeigers. Momentan stehen zur Verfügung:
  1706.             HHP_SLEEP:
  1707.                Setzt den Stoppuhr-Zeiger.
  1708.             HHP_HELP:
  1709.                Setzt den Fragezeichen-Zeiger.
  1710.  
  1711.    ERGEBNIS
  1712.  
  1713.    BEMERKUNG
  1714.       Ab  Betriebssystemversion 3.0 wird der System-Wartezeiger verwendet,
  1715.       der mit WA_PointerDelay angefordert wird.
  1716.       Vor  Aufruf  der  Funktion  muß  über 'HH_OpenAll ()' sichergestellt
  1717.       werden,  daß  die  Library  ihre  Ressourcen  bereits geöffnet hat -
  1718.       ansonsten sieht der Mauszeiger nicht besonders gut aus...
  1719.       Bevor  die  HotHelp-Library  geschlossen  wird,  muß  sichergestellt
  1720.       werden,  daß kein Fenster mehr einen über diese Funktion definierten
  1721.       Mauszeiger  besitzt  -  schließlich  ist es möglich, daß die Library
  1722.       unmittelbar  nach  dem  Schließen aus dem Speicher entfernt wird, so
  1723.       daß auch die Grafik-Daten der Mauszeiger nicht mehr gültig sind!
  1724. \*----------------------------------------------------------------------*/
  1725.  
  1726.  
  1727. /*----------------------------------------------------------------------*\
  1728.    NAME
  1729.       HH_ShowHelp - Dreh- und Angelpunkt der HotHelp-Library
  1730.  
  1731.    SCHREIBWEISE
  1732.       LONG HH_ShowHelp
  1733.          (
  1734.          struct HH_NewWindow *   hh_nw
  1735.          )
  1736.  
  1737.    FUNKTION
  1738.       Die  Funktion  öffnet  ein  Fenster und stellt Hilfsinformationen zu
  1739.       einem gewünschten Thema dar.
  1740.  
  1741.    EINGABEN
  1742.       hh_nw:
  1743.          Zeiger auf eine ausgefüllte HH_NewWindow-Struktur.  Näheres siehe
  1744.          Beschreibung dieser Struktur.
  1745.  
  1746.    ERGEBNIS
  1747.       HH_ERROR_NONE  - Das  Fenster  konnte  problemlos  geöffnet  werden.
  1748.                        Tritt  später ein Fehler auf (z.B.  Text kann nicht
  1749.                        geladen  werden),  gibt  HotHelp eine entsprechende
  1750.                        Meldung  in  seinem  Fenster  aus  -  der  Aufrufer
  1751.                        erfährt davon jedoch nichts mehr (wozu auch?).
  1752.       sonst          - Einer  der HH_ERROR_-Codes.  Die meisten der Fehler
  1753.                        können  nur auftreten, wenn das allererste HotHelp-
  1754.                        Fenster  seit  dem letzten Booten geöffnet wird, da
  1755.                        sie  durch  einen  impliziten  Aufruf  der Funktion
  1756.                        'HH_OpenAll  ()'  hervorgerufen  werden.   Es wurde
  1757.                        bereits  ein  Requester  mit  der  Fehlermeldung in
  1758.                        Klartext  ausgegeben.   Ausgenommen  davon sind nur
  1759.                        Fehlercodes mit Werten kleiner 10.
  1760.  
  1761.    BEMERKUNG
  1762.  
  1763. \*----------------------------------------------------------------------*/
  1764.  
  1765.  
  1766. /*----------------------------------------------------------------------*\
  1767.    NAME
  1768.       HH_ShowHelpTagList - Neuer Dreh- und Angelpunkt der HotHelp-Library
  1769.                            (V3)
  1770.  
  1771.    SCHREIBWEISE
  1772.       LONG HH_ShowHelpTagList
  1773.          (
  1774.          struct HH_NewWindow *   hh_nw,
  1775.          struct TagItem *        tags
  1776.          )
  1777.  
  1778.    FUNKTION
  1779.       Die  Funktion  öffnet  ein  Fenster und stellt Hilfsinformationen zu
  1780.       einem gewünschten Thema dar.
  1781.       Sie  stellt  eine  Erweiterung der Funktion 'HH_ShowHelp ()' dar, da
  1782.       sie  auch  die Verwendung einer TagList zuläßt.  Nur auf diese Weise
  1783.       können die neuen Features der Version 3 angesprochen werden.  Obwohl
  1784.       bei  Verwendung  einer TagList die HH_NewWindow-Struktur überflüssig
  1785.       ist,   wird  ihre  Verwendung  weiterhin  unterstützt,  wodurch  die
  1786.       Erweiterung   bestehender  Programme  wesentlich  erleichtert  wird.
  1787.       TagItems  werden vom Betriebssystem erst ab Version 2.0 unterstützt.
  1788.       Um  davon  unabhängig  zu sein, untersucht HotHelp die TagList nicht
  1789.       über  die  Funktionen der Utility-Library, sondern selbstständig, so
  1790.       daß  HotHelps  TagItems  auch  unter  V1.2  des  OS verwendet werden
  1791.       können.  Allerdings kann HotHelp momentan nur die vier Standard-Tags
  1792.       TAG_DONE,  TAG_IGNORE,  TAG_MORE und TAG_SKIP bearbeiten.  Falls das
  1793.       OS  in  Zukunft  noch  weitere Tags anbieten sollte, so dürfen diese
  1794.       NICHT für HotHelp verwendet werden!
  1795.       Eine  ausführliche  Erklärung  aller  Tags  finden  Sie in der Datei
  1796.       'Optionen'.  Falls Sie noch nicht mit OS 2.0 arbeiten und noch keine
  1797.       Erfahrungen  mit  TagListen haben, finden Sie in den Demo-Programmen
  1798.       eine Reihe hilfreicher Beispiele.
  1799.  
  1800.    EINGABEN
  1801.       hh_nw:
  1802.          Zeiger auf eine ausgefüllte HH_NewWindow-Struktur.  Näheres siehe
  1803.          Beschreibung dieser Struktur.
  1804.          Wird  keine  HH_NewWindow-Struktur verwendet, kann hier auch NULL
  1805.          übergeben werden.
  1806.       tags:
  1807.          Startadresse  eines  Feldes  von  TagItem-Strukturen.  Das letzte
  1808.          Element  muß  den  Wert  TAG_DONE  (0)  aufweisen.  Werden in der
  1809.          TagList Optionen verwendet, die auch in der HH_NewWindow-Struktur
  1810.          auftauchen,  so  werden die Einstellungen der TagList verwendet -
  1811.          diese hat also Vorrang vor der Struktur.
  1812.  
  1813.    ERGEBNIS
  1814.       HH_ERROR_NONE  - Das  Fenster  konnte  problemlos  geöffnet  werden.
  1815.                        Tritt  später ein Fehler auf (z.B.  Text kann nicht
  1816.                        geladen  werden),  gibt  HotHelp eine entsprechende
  1817.                        Meldung  in  seinem  Fenster  aus  -  der  Aufrufer
  1818.                        erfährt davon jedoch nichts mehr (wozu auch?).
  1819.       sonst          - Einer  der HH_ERROR_-Codes.  Die meisten der Fehler
  1820.                        können  nur auftreten, wenn das allererste HotHelp-
  1821.                        Fenster  seit  dem letzten Booten geöffnet wird, da
  1822.                        sie  durch  einen  impliziten  Aufruf  der Funktion
  1823.                        'HH_OpenAll  ()'  hervorgerufen  werden.   Es wurde
  1824.                        bereits  ein  Requester  mit  der  Fehlermeldung in
  1825.                        Klartext  ausgegeben.   Ausgenommen  davon sind nur
  1826.                        Fehlercodes mit Werten kleiner 10.
  1827.  
  1828.    BEMERKUNG
  1829.  
  1830. \*----------------------------------------------------------------------*/
  1831.  
  1832.  
  1833. /*----------------------------------------------------------------------*\
  1834.    NAME
  1835.       HH_StrCmp - Stringvergleich; ignoriert Groß-/Kleinschreibung
  1836.                   (V3)
  1837.  
  1838.    SCHREIBWEISE
  1839.       BOOL HH_StrCmp
  1840.          (
  1841.          BYTE *   str1,
  1842.          BYTE *   str2
  1843.          )
  1844.  
  1845.    FUNKTION
  1846.       Ähnlich  der  'strcmp  ()'-Funktion  vergleicht  die  Funktion  zwei
  1847.       Strings,  wobei jedoch die Groß- und Kleinschreibung ignoriert wird.
  1848.       Deutsche Umlaute werden korrekt behandelt (äöü).
  1849.  
  1850.    EINGABEN
  1851.       str1, str2:
  1852.          Die beiden zu vergleichenden Strings.
  1853.  
  1854.    ERGEBNIS
  1855.       -1: str1  < str2
  1856.        0: str1 == str2
  1857.        1: str1  > str2
  1858.  
  1859.    BEMERKUNG
  1860.  
  1861. \*----------------------------------------------------------------------*/
  1862.  
  1863.  
  1864. /*----------------------------------------------------------------------*\
  1865.    NAME
  1866.       HH_StrNCmp - Stringvergleich; ignoriert Groß-/Kleinschreibung
  1867.                    (V3)
  1868.  
  1869.    SCHREIBWEISE
  1870.       BOOL HH_StrNCmp
  1871.          (
  1872.          BYTE *   str1,
  1873.          BYTE *   str2
  1874.          )
  1875.  
  1876.    FUNKTION
  1877.       Wie  'HH_StrCmp ()' vergleicht auch diese Funktion zwei Strings ohne
  1878.       Berücksichtigung  von  Groß-  und Kleinschreibung.  Es werden jedoch
  1879.       maximal  'strlen  (str2)'  Zeichen  untersucht; tritt bis dahin kein
  1880.       Unterschied auf, gelten die beiden Strings als identisch.
  1881.  
  1882.    EINGABEN
  1883.       str1:
  1884.          Der erste zu vergleichende String.
  1885.       str2:
  1886.          Der  zweite  zu  vergleichende  String.   Seine  Länge  gibt  an,
  1887.          wieviele Zeichen maximal untersucht werden sollen.
  1888.  
  1889.    ERGEBNIS
  1890.       -1: str1  < str2
  1891.        0: str1 == str2
  1892.        1: str1  > str2
  1893.  
  1894.    BEMERKUNG
  1895.  
  1896. \*----------------------------------------------------------------------*/
  1897.  
  1898.  
  1899. /*----------------------------------------------------------------------*\
  1900.    NAME
  1901.       HH_ToUpper - Konvertiert einen Klein- in einen Großbuchstaben
  1902.                    (V3)
  1903.  
  1904.    SCHREIBWEISE
  1905.       UBYTE HH_ToUpper
  1906.          (
  1907.          UBYTE  c
  1908.          )
  1909.  
  1910.    FUNKTION
  1911.       Falls   es   sich   bei   dem  angegebenen  ASCII-Zeichen  um  einen
  1912.       Kleinbuchstaben   handelt,  gibt  die  Funktion  den  entsprechenden
  1913.       Großbuchstaben  zurück.   Handelt  es  sich  um eine Ziffer oder ein
  1914.       anderes Zeichen, wird dieses unverändert wieder zurückgegeben.
  1915.  
  1916.    EINGABEN
  1917.       c:
  1918.          Das umzusetzende Zeichen.
  1919.  
  1920.    ERGEBNIS
  1921.       Der  zu  dem  Zeichen  'c' gehörende Großbuchstabe bzw.  'c' selber,
  1922.       wenn es sich nicht um einen Kleinbuchstaben handelt.
  1923.  
  1924.    BEMERKUNG
  1925.  
  1926. \*----------------------------------------------------------------------*/
  1927.  
  1928.  
  1929. /*----------------------------------------------------------------------*\
  1930.    NAME
  1931.       HH_Translate - Übersetzt einen ASCII-Text in das HotHelp-Format, das
  1932.                      für Handler und 'HH_ASyncCustomText ()' benötigt wird.
  1933.                      (V3)
  1934.  
  1935.    SCHREIBWEISE
  1936.       LONG HH_TransLate
  1937.          (
  1938.          struct HH_TranslateData *  data,
  1939.          struct HH_CustomText *     ctext
  1940.          )
  1941.  
  1942.    FUNKTION
  1943.       Soll  über  einen  Handler oder die Funktion 'HH_ASyncCustomText ()'
  1944.       ein HotHelp-Fenster mit einem frei definierten Text versehen werden,
  1945.       der  nicht  aus  einer  normalen Projekt-Datei stammt, so muß dieser
  1946.       Text  in  einem  bestimmten  Format  vorliegen.  Um dieses Format zu
  1947.       erhalten,  gibt es zwei Möglichkeiten:  Zum einen kann das Programm,
  1948.       das  den  Text  darstellen  möchte,  diesen  Stück  für Stück selber
  1949.       zusammensetzen  und  mit  allen erforderlichen Steuermarken versehen
  1950.       (siehe  Datei  'TextAufbau').   Wesentlich  leichter  ist es jedoch,
  1951.       einen   schon  vorhandenen  ASCII-Text  mit  Hilfe  dieser  Funktion
  1952.       automatisch übersetzen zu lassen.
  1953.       Wurde  der Inhalt der HH_TranslateData-Struktur komplett ausgewertet
  1954.       (Schlüssel  analysiert,  übersetzter Text an HotHelp zur Darstellung
  1955.       übergeben etc.), muß 'HH_TranslateFree ()' verwendet werden, um alle
  1956.       bei  der  Übersetzung  vorgenommenen  Speicher-Reservierungen wieder
  1957.       freizugeben.   Dies  muß  spätestens  bei  Programmende oder vor der
  1958.       nächsten Verwendung der Struktur geschehen!
  1959.  
  1960.    EINGABEN
  1961.       data:
  1962.          Zeiger   auf   eine   initialisierte   HH_TranslateData-Struktur.
  1963.          Näheres siehe bei der Struktur-Beschreibung.
  1964.       ctext:
  1965.          Soll  der  übersetzte  Text anschließend in einem HotHelp-Fenster
  1966.          dargestellt     werden,     so     muß     dazu    zuerst    eine
  1967.          HH_CustomText-Struktur  ausgefüllt werden.  Am einfachsten ist es
  1968.          dazu,  hier einfach die Adresse einer solchen Struktur anzugeben,
  1969.          die  dann nach der Übersetzung automatisch ausgefüllt wird.  Wird
  1970.          dies nicht gewünscht, kann hier auch NULL übergeben werden.
  1971.          Die  Struktur  darf  natürlich  nur  verwendet  werden,  wenn die
  1972.          Funktion  erfolgreich  ablief.   Ihr Inhalt wird ungültig, sobald
  1973.          'data' an 'HH_TranslateFree ()' übergeben wurde.
  1974.          HotHelp   kopiert   lediglich  die  Struktur-Elemente  'hh_text',
  1975.          'hh_text_len',  'hh_real_len'  und  'tab_size'  aus  'data'  nach
  1976.          'ctext'.   Alle  anderen Elemente (insbesondere 'version') müssen
  1977.          noch  von  Hand  initialisiert  werden  - sie werden durch diesen
  1978.          Aufruf nicht geändert.
  1979.  
  1980.    ERGEBNIS
  1981.       TRUE  - Die Übersetzung verlief fehlerfrei.
  1982.       FALSE - Es   trat   ein   Fehler   auf.    Seine  Ursache  kann  der
  1983.               'error'-Variablen der Struktur entnommen werden.
  1984.  
  1985.    BEMERKUNG
  1986.       Vor  Aufruf  der  Funktion  muß  über 'HH_OpenAll ()' sichergestellt
  1987.       werden, daß die internen Ressourcen der Library geöffnet worden sind
  1988.       -  andernfalls kann die Übersetzung fehlschlagen!  Wird die Funktion
  1989.       von  einem  Handler  (siehe  die gleichnamige Datei) aus aufgerufen,
  1990.       kann  darauf  jedoch verzichtet werden; bevor ein Handler aufgerufen
  1991.       wird, öffnet die Library automatisch ihre Ressourcen.
  1992. \*----------------------------------------------------------------------*/
  1993.  
  1994.  
  1995. /*----------------------------------------------------------------------*\
  1996.    NAME
  1997.       HH_TranslateFree - Gibt   den   bei   'HH_Translate  ()'  angelegten
  1998.                          Speicher wieder frei.
  1999.                          (V3)
  2000.  
  2001.    SCHREIBWEISE
  2002.       VOID HH_TransLateFree
  2003.          (
  2004.          struct HH_TranslateData *  data
  2005.          )
  2006.  
  2007.    FUNKTION
  2008.       'HH_TransLate   ()'  legt  einige  Speicherbereiche  an  ('hh_text',
  2009.       'keys',  etc.), in denen die umgesetzten Daten abgelegt werden.  Ist
  2010.       deren  Auswertung  abgeschlossen, sollten diese Speicherbereiche mit
  2011.       Hilfe  der Funktion 'HH_TranslateFree ()' wieder freigegeben werden.
  2012.       Die  Funktion  setzt  alle  Zeiger auf dynamisch allozierte Bereiche
  2013.       wieder  auf  NULL  zurück,  so  daß  diese  anschließend  nicht mehr
  2014.       verwendet werden sollten.
  2015.       Die  Funktion  muß  nur  aufgerufen  werden,  wenn 'HH_Translate ()'
  2016.       fehlerfrei  verlief  - es schadet aber auch nichts, wenn sie dennoch
  2017.       verwendet wird...
  2018.  
  2019.    EINGABEN
  2020.       data:
  2021.          Zeiger    auf    eine    von    'HH_Translate   ()'   ausgefüllte
  2022.          HH_TranslateData-Struktur.
  2023.  
  2024.    ERGEBNIS
  2025.  
  2026.    BEMERKUNG
  2027.  
  2028. \*----------------------------------------------------------------------*/
  2029.  
  2030.  
  2031.