# About the Iron Spring PL/I Library [Linux]

The Iron Spring PL/I Library is copyright Iron Spring Software, 2023.

The complete library is released under the terms of the Gnu Lesser General Public License (LGPL). Library heap manager (heap.pli) based on code Copyright (c) 2001-2006 Wolfram Gloger: His copyright notice reads:

> Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that (i) the above copyright notices and this permission notice appear in all copies of the software and related documentation, and (ii) the name of Wolfram Gloger may not be used in any advertising or publicity relating to the software.

In the following, <release> represents the current release. For this version that is pli-1.0.0.

This document describes the details of the Linux version of the library. For the OS/2 version see library_os2.

The supplied makefile will build a static object library in <release>/lib/libprf.a. The complete library sources are found in <release>/lib/source (PL/I source code), <release>/lib/source/asm (OS-independent assembler source code and includes), and <release>/lib/include (PL/I include files). Operating system dependent sources are in <release>/lib/source/OS2 and <release>/lib/source/linux To modify the library, make your changes to the source, cd to <release>/lib, and type make linux.

The startup procedure "_pli_Start" (<release>/lib/asm/plistart.asm) needs to be linked with the main procedure, and references the external symbol "_pli_Main", which is defined for each OPTIONS(MAIN) procedure. The symbol 'main' is defined as an alias for "_pli_Start".

The directory <release>/lib/include contains definitions of the data areas used by the library, with descriptive comments. The following might be of particular interest:

desc.inc
  Definitions of PL/I "data descriptor" formats.
dsa.inc
  The PL/I standard stack frame header for a procedure or BEGIN-block.
errno.inc
  Preprocessor labels for kernel error return codes (like errno.h).
fcb.inc
  The PL/I "file control block".
gbl.inc
  Global data used by PL/I program and library. Note the this control block contains eight bytes reserved for user data.
plitabs.inc
  The definition of the stream output "tabs" control block. This is intended for the use of user programs.
  See the IBM PL/I for MVS and VM Programmers' Guide for a description of PLITABS.
sig_txt.inc
  Text labels for system signals.
stat.inc
  Preprocessor labels for file permissions (from sys/stat.h).

Iron Spring PL/I version 1.0.0, 1 Feb 2023