home *** CD-ROM | disk | FTP | other *** search
/ For Beginners & Professional Hackers / cd.iso / docum / soft.doc / partpas.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-06-26  |  8.0 KB  |  164 lines

  1. {┌───────────────────────────────────────────────────────────────────────┐}
  2. {│ ìạáτÑ¡¿Ñ     : ÄΓ«ípáªÑ¡¿Ñ páºí¿Ñ¡¿∩ ªÑßΓ¬«ú« ñ¿ß¬á                 │}
  3. {├───────────────────────────────────────────────────────────────────────┤}
  4. {│ éδº«ó          : PART [¡«¼Ñp ªÑßΓ¬«ú« ñ¿ß¬á] (»« π¼«½τá¡¿ε - 0)       │}
  5. {└───────────────────────────────────────────────────────────────────────┘}
  6.  
  7. uses Dos;
  8.  
  9. type SecPos = record                       { îÑßΓ«»«½«ªÑ¡¿Ñ ßÑ¬Γ«pá       }
  10.                 Head   : byte;             { â«½«ó¬á τΓÑ¡¿∩/ºá»¿ß¿        }
  11.                 SecCyl : word;             { ì«¼Ñp ßÑ¬Γ«pá ¿ µ¿½¿¡ñpá     }
  12.               end;
  13.  
  14.      PartEntry = record                    { éσ«ñ ó Γáí½¿µπ páºñѽ«ó      }
  15.                    Status   : byte;        { æ«ßΓ«∩¡¿Ñ páºñѽᠠ          }
  16.                    StartSec : SecPos;      { ìáτá½∞¡δ⌐ ßÑ¬Γ«p             }
  17.                    PartTyp  : byte;        { Æ¿» páºñѽᠠ                }
  18.                    EndSec   : SecPos;      { è«¡Ñτ¡δ⌐ ßÑ¬Γ«p              }
  19.                    SecOfs   : longint;     { æ¼ÑΘÑ¡¿Ñ ßÑ¬Γ«pá ºáúpπº¬¿    }
  20.                    SecNum   : longint;     { è«½¿τÑßΓó« ßÑ¬Γ«p«ó          }
  21.                  end;
  22.  
  23.      PartSec   = record                    { æÑ¬Γ«p páºí¿Ñ¡¿∩             }
  24.                    BootCode  : array [0..$1BD] of byte;
  25.                    PartTable : array [1..4] of PartEntry;
  26.                    IdCode    : word;
  27.                  end;
  28.  
  29. {┌───────────────────────────────────────────────────────────────────────┐}
  30. {│ ReadPartSec : ù¿ΓáÑΓ ßÑ¬Γ«p páºñѽá ß ñ¿ß¬á ¿ »«¼ÑΘáÑΓ ó íπΣÑp        │}
  31. {├───────────────────────────────────────────────────────────────────────┤}
  32. {│ éσ«ñ¡δÑ »ápá¼ÑΓpδ : HrdDrive - BIOS-¡«¼Ñp ªÑßΓ¬«ú« ñ¿ß¬á($80 ¿½¿ $81) │}
  33. {│                   : Head     - ì«¼Ñp ú«½«ó¬¿ τΓÑ¡¿∩/ºá»¿ß¿            │}
  34. {│                   : SecCyl   - ì«¼Ñp ßÑ¬Γ«pá ¿ µ¿½¿¡ñpá ó Σ«p¼áΓÑ BIOS│}
  35. {│                   : Buf      - üπΣÑp, ó ¬«Γ«pδ⌐ »«¼ÑΘáÑΓß∩ ßÑ¬Γ«p     │}
  36. {└───────────────────────────────────────────────────────────────────────┘}
  37.  
  38. function ReadPartSec ( HrdDrive, Head : byte;
  39.                        SecCyl         : word;
  40.                        var Buf        : PartSec ) : boolean;
  41.  
  42. var Regs : Registers;
  43.  
  44. begin
  45.   Regs.AX := $0201;                   { ì«¼Ñp Σπ¡¬µ¿¿ "τΓÑ¡¿Ñ", 1 ßÑ¬Γ«p  }
  46.   Regs.DL := HrdDrive;                { çá¡ÑßÑ¡¿Ñ ñ«»«½¡¿Γѽ∞¡δσ »ápá¼ÑΓ- }
  47.   Regs.DH := Head;                    { p«ó ó pÑú¿ßΓpδ                    }
  48.   Regs.CX := SecCyl;
  49.   Regs.ES := seg( Buf );
  50.   Regs.BX := ofs( Buf );
  51.   Intr( $13, Regs );                  { é맮ó »pÑpδóá¡¿∩ ªÑßΓ¬«ú« ñ¿ß¬á   }
  52.   ReadPartSec :=
  53.     ( Regs.Flags and 1 ) = 0;         { ö½áú »ÑpÑ¡«ßá π¬áºδóáÑΓ ¡á «Φ¿í¬π }
  54. end;
  55.  
  56. {┌───────────────────────────────────────────────────────────────────────┐}
  57. {│ GetSecCyl   : Ä»pÑñѽ∩ÑΓ ¡«¼Ñp ßÑ¬Γ«pá ¿ µ¿½¿¡ñpá ó Σ«p¼áΓÑ BIOS      │}
  58. {├───────────────────────────────────────────────────────────────────────┤}
  59. {│ éσ«ñ¡δÑ »ápá¼ÑΓpδ : SecCyl   - ì«¼Ñp ßÑ¬Γ«pá ¿ µ¿½¿¡ñpá ó Σ«p¼áΓÑ BIOS│}
  60. {│                   : Sector   - ê¼∩ »ÑpѼѡ¡«⌐ "ßÑ¬Γ«p"                │}
  61. {│                   : Cylinder - ê¼∩ »ÑpѼѡ¡«⌐ "µ¿½¿¡ñp"               │}
  62. {└───────────────────────────────────────────────────────────────────────┘}
  63.  
  64. procedure GetSecCyl ( SecCyl : word; var Sector, Cylinder : integer );
  65.  
  66. begin
  67.   Sector   := SecCyl and 63;               { êºó½ÑτÑ¡¿Ñ í¿Γ«ó 6 ¿ 7       }
  68.   Cylinder := hi( SecCyl ) + ( lo( SecCyl ) and 192 ) shl 2;
  69. end;
  70.  
  71. {┌───────────────────────────────────────────────────────────────────────┐}
  72. {│ ShowPartition  :  ÄΓ«ípáªáÑΓ páºí¿Ñ¡¿Ñ ªÑßΓ¬«ú« ñ¿ß¬á ¡á φ¬pá¡Ñ       │}
  73. {├───────────────────────────────────────────────────────────────────────┤}
  74. {│ éσ«ñ¡«⌐ »ápá¼ÑΓp  : DR  - ì«¼Ñp ½«ú¿τÑ߬«ú« ñ¿ß¬á (0, 1, 2 ¿ Γ.ñ.)    │}
  75. {└───────────────────────────────────────────────────────────────────────┘}
  76.  
  77. procedure ShowPartition ( DR : byte );
  78.  
  79. var Head     : byte;                  { â«½«ó¬á ñ½∩ ΓѬπΘÑú« páºñѽᠠ    }
  80.     SecCyl   : byte;                  { æÑ¬Γ«p ¿ µ¿½¿¡ñp                  }
  81.     ParSec   : PartSec;               { ÆÑ¬πΘ¿⌐ ßÑ¬Γ«p páºí¿Ñ¡¿∩          }
  82.     Entry    : byte;                  { æτÑΓτ¿¬ µ¿¬½á                     }
  83.     Sector,                           { Å«½πτáεΓ ¡«¼Ñpá ßÑ¬Γ«pá ¿         }
  84.     Cylinder : integer;               { µ¿½¿¡ñpá                          }
  85.     Regs     : Registers;             { ÉÑú¿ßΓpδ »p«µÑßß«pá ñ½∩ ó맮óá    }
  86.                                       { »pÑpδóá¡¿∩                        }
  87. begin
  88.   writeln;
  89.   DR := DR + $80;                     { Å«ñú«Γ«ó¬á ¡«¼Ñpá ñ¿ß¬á ñ½∩ BIOS  }
  90.   if ReadPartSec ( DR, 0, 1, ParSec ) then { ùΓÑ¡¿Ñ ßÑ¬Γ«pá páºí¿Ñ¡¿∩     }
  91.     begin                                  { æÑ¬Γ«p πß»ÑΦ¡« »p«τ¿Γá¡      }
  92.       Regs.AH := 8;                        { ùΓÑ¡¿Ñ ñá¡¡δσ ñ¿ß¬á          }
  93.       Regs.DL := DR;
  94.       Intr( $13, Regs );              { é맮ó »pÑpδóá¡¿∩ ªÑßΓ¬«ú« ñ¿ß¬á   }
  95.       GetSecCyl ( Regs.CX, Sector, Cylinder );
  96. write('┌─────────────────────────────────────────');
  97. write('─────────────────────────────────────┐');
  98. write('│ ä¿ß¬      ',DR-$80,': ',Regs.DH+1:2,' ú«½«ó«¬ ß ',
  99.      Cylinder:5,' µ¿½¿¡ñpἿ ¿ ',Sector:3,' ßÑ¬Γ«pἿ                   │');
  100. write('│ Æáí½¿µá páºñѽ«ó ó ßÑ¬Γ«pÑ páºí¿Ñ¡¿∩');
  101. write('                                         │');
  102. write('├──┬────┬────────────────────────┬────');
  103. write('─────────┬────────────┬───────────┬──────┤');
  104. write('│  │    │                        │ ìáτ');
  105. write('Ὣ      │ è«¡Ñµ      │ÉáßßΓ«∩¡¿Ñ │諽-ó«│');
  106. write('│ #│çáúp│         Æ¿»            │ â«½');
  107. write(' û¿½ æÑ¬ │ â«½ û¿½ æÑ¬│«Γ ßѬ.ºáú.│ßѬΓ. │');
  108. write('├──┼────┼────────────────────────┼────');
  109. write('─────────┼────────────┼───────────┼──────┤');
  110.  
  111.       for Entry := 1 to 4 do               { Äípáí«Γ¬á Γáí½¿µ             }
  112.         with ParSec.PartTable[ Entry ] do
  113.           begin
  114.             write('│ ', Entry, '│');
  115.             if Status = $80 then write ('äÇ  ')
  116.                             else write ('ìàÆ ');
  117.             write('│');
  118.             case PartTyp of                { ÄΓ«ípáªÑ¡¿Ñ Γ¿»á páºñѽᠠ   }
  119.               $00    : write('ìÑ ºá¡∩Γ«               ');
  120.               $01    : write('DOS, 12-í¿Γ«óá∩ FAT     ');
  121.               $02    : write('XENIX                   ');
  122.               $03    : write('XENIX                   ');
  123.               $04    : write('DOS, 16-í¿Γ«óá∩ FAT     ');
  124.               $05    : write('DOS, ä«»«½¡¿Γ. páºñѽ   ');
  125.               $DB    : write('Åápώѽ∞¡á∩ DOS        ');
  126.               else     write('ìÑ¿ºóÑßΓ¡á∩ (',PartTyp:3,')    ');
  127.             end;
  128.             GetSecCyl ( StartSec.SecCyl, Sector, Cylinder);
  129.             write('│',StartSec.Head:2,' ',Cylinder:5,' ',Sector:3 );
  130.             GetSecCyl ( EndSec.SecCyl, Sector, Cylinder);
  131.             write(' │',EndSec.Head:2,' ',Cylinder:5,Sector:3 );
  132.             write(' │', SecOfs:7,'    │', SecNum:6,'│');
  133.  
  134.       end;
  135. write('└──┴────┴────────────────────────┴────');
  136. writeln('─────────┴────────────┴───────────┴──────┘');
  137.  
  138.          end
  139.         else writeln('ÄΦ¿í¬á ó« ópѼ∩ ñ«ßΓπ»á ¬ ßÑ¬Γ«pπ ºáúpπº¬¿');
  140.       end;
  141.  
  142. {┌───────────────────────────────────────────────────────────────────────┐}
  143. {│                    â ï Ç é ì Ç ƒ   Å É Ä â É Ç î î Ç                  │}
  144. {└───────────────────────────────────────────────────────────────────────┘}
  145.  
  146. var HrdDrive,                         { ÅÑpѼѡ¡δÑ ñ½∩ »pÑ«ípẫóá¡¿∩     }
  147.     DError    : integer;              { ºáñá¡¡δσ ápúπ¼Ñ¡Γ«ó               }
  148.  
  149. begin
  150. writeln;
  151.   HrdDrive := 0;                      { Å« π¼«½τá¡¿ε                      }
  152.   if ParamCount = 1 then              { àß½¿ ñ¿ß¬ ºáñá¡ »ápá¼ÑΓp«¼        }
  153.     begin
  154.       val (ParamStr(1),HrdDrive,DError);   { ASCII ó ñÑß∩Γ¿τ¡«Ñ           }
  155.       if DError <> 0 then                  { àß½¿ «Φ¿í¬á »pÑ«ípẫóá¡¿∩   }
  156.         begin
  157.           writeln(#13#10'ìÑóÑp¡« π¬áºá¡ ñ¿ß¬!');
  158.           exit;
  159.         end;
  160.     end;
  161.   ShowPartition ( HrdDrive );               { ÄΓ«ípáªáÑΓ ßÑ¬Γ«p páºñѽᠠ }
  162. end.
  163.  
  164.