Metropoli BBS
VIEWER: progp051.pas MODE: TEXT (ASCII)
{**********************************************************************}
{ Display 512 different characters at a time				}
{**********************************************************************}

procedure print_512_chars;
const
MONO = 5;
VMONO = 7;
ON = 1;
OFF = 0;
var
buffer : array[0..255,0..31] of char;	{ Buffer for char gen		}
i,j : integer;
c : char;
begin
	{--- Set default text mode					}
	i := get_display_type;
	if i = MONO then set_mode(7)
	else if i = VMONO then set_mode (7)
	else	set_mode(3);

	{--- Download a second 256 character set			}
	read_char_gen(seg(buffer),ofs(buffer));	{Read old character generator}
	for i := 0 to 254 do begin		{Create a new char set	}
		for j := 0 to 3 do begin	{from the old by slewing}
			buffer[i,j] := char(integer(buffer[i,j]) shr 1);
			buffer[i,j+10] := char(integer(buffer[i,j+10]) shl 1);
		end;
	end;					{ Download new char gen	}
	write_char_gen(seg(buffer),ofs(buffer), 512, 256);
	enable_second_set;		{ Enable 512 char set		}

	for i := 0 to 255 do begin	{ Display chars 0 - 255	}
		write_attribute(i div 64, i mod 64, 0, 7);
		write_char(char(i), i div 64, i mod 64);
		end;
	for i := 0 to 255 do begin	{ Display chars 256-512	}
		write_attribute(4 + i div 64, i mod 64, 0,15);
		write_char(char(i), 4 + i div 64, i mod 64);
		end;

	{--- Wait for <Enter> and then disable the second character set}
	c := readkey;
	disable_second_set;
end;
[ RETURN TO DIRECTORY ]