Ich will eine Zeichnung mit GDOS ausdrucken und benutze das Beispiel im GFA-BASIC-Handbuch Seite 10-33. Starte ich das Programm, schicke ich den Rechner ins Nirwana. Ich arbeite mit einem MEGA ST2, TOS 1.04 und AMC-GDOS 3.10 in der GFABASIC-Version 3.5. Wie kann ich den Fehler beheben?
Dieser Fehler tritt tatsächlich nur in Zusammenhang mit AMC-GDOS auf Gegenüber dem ATARI-GDOS löscht AMC-GDOS nach jedem VDI-Aufruf das interne VDI-Handle des GFA-BASIC. Deshalb müssen Sie nach jedem VDI-Aufruf die Variable »V~H« (Internes VDI-Handle des GFA-BASIC) neu setzen. Auch wenn Sie mit ATARI-GDOS arbeiten, ist dieser Schritt ohne Probleme zu verwenden. Orientiert an dem Quelltext im GFA-BASIC-Handbuch Seite 10-33 ergibt sich folgende Variante: 07_gfagdos.lst
Wie kann ich verschiedene Textmerkmale in einzelnen Fensterzeilen darstellen?
Die einfachste und sinnvollste Lösung ist es, den Befehl »DEFTEXT« anzuwenden. Bevor Sie mit »TEXT« eine Zeile in einem Fenster darstellen, definieren Sie zuvor mit »DEFTEXT« das Aussehen der Textzeile und bestimmen somit die einzelnen Textmerkmale.
Ich schreibe ein Programm, in dem persönliche Daten auf Diskette gespeichert werden. Da diese dritte Personen nichts angehen, möchte ich die Daten verschlüsseln. Leider weiß ich nicht, wie ich das machen soll.
Um Daten zu verschlüsseln, gibt es viele Möglichkeiten. Als einfaches Beispiel haben wir uns für das Vertauschen der Zeichen entschieden. Im folgenden Listing bieten wir eine Routine, die individuell verschlüsselt.
Als Rückgabe der Procedure »ausgabe_schluesseln()« folgt der codierte Text. Um den Text wieder lesbar zu machen, müssen Sie die Procedure mit der Übergabe des schon codierten Textes aufrufen. Als Rückgabe bekommen Sie den Originaltext. Zum Speichern sei noch etwas anzumerken. Da sich auch das Komma und Anführungszeichen verändert, müssen Sie beim Speichern darauf achten, daß Sie nur »LINE INPUT verwenden.
Ich arbeite bei der Fensterverwaltung mit den Befehlen »ON MENU MESSAGE GOSUB ... « und »ON MENU«. Immer wenn das Ereignis »MENU(1) = 24« (Pfeilfelder oder Schieberegler angewählt) auftritt, wird die Procedure ZWEIMAL aufgerufen.
Der oben beschriebene Effekt tritt nur beim Anwählen der Pfeilfelder auf und ist erst ab TOS-Version 1.04 zu bemerken. Geben Sie hinter dem Befehl »ON MENU« noch den Wert »100« an, also »ON MENU 100«. Damit veranlassen Sie GFA-BASIC nach dem Anklicken der Pfeilfelder mit der Auswertung der nächsten Nachricht kurz zu warten.
OPENW 100, 100, 300, 300, -1
CLEARW 1
ON MENU MESSAGE GOSUB auswertung
REPEAT
ON MENU 100
UNTIL MENU(1) = 22
CLOSEW 1
PROCEDURE auswertung
PRINT MENU (1)
RETURN
Sehr oft ist mittlerweile ein Programm als Shell oder im Modulkonzept aufgebaut. Das bedeutet, daß bei Bedarf ein fremdes Programm aus der Hauptapplikation aufgerufen wird. GFA-BASIC bietet hierfür den Befehl »EXEC( ... )« an. Zuvor müssen Sie mit »CHDRIVE« das neue aktuelle Laufwerk und mit »CHDIR« den neuen aktuellen Pfad einstellen. Dies muß geschehen, falls das aufgerufene Programm weitere Dateien nachlädt.
Trotzdem lassen sich einige Programme wie 1st Word Plus, Calamus, SIGNUM!3 nicht ohne Fehlermeldung aus dem eigenen Programm starten. Es fehlen immer die RSC-Dateien. Dies hat den Grund, daß sich diese Programme den aktuellen Pfad aus dem AES holen (in GFA-BASIC mit dem Befehl »SHEL-FIND(pfad$)«). Somit muß auch dem AES der aktuelle Pfad übergeben werden. Das folgende Listing bietet ein Grundgerüst für diesen Aufruf. Zunächst geben Sie den nicht benötigten Speicher dem Betriebssystem zurück. Hiernach erfolgt die Überprüfung, ob das angegebene Programm existiert.
RESERVE 1000
textv_Pfad$ = "F:\1stword.app"
@textverarbeitung
RESERVE
PROCEDURE textverarbeitung
IF EXIST (textv_pfad$)
PRINT AT (2,2) ; "Lade die Textverarbeitung";
CHDRIVE LEFT$ (textv_pfad$,3)
~SHEL_WRITE (1, 1, 1, "", textv_pfad$)
~EXEC (O, textv_pfad$, "", "")
~SHEL_WRITE (O, 1, 1, "", "")
~WIND_SET( O, 14, 0, 0, 0, 0)
ENDIF
RETURN
Ist das geschehen, übergeben wir mit »SHEL-WRITE(...)« dem AES den aktuellen Pfad, mit der Information, daß das Programm auch gestartet werden soll. »EXEC( ... )« ist dann endgültig der Programmaufruf. Nach der Rückkehr aus dem Fremd-Programm informieren wir das AES darüber, daß die Textverarbeitung nicht noch einmal gestartet wird und löschen den zuvor mitgeteilten Pfad.
(Sandro Lucifora/Lars van Straelen/ah)