Η κωδικοποίηση της λειτουργίας Recover_the_file() έχει δοθεί έπειτα:
/* Λειτουργία για να σώσει τα στοιχεία των τομέων που αρχίζουν από τον αριθμό τομέα start_file στον αριθμό τομέα 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;
}
Η κωδικοποίηση των readabsolutesectors λειτουργίας έχει δοθεί έπειτα. Η λειτουργία χρησιμοποιεί τον αριθμό 42H επέκτασης και λειτουργίας INT 13H για να διαβάσει τους τομείς.
Για τη λεπτομερή περιγραφή της λειτουργίας, αναφέρετε το κεφάλαιο "καθιστώντας τα στηρίγματα" συζητημένα νωρίτερα σε αυτό το βιβλίο. Η κωδικοποίηση της λειτουργίας είναι η ακόλουθη:
//// Λειτουργία για να διαβάσει τον απόλυτο τομέα (σ) \\\\
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 */
/* για τον απομονωτή στοιχείων */
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 ; /* Φυσικός αριθμός Drive */
/* 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 ) ;
/* Επικαλεσθείτε τη διευκρινισμένη λειτουργία του INT 13H με
τιμές καταλόγων τμήματος */
int86x ( 0x13, &i, &o, &s ) ;
if ( o.x.cflag==1)
return 0 ; //failure
else
return 1 ; // success
}
Η ακόλουθη λειτουργία χρησιμοποιείται για να κρύψει ή για να παρουσιάσει το δρομέα στην οθόνη. Οι χρήσεις λειτουργίας διακόπτουν 10H, λειτουργία 01H για να θέσουν τον τύπο δρομέων. Η κωδικοποίηση είναι η ακόλουθη:
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 ) κρύβει το δρομέα και show_hide_cursor(6 ..7) ανακτούν το δρομέα που η πίσω SSL είναι αρχική γραμμή για το δρομέα και το ESL τελειώνει τη γραμμή για το δρομέα.
Η μικρή περιγραφή της λειτουργίας 01H του INT 10H είναι η ακόλουθη:
INT 10H (16 or 0x10)
Λειτουργία 01H (ή 0x01) > θέστε τον τύπο δρομέων
Call with: AH = 01H
CH bits 0-4 = starting line for cursor
CL bits 0-4 = ending line for cursor
Returns: Nothing.
Σχολιάζει:
Η λειτουργία χρησιμοποιείται για να θέσει τον τύπο δρομέων με την επιλογή της έναρξης και του τελειώματος των γραμμών για το να αναβοσβήσει δρομέα υλικού στον τρόπο επίδειξης κειμένων. Στους τρόπους γραφικής παράστασης, ο δρομέας υλικού δεν είναι διαθέσιμος.
|
page 1 | 2 | 3 | 4 | 5 | 6 |
|
|
|