Wer einen ATARI der STE-Version besitzt, hat sich bestimmt schon über die Tatsache gefreut, daß er endlich Icons auf dem Desktop ablegen kann. Wer seinen Bildschirm nun so richtig voll hat (nicht im übertragenen Sinne), auf kein Icon verzichten will und sich den Rechner auch noch mit jemandem teilen muß, der völlig andere Programme benötigt, hat sich bestimmt schon ein zweites Desktop gewünscht. Diese Idee habe ich mit einem kleinen Programm realisiert, das die NEWDESK.INF-Datei in einen beliebig wählbaren Namen umbenennt und eine andere Datei in NEWDESK.INF.
Für den Namen der inaktiven Datei wählt man z.B. das Anwendungsgebiet z.B. GRAFIK.INF etc. Die Dateinamen und die Namen der beiden Benutzer werden in der Datei DWECHSEL.PAR gespeichert, die sich jeder nach folgendem Schema frei erstellen kann:
z.B.:
C:\TEXTVER.INF
User1 aktiv
User 1
C:\GRAFIK.INF
User2 aktiv
User 2
Die Datei muß in jedem Fall DWECHSEF.PAR heißen und sich zusammen mit DWECHSEL.PRG im AUTO-Ordner des Boot-Laufwerks befinden. Damit das Programm funktioniert, müssen bereits eine Datei NEWDESK.INF und eine der in der PAR-Datei genannten im Wurzelverzeichnis des Boot-Laufwerks existieren. Das Programm zeigt dann den momentanen Status an. Da der Programmaufbau recht einfach ist, läßt sich das Programm auf beliebig viele weitere Benutzer erweitern
M. Eisenhardt
' Desktop-Wechsler by Matthias Eisenhardt
' (c)1992 by MAXON-Computer
'
$10000 !Speicher reservieren.
OPEN "I",#1,CHR$(GEMDOS(25)+ 65)+":\AUTO\WECHSEL.PAR"
INPUT #1,pfadl$ !aus
INPUT #1,messagel$ !PARameter-Datei
INPUT #1,benutzer1$ !einlesen.
INPUT #1,pfad2$ !
INPUT #1,message2$ !
INPUT #1,benutzer2$ !
CLOSE !
IF EXIST(pfad1$) THEN !Prüfen, welche der
status$=LEFT$(message1$,25) !beiden angegebenen
ELSE IF EXIST(pfad2$) !INF-Dateien aktiviert
status$=LEFT$(message2$,25) !ist und Status ein-
ENDIF !tragen.
CLS
PRINT AT(6,9);"|---------------------|"
PRINT AT(6,10);"| Desktop-Status: |"
PRINT AT(6,11);"| |"
PRINT AT(6,12);"|"+SPACE$(13-(LEN(status$)/2))+ status$+SPACE$(13-(LEN(status$)/2))+"|"
PRINT AT(6,13);"| |"
PRINT AT(6,14);"+---------------------+";CHR$(27);"q"
PRINT AT(11,16);"'1' = "+benutzer1$
PRINT AT(11,18);"'2' = "+benutzer2$
PRINT AT(14,21);"Benutzer ? ";
REPEAT !Abfrageschleife,
benutzer$=INPUT$(1) !solange bis richtige
d$=CHR$(GEMDOS(25)+65) !Zahl (1/2) eingegeben
IF benutzer$="1" THEN !wurde.
IF EXIST(pfad2$) THEN !Bei anderem Benutzer,
NAME d$+":\NEWDESK.INF" AS pfad1$ !Umbenenn. der
NAME pfad2$ AS d$+":\NEWDESK.INF" !inaktiven Datei in
ENDIF !'NEWDESK.INF' und
CLS !der aktiven Datei in
END !den in der PAR-Datei
ELSE IF benutzer$="2" !angegebenen Namen.
IF EXIST(pfad1$) THEN !
NAME d$+":\NEWDESK.INF" AS pfad2$
NAME pfad1$ AS d$+":\NEWDESK.INF"
ENDIF
CLS
END
ELSE IF benutzer$=CHR$(13)
CLS
END
ENDIF
UNTIL 0
Die Nützlichkeit des Trace-Bits (Bit 15) im Statusregister ist sicherlich vielen Programmierern unbekannt. Dabei bietet es einen ganz besonderen Komfort. Es existiert nämlich ein Exceptions-Vektor namens Trace, in dem die Adresse einer ganz normalen, mit RTE abgeschlossenen Routine, steht. Ist nun das Trace-Bit im SR gesetzt, so wird nach jedem abgearbeiteten Assemblerbefehl in die im Trace-Vektor eingetragene Routine gesprungen. Dadurch ist es zum Beispiel möglich, Ihren ST in Zeitlupe zu versetzen. Sie müssen lediglich eine Routine einbauen, die Ihren Rechner nach jedem Befehl etwas aufhält, z. B. durch eine Warteschleife. Ein weiteres nützliches Beispiel ist ein Debugger. Durch den Trace-Vektor wird somit eine Einzelschrittbearbeitung möglich. Man kann immer einen Befehl ausführen und sich danach die Register-Inhalte oder andere programmspezifische Informationen angzeigen lassen. Das Programm wird Schritt für Schritt verfolgt und die Fehlersuche damit erheblich erleichtert.
Christian Roth / Matthias Brust
Da der ST im hochauflösenden Grafikmodus nur Schwarz und Weiß kennt, wünschen sich viele ST-User echte Graustufen. Man behilft sich daher mit Füllmustern, um Graustufen zu simulieren. Doch diese sind wiederum beschränkt (8 vorgegebene Graustufenfüllmuster). Es gibt jedoch ein Verfahren, mit dem man aus diesen Mustern noch viele weitere erzeugen kann. Es nennt sich Dithering. Dabei tut man so, als ob man einen Schwärzungsgrad zur Verfügung hätte und mischt je nach diesem Grad die verschiedenen Füllmuster zu einer neuen Graustufe zusammen. Schauen Sie sich doch mal das Ergebnis im Bild an.
Christian Roth /Matthias Brust
' Graustufen-Dithering in GFA-BASIC V3.X
' von Christian Roth u. Matthias Brust
'
BOUNDARY 0 !Umrahmung von Pbox aus
' Balken mit den Graustufen
step=9/640
FOR i&=0 TO 639 STEP 3
DEFFILL 1,2,step*i&
IF INT(step*i&)<>0
PBOX i&,0,i&+4,19
ENDIF
NEXT i&
' Jetzt mit Dithering
step=8/640 !Felder/Auflösung
r&=DIV(640,8) !Auflösung/Felder
FOR i&=0 TO 639 STEP 3
FOR i1&=40 TO 59 STEP 3
' Normalgraustufe berechnen
gr_stufe&=step*i&
' Dithering-Effekt:
IF RANDOM(r&)<i& MOD r&
INC gr_stufe&
ENDIF
DEFFILL 1,2,gr_stufe&
IF gr_stufe&<>0
PBOX i&,i1&,i&+4,i1&+4
ENDIF
NEXT i1&
NEXT i&
BOUNDARY 1 !Umrahmung wieder ein