home *** CD-ROM | disk | FTP | other *** search
- {
- This Turbo Pascal code will read the serial number and volume
- from disks that have been Formatted under Dos 4.0 and higher ...
- }
- (*-------------------------------------------------------------------*)
- Program VolSN; { reads disk serial number & volume Label (Dos 4.0+) }
- Uses Dos;
- Type MediaID = Record
- InfoLevel : Word;
- SerialN : LongInt;
- VLabel : Array [0..10] of Char;
- SysName : Array [0..7] of Char;
- end;
-
- Var IDbuffer : MediaID;
- SerialNumber : LongInt;
- VolumeLabel : String[12];
- Reg : Registers;
- loopc : Byte;
- begin
- WriteLn( #10, 'VolStat 0.00 Greg Vigneault', #10 );
-
- Reg.AH := $30; { Function to get Dos version number }
- MsDos( Reg ); { via MS-Dos }
- if ( Reg.AL < 4 ) or ( Reg.AL = 10 )
- then begin { must be Dos 4.0 or above (& not OS/2?) }
- WriteLn( 'Dos version error',#7 );
- Halt(1) { abort Program }
- end;
-
- Reg.AX := $6900; { Dos Function }
- Reg.BL := 0; { Drive (0=current,1=A,2=B,etc)}
- Reg.DS := Seg( IDbuffer ); { place to return data }
- Reg.DX := ofs( IDbuffer );
- MsDos( Reg ); { call Dos }
- { there'll be an error if disk doesn't have a serial # ... }
- if ( Reg.FLAGS and 1 ) <> 0 { carry flag set? }
- then begin
- WriteLn( 'Dos error getting Media ID',#7 );
- Halt(2);
- end;
-
- SerialNumber := IDbuffer.SerialN; { get serial number }
-
- WriteLn( 'Disk serial number: ', SerialNumber );
-
- VolumeLabel := '';
- loopc := 0;
- While ( IDbuffer.VLabel[ loopc ] <> ' ' )
- do begin
- VolumeLabel[ loopc+1 ] := IDbuffer.VLabel[ loopc ];
- inC( loopc );
- end;
- VolumeLabel[0] := CHR( loopc ); { set TP String length }
- if ( loopc <> 0 ) then
- WriteLn( 'Disk volume Label : ', VolumeLabel );
- end.