Autor: Adam Borowski (ab171958_at_rainbow.mimuw.edu.pl)
Data: Fri 17 Oct 1997 - 23:51:33 MET DST
Witam wszystkich!
Kilku ludzi z listy prosilo o zrodla boot managera nie pozostajacego w
tablicy partycji, ktorego mozna uruchamiac z np. menu w Wingrozie czy z
menu w Volkov Commanderze. Oto on. Nie jest napisany "porzadnie", ale
byc moze uda sie zainteresowanym wyciagnac z niego jakies potrzebne
informacje. Brak w nim interfejsu uzytkownika, ale zabezpieczen jest na
szczescie dosc, tak wiec mam nadzieje ze nikomu nic nie zepsuje (chyba
ze znowu sie znajdzie jakis biolog ;-) )
_/ _/ _/ ____/ _/
_/ _/ _/ _/ _/ _/ _____/
_/_/ _/ ___/ _/ _/ _/ ___/
__/ _/ _/ _/ _/ ____/ _/ _/ _/ _/ _/
_/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ ____/
_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/
_/ _/ __/ __/ ___/ ____/ ___/ __/ ___/
Where do YOU want to die today? _/
__/
const
pdata=510-4*16;
var
buf:array[0..511] of byte;
partdata:array[1..4] of record
active:byte;
d1:array[1..3] of char;
typ:byte;
d2:array[5..15] of char
end;
i,j:byte;
names:array[byte] of string[20];
label nier,niew;
const
actstr:array[boolean] of char='-A';
procedure err;
begin
writeln('Press any key');
asm { ReadKey bez wad modulu Crt }
XOR AX,AX
INT 16h
end;
halt(1)
end;
procedure error(const txt:string);
begin
writeln(txt);
err
end;
begin
asm { wczytanie partycji }
MOV AX,0201h
MOV CX,1
MOV DX,80h
MOV BX,SEG buf
MOV ES,BX
MOV BX,OFFSET buf
INT 13h
JC nier
end;
for i:=0 to 255
do begin
str(i,names[i]);
names[i]:='?????<'+names[i]+'>';
end;
names[0]:='unused';
names[6]:='Dos';
names[5]:='Extended Dos';
names[1]:='Dos <32MB'; {do uzupelnienia, nie chce mi sie tablicy wklepywac}
writeln('Partition table:');
move(buf[pdata],partdata,SizeOf(partdata));
for i:=1 to 4
do with partdata[i]
do writeln(i:2,' ',actstr[active=128],' (',names[typ],')');
i:=0;
if paramstr(1)='1'
then i:=1;
if paramstr(1)='2'
then i:=2;
if paramstr(1)='3'
then i:=3;
if paramstr(1)='4'
then i:=4;
if i=0
then halt;
if partdata[i].typ=0
then error('Cannot make an empty partition active');
if partdata[i].active=128
then error('Partition is already active');
for j:=1 to 4
do partdata[j].active:=0;
partdata[i].active:=128;
move(partdata,buf[pdata],SizeOf(partdata));
asm { zapisanie z powrotem tablicy partycji }
MOV AX,0301h
MOV CX,1
MOV DX,80h
MOV BX,SEG buf
MOV ES,BX
MOV BX,OFFSET buf
INT 13h
JC niew
end;
writeln('Partition ',i,' (',names[partdata[i].typ],') has been made active');
for i:=1 to 4
do with partdata[i]
do writeln(i:2,' ',actstr[active=128],' (',names[typ],')');
halt;
niew:
error('Error writing partition table');
nier:
error('Error reading partition table')
end.
To archiwum zostało wygenerowane przez hypermail 2.1.7 : Tue 18 May 2004 - 16:28:08 MET DST