#include <fpclib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

char * DecToBin( int );
void TestBiosPrtChar( void );
void TestBiosPrtInit( void );
void TestBiosPrtStat( void );
void TestDosPrtChar( void );
int GetMenuSelection( void );

char St[9];

char *DecToBin( Num )
int  Num;
{
   int   i;

   for ( i = 7; i >= 0; i-- ) {
      St[i] = ( Num % 2 ) + 48;
      Num >>= 2;
   }
   St[8] = '\0';
   return( St );
}


void TestBiosPrtChar( void )
{
   int   i,j,k;

   for ( j = 1; j < 11; j++ ) {
      for ( i = 1; i < 27; i++ ) {
         k = BiosPrtChar( i+64, 0 );
         if ( k & 0x10 )
            printf( "printer selected... Status = %s \n", DecToBin( k ) );
         else
            printf( "printer not selected... Status = %s \n", DecToBin( k ) );
      }

      k = BiosPrtChar( 10, 0 );
      if ( k & 0x10 )
         printf( "printer selected...  Status = %s \n", DecToBin( k ) );
      else
         printf( "printer not selected... Status = %s \n", DecToBin( k ) );

      k = BiosPrtChar( 13, 0 );
      if ( k & 0x10 )
         printf( "printer selected...  Status = %s \n", DecToBin( k ) );
      else
         printf( "printer not selected... Status = %s \n", DecToBin( k ) );
   }
}

void TestBiosPrtInit( void )
{
   int k;

   k = BiosPrtInit( 0 );
   printf( "print status returned = %u \n", k );
}


void TestBiosPrtStat( void )
{
   int  i;

   for ( i = 0; i < 500; i++ )
      printf( "printer status = %s \n", DecToBin( BiosPrtStat( 0 ) ) );
}


void TestDosPrtChar( void )
{
   int   i,j;

   for ( j = 1; j < 11; j++ ) {
      for ( i = 1; i < 27; i++ )
         DosPrtChar( i+64 );
      DosPrtChar( 10 );
      DosPrtChar( 13 );
   }
}

int GetMenuSelection( void )
{
   int  Item = 0;

   ClrWin( 1, 1, 80, 25, 7 );
   WindowFP( 1, 1, 80, 25 );
   GotoxyAbs( 1, 1 );

   printf( "\n 1. BiosPrtChar     " );
   printf( "\n 2. BiosPrtInit     " );
   printf( "\n 3. BiosPrtStat     " );
   printf( "\n 4. DosPrtChar      " );
   printf( "\n ");
   printf( "\n 5. Quit" );
   printf( "\n " );
   printf( "\nEnter selection to test ==> " );

   while ( Item < 1 || Item > 5 )
      Item = ReadKey() - 48;

   return( Item );
}

void main( void )
{
   int done = 0;

   VioInit();
   ClrWin( 1, 1, 80, 25, 7 );
   GotoxyAbs( 1, 1 );

   while ( !done ) {
      switch ( GetMenuSelection() ) {
          case 1 : TestBiosPrtChar();  break;
          case 2 : TestBiosPrtInit();  break;
          case 3 : TestBiosPrtStat();  break;
          case 4 : TestDosPrtChar();   break;
          case 5 : done++;             break;
      }
   }
}
