Tips und Tricks für GFA-Programmierer

Wie kann ich einer Datei (kein Programm) eine Kennung zuordnen, mit der sich deren Zugehörigkeit 100%ig bestimmen läßt? Die Kennung muß zahlenabhängig sein und darf nicht im ASCII-Text vorliegen.

Dazu definieren Sie anfangs eine Zahl »code%«, die nicht größer als 214783643 sein darf. Mit dem Aufruf »code_schreiben()« schreiben Sie die Kennung in die ersten vier Byte der neuen Datei. Hierzu benutzen wir eine einfache Methode. Der Befehl »BPUT VARPTR (code%), 4« schreibt die vier Byte der Variablen »code%« auf Diskette. Jetzt folgen die eigentlichen Daten. Der Aufruf »code_lesen()« legt nach dem Öffnen der Datei die zuvor geschriebenen vier Byte in der Variable »lesecode%« ab. Somit steht in »lesecode%« wieder der gewünschte Wert. Ob dieser dem geforderten Wert entspricht, überprüft die IF...ENDIF-Verkettung.

(Sandro Lucifora/ah)

Oft ertönt beim Aufruf einer ALERT-Box ein Dauerton, der sich erst abschaltet, wenn der Mauszeiger auf einen Button zeigt. Kann ich diesen Effekt umgehen?

Dieser Dauerton kommt zustande, wenn unmittelbar nach einem Mausklick eine ALERT-Box erscheint. Das Betriebssystem hat offenbar Probleme, den zuvor losgelassenen Mausknopf zu registrieren. Um dem vorzubeugen, genügen zwei Befehle. Bevor eine ALERT-Box erscheinen soll, wartet das Programm mit

REPEAT
UNTIL MOUSEK
ALERT .....

auf das Loslassen der Maustaste.

(Sandro Lucifora/ah)

Ich möchte ohne besonderen Aufwand den Druck einiger Tasten abwarten. insbesondere geht es um die F-Tasten und die Cursor-Tasten. Wie geht das?

Eine einfach Lösung bietet »INKEY$«. Fast jeder, der es mit diesem Befehl schon versucht hat, ist bei der Abfrage von Sondertasten verzweifelt. Hierzu muß man wissen, daß nach einem Tastendruck INKEY$ nicht nur ein Byte pro Zeichen, sondern gelegentlich zwei Byte liefert. Im ersten Byte steht der ASCII-Wert des Zeichens der gedrückten Taste. Bei Sondertasten ist dieser Wert null. Das zweite Byte enthält in diesem Fall den Scan-Code, mit dem sich jede Taste eindeutig bestimmten läßt. Ist dieser Umstand bekannt, lassen sich auch Sondertasten ohne großen Aufwand mit »INKEY$« abfragen.

Das erste Listing zeigt bis zum nächsten Mausklick die Werte einer gedrückten Taste. Nachdem der Inhalt von »INKEY$« zwischengespeichert ist, überprüft das Programm den Inhalt der Variablen. Jetzt läßt sich über die Länge »LEN()« herausfinden, ob es sich um eine Sondertaste handelt. Entsprechend gibt das Programm die Werte aus.

Im zweiten Listing werden diese Werte abgefragt und zugeordnet. Wie im ersten Listing entscheidet die Länge von »INKEY$« über die Art der Taste. Entsprechend verzweigt die SELECT-CASE-Anweisung zu den einzelnen Tastencodes. Sinnvollerweise sind hier nur die Sondertasten berücksichtigt.

Sicherheit voraus

Programme bearbeiten Daten, die sie gegebenenfalls speichern. Egal, ob es sich hierbei um eine Text-, Daten- oder Bild-Datei handelt - die Datensicherheit bleibt oft unberücksichtigt. Das folgende Listing bietet eine Routine an, die vor dem Sichern bereits existierende Dateien mit gleichem Namen in »*.BAK« umbenennt.

Als Übergabeparameter dient der Pfad- und Dateiname. Zunächst überprüfen wir, ob eine Datei mit gleichem Namen existiert. Ist dies der Fall, ändern wir den Extender in »*.BAK«; die ersten acht Zeichen des Dateinamens bleiben erhalten. Eine bereits vorhandene Kopie löschen wir.

Warum wechselt der DEFAULT-Button beim Verlassen des Editors von GfA-Basic scheinbar willkürlich von »JA« auf »NEIN« ?

Diese Tatsache hat einen sinnvollen Hintergrund. Der »JA«-Button ist zugleich der DEFAULT-Button, wenn der Programmierer im aktuellen Listing seit dem Laden oder letzten Speichern keine Veränderungen vorgenommen hat. Wurde der Quelltext jedoch bearbeitet, ist die Antwort der Frage »Wollen Sie den Interpreter wirklich verlassen ?« mit »NEIN«vorbelegt. Ist man sich also nicht sicher, ob das Programm schon gesichert ist, reicht ein Tastendruck auf < SHIFT + F3 >. ist der Button »JA« dick umrandet gezeichnet, dürfen Sie den Interpreter sorglos verlassen.



Aus: TOS 04 / 1992, Seite

Links

Copyright-Bestimmungen: siehe Über diese Seite