Contributor: SWAG SUPPORT TEAM        

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.