Pascal / Fpc ascii write

Kylix, Lazarus, Freepascal ile ilgili konuları buraya yazabilirsiniz.
Cevapla
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Pascal / Fpc ascii write

Mesaj gönderen greenegitim »

Merhaba,
Lisede ki bilgisayar öğretmenimizin turbo pascal 7 ile yazmış olduğu snake oyunu vardı eski dosyaları karıştırırken buldum turbo pascal 7 16 bit olduğu ve windows 10 da çalışmadığı için freepascal ile compile etim hata vermedi ama çalıştırdığımda karakterler bozuk görünüyordu örnek çerçeve procedurunde ascii karakterleri yanlış geliyordu devpascal kurdum onunla compile etim çalıştırdım karakterler v.s her şey düzgün yılan çok yavaş hareket ediyordu delay değerlerini düşürdüğümde hızlandı normale döndü.

Aşağıdaki kodu windows xp üzerinde turbo pascal 7 ile çalıştırdığımda düzgün, windows 10 devpascal düzgün , windows 10 free pascalda bozuk

Kod: Tümünü seç

write(#187);

olan kısımları

Kod: Tümünü seç

write(chr(187));

olarak ta değiştirdim bir şey değişmedi.

Kod: Tümünü seç

uses crt;
var
i:integer;
s:string;
x1,
x2,
y1,
y2,
renk:integer;
procedure cerceve(x1,x2,y1,y2,renk:integer );(* procedure lerin  bulundugu  yerin  basi *)
var
k,i:integer;
begin
     For i:=y1+1 to y2-1 do begin (*dikey ‡izgilerin  baŸlangc*)
         gotoxy(x1,i);textBackground(renk);textcolor(white);write(#186);
         gotoxy(x2,i);textBackground(renk);textcolor(white);write(#186);
     end;                         (*dikey ‡izgilerin  sonu*)
     for i:=x1 to x2 do  begin (*yatay ‡iz§ilerin  baŸlangc*)
         if i=x1 then begin
            gotoxy(i,y1);textBackground(renk);textcolor(white);write(#201);
            gotoxy(i,y2);textBackground(renk);textcolor(white);write(#200);
             end else begin
             if i=x2 then begin
                gotoxy(i,y1);textBackground(renk);textcolor(white);write(#187);
                gotoxy(i,y2);textBackground(renk);textcolor(white);write(#188);
                end else begin
                gotoxy(i,y1);textBackground(renk);textcolor(white);write(#205);
                gotoxy(i,y2);textBackground(renk);textcolor(white);write(#205);
             end;
         end;
     end; (*yatay ciz§ilerin sonu*)
for i:=y1+1 to y2-1 do  begin(*cercevenin  i‡ini boyar*)
      for k:=x1+1 to x2-1 do  begin
         gotoxy(k,i);textBackground(renk);textcolor(renk);write(#32);
          end;
      end;
end;(* procedure lerin  bulundugu  yerin  sonu*)

begin
clrscr;
x1:=25;x2:=55;y1:=8;y2:=17;renk:=13;
cerceve(x1,x2,y1,y2,renk);
readln;

end.
Mücadele güzelleştirir!
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2355
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Pascal / Fpc ascii write

Mesaj gönderen freeman35 »

Muhtemelen unicode yüzünden. #xxx bunları bir değişkene atıp dene, fpc içinde değişkeni ansichar yapıp dene. çoktan fpc yi sildiğim için deneyemiyorum.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: Pascal / Fpc ascii write

Mesaj gönderen greenegitim »

şunu farketim
klavyeden Alt + 186 tuşuna basınca ║ işareti geliyor ama Alt + 0186 tuşuna basınca º geliyor bende ki durumda benim istediğim ║ gelmesi.
ilginç olanı

Kod: Tümünü seç

var
i: integer;
s: string;
begin
for i := 0 to 255 do
   begin
   s:='a';
   case (i) of
   32..47,
   58..64,
   91..96,
   123..255 : s:='Ozel : ';
   48..57  : s:='Sayi  : ';
   65..90,97..122: s:='Harf : ';
   end;
 
    if s<>'' then
    writeln(s,' ',i,' ',chr(i));
   end;
 
end.
bu kodu çalıştırdığımda i değişkeni 186 olduğunda ekrana ║ yazıyor ama aynı mantıkta yeni dosyada

Kod: Tümünü seç

uses crt;
var
i: Integer;
begin
i:= 186;
writeln(Chr(i));
readln;
end.
kodlarını çalıştırdığımda º sonucunu veriyor. farkı nedir anlamadım.
dediğiniz gibi değişkende tanımladım ansicharda yaptım değişmedi.
Mücadele güzelleştirir!
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2355
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Pascal / Fpc ascii write

Mesaj gönderen freeman35 »

writeln(s,' ',i,' ',chr(i));
writeln den kaynaklı olabilir, yani writeln in çalışmasını incele, tek parametre ve birden fazla parametreli olan farklılık gösteriyor olabilir.
Alt + 186 ile Alt + 0186 arasındaki fark unicode farkı, birisi ansii 0-255 arası diğeri utf8 mi utf16 mı sayıları hatırlamıyorum.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: Pascal / Fpc ascii write

Mesaj gönderen greenegitim »

http://www.fileformat.info/info/unicode ... /index.htm
bu sayfadaki utf16 hex değeri ile yazdırdığımda write(#$2551); gibi istediğim değeri elde edebiliyorum ama yakışıksız bir görüntü oldu
soltaraf turbo pascal ve devpascal da ki freepascal daki sonuç sağ taraf
writeln a birden fazla parametre de verdim ama ascii tablosu dökme kodumda ki sonucu vermedi

Kod: Tümünü seç

uses crt;
var
i: Integer;
s: String;
begin
s:='Selam ';
i:= 186;
writeln(s,' ',i,' ',chr(i));
readln;
end.
Resim
Mücadele güzelleştirir!
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: Pascal / Fpc ascii write

Mesaj gönderen greenegitim »

işi karıştıranın crt kütüphanesi olduğunu öğrendim.
uses a crt eklemediğimde
186 = ║
geliyor
uses crt;
eklediğimde º geliyor.
Mücadele güzelleştirir!
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2355
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Pascal / Fpc ascii write

Mesaj gönderen freeman35 »

crt unitindeki tanımlamayı bulabildin mi? yani neden olan ne imiş?
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: Pascal / Fpc ascii write

Mesaj gönderen greenegitim »

crt unitini açtım baktım unicode v.s bir şey bulamadım
https://github.com/newpascal/freepascal ... win/crt.pp
uses
windows;
ekli crt unitinde onada bakmam gerekiyor.
Mücadele güzelleştirir!
Cevapla