Diskettenzauberei
Wenn Sie über eine reichhaltige Diskettensammlung verfügen, ist sicherlich schon der Wunsch aufgetaucht, den Namen und/oder die ID einer bestimmten Diskette zu ändert, ohne dabei den Disketteninhalt zu zerstören. Wir zeigen Ihnen, wie es geht.
Mit dem DOS-Befehl »RENAME« ist es möglich, bestehenden Dateien einen neuen Namen zu geben. Dieser Befehl wirkt leider nur auf Dateiebene und nicht auch auf Diskettenebene, das heißt, es ist nicht möglich, den Diskettennamen und/oder die ID zu verändern. Dazu existiert der DOS-Befehl »NEW«, der den manchmal unerwünschten Nebeneffekt hat, daß sämtliche Programme und Dateien auf der Diskette gelöscht werden. Diesen Nachteil behebt das nachfolgend beschriebene Programm (siehe Listing).
Mit diesem Programm ist es möglich, den Namen und/oder die ID einer Diskette zu ändern, ohne daß der Disketteninhalt gelöscht wird. Es läuft auf jedem Commodore-Computer mit minimal 40 Zeichen pro Zeile. Durch kleine Änderungen bei der Bildschirmausgabe kann es auch auf einem VC 20 verwendet werden. Es können alle Floppys mit DOS 2A (also 1540, 1541, 4031, 4040) verwendet werden, wobei darauf zu achten ist, daß sich bei Doppelfloppys die zu ändernde Diskette in Drive 0 befindet.
Programmbedienung
Nachdem das Programm von Diskette oder Kassette geladen und mit RUN gestartet wurde, erscheint zuerst die Frage, ob die zu ändernde Diskette eingelegt ist. Ist dies nicht der Fall, kann das Programm gegebenenfalls durch Eingabe von »N« unterbrochen und durch Drücken der RETURN-Taste fortgesetzt werden. Als nächstes erscheint der Name und die ID der eingelegten Diskette auf dem Bildschirm.
Beantwortet man die Frage, ob der Name geändert werden soll, mit »J«, besteht die Möglichkeit, den neuen Diskettennamen einzugeben. Falls der eingegebene Name länger als 16 Zeichen ist, werden automatisch nur die ersten 16 verwendet. Gleiches gilt auch für die Eingabe der ID, deren maximale Länge 2 Zeichen beträgt.
Danach wird die Diskette geändert. Das Ende dieses Vorganges wird durch die Ausgabe von »DISKETTE GEÄNDERT -=- PROGRAMMENDE« angezeigt. Die Diskette ist nun mit dem neuen Namen versehen. Doch wie kam es dazu? Um diese Frage beantworten zu können, sollte man sich die Datenstruktur auf der Diskette etwas näher betrachten.
Die Diskette ist in 35 konzentrische Spuren aufgeteilt, die aus mehreren Sektoren bestehen. Jeder Sektor ist 256 Byte lang. Damit sich der Computer auch später noch zurechtfindet, wird ein Inhaltsverzeichnis angelegt (das sogenannte DIRECTORY). In diesem Inhaltsverzeichnis befindet sich eine Liste der belegten und freien Sektoren, der Diskettenname, die ID und eine Liste der auf der Diskette gespeicherten Programme und Dateien.
Der hier interessierende Teil — Diskettenname und ID — ist auf Spur 18, Sektor 0 gespeichert. Der Name belegt in diesem Sektor die Bytes 144 bis 161, die ID 162 und 163. Nun stellt sich die Frage, wie diese Byte geändert werden können. Zu diesem Zwecke stellt das DOS sogenannte Direkt-Zugriffsbefehle zur Verfügung. Von besonderer Bedeutung sind hier:
BLOCK-READ (Abkürzung: U1): liest den Inhalt eines Sektors in den Pufferspeicher der Floppy.
BLOCK-WRITE (Abkürzung: U2): schreibt einen Datenblock aus dem Pufferspeicher in den angegebenen Sektor.
BUFFER-POINTER (Abkürzung: B-P): setzt einen Zeiger auf jenes Byte im Pufferspeicher, auf das zugegriffen werden soll.
Zum Ändern des Namens geschieht nun folgendes:
- Das Directory wird in den Pufferspeicher gelesen.
- Der alte Name wird durch den neuen ersetzt.
- Die ID wird geändert.
- Das geänderte Directory wird aus dem Pufferspeicher auf die Diskette übertragen.
Zur Übermittlung der Befehle muß zuerst der Befehlskanal mit OPEN 1,8,15 geöffnet werden. Bevor nun etwas in den Pufferspeicher geladen werden kann, muß ein Kanal für diesen Puffer angelegt werden. Dies geschieht mit OPEN 8,8,8,"#".
Das Lesen des Directory erfolgt mit PRINT #1, "U1:";8;0;18;0. Dadurch wird ein Datenblock von Laufwerk 0, Spur 18, Sektor 0 in dem Kanal 8 zugeordneten Puffer gelesen. Nun muß der Zeiger auf das erste Byte des Diskettennamens gesetzt werden: PRINT#l,»B-P«;8;144. Jetzt kann der alte Name überschrieben werden. Dies geschieht mit der PRINT#8,DN$, wobei in DN$ der neue Diskettenname gespeichert ist. DN$ muß genau 16 Byte lang sein, Das gleiche muß zum Ändern der ID gemacht werden (Zeile 1260, 1270).
Der geänderte Name steht nun im Pufferspeicher, er muß jetzt nur noch zurück auf die Diskette gebracht werden, dies geschieht durch PRINT#,"U2:";8;0;18;0 (schreibt den Inhalt des Pufferspeichers, der Kanal 8 zugeordnet ist, auf Spur 18, Sektor 0 der in Laufwerk 0 befindlichen Diskette). Die Diskette ist somit geändert.
(Uwe Repplinger)Programmzeile | Erläuterung |
---|---|
1050 | Befehlskanal eröffnen und Disk initialisieren |
1060 | Öffnen des Datenkanals |
1070 | Directory in den Pufferspeicher lesen |
1080 | Zeiger auf Diskettennamen setzen |
1090-1110 | Diskettennamen lesen und ausgeben |
1120 | Zeiger auf ID setzen |
1130-1140 | ID lesen und ausgeben |
1180 | Diskettenname auf 16 Zeichen formatieren |
1190 | Zeiger auf Diskettennamen setzen |
1200 | Neuen Diskettennamen in den Puffer schreiben |
1240 | ID auf 2 Zeichen formatieren |
1250-1260 | Zeiger auf ID setzen und neue ID in den Puffer schreiben |
1270 | Geändertes Directory auf Diskette speichern |
1280 | Diskette initialisieren, Daten- und Befehlskanal schließen |
Name | Belegung |
---|---|
W$ | Benutzereingabe |
CH$ | Alter Diskettenname |
C1$ | Erstes Zeichen der alten ID |
C2$ | Zweites Zeichen der alten ID |
DN$ | Neuer Diskettenname |
ID$ | Neue ID |
G% | G%=1 : Diskette wurde geändert G%=0 : Diskette wurde nicht geändert |