Hmm chyba doszedłem częściowo gdzie leży problem.
Zmodyfikowany program:
program wisielec;
VAR n,li_zbior,li_slow,num_slo,z,blad,punkty:INTEGER;
znak:CHAR;
zbior:TEXT;
linia,hasloOdg,odgadn:STRING[41];
literaOdg,literaZna,kodok:STRING[2];
r,m,d,dt :REAL;
klaw:text;
procedure ustawienia;
begin
Writeln('Procedura Ustawienia');
assign(klaw,'KBD:');
Writeln('Przypisano klawiature');
assign(zbior,'USTAWI.WIS');
Writeln('Przypisano USTAWI.WIS');
reset(zbior);
readln(zbior,linia);
readln(zbior,linia);
readln(zbior,linia);
kodok:=Copy(linia,1,1);
readln(zbior,linia);
readln(zbior,linia);
Val(linia,li_zbior,n);
readln(zbior,linia);
readln(zbior,linia);
Val(linia,li_slow,n);
close(zbior);
Writeln('Zamknieto USTAWI.WIS');
n:=1;
end;
procedure readkey2;
begin
{writeln('Poczatek procedury readkey2');}
read(klaw,znak);{wersja dla starszego Pascala}
{znak:=readkey;}{wersja dla nowszego Pascala(co najmniej od Turbo Pascala 5.0, wymaga uzywania na poczatku uses crt;}
{writeln('Koniec procedury readkey2');}
end;
procedure punkciak;
begin
writeln('procedura punkciak');
assign(zbior,'PUNKTY.WIS');
rewrite(zbior);
{GetDate(r,m,d,dt);
n:=d;
blad:=m;
Str(n,odgadn);
Str(blad,hasloOdg);
linia:=Concat(odgadn,'-',hasloOdg);
n:=r;
Str(n,odgadn);
linia:=Concat(linia,'-',odgadn);
writeln(zbior,linia);}
Str(punkty,linia);
writeln(zbior,linia);
close(zbior);
writeln('Koniec procedury punkciak');
end;
procedure bledy;
begin
{ClrSCR;}
Case blad of
0:
begin
writeln(' ');
writeln(' ');
writeln(' ');
end;
1:
begin
writeln(' ');
writeln('|');
writeln('|');
end;
2:
begin
writeln('___');
writeln('| ');
writeln('| ');
end;
3:
begin
writeln('___');
writeln('| |');
writeln('| ');
end;
4:
begin
writeln('___');
writeln('| |');
writeln('| O');
writeln;
writeln('Niestety to juù koniec...');
punkty:=punkty-1;
odgadn:=linia
end;
end;
Writeln;
Writeln(odgadn);
Writeln;
end;
procedure litera;
begin
writeln('Podaj literå');
{repeat until KeyPressed ;}
readkey2;
literaOdg:=znak;
znak:=' ';
num_slo:=0;
for n:=1 to z DO
begin
literaZna:=Copy(linia,n,1);
if literaZna=literaOdg THEN
begin
Delete(odgadn,n,1);
Insert(literaOdg,odgadn,n);
num_slo:=num_slo+1
end;
end;
if num_slo=0 then blad:=blad+1;
end;
procedure haslo;
begin
Writeln('Podaj hasìo:');
readln(hasloOdg);
If hasloOdg=linia then odgadn:=linia else blad:=blad+1;
end;
procedure kodow_ODG;
begin
z:=length(linia);
odgadn:='';
for n:=1 to z DO
begin
Insert(kodok,odgadn,n);
end;
end;
procedure menu_wyboru;
begin
repeat
bledy;
If blad=4 then Exit;
IF odgadn=linia THEN
begin
punkty:=punkty+1;
Exit;
end;
writeln('[L] - Podajå literå [H] - Podajå hasìo [K] - Koniec');
{repeat until KeyPressed;}
repeat
begin
readkey2;
end;
until (znak='K') or (znak='H') or (znak='L');
CASE znak OF
'L': litera;
'H' : haslo;
end;
until znak='K'
end;
begin
znak:=' ';
blad:=0;
Punkty:=0;
{ClrSCR;}
{Gotoxy(0,0);}
writeln('Kompilacja - pgru 2018 dla Elwro 800 Jr');
writeln(' ');
writeln('Wisielec');
writeln(' ');
writeln('Informacja:');
writeln('Np. [a] - Start oznacza, ùe trzeba nacisnáã');
writeln('a, aby wykonaá operacjå, opisaná po myólniku');
writeln(' ');
ustawienia;{xy}
writeln('Wczytano ustawienia');
assign(zbior,'PUNKTY.WIS');
reset(zbior);
readln(zbior,linia);
Writeln('Ostatni wynik:');
Writeln('Data: ',linia);
readln(zbior,linia);
Writeln('Punkty: ',linia);
Val(linia,punkty,n);
close(zbior);
Writeln('Naciónij P aby zaczáã grå.');
{repeat until KeyPressed;}
repeat
Randomize;
repeat num_slo:=random(li_slow+1) until num_slo>0;
Randomize;
repeat n:=random(li_zbior+1) until n>0;
Str(n,linia);
linia:=Concat(linia,'.WIS');
assign(zbior,linia);
reset(zbior);
for n:=1 to num_slo DO readln(zbior,linia);
close(zbior);
kodow_ODG;
menu_wyboru;
punkciak;
blad:=0;
Writeln('Punkty: ', punkty);
Writeln('[S] - Grasz jeszcze raz, [W] - Wyjócie z gry');
{repeat until KeyPressed;}
repeat readkey2 until (znak='W') or (znak='S');
until (znak='W');
end.
Teraz po ustawieniu odpowienio kompilacji(na .com) kompiluje się dość szybko ale nie podoba mu się linia read(klaw,znak);
Wygląda więc na to, że nie da się użyć jak w nowszych Pascalach(podobno od TurboPascala 5.0 co najmniej w górę) znak:=readkey;
tylko trzeba to uzyskać w archaiczny sposób.