De codage van de functie Recover_the_file(is) gegeven daarna:
/* Functie om de gegevens van de sectoren op te slaan die van sectoraantal start_file beginnen aan sectoraantal 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;
}
De codage van functiereadabsolutesectors is daarna gegeven. De functie gebruikt het aantal 42H van de Uitbreiding en van de functie van int. 13H om de sectoren te lezen.
Voor de uitvoerige beschrijving van de functie, verwijs het hoofdstuk "Makend Steunen" die vroeger in dit boek worden besproken. De codage van de functie is als volgt:
//// Functie om absolute sector (s) te lezen \\\\
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 ) ;
/* Haal de gespecificeerde Functie van int. 13H met aan
de waarden van het segmentregister */
int86x ( 0x13, &i, &o, &s ) ;
if ( o.x.cflag==1)
return 0 ; //failure
else
return 1 ; // success
}
De volgende functie wordt gebruikt om de curseur op het scherm te verbergen of te tonen. Het functiegebruik onderbreekt 10H, Functie 01H om het curseurtype te plaatsen. De codage is als volgt:
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;
}
show_hide_cursor( 32, 0 ) verbergt de curseur en show_hide_cursor(winnen 6..7) de curseur terug achterssl beginnende lijn voor curseur is en ESL beëindigt lijn voor curseur.
De kleine beschrijving van Functie 01H van int. 10H is als volgt:
INT 10H (16 or 0x10)
Functie 01H (or 0x01) --> Het vastgestelde Type van Curseur
Call with: AH = 01H
CH bits 0-4 = starting line for cursor
CL bits 0-4 = ending line for cursor
Returns: Nothing.
Becommentariëert:
De functie wordt gebruikt om het curseurtype te plaatsen door de aanvang van en het einde van lijnen voor de het knipperen hardwarecurseur op de wijze van de tekstvertoning te selecteren. Op de grafiekwijzen, is de hardwarecurseur niet beschikbaar.
|
page 1 | 2 | 3 | 4 | 5 | 6 |
|
|
|