C 64/VC 20
Tips & Tricks
5/84, S. 88-89

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:

  1. Das Directory wird in den Pufferspeicher gelesen.
  2. Der alte Name wird durch den neuen ersetzt.
  3. Die ID wird geändert.
  4. 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
Programmbeschreibung anhand der Zeilennummern
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
Variablendefinition
1 rem" *********************************************************************
2 rem" ++++++                  diskettenname andern                   ++++++
3 rem" ++++++                  --------------------                   ++++++
4 rem" *********************************************************************
5 rem" ++++++                 copyright (c) 1983  by                  ++++++
6 rem" ++++++      uwe repplinger, kaiserstr. 30, 1000 berlin 42      ++++++
7 rem" *********************************************************************
8 :
9 :
1000 print"{clr}{rvon}   =-=   diskettenname andern   =-=   "
1010 print"{rvon}         (c) by  uwe repplinger         "
1020 input"{down}richtige diskette eingelegt   j{left}{left}{left}";w$
1030 ifw$<>"j"thenprint"{down}cont{up}{up}{up}":end
1040 print"{down}diskname:";spc(19);"disk id:":printtab(10);"{up}{rvon}";
1050 open1,8,15:print#1,"i0"
1060 open8,8,8,"#"
1070 print#1,"u1:";8;0;18;0
1080 print#1,"b-p:";8;144
1090 fori=1to16
1100 get#8,ch$:printch$;
1110 nexti
1120 print#1,"b-p:";8;162
1130 get#8,c1$,c2$
1140 printspc(11);c1$;c2$
1150 input"{down}{down}soll der name geandert werden   j{left}{left}{left}";w$:g%=0
1160 ifw$<>"j"then1210
1170 input"{down}neuer diskettenname ";dn$
1180 dn$=left$(dn$+"                ",16)
1190 print#1,"b-p:";8;144
1200 print#8,dn$;:g%=1
1210 input"{down}{down}soll die disk id geandert werden   n{left}{left}{left}";w$
1220 ifw$<>"j"then1270
1230 input"{down}neue disk id ";id$
1240 id$=left$(id$+"  ",2)
1250 print#1,"b-p:";8;162
1260 print#8,id$;:g%=1
1270 ifg%=1thenprint#1,"u2:";8;0;18;0
1280 print#1,"i0":close8:close1
1290 print"{down}{down}{rvon}";:ifg%=1thenprint" diskette geandert  -=-";
1300 print"  programmende  "
1310 end
Programm, mit dem der Name und/oder die ID einer Diskette geändert werden kann
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →