External .I2L Procedures (Advanced) |
Top Previous Next |
Up to this point we have discussed externals for the native versions of XPL0. In the native versions .XPL code is converted to assembly language, and after being assembled the resulting .OBJ files are combined using the standard linker (LINK). However, the interpreted version does not compile into assembly language, so a different linker is used. XLINK combines the main program with files containing external procedures and produces a .C2L file, which is loaded and run like a normal .I2L file. For example:
XLINK PARENT.I2L+FILE1.I2L+FILE2.I2L I2L PARENT.C2L
The first file after "XLINK" must be the main program, but the other files can be in any order. The linker allows up to 200 external procedures and 1000 calls to those procedures. If two external procedures have the same name, the first one is always called.
The interpreted version can also have external subroutines written in assembly language. An assembly-language subroutine is made into a .COM file, then combined with the main program using XLINK. For example:
MASM DOADD; LINK DOADD; EXE2BIN DOADD.EXE DOADD.COM XPLIQ PARENT XLINK PARENT.I2L+DOADD.COM I2L PARENT.C2L
Note the .COM extension in the XLINK command. This is how the linker distinguishes assembly subroutines from .I2L code.
Assembly-language subroutines used with the interpreted version of XPL0 have several restrictions compared to the native version. Since "public" names are not used in these .COM files, XLINK uses the name of the file as the name of the subroutine. Because of this, each subroutine must be in a separate file and have its entry point as the first instruction of the file. Also, the name is restricted to eight characters.
Another restriction involves local variables. Subroutines called from the interpreted version must use the stack for any local variables. They cannot be declared using DW or DB because these are not relocated by XLINK.
To get around the limitations imposed by ".COM" files, XLINK uses a special type of library file called a "supervisor" file. The supervisor file contains the names of files to be linked. XLINK handles these files just as though their names had been typed on the command line.
The supervisor file does not contain the name of the main program, this must be entered on the command line. All file names in the supervisor file must have extensions, even the .I2L files. Paths can be used. File names are separated by either a plus sign, comma, space, tab, or a carriage return. The supervisor file itself must have the extension ".XLB". Here is an example of a supervisor file and its usage:
FILE1.I2L+FILE2.I2L C:\LIBRARY\DOADD.COM
XLINK PARENT.I2L+SUPER.XLB
The simplest use of supervisor files saves the trouble of typing many names on the command line. However, supervisor files can also include other supervisor files to form complex trees of library routines. |