Program bbtest; {$i+ }

{ Program to illustrate the external routines BSET, RESET, and
  TEST which set, reset and test the value of an individual bit
  within a given byte, respectively.  The .SRC file for the 
  external routines is the file BITBANG.SRC}




type
   byte = 0..255;

var i,j,k: integer;
    x,a,b,c: byte;

procedure  bset( var x: byte; y: byte ); external;
procedure reset( var x: byte; y: byte ); external;
function   test(     x: byte; y: byte ): boolean; external;


procedure show_bits;

{notice that the procedure test returns a boolean value, true if the 
 bit is set (1) and false if not (0).  }

begin
writeln;
writeln('the binary represenation of the byte is: ');	
	for x:= 7 downto 0 do write(test(a,x):6); 
writeln;
writeln;
end;


begin
writeln( 'Bit banger test program' );
   repeat


	write( 'input decimal value for byte  ---> ' );
	readln( a );
	writeln;

	show_bits;

      write( 'Input number of Bit to set in byte ---> ' );
      readln( b );

      bset( a, b );
      writeln( 'new value of byte is: ', a);

	show_bits;

	writeln;
	writeln('Will now reset that same bit. ');
        reset( a, b );

       writeln('The value of the byte is now: ',a);
       writeln;

	show_bits;
      
	write('Input number of bit to test to see if it is set ---> ');
	readln(b);

      writeln( ' bit is: ', test( a, b ));
   until false;
end.


