Leserbriefe

Die Edit-Felder verlassen die Box...

Während der Entwicklung eines Programmes in GFA-Basic, das mit einem Resource-Editor erstellte Dialogboxen verwendete, stieß ich auf folgendes Problem: Von Zeit zu Zeit geschah es, daß sich nach Aufruf der Form_doRoutine der Cursor aus den Editfeldern herausbewegen ließ, und zwar an die Positionen der Editfelder anderer Dialogboxen. Dort konnte man zwar keinen Text eingeben, aber es war möglich, mit der ESC-Taste das betreffende Feld zu löschen und den DEFAULT-Text anzuzeigen. Abhilfe schaffte ich dadurch, daß ich bei allen Edit-Feldern im RCS den Status EDITABLE löschte und ihn dann während des Programmablaufs lediglich für die Zeit der Eingabe setzte. Das Programm läuft zwar ganz gut, aber die Methode, den Editable-Status für die Eingabe zu setzen, ist sicher nur eine Notlösung!
Matthias Hölzer, Zellingen

Red.: Womit Sie vollkommen Recht haben! Nach Ihrer Symptombeschreibung scheint es sich um ein fehlendes LASTOB-Flag in ihrem Baum zu handeln. Form-Do sucht bei einer Auf- oder Abbewegung des Cursors nach dem nächsten mit dem Editable-Flag versehenen Objekt. Dies geschieht in der internen Routine frn_inifld, die diese Suche bis zum letzten Objekt, das durch das LASTOB-Flag gekennzeichnet ist, fortsetzt. Wir wissen zwar nicht, welches RCS Sie benutzen, aber normalerweise wird dieses Flag durch das Resource Construction Set gesetzt. Diese Tatsache können Sie übrigens überprüfen, in dem Sie sich die RSC-Datei als C-Source-Code ( ATARI-RCS ) ausgeben lassen und schauen, ob ein LASTOB vorhanden ist. Als Abhilfe würden wir Ihnen empfehlen, in jeder Dialogbox das LASTOB-Flag in Ihrem letzten Objekt zu setzen.

Ein leerer Bildschirm

Ich habe ein Programm geschrieben, in dem ich ein Bild in den Bildschirm laden möchte. Leider bleibt oftmals der Bildschirm sauber, obwohl der Rechner keinen Read-Error meldet.
Mein zweite Frage: Wie programmiert man den Joystick in C ?
(Joko Brintano, Aachen)

Red.: Anhand Ihres mitgeschickten Programmauszuges erkennen wir in der folgenden Zeile FREAD ( handle, 32138, 0x78000+4096 ), daß Sie versuchen, den Bildschirm absolut zu adressieren. Bei einem Rechner wie dem ST ist es üblich, Adressen wie die des Bildschirms nicht(!) festzulegen. Das heißt er kann, je nach Intallation von Peripherie, Accessories und sonstigen Umständen, an verschiedenen Stellen im Speicher liegen !!!! Dadurch wäre es ein Zufall, wenn der Bildschirm an Ihrer oben angegebenen Adresse stehen würde. Richtig ist es, anstatt der absoluten Adresse, die Bildschirmadresse durch die Betriebssystemroutine Logbasen zu ermitteln und diese dann zu verwenden. Daraus ergibt sich für Ihr Programm folgende Zeile:

ret = Fread(handle, 32000L, Logbase())

Red.: Eine Joystickroutine in C haben wir in der ST-Computer 4/87 und in Omikron-Basic in der Ausgabe 6/87 veröffentlicht. Eine Zusammenfassung an dieser Stelle wäre wohl zu viel verlangt, aber trotzdem nocheinmal die Warnung: Bitte benutzen Sie keine Adressen, die nicht ausdrücklich von ATARI als Systemadressen, also Adressen, die sich auch in Zukunft nicht ändern werden, gekennzeichnet wurden!! Auch beim Joystick geistert eine solche Adresse durch die Zeitschriften. Bei dieser Adresse hat sich jetzt schon gezeigt, daß Sie bei den neuen MEGA-STs nicht mehr funktioniert. Eine solche Programmierung ist unsauber.

Bildschirm, die Zweite

Wie übernimmt man ein Bild, das mit DEGAS ELITE erstellt worden ist und zeigt es auf dem Bildschirm an ?
(Stefan Hanenberg )

Red.: Prinzipiell muß nur die Bildschirmadresse über Logbase() ermittelt werden und mit Fread() 32000 Bytes an diese Adresse geladen werden. Die restlichen Bytes der Datei enthalten die Information der Farbregister für das entsprechende Bild. Achten Sie aber bitte darauf, daß das Bild im DEGAS-Format und ungepackt (!) abgespeichert wird.
In einer der folgenden ST-Ecken wird über die Bildformate der verschiedensten Zeichenprogramme berichtet. Wir werden dann verschiedene Algorithmen veröffentlichen, die es ermöglichen, auch gepackte Bilder in eigene Programme einzulesen.

Genauigkeit gewünscht !

Wir arbeiten mit dem GFA-Basic-Interpreter und dem Compiler am ATARI ST. Die Programme, die wir geschrieben haben, bieten auf dem Bildschirm verschiedene Reize dar ( z.B. Wörter oder andere Buchstabensequenzen ). In unseren Experimenten sollen Versuchspersonen dann auf die Reize reagieren. Unter anderem sollen dabei auch die Reaktionszeiten gemessen werden. Dazu benutzen wir jetzt die TIMER-Funktion von GFA-Basic, mit der leider nur eine Genauigkeit von 5 Millisekunden gemessen werden kann. Für unsere Experimente wäre es aber notwendig, eine höhere Meßgenauigkeit (1 Millisekunde) zu erreichen. Wir wissen allerdings nicht, ob und wie dies möglich ist.
(Institut für Phonetik und sprachliche Kommunikation der Universität München )

Red.: Uns ist eine Lösung bekannt, die aber ein wenig Assemblerkenntnisse voraussetzt. Im ST befindet sich ein CHIP, der sich MFP nennt und programmierbare Timer enthält. Einer dieser Timer ist für den Benutzer frei programmierbar, das heißt man kann durch ihn eine eigene Routine aufrufen lassen. Über die Routine Xbtimer(timer, control, data, vec ) kann die eigene Routine mit der Adresse vec in den Timer 0 eingebunden werden. Diese Routine sollte einfach beim Aufruf eine bestimmte ( von Ihnen gewählte ) Adresse um eins erhöhen und sich dann wieder verabschieden. Control gibt den Teiler-Faktor und Data den Anfangswert an. Als BASICAnwender müßten Sie allerdings erst eine Assemblerroutine schreiben, dieses in DATA-Zeilen umsetzen und diese in einen Speicherbereich einlesen. Sollten Sie dazu nicht in der Lage sein, so müssen wir Sie leider etwas vertrösten: Wir werden uns diesem Thema ausführlicher annehmen, es könnte aber noch zwei oder drei Monate dauern.

Zeichensätze verändern

Wie kann man die ST Zeichensätze edieren und verändern ? Mit dem C64 muß man die ROM-Zeichensätze ins RAM kopieren und dann eine Adresse verändern. Wo ist diese Adresse und dieses ROM ?
(Bernard Meyer, Zürich )

Red.: So einfach wie beim 64er ist es leider nicht. Die Adressen der Zeichensätze ( sie sind nicht fest, das heißt sie können sich ändern! ) bekommt man über eine LINE-A-Routine (a000) heraus und dadurch wäre es möglich, den Zeichensatz zu verändern. Eine ausführliche Beschreibung und ein ausprogrammiertes Beispiel in PASCAL, das auch mit GEM arbeitet, finden Sie in der Ausgabe 4/88 der ST-Computer.

Scheibenkleister

Ich habe ein Routine geschrieben, die eine Diskette formatiert. Diese läuft auch korrekt (auch der Bootsektor wird einwandfrei erzeugt), doch unerklärlicherweise ist die so formatierte Diskette sehr viel langsamer als vom Desktop her formartierte. Woran kann das liegen ?
( Christoph Clausen, 4040 Neuss )

Red.: Die Ursache in der langsamen Bearbeitung Ihrer Diskette liegt wahrscheinlich am Interleave und an der Spiralisierung der Sektoren. Interleave bezeichnet man als Anzahl der Sektoren zwischen zwei numerisch aufeinanderfolgenden Sektoren und Spiralisierung ist die Verschiebung der Sektoren zweier Tracks. Durch Manipulation dieser beiden Faktoren ist es möglich eine Geschwindigkeitssteigerung der Bearbeitung zu erreichen. Da das Blitter-TOS beim Formatieren eine Spiralisierung der Tracks berücksichtigt, kann es schon sein, daß ihre normalformatierten Disketten langsamer sind, als die des BlitterTOS.
Weitere sehr ausführliche und auch ausprogrammierte Informationen finden Sie in dem Buch SCHEIBENKLEISTER der Merlin Computer GmbH, in dem unter anderem sehr detailreich das Programm FASTFORMAT, das Platz für über 950 Kbytes auf einer Diskette schafft, beschrieben wird.



Aus: ST-Computer 06 / 1988, Seite 180

Links

Copyright-Bestimmungen: siehe Über diese Seite