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;
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!
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
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