Witam - mam problem :
Czy da się w TP zrobić by readln(string) odczytała więcej niż można wpisać na ekranie :/. Bo mam do wpisania nieraz dużo, ale niestety w pewnym momencie nie da się już pisać (jakieś ograniczenia ?)
Help
readln() jest chyba ograniczone do 256 .. - bezpośrednio nie wiem jak to zrobić lub nie pamiętam - z TP dawno nie miałem do czynienia. Zawsze można dać w pętli read() powtarzać.. aż do wystąpienia określonego znaku. Być może da się to zrobić inaczej.
// do 127 - tyle wynosi bufor klawiatury w dosie - ŁF
Też myślałem o pętli pobierać po jednym znaku z klawiatury , aż do entera .
Jeżeli g:char i pobierał bym readkey to enter ma kod #10 czy #13 - zawsze się mylę :P
Czyli to było by poprawne:
repeat
kod
until
g=#13 (lub #10 zalezy ktory to enter :P)
Takie coś by przeszło w miare ??
Ale pytam się właśnie o ten drugi sposób żeby pobrać od razu cały string jeżeli takowy jest :]
function lread:string;
var
k:char;
s:string;
xy:word;
l,p:integer;
col:byte;
begin
asm
mov ah,03h
xor bh,bh
int 10h
mov [xy],dx
mov ah,0fh
int 10h
dec ah
sub ah,byte ptr [xy]
mov [col],ah
end;
s:='';
repeat
asm
xor ah,ah
int 16h
mov [k],al
end;
case k of
^h:begin
delete(s,length(s),1);
write(^h#32)
end;
#32..#255:s:=s+k;
end;
p:=1;
l:=length(s);
if l>col then
begin
inc(p,l-col);
l:=col;
end;
asm
mov ah,02h
xor bh,bh
mov dx,[xy]
int 10h
end;
write(copy(s,p,l));
until k in[^c,^m];
writeln;
if k=^c then s:='';
lread:=s;
end;
begin
write('wpisz sie : ');
writeln(lread);
end.
// ograniczenie jest takie jak dlugosc stringa (255 znakow)
A nie lepiej to po jednym znaku wczytywać i zapisywać do zmiennej PChar ,z tym wyjątkiem, że tu już trzeba się bawic obsługą pamięci(GetMem, New i te sprawy :) ) albo przez wskaźniki... o ile dobrze pamiętam :D