mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-05-08 17:14:37 +02:00
81 lines
2.8 KiB
ObjectPascal
81 lines
2.8 KiB
ObjectPascal
program testread;
|
|
{uses crt;}
|
|
var
|
|
cadena,cadena2 : string;
|
|
number : real;
|
|
begin
|
|
{clrscr;}
|
|
cadena2 := 'Previous string';
|
|
write ('Enter the string ');
|
|
readln (cadena);
|
|
writeln ('You entered ',cadena);
|
|
writeln ('Previous string was ',cadena2);
|
|
write ('Enter a number ');
|
|
readln (number);
|
|
writeln ('Number entered was ',number);
|
|
readln;
|
|
end.
|
|
{(I have retyped now because my computer is not connected to the net, but I
|
|
think that there are no errors).
|
|
Now you can do some tests:
|
|
1- Compile and run the program as is (that is, using crt). You will find that
|
|
a) the program does not erase the screen (that is normal because we have
|
|
commented clrscr), but the cursor goes to the first line, thus overwriting the
|
|
screen.
|
|
b) While the program is expecting the string to be entered, some of the keys
|
|
do not work correctly: Backspace advances some spaces (just like tab), tab key
|
|
does not work and the cursor keys write garbage. (however this is only in the
|
|
screen, because if you have erased a part of the string it will be actually
|
|
erased).
|
|
c) Once you have press return, the message 'You entered...' appears in the
|
|
same line as the text entered.
|
|
|
|
2- Uncomment the clrscr call, cokpile and execute. Point a of test 1 will be
|
|
solved (the screen is erased, so nothing is overwritten), but points b and c
|
|
persist.
|
|
|
|
3- Comment 'uses crt' and 'clrscr'. Now you will not be using crt. Now:
|
|
a) Point a of test 1 does not appear: the program begins to write in the
|
|
next line, it does not overwrite anything.
|
|
b) Now all the keys (tab, backspace..) work as expected.
|
|
c) Now the message 'You entered...' appears in the following line, so point
|
|
c of test 1 is also solved.
|
|
d) BUT it writes only 'You entered', WITHOUT writing the string cadena (!).
|
|
It writes also 'Previous string was previous string', so the problem is in
|
|
readln and not in writeln.
|
|
|
|
4- To see if the problem is only in the string vars, uncomment the definition
|
|
of number, and also the three lines at the end that deal with number. Now ld
|
|
gives the following error message:
|
|
|
|
testread.pp:0 (testread.o): undefined symbol READ_TEXT_INTEGER referenced from
|
|
text segment.
|
|
|
|
This error happens with 'uses crt' and also without it.
|
|
|
|
5- Define number as word. Regardless of crt we get the following error from ld:
|
|
|
|
testread.pp:0 (testread.o): undefined symbol READ_TEXT_WORD referenced from
|
|
text segment.
|
|
|
|
6- Uncomment 'uses crt' if it was commented, and change the definition of
|
|
number as real. The program will compile, and it will print the number,
|
|
although in the same line as the input.
|
|
|
|
7- Finally, comment 'uses crt' again. This time it will also compile and link,
|
|
but it gives a runtime error!
|
|
|
|
Laufzeitfehler 106 bei 66422
|
|
|
|
This error is shown before printing the number.
|
|
|
|
I expect that these bug report will be useful to debug the RTL. Tonight I will
|
|
try to work in the blockwrite problem.
|
|
|
|
Best regards
|
|
|
|
Ramon
|
|
|
|
--
|
|
}
|