home *** CD-ROM | disk | FTP | other *** search
- {┌───────────────────────────────────────────────────────────────────────┐}
- {│ ìạáτÑ¡¿Ñ : ÄΓ«ípáªÑ¡¿Ñ páºí¿Ñ¡¿∩ ªÑßΓ¬«ú« ñ¿ß¬á │}
- {├───────────────────────────────────────────────────────────────────────┤}
- {│ é맮ó : PART [¡«¼Ñp ªÑßΓ¬«ú« ñ¿ß¬á] (»« π¼«½τá¡¿ε - 0) │}
- {└───────────────────────────────────────────────────────────────────────┘}
-
- uses Dos;
-
- type SecPos = record { îÑßΓ«»«½«ªÑ¡¿Ñ ßÑ¬Γ«pá }
- Head : byte; { ⫽«ó¬á τΓÑ¡¿∩/ºá»¿ß¿ }
- SecCyl : word; { 쫼Ñp ßÑ¬Γ«pá ¿ µ¿½¿¡ñpá }
- end;
-
- PartEntry = record { éσ«ñ ó Γáí½¿µπ páºñѽ«ó }
- Status : byte; { æ«ßΓ«∩¡¿Ñ páºñѽá }
- StartSec : SecPos; { ìáτá½∞¡δ⌐ ßÑ¬Γ«p }
- PartTyp : byte; { Æ¿» páºñѽá }
- EndSec : SecPos; { è«¡Ñτ¡δ⌐ ßÑ¬Γ«p }
- SecOfs : longint; { æ¼ÑΘÑ¡¿Ñ ßÑ¬Γ«pá ºáúpπº¬¿ }
- SecNum : longint; { 諽¿τÑßΓó« ßÑ¬Γ«p«ó }
- end;
-
- PartSec = record { æÑ¬Γ«p páºí¿Ñ¡¿∩ }
- BootCode : array [0..$1BD] of byte;
- PartTable : array [1..4] of PartEntry;
- IdCode : word;
- end;
-
- {┌───────────────────────────────────────────────────────────────────────┐}
- {│ ReadPartSec : ù¿ΓáÑΓ ßÑ¬Γ«p páºñѽá ß ñ¿ß¬á ¿ »«¼ÑΘáÑΓ ó íπΣÑp │}
- {├───────────────────────────────────────────────────────────────────────┤}
- {│ éσ«ñ¡δÑ »ápá¼ÑΓpδ : HrdDrive - BIOS-¡«¼Ñp ªÑßΓ¬«ú« ñ¿ß¬á($80 ¿½¿ $81) │}
- {│ : Head - 쫼Ñp ú«½«ó¬¿ τΓÑ¡¿∩/ºá»¿ß¿ │}
- {│ : SecCyl - 쫼Ñp ßÑ¬Γ«pá ¿ µ¿½¿¡ñpá ó Σ«p¼áΓÑ BIOS│}
- {│ : Buf - üπΣÑp, ó ¬«Γ«pδ⌐ »«¼ÑΘáÑΓß∩ ßÑ¬Γ«p │}
- {└───────────────────────────────────────────────────────────────────────┘}
-
- function ReadPartSec ( HrdDrive, Head : byte;
- SecCyl : word;
- var Buf : PartSec ) : boolean;
-
- var Regs : Registers;
-
- begin
- Regs.AX := $0201; { 쫼Ñp Σπ¡¬µ¿¿ "τΓÑ¡¿Ñ", 1 ßÑ¬Γ«p }
- Regs.DL := HrdDrive; { çá¡ÑßÑ¡¿Ñ ñ«»«½¡¿Γѽ∞¡δσ »ápá¼ÑΓ- }
- Regs.DH := Head; { p«ó ó pÑú¿ßΓpδ }
- Regs.CX := SecCyl;
- Regs.ES := seg( Buf );
- Regs.BX := ofs( Buf );
- Intr( $13, Regs ); { é맮ó »pÑpδóá¡¿∩ ªÑßΓ¬«ú« ñ¿ß¬á }
- ReadPartSec :=
- ( Regs.Flags and 1 ) = 0; { ö½áú »ÑpÑ¡«ßá π¬áºδóáÑΓ ¡á «Φ¿í¬π }
- end;
-
- {┌───────────────────────────────────────────────────────────────────────┐}
- {│ GetSecCyl : Ä»pÑñѽ∩ÑΓ ¡«¼Ñp ßÑ¬Γ«pá ¿ µ¿½¿¡ñpá ó Σ«p¼áΓÑ BIOS │}
- {├───────────────────────────────────────────────────────────────────────┤}
- {│ éσ«ñ¡δÑ »ápá¼ÑΓpδ : SecCyl - 쫼Ñp ßÑ¬Γ«pá ¿ µ¿½¿¡ñpá ó Σ«p¼áΓÑ BIOS│}
- {│ : Sector - ê¼∩ »ÑpѼѡ¡«⌐ "ßÑ¬Γ«p" │}
- {│ : Cylinder - ê¼∩ »ÑpѼѡ¡«⌐ "µ¿½¿¡ñp" │}
- {└───────────────────────────────────────────────────────────────────────┘}
-
- procedure GetSecCyl ( SecCyl : word; var Sector, Cylinder : integer );
-
- begin
- Sector := SecCyl and 63; { êºó½ÑτÑ¡¿Ñ í¿Γ«ó 6 ¿ 7 }
- Cylinder := hi( SecCyl ) + ( lo( SecCyl ) and 192 ) shl 2;
- end;
-
- {┌───────────────────────────────────────────────────────────────────────┐}
- {│ ShowPartition : ÄΓ«ípáªáÑΓ páºí¿Ñ¡¿Ñ ªÑßΓ¬«ú« ñ¿ß¬á ¡á φ¬pá¡Ñ │}
- {├───────────────────────────────────────────────────────────────────────┤}
- {│ éσ«ñ¡«⌐ »ápá¼ÑΓp : DR - 쫼Ñp ½«ú¿τÑ߬«ú« ñ¿ß¬á (0, 1, 2 ¿ Γ.ñ.) │}
- {└───────────────────────────────────────────────────────────────────────┘}
-
- procedure ShowPartition ( DR : byte );
-
- var Head : byte; { ⫽«ó¬á ñ½∩ ΓѬπΘÑú« páºñѽá }
- SecCyl : byte; { æÑ¬Γ«p ¿ µ¿½¿¡ñp }
- ParSec : PartSec; { ÆÑ¬πΘ¿⌐ ßÑ¬Γ«p páºí¿Ñ¡¿∩ }
- Entry : byte; { æτÑΓτ¿¬ µ¿¬½á }
- Sector, { Å«½πτáεΓ ¡«¼Ñpá ßÑ¬Γ«pá ¿ }
- Cylinder : integer; { µ¿½¿¡ñpá }
- Regs : Registers; { ÉÑú¿ßΓpδ »p«µÑßß«pá ñ½∩ ó맮óá }
- { »pÑpδóá¡¿∩ }
- begin
- writeln;
- DR := DR + $80; { Å«ñú«Γ«ó¬á ¡«¼Ñpá ñ¿ß¬á ñ½∩ BIOS }
- if ReadPartSec ( DR, 0, 1, ParSec ) then { ùΓÑ¡¿Ñ ßÑ¬Γ«pá páºí¿Ñ¡¿∩ }
- begin { æÑ¬Γ«p πß»ÑΦ¡« »p«τ¿Γá¡ }
- Regs.AH := 8; { ùΓÑ¡¿Ñ ñá¡¡δσ ñ¿ß¬á }
- Regs.DL := DR;
- Intr( $13, Regs ); { é맮ó »pÑpδóá¡¿∩ ªÑßΓ¬«ú« ñ¿ß¬á }
- GetSecCyl ( Regs.CX, Sector, Cylinder );
- write('┌─────────────────────────────────────────');
- write('─────────────────────────────────────┐');
- write('│ ä¿ß¬ ',DR-$80,': ',Regs.DH+1:2,' ú«½«ó«¬ ß ',
- Cylinder:5,' µ¿½¿¡ñpἿ ¿ ',Sector:3,' ßÑ¬Γ«pἿ │');
- write('│ Æáí½¿µá páºñѽ«ó ó ßÑ¬Γ«pÑ páºí¿Ñ¡¿∩');
- write(' │');
- write('├──┬────┬────────────────────────┬────');
- write('─────────┬────────────┬───────────┬──────┤');
- write('│ │ │ │ ìáτ');
- write('Ὣ │ 諡ѵ │ÉáßßΓ«∩¡¿Ñ │諽-ó«│');
- write('│ #│çáúp│ Æ¿» │ ⫽');
- write(' û¿½ æÑ¬ │ ⫽ û¿½ æÑ¬│«Γ ßѬ.ºáú.│ßѬΓ. │');
- write('├──┼────┼────────────────────────┼────');
- write('─────────┼────────────┼───────────┼──────┤');
-
- for Entry := 1 to 4 do { Äípáí«Γ¬á Γáí½¿µ }
- with ParSec.PartTable[ Entry ] do
- begin
- write('│ ', Entry, '│');
- if Status = $80 then write ('äÇ ')
- else write ('ìàÆ ');
- write('│');
- case PartTyp of { ÄΓ«ípáªÑ¡¿Ñ Γ¿»á páºñѽá }
- $00 : write('ìÑ ºá¡∩Γ« ');
- $01 : write('DOS, 12-í¿Γ«óá∩ FAT ');
- $02 : write('XENIX ');
- $03 : write('XENIX ');
- $04 : write('DOS, 16-í¿Γ«óá∩ FAT ');
- $05 : write('DOS, ä«»«½¡¿Γ. páºñѽ ');
- $DB : write('Åápώѽ∞¡á∩ DOS ');
- else write('ìÑ¿ºóÑßΓ¡á∩ (',PartTyp:3,') ');
- end;
- GetSecCyl ( StartSec.SecCyl, Sector, Cylinder);
- write('│',StartSec.Head:2,' ',Cylinder:5,' ',Sector:3 );
- GetSecCyl ( EndSec.SecCyl, Sector, Cylinder);
- write(' │',EndSec.Head:2,' ',Cylinder:5,Sector:3 );
- write(' │', SecOfs:7,' │', SecNum:6,'│');
-
- end;
- write('└──┴────┴────────────────────────┴────');
- writeln('─────────┴────────────┴───────────┴──────┘');
-
- end
- else writeln('ÄΦ¿í¬á ó« ópѼ∩ ñ«ßΓπ»á ¬ ßÑ¬Γ«pπ ºáúpπº¬¿');
- end;
-
- {┌───────────────────────────────────────────────────────────────────────┐}
- {│ â ï Ç é ì Ç ƒ Å É Ä â É Ç î î Ç │}
- {└───────────────────────────────────────────────────────────────────────┘}
-
- var HrdDrive, { ÅÑpѼѡ¡δÑ ñ½∩ »pÑ«ípẫóá¡¿∩ }
- DError : integer; { ºáñá¡¡δσ ápúπ¼Ñ¡Γ«ó }
-
- begin
- writeln;
- HrdDrive := 0; { Å« π¼«½τá¡¿ε }
- if ParamCount = 1 then { àß½¿ ñ¿ß¬ ºáñá¡ »ápá¼ÑΓp«¼ }
- begin
- val (ParamStr(1),HrdDrive,DError); { ASCII ó ñÑß∩Γ¿τ¡«Ñ }
- if DError <> 0 then { àß½¿ «Φ¿í¬á »pÑ«ípẫóá¡¿∩ }
- begin
- writeln(#13#10'ìÑóÑp¡« π¬áºá¡ ñ¿ß¬!');
- exit;
- end;
- end;
- ShowPartition ( HrdDrive ); { ÄΓ«ípáªáÑΓ ßÑ¬Γ«p páºñѽá }
- end.
-