//// Fonction pour écrire les secteurs absolus \\\\
int writeabsolutesectors ( int drive,
unsigned long sectornumber,
int numofsectors,
void *buffer )
{
union REGS i, o ;
struct SREGS s ;
struct diskaddrpacket pp ;
pp.packetsize = 16 ; /* Taille de paquet= 10H */
pp.reserved = 0 ; /* Réservé= 0 */
pp.blockcount = numofsectors ; /* Nombre de secteurs à écrire */
/* pour l'amortisseur de données */
pp.bufferaddress = (char far*) MK_FP ( FP_SEG((void
far*)buffer), FP_OFF((void far*)buffer));
pp.blocknumber[0] = sectornumber ;/* Nombre de secteur à écrire */
pp.blocknumber[1] = 0 ; /* Nombre de bloc = 0 */
i.h.ah = 0x43 ; /*Nombre de fonction */
i.h.al = 0x00 ; /* Écrire les drapeaux, voir les commentaires */
i.h.dl = drive ; /* Nombre physique d'entraînement */
/* ds:si pour des paramètres d'amortisseur */
i.x.si = FP_OFF ( (void far*)&pp ) ;
/* ds:si pour des paramètres d'amortisseur */
s.ds = FP_SEG ( (void far*)&pp ) ;
/* Appeler la fonction indiquée de 13H INTERNE avec des valeurs de registre de segment */
int86x ( 0x13, &i, &o, &s ) ;
if ( o.x.cflag==1)
return 0 ; /* échec */
else
return 1 ; /* succès */
}
|