//// Λειτουργία για να γράψει τον απόλυτο τομέα (σ)\\\\
int writeabsolutesectors ( int drive, unsigned long sectornumber, int numofsectors, void *buffer )
{
union REGS i, o ;
struct SREGS s ;
struct diskaddrpacket pp ;
pp.packetsize = 16 ; /* Μέγεθος πακέτων = 10H */
pp.reserved = 0 ; /* Διατηρημένος = 0*/
pp.blockcount = numofsectors ;/* Αριθμός τομέων που γράφονται */
/* για τον απομονωτή στοιχείων */
pp.bufferaddress = (char far*) MK_FP ( FP_SEG((void far*)buffer), FP_OFF((void far*)buffer));
pp.blocknumber[0] = sectornumber ; /* Αριθμός τομέα που γράφεται*/
pp.blocknumber[1] = 0 ; /* Αριθμός φραγμών = 0 */
i.h.ah = 0x43 ; /* Αριθμός λειτουργίας*/
i.h.al = 0x00 ; /* Γράψτε τις σημαίες */
i.h.dl = drive ; /*Φυσικός αριθμός Drive*/
i.x.si = FP_OFF ( (void far*)&pp ) ; /* ds:si για τις παραμέτρους απομονωτών*/
s.ds = FP_SEG ( (void far*)&pp ) ; /*ds:si για τις παραμέτρους απομονωτών*/
/* Επικαλεσθείτε τη διευκρινισμένη λειτουργία του INT 13H με τις τιμές καταλόγων τμήματος*/
int86x ( 0x13, &i, &o, &s ) ;
if ( o.x.cflag==1)
return 0 ; //αποτυχία
else
return 1 ; // επιτυχία
}
|