home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* TPLABEL.PAS *)
- (* Dieses Programm demonstriert den Umgang mit Disketten- *)
- (* und Festplatten-Labels. TPLabel hat den gleichen *)
- (* Funktionsumfang wie MS-DOS Label; Labels können *)
- (* angelegt, umbenannt und gelöscht werden. *)
- (* (c) 1991 Michael Plewe & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM TPLabel;
-
- USES Crt, Dos;
-
- TYPE
- str11 = STRING [11];
-
- CONST
- New : BOOLEAN = FALSE;
- Message : STRING =
- 'TPLABEL Version 1.0 (c) 1991 Michael Plewe & TOOLBOX';
- Drive : STRING [1] = 'C';
- FCB : ARRAY [0..45] OF BYTE =
- ($FF, $00, $00, $00, $00, $00, $08, $03,
- $00, $00, $00, $00, $00, $00, $00, $00,
- $00, $00, $00, $00, $00, $00, $00, $00,
- $00, $00, $00, $00, $00, $00, $00, $00,
- $00, $00, $00, $00, $00, $00, $00, $00,
- $00, $00, $00, $00, $00, $00);
-
- NewVolumeID : str11 = '';
- OldVolumeID : str11 = '';
-
- VAR
- Fehler : BYTE;
-
-
- PROCEDURE Error(No : BYTE);
- BEGIN
- Write('FEHLER');
- CASE No OF
- 1 : WriteLn(' bei Parameterübergabe! ',
- ' Bsp.: TPLABEL C:');
- 2 : WriteLn('! Name des Datenträgers konnte ',
- 'nicht geändert werden.');
- 3 : WriteLn('! Alter Name des Datenträgers konnte ',
- 'nicht gefunden werden.');
- 4 : WriteLn('! Name des Datenträgers konnte nicht ',
- 'eingetragen werden.');
- 5 : WriteLn('! Name des Datenträgers konnte nicht ',
- 'gelöscht werden.');
- END;
- Halt(No);
- END;
-
- PROCEDURE GetDrive;
- BEGIN
- IF ParamCount <> 1 THEN Error(1);
- Drive := ParamStr(1);
- Drive := UpCase(Drive[1]);
- FCB[7] := Ord(Drive[1])-64;
- END;
-
- PROCEDURE AdaptStr(VAR strg : str11);
- VAR
- b : BYTE;
- BEGIN
- IF strg <> '' THEN
- FOR b := Length(strg) TO 11 DO strg := strg + #32;
- END;
-
- PROCEDURE ReadLabel;
- BEGIN
- WriteLn('(Länge: 11 Zeichen / RETURN beendet)');
- Write('Bitte geben Sie einen neuen Namen ein: ');
- ReadLn(NewVolumeID);
- AdaptStr(NewVolumeID);
- END;
-
- PROCEDURE EraseLabel;
- VAR
- Regs : Registers;
- c : CHAR;
- i : BYTE;
- BEGIN
- Write('Soll Name des Datenträgers gelöscht ',
- 'werden? (J/N) ');
- c := UpCase(ReadKey);
- WriteLn(c);
- IF c = 'J' THEN BEGIN
- FOR i := 1 TO 11 DO FCB[7+i] := Ord(OldVolumeID[i]);
- WITH Regs DO BEGIN
- ah := $13;
- ds := Seg(FCB);
- dx := Ofs(FCB);
- MsDos(Regs);
- IF al <> 0 THEN Error(5);
- WriteLn(^M^J'Name des Datenträgers wurde gelöscht');
- END;
- END ELSE
- WriteLn(^M^J'Name des Datenträgers wurde nicht ',
- 'verändert');
- END;
-
- PROCEDURE NewLabel;
- VAR
- Regs : Registers;
- i : BYTE;
- BEGIN
- WriteLn('Datenträger in Laufwerk ', Drive,
- ': trägt keinen Namen.');
- ReadLabel;
- IF NewVolumeID = '' THEN BEGIN
- WriteLn(^M^J'Es wurde kein Name eingetragen');
- Exit;
- END;
- FOR i := 1 TO 11 DO FCB[7+i] := Ord(NewVolumeID[i]);
- WITH Regs DO BEGIN
- ah := $16;
- ds := Seg(FCB);
- dx := Ofs(FCB);
- MsDos(Regs);
- IF al <> 0 THEN Error(4);
- WriteLn(^M^J'Name des Datenträgers wurde eingetragen')
- END;
- END;
-
- PROCEDURE RenameLabel;
- VAR
- Regs : Registers;
- i : BYTE;
- BEGIN
- WriteLn('Alter Name des Datenträgers in Laufwerk ',
- Drive, ': lautet ',OldVolumeID,'.');
- ReadLabel;
- IF NewVolumeID = '' THEN BEGIN
- EraseLabel;
- Exit;
- END;
- FOR i := 1 TO 11 DO BEGIN
- FCB[ 7+i] := Ord(OldVolumeID[i]);
- FCB[23+i] := Ord(NewVolumeID[i]);
- END;
- WITH Regs DO BEGIN
- ah := $17;
- ds := Seg(FCB);
- dx := Ofs(FCB);
- MsDos(Regs);
- IF al <> 0 THEN Error(2);
- WriteLn(^M^J'Name des Datenträgers wurde geändert!');
- END;
- END;
-
- PROCEDURE SetLabel;
- VAR
- FileRec : SearchRec;
- BEGIN
- FileRec.Name := '';
- FindFirst(Drive + ':\*.*', VolumeID, FileRec);
- IF DosError <> 0 THEN IF DosError = 18 THEN New := TRUE
- ELSE Error(3);
- IF Pos('.', FileRec.Name) > 0 THEN
- Delete(FileRec.Name, Pos('.', FileRec.Name), 1);
- OldVolumeID := FileRec.Name;
- AdaptStr(OldVolumeID);
- IF New THEN NewLabel
- ELSE RenameLabel;
- END;
-
- BEGIN
- WriteLn(^M^J, Message, ^J);
- GetDrive;
- SetLabel;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von TPLABEL.PAS *)