Das Pseudo-Multitasking unter GEM ist darauf angewiesen, daß alle gleichzeitig laufenden Applikationen (Hauptprogramm und Accessories) AES-Funktionen aufrufen. Dann nämlich tritt der sogenannte Dispatcher in Aktion und bestimmt, zu welchem Programm zurückgesprungen wird. Das muß nicht das sein, welches AES aufgerufen hat. Wenn man in einem Teil seines Programms keine AES-Funktionen benötigte, aber trotzdem anderen Prozessen eine Chance lassen wollte, blieb einem keine andere Möglichkeit, als einen Dummy-Aufruf zu machen, z.B. evnt_timer() ohne Wartezeit. Die GEM-Version 2.0 (bis jetzt nicht für Atari erhältlich) hat eigens dafür die Funktion appl_yield(). Doch auch beim Atari-GEM gibt es eine elegantere Version. Normalerweise erhält das Register D0 vordem TRAP #2 den Wert 200 als Code für das AES. Nimmt man aber stattdessen 201, wird keine Funktion ausgeführt, sondern nur der Dispatcher aufgerufen. Der Zeiger auf den Parameterblock in D1 wird trotzdem benötigt, aber nur wegen des GLOBAL-Felds. Die Implementierung dieses Aufrufs in einer höheren Sprache sollte für jeden, der mit Assembler nicht gerade auf Kriegsfuß steht, keine Schwierigkeit sein.
Oliver Scheel
Die Atari-Maus ist ein stark beanspruchtes Kleinod, weshalb nach einiger Zeit des Kückens gravierende Abnutzungserscheinungen vor allem der linken Maustaste zu schaffen machen. Möchte man den Zeigefinger vor einem ähnlichen Schicksal bewahren, muß man sich entweder nach einer neuen Maus umsehen oder kostengünstiger und entsprechend der Q-Tip-Anleitung in ST 3/90 die Tasten-Kontakte durch neue ersetzen. Zu dieser Einsicht kommt man in den meisten Fällen an einem Sonn- oder Feiertag, auf jeden Fall aber zu einem Zeitpunkt, wo es besonders schwierig ist, an neue Geräte oder Bauteile heranzukommen. Da nun beim ersten Mal nur der Kontakt der linken Maustaste stark lädiert ist, die rechte Taste aber noch einwandfrei funktioniert, bietet es sich als Sofortmaßnahme an, einfach die Funktionalität beider Tasten zu vertauschen (auch als Grundsatzlösung für Linkshänder empfehlenswert). Dazu öffnen wir, wie in ST 3/90 beschrieben und abgebildet, das Mausgehäuse und sichten in der oberen Hälfte am rechten Rand einen Steckverbinder. Mit einem Schraubenzieher hebeln wir den Buchsenstecker aus der Stiftleiste. Die beiden oberen Kontakte (weiß, gelb) sind die Schaltkontakte für die Maustasten (rechts, links). Diese Anordnung kann durch Messungen zwischen Steckverbinder und Anschlußbuchse der Atari-Maus ermittelt werden (Bild 1 und 2, siehe auch Profibuch). Der entscheidende Kunstgriff besteht nun darin, mit einer Nadel die beiden oberen Kontakte aus der Steckerleiste herauszuziehen und vertauscht wieder hineinzustecken. Anschließend wird der Buchsenstecker wieder auf die Stiftleiste gesteckt und das Gehäuse zugeschraubt. Wer beim anschließenden Test das Gefühl hat, daß jetzt das Klicken überhaupt nicht mehr funktioniert, der traktiert wahrscheinlich nach wie vor die linke Maustaste. Nach einer Gewöhnungsphase jedoch funktioniert die Übergangslösung meist prächtig, und man hat Zeit gewonnen, nach dauerhafteren Lösungen Ausschau zu halten, bei denen dann ja wieder auf die „richtige“ Maustastenbelegung umgeschaltet werden kann.
Editha Kuske, 6107 Reinheim 4
Dieser Quicktip ist für alle Benutzer eines Sharp-Taschenrechners mit ST-Interface und des Programms Transfile gedacht. Mit Minimalaufwand kann man sich ein elektronisches Adreßbuch zimmern! Das folgende Mikroprogramm (als Anregung für ein komfortableres gedacht) ist in der Lage, die Telefonnummer zu einem bestimmten Namen (oder der ersten paar Anfangsbuchstaben desselben) auszugeben. Dabei wird einfach die DATA-Liste (ab Zeile 240) durchforstet und der erstpassende Eintrag angezeigt oder bei erfolgloser Suche eine Meldung ausgegeben (s. Listing 1).
Das Programm ist ja noch das wenigste, aber wie bekommt man seine Adressen in den Quellentext? Sein ganzes Adreßbuch in diese DATA-Zeilen eintippen ist nicht jedermanns Sache, umsomehr, weil bei einem Tippfehler eine falsche Person am anderen Ende der Leitung ist. Da ein echter ST-Benutzer ja sowieso seine ganze Bekanntschaft in irgendeiner Datenbank abgelegt hat, läßt sich das problemlos realisieren. Bei Adimens legt man sich eine Ausgabemaske in etwa dieser Form zurecht:
#COUNT# DATA
"#NAME#","#TELEFON#"
und läßt das ganze nicht beim Drucker hinaus, sondern legt es in eine Datei. Auch bei den Sharp-Modellen mit knickrigem Speicher lassen sich so an die hundert Telefonnummern speichern. Von Hand oder mit der Renumber-Option von Transfile werden noch die mit COUNT vorgezählten Zeilen-nummem zurechtgeschürbelt, mit der Zeile DATA „XXX“ (nicht vergessen!) ergänzt, die ganze Geschichte an obiges oder ähnliches Sharp-BASIC-Programm angehängt und in den Pocket-Computer geladen.
Marco Strehler, CH-8400 Winterthur
100 REM -- ADRESSBUCH --
110 "A":CLEAR
120 DIM S$(2)*20: REM DIMENSIONIEREN
130 DIM I$(0)*20
140 INPUT "NAME ? ";I$(0)
150 L=LEN I$(0) : REM LAENGE ERMITTELN
160 RESTORE
170 READ S$(0):REM ZEILEN EINLESEN
180 IF S$(0)="XXX" THEN PRINT "NICHTS GEFUNDEN":GOTO "A"
190 READ S$(1)
200 S$(2)=LEFT$(S$(0),L)
210 IF I$(0)<>S$(2) THEN GOTO 170
220 PRINT S$(0) :PRINT S$(1)
230 GOTO "A"
240 REM -- DATEN --
250 DATA "HAENSEL","11 11 11”
260 DATA "GRETEL","22 22 22"
270 DATA "BOESHEX","99 99 99"
... ........................
... ........................
900 DATA "XXX":REM ENDE
Listing 1: Eine Mini-Dateiverwaltung für Sharp-Taschenrechner
Wer in GFA-BASIC Dateien kopieren möchte, muß sich eine eigene Routine dazu schreiben, da keine spezielle Routine für solche Zwecke eingebunden ist. Eine einfache und zudem schnelle Möglichkeit, Dateien zu kopieren, sehen Sie in Listing 2. Oder möchten Sie vielleicht einfach mal die Leuchtdioden Ihrer Laufwerke blinken lassen, um den Benutzer auf etwas aufmerksam zu machen? Nichts leichter als das, dazu müssen Sie lediglich Listing 3 abtippen!
Gregor Durchalski, W-4690 Hemel
'Kopieren einer Datei (source, dest.)
PROCEDURE copy(a$,b$)
LOCAL a%,b%,c%,i%
b%=1
IF EXIST(b$)
ALERT 3," | Datei existiert bereits!",1, "Weiter|Abbruch",b%
ENDIF
IF b%=1
OPEN "I",#1,a$ !Quelldatei
OPEN "O",#2,b$ !Zieldatei
a%=LOF(#1) !Länge des Files
b%=FRE(0)-3000 !Freier Speicher
c%=a% MOD b% !Rest
DIM a|(b%) !Speicher reser.
FOR i%=1 TO (a% DIV b%) !Schleife
BGET #1,V:a|(0),b% !Lesen
BPUT #2,V:a|(0),b% !Schreiben
NEXT i%
BGET #1,V:a|(0),c% !Rest lesen
BPUT #2,V:a|(0),c% !Rest schreiben
CLOSE
ENDIF
RETURN
Listing 2: Eine Kopierroutine in GEA-BASIC
'Läßt Laufwerkslampen blinken
'a&=Laufwerk 1 oder 2
'b&=wie oft blinken, c&=Blinklänge
PROCEDURE drive_blink(a&,b&,c&)
FOR i&=1 TO b&
~XBIOS(29,5-a&)
PAUSE c&
~XBIOS(30,2+a&)
PAUSE c&
NEXT i&
RETURN
Listing 3: So läßt man Laufwerkslampen blinken.