Listing 1 A generic interrupt service routine for a standard MS-DOS program

   struct port_data {
      int uart_address;
      int head_pointer;
      int tail_pointer;
      char buffer[ 1024 ];
   };

   void far interrupt isr()
   {
      unsigned char c;
      int space_used;

      c = ( unsigned char ) inp( port.uart_address );
      space_used = port.head_pointer - port.tail_pointer;
      if ( space_used < 0 )
         space_used += 1024;
      if ( space_used < 1023 ) {
         port.buffer[ port.head_pointer++ ] = c;
         port.head_pointer &= 1023;
      }
      outp( 0x20, 0x20 );
   }
/* End of File */