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 |