FAQ - Frequently asked questions

Here you can find answers to common questions:

 FAQ for Pascal Analyzer

1. What is Pascal Analyzer and how can it make my developer life easier?
2. I'm a registered user, where can I find updated versions of the full program?
3. Which compiler versions are supported by Pascal Analyzer?
4. Is it necessary to change my source code in order to let Pascal Analyzer do its work?
5. How can I jump from an error location in a Pascal Analyzer report to my source code?
6. How can I hide source code from Pascal Analyzer?
7. How can I exclude results from code in certain folders?
8. Where can I find the cyclomatic complexity metrics for my code?
9. How can I detect assigned value parameters?
10. Can PAL tell me if I have declared an identifier with the same name as a built-in identifier?
11. When adding a virtual abstract method to a base class, can PAL help me find all places where I need to override this method?
12. Results are often presented as lists of identifiers, sorted by name. Can I change this so that the lists are displayed sorted by module name, and secondly by identifier name?
13. Is it possible to generate a list of global variables?
14. For a given function or procedure, is it possible to see a list of all called other functions or procedures?
15. How can I create a template for new projects, so I do not have to enter the same settings again and again?
16. Can I integrate PAL with our build process?

 FAQ for Pascal Browser

1. What is Pascal Browser and how can it make my developer life easier?
2. I'm a registered user, where can I find updated versions of the full program?
3. Which compiler versions are supported by Pascal Browser?
4. Is it necessary to change my source code in order to let Pascal Browser do its work?
5. How can I make my Chinese comments show up correctly in the HTML pages?

Pascal Analyzer

1. What is Pascal Analyzer and how can it make my developer life easier?

Pascal Analyzer is a powerful and efficient source code analysis tool. It will help you find all sorts of bugs, errors, and anomalies.

Pascal Analyzer supports your development process by:

  • finding errors in the source code, and help you avoid creating new ones
  • assist you in understanding your source code, both if you have written it yourself or inherited it from another developer
  • help you structure your code so it will become easier to maintain and enhance

2. I'm a registered user, where can I find updated versions of the full program?

Read the mail you got when you ordered Pascal Analyzer. The same instructions apply for updates. If you cannot find this mail, let us know, and we will help you as soon as we can.

3. Which compiler versions are supported by Pascal Analyzer?

Pascal Analyzer directly supports code written for the following compilers:

  • Borland Pascal 7 (or earlier)
  • Delphi 1
  • Delphi 2
  • Delphi 3
  • Delphi 4
  • Delphi 5
  • Delphi 6
  • Delphi 7
  • Delphi 8 for .NET
  • Delphi 2005 for Win32
  • Delphi 2005 for .NET
  • Delphi 2006 for Win32 (also Turbo Delphi for Win32)
  • Delphi 2006 for .NET (also Turbo Delphi for .NET)
  • Delphi 2007 for Win32
  • Delphi 2007 for .NET
  • Delphi 2009 for Win32
  • Delphi 2010 for Win32
  • Delphi XE for Win32
  • Delphi XE2 for Win32
  • Delphi XE2 for Win64
  • Delphi XE2 for OSX
  • Delphi XE3 for Win32
  • Delphi XE3 for Win64
  • Delphi XE3 for OSX
  • Delphi XE4 for Win32
  • Delphi XE4 for Win64
  • Delphi XE4 for OSX
  • Delphi XE4 for iOS Device
  • Delphi XE4 for iOS Simulator
  • Delphi XE5 for Win32
  • Delphi XE5 for Win64
  • Delphi XE5 for OSX
  • Delphi XE5 for iOS Device
  • Delphi XE5 for iOS Simulator
  • Delphi XE5 for Android
  • Delphi XE6 for Win32
  • Delphi XE6 for Win64
  • Delphi XE6 for OSX
  • Delphi XE6 for iOS Device
  • Delphi XE6 for iOS Simulator
  • Delphi XE6 for Android
  • Delphi XE7 for Win32
  • Delphi XE7 for Win64
  • Delphi XE7 for OSX
  • Delphi XE7 for iOS Device
  • Delphi XE7 for iOS Simulator
  • Delphi XE7 for Android
  • Delphi XE8 for Win32
  • Delphi XE8 for Win64
  • Delphi XE8 for OSX
  • Delphi XE8 for iOS Device
  • Delphi XE8 for iOS Device 64-bits
  • Delphi XE8 for iOS Simulator
  • Delphi XE8 for Android
  • Delphi 10 for Win32
  • Delphi 10 for Win64
  • Delphi 10 for OSX
  • Delphi 10 for iOS Device
  • Delphi 10 for iOS Device 64-bits
  • Delphi 10 for iOS Simulator
  • Delphi 10 for Android
  • Delphi 10.1 for Win32
  • Delphi 10.1 for Win64
  • Delphi 10.1 for OSX
  • Delphi 10.1 for iOS Device
  • Delphi 10.1 for iOS Device 64-bits
  • Delphi 10.1 for iOS Simulator
  • Delphi 10.1 for Android
  • Delphi 10.2 for Win32
  • Delphi 10.2 for Win64
  • Delphi 10.2 for OSX
  • Delphi 10.2 for iOS Device
  • Delphi 10.2 for iOS Device 64-bits
  • Delphi 10.2 for iOS Simulator
  • Delphi 10.2 for Android
  • Delphi 10.2 for Linux 64-bits
  • Delphi 10.3 for Win32
  • Delphi 10.3 for Win64
  • Delphi 10.3 for OSX
  • Delphi 10.3 for iOS Device
  • Delphi 10.3 for iOS Device 64-bits
  • Delphi 10.3 for iOS Simulator
  • Delphi 10.3 for Android
  • Delphi 10.3 for Linux 64-bits
  • Delphi 10.4 for Win32
  • Delphi 10.4 for Win64
  • Delphi 10.4 for OSX 32-bits
  • Delphi 10.4 for OSX 64-bits
  • Delphi 10.4 for iOS Device 32-bits
  • Delphi 10.4 for iOS Device 64-bits
  • Delphi 10.4 for iOS Simulator
  • Delphi 10.4 for Android 32-bits
  • Delphi 10.4 for Android 64-bits
  • Delphi 10.4 for Linux 64-bits
  • Delphi 11 for Win32
  • Delphi 11 for Win64
  • Delphi 11 for OSX 32-bits
  • Delphi 11 for OSX 64-bits
  • Delphi 11 for iOS Device 32-bits
  • Delphi 11 for iOS Device 64-bits
  • Delphi 11 for iOS Simulator
  • Delphi 11 for Android 32-bits
  • Delphi 11 for Android 64-bits
  • Delphi 11 for Linux 64-bits
  • Delphi 11 for OSX ARM 64-bits
  • Delphi 12 for Win32
  • Delphi 12 for Win64
  • Delphi 12 for OSX 32-bits
  • Delphi 12 for OSX 64-bits
  • Delphi 12 for iOS Device 32-bits
  • Delphi 12 for iOS Device 64-bits
  • Delphi 12 for iOS Simulator
  • Delphi 12 for Android 32-bits
  • Delphi 12 for Android 64-bits
  • Delphi 12 for Linux 64-bits
  • Delphi 12 for OSX ARM 64-bits

By setting appropriate compiler directives and conditional defines, PAL should also handle code written for other Pascal dialects.

4. Is it necessary to change my source code in order to let Pascal Analyzer do its work?

No, not at all. Just make sure that you select a suitable compiler target. Also set any appropriate compiler directives and conditional defines, just as you would when compiling from within the IDE. Or use an include file with compiler directives and conditional defines.

Be aware, that if you check the option "Use Delphi project options if found", the conditional defines that may be set in the options will also be used, and merged with the conditional defines that you set in the project options.

5. How can I jump from an error location in a Pascal Analyzer report to my source code?

There are two ways:

  • Under "Options|Preferences", select the "Source code" tab page and select "The source file is opened and focused in a source code viewer". When doubleclicking on a line in a report, a source code pane is opened and the corresponding line will be focused. This option will not allow you to edit the source code, just view it.

  • Under "Options|Preferences", select the "Source code" tab page and select "The source file is opened and focused in the Delphi IDE". Also select which Delphi IDEs you want to interact with, and press the "Update registry" button. When doubleclicking on a line in a report, the corresponding source code file is opened in the Delphi IDE and the line is focused. This assumes that you have Delphi running. In this way you can make modifications to the source code.

6. How can I hide source code from Pascal Analyzer?

My project involves a lot of source code. I have no interest in finding errors in the VCL or in some third-party libraries. What is the best way to avoid parsing and analyzing this code?

Actually the preferred strategy is to let PAL find as much code as possible. It can then better resolve and understand identifier references. To achieve this check the "Use Delphi library path" and "Use Delphi browsing path" options in the "Project Options" dialog box. Folders that still are not found, can be added to the "Search folders" text box. To exclude identifiers from reports, see the next question-answer. Also normally let PAL parse and analyze DFM files, so check that option.

7. How can I exclude results from code in certain folders?

I do not want to present results for code in some folders. What can I do?

Use the "Exclude identifiers from these folders in reports" option in the "Project Options" dialog box. It is desirable to let Pascal Analyzer find and parse all code, so it can get a better understanding (see the previous question-answer). But in this way, you can exclude results from these folders.

8. Where can I find the cyclomatic complexity metrics for my code?

Cyclomatic complexity is a measure of software complexity first introduced by McCabe. It measures the number of linearly-independent paths through a program module. PAL does not directly display cyclomatic complexity metrics. However, the Complexity Report displays decision points (DP). Cyclomatic complexity is often defined as the number of DPs plus one, so there is a direct relation between these two metrics.

9. How can I detect assigned value parameters?

For example, code like this:

procedure MyProc(I : integer);
begin
  ...
  I := 555; // I is not passed as reference
  ...
end;
      

In the "Warnings Report", this is reported in the section "Value parameters that are set".

10. Can PAL tell me if I have declared an identifier with the same name as a built-in identifier?

Yes, the "Convention Report" reports this in the section "Identifiers that have unsuitable names". It lists identifiers that share the same name as keywords, directives, or identifiers from the System unit. Example: Absolute, Round, IntToStr

11. When adding a virtual abstract method to a base class, can PAL help me find all places where I need to override this method?

Yes, the "Warnings Report" reports this in the section "Classes without override of abstract methods". It is important to override these methods, otherwise you could get an exception at runtime.

12. Results are often presented as lists of identifiers, sorted by name. Can I change this so that the lists are displayed sorted by module name, and secondly by identifier name?

Sure, you find this in the Project Options dialog box, in the lower part of the "General" tab page.

13. Is it possible to generate a list of global variables?

The "Identifiers Report" has a section called "Global Variables", which provides exactly this.

14. For a given function or procedure, is it possible to see a list of all called other functions or procedures?

Use the "Call Index Report" for this.

15. How can I create a template for new projects, so I do not have to enter the same settings again and again?

Set options for a new project, that you want to keep as a template. Then select "Options|Set as Template" from the menu and the options will be used for the new projects that you create.

16. Can I intregrate PAL with our build process?

Yes, you can. Take a look at the command-line program PALCMD.EXE. It has a whole set of options that will let you run a PAL analysis automatically.

Pascal Browser

1. What is Pascal Browser and how can it make my developer life easier?

Pascal Browser is a powerful and efficient source code documentation tool.

Just as its sibling product Pascal Analyzer, Pascal Browser will parse the source code it finds and gather all sorts of information. This information is used to create the document collection that describes the source code. The most common use of Pascal Browser will probably be to create hyperlinked HTML documents.

2. I'm a registered user, where can I find updated versions of the full program?

Read the mail you got when you ordered Pascal Browser. The same instructions apply for updates. If you cannot find this mail, let us know, and we will help you as soon as we can.

3. Which versions are supported by Pascal Browser?

Pascal Browser supports code written for the following compilers:

  • Borland Pascal 7 (or earlier)
  • Delphi 1
  • Delphi 2
  • Delphi 3
  • Delphi 4
  • Delphi 5
  • Delphi 6
  • Delphi 7
  • Delphi 8 for .NET
  • Delphi 2005 for Win32
  • Delphi 2005 for .NET
  • Delphi 2006 for Win32 (also Turbo Delphi for Win32)
  • Delphi 2006 for .NET (also Turbo Delphi for .NET)
  • Delphi 2007 for Win32
  • Delphi 2007 for .NET
  • Delphi 2009 for Win32
  • Delphi 2010 for Win32
  • Delphi XE for Win32
  • Delphi XE2 for Win32
  • Delphi XE2 for Win64
  • Delphi XE2 for OSX
  • Delphi XE3 for Win32
  • Delphi XE3 for Win64
  • Delphi XE3 for OSX
  • Delphi XE4 for Win32
  • Delphi XE4 for Win64
  • Delphi XE4 for OSX
  • Delphi XE4 for iOS Device
  • Delphi XE4 for iOS Simulator
  • Delphi XE5 for Win32
  • Delphi XE5 for Win64
  • Delphi XE5 for OSX
  • Delphi XE5 for iOS Device
  • Delphi XE5 for iOS Simulator
  • Delphi XE5 for Android
  • Delphi XE6 for Win32
  • Delphi XE6 for Win64
  • Delphi XE6 for OSX
  • Delphi XE6 for iOS Device
  • Delphi XE6 for iOS Simulator
  • Delphi XE6 for Android
  • Delphi XE7 for Win32
  • Delphi XE7 for Win64
  • Delphi XE7 for OSX
  • Delphi XE7 for iOS Device
  • Delphi XE7 for iOS Simulator
  • Delphi XE7 for Android
  • Delphi XE8 for Win32
  • Delphi XE8 for Win64
  • Delphi XE8 for OSX
  • Delphi XE8 for iOS Device
  • Delphi XE8 for iOS Device 64-bits
  • Delphi XE8 for iOS Simulator
  • Delphi XE8 for Android
  • Delphi 10 for Win32
  • Delphi 10 for Win64
  • Delphi 10 for OSX
  • Delphi 10 for iOS Device
  • Delphi 10 for iOS Device 64-bits
  • Delphi 10 for iOS Simulator
  • Delphi 10 for Android
  • Delphi 10.1 for Win32
  • Delphi 10.1 for Win64
  • Delphi 10.1 for OSX
  • Delphi 10.1 for iOS Device
  • Delphi 10.1 for iOS Device 64-bits
  • Delphi 10.1 for iOS Simulator
  • Delphi 10.1 for Android
  • Delphi 10.2 for Win32
  • Delphi 10.2 for Win64
  • Delphi 10.2 for OSX
  • Delphi 10.2 for iOS Device
  • Delphi 10.2 for iOS Device 64-bits
  • Delphi 10.2 for iOS Simulator
  • Delphi 10.2 for Android
  • Delphi 10.3 for Win32
  • Delphi 10.3 for Win64
  • Delphi 10.3 for OSX
  • Delphi 10.3 for iOS Device
  • Delphi 10.3 for iOS Device 64-bits
  • Delphi 10.3 for iOS Simulator
  • Delphi 10.3 for Android
  • Delphi 10.3 for Linux 64-bits
  • Delphi 10.4 for Win32
  • Delphi 10.4 for Win64
  • Delphi 10.4 for OSX 32-bits
  • Delphi 10.4 for OSX 64-bits
  • Delphi 10.4 for iOS Device 32-bits
  • Delphi 10.4 for iOS Device 64-bits
  • Delphi 10.4 for iOS Simulator
  • Delphi 10.4 for Android 32-bits
  • Delphi 10.4 for Android 64-bits
  • Delphi 10.4 for Linux 64-bits
  • Delphi 11 for Win32
  • Delphi 11 for Win64
  • Delphi 11 for OSX 32-bits
  • Delphi 11 for OSX 64-bits
  • Delphi 11 for iOS Device 32-bits
  • Delphi 11 for iOS Device 64-bits
  • Delphi 11 for iOS Simulator
  • Delphi 11 for Android 32-bits
  • Delphi 11 for Android 64-bits
  • Delphi 11 for Linux 64-bits
  • Delphi 11 for OSX ARM 64-bits
  • Delphi 12 for Win32
  • Delphi 12 for Win64
  • Delphi 12 for OSX 32-bits
  • Delphi 12 for OSX 64-bits
  • Delphi 12 for iOS Device 32-bits
  • Delphi 12 for iOS Device 64-bits
  • Delphi 12 for iOS Simulator
  • Delphi 12 for Android 32-bits
  • Delphi 12 for Android 64-bits
  • Delphi 12 for Linux 64-bits
  • Delphi 12 for OSX ARM 64-bits

By setting appropriate compiler directives and conditional defines, PAL should also handle code written for Kylix (Delphi for Linux), and for other Pascal dialects.

4. Is it necessary to change my source code in order to let Pascal Browser do its work?

No, not at all. Just make sure that you select a suitable compiler target. Also set any appropriate compiler directives and conditional defines, just as you would when compiling from within the IDE. Or use an include file with compiler directives and conditíonal defines.

Be aware, that if you check the option "Use Delphi project options if found", the conditional defines that may be set in the options will also be used, and merged with the conditional defines that you set in the project options.

4. How can I make my Chinese comments show up correctly in the HTML pages when using charset "Big5"?

When Unicode comments are used in the source code, the default templates will not generate the correct output. The output in source code listings will display Unicode characters, but not in the other parts of the document that show comments.

The comments are written by PAB to the intermediate XML file, and the charset used is "iso-8859-1", and the XSLT transformation inserts a <META> tag in the resulting HTML pages that specifies "charset=iso-8859-1". The solution is to add an additional <META> tag that specifies for example the charset "Big5" (a charset for Chinese characters) in the templates, like this for Module.xsl:  

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:variable name="template">{#Template}</xsl:variable>

<xsl:include href="FooterInc.xsl"/>
<xsl:include href="HeaderInc.xsl"/>
<xsl:include href="ToolsInc.xsl"/>
<xsl:include href="TodoInc.xsl"/>
<xsl:include href="ImageInc.xsl"/>

<xsl:output method="html" version="1.0" encoding="iso-8859-1" indent="yes"/>

<xsl:template match="/">
<xsl:variable name="Me" select="//Items/Item[@id='{#selfID}']"/>
<xsl:variable name="ItemsInMe" select="//Items/Item[@modid='{#selfID}']"/>
<HTML>
<META http-equiv="Content-Type" content="text/html; charset=Big5"/>
<xsl:call-template name="header"/>
<BODY>
...

This <META> tag will take precedence, so the resulting output is displayed with the "Big5" charset.