Since Atlas Paper No. 29 was written the preliminary Hartran and BAS Loader system has been under development on the Manchester University Atlas and this has lead to the implementation of certain features which it is hoped will improve the system, together with some minor changes. These are described in this note under the corresponding section numbers where possible.
2.2 Routines of chapters with non zero numbers are loaded into the chapter region of store unless designated global in which case they are loaded into the global region.
Routines of chapter 0 are always loaded into the global region. Any routines declared public by a directive (see section 4) will also be loaded into the global region in chapter 0.
Note that if the mode of a routine has been defined as block then when the routine is loaded a message
BLOCK REQUESTED GLOBAL ASSIGNED
following the name of the routine is printed (no execution deletion) and the routine is loaded into the global region.
2.4 Library routines are usually loaded into the same region of store as the ordinary routines of the chapter have been loaded, except if declared to be of a higher mode (i.e. global).
2.5 Note that the global region of the store, which includes any chapter 0, is only written to magnetic tape if at least one chapter with non zero number has been loaded and therefore written to tape. Hence a job containing a single chapter 0 is not written to tape.
In the system array /CHAIN, the second half word of an entry contains one less than the number of blocks in the character position (i.e. X2-3).
3.2 Columns 49-72 are not examined by the loader and therefore could be used as an extension to the label field e,g, for recording date of compilation etc.
3.2 The markers in the Parameter Use Table and External Reference Table are now as follows:-
negative odd - end of entry negative even - end of table
This is in order that floating point zero will be detected as the end of the table in any extraordinary cases.
3.3 The check sum is always accumulated and an error occurs if the check sum is incorrect, unless the check sum is zero or the ignore check sum digit is punched.
Note that chapter region implies global region for chapter 0. Also global region is implied if block defined (see section 2).
3.4 Re-markers. See section 3.2, i.e. for even read odd and for odd read even. When assigning storage for a private or public array storage is in the global region always for arrays defined in a chapter 0, unless designated block.
3.5 The storage locations in the chapter and global regions assigned to arrays defined in the routine are set to floating point zero, (not cleared). Note that the block region will be cleared when HARTRAN is deleted.
If the expression is zero chapter 0 is introduced, the routines of which are loaded into the global region, and no writing to tape occurs In addition the maximum chapter storage parameter is therefore not amended and the chapter 0 entry point is preserved in a B register for use if needed by the executor routine.
Note that until the system library tape is implemented the first routine to appear after the first *CHAPTER directive must be the executor, if not previously loaded.
If the first *CHAPTER directive is missing then routines up to the next *CHAPTER, *ENTER or *END directive will be treated as being in Chapter 0.
*ENTER expression
In addition to the current storage parameters (B11, 13, 14, 19) being written to global locations 0 and 1, B23 which may contain the entry point to chapter 0 (if it has been loaded), is written to global location 2.0. These locations are private and cannot be overwritten by the loaded program.
Four parameters are set for use by the executor. They are
*RENAME rename list
Errors occur only if a is defined. If a is listed with negative length, indicating forward references to a, then, if b is defined, these forward references are filled in with the value of b; if b is undefined with negative length, the forward references to b are added to the forward references to a by joining the appropriate chains in the FRT.
If b is unlisted the rename is ignored and a message printed, but no deletion of execution occurs.
*LIST and *LISTG
These are two additional directives which have been implemented to assist in program development. The former lists all the chapter region into which routines have been loaded and the latter the global region. Each line will be of one of two formats i.e. :-
where D D1 D2 are location addresses in decimal, B B1 B2 B B^ Bp their equivalent in octal, F Ba Bm S the contents of a location as an instruction where the address S is in decimal and H and L are the octal representations of the high and low halves of the location.
4.3
(i) The routines can be preceded by *CHAPTER 0.
(iii) *CHAIN X, b should follow *READGLO x, y, z to specify the chain tape (x) to the executor and to position the tape at the beginning of the first chapter to be entered.
(iv) Chapter 0 need not be the last routine loaded since it is loaded into the global region which is always present.
(v) Note that if execution is required *END should be replaced by *ENTER or *ENTER x. The order of *CHAIN a, b, c and *READGLO d, e, f should be reversed. Similarly in (vi) and (vii).
Note If *READGLO is to be included in a job then it must ho the first directive to be interpreted by Hartran.
5.2 Add the following
(28) Executor missing. Prints NO EXECUTOR and deletes execution, program is then ended.
(29) Routine mode defined as block. Prints BLOCK REQUESTED -GLOBAL ASSIGNED, assigns storage in the global region. Execution is not deleted.