FreeSpace von Stefan Hußfeldt Wielandstr.8 2400 Lübeck 1 Oftmals steht man vor dem Problem, aus einer Batch-Datei heraus festzustellen, ob auf einer Diskette oder im Computer für eine bestimmte Aufgabe noch genügend Speicherplatz vorhanden ist. Um dieses Problem zu lösen, habe ich das Assembler-Programm 'FreeSpace' geschrieben. Der Aufruf erfolgt folgendermaßen: FreeSpace [-k] [-s] [-c] [-f] <[Gerät]|[-m]> Es folgt die Erklärung der Parameter: <[Gerät]|[-m]> und müssen immer angegeben werden. Unter [Gerät] sind sowohl physikalische als auch logische Geräte zu verstehen. Zulässig sind zum Beispiel 'DF0:', 'VD0:', 'Meine_Disk:' etc. jedoch NICHT 'PRT:', 'CON:' o.ä. Enthält der Gerätename Leerzeichen, so muß er von Gänsefüßchen (") eingeschlossen sein (z.B. 'FreeSpace "Amiga Disk:" 5000'. Wird ANSTATT eines Gerätes der Parameter -m angegeben, bezieht sich der Test auf den RAM-Speicher des Computers. gibt die Anzahl der Speicherstellen an, die auf einem Gerät oder im Speicher mindestens frei sein müssen. Die Angabe der übrigen Parameter ist wahlfrei. Wird optional -k mit übergeben, behandelt das Prgramm den in angegebenen Wert als K-Bytes (1 K-Bytes = 1024 Bytes). Die Angabe von -s hat nur beim Test von Geräten einen Sinn. Ist dieser Parameter mit angegeben, wird ein eventueller Schreibschutz nicht beachtet, ansonsten liefert 'FreeSpace' bei aktivem Schreibschutz eine entsprechende Meldung und als ReturnCode 30. Die Parameter -c und -f sind nur beim Speichertest relevant. Sie geben den zu testenden Speichertyp an: -c fordert CHIP-, -f FAST-RAM an. Ist weder -c noch -f angegeben, wird der gesamte Speicher 'betrachtet'. Die Reihenfolge der Parameter -k, -s, -c, -f und -m ist beliebig. muß als letztes angegeben werden. Werden keine, ungenügende oder falsche Parameter eingegeben, gibt 'FreeSpace' einen Hilfstext aus, der über das Eingabeformat Auskunft gibt. 'FreeSpace' liefert folgende ReturnCodes: a) ReturnCode = 0 : Genügend Speicherplatz vorhanden. b) ReturnCode = 5 (WARN=True): Zuwenig Speicherplatz vorhanden. c) ReturnCode = 30 (FAIL=True): Syntax- oder anderer Fehler. Die ReturnCodes lassen sich in einer Batch-Datei sehr einfach mit 'IF warn', 'IF not warn' etc. auswerten. Das Programm wurde für den SEKA-Assembler geschrieben, läßt sich aber auch leicht auf andere Assembler umsetzen. SEKA-Assembler | PD-A68K-Assembler ---------------------------------- '=' | 'EQU' 'align 4' | 'cnop 0,4' 'blk.b' | 'dcb.b' Da das Programm reichlich mit Kommentaren versehen ist, verzichte ich an dieser Stelle auf eine Erläuterung des Programmablaufes (Hinweis: Label 'Buffer' muß auf einer durch vier teilbaren Adresse liegen, daher der Befehl 'align 4'.); vielmehr möchte ich an zwei Beispielen die Möglichkeiten von 'FreeSpace' verdeutlichen. Beispiel 1: Für CLI unerfahrene User habe ich eine Batch-Datei geschrieben, mit der die Virenschutz-Programme 'VCheck' und 'VirusX' automatisch auf eine Diskette kopiert werden. Desweiteren wird die 'startup-sequence' dieser Diskette so geändert, daß diese beiden Programme beim Booten automatisch gestartet werden. Damit diese Aufgabe durchgeführt werden kann, benötigt man eine Diskette mit einer SHELL-Oberfläche z.B. Workbench1.3- oder ARP-Shell. Es müssen sich die Programme 'FreeSpace', 'VirusX' und 'VCheck' im C: Directory dieser Diskette befinden. Die Batch-Datei speichert man unter dem Namen 'VirusSchutz' im SYS: Directory der Diskette ab. Mit dem 'Protect'-Befehl setzt man das 'S'-Flag der Batch-Datei. Nun verpasst man der Datei noch ein Project-Icon und setzt in diesem das DEFAULT TOOL auf C:IconX. Weitere Informationen entnehmen Sie bitte dem File 'VirusSchutz.DOC' auf der beiliegenden Diskette. Es folgt -auszugsweise- die Batch-Datei namens 'VirusSchutz'. Batch-Datei: .KEY Geraet .DEFAULT Geraet DF0: : FreeSpace "" 11500 If not warn Copy RAM:c/(VirusX|VCheck) "" Cd "s" Delete >NIL: startup-sequence.old Rename startup-sequence startup-sequence.old Echo >RAM:temp "VCheck" Echo >>RAM:temp "VirusX" Join RAM:Temp startup-sequence.old TO startup-sequence Delete RAM:Temp Cd RAM: Echo "" Echo "VirusSchutz installiert !!" Endif 'FreeSpace' hat hier die Aufgabe, zu überprüfen, ob sich auf der Diskette genügend Platz befindet. Ist dieses nicht der Fall, bricht die Batch-Datei ab. Beispiel 2: Wenn man seine Disketten auf verschiedenen AMIGA's laufenlassen möchte, deren Speicherkapazitäten voneinander abweichen, kann man mit 'FreeSpace' in der 'startup-sequence' entsprechende Maßnahmen ergreifen. So wird man z.B. auf einem Rechner mit viel Speicher eine resetfeste RAM-Disk einrichten und diverse Utilities starten wollen; arbeitet man hingegen auf einem 'kleinen' AMIGA, sollte dieses besser unterbleiben. Die 'startup-sequence' könnte folgendes Aussehen haben: 'startup-sequence': 1: PalTest 2: FastMemFirst 3: SetPatch r 4: FreeSpace -m -k 1000 5: If not warn 6: Assign RAD: exists 7: If not warn 8: Mount RAD: 9: copy (Alles mögliche) to RAD: 10: EndIf 12: Addbuffers df0: 100 13: DMouse 14: ScreenX 15: RunBack Calculator 16: :. 17: EndIf 18: : In Zeile 4 wird getestet, ob der AMIGA zu diesem Zeitpunkt 1000K-Byte (1 M-Byte) freien Speicher besitzt. Ist dies gegeben, werden die Zeilen 6-16 abgearbeitet; andernfalls wird auf das Einrichten der RAM-Disk und das Laden der Utilities verzichtet. Hiermit sind die Möglichkeiten wohl bei weitem noch nicht ausgeschöpft und es bleibt der Phantasie des Anwenders überlassen, sich noch mehr nützliche Anwendungen mit 'FreeSpace' einfallen zu lassen.