{ 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.