
var
    ch    : char;

procedure screen(i:integer);

begin
  write(#27,'z',chr(i))
end;


procedure fett;

begin
  write(#27,'p')
end;


procedure normal;

begin
  write(#27,'q')
end;


procedure clearall;

var i : integer;

begin
  port[$378] := 0;
  for i := 0 to 6 do
  write(#27,'z',chr(i),#12,#27,'q',#27,'Y  ');
  port[$378] := 8;
end;



procedure schriften;
begin
 clrscr;
 writeln('          ***********************************************');
 writeln('          *                                             *');
 writeln('          *         *** Herculeskartendemo ***          *');
 writeln('          *                                             *');
 writeln('          ***********************************************');
 gotoxy(10,7);writeln(#27,'qSchrift 1: normal                   ESC q');
 gotoxy(10,9);writeln(#27,'pSchrift 2: fett                     ESC p');
 gotoxy(10,11);writeln(#27,'rSchrift 3: invers                   ESC r');
 gotoxy(10,13);writeln(#27,'sSchrift 4: invers fett              ESC s');
 gotoxy(10,15);
       writeln(#27,'q',#27,'tSchrift 5: normal unterstrichen     ESC q ESC t');
 gotoxy(10,17);
       writeln(#27,'p',#27,'tSchrift 6: fett   unterstrichen     ESC p ESC t');
 writeln(#27,'q');
gotoxy(10,19); writeln(#27,'vmit  deutschen Umlauten: {|}[\]~@   ESC v');
gotoxy(10,21); writeln(#27,'woder mit Klammern      : {|}[\]~@   ESC w');
writeln;writeln;write('Taste druecken !');
read(kbd,ch);
end;



const hex: array [0..15] of char
= ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');


procedure zeichensatz;

var i,j: integer;

begin
 write(#27,'w');
 clrscr;
 gotoxy(4,3);
 writeln('Zeichen 0 - 31 werden durch vorgestelltes CTRL-A bzw #1 ausgegeben');
 for i := 0 to 15 do begin
 gotoxy(13+3*I,5);write(hex[i]);
 gotoxy(9, 7+i);write(hex[i]);
  for j := 0  to 15 do begin
  gotoxy(3*j+13,i+7);
  if i < 2 then write(chr(1));
 write(chr(16*i+j));
 end;
end;
writeln;
writeln;
write('Taste druecken !');
read(kbd,ch);
end;


procedure textseiten;

var i,j :integer;
    ch : char;


begin
 clearall;
 delay(500);
 for i:=0 to 6 do begin
  screen(i);
    gotoxy(0,3*i);
  for j := 1 to 20 do write (' Schirm Nummer',i:2);
  delay(200);
 end;

for i := 0 to 6 do begin
 screen(i);
 delay(500);
 end;
screen (0);
end;


procedure attribute;

var i,j, pos: integer;
    att : byte;

begin
clrscr;
 gotoxy(3,3);
 write('alle Attribute ohne Blinken ');
for i := 0 to 15 do begin
 gotoxy(13+3*I,5);write(hex[i]);
 gotoxy(9, 7+i);write(hex[i]);
  for j := 0  to 15 do begin
  gotoxy(3*j+13,i+7);
  write('P');
  att := 16 * i + j;
  pos := 160*i+6*j+6*160+24+1;
  inline($F3);
  port[$37C] := $16;
  mem[pos]:= att;
  port[$37C] := 0;
  inline ($FB);
 end;
end;
writeln;
writeln;
write('Taste druecken !');
read(kbd,ch);

clrscr;
 gotoxy(3,3);
 write('alle Attribute mit Blinken ');
 port [$378] := 42;
for i := 0 to 15 do begin
 gotoxy(13+3*I,5);write(hex[i]);
 gotoxy(9, 7+i);write(hex[i]);
  for j := 0  to 15 do begin
  gotoxy(3*j+13,i+7);
  write('P');
  att := 16 * i + j;
  pos := 160*i+6*j+6*160+24+1;
  inline($F3);
  port[$37C] := $16;
  mem[pos]:= att;
  port[$37C] := 0;
  inline ($FB);
 end;
end;
writeln;
writeln;
write('Taste druecken !');
read(kbd,ch);
port[$378] := 10;
end;



begin
schriften;
zeichensatz;
attribute;
textseiten;
end.
