


                             GEMBIND

                Eine GEM-Anbindung fr Turbo Pascal



                (c) Jan Willamowius, 1993
                    Rckertstr. 27
                    22089 Hamburg
                    Germany
		    Tel. 040 / 209 81 888



Einleitung
----------

Gembind ist eine Bibliothek, die es erlaubt mit Turbo Pascal GEM-Programme
zu schreiben. Sie ist voll kompatibel zur Bibliothek des ST-Pascal 2.0
auf dem Atari ST. Es mssen lediglich die unterschiedlichen Pascal-Dialekte
angepasst werden. Wenn Sie die exakt gleichen Programme auf dem Atari ST
und Ihrem IBM-kompatiblen compilieren wollen, knnen sie Pure Pascal auf
dem Atari verwenden. GEMBIND ist auch hierfr verfbar.

Um die GEM-Bibliothek in Turbo Pascal Programmen verwenden zu
knnen, mu man sie mit dem Befehl

     USES GEMBIND;

einbinden. Weitere Include-Dateien wie z.B. in ST-Pascal sind
nicht notwendig.

Ein paar Besonderheiten sind bei der Verwendung von Turbo Pascal
zu beachten; so knnen GEM-Programme z.B. nicht im RAM kompiliert
werden, sondern mssen immer auf Festplatte kompiliert werden.
Sie knnen nur auerhalb von Turbo Pascal gestartet werden, da
DOS-Programme das GEM abschalten und von ihnen aus keine GEM-Programme
aufgerufen werden knnen.

Um GEM gengend Speicher fr seine eigen Arbeit zur Verfgung zu
Stellen (z.B. fr den Fileselector Get_In_File), mu man Turbo
Pascal mit der Direktive (*$M ... *) sagen, da es nicht allen
Speicher belegen darf.

Damit ein GEM-Programm berhaupt als solches gestartet werden
kann, mu es entweder von *.EXE in *.APP umbenannt werden, oder
als GEM-Programm im Desktop-Men angemeldet werden. Man mu dem
Desktop also mitteilen, da es sich nicht um ein normales DOS-Programm
handelt. (Man sollte das Abspeichern der Einstellung im
Desktop nicht vergessen !)


Grafik-Funktionen
-----------------

Routine               Wirkung

Draw_Mode             Schreibmodus festlegen (berschreiben, Transparent etc.)
Line_Color            Zeichenfarbe fr Linien auswhlen
Paint_Color           Zeichenfarbe fr ausgefllte Flchen festlegen
Paint_Style           Muster fr gefllte Flchen festlegen
Line_Endstyle         Art der Linienenden festlegen (rund, eckig, Pfeil)
Line_Style            Linienmuster auswhlen (durchgehend, unterbrochen etc.)
Paint_Rect            geflltes Rechteck zeichnen
Frame_Rect            den Rahmen eines Rechtecks zeichnen
Paint_Round_Rect      geflltes Rechteck mit runden Ecken zeichnen
Frame_Round_Rect      Rahmen eines Rechtecks mit runden Ecken zeichnen
Paint_Oval            geflltes Oval zeichnen
Frame_Oval            den Rahmen des Ovals zeichnen
Paint_Arc             geflltes Kreisstck zeichnen
Frame_Arc             Kreisbogen zeichnen
Pline                 Linienzug zeichnen
Plot                  zeichnet einen Punkt
Growbox               sich vergrerndes Rechteck animieren (nur in GEM 1.0!)
Shrinkbox             sich verkleinerndes Rechteck animieren (nur in GEM 1.0!)
Xgrf_2Box             Rechteck animieren
Xgrf_Stepcalc         Koordinaten fr animiertes Rechteck berechnen
Text_Heigth           Textgre auswhlen
Text_Rotation         Rotationswinkel des Texts angeben (in 90 Grad Schritten)
Text_Style            Textattribute festlegen
Draw_String           einen Text ausgeben
Justified_Text        gibt einen Text justiert aus
String_Width          Textbreite berechnen
Text_Point            Schrifthhe einstellen
Alpha_Text            Text auf einem Alpha-numerischen Gert ausgeben
Clear_Screen          Bildschirm lschen
Line_To               zieht eine Line zu dem angegebenen Punkt
Move_To               setzt die Turtle auf einen bestimmten Punkt
TLine                 zeichnet eine Linie in Turtle-Graphik
Text_Alignment        Justierung der Schrift festlegen
Text_Color            setzt die Farbe der Schriftausgabe fest
Line_Width            legt die Linienbreite fest
Paint_Outline         festlegen, ob geflte Flchen einen Rahmen haben
Set_Color             Zeichenfarbe festlegen
Set_Clip              Grafik-Ausgabe auf ein bestimmtes Rechteck begrenzen


Maus-Steuerung
--------------

Routine               Wirkung

Init_Mouse            Maussteuerung beim Programmstart initialisieren
Show_Mouse            Mauszeiger sichtbar machen
Hide_Mouse            Mauszeiger verstecken
Set_Mouse             dem Mauszeiger eine andere Form geben
Begin_Mouse           alle Mausaktionen ignorieren (insbesondere in Mens)
End_Mouse             Mausaktionen wieder zulassen
Set_MForm             benutzerdefinierte Mausform setzen
Mouse_Position        Maus positionieren


Fenster-Verwaltung
------------------

Routine               Wirkung

New_Window            Datenstruktur fr ein neues Fenster erzeugen
Open_Window           ein Fenster auf dem Bildschirm ffnen
Close_Window          Fenster auf dem Bildschirm schliessen
Delete_Window         Datenstruktur des Fensters aus dem Speicher entfernen
Set_WSize             Fenstergre ndern
Set_Winfo             Text der Infozeile des Fensters setzen
Wind_Get              liefert verschiedene Informationen ber ein Fenster
Wind_Set              verndert verschiedene Teile des Fensters (z.B. Slider)
Border_Rect           Gre des Fensters abfragen (Fenstergre auen)
Work_Rect             Gre der Arbeitsbereichs abfragen (Fenstergre innen)
Front_Window          Fenster zum obersten machen
Set_WName             Titelzeile des Fensters ndern
Set_Window            aktiviert das angegebene Fenster
Find_Window           Fenster unter Koordinate bestimmen
Front_Window          vorderstes Fenster finden
Get_Window            aktives Fenster erfragen
Bring_To_Front        Fenster nach vorne bringen


Event-Verwaltung
----------------

Routine               Wirkung

Get_Event             Mitteilungen (Events) des GEM abwarten
Get_Button            nur Mausklick-Events erwarten
Get_Keyboard          nur Tastatur-Events erwarten
Get_Message           nur Mitteilungen erwarten
Get_Mouse             nur Mausbewegungen erwarten
Get_Timer             nur Timer-Events erwarten
First_Rect            ersten neu zu zeichnenden Bildschirmbereich erfragen
Next_Rect             nchsten neu zu zeichnenden Bildschirmbereich erfragen
Rect_Intersect        feststellen, ob sich 2 Rechtecke berlappen


Dialog-Verwaltung
-----------------

Routine               Wirkung

Center_Dialog         Dialog auf der aktuellen Bidschirmauflsung zentrieren
Form_Dial             Reservieren und Freigeben von Bildschirmausschnitten
Show_Dialog           Dialog auf dem Bildschirm darstellen
Objc_Draw             ein einzelnes Objekt zeichnen
Do_Dialog             Dialog darstellen und Benutzer-Interaktion zulassen
Redo_Dialog           erneut Benutzer-Interaktion zulassen
End_Dialog            Dialog vom Bildschirm entfernen
Get_DEdit             editierten Text aus Dialogbox auswerten
Obj_SetState          Status eines Dialog-Objekts (z.B. Selektierung) setzen
Obj_State             Status eines Objekts erfragen
D_Color               Farbgebung des Dialogs einstelen
Form_Do               Objekt darstellen
New_Dialog            neuen Dialog aufbauen
Delete_Dialog         erstellten Dialog lschen
Add_DItem             ein Objekt hinzufgen
Set_DText             Text in ein Objekt eintragen
Set_DEdit             editierbaren Text in ein Objekt eintragen
Get_DEdit             editierten Text erfagen
Obj_Add               Objekt hinzufgen (low-level)
Obj_Find              Objekt unter Koordinate finden
Obj_Flags             Flags eines Objekts erfragen
Obj_Offset            Abstand eines Objekts zu seinem Vater erfragen
Obj_Redraw            nur ein Objekt neuzeichnen
Obj_SetFlags          die Flags eines Objekts setzen
Obj_Size              Gre eines Objekts erfragen


Diverses
--------

Routine               Wirkung

Load_Fonts            Zeichenstze nachladen
Ex_Load_Fonts         erweitertes Load_Fonts
Unload_Fonts          Zeichenstze entfernen
Font_Name             Zeichensatz-Namen erfragen
Font_Info             Zeichensatz-Informationen
Set_Font              Zeichensatz auswhlen
Open_Workstation      Workstation ffnen
Clear_Workstation     Workstation zurcksetzen
Update_Workstation    gepufferte Komandos ausfhren
Close_Workstation     Workstation schlieen
Form_Advance          Seitenvorschub ausgeben
Split_Addr            Pointer in 2 Integer aufteilen



Literatur
---------

  *   Data Becker Fhrer Schneider PC, Data Becker, 1986
  *   Jankowski, Reschke, Rabich, ATARI ST Probibuch, Sybex, 1988
  *   GEM Programmers Toolkit, Digital Research, 1985
  *   Wollschlger, Atari ST Programmierpraxis ST Pascal Plus,
      Markt & Technik, 1987
  *   Middel, Das Betriebssystem des Atari ST, c't 2/1987 Seite 126ff
  *   Wollschlger, Multitasking und Desk Accessories, MC 3/1987 Seite 66ff




Unterschiede zwischen GEMBIND und PASGEM
----------------------------------------

- aktuelle Bildschirmauflsung wird in GemResX und GemResY zur Verfgung
  gestellt

- New_Dialog und New_Menu ignorieren den N_Items-Parameter und erzeugen
  immer einen Objektbaum mit Max_Tree Objekten. Da die Platzersparniss
  recht gering wre lohnt sich der zustzliche Verwaltungsaufwand nicht.

- Set_DEdit _kann_ mehrfach aufgerufen werden

- Do_Dialog benutzt Begin_Update und End_Update

- einige Unterbereichts-Typen durch Integer erstetzt (Color_Reg,
  Draw_Modes, Line_Types etc.)

- Der Typ Object heisst GEM_Object, da Object ab Turbo Pascal 5.5 ein
  reserviertes Wort ist.

- Init_Mouse fhrt _keinen_ Reset des Verschachtelungs-Zhlers durch
  (ob und wie PASGEM dies tut ist mir nicht ganz klar)

- geringfgige nderungen an den Konstanten- und Typendefinitionen und
  kleine Ergnzungen (insbesondere zum GEM/3)

- Wie bei PASGEM wird das Koordinaten-Offset nur beim Aufruf von Set_Window
  ermittelt. Falls sich die Position des Fensters ndert mu Set_Wind erneut
  aufgerufen werden.

- fehlende Funktionen: - Get_Ex_Out_File (existiert nur im GEM des Atari)
                       - Open_Port und Close_Port (funktionierten in
                         PASGEM ohnehin nicht; ihre Funktion wird von den
                         ..._Workstation Routinen bernommen)

- zustzliche Funktionen: - Xgrf_Stepcalc
                          - Xgrf_2Box
                          - Slidebox
                          - Form_Dial
                          - Form_Do
                          - Mouse_Position
                          - Text_Point
                          - Splitt_Addr
                          - Obj_Add
                          - Rsrc_Obfix
                          - Open_Workstation
                          - Close_Workstation
                          - Clear_Workstation
                          - Update_Workstation
                          - Form_Advance
                          - Alpha_Text
                          - Load_Fonts
                          - Ex_Load_Fonts
                          - Unload_Fonts
                          - Set_Font
                          - Font_Name
                          - Font_Info
                          - Get_Message
                          - Get_Button
                          - Get_Mouse
                          - Get_Keyboard
                          - Get_Timer
                          - TLine
                          - Menu_Unregister
                          - Menu_Click
                          - String_Width

