![]() |
Iron Spring PL/I CompilerLinux Version 0.9.9a
|
The current version still contains bugs. As a user of beta software, you can help improve the compiler. See the section Reporting bugs.
Trademarks
Iron Spring Software grants you the right to use and copy the Iron
Spring PL/I compiler and library freely. You may distribute programs compiled
using the compiler and/or linked with the library under any terms you wish
without restriction.
The source to the library is licensed under the terms of the
Gnu Lesser General Public License (LGPL).
All material is copyright Iron Spring Software, 2014, 2015.
THE COMPILER AND LIBRARY ARE PROVIDED "AS IS"
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
PERFORMANCE OF THE COMPILER AND LIBRARY IS WITH YOU. SHOULD THEY PROVE
DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
CORRECTION.
A later version will be installable using one or more of the standard package managers.
The Iron Spring PL/I Compiler Programming Guide describes
the PL/I compiler options available.
eComStation is a trademark of Serenity Systems International.
Gnu is a trademark of the Free Software Foundation.
IBM is a trademark of IBM, Inc.
Intel is a trademark of Intel Corporation.
Iron Spring is a trademark of Iron Spring Software.
Linux is a registered trademark of Linus Torvalds.
VAX is a trademark of Hewlett-Packard, Inc.
WATCOM is a trademark of Sybase, Inc. and its subsidiaries.
Library heap manager based on code
Copyright (c) 2001-2006 Wolfram Gloger.
License
<boring-legal-stuff>
This license a legal agreement between you and Iron Spring Software. Your use of
this software signifies that you agree to the terms of this license.
</boring-legal-stuff>
Contents
This distribution includes the executable for the PL/I compiler plic,
the static library lib/static/libprf.a,
and the sources for the library and sample programs.
pli-0.9.9a
|
+-----------------------samples----------------lib
| | |
plic (Sample sources and +--------------------------static---include----source-----------alt
(compiler executable) %include files, | | | |
(documentation, etc.) sample makefiles | | +--------asm |
and module definition | | (PL/I source) | (alt storage
file). | | (assembler management)
| (%include files source)
| required by
| library).
|
libprf.a (static library)
Requirements
The folowing software is required to run the Linux version of the compiler:
The following software is recommended:
Restrictions
Version 0.9.9a has a number of restrictions. The most
significant are:
Installation
An installation procedure is provided. cd to the 'pli-0.9.9a' directory
and type 'make install' (with suitable authority). This procedure moves the
compiler to '/usr/bin' and creates a symlink 'plic' referencing it,
and moves the library to '/usr/lib' and creates the symlink
'libprf.a'.
Sample Programs
The file samples/samples.html contains a list of all the
sample programs. The comments in each program contain information on using
the program.
Using the compiler
The "samples" directory contains three sample makefiles that can be used to compile and link
PL/I programs. You should copy these and modify them for your requirements.
"LC_make" and "LCC_make" both use gcc to drive the linker; the program entry will be libc's
"_start". "SA_make" calls ld directly and should be used only for programs that don't call
any C functions. The program entry will be PL/I's "main". In all cases the static PL/I
runtime linkary "libprf.a" is required, indicated by "-lprf" in the linker command.
gcc -o ${EXE} ${OBJ} ${ALTDIR}/fhs.o ${ALTDIR}/ghs.o -lprf -Wl,-M >${MAP} |
This command uses gcc to link a PL/I program with libc, and use PL/I's heap storage management.
gcc -o ${EXE} ${OBJ} -lprf -Wl,-M >${MAP} |
This command uses ld to link a standalone PL/I program with no reference to libc.
ld -z muldefs -Bstatic -M -e main -t -o ${EXE} \ ${OBJ} \ -lprf \ >${MAP} |
64-bit Linux Considerations
The Iron Spring PL/I compiler, and compiled PL/I programs,
will run on a 64-bit system as 32-bit applications.
The following steps are required:
--oformat=elf32-i386
-melf_i386
Documentation
The Iron Spring PL/I Compiler Programming Guide contains
a description of the features of the compiler.
Except as noted in the Programming Guide
under Compiler Differences and
Restrictions this compiler is compatible with
the IBM "PL/I for MVS and VM Compiler 1.1". A complete language reference will be available as part of a future release.
Documentation for the IBM compiler is available online.
Changes in the current version |
---|
Added external structure _pli_argc containing argc, *argv[] and *envp[] equivalent to arguments to a C main(). |
Changes in version 0.9.9 |
Added ROUND builtin. |
Added compiler option "-N" to generate line number information for debugging. |
Changes in version 0.9.8 |
Stream I/O data lists can now contain items with Type-3 DO iteration. |
Added PRECISION, ATAN, and ATAND builtins. |
Fixed problems with OVERFLOW handling and conversion of FLOAT constants. |
Changes in version 0.9.7 |
Added builtins REVERSE, AFTER, BEFORE, TRIM, LTRIM, RTRIM, and SEARCH. |
Aggregate array assignment of adjustable arrays now works. Assignment of arrays with matching attributes now optimized to block move. |
Changes in version 0.9.6 |
Added builtin functions IAND, IEOR, INOT, IOR, ISLL, and ISRL. |
Added builtin subroutine PLISRTD. |
FIXED DECIMAL OPTIONS(IBM) attributes for IBM mainframe format packed decimal data. |
Changes in version 0.9.5 |
The keyword MEDIUM is accepted as an ENVIRONMENT option for compatibility with VSE PL/I. |
Various fixes for STREAM INPUT, pictured data and CONTROLLED storage. |
Changes in version 0.9.4 |
The Procedure Map has been added as an optional part of the listing. This lists the offset and type of each statement to simplify debugging of trap conditions. |
CTLASA is now supported for PRINT files. |
0.9.4 is primarily a bugfix release. Numerous problems with adjustable and CONTROLLED aggregates have been fixed. |
Changes in version 0.9.3 |
*The sizes of some FLOAT variables have been increased to fix problems with conversions between binary and decimal float. Any programs using FLOAT data should be recompiled.* |
*Any programs using OPTIONS(FROMALIEN) entries should be recompiled.* |
A limited version of CONTROLLED storage has been added. See the Programming Guide for description. |
The ALLOCATION and MAXLENGTH builtins are now implemented. |
Multiple iteration specifications are now allowed for the DO statement. |
The L-Format item is now supported for input. |
The OPEN statement now accepts TITLEs of the form DD_XXX where DD_XXX is an environment variable supplying the actual name of the file. |
The ENVIRONMENT option INTERACTIVE can be used to identify a file assigned to a terminal. |
Changes in version 0.9.2 |
PL/I multitasking has been added, including the TASK, EVENT, and PRIORITY options of the CALL statement, the WAIT statement, and the COMPLETION and STATUS builtin functions and pseudovariables. |
SIZE is now recognized as a synonym for the STORAGE builtin function. |
Structure assignments BY NAME are now allowed. |
EXTERNAL data items are now aligned on a DWORD (4-byte) boundary instead of 8-byte. |
Changes in version 0.9.1 |
The SINH, COSH, TANH, and CS builtins have been added. |
The PACKAGE statement is now supported. |
The INITIAL CALL option is now supported. |
Floating-point pictures are now allowed, for output only. |
Changes in version 0.9.0 |
The compiler now supports Linux as a host and a target. The ERF, ERFC, and EXP builtins have been added. |
Page headings have been added to the compiler listings. |
Bugs fixed | ||
---|---|---|
Changes in version 0.9.9a | ||
Bug number | Fixed in version | Description |
333 | 0.9.9a | Character '7F'x should print as '.' in dumps |
332 | 0.9.9a | Array of structures padded incorrectly |
331 | 0.9.9a | Some format retetition factors raise ERROR at runtime |
330 | 0.9.9a | Non-positive argument to delay raises ERROR at runtime |
329 | 0.9.9a | FIXEDOVERFLOW not raised for fixed decimal operations |
328 | 0.9.9a | Error compiling subscripted statement labels |
327 | 0.9.9a | Format with non-integer widths raises ERROR at runtime |
324 | 0.9.9a | Sort sequence problems in plistrd |
323 | 0.9.9a | plisrtd has undocumented minimum record length requirement |
321 | 0.9.9a | Structures not padded to size of alignment |
320 | 0.9.9a | LBOUND/HBOUND incorrect for adjustable arrays |
317 | 0.9.9a | ZERODIVIDE only raised once |
316 | 0.9.9a | CONVERSION raised for GET LIST at EOF |
315 | 0.9.9a | SELECT with substring argument fails to match |
312 | 0.9.9a | Compiler error compiling stream do iteration |
311 | 0.9.9a | Runtime trap passing adjustable string arg tp adjustabls parameter |
308 | 0.9.9a | Error compiling subscripted entry references |
307 | 0.9.9a | DO loop doesn't iterate after GOTO |
306 | 0.9.9a | Fixed binary divide returns incorrect results |
305 | 0.9.9a | Compiling PUT DATA(array_elem) gets error 701 |
304 | 0.9.9a | Invalid intrinsic call at runtime converting FLOAT to CHAR |
303 | 0.9.9a | Compiler prematurely detects EOF |
302 | 0.9.9a | Incorrect result length for AFTER builtin |
297 | 0.9.9 | (OS/2) Read format F CRLF file raises RECORD condition |
296 | 0.9.9 | PUT DATA(<minor structure> generates incorrect output |
295 | 0.9.9 | Assignment of string constant to pictured data causes error |
294 | 0.9.9 | Compiler error initializing too many FIXED DECIMAL array elements |
293 | 0.9.9 | SIZE check for FIXED DECIMAL generates incorrect code |
292 | 0.9.9 | Compiler error if second argument to IAND or IOR has precision<=15 |
291 | 0.9.9 | Incorrect code generated to assign scalar to structure |
290 | 0.9.9 | Error in assignment of structures containing pointers |
289 | 0.9.9 | Incorrect alignment adding and subtracting constants |
288 | 0.9.9 | Incorrect scale factor for the result of the ROUND builtin |
286 | 0.9.8 | PUT DATA(structure) may abend or generate incorrect output. |
285 | 0.9.8 | LEAVE <name> does not create cross-reference entry for "name". |
284 | 0.9.8 | Some floating point constants convert incorrectly. |
283 | 0.9.8 | REVERT for the first condition established in a block may function incorrectly. |
282 | 0.9.8 | incorrect output using E-format. |
281 | 0.9.8 | Pointer compare not doing unsigned comparison. |
279 | 0.9.7 | Duplicate procedure names in package cause compiler trap. |
278 | 0.9.7 | GET LIST(string) doesn't properly check for leading quote. |
277 | 0.9.7 | Enabling STRINGRANGE causes various run-time errors. |
276 | 0.9.7 | Changes in 0.9.6 cause drifting picture characters not to appear. |
275 | 0.9.6 | (Linux) Main task termination doesn't terminate subtasks. |
274 | 0.9.5 | MAX and MIN builtins generated incorrect results for FLOAT and FIXED DECIMAL arguments. |
273 | 0.9.5 | Incorrect conversion of scaled FIXED DECIMAL constant to FIXED BINARY. |
272 | 0.9.5 | FIXED builtin not correctly handling source and target with different scale factors. |
271 | 0.9.5 | Scaled F-Format not formatting correctly. |
270 | 0.9.5 | COLUMN and SKIP(0) specifications not working for stream input. |
269 | 0.9.5 | Stream input RECSIZE was not defaulting to 80 if not specified. |
268 | 0.9.5 | TIME and DATETIME builtins not returning correct millisecond value. |
267 | 0.9.5 | Incorrect conversion from CHARACTER to FIXED DECIMAL. |
266 | 0.9.5 | Incorrect output moving bit string constant to subscripted nybble. |
265 | 0.9.5 | Insert characters in picture cause incorrect placement of drifting characters. |
264 | 0.9.5 | Compiler trap if the length or bound of adjustable or controlled data is not FIXED BINARY. |
263 | 0.9.5 | Compiler traps when pictured data is used as the control variable of a DO statement |
262 | 0.9.5 | The ADD, MULTIPLY, and DIVIDE builtins not accepting pictured arguments. |
261 | 0.9.5 | Incorrect message is printed for a missing %INCLUDE file. |
180 | 0.9.5 | (Linux) DELAY statement uses incorrect time interval. |
260 | 0.9.4 | Compiler trap if input file is empty. |
259 | 0.9.4 | Incorrect output when adjustable numeric array is passed as argument. |
258 | 0.9.4 | Incorrect conversion of FIXED DECIMAL to FLOAT BINARY(W62). |
257 | 0.9.4 | Recursive function may trap on return(W58). |
256 | 0.9.4 | MOD builtin traps when arguments are FIXED DECIMAL |
255 | 0.9.4 | Character comparison may be incorrect if first operand is constant |
254 | 0.9.4 | Conversion of hex bit string to character generates incorrect results |
253 | 0.9.4 | Source text preceding the left margin prints on previous line of compiler listing. |
252 | 0.9.4 | %PAGE preprocessor statement not executing ON ENDPAGE On-Unit. |
251 | 0.9.4 | Compiler error compiling the COPY and REPEAT builtins with a non FIXED BINARY count expression. |
250 | 0.9.4 | Files opened with title "stdin", "stdout", or "stderr" trap on close. |
249 | 0.9.4 | PUT EDIT pictured data with a P format generates incorrect output. |
248 | 0.9.4 | Comparing a VARYING string to spaces generates incorrect code(W40). |
247 | 0.9.4 | Compiler trap 11 compiling the DIVIDE builtin(W33). |
246 | 0.9.4 | ALLOCATing an array only allocates storage for one element(W27). |
245 | 0.9.4 | The BINARY builtin generates incorrect code if called with a BINARY argument(W21). |
244 | 0.9.4 | INITIAL option for ENTRY variables generates incorrect code(W19). |
243 | 0.9.3 | Some character compares of unequal length strings may return incorrect result for other than = and ¬=. |
242 | 0.9.3 | EVENT variables in AUTOMATIC structures not properly initialized. |
241 | 0.9.3 | BINARYVALUE does not treat the NULL builtin and a null pointer value equivalently. |
239 | 0.9.3 | [Linux only] Arguments to _pli_mutex_init processed incorrectly. |
238 | 0.9.3 | DO FOREVER causes compiler error rather than "Unimplemented" message. |
235 | 0.9.3 | Negative numbers incorrect when converting base. |
234 | 0.9.3 | Variables declared in a package with no storage class default to AUTO rather than STATIC. |
233 | 0.9.3 | Calling CS builtin with pointer argument rather than ADDR produces incorrect output. |
232 | 0.9.3 | Declaring FILE INTERNAL causes compiler error. |
229 | 0.9.3 | Very large statements such as declaration of large initialized AUTO array generate compiler error or trap. |
228 | 0.9.3 | Data read using input pictures containing T, I, or R incorrect. |
224 | 0.9.3 | Programs with more than approximately 50 unitialized external data declarations cause compiler trap. |
223 | 0.9.3 | Duplicate names identified in error in structure declarations. |
221 | 0.9.3 | Calling SUBSTR with structure argument causes compiler trap. |
219 | 0.9.3 | BY NAME move of array of structures moves only first array element. |
218 | 0.9.3 | Moving numeric pictured data to numeric pictured causes compiler error. |
216 | 0.9.3 | Indexing ignored in reference to temporary stack data, e.g. SUBSTR(expr). |
213 | 0.9.3 | Base address of multi-dimensioned array computed incorrectly. |
212 | 0.9.3 | Not all registers saved and restored when calling OPTIONS(FROMALIEN) entry. |
211 | 0.9.3 | BINARYVALUE( ADDR(xxx) ) returns incorrect value. |
210 | 0.9.3 | SUBSTR with STRINGRANGE enabled returns string at position one greater than specified. |
208 | 0.9.3 | Conversion of character string to element of numeric array generates runtime error. |
186 | 0.9.3 | Alternate entry to MAIN terminates when returning. |
183 | 0.9.3 | PUT LIST(array) produces no output. |
182 | 0.9.3 | Some FLOAT BINARY converts to FLOAT DECIMAL incorrectly. |
198 | 0.9.2 | DO REPEAT should allow nonarithmetic control variable. |
197 | 0.9.2 | Based variable argument to STORAGE should not require locator. |
178 | 0.9.2 | Bad descriptor passed for adjustable arg if parm is also adjustable. |
177 | 0.9.2 | Bad descriptor passed for adjustable string parameter. |
176 | 0.9.2 | PAGESIZE(0) should suppress formfeeds. |
175 | 0.9.2 | BIT builtin result may be incorrect. |
174 | 0.9.2 | TIME builtin always returns 0 ms. |
173 | 0.9.2 | EXIT statement causes compiler trap in GCALL. |
171 | 0.9.2 | SKIP format item without relative line defaults to SKIP(0) instead of (1). |
170 | 0.9.2 | Problems mapping structure containing unions. |
169 | 0.9.2 | Compiler trap if dummy argument size is larger than 32767. |
168 | 0.9.2 | Compiler trap on leading spaces in picture repetition factor. |
167 | 0.9.2 | Compiler trap generating error message on invalid conversion to program control variable. |
165 | 0.9.2 | Overly aggressive optimization of register assignments causes REGX error 990-02 |
164 | 0.9.2 | Based adjustable data causes various errors. |
162 | 0.9.2 | SIZE not recognized as synonym for STORAGE builtin. |
161 | 0.9.2 | Incorrect references generated for members of structure parameters. |
160 | 0.9.2 | Incorrect assignment of arrays of unaligned bit strings. |
159 | 0.9.1 | Compiler traps when builtins are called with program control arguments where computational arguments are expected, and visa-versa. |
158 | 0.9.1 | Various compiler problems using the initial attribute with static unaligned bit strings. |
157 | 0.9.1 | The HEXIMAGE builtin generates incorrect code when the first argument is a pointer reference (not pointer expression). |
156 | 0.9.1 | The COMPARE builtin generates incorrect results after fix for bug 148. |
154 | 0.9.1 | Some comparisons of character data to literals cause error 990, code 05 in MX. |
153 | 0.9.1 | Incorrect code generated for conversion of scaled pictured data to arithmetic. |
152 | 0.9.1 | Incorrect scaling on move of arithmentic to pictured data. |
151 | 0.9.1 | Incorrect code generated for some bit string assignments. |
150 | 0.9.1 | Remote formats generate incorrect code. |
148 | 0.9.1 | The COMPARE builtin reverses the order of the operands. |
147 | 0.9.1 | [Invalid] Unary pointer expression causes compiler trap. |
146 | 0.9.1 | Converting WORD integer to FLOAT causes error 990, code 14 in MX. |
145 | 0.9.1 | Entry returning expression with adjustable bounds or lengths does not produce error message. |
144 | 0.9.1 | ENTRY arguments to procedures with SYSTEM linkage generate errors or incorrect code. |
A Yahoo! group "ISPLI"
(http://tech.groups.yahoo.com/group/ISPLI) is
available as a user forum for problems, tips, etc. The developers also monitor
this group.
Before reporting a bug, please make sure you are running
the most recent release.
The following information is required to report
a bug:
Mail bug reports to:
Support
No formal support is provided for pre-release versions of Iron Spring PL/I.
Bugs will be fixed on a best-efforts basis only, and the fix included in
the next distributed version. "Thank You" to a number of users who have
submitted bug reports which helped improve this version of the compiler.
Reporting bugs
For the current version of the compiler, a bug
is one of the following:
Features not implemented in the current version will
be added in future versions. In the meantime, their
absence should at least be indicated by an error message.
Hopefully, all this information will be small enough to be sent as
plain text in a mail message. Otherwise please attach a zip file.
No other formats will be accepted.
bugs@iron-spring.com
version 0.9.9a, 15 Dec, 2016
http://www.iron-spring.com