the GUI manual

Some help for the GUI screens


Find Lint Session

[Procedure: prolint/prolintdb/findsessions.w invoked by either prolint/core/selectfiles.w or prolint/outputhandlers/logwin.w]

The Find Sessions window presents a browse of all sessions matching the filter criteria (by default, today and your userid).

When you fill in filter criteria and select "Find", the browse will be refreshed with sessions that match the filter criteria. Any session where the User ID begins with the user filter characters, the date is the same as the date filter (or the date filter is blank), and the name filter exists within the session name (it does a match comparison) will be displayed.

The window is displayed when you select "Find Session" from the Select Files to Lint window, and from the Load Results button in the Results window.

When invoked from Select Files to Lint, it places the selected session in memory so that you can use it to add lint results. If you re-lint a program on a session where it had been linted before, the previous results are deleted and the new results take its place. If you want to compare the lint results of two different versions of the same program, you want to lint them on different sessions. You can set a single session as a baseline, and compare it against the most recent session using the Lint Stats window (see that page).

When you want to review the results of a session at some later point in time, you can go to the results window and select the Load Results button. This same screen will appear. When you select a session, all the results from that session are reloaded (republished) to the results window as if you had just re-run the lint module for it, so that you can filter, export, etc. as you would have done originally.

Once you have located the session that interests you, select the button that says OK or Load, depending on which window you came from. You will return to that window.


Prolint configuration window

[procedure: prolint/core/lintcfg.w, invoked from anywhere]

This dialog helps you switch rules on/off, override default severities and select outputhandlers.

See "profiles" for a general discussion about profiles.

The combo-box contains a list of profiles found in directories "prolint/settings" and "local-prolint/settings", and it also contains a profile named "<none>" which is the default profile. The settings for "<none>" are stored in directory "prolint/settings", instead of in one of its subdirectories.

When you select a profile (using the combo-box), you will see a text next to the combo-box
indicating if this profile is a shared profile or a private profile. Shared profiles are found in "prolint/settings", private profiles are found in "local-prolint/settings".


You can create a directory "local-prolint/settings" anywhere in your propath.


If a profile with a particular name exists in both "prolint/settings" and "local-prolint/settings", then the local profile takes precendence unless the shared profile contains a file named "no-local-settings.lk", in which case the local profile is ignored.

There is a toolbar near the top of the window. The buttons are:

Create a new profile.

A dialog will pop up, asking for the name of the new profile. The program will try to create a subdirectory with this name in "prolint/settings" or in "local-prolint/settings", the contents of the new profile equals the contents of the default profile.

Make a local copy of this shared profile.

This button is only enabled if the current profile is a shared profile, and if directory "local-prolint/settings" exists, and if the shared profile does not contain a file named "no-local-settings.lk".

Delete this local profile.

This button is only enabled if the profile was found in "local-prolint/settings".

The profile is deleted from "local-prolint/settings". The local profile reverts to a shared profile if an equally named profile exists in "prolint/settings".

Delete this shared profile.

This button is only enabled if the profile was found in "prolint/settings" and if this profile does not contain file "no-local-settings.lk".

The profile is deleted from "prolint/settings".


Prolint Desktop

The Prolint Desktop is simply a window with a couple of buttons on it, to launch several Prolint features from.
It is not exactly state of the art but comfortable.

It is especially comfortable when the Desktop is added to the PRO*Tools palette. There is a button near the bottom of the Prolint Desktop, labelled "Add to protools". Just press it and restart the PRO*Tools palette.
The button becomes invisible if there is already a program-name matching "*prolint*desktop*" in protools.dat.

If you have not added the Desktop to PRO*Tools yet, just run the following statement from a Progress procedure editor:

     RUN prolint/desktop.w.

button "Lint files..."

run prolint/launch/start.p

This button opens a dialog where you can select one or more files, and/or one or more directories to lint. You can also select a "Profile".

button "Configure"

run prolint/core/lintcfg.w("")

This button opens the window where you can do Profile maintenance.

button "Results Window"

run prolint/outputhandlers/logwin.w

The Results Window is where most of your Prolint sessions will send their output to. It is also
a convenient window to have around, because it contains a lot of command options.

button "Lint Active AB"

This button determines which file is currently active in the AppBuilder, and will lint that file.

button "Lint Open AB"

This button determines which files are currently open in the AppBuilder, and will lint those files.

button "Check for updates"

run prolint/core/checkrelease.p

This button does a HTTP GET using Progress V9 sockets, to get the online copy of http://www.oehive.org/files/prolintrelease.txt. This is a very small file.

It then compares it with file prolint/core/release.ini on your PC. If they are equal, you already have the latest release. Else you will be prompted to browse to http://oehive.org/prolint/download to download the newest release.

buttons "Query Prolintdb"

Browse results that are stored in the (optional) Prolint database. See prolintdb for more info.

button "Add New Rule"

run prolint/core/dnewrule.w

This dialog is a convenient way to add a new entry to prolint/rules/rules.d, the list of default rules. If you do not use this dialog please refer to how to create a new rule for a description of file rules.d.

button "Regression-test"

run prolint/launch/test.p

If you are modifying Prolint sources you may want to do some regression-testing. This action performs a Lint on directory "prolint/regrtest" and "prolint/regrtest-oo" which contain collections of correct and ugly 4GL-statements. The results are compared to a list of expected results. The outcome should be a window that says "FC: no changes".


Before you can run the regression test, you will first need to create a test database. Please see Regression testing for details.

button "Proparse launcher"

run proparse/launcher.w

Starts a window similar to the Prolint Desktop, but now for Proparse utilities.
The Tokenlister is what you will be using a lot, if you are writing rules for Prolint.


Select files to lint

[procedure: prolint/core/selectfiles.w, invoked from prolint/launch/start.p]

This dialog allows to select one or more sourcefiles
to lint. You can also select one or more directories:
Prolint will automatically scan directory-contents
looking for *.p and *.w (recursing into subdirectories
as well).

editor widget:

Type a list of filenames to lint, one filename on each line.

If you are using Progress 9 GUI you can use drag/drop to throw a bunch of sourcefiles into the editor widget.

toggle-box "Clear Outputhandlers":

When on (true), then all existing results will be cleared from the Results window. Other outputhandlers will also start a new, empty output.

When off (false), then new results will be appended to already existing results in the Results window. Other outputhandlers are also supposed to append results to existing output.

button "RTB task":

This button is invisible unless the Roundtable database is connected (visible=CONNECTED("rtb")).

When pressed, the editor widget will be populated with all sourcefiles for the currently selected Roundtable task.


The Prolint Result window

[procedure: prolint/outputhandlers/logwin.w]

The Prolint Result window shows a browse widget containing all warnings from the most recent Prolint run.

When Prolint is working, the statusbar shows:

  1. sourcefile where Prolint is working on
  2. which action Prolint is currently doing
  3. total number of warnings
  4. the name of the current profile
  5. percentage done, if more than one file is to be processed

When Prolint is ready, the statusbar shows:

  1. total elapsed time of last Prolint run
  2. empty
  3. total number of warnings, or if a filter is set: visible warnings / total warnings
  4. the name of the current profile
  5. empty, or "filtered" when a filter is set

Window features:

  • The browse can be sorted by any column by clicking on a column header.
  • Double-click on a row opens the currently selected sourcefile in an external editor, if file prolint/settings/exteditor.cfg is correctly set up
  • Right-click on a row opens a popup-menu, which gets help for the currently selected warning.
  • Button "Desktop" opens the Prolint Desktop window
  • Button "Lint files" opens dialog "Select files to lint" for selecting a number of files to run Prolint on.
  • Button "Save log As" saves all warnings to a tab-delimited logfile, using outputhandler "tabfile.p". Only warnings that match the current filter will be saved.
  • Button "Import log" allows you to import a tab-delimited logfile that was previously saved by outputhandler "tabfile.p". This will reset the filter.
  • Button "Filter" allows you to specify a WHERE-clause for the browse widget. This same WHERE-clause is also used by "Save log as", by "Delete" and by export to Ed4Win.
  • Button "Delete" will delete all warnings that match the current filter, and will reset the filter. What's left are warnings that did not match the filter.
  • Button "Help" shows the page you are reading now.
  • Button "Lint this c.u. again" lints the currently selected compilation unit in the browse again; if the browse is empty the dialog "Select files to lint" will open. This will also reset the filter.
  • Button "Open sourcefile in editor" launches your favourite text-editor and loads the currently selected sourcefile.
  • Button "Help on this rule" shows help on the rule that caused the currently selected warning.

Export to ED for Windows:

(this feature works only if you have ED for Windows and Progress version 9).

You will probably want to edit the sourcefiles where Prolint found warnings.
This is very easy when the warnings are listed in the "Build"-window of ED for Windows instead of the Prolint Results window.


There is a relatively easy way to export the warnings from the Results window to ED's Build window, if you have
installed proed4w :

  1. make sure that the "Proed4w Server" is started in your current Progress session.
  2. open ED for Windows and go to menu-item "Tool | Build Setup.."
  3. run title "Prolint-logwin" and watch how all warnings from the Results window are copied to the Build window

The advantage of this method, over just running Prolint from within ED for Windows, is that this
will use the filter and sorting from the Result window.

How it works:

ED starts proed4w.exe with the "-c prolint-logwin" parameter.

proed4w.exe makes a TCP/IP connection with proed4w.p and passes it the "-c prolint-logwin" parameter.

proed4w.p publishes a "Prolint_SendLogWin_Ed4Win" event.

The Results window receives the event and passes all selected warnings on to outputhandlers/ed4win.p

Outputhandler ed4win.p publishes lines to proed4w.p

Proed4w.p sends lines through TCP/IP back to proed4w.exe

proed4w.exe writes those same lines to stdout, where ED will read them.

More setup details: see page Integrating Prolint and ED for Windows


Compare Lint Sessions

[Procedure: prolint/prolintdb/lintstats.p invoked by prolint/outputhandlers/logwin.w]

The Session Statistical Comparison window is divided into three sections. On the top is the session browse where you locate the 2 sessions you want to compare against each other. There are filters at the top for user id (compared with a 'begins' operator), start date (greater than or equal operator), and session name (matches operator, the program adds two * wildcards for you). When they are set, choose filter and the matching sessions appear in the browse below. Note that a blank date means exclude the date field from the filter.

When you locate a session in which you are interested, you will make it either the 'Base' or the 'Curr'[ent] session. Typically the 'Base' is the older Baseline session that you want to use to show improvement. The newer session is the one you would typically want to select as Curr[ent].

As you select a Base or a Current session, the basic session information appears in the lower right section of the window so you can be sure which sessions you are comparing against each other. When you have both a Base and a Current, you would select Analyze. This populates the comparison browse in the lower left. This browse displays one row per compilation unit and rule, showing how many alerts were found in each session for that rule and compilation unit. To help you determine impact, the rule severity is shown, as well as the difference between the two sessions.

Assuming you are using the old version as the Base and the newer version of the program as the Current, a positive number in the "diff" column indicates that you have added new problems to that compilation unit. A negative number indicates that some have been cleaned up.

The lower (session comparison) browse can be filtered by Compilation Unit ("Prog" using a Matches operator with the wildcards added for you), and rule using a Begins operator. You fill in the values you wish to use as a filter, then select the lower filter button. (The upper filter button applies to the session browse at the top).

Once you have completed your analysis, click Cancel to close the window and return to the results window.