Visustin generates flow charts from PL/I and SAS source code. Convert your .pli, .pl1 and .sas files to flow charts automatically.
PL/I or PL/1 flowcharting support has been built according to IBM PL/I Language Reference, 10th Edition (Oct 2008). Visustin is not limited to IBM PL/I systems, though. The reference document is compatible with Enterprise PL/I for z/OS, PL/I for AIX and Rational Developer for System z PL/I for Windows.
SAS flowcharting support is current up to SAS (Statistical Analysis System) version 9.4. Visustin flowcharts both DATA step and SAS %macro code.
PL/I and SAS resemble each other. Visustin supports the following statement types.
Statement type | PL/I | SAS |
---|---|---|
Conditional statements | IF..THEN..ELSE | IF..THEN..ELSE, IF expr; |
Multiway decision | SELECT..WHEN..OTHERWISE | SELECT..WHEN..OTHERWISE |
Looping | DO..END; | DO..END; |
Loop exit and continue | LEAVE, ITERATE | LEAVE, ITERATE |
Jump | GOTO, GO TO | GOTO, GO TO, LINK |
Return | RETURN | RETURN |
End program | EXIT, STOP | ABORT |
Error handling | ON | |
Error raising | SIGNAL, RESIGNAL | |
Inline data | CARDS, CARDS4, LINES, LINES4, DATALINES, DATALINES4, PARMCARDS, PARMCARDS4 | |
Line numbers and labels | MyLine: | MyLine: |
Comments | /* Comment */ | /* Comment */, *Comment; |
Functions and sub-programs | PROC, PROCEDURE, ENTRY | DATA and PROC step |
Pre-processing | %preprocessor | %macros |
%Preprocessor directives and %macros. Visustin supports the extensive macro languages of PL/I and SAS. The default setting handles them as comments. To turn on full processing as flow chart symbols, use the Compiler directives setting in the Options menu.
Most other statements are handled as regular statements. Unhandled compiler directives are displayed as comments.
PL/I code can exist in two formats, both supported by Visustin: either 1) variable line length or 2) fixed line length. Variable length code causes no problems. On the contrary, fixed length code may include special columns for sequence numbers and/or printer control characters. These special columns must be detected and ignored. Typically, source code appears between columns 2–72. Column 1 is for printer control and columns 73–80 for sequence numbers. Other values may be used. The source code may indicate its own format with a line such as *PROCESS MARGINS(2,72)
. In many cases, this line doesn't exist, and the columns are either defined with a compiler switch or system default values are used.
Visustin auto-detects the format of most PL/I code. If it finds fixed length code, it ignores sequence numbers and/or printer control characters. A ruler appears above the source code in Visustin main window. The ruler displays the currently detected column format. Columns with an empty symbol are ignored when flowcharting. Columns with a non-empty symbol are flowcharted.
Column detection rules:
*PROCESS MARGINS
or %PROCESS MARGINS
line. If found, use the setting in it, and create a flow chart.If Visustin does not correctly treat fixed length PL/I, manually add *PROCESS MARGINS(n,m)
as the first line of code, where n=first column, m=last column. Example: *PROCESS MARGINS(2,72)
processes code in columns 2..72 ignoring other columns.
Visustin only supports variable line length for SAS code. If your SAS code is in a fixed format or if it uses a sequence number column, use an external utility to remove any extra columns and convert the source files in a variable length format.
If your files are in EBCDIC, set the encoding option to an EBCDIC codepage before loading the files in Visustin.
The following statement types are unsupported. Unsupported means you see the code in the graph as a normal statement, not as a branch or a jump.
PL/I comes in several dialects such as PL/M, XPL, PL/P, PL/C, PL/S, PL/AS, PL/X, PL/8 and EPL. While we do not suggest that Visustin is fully compatible with them, we encourage you to try Visustin and report your findings to us. Visustin is tolerant of small syntactical changes and dialects and it can readily process subsets of PL/I. We may add proper support for PL/I dialects in a future version if there is demand.