Tips und Tricks für GfA-Basic

Ich möchte durch ein optisches Signal den Anwender meiner Software erinnern, daß er eine Diskette wechseln oder einlegen soll. jedoch dürfen die Informationen auf dem Bildschirm nicht verloren gehen. Haben Sie hierzu eine Idee?

Wenn die Anzeige auf dem Bildschirm nicht verloren gehen darf, bleibt nur die optische Erinnerung mit Hilfe der vorhandenen Hardware. Hierfür eignet sich hervorragend das LED des Diskettenlaufwerks. Unser Listing zeigt eine Procedure, die das LED vom Laufwerk zum Blinken bringt.

Mit den drei Übergabeparametern teilen Sie der Procedure mit, ob das LED von Laufwerk A (0) oder Laufwerk B (1) blinken soll. Danach bestimmen Sie, wie oft und wie schnell das LED blinkt. Somit ist dem Anwender auch ganz leicht zu zeigen, in welchem Laufwerk das Programm die Diskette erwartet.

	@drive_led_flash (0,10,5)
	PROCEDURE drive_led_flash (drive|, anzahl|, frequenz%)
		LOCAL z|
		FOR z| = 1 TO anzahl\	! solange blinken wie vorgegeben
			~XBIOS (29, SUB( 4,drive|))	! LED vom Laufwerk einschalten
			PAUSE frequenz%	! vorgegebene Pause
			~XBIOS (30, ADD( 3, drive|))	! LED vom laufwerk ausschalten
			PAUSE frequenz%	! vorgegebene Pause
		NEXT z|
	RETURN

Bevor ich eine Datei schreibe, möchte ich prüfen, ob der Anwender diese mit einem Schreibschutz versehen hat, und gegebenenfalls eine neue Datei anlegen. Wesentlich hierfür ist es, vor dem Schreiben durch eine Funktion zu testen, ob die gewünschte Datei den »nur lesen«-Status hat. Sollte es so sein, ist eine neue Datei anzulegen. Unsere Funktion prüft den Zustand der Datei. Hierfür übergeben Sie den kompletten Pfadnamen. Beim Rückgabewert »0« ist die Datei nicht geschützt, bei »-1« hat die Datei den »nur lesen« Status. Meldet die Funktion »-33«, so existiert die Datei nicht. FUNCTION nur_lese_test (pfad$) LOCAL test&, test| IF FSFIRST (pfad$, 0) =0 ! ... Gefunden RETURN BTST (BYTE {BASEPAGE + 128+21}, 0) ! Schreibschutz gesetzt? ENDIF RETURN FSFIRST (pfad$, 0) ENDFUNC

Ich möchte einige Screen-Objekte im Speicher halten und auf den Bildschirm bringen. Wie kann ich das machen, ohne beim Programmstart die einzelnen Bilder laden zu müssen? In diesem Fall arbeiten Sie am besten mit INLINE. Sie laden den gewünschten Bildausschnitt in den INLINE. Mit unserer Funktion verschieben Sie dann den Speicherbereich des INLINE zu dem Speicherbereich des Bild-String. Dies nimmt Ihnen unsere Funktion ab. Als Rückgabe erhalten Sie den Bild-String, der sich dann zu jeder Zeit auf den Bildschirm »Put«ten läßt. Bei unserem Beispiellisting müssen Sie vor dem Start die Datei »INL-PIC.INL« in den INLINE-Speicher laden.

	INLINE adr%, 1228
	bild$ = @set_inline_to_string$ (adr%,1228)
	PUT 100, 100, bild$
	FUNCTION set_inline_to_string$ (adr%, len&)
		LOCAL move$
		move$ = SPACE$ (len&)
		BMOVE adr%, V:move$, len&
		RETURN move$
	ENDFUNC

Ich möchte gerne mehr über den Rechner erfahren, auf dem mein Programm läuft. Wie kann ich das ganz individuell ermitteln?

Ab TOS-Version 1.06 unterstützt Atari den sogenannten Cookie-Jar. Hier finden Sie alle wichtigen Informationen über den Rechner vom Prozessor über CoProzessor bis zur Video-Hardware. Teilweise läßt sich auch einiges über installierte Software erfahren. Mit unserer Procedure print_cookies erhalten Sie auf dem Bildschirm die Eintragungen eines Cookie und dessen Wert. Atari hat sich für eigene Systeminformationen vorbehalten, diese durch einen vorangehenden Unterstrich zu kennzeichnen. Die Werte zu den einzelnen Cookies erfahren Sie in unserer Tabelle. Programme tragen auch eine Kennung ein, ob sie nun der Treiber einer Grafikkarte oder ein Software-Blitter sind. Mit unserer Function get_cookie suchen Sie nach einem bestimmten Cookie. Hierfür müssen Sie nur den Namen des Cookie übergeben, in unserem Beispiel »_CPU« für den Prozessor-Typ. Als Rückgabe erhalten Sie bei gefundenem Eintrag TRUE und unter cwert% den Wert des Cookie-Jar. Dieser läßt sich dann gemäß unserer Tabelle auswerten. (Sandro Lucifora/ah)

	@print_cookies
	PRINT
	IF @get_cookie („_CPU“, cwert%)
		PRINT „Der Cookie »_CPU« hat den Wert “; cwert%
		PRINT „Der Prozessor ist ein “; 68000 + cwert%
	ENDIF
	FUNCTION get_cookie (such$, VAR cookie_wert%)
		LOCAL adr%, find$
		adr% = LPEEK(1440)	! Adresse des Cookie-Jar
		IF adr%			! Cookie-Jar vorhanden
			DO WHILE {adr%} <> 0	! Solange suchen bis zum Nullcookie ...
				find$ = MKL$ ({adr%})
				ADD adr%, 8
				IF such$ = find$	! ... oder der Eintrag gefunden ist ...
					cookie_wert% = {SUB(adr%,4)}
					RETURN TRUE	! Dann TRUE zurück
				ENDIF
			LOOP
		ELSE
			RETURN FALSE	! Keine Cookie gefunden, dann FALSE zurück
		ENDIF
	ENDFUNC
	PROCEDURE print_cookies
		LOCAL adr%, find$
		adr% = LPEEK (1440)	! Adresse des Cookie-Jar
		IF adr%			! Cookie-Jar vorhanden
			DO WHILE {adr%} <>0	! Solange ausgeben, bis zum Nullcookie
				find$ = MKL$ ({adr3})
				ADD adr%, 8
				PRINT find$, {SUB (adr%, 4)} BIN$ ({SUB (adr%, 4)}, 32)
			LOOP
		ENDIF
	RETURN
Die wichtigsten Cookies _CPU Prozessortyp
1. Wort 0, 10, 20, 30 oder 40 je nach Typ
_FPU Coprozessor
1. Wort Bit 0 gesetzt = Coprozessorkarte
1. Wort Bit 1 und 2 gesetzt = TT-Typ
1. Wort Bit 3 gesetzt = 68040
_FRB FastRAM-Buffer
Zeiger auf FastRAM-Buffer für DMA-Transfer
_MCH Maschinentyp
Oberes Wort 0 = ST
Oberes Wort 1 = STE
Oberes Wort 2 = TT
Unteres Wort 1 = Mega ST
_SND Soundhardware
Bit 0 = Yamaha-Soundchip
Bit 1 = DMA-Stereo-Sound
_SWI DIP-Switches
Konfiguration der DIP-Schalter im Mega STE und TT
_VDO Videohardware
0 = ST
1 = STE
2 = TT
_FDC Floppycontroller
0 = DD
1 = HD
2 = ED
_FLK Filelocking
_INF Patch für Fehler im Desk von TOS 1.6
_NET Flag für GEMDOS-Netzwerkerweiterung
_OOL Poolfix 3
Patch für Fehler im GEM DOS 0. 15
_SLM Diabolo-Treiber für SLM-Laser
_VSCR Info über sichtbaren Bildschirmausschnitt


Aus: TOS 11 / 1992, Seite

Links

Copyright-Bestimmungen: siehe Über diese Seite