/************************************************
	HDID : Affichage des paramŠtres
	d'un disque IDE
************************************************/

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int 	GetID (char *);

main()
{
struct ideparm {
	unsigned int	config,nbcyl,reserved1;
	unsigned int	nbheads,nbbtr,nbbse,nbse,reserved2[3];
	char		iserial[20];
	unsigned int    btype,bsize,necc;
	char		ifirmware[8],imodel[40];
	unsigned int	nbsecint,doublew,capa,reserved[255-49];
	} ide;
char			serial[21],firmware[9],model[41];
unsigned int		i,j;
printf("HDID : Affichage des paramŠtres d'un disque dur IDE \n\n");
if (GetID((char *)&ide) !=0)
{printf("Erreur d'accŠs au disque.\n");exit(1);}
swab(ide.iserial,serial,20);serial[20]=0;
swab(ide.ifirmware,firmware,8);firmware[8]=0;
swab(ide.imodel,model,40);model[40]=0;
printf("ModŠle du disque : %s\n",model);
printf("Caracteristiques Cyl x Tˆtes  x Secteurs : %d x %d x %d\n",ide.nbcyl,ide.nbheads,ide.nbse);
printf("Num‚ro de s‚rie : %s \n",serial);
printf("Nombre d'octets par secteurs et piste : %d - %d\n",ide.nbcyl,ide.nbbtr);
printf("R‚vision du firmware : %s\n",firmware);
printf("Constante de configuration : %04X  (",ide.config);
 for (i=0,j=ide.config;i<16;i++)
 {printf((j>32767)?"1":"0");j=j<<1;}
 printf(")\n");
 printf("Taille et type buffer : %d x 512 - type %d\n",ide.bsize,ide.btype);
 printf("Nombre d'octets ECC : %d\n",ide.necc);
 printf("Transfert multi-secteur : %s ",ide.nbsecint?"Oui":"Non"); if (ide.nbsecint) printf("(%dsecteurs par interruption)",ide.nbsecint);
 printf("\n");
 printf("Transfert double mot : %s \n",ide.doublew?"Oui":"Non");
 printf("Support du DMA :%s\n",(ide.capa&&256)?"Oui":"Non");
 cprintf("Press any key to continue...\n");
 while(!kbhit());
 }

