Capítulo– 16
Desenvolvendo mais utilitários para discos
Introdução
Neste capítulo, discutiremos como usar as informações de MBR, DBR, FAT e diretórios raiz para desenvolver programas utilitários que podem nos ajudar no gerenciamento de dados, na otimização do armazenamento ou em muitas tarefas de solução de problemas de disco.
Geralmente, esses programas são a solução para algum problema específico. Alguns programas utilitários e sua programação foram discutidos neste capítulo.
Ocultar partições
Geralmente, o utilitário de ocultação de partição é usado pelos usuários que trabalham em tal sistema de computador que é usado pelos usuários. Se houver muitos usuários para o mesmo computador, pode haver uma grande possibilidade de que os dados de outro usuário sejam lidos, roubados ou excluídos.
Nesse caso, onde o usuário possui alguns dados importantes ou algumas informações confidenciais no mesmo computador, ele pode estar disposto a ocultar a partição na qual possui seus dados de forma que a partição não seja acessada pelo Operador sistema, para que não seja acessado por outro usuário.
Quando o usuário deseja trabalhar no sistema, ele pode acessar a partição de volta, apenas reexibindo a partição. Geralmente, esses tipos de eventos ocorrem nas instituições profissionais, onde os computadores são usados por muitos alunos, mas os alunos mais velhos estão sempre preocupados com seus dados importantes ou trabalhos de projeto. Como na falta de conhecimento, o novo aluno pode prejudicar ou até mesmo excluir seus dados.
Como a partição fica oculta
A tabela a seguir representa o formato da partição na tabela de partição do MBR:
Offset |
Meaning |
Size |
Description |
00H |
Boot Type Indicator Byte |
1 Byte |
If Byte is 00H, the Partition is Inactive and if Byte is 80H, The Partition is Active (or Bootable) |
01H |
Head Number of Beginning of the Partition |
1 Byte |
Starting Head number of the Partition in Hexadecimal System |
02H |
Sector and Cylinder Number of Beginning of the Partition |
2 Bytes |
6 Bits of First Byte make Starting Sector Number and Combination of remaining 2 Bits (as Two Most Significant Bits) plus 8 Bits of another Byte (Rest 8 least Significant Bits of the 10-Bit Number ) make the Starting Cylinder Number of the Partition |
04H |
File System indicator Byte |
1 Byte |
File System Indicator Byte in Hexadecimal system (for complete list of partition indicator bytes, refer the chapter “Logical Approach to Disks and OS” discussed earlier in this book) |
05H |
Head Number of End of the Partition |
1 Byte |
Ending Head Number of the Partition in Hexadecimal System |
06H |
Sector and Cylinder Number of End of the Partition |
2 Bytes |
6 Bits of First Byte make Ending Sector Number and Combination of remaining 2 Bits (as Two Most Significant Bits) plus 8 Bits of another Byte (Rest 8 least Significant Bits of the 10-Bit Number ) make the Ending Cylinder Number of the Partition |
08H |
Absolute Sector number of Beginning of the Partition |
4 Bytes |
Number of Sectors Between the MBR and the First Sector in the Partition |
0CH |
Absolute Sector number of End of the Partition |
4 Bytes |
Number of Sectors in the Partition |
|
|
Total = 16 Bytes |
|
No deslocamento 04H, em cada entrada de partição, há um byte indicador do sistema de arquivos. Este byte indicador representa o tipo de sistema de arquivos dessa partição. Se o valor deste byte for alterado, a identidade da partição será alterada.
Por exemplo, o valor do byte indicador de partição para “DOS 12-Bit FAT” é 0x01. Se este valor for alterado para 0x11, a identidade do sistema de arquivos na entrada da tabela de partição será alterada para “Hidden DOS 12-Bit FAT” (para uma lista completa de bytes indicadores de partição, consulte o capítulo “Abordagem Lógica para Discos e SO” discutido anteriormente neste livro).
A tabela a seguir mostra mais alguns exemplos de byte indicador do sistema de arquivos para alguns tipos de partição:
Partition type indicator Byte |
Description of File System of Partition |
0x01 |
DOS 12–bit FAT |
0x11 |
Hidden DOS 12–bit FAT |
0x04 |
DOS 16–bit FAT (<=32MB) |
0x14 |
Hidden DOS 16–bit FAT (<=32MB) |
0x05 |
DOS Extended |
0x15 |
Hidden DOS Extended |
0x06 |
DOS 16–bit big (> 32MB) |
0x16 |
Hidden DOS 16–bit big (> 32MB) |
0x07 |
NTFS |
0x17 |
Hidden NTFS |
0x0B |
Windows FAT32 |
0x1B |
Hidden Windows FAT32 |
0x0C |
Windows FAT32 (LBA) |
0x1C |
Hidden Windows FAT32 (LBA) |
0x0E |
Windows FAT16 (LBA) |
0x1E |
Hidden Windows FAT16 (LBA) |
0x0F |
Windows Extended |
0x1F |
Hidden Windows Extended |
Aqui vemos que a partição oculta correspondente para qualquer sistema de arquivos é encontrada adicionando o valor 0x10 ao seu byte indicador do sistema.
Embora não seja a regra rígida e rápida para ocultar a partição, ela funciona mesmo para a maior parte do sistema de arquivos. A razão por trás disso é que quando alteramos o valor do byte indicador de partição, a identidade do sistema de arquivos na entrada da tabela de partição é alterada. E é muito raro que o novo sistema de arquivos também seja suportado pelo mesmo sistema operacional.
Escrevendo programa para ocultar partição
O programa fornecido a seguir é usado para ocultar a partição usando a entrada de partição dessa partição da tabela de partições do MBR. Se você deseja ocultar outras partições lógicas no volume estendido, deve acessar os MBRs estendidos.
A codificação do programa foi dada a seguir:
/* Programa para ocultar a partição usando a entrada da tabela de partição dessa partição do MBR */
#include <bios.h>
#include <stdio.h>
int main(void)
{
struct diskinfo_t dinfo;
int result, tohide;
int i;
static char dbuf[512];/* Data Buffer to read-Write the
Sector information */
clrscr();
dinfo.drive = 0x80; /* drive number for First
Hard Disk */
dinfo.head = 0; /* disk head number */
dinfo.track = 0; /* track number */
dinfo.sector = 1; /* sector number */
dinfo.nsectors = 1; /* sector count */
dinfo.buffer = dbuf; /* data buffer */
/* Leia o primeiro setor do disco*/
result = _bios_disk(_DISK_READ, &dinfo);
if ((result & 0xff00) == 0)
{
printf("The Partition Codes of Four Partition Entries are,
0x%02x, 0x%02x, 0x%02x And 0x%02x.\n",
dbuf[450] & 0xff, dbuf[466] & 0xff,
dbuf[482] & 0xff, dbuf[498] & 0xff);
textcolor(15);
gotoxy(5,5);cprintf("Partition Entry in MBR is as
follows:");
gotoxy(10,7);cprintf("1. "); showtype(dbuf[450] & 0xff);
gotoxy(10,8);cprintf("2. "); showtype(dbuf[466] & 0xff);
gotoxy(10,9);cprintf("3. "); showtype(dbuf[482] & 0xff);
gotoxy(10,10);cprintf("4. "); showtype(dbuf[498] & 0xff);
/* obtenha a entrada do usuário para ocultar a partição */
gotoxy(1,15);
printf("Enter The partition no. you want to hide,
Or Press any other key to Exit... ");
tohide=getche();
switch(tohide)
{
case '1': /* Hide First Partition in partition Table */
dbuf[450] = dbuf[450] +16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
case '2': /* Hide second Partition in partition Table */
dbuf[466] = dbuf[466]+16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
case '3': /* Hide third Partition in partition Table */
dbuf[482] = dbuf[482] +16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
case '4': /* Hide Fourth Partition in partition Table */
dbuf[498] = dbuf[498]+16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
default:
exit(0);
}
if ((result & 0xff00) == 0)
{
printf("\n\nThe New Partition Codes of Four Partition
Entries are, 0x%02x, 0x%02x, 0x%02x And 0x%02x.\n",
dbuf[450] & 0xff, dbuf[466] & 0xff,
dbuf[482] & 0xff, dbuf[498] & 0xff);
getch();
}
else
{
printf("Cannot Change the Byte, status = 0x%02x\n",
result);
getch();
}
}
return 0;
}
Comentários sobre a codificação:
O programa lê os bytes indicadores do sistema de arquivos de todas as quatro entradas de partição na tabela de partição do MBR. A função showtype( ) é usada para mostrar o nome do sistema de arquivos para o valor correspondente do byte indicador do sistema de arquivos.
O usuário seleciona a partição a ser ocultada no menu exibido na tela e, em seguida, 16 (0x10) é adicionado ao valor do byte indicador do sistema de arquivos dessa partição para ocultá-la.
A codificação da função showtype( ) é a seguinte:
/* Função para mostrar o nome do sistema de arquivos correspondente ao valor do byte indicador do sistema de arquivos */
showtype(i)
{
switch (i)
{
case 0x00 :cprintf("Empty"); break;
case 0x01 :cprintf("DOS 12-bit FAT"); break;
case 0x02 :cprintf("XENIX root"); break;
case 0x03 :cprintf("XENIX usr"); break;
case 0x04 :cprintf("DOS 16-bit <32M"); break;
case 0x05 :cprintf("Extended"); break;
case 0x06 :cprintf("DOS 16-bit >=32M"); break;
case 0x07 :cprintf("OS/2 HPFS"); break;
case 0x08 :cprintf("AIX"); break;
case 0x09 :cprintf("AIX bootable"); break;
case 0xa :cprintf("OS/2 Boot Manag"); break;
case 0xb :cprintf("Win95/98/ME FAT32"); break;
case 0xc :cprintf("Win95/98/ME FAT32 (LBA)"); break;
case 0xd :cprintf("Win95 FAT16"); break;
case 0xe :cprintf("Win95 FAT16 (LBA)"); break;
case 0xf :cprintf("Win95 Extended"); break;
case 0x11 :cprintf("Hidden FAT-12");break;
case 0x12 :cprintf("Compaq Diagnostics");break;
case 0x14 :cprintf("Hidden FAT-16 (<32)");break;
case 0x15 :cprintf("Hidden Extended");break;
case 0x16 :cprintf("Hidden FAT-16");break;
case 0x17 :cprintf("NTFS"); break;
case 0x40 :cprintf("Venix 80286"); break;
case 0x51 :cprintf("Novell?"); break;
case 0x52 :cprintf("Microport"); break;
case 0x63 :cprintf("GNU HURD"); break;
case 0x64 :
case 0x65 :cprintf("Novell Netware"); break;
case 0x75 :cprintf("PC/IX"); break;
case 0x80 :cprintf("Old MINIX"); break;
case 0x81 :cprintf("Linux/MINIX"); break;
case 0x82 :cprintf("Linux swap"); break;
case 0x83 :cprintf("Linux native"); break;
case 0x85 :cprintf("Linux Extended"); break;
case 0x93 :cprintf("Amoeba"); break;
case 0x94 :cprintf("Amoeba BBT"); break;
case 0xa5 :cprintf("BSD/386"); break;
case 0xa6 :cprintf("OpenBSD"); break;
case 0xa7 :cprintf("NEXTSTEP"); break;
case 0xb7 :cprintf("BSDI fs"); break;
case 0xb8 :cprintf("BSDI swap"); break;
case 0xc7 :cprintf("Syrinx"); break;
case 0xdb :cprintf("CP/M"); break;
case 0xe1 :cprintf("DOS access"); break;
case 0xe3 :cprintf("DOS R/O"); break;
case 0xf2 :cprintf("DOS secondary"); break;
case 0xff :cprintf("BBT"); break;
default :cprintf("UNKOWN");
}
return 0;
}
Programa de escrita para reexibir a partição
O programa para exibir a partição oculta funciona exatamente ao contrário do programa que oculta o programa. Neste programa subtraímos 16 (0x10) do valor do byte indicador do sistema de arquivos da partição oculta.
A codificação do programa da seguinte forma:
/* Programa para exibir a partição oculta pelo programa anterior */
#include <bios.h>
#include <stdio.h>
int main(void)
{
struct diskinfo_t dinfo;
int result, tohide;
int i;
static char dbuf[512];/* Data buffer */
clrscr();
dinfo.drive = 0x80; /* drive number for
First Hard Disk */
dinfo.head = 0; /* disk head number */
dinfo.track = 0; /* track number */
dinfo.sector = 1; /* sector number */
dinfo.nsectors = 1; /* sector count */
dinfo.buffer = dbuf; /* data buffer */
result = _bios_disk(_DISK_READ, &dinfo);
if ((result & 0xff00) == 0)
{
printf("The Partition Codes of Four Partition
Entries are, 0x%02x, 0x%02x, 0x%02x And 0x%02x.\n",
dbuf[450] & 0xff, dbuf[466] & 0xff,
dbuf[482] & 0xff, dbuf[498] & 0xff);
textcolor(15);
gotoxy(5,5);
cprintf("Partition Entry in MBR is as follows:");
gotoxy(10,7);cprintf("1. "); showtype(dbuf[450] & 0xff);
gotoxy(10,8);cprintf("2. "); showtype(dbuf[466] & 0xff);
gotoxy(10,9);cprintf("3. "); showtype(dbuf[482] & 0xff);
gotoxy(10,10);cprintf("4. "); showtype(dbuf[498] & 0xff);
/* Obtenha a entrada Use para reexibir a partição */
gotoxy(1,15);printf("Enter The partition no., Which to
unhide, Or Press any other key to
Exit... ");
tohide=getche();
switch(tohide)
{
/* Reexibir a primeira partição da tabela de partições */
case '1':
dbuf[450] = dbuf[450] -16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
/* Unhide second partition of partition table */
case '2':
dbuf[466] = dbuf[466]-16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
/* Unhide third partition of partition table */
case '3':
dbuf[482] = dbuf[482] -16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
/* Unhide fourth partition of partition table */
case '4':
dbuf[498] = dbuf[498]-16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
default:
exit(0);
}
if ((result & 0xff00) == 0)
{
printf("\n\nThe New Partition Codes of Four Partition
Entries are, 0x%02x, 0x%02x, 0x%02x And 0x%02x.\n",
dbuf[450] & 0xff, dbuf[466] & 0xff,
dbuf[482] & 0xff, dbuf[498] & 0xff);
getch();
}
else
{
printf("Cannot Change the Byte, status = 0x%02x\n",
result);
getch();
}
}
return 0;
}
Comentários sobre o programa
Tenha cuidado ao fornecer o número da partição para reexibir. Se o número de partição for inserido incorretamente por engano, as informações do sistema de arquivos dessa partição serão alteradas e a partição poderá ficar inacessível. No entanto, o programa discutido anteriormente para ocultar as partições pode ajudá-lo a curar o byte indicador do sistema de arquivos dessa partição.
Escrevendo programa para excluir partição
O programa para excluir a partição é usado para fins de solução de problemas. Por exemplo, suponha que você tenha as partições do sistema de arquivos FAT32 em seu disco. Agora você decidiu instalar o sistema operacional LINUX em seu disco simultaneamente.
Se houver, a instalação do sistema operacional é interrompida no meio, no estágio em que as modificações estavam sendo feitas na tabela de partição do MBR. Nesses casos, há muitas possibilidades de que a partição, na qual você instalaria o outro sistema operacional, fique inacessível.
Neste caso, o espaço em disco da partição perdida torna-se inútil por ser inacessível. No entanto, se excluirmos as informações de partição dessa partição da tabela de partições, podemos novamente tornar esse espaço utilizável usando o comando FDISK do DOS.
O programa para deletar a entrada de partição da tabela de partições do MBR foi dado a seguir:
/* Programa para excluir a segunda entrada de partição da tabela de partições do MBR */
# include <bios.h>
/* structure to read the partition entry from partition table */
struct partition
{
/* Active Partition Byte */
unsigned char bootable ;
/* Starting Head */
unsigned char start_side ;
/* combination of Starting sector and cylinder number */
unsigned int start_sec_cyl ;
/* File system Indicator Byte */
unsigned char parttype ;
/* Ending Head */
unsigned char end_side ;
/* combination of Starting sector and cylinder number */
unsigned int end_sec_cyl ;
/* Relative Sector Number */
unsigned long part_beg ;
/* Partition length in sectors */
unsigned long plen ;
} ;
/* Structure to read-write MBR */
struct part
{
/* IPL (Initial Program Loader) */
unsigned char master_boot[446] ;
/* Partition table */
struct partition pt[4] ;
/* Magic Number */
int lasttwo ;
} ;
struct part p ;
void main()
{
unsigned int t1,t2;
clrscr();
biosdisk ( 2, 0x80, 0, 0, 1, 1, &p ) ;
display(); /* display the information of
Partition table */
getch();
p.pt[1].bootable = 0;
p.pt[1].start_side = 0 ;
p.pt[1].start_sec_cyl = 0 ;
p.pt[1].parttype = 0;
p.pt[1].end_side = 0;
p.pt[1].end_sec_cyl = 0;
p.pt[1].part_beg = 0;
p.pt[1].plen = 0;
printf("\n\n\n After Deleting the Second Partition
Entry From MBR Partition Table,");
printf("\n The Partition Table will Be Changed as
Follows: ");
/* To Delete Second Partition Information from partition
table of MBR Remove the forward slashes from the
biosdisk( ) function. Do not use Carelessly, Partition
information of Second Partition of Partition Table will
be Erased Completely. */
////// biosdisk ( 3, 0x80, 0, 0, 1, 1, &p ) ;
display(); /* Display the information of partition
table after modification */
getch();
}
Comentários sobre o programa:
Remova o comentário da função biosdisk ( 3, 0x80, 0, 0, 1, 1, &p ) para excluir a segunda partição da tabela de partições do MBR.
Para excluir a partição, todos os parâmetros dela são definidos como 0 na entrada da tabela de partição no MBR. Lembre-se sempre de que, se você excluir a partição estendida, todas as partições lógicas dessa partição estendida também ficarão inacessíveis.
A função display( ) é usada para exibir a tabela de partição do MBR. A codificação da função é a seguinte:
/* Função para exibir a tabela de partição do MBR*/
display()
{
unsigned int s_sec, s_trk, e_sec, e_trk, i, t1, t2 ;
char type[20], boot[5] ;
printf("\n\nPart. Boot Starting location Ending Location
Relative Number of");
printf("\nType Side Cylinder Sector Side Cylinder
Sector Sectors Sectors\n");
for ( i = 0 ; i <= 3 ; i++ )
{
if ( p.pt[i].bootable == 0x80 )
strcpy ( boot, "Yes" ) ;
else
strcpy ( boot, "No" ) ;
switch ( p.pt[i].parttype )
{
case 0x00 :
strcpy ( type, "Unused" ) ; break ;
case 0x1 :
strcpy ( type, "FAT12" ) ; break ;
case 0x2 :
strcpy ( type, "Xenix" ) ; break ;
case 0x3 :
strcpy ( type, "Xenix:usr" ) ; break ;
case 0x4 :
strcpy ( type, "FAT16<32M" ) ; break ;
case 0x5 :
strcpy ( type, "DOS-Ext." ) ; break ;
case 0x6 :
strcpy ( type, "FAT16>32M" ) ; break ;
case 0x7 :
strcpy ( type, "NTFS" ) ; break ;
case 0x0b :
strcpy ( type, "FAT32" ) ; break ;
case 0x0c :
strcpy ( type, "FAT32-LBA" ) ; break ;
case 0x0d :
strcpy ( type, "VFAT16" ) ; break ;
case 0x0e :
strcpy ( type, "VFAT16-LBA" ) ; break ;
case 0x0f :
strcpy ( type, "FAT EXT" ) ; break ;
case 0x17 :
strcpy ( type, "HPFS" ) ; break ;
case 0x81 :
strcpy ( type, "Old LINUX" ) ; break ;
case 0x82 :
strcpy ( type, "LinuxSwap" ) ; break ;
case 0x83 :
strcpy ( type, "LinuxNative" ) ; break ;
case 0x85 :
strcpy ( type, "Linux Ext." ) ; break ;
default :
strcpy ( type, "Unknown" ) ; break ;
}
s_sec = ( p.pt[i].start_sec_cyl & 0x3f ) ;
t1 = ( p.pt[i].start_sec_cyl & 0xff00 ) >> 8 ;
t2 = ( p.pt[i].start_sec_cyl & 0x00c0 ) << 2 ;
s_trk = t1 | t2 ;
e_sec = ( p.pt[i].end_sec_cyl & 0x3f ) ;
t1 = ( p.pt[i].end_sec_cyl & 0xff00 ) >> 8 ;
t2 = ( p.pt[i].end_sec_cyl & 0x00c0 ) << 2 ;
e_trk = t1 | t2 ;
printf ( "\n%6s %3s", type, boot ) ;
printf ( "%4d %6d %8d", p.pt[i].start_side,
s_trk,s_sec ) ;
printf ( "%7d %6u %8u", p.pt[i].end_side, e_trk,
e_sec ) ;
printf ( " %10lu %10lu", p.pt[i].part_beg,
p.pt[i].plen ) ;
}
return 0;
}
Formatando o disquete “Track 0 Bad”
Este programa é usado para formatar aqueles disquetes que possuem setores defeituosos em sua trilha 0 e quando são formatados em DOS ou Windows, exibem mensagens de erro como “Track 0 BAD”. No entanto, você também pode usá-lo para formatar disquetes normais.
A codificação do programa foi fornecida no disco incluído com este livro com o nome “TTFORMAT.C”. A lógica de funcionamento do programa é a mesma do programa publicado na revista de informática PCQUEST, na edição de fevereiro de 2003.
Neste programa, tentamos tornar este tipo de disquetes reutilizáveis formatando-os. O programa parece que você pode lidar com o disquete mesmo com alguns setores defeituosos nele. No entanto, se o primeiro setor do disco estiver com defeito, o disquete não poderá ser formatado.
O programa regrava todas as informações do DBR, FAT e do diretório raiz. Se houver setores defeituosos na superfície do disco, eles serão marcados como defeituosos no FAT.
Na codificação do programa, a estrutura BPB é usada para escrever o BIOS Parameter Block do DBR. A estrutura boot_sector é usada para escrever o DBR do disco. A estrutura address_field é usada para interagir com o número de cilindros, cabeças e setores por trilha e com o tamanho do setor.
Diferentes funções usadas na codificação do programa e sua descrição são dadas na tabela a seguir.
O número de série do volume do disquete é calculado pelo DOS de acordo com a data e hora atuais do relógio do sistema.
A primeira parte do número de série é calculada pela soma do tempo (segundos e centésimos de segundo) e da data (mês e dia). A segunda parte do número de série é igual à soma da hora (horas e minutos) e data (ano).
Todos os cálculos são realizados em sistema hexadecimal. Por exemplo, vamos supor que você formatou o disquete no ambiente DOS às 11:16:28:65 em 23/10/2003. Agora vamos calcular o número de série do disco.
The time in (seconds and Hundredths of seconds) format is
= (28 and 65)
= (1CH and 41H)
Write it as 1C41
Similarly, date in (month and day) format is
= (10 and 23)
= (0AH and 17H)
Write it as 0A17
Similarly, time in (hours and minutes) format is,
= (11 and 16)
= (0BH and 10H)
Write it as 0B10
And the year will be
= 2003
= 07D3
Agora, vamos calcular o número de série do disquete, de acordo com a descrição dada anteriormente. A primeira parte do número de série será (1C41 + 0A17) = 2658 e a segunda parte do número de série será (0B10 + 07D3) = 12E3.
Escrevendo a ferramenta de edição de disco
A codificação do programa de edição de disco foi fornecida no disco que acompanha este livro, com o nome de arquivo “TTEDITOR.C”. Você pode usar este programa para analisar a superfície de discos rígidos ou disquetes. Mesmo durante a maior parte do estudo enquanto escrevia este livro, usei o TTEDITOR para analisar a superfície do disco ou realizar as modificações do disco.
Algumas das tarefas importantes que este programa de edição pode realizar são as seguintes:
- Leia informações por setor da superfície de discos rígidos e disquetes.
- Grave o backup de qualquer setor no arquivo.
- Restaure os dados do setor do arquivo.
- Modifique o byte único.
- Calculadora hexadecimal para decimal e binária.
O programa usa a função biosdisk( ) e _bios_disk( ) para acessar os discos. Se você deseja analisar o disco além dos 8,4 GB, Modifique o programa com o uso de Extensões de INT 13H. A descrição das funções utilizadas no programa foi dada na tabela a seguir:
Function |
Description |
bkground( ) |
creates the back ground and frame of first screen |
clsline( ) |
Used to clear the complete row from the screen specified by row number. |
refresh( ) |
Function to recall all the display functions on the screen |
writetofile( ) |
Function to write the data of a sector to user defined file. |
writetosector( ) |
Function to restore the sector from specified file. |
msgdisp( ) |
Function to display messages on the screen. |
modify( ) |
Function to modify a single byte of any sector, specified by user. |
frame( ) |
Function to draw the frame structure of sector display |
dispmax( ) |
Display maximum CHS number of the disk (Valid Up to 8.4 GB Disk) |
display( ) |
Display the sector and information on the screen. |
hextodec( ) |
Function to Calculate hexadecimal number to corresponding decimal and binary numbers. |
Página modificada em: 18/01/2022