Quick-Tips

Rechte und linke Maustaste unabhängig abfragen

Es gibt eine Möglichkeit, mit der AES-Funktion evnt_button (bclicks, mask, state, mx, my, getstate,key) die linke und rechte Maustaste unabhängig abzufragen. Hierzu muß man nur das Highbyte des Wertes bclicks auf TRUE setzen (Bit 9 gesetzt). Dann wird auf den Zustand NOT (state) gewartet. Setzen wir nun mask auf den Wert 3 und state auf den Wert 0 und warten wir auf das nicht Loslassen von links und rechts, also auf das Drücken von linker oder rechter Maustaste. Das ganze funktioniert natürlich entsprechend in der Routine evnt_multi. Zur Veranschaulichung eine kleine Beispielroutine in MAXON-Pascal (siehe Listing).

W. Sattler

PROCEDURE Mausklick;
VAR alert_string : STRING; 
    state,dummy : INTEGER;

BEGIN
    { normaler Wert für bclicks wäre hier 2 } 
    dummy:=evnt_button($0102/$003,$000/ dummy,dummy,state,dummy);

    IF (state=1) THEN 
    BEGIN
        alert_string:='[1][ Linke Maustaste! ][OK]'+#00;
        dummy:=form_alert(1,alert_string[1]); 
    END

    IF (state=2) THEN 
    BEGIN
        alert_string:='[1][ Rechte Maustaste! ][OK]'+#00; 
        dummy:=form_alert(1, alert_string[1]);
    END

END;

Get/Put auf dem TT?

Die Befehle GET/PUT bzw. SGET/SPUT haben bei GFA-BASIC eine große Erleichterung bei der Restauration des Bildschirms dargestellt - solange es sich um eine normale ST-Auflösung handelte. Beim TT brechen die Programme mit der Fehlermeldung „String zu lang“ ab.

Mit dem GFA-BASIC Befehl RC_COPY kann man sich einen nahezu gleich bequemen Ersatz schaffen. Beim Programmstart muß lediglich einmal entsprechend den Bildschirmmaßen ein Speicherbereich zum Zwischenspeichern reserviert werden. Ansonsten übergibt man die gewünschten Rechteckkoordinaten und die Adresse des Quell- bzw. Zielbereichs.

Steffan Kaminski

'Ersatz f. GET/PUT bzw. SGET/SPUT in GFA-BASIC,
'von Steffan Kaminski
'
'Der Befehl RC COPY benötigt folgende Parameter 
'ziel adresse% - Adresse eines Speicherbereichs 
'in den die Daten kopiert werden können 
'(z.B. Passendes Integer-Feld).
'screen_adresse% - Hier Anfangsadresse des 
'Bildschirmspeichers
'
'
'
FOR i&=0 TO 150	! einige Linien zeichnen
    LINE RANDOM(640),RANDOM(400),RANDOM(640), RANDOM(400) 
NEXT i&
'                           ! Platz für ganzen Bildschirm 
DIM a&(80*460)	            ! 80*16 = 640 Pixel Breite
ziel_adresse%=V:a&(0)       ! Anfangsadresse des Speicherbereichs 
screen_adresse%=XBIOS(3)    ! Adresse des Bildschirms (oben links)
RC_COPY screen_adresse%,0,0,640,480 TO ziel_adresse%,0,0
'                           ! ganzen Bildschirm verschieben 
CLS                         ! löschen
DELAY 1                     ! etwas warten
RC_COPY ziel_adresse%,0,0,640,480 TO screen_adresse%,0,0 ! und zurückschreiben
'
' Mit den Parametern kann der Ausschnitt noch beliebig verschoben werden - auch 
' beim Schreiben in den Speicher!

PHOENIX nach dem Absturz

Bis vor wenigen Tagen habe ich mich sehr darüber geärgert, wenn mir der Rechner während der Benutzung des sonst hervorragenden Datenbankprogramms PHOENIX 2.0 abgestürzt war. Nach einem nicht ordnungsgemäßen Beenden von PHOENIX war nach dem Neueinstieg immer eine zeitaufwendige Reorganisation nötig.

Diese Hürde kann aber sehr geschickt umgangen werden: Unter dem Menüpunkt „Datei -Datenbank öffnen" stellt man den Modus auf „Multitasking“. Das Problem machte sich bei mir auch deswegen sehr unangenehm bemerkbar, weil ich PHOENIX als Autostart-Applikation angemeldet habe und oft genug vergessen hatte, vor dem Ausschalten das Programm ordnungsgemäß zu beenden.

A. Gerth

Konvertieren von 9- u. 10-Sektor-Disketten in ein Fastload-Format

Dank eines kleinen Fehlers im TOS-Betriebssystem ist es sogar möglich, mit dessen Hilfe ein Fastload-Format zu erstellen. Gibt man nämlich beim Flopfmt-Befehl (Befehl zum Formatieren eines Tracks) an, daß 9 Sektoren mit einem Interleave-Faktor von 11 geschrieben werden sollen, werden im Boot-Sektor zwar 9 Sektoren angemeldet, tatsächlich aber 11 geschrieben. Der Grund für diesen Fehler liegt in dem vom Betriebssystem verwendeten Algorithmus zur Erstellung einer Spur beim Formatieren. Der 11. Sektor paßt zwar ohne vorherige besondere Bearbeitung des Tracks gar nicht mehr auf die Spur, aber für den Sektorvorspann, auf den es bei diesem Fastload ankommt, ist noch Platz. Durch diesen nämlich werden Extraumdrehungen des Lese- und Schreibkopfes vermieden. Die Daten auf der Diskette können durch die Formatierung vom Betriebssystem mit der gleichen Sektoranzahl erhalten und müssen nicht umstrukturiert werden. Deshalb kann man jeweils die Sektoren eines Tracks in einen Puffer lesen, die Spur mit Fastload neu formatieren und anschließend die Sektoren wieder auf die Diskette schreiben. Schon ist die Diskette konvertiert!

M. Brust und Chr. Roth

' Konvertiert 9- u. 10-Sektor-Disketten
' in ein einfaches Fastload-Format
' von Christian Roth u. Matthias Brust
' Sprache: GFA-BASIC V3.X  8
'
ALERT 1,"Bitte zu konvertierende|Disk einlegen! ",1," OK ",dummy|
drive|=GEMDOS(25) !akt. Laufwerk holen
puffer$ =SPACE$(10000) !Sektor-Puffer
puffer2$=SPACE$(10000) !Format-Puffer
ret%=XBIOS(8,L:V:puffer$, L:0,drive1,1,0,0,1) !Boot-Sektor holen
IF ret%=0
    secs|=BYTE{V:puffer$+24} !Sektoren pro Track
    IF secs|<11 !nur 9 u. 10 Sekt.
        sides|=BYTE{V:puffer$+26} !Anzahl d. Seiten
        ' holen und Track-Anzahl berechnen
        tracks|=(BYTE{V:puffer$+20}*256+BYTE{V:puffer$+19})/secs|/sides|
        DEC sides|
        FOR i|=0 TO tracks|-1
            FOR i1|=0 TO sides|
                ' Sektoren lesen
                ret%=XBIOS(8,L:V:puffer$,L:0,drive|,1,i|,i1|,secs|)
                IF ret%=0
                    ' Fastload formatieren
                    ret%=XBIOS(10,L:V:puffer2$,L:0,drive|,secs|,i|,i1| ,11,L:&H87654321,&HE5E5)
                ENDIF
                ' Sektoren wieder schreiben
                ret%=XBIOS(9,L:V:puffer$,L:0, drive|,1,i|,i1|,secs|)
            NEXT i1|
        NEXT i|
    ELSE
        ALERT 1," Disk kann nicht |  konvertiert werden!",1," OK ",dummy|
    ENDIF
ENDIF


Aus: ST-Computer 12 / 1992, Seite 143

Links

Copyright-Bestimmungen: siehe Über diese Seite