Beim Einsatz des bei PURE C mitgelieferten Borland-Grafik-Interfaces (BGI) wird jeder Besitzer eines TT wohl schon festgestellt haben, daß in der Header-Datei des BGI namens „GRAPHICS.H“die Auflösungen des TT nicht berücksichtigt sind. Wie stellt man nun bei einem Programm, das in einer der TT-Bildschirmmodi laufen soll, die richtige Auflösungsstufe ein?
Die Lösung des Rätsels ist denkbar einfach, man baut in den PURE-C-Code folgendes Handling ein:
int treiber = DETECT,
aufloesung = STHIGH;
main (...)
{
...
initgraph
(&treiber,&auflösung,"");
...
}
Beim ersten Starten des hernach compilierten Programms taucht schließlich folgende Fehlermeldung auf:
„Ungültiges Handle!
Handle - $FFFF
|weiter| |tolerieren|“
Wenn man den Button „tolerieren“ durch Return bestätigt, wird das Programm ganz normal fortgesetzt.
Auch die Befehle getmaxx und getmaxy liefern die korrekten Werte (z.B. 640 * 480 für VGA). Bei jedem weiteren Start erscheint nun die Handle-Fehlermeldung nicht mehr, solange die CPU kein Reset erfährt oder der Rechner neu bootet.
M. Lupp, Bexbach
Wer hat diese Situation nicht schon einmal erlebt! Da schreibt man gerade an einem neuen Programm und benötigt aus einem alten eine Prozedur.
Da man ja ein unordentlicher Mensch ist und sich keine Blockbibliothek eingerichtet hat, wird man wohl notgedrungen folgendermaßen vorgehen.
Folge der ganzen Hin-und-her-Laderei: Ehemals gesetzte Markierungen sind futsch. Gerade bei längeren Programmen kann dies sehr ärgerlich sein. Aber da gibt es ja noch den Menüpunkt EXEC.PRG! Warum nicht einfach Omikron.BASIC nochmals starten und schauen, ob dies funktioniert? Und siehe da: es funktioniert!
Also noch eben schnell den Block eingefügt: Fertig!
Ob diese Vorgefienkweise Nicht-Festplattenbesitzern zu empfehlen ist, ist fraglich. Doch gerade wenn man im Besitz einer Harddisk ist (und wer ist das heute nicht?), kann man sich auf diese Art und Weise eine Menge Zeit und Arbeit sparen.
D. Hagedorn, Paderborn
Finden Sie nicht auch, daß die GEM-Systemoberfläche in unserem ATARI Rechner etwas öde ist? Besonders in Richtung Systemschrift (System-Font) habe ich da eine Idee für eine Abhilfe. Mit meinem kleinen GFA-BASIC-Programm läßt sich sehr einfach die Systemschrift ändern. Wir müssen zuerst ein Control-Array besetzen, dann den Aufruf für dessen Änderung, anschließend (das Wichtigste!) die Effekt Bits setzen und zum Schluß noch die Änderung aktivieren.
A. Hitzschke, Papenburg
' GEM-Schrift ändern
' GFA-BASIC ab V:1.0
' Andre' Hitzschke
'
PRINT "~~~ Schriftartänderer ~~~"
PRINT " von Andre Hitschke"
PRINT
PRINT
PRINT " [ 0] - normal"
PRINT " [ 1] - fett"
PRINT " [ 2] - hell"
PRINT " [ 4] - kursiv"
PRINT " [ 8] - unterstrichen"
PRINT " [16] - hohl"
PRINT
'
INPUT "Schriftart: ",a
'
DPOKE CONTROL+2,0 !Control-Array besetzen
DPOKE CONTROL+6,1 !Aufruf zum Ändern
DPOKE CONTROL+12,1
DPOKE INTIN,a !Effekt-Bits setzen
VDISYS 106 !Schrift aktivieren
Wer seine gesamten Schallplatten und CDs in einer Datenbank archiviert, gibt gewöhnlich auch ein Feld für die Gesamtlaufzeit an. Leider sind die Gesamtlaufzeiten in den seltensten Fällen auch angegeben. Also heißt es, mühsam die Laufzeiten der einzelnen Stücke per Hand zu addieren.
Einfacher geht es mit folgendem kleinen Programm, das natürlich noch beliebig erweiterbar ist (z.B. Abfangen von un s inn i gen Eingabe n etc. g Das Progrämmchen wurde mit Omikron.BASIC geschrieben. Es sollte aber selbst für den puren Anfänger keine Schwierigkeit sein, es in andere Sprachen zu übersetzen.
Tip: Compilieren Sie das Programm als TOS-Applikation. Dann steht es Ihnen auch in Datenbanken, die einen Programmaufruf erlauben (z.B. Phoenix/ASH), ständig zur Verfügung. Wer will, kann auf grund dieser Idee ja auch sein eigenes Accessory zurechtbasteln.
D. Hagedorn, Paderborn
REPEAT
CLS
Ges_Min=0:Ges_Sek=0
PRINT " kleine Zeitaddition";TAB (56);"zweimal RETURN für Ende"
PRINT " "+"-"*78
REPEAT
PRINT @(4,1);"Eingabe: __ min __ sek"
Minuten$="":Sekunden$=""
INPUT @(4,10);Minuten$ USING "0"+">",,2:Minuten= VAL(Minuten$)
INPUT @(4,18);Sekunden$ USING "0"+">",,2:Sekunden= VAL(Sekunden$)
Summiere_Zeit(Minuten,Sekunden,Gesamt_Zeit$)
PRINT @(4,40);"Gesamtzeit: ";Gesamt_Zeit$
UNTIL Minuten=0 AND Sekunden=0
'
INPUT @(7,1);"Nochmal (j/n)? ";Jn$ USING "1+j+n"+">",,1
UNTIL Jn$<>"j"
END
DEF PROC Summiere_Zeit(In1,In2,R Out$)
Ges_Min=Ges_Min+In1
Ges_Sek=Ges_Sek+In2
IF Ges_Sek>59 THEN Ges_Min=Ges_Min+1;Ges_Sek=Ges_Sek-60
USING "### min ## sek"
Out$= STR$(Ges_Min*100+Ges_Sek)
USING
RETURN
Obwohl mittlerweile schon eine ganze Reihe von Vorschlägen veröffentlicht wurde, die das Ziel haben, den ST beim Booten von der Festplatte zu etwas mehr Geduld zu veranlassen, sei hier noch dine weitere Variante vorgestellt, die einige Vorzüge in sich vereinigt.
Das Funktionsprinzip ist einfach, aber wirkungsvoll: Bei Einschalten des Rechners wird der Monoflop gesetzt und hält für eine einstellbare Zeit (ca. 5-30 Sek.) den Eingang der Reset-Schaltung auf Low, so daß der Boot-Vorgang mit entsprechender Verzögerung startet; wird dagegen der Reset-Knopf gedrückt, bleibt die Zusatzschaltung inaktiv, und der Boot-Vorgang startet ohne unnötige Verzögerung.
Diese Eigenschaft besitzen jedoch auch andere, bereits veröffentlichte Schaltungen, die die Betriebsspannung(en) bzw. die Netzspannung verzögert zuschalten; die hier vorgestellte Lösung hat gegenüber diesen jedoch vor allem zwei Vorteile:
Die Schaltung findet problemlos auf einem ca. 3x3cm großen Stück Universalleiterplatte Platz. Mit einer Leuchtdiode und einem Widerstand zwischen +5V und dem Kollektor des Transistors kann man die Funktion vor dem Einbau überprüfen und auch schon die Zeitverzögerung einstellen. Der Einbau schließlich ist denkbar einfach: die drei Anschlußpunkte findet man auf der Platine alle in unmittelbarer Nähe des Reset Tasters. Auf keinen Fall sollte man die Schaltung an den Reset-Anschluß des Prozessors anschließen!
Bleibt noch zu erwähnen, daß die vorgestellte Schaltung bereits in mehreren Rechnern vom 260er bis zum Mega ST eingebaut wurde und in allen seit Monaten zur vollsten Zufriedenheit funktioniert.
W. Schneider, Berlin
Eigentlich war ich begeistert, als ich den Quicktip von Herrn Brünjes in Heft 10/91, Seite 182, las und machte mich sogleich mit dem enpfohlenen Teppichmesser ans Werk. Erst drückte ich vorsichtig, dann mit etwas mehr Kraft und dann „mit einer Portion Kraft" (Zitat), aber nichts passierte, außer daß die Klinge stumpf wurde. Schließlich hatte ich die Nase voll und setzte noch mehr Kraft ein - das Resultat: ein komplett zerfetztes Teppichmesser, einige unterbrochene Leiterbahnen und tiefe Kratzer im Soundchip.
Nach siebenstündiger Arbeit hatte ich es endlich geschafft aus dem Schrott wieder einen funktionstüchtigen Rechner zu basteln. Deshalb meine Fragen: Warum untertreiben Sie so sanft bei einer Umbauanleitung, und wer ersetzt mir Materia1, Zeit und Aufwand?
P M Jung, KelkheimlTaunus
Antwort von Herrn Brünjes:
Um ganz offen zu sein: Seit dem Umbau meines STE in dem zitierten Quicktip habe ich noch eine Reihe anderer STs mit dem Umschalter versehen und hatte dabei NIE Probleme. Wie Herr Jung letzten Endes vorging, und was er dabei falsch machte, kann ich leider aus der Distanz nicht nachvollziehen.
Das Durchtrennen der Pins kann natürlich auch mit einem feinen Elektroseitenschneider erfolgen, so erspart man sich eventuelle Ausrutscher und dadurch zerschnittene Leiterbahnen.Für Leser, die den Umbau jedoch 100%ig durchführen wollen, gibt es die Möglichkeit, den Soundchip ganz aus der Grundplatine auszulöten und dann die Pins 19 und 20 nach oben zu biegen. Anschließend muß der Chip nur wieder eingelötet werden. ACHTUNG! Diese Methode sollten nur Leser anwenden, die reichlich Erfahrung im Umgang mit ICs haben und überdas richtige Werkzeug verfugen!
M. Brünjes, Bremen
Anmerkung der Redaktion:
Weil Herr Jung die Frage der Haftung anschnitt, möchte ich sehr gerne auf unser Impressum verweisen, in dem (ganz unten) ein Haftungsausschluß nachzulesen ist. Nur bei nachweisbarem Vorsatz und bei einem Beschreibungsfehler müßte der Autor selbst einen Schadensersatz übernehmen.
Die Redaktion kann nicht abschätzen, inwieweit welche Bastelanleitungen den Fähigkeiten bestimmter Leser entsprechen. Solche Beschreibungen in die Tat umzusetzen, unterliegt immer der Verantwortung des Ausführenden.
DK
Um sich eigene Icons für das neue Desktop der MEGA-STEs und TTs zu erstellen, benötigen Sie lediglich zwei Disketten aus der Sonderdisk-Serie dieser Zeitschrift. Dies sind das RCS 1.4 (SD 02) und das Programm IconDesign (SD 17). Gehen Sie bei der Erstellung der Icons folgendermaßen vor:
Viel Spaß beim Entwurf Ihres neuen Desktops!
D. Hagedorn, Paderborn
Die Funktion Directory.FileExists (REF fileNAme: ARRAY OF CHAR) der Megamax Modula-2-Bibliothek arbeitet fehlerhaft! Erfragt man mit ihr die Existenz eines Files, während eine beliebige Datei geöffnet ist, sind anschließend keine Zugriffe mehr auf diese Datei möglich. Stattdessen liefert FilesState Undefinierte Feldnummern. Eine zu FileExists äquivalente Funktion kann je doch schnell selbst programmiert werden. Die benötigten Funktionen aus Files dürften ohnehin von jedem Programm, das mit Dateien operiert, importiert werden, so daß sich die Funktion problemlos in jeden Quelltext eingbauen läßt.
B. Stratmann, Recklinghausen
PROCEDURE FileExists (REF FileName: ARRAY OF CHAR): BOOLEAN;
(* liefert TRUE, wenn eine DAtei namens "FileName" existiert *)
VAR
f: Files.File;
ok: BOOLEAN;
BEGIN
Files.Open(f,FileName,readOnly);
(* nur, wenn "FileName" bereits existiert *)
ok:=(Files.State(f)=MOSGlobals.fOK);
Files.Close(f);
Files.ResetState(f);(* vorsichtshalber *)
RETURN ok;
END FileExists;