[Back to FAQ SWAG index] [Back to Main SWAG index] [Original]
Top Ten Turbo Pascal Technical Support Questions
1. How do you read and write a file inside a Turbo Pascal
program?
Answer: The following example demonstrates how to create,
write and read from a text file.
Program FileDemo;
Var FileVar : Text;
InString,OutString : String;
Begin
OutString := 'Write this to a text file';
Assign(FileVar,'TEST.TXT');
Rewrite(FileVar); {Creates a file for writing}
Writeln(FileVar,OutString);
Close(FileVar);
Assign(FileVar,'TEST.TXT');
Reset(FileVar); {Opens an existing file for reading}
ReadLn(FileVar,InString);
Close(FileVar);
End.
2. Where is the GRAPH.TPU file?
Answer: The GRAPH.TPU is archived in the BGI.ARC file. Use
the UNPACK.COM program to dearchive GRAPH.TPU from the
BGI.ARC file. For example:
UNPACK BGI
3. How do you send a program's output to the printer?
Answer: Use the LST file variable declared in the PRINTER
unit. For example:
Program SendToPrinter;
Uses Printer;
Begin
Writeln(LST,'This will go to the printer.');
End.
4. Why am I getting a "Unit file format error" when I compile
my program with the new Turbo Pascal compiler?
Answer: You are using a unit that has been compiled with a
different Turbo Pascal version. From the main program, use
the BUILD option to recompile all dependent units.
5. How do you dump graphics to a printer?
Answer: Please see the enclosed Technical Information
Handouts, #433 and #432, for examples of printing graphics
on Epson compatible and HP Laser Jet printers.
6. How do you communicate with the serial port?
Answer: Modify the AuxInOut unit described in the Reference
Guide as follows: To read incoming data, use the Reset
procedure before reading. Also, you should read from a
buffer rather than directly from the serial port.
Furthermore, the AuxInOut is not an ideal example to use as
input buffering is not supported; you should use the
enclosed Technical Information Handout #407 routines for
this purpose.
7. Why doesn't the Exec procedure execute my subprograms?
Answer: Make certain that you use the {$M} directive to set
the maximum heap size to the lowest possible value. If this
is done, check the value of the variable DosError to
diagnose other problems. What is DosError Returning after
the call:
8) Not enough Memory: User needs to lower MAX Heap
{$M Stack, Min, Max}
2) File not found: User needs to specify the fill Path and
extension of the command. If you're
trying to execute a DOS internal
command, you need to use COMMAND.COM
(see DIR example in manual).
8. What do I do about running out of memory during compilation?
Answer: There are a number of solutions to this problem:
1. If Compiler/Destination is set to Memory, set it to Disk
in the integrated environment.
2. If Options/Compile/Link buffer in the integrated
environment is set to Memory, set it to Disk.
Alternatively, if you're using 4.0, place a {$L-}
directive at the beginning of your program. Use the /L
option to link to disk in the command-line compiler.
3. If you are using any memory-resident utilities, such as
Sidekick and Superkey, remove them from memory.
4. If you are using TURBO.EXE, try using TPC.EXE instead -
it takes up less memory.
5. Turn off any compiler directives which are not
necessarily needed. By simply turning off range
checking {$R-} and software emulation {$E-}, your code
size will be reduced dramatically.
6. Move all units, except PRINTER.TPU, out of the TURBO.TPL
file and into the installed units directory.
If none of these suggestions help, your program or unit may
simply be too large to compile in the amount of memory
available, and you may have to break in into two or more
smaller units. Alternatively, if you're using 5.0+, you
should consider using overlays.
9. How can my program be over-writing memory?
Answer: The most common causes for memory overwrites are:
1. Indexes out of range (Turn range checking on {$R+})
2. Uninitialized variables (Write an initialization proc)
3. Pointers out of bounds (Verify that pointers are not
pointing outside of the heap space)
4. Improper use of FillChar or Move (Be sure to use the
SizeOf function)
5. Illogical operations on strings
10. How come I don't get the results that I expect when I
compare and print real numbers?
Answer: The problem with real numbers in Turbo Pascal is a
problem with how a real number is stored in binary form. A
binary number has no decimal point and thus a real number
cannot directly translate into a binary number easily.
Calculations must be performed to break a real number down
into it's binary representation. As with any calculation
that involves division or multiplication, small rounding
errors will occur. The problem you are experiencin g is a
rounding error that occurs during translation from a real
number into it's binary representation and back. I suggest
that you round the results of your calculation to the number
of decimal points that you require to alleviate the problem.
[Back to FAQ SWAG index] [Back to Main SWAG index] [Original]