#include <stdio.h>
#include <dos.h>
int puerto(int direcc);
int seleccion;
int main()
{
unsigned int __far *puntero_a_direccion;
int i, direccion[3]={0,0,0}, disponible[3]={0,0,0};
puntero_a_direccion = (unsigned int __far *)0x00000408;
printf("Seleccione el puerto:\n");
/* ¿Cuantos puertos existen? */
for (i=0; i<3; i++)
{
if (*puntero_a_direccion == 0)
printf("Puerto LPT%d...............no disponible\n", i+1);
else
{
disponible[i] = 1;
direccion[i] = *puntero_a_direccion;
printf("Puerto LPT%d...............%d\n", i+1, i+1);
}
puntero_a_direccion++;
}
printf("Salir del programa........0\n");
scanf("%d", &seleccion);
do
{
switch(seleccion)
{
case 0:/* Salir del programa */
printf("Adios!!!\n");
return 0;
break;
case 1:/* Puerto LPT1 */
if(disponible[0]==1)
puerto(direccion[0]);
else
{
printf("ERROR: PUERTO NO DISPONIBLE\n");
return 0;
}
break;
case 2:/* Puerto LPT2 */
if(disponible[1]==1)
puerto(direccion[1]);
else
{
printf("ERROR: PUERTO NO DISPONIBLE\n");
return 0;
}
break;
case 3:/* Puerto LPT3 */
if(disponible[2]==1)
puerto(direccion[2]);
else
{
printf("ERROR: PUERTO NO DISPONIBLE\n");
return 0;
}
break;
default:
printf("ERROR: OPCION INCORRECTA!\n");
break;
}
if(seleccion!=0)
{
printf("Seleccione otra opcion\n");
scanf("%d", &seleccion);
}
}
while(seleccion!=0);
return 0;
}
int puerto(int direcc)
{
unsigned char valor; /* Solo valores entre 0 y 255 */
printf("Ahora puede escribir cualquier valor\n");
printf("entre 1 y 255, 0 para terminar el programa\n");
do
{
printf("Valor al puerto?\n");
scanf("%d", &valor);
outp(direcc, valor);
printf("Se ha escrito %d al puerto\n", valor);
}
while(valor!=0);
return seleccion=0;
}