Le codage de la fonction Recover_the_file () a été donné après :
/* Fonctionner pour sauver les données des secteurs à partir de nombre de secteur start_file au nombre de secteur end_file */
Recover_the_file()
{
FILE *fp;
if((fp=fopen(filename, "wb"))==NULL)
{
gotoxy(10,23);printf("Error Opening File %s",
filename);
getch();
exit(1);
}
for(i=start_file;i<=end_file;i++)
{
gotoxy(19,16);cprintf("Scanning Sector Number =
%ld", i);
readabsolutesectors ( 0x81, i, 1, buffer );
fwrite(buffer,512,1, fp);
}
fclose(fp);
gotoxy(15,18);cprintf("[ %d ] Files Recovered...",num);
gotoxy(5,19);cprintf(" ");
return;
}
Le codage des readabsolutesectors de fonction a été donné après. La fonction emploie le nombre INTERNE 42H de la prolongation 13H et de la fonction pour lire les secteurs.
Pour la description détaillée de la fonction, se référer le chapitre « faisant des protections » discutées plus tôt en ce livre. Le codage de la fonction est comme suit :
//// Fonction pour lire les secteurs absolus \\\\
int readabsolutesectors ( int drive,
unsigned long sectornumber,
int numofsectors,
void *buffer )
{
union REGS i, o ;
struct SREGS s ;
struct diskaddrpacket pp ;
pp.packetsize = 16 ; /* packet size = 10H */
pp.reserved = 0 ; /* Reserved = 0 */
pp.blockcount = numofsectors ; /* Number of sectors
to read */
/* for Data buffer */
pp.bufferaddress = (char far*) MK_FP ( FP_SEG((void far*)buffer), FP_OFF((void far*)buffer));
pp.blocknumber[0] = sectornumber ; /* Sector number
to read */
pp.blocknumber[1] = 0 ; /* Block number */
i.h.ah = 0x42 ; /* Function Number*/
i.h.dl = drive ; /* Physical Drive Number */
/* ds:si for buffer Parameters */
i.x.si = FP_OFF ( (void far*)&pp ) ;
/* ds:si for buffer Parameters */
s.ds = FP_SEG ( (void far*)&pp ) ;
/* Invoke the specified Function of INT 13H with
segment register values */
int86x ( 0x13, &i, &o, &s ) ;
if ( o.x.cflag==1)
return 0 ; //failure
else
return 1 ; // success
}
La fonction suivante est employée pour cacher ou montrer le curseur sur l'écran. Les utilisations de fonction interrompent 10H, la fonction 01H pour placer le type de curseur. Le codage est comme suit :
show_hide_cursor( ssl, esl )
int ssl, esl ;
{
union REGS i, o ;
i.h.ah = 1 ;
i.h.ch = ssl ;
i.h.cl = esl ;
i.h.bh = 0 ;
int86 ( 16, &i, &o ) ;
return;
}
le show_hide_cursor (32, 0) cache le curseur et le show_hide_cursor (6, 7) recherche le curseur en arrière. le SSL est ligne de départ pour le curseur et l'esl est ligne de fin pour le curseur.
La petite description de la fonction 01H de 10H INTERNE est comme suit :
10H INTERNE (16 ou 0x10)
Fonction 01H (ou 0x01) --> placer le type de curseur
Call with: AH = 01H
CH bits 0-4 = starting line for cursor
CL bits 0-4 = ending line for cursor
Returns: Nothing.
Commentaires :
La fonction est employée pour placer le type de curseur en choisissant les lignes commençantes et terminales pour le curseur de matériel de clingnotement en mode d'affichage des textes. Dans les modes de graphiques, le curseur de matériel n'est pas disponible.
|
page 1 | 2 | 3 | 4 | 5 | 6 |
|
|
|