///////////////////////////////////////////////////////////////////////////////
/                                                                             /
/                                                                 19.08.93    /
/                                                                             /
/     Compiler/Bibliothekspatches zu GFABASIC Atari ST/STE/TT/Falcon          /
/                                                                             /
/     P*ST:                                                                   /
/           Christoph Conrad                                                  /
/           Adalbertsteinweg 113                                              /
/           52070 Aachen                                                      /
/                                                                             /
/ E-Mail Direkt:                                                              /
/     MAUS: Christoph Conrad @ AC3                                            /
/                                                                             /
/ E-Mail Gateways:                                                            /
/     FIDO: Christoph Conrad % Maus AC3 2:242/2.6                             /
/           ACHTUNG: evt. neu                                                 /
/           Christoph Conrad % Maus AC3 2:242/42.333                          /
/   USEnet: Christoph_Conrad@ac3.maus.de    (keine ueberlangen Mails!)        /
/ Zerberus: Christoph_Conrad%ac3@zermaus.zer                                  /
/   Pronet: MAUS:AC3:Christoph_Conrad                                         /
/ Internet: conrad@pool.Informatik.RWTH-Aachen.DE                             /
/           (selten, bitte keine ueberlangen Mails!)                          /
/      BTX: Seite *35008024#, im Formular ausfllen                           /
/           Christoph_Conrad@AC3.MAUS.DE.UUCP                                 /
/           (kostet 90 Pfennig)                                               /
/                                                                             /
/ Falls Sie irgendetwas entdecken, was Sie strt, oder Verbesserungsvorschlge/
/ haben, nur zu: schreiben Sie mir ber EMail (vorzugsweise) oder P*ST.       /
/                                                                             /
/ Wenn Sie Fehler im Basic finden, schreiben Sie mir!                         /
/                                                                             /
/ Ich kann weder die juristische Verantwortung noch irgendeine Haftung fuer   /
/ eventuelle  Schaeden  an Daten oder Programmen uebernehmen, die direkt oder /
/ indirekt auf die Benutzung dieser Patches zurueckzufuehren sind!            /
/                                                                             /
///////////////////////////////////////////////////////////////////////////////

Inhalt:

 (I) Allgemeines & Spezielles zu diesen Patches
(II) Buntgemischter Frage und Antwortteil


(I) Allgemeines & Spezielles zu diesen Patches

Moin,

GFABASIC ist uns allen wohl ans Herz gewachsen. Als ich meinen ST frisch
bekam, war dies die einzige Programmiersprache, die superschnelle
Turnaroundzeiten (Programm editieren, testen, editieren etc...) erlaubte,
einen hyperschnellen Compiler/Interpreter hatte (zu allem berfluss erzeugt
der Compiler auch noch richtig fixen Code!), einen brauchbaren Editor besass
UND auch auf 1 MB Rechnern ohne Festplatte sinnvoll eingesetzt werden konnte.
Ich glaube, dass dies die Hauptgrnde fr den Erfolg von GFABASIC waren.

Im Laufe der Zeit stellte sich allerdings (nicht nur) im Zuge aufkommender
Grafikerweiterungen heraus, dass GFABASIC an einigen Stellen Schwachpunkte
aufweist. Einige (schwerwiegende) Schwachpunkte behebt dieser
Bibliothekspatch.

Die Bibliothekspatches erschienen bereits in zwei Versionen als GFALI030,
verbessert als GFALI072. Dann fragte mich Gregor Duchalski @ DO, ob ich nicht
Lust habe, meine Sachen zu einem Programm beizusteuern, welches Patches des
Interpreters unter einer komfortablen GEM-Oberflche erlaubt.

Da meine Patchprogramme keinerlei Komfort in der Bedienung aufwiesen
UND ich Gregors Engagement und Wissen aus der MAUSgruppe GFABASIC kannte,
stimmte ich zu. Zudem berzeugte mich seine GFA-Bibliothek, die auch in sein
GFA_PTCH einfloss.


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Was bietet der Compilerpatchteil von GFA_PTCH?

- Line-A-Patches werden automatisch eingebaut!
- saubere Autoordnererkennung
- saubere Erkennung von Acessories
- falls der mit $m angeforderte Speicher nicht zur Verfgung steht, kann
  dies erkannt werden
- $U/$I-Bug in 3.6 behoben!
  Wichtig: Ich rate allerdings ausdrcklich von den $I-Sachen ab. Unsauber,
  z.T. tdlich. Auch $U kann kritisch sein. Mit diesem Init-Teil laufen $U/$I
  genauso 'unsauber' oder 'unsicher' wie vorher, abgesehen davon, dass sie 
  unter 3.6 jetzt BERHAUPT laufen.

ERR.LST demonstriert euch in beispielhafter Weise alle Features. Dort wird
auch $I+ verwendet, dies rein zu Demo-Zwecken. Beachtet die Kommentare in
ERR.LST und die Hinweise unten in diesem Text unter!

!!! Teile des Assemblercodes  GFA Systemtechnik

Vernderungen an irgendwelchen Teilen NUR zu privaten Zwecken. Vernderte
Versionen drfen nicht weitergegeben werden!

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Da das Ganze viel Arbeit war, drft ihr mir gerne bei Zufriedenheit mit den
Patches ein Geschenk (Danke!) von >= 10,- DM senden (Quittungen gibbet nich
(wg. Finanzamt), da Geschenk :-)

Da ich Musikfan bin, knnt ihr mir lieber wahlweise eine Kassette mit einer
Zusammenstellung eurer Lieblingsmusik schicken (Chromdioxid, Dolby B, am
liebsten TDK SA-X). Alle Richtungen ausser Klassik mit Gesang (Oper, Operette
etc.), Schlager, Volksmusik und Plump-Disco (Bananarama, Sabrina) sind
willkommen, bevorzugt eher unbekannte Ensembles/Bands/Interpret(inn)en.
Ich hoffe auf Cassettenfluten!!! :-)

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Was macht GFA_PTCH.PRG?

== (a) Patch des Compilers

ACHTUNG: Mit dem gepatchten Compiler bersetzte Programme laufen NICHT mit der
         alten Library!

== (b) Patch der Library

Im strengen Sinn kein Patch, sondern ein Austausch von Code.

== (c) Erstellen eines neuen Indexfiles GFA3BLIB.NDX

MAKE_NDX.PRG _unbedingt_ aufrufen, dieses Programm erstellt eine neue
GFA3BLIB.NDX. Dies sollte mit GFA_PTCH erfolgen.

Die alte GFA3BLIB.NDX evt. vorher sichern, obwohl diese
mit MAKE_NDX.PRG jederzeit aus der alten Lib neu erzeugt werden kann.

MAKE_NDX liegt erst ab irgendeiner 3.5er-Version bei, leider. Macht dies
vorlufig bei Bekannten (falls es bei euch nicht dabei ist), ich frage mal
bei GFA nach, ob ich es dem Paket beilegen darf, ansonsten werde ich evt.
ein funktionelles quivalent schreiben.

== (d) Patch des Interpreters

Ihr msst UNBEDINGT einen Interpreterpatch mit GFA_PTCH.PRG durchfhren. Falls
euer Interpreter noch nicht bei uns erfasst ist:

Jeweils das ERSTE vorkommende $A00A und $A009 durch $4E71 ersetzen.
Das _sollte_ klappen. Das Umfeld der Patches lautet: $E0C0 $A00A $4CDF sowie
$0008 $A009 $246E.

Das gibt zwar leichte "Flecken" beim Bewegen der Maus im Editor
des Interpreters, aber dafuer keine beim laufenden Programm (saubere
Schachtelung von hidems/showms per GRAF_MOUSE vorausgesetzt!).


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Falls Ihr weiterhin Probleme habt:

- mit der Original GFA3BLIB (+ zugehrigem GFA3BLIB.NDX) testen.

Schickt mir
- das INIT.O eurer Library.
- Die genaue Versionsbezeichnung/Lnge der Library / des Compilers.

Damit dies ganz einfach geht: INIT2DMP.PRG erwartet im gleichen Verzeichnis
GFA3BLIB und erzeugt eine ausdruck- bzw. E-mailbare Datei INIT.DMP.

!!! Denkt dran dabei eure ORIGINAL-Lib oder eine Kopie derselben !!!
!!! und nicht etwa eine schon gepatchte zu benutzen              !!!


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Wie arbeite ich damit?

Seht euch bitte ERR.LST an. Ich hoffe das reicht. Lest euch nach Mglichkeit
auch den Frage- und Antwortteil dieses Textes durch. Die dort zu vermeidenden
Befehle sind zwingend (wg. der Line-A-Patches), viele der dort angegebenen
Tips ntzlich.


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
BUGS:

Hoffentlich nicht allzuviele.

Noch bearbeitet werden:
-
ERR scheint im Interpreter beim Start nicht immer auf 0 initialisiert zu sein.

Bevor ihr diesem INIT was anlastet, bitte erst mal mit der
Original GFA3BLIB (+ zugehrigem GFA3BLIB.NDX) testen.


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Disclaimer:

Ich habe alle Sorgfalt walten lassen, um fehlerfreie Programme/Daten zu
erstellen. Trotzdem sind Fehler nie ganz auszuschliessen. Deshalb kann
weder die juristische Verantwortung noch irgendeine Haftung von Seiten
des Autors fr eventuelle Schden an Daten oder Programmen, die direkt
oder indirekt auf die Benutzung dieses Programms zurckzufhren sind,
bernommen werden!

*******************************************************************************

(II) Buntgemischter Frage und Antwortteil

FRAGEN & ANTWORTEN:

+++++++++++++++++++++
FRAGE:
Ich hre immer, Line-A sollte nicht verwendet werden. Warum eigentlich?
Nun, wie bekomme ich denn dann meine Compilerbibliothek (GFA3BLIB) Line-A frei?

Im folgenden bedeute LA LINE-A!

ANTWORT:
Dazu ein Auszug aus dem Profibuch, 10te Auflage:

[ZITAT:ON]
Die Architektur des Betriebssystems spricht allerdings eindeutig gegen die
Benutzung der Line-A-Routinen. Diese stellen nmlich die untere Ebene des
VDI-Bildschirmtreibers im ROM dar. Mit ihrer Verwendung verbaut man sich also
eine eventuelle Nutzung eines anderen (schnelleren) Bildschirmtreibers!

Auch ist eine Existenz der Line-A-Routinen nur fr die ST-Modi (also
320 * 200, 640 * 200 und 640 * 400) garantiert. Schon bei 256-Farbgrafik
(spezielle Grafikkarte bzw. TT in der 'niedrigen' Auflsung) sind die
Mglichkeiten der Line-A-Schnittstelle erschpft (siehe COLBIT0 bis COLBIT3).
[ZITAT:OFF]

Falls Sie jetzt nur Bahnhof verstanden haben: KEINE PANIK!

Eine entscheidende Folgerung dieser Aussagen ist, das Programme, die Line-A
Routinen benutzen, nicht unbedingt korrekt auf allen Graphikkarten laufen!
Ergo: weg damit.

*** Auf eine saubere Schachtelung von hidems/showms
(ueber GRAF_MOUSE AES 78) achten! Zu jedem Hide ein Show, sonst gibt's
"Flecken". Maus nicht anschalten, wenn sie schon an ist, wie in der
Regel nach dem Start von GEM-Programmen, sonst "Flecken".

*** FOLGENDE BEFEHLE MEIDEN:
CRSCOL   CRSLIN   MOUSE    MOUSEK   MOUSEX   MOUSEY   SETMOUSE RC_COPY
SHOWM    HIDEM    SPRITE   ACHAR    ACLIP    ALINE    APOLY    ARECT
ATEXT    BITBLT   HLINE    L~A      PSET     PTST     GET      PUT
SGET     SPUT     FILESELECT        FILESELECT #

Bei Verwendung ohne #datei_nummer:
INPUT    INPUT$   LINE INPUT

Ausweichbefehle:

MOUSE/MOUSEK/MOUSEX/MOUSEY -> (AES) GRAF_MKSTATE
SETMOUSE                   -> (AES) APPL_TPLAY
SHOWM/HIDEM                -> (AES) GRAF_MOUSE
FILESELECT                 -> (AES) FSEL_INPUT
FILESELECT #               -> (AES) FSEL_EXINPUT
SPRITE                     -> (VDI) vro/vrt_cpyfm
ACHAR                      -> (VDI) TEXT
ACLIP                      -> (VDI) CLIP
ALINE                      -> (VDI) LINE
APOLY                      -> (VDI) POLYLINE
ARECT                      -> (VDI) PBOX
ATEXT                      -> (VDI) TEXT
BITBLT                     -> (VDI) BITBLT q%(),z%(),d%()
HLINE                      -> (VDI) LINE
PSET                       -> (VDI) PLOT oder v_pmarker bei grob > 200 Punkten
PTST                       -> (VDI) POINT
GET/PUT/SGET/SPUT          -> (VDI) BITBLT
RC_COPY                    -> (VDI) BITBLT

>> Ohne Gewaehr auf Vollstaendigkeit!

+++++++++++++++++++++
FRAGE:
Wo finde ich denn Hinweise auf GEM-konforme Programmierung?

ANTWORT:
Tim Orens ProGEM. Dieser Text von 1985, inzwischen wohl in den meisten Musen
zu finden, gehoert mit zum besten ueber 'Professionelle GEM'-Programmierung.
Weiterhin gibt es das Buch 'Vom Anfnger zum GEM-Profi' der Gebrder Geiss.
Ein wenig unbersichtlich, aber sonst ganz gut. Unverzichtbar ist allerdings
das 'Profibuch' von Jankowski/Reschke/Rabich, vor allen Dingen als Referenz.

+++++++++++++++++++++
FRAGE:
GFA bietet doch so schne eigene Befehle fr Fenster. Taugt das was?

ANTWORT:
Ich rate von der Verwendung der GFA eigenen Fensterverwaltung ab.
Diese war in frueheren Versionen fehlerhaft, ob heute, wer weiss?
bers AES ist es genauso 'einfach' oder 'schwierig'.

+++++++++++++++++++++
FRAGE:
Mein Programm strzt mir manchmal ab. Ich kann beim besten Willen keinen Fehler
finden. Was kann das sein und wie finde ich das raus?

ANTWORT:
SysMon und TempleMon verwenden. TempleMon kann in vielen MAUS-Boxen gesaugt
werden, SysMon direkt beim Autor

Karsten Isakovic
Wilmersdorferstr. 82
1000 Berlin 12

bezogen werden. Zum Zeitpunkt des Absturzes kann man so zumindest den letzten
verwendeten Systemaufruf feststellen und evt. falsche Parameter.

Eine weitere gute Mglichkeit ist die Verwendung von TRACE procedurename
(siehe Handbuch). Wenn man nun alle getraceten Zeilen in eine vorher
geffnete Datei schreibt (PRINT #1,TRACE$) lsst sich die Absturzstelle
schnell lokalisieren.

Ebenso ntzlich kann der Turbo-C/Pure-C Debugger sein, wenn man das Programm
mit Symbolen bersetzt.

Ein weitgehend unbekannter Fehler betrifft die GFA-Basic eigene
Speicherverwaltung. Der Fehler ist in allen 3er Versionen.

Abhilfe: an 'hufig' durchlaufene Stellen (die irgendwas mit Strings
machen) ein ~ FRE(0).

Probiert mal folgendes (danach neu booten):

' Compilerversion mit $m
' statt RESERVE
RESERVE 1000
$m 4711
' RESERVE damit's etwas schneller abstrzt aber eigentlich unntig
' Die (**) Zeilen braucht man beim Interpreter, damit
' nach dem RESERVE auch wirklich danach (FRE() MOD 16) == 0 gilt
' minus 4: wegen Backtrailer bei rest16$ beim Compiler falls $m XXXX
' mit (XXXX MOD 16)<>0
rest16%=(FRE(0) MOD 16)-4   ! **
IF rest16%<0                ! **
  ADD rest16%,16            ! **
ENDIF                       ! **
rest16$=STRING$(rest16%,0)  ! **
' (FRE() MOD 16) == 0 jetzt erfllt
str$="AHAH"
DO
  @crash(str$)
LOOP
PROCEDURE crash(str$)
  str$="OHOH"
RETURN

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Danksagungen:

- Harald Ax fr DELITE, eine hervorragende GFA-Shell
- Jankowski/Rabich/Reschke fr ihr "Profibuch", eine unverzichtbare Fundgrube.
- Karsten Isakovic fr seinen 'SysMon', sowie
  Thomas Tempelmann und Johannes Hill fr den 'TempleMon'
  Beide Tools bekannt als 'The Programmers best friends' :-)
- ATARI / Landon Dyer fr den 'MadMac'.
- GENESIS fr 'Selling England by the pound' sowie 'Foxtrot'
  THE CURE fr 'Disintegrations'
  THE RED HOT CHILI PEPPERS fr 'Blood sugar sex magik'
  KING'S X  1992 (mit 'Black Flag')
  TEMPLE OF THE DOG fr ihr Debtalbum
  RAGE AGAINST THE MACHINE fr ihr Debtalbum
  BODY COUNT & ICE-T fr die Platte
- Barbara fr die Erkenntnis, dass es ein Leben ohne Rechner gibt =:^}

Viel Spass wnscht euch

tschueeessschen, chris.
