#include <stdio.h>
#include <dos.h>

#define LPT1 0x00400008  /* BIOS printer address entries */
#define LPT2 0x0040000a
#define LPT3 0x0040000c
#define LPT4 0x0040000e


int main(int argc, char *argv[])
{
unsigned int port,data;
unsigned int far *bios_printer_addr;

if (argc>3) exit(1);

  switch(argc)
    {
      case 1:
        exit(1);

      case 2:
        port=*(bios_printer_addr=LPT1);
        if (port==NULL)
          {
            printf("LPT1 does not exist\n");
            exit(1);
          }
        sscanf(argv[1],"%x",&data);
        break;

      case 3:
	if (argv[1][0]=='/')

	  switch(argv[1][1])
	    {
	      case '1':
	        port=*(bios_printer_addr=LPT1);
                if (port==NULL)
                  {
                    printf("LPT1 does not exist\n");
                    exit(1);
                  }
                sscanf(argv[2],"%x",&data);
	        break;

	      case '2':
	        port=*(bios_printer_addr=LPT2);
                if (port==NULL)
                  {
                    printf("LPT2 does not exist\n");
                    exit(1);
                  }
                sscanf(argv[2],"%x",&data);
	        break;

              case '3':
                port=*(bios_printer_addr=LPT3);
                if (port==NULL)
                  {
                    printf("LPT3 does not exist\n");
                    exit(1);
                  }
                sscanf(argv[2],"%x",&data);
                break;

              case '4':
                port=*(bios_printer_addr=LPT4);
                if (port==NULL)
                  {
                    printf("LPT4 does not exist\n");
                    exit(1);
                  }
                sscanf(argv[2],"%x",&data);
                break;

	      default:
                printf("Invalid printer port!\n");
	        exit(1);
	    }

	else exit(1);

    }

   outportb(port, (char)data);

   return 0;
}